Closed ladamczy closed 3 months ago
Czy mam używać tego co Patrycja napisała do korekcji pozycji wiązki? I czy runy i triggery których mam użyć też mają być dobrane jak w analizie Patrycji, czy mam zostawić tę część z mojej?
Oraz które z cięć na protony mam zostawić (po 1 w każdym RP, 4 płaszczyzny z 4, fiducial cuts, usunięcie kolizji elastycznych)?
Tak powinien Pan używać kodu Patrycji do korekty pozycji wiazki. Patrycja powinne te funkcji przenieść do star-upc. Nie wiem czy to jest zrobione ale zajme sie organizacją tego procesu.
Ciecia powinniśmy ustandaryzować. Czyli powinien Pan użyć tych samych cieć co Patrycja. Prosze skonsultować z nią co to dokładnie oznacza. Dodatkowo powinien Pan dodać usunięcie kolizji elastycznych.
Dodatkowo prosze dodać ploty zmiennych o których dyskutujemy w wątku o PYTHII8 czyli ln(xi1/xi2), log(xi1*xi2), plot 2D log(xi1) vs log(xi2)
Od ponad miesiaca nic tu nie ma. Tak nie może być.
Oprócz plotów o które prosiłem z końca pażdziernika prosze zrobić rozkłady krotoności i masy K0 z klasy StUPCV0 po selekcji sugerowanej w mailu.
Czy mam robić również te wykresy przed zastosowaniem ww. selekcji?
Tak. W analizie inkluzywnej interesuje nas również stosunek pzypadków z K0 do wszystkich przypadków. To jest bardziej precyzyjny pomiar bo wszelkie błedy systematyczne niezwiązane bezposrednio z K0 skracaja sie w stosunku.
return (beamMomentum - mP.Mag())/beamMomentum;
to nie może być > 1
Co najwyżej = 1 gdy mP.Mag()=0
Ale po cieciach fidutial nie ma możiwości aby mP.Mag()=0
Prosze to jeszcze raz sprawdzić i umiescić ploty które Pan pokazał tutaj na issu lub na indico.
Wykresy z ostatniego spotkania: AnaOutput_Inclusive_analysis_with_STUPCV0.pdf
Sprawdziłem również jak wyglądają anomalne wartości xi (powyżej 1 lub poniżej 0). Takich powyżej 1 nie zauważyłem, takie poniżej 0 natomiast już tak:
0.00109105 -0.00165733
0.0148772 -0.0103488
0.00608769 -0.00122727
-0.00260477 -0.00207523
0.000417886 -0.00126833
-0.0269015 0.0227016
0.00205721 -0.000170721
0.0037563 -0.00203455
0.069453 -0.00378334
-0.000178498 0.0310223
0.000767421 -0.00204469
O ile sądzę że większość tych przypadków gdzie tylko jeden proton z pary zyskał energię da się wyeliminować cięciem na kolizje elastyczne (chociaż dla mnie to dziwne jest że widać sporo takich których straty i zyski energii się sobie nie równają) to przypadki gdzie xi dla obu protonów jest ujemne są dla zagadką.
Zgaduję że to oznacza że protony zostały źle zrekonstruowane - czy mam takie przypadki odrzucać? Czy mam odrzucać przypadki w których suma xi obu protonów jest ujemna (czyli sumaryczna energia się zwiększyła)?
Sprawdziłem również jak wyglądają anomalne wartości xi (powyżej 1 lub poniżej 0). Takich powyżej 1 nie zauważyłem, takie poniżej 0 natomiast już tak:
0.00109105 -0.00165733 0.0148772 -0.0103488 0.00608769 -0.00122727 -0.00260477 -0.00207523 0.000417886 -0.00126833 -0.0269015 0.0227016 0.00205721 -0.000170721 0.0037563 -0.00203455 0.069453 -0.00378334 -0.000178498 0.0310223 0.000767421 -0.00204469
Zatem sam Pan widzi że Pana plot log(xiw) vs log(xiE) był zły nie ma xi>1
O ile sądzę że większość tych przypadków gdzie tylko jeden proton z pary zyskał energię da się wyeliminować cięciem na kolizje elastyczne (chociaż dla mnie to dziwne jest że widać sporo takich których straty i zyski energii się sobie nie równają) to przypadki gdzie xi dla obu protonów jest ujemne są dla zagadką.
Niech sie Pan przyjrzy temu co Pan zrobił dla PYTIA8 . Czy były protony z xi<0 ?
Nie było, bo w rzeczywistości każdy proton traci energie.
Przypadki z xi<0 oznaczaja tylko tyle że efekty detektorowe (rozdzielczość pozycji protonu) powoduja
że przypadku z xi_treu>0 migruja to xi_reco<0. Nie ma powodu aby ich (na tym etapie analizy) odrzucać.
Zgaduję że to oznacza że protony zostały źle zrekonstruowane - czy mam takie przypadki odrzucać? Czy mam odrzucać przypadki w których suma xi obu protonów jest ujemna (czyli sumaryczna energia się zwiększyła)?
Protony które maja xi_true = 0.001 a xi_reco=-0.001 jeszcze nie są złe. Prosze protonów z xi<0 nie odrzucać. Ale potrzebujemy rozkład xi aby zdecydowac gdzie ciąć.
Protonów z xi>1 nie ma, logarytm z xi ujemnego jest interpretowany jako NaN, który jest wyświetlany przez histogram jako overflow - po zastosowaniu cięcia na xi<0 (tylko do uzupełniania histogramów protonów) problem znikł (wycinany jest wtedy cały przypadek, tzn. oba protony, nawet jeśli jeden jest ok). Załączam wykresy log10(xi) dla obu gałęzi.
Jutro do południa zaimplementuję lepsze wyznaczanie wierzchołka, chciałbym się spytać natomiast czy w przypadku gdy nie ma kandydata na wierzchołek spełniającego tych dwóch cięć na DCADaughters i odległość od beamline, to czy taki przypadek odrzucamy czy bierzemy obecnie wyznaczony wierzchołek? I jeśli to drugie, to czy współrzędne XY poprawiamy za pomocą slope, czy ustawiamy takie jakie są wyczytane w pliku (bo zakładam że współrzędną z bierzemy z tempUPCpointer->getVertex(0)->getPosZ()
).
Nie jestem pewien, czy nie popełniłem gdzieś błędu, ale dwa warunki wzięte z prezentacji
bool K0test3 = tempParticle->pointingAngleHypo()>0.925;
bool K0test4 = tempParticle->DCABeamLine()<1.5;
jeśli nie są ignorowane, kompletnie negują wykrywane K0. Sprawdziłem ich wartości i obie funkcje (pointingAngleHypo
i DCABeamLine
) zwracają NaN.
Uwagi do wszystkich postów po kolei:
Z NaN się uporałem - okazało się że program czyta względne ścieżki do plików od poziomu folderu "home" zamiast od pozycji jego samego. Po korekcie nie mam przypadków z NaN. Przesyłam w załączeniu wygenerowane wykresy (13 i 14 to Xi odpowiednio wschodnie i zachodnie w obszarze anomalnym, tzn. Xi<0).
AnaOutput_Inclusive_analysis_with_STUPCV0.pdf
Punkt 2 - chodzi mi o to, że w 1168 przypadków druga para (ta, która ma stać się collision vertex) nie spełnia dwóch wymaganych warunków. Czy w takim przypadku mam ją zignorować całkowicie, użyć PV z danych, z poprawą z pliku csv?
Nie rozumim jak problem ze ścieżkami do plików moze wygenerować NaN dla pewnych zmiennych a dla innych zmiennych nie. Ale nie ma to juz znaczenia.
Rozkłady xi (strony 13 i 14) prosze narysować w pełnym zakresie a nie obinać na xi<0.002. Czyli od -0.05 do + 1.0. Tam się spodziewmay Gaussa o średniej 0 + opadający ~wykładniczo rozkład po stronie dodatnich xi. Interesuje nas szerokość tego Gaussa o średniej 0. Potrząc tylko na strone ujemną trudno go oszacować ale prawdopodobnie jest okolo 0.002 . Taka jest prawdopodobnie rozdzielczość pomiaru xi.
punkt 2 . To niemożliwe aby tak było. Gdzieś musi być błąd. Czy kod w repozytorium jest aktualny? Prosze mi wskazać kawałek kodu gdzie selekcjonuje Pan slady do drugiej pary.
Funkcja Patrycji dla pustych wartości daje wartość NaN, a że próbowałem odczytać z pliku którego program nie widział (ze względu na złą ścieżkę), wartości były zwracane puste.
Kod który testuje drugą parę zaczyna się tutaj: https://github.com/ladamczy/STAR-Analysis/blob/034943e44436833d30a07ddadfaa6ffc824e3956/Inclusive_Analysis/star-upc/src/master_deg_analysis/Inclusive_analysis_with_STUPCV0.cxx#L184
dodałam komentarz, że trzeba uważać na ścieżkę
Rozumiem, że te przypadki sa po jakiejś preselekcji. Prosze o link do kodu (lub opis) jaka była preselekcja i prosze sprawdzić czy vector_Track.size() jest faktycznie zawsze =4
Prosze zrobić rozkłady vertex_pair->dcaDaughters() oraz vertex_pair->DCABeamLine() aby sprawdzić jakie te wielkosci maja rozkłady moze to pomoże w ocenie dlaczego nie ma żadnego przypadku z kandydatem na vertes_pair.
Dodatkowo kandydat na K0 powinien się składać ze sladów o przeciwnych znakach. Obecnie akceptuje Pan również pary o tych samych znakach.
Preselekcja jest w plikach Inclusive_Analysis/star-upc/src/master_deg_analysis/preselection1 oraz 2, i jest analogiczna do tej obecnie używanej przez Patrycję Sprawdziłem wielkość vector_Track.size() - jest stale równa 4 Ta linia gearantuje że znaki w K0będą różne: https://github.com/ladamczy/STAR-Analysis/blob/63b4e037e11a08ec141b7c6168aa022a1ad9a6f1/Inclusive_Analysis/star-upc/src/master_deg_analysis/Inclusive_analysis_with_STUPCV0.cxx#L150
Rozkłady obu wielkości vertex_pair: DCABeamLine.pdf dcaDaughters.pdf Wyglądają oba na eksponentę, zakładam że to dobrze?
Rozkłady vertex_pair wyglądaja dobrze. Czy to sa przypadki w których mamy juz K0_pair? Twierdził Pan że jak mamy K0_pair to juz nie mamy vertex_pair spełniających warunki DCA<1.5 cm. Chciałbym to zobaczyć. To znaczy rozkłady DCA vertex_pair pod warunkime że mamy juz parę K0_pair.
To są już wykresy z parą K0 - przypadki bez niej są pomijane. Na 11698 obecnych par K0, 1168 z nich nie ma pary vertex_pair, gdyż pozostałe 2 piony nie spełniają warunków. W takim wypadku podstawiam jako vertex tą wartość: https://github.com/ladamczy/STAR-Analysis/blob/f218df1fb89536e37dd5a94a4f6d400aac67e1a7/Inclusive_Analysis/star-upc/src/master_deg_analysis/Inclusive_analysis_with_STUPCV0.cxx#L197 gdzie pierwsze to X oraz Y odczytane z pliku.
czyli 10 000 przypadków ma zarówno K0_pair oraz vertex_pair. To źle Pana zrozumiałem. Prosze te 1168 K0 odrzucić. Prosze narysować decayLengthHypo obu par. Histogram 2D masa_k0 vs. decayLengthHypo dla K0_pair Różnice pozycji vrt_z obu par.
Zrobione, są to 4 ostatnie histogramy w pliku AnaOutput_Inclusive_analysis_with_STUPCV0.pdf
Wszystkie poniższe wykresy są jeszcze z żądaniem 1 vertexu:
Zwiększyłem ilość binów 10-krotnie (0.0005/bin):
Na wykresie 2D te piki tworzą taką jakby wysepkę blisko 0:
U siebie w pracy zrobiłem sumy pędów poprzecznych, ale też zrobiłem na wszelki wypadek wykres różnicy kątów theta:
Sądzę że cięcia na pęd poprzeczny by pasowały lepiej - w obu "oczkach" o wyższej intensywności jest ok. 1000 przypadków, ale to z pędem jest wyraźniejsze.
bo powinniśmy rysowac sume katów a nie róznice wtedy wnioski z analizy katowej i pedowej będa takie same.
Natomiast jest jakiś problem z rekonstrukcja xi ten pik powinien być w xi=0 a jest jakieś przesuniecie szczególnie widoczne po stronie E.
Ciecie antyelastyczne powinno być na przypadki które równocześnie sa w piku xiE=xiW=0 oraz py=px=0 Trzeba by wziąść +- 3 sigma wokół 0 oczywiście w przypadku xi trzeba wziąśc 3 sigma wokół środka tego obszaru o wiekszej aktywności. Być może trzeba wprowadzić poprawki addytywne do xi tak aby ten pik był w 0.
Sam fit na Xi na wykresie 2D wygląda dobrze:
Ale przy próbie pokazania fitu na rzutach na osie pojawiają się dwa problemy:
Jeden to to, że dalsza część wykresu Xi "zasłania" ten pik, który chcę wydielić. Drugim jest problem skalowania wysokości funkcji fitowanej na wykresie 2D do rzutu na 1D. Pierwszy problem zakładam że można obejśc po prostu robiąc rzuty tylko tego piku do którego dopasowujemy. Nie do końca wiem natomiast jak się zabrać do drugiego - pomysły jakie mam to np. w jakiś sposób przeskalować przez np. stosunek wysokości najyższych binów, bądź dopasować osobno gausjan do takiego wyciętego fragmentu, sprawdzić jego wysokość i wtedy to użyć? Te wykresy są robocze, do prezentacji je doszlifuję wizualnie.
jesli fit 2D wyglada dobrze i chi/ndf jest dobre to nie ma powodu takiemu fitowi nie ufać. Jeden komentarz jaki miałem to ilość binów powinna być większa bo wydaje mi się że jesteśmy blisko sutuacji gdy szerokość gaussa to jeden bin. a to nie jest dobre.
Wydaje mi sie że nie sugerowałiśmy pokazania fitu na rzutach , tylko zrobienie fitu do rzutów to cos innego. Oczywiście fit do rzutu niewiele pomoże (jak widac na obrazku) natomiast fit do rzutu tylko obszaru gdzie jest pik z pewnościa pomoze i pewnie rozwiąże równiez problem normalizacji. Ten problem normalizacji pewnie pochodzi z tego ze rysując fit 2D nie powinien Pan rzutowac tej funkcji tylko wycałkowac po drugim wymiarze.
Spróbowałem dopasować pojedynczego gaussa do wykresu 2D xi oraz sumę dwóch do wykresu pędów poprzecznych, dla dwóch różnych ilości binów (czerwony okrąg wyznacza granicę 3sigma): p1.pdf p2.pdf Xi1.pdf Xi2.pdf Dla rzadszych binów sprawdziłęm również jak wygląda wykres masy K0 po odjęciu ww. zderzeń elastycznych: K0.pdf Obawiam się że przy tych dopasowaniach te cięcia nie są zbyt skuteczne (chociaż same piki na wykresach 1D xi są ładnie usuwane): XiW XiE Czy mam dopasowywać wielkość binów tak, żeby zbliżyć chi2/ndf do 1 czy raczej np. kombinować z dodaniem do gaussa jakiegoś tła w postaci wielomianu dwóch zmiennych?
Prosze juz nie tracić czasu na te fity. Ich jakość nigdy nie będzie dobra bo nie wiemy jak wygląda rozkład poza pikiem xi~0 i nie ma sensu go modelować bo to nie jest istotne na obecnym etapie
Lepiej powtórzyć fity do danych zero-bias gdzie będziemy mieli właściwie tylko przypadki elastyczne. Nie wiem jaka była motywacji fitu do sumy dwóch gaussow? Ale zostawmy to i przejdżmy do analizy danych zero-bias.
Już to wstępne ciecie antyelastyczne spełnia swoje zadanie. Wycinamy przypadki z xi których nie widzimy w MC. Prosze się nie martwić ze wycinamy troche K0. Bo to sa złę K0. To przypadkowa koincydencja protonów w RP i K0 w TPC. To jest wlaśnie tło które chcemy odrzucić.
Tutaj dobrze by zrobić porównanie z poziomem true z PYTHIA8 rozmywając xi_true o 0.002 .
Oraz rozszerzyć analize na inne kanały
No i trzeba zacząć patrzeć na Lamba, LmbdaBar
Patrzenie na Lambdę i K0 wprowadzić przez sprawdzenia czy dane cząstki są w obrębie 3sigma dla danego rodzaju (w kolejności sprawdzania elektron, kaon, proton, pion) czy w jakiś inny sposób?
Na poczatek sugeruje aby nie patrzeć wogóle na identyfikacje cząstek. Czyli dla K0 zakładamy że obie czastki to piony Dla Lambda zakładamy ze dodatnia to proton a ujemna to pion Dla Lambdabar zakładamy że dodatnia to pion a ujemna to (anty)proton
Identyfikujemy K0 i Lambdy tylko na podstawie rozkładu masy niezmienniczej pary.
Jeśli się okaże że jednak tło jest zbyt duże to możemy nałozyć warunek +- 3 sigma na każdą z czastek. Czyli np. dla Lambda sprawdzamy że cząstka dodatnia ma +-3 sigma_proton a ujemna +-3 sigma_pion Podobnie dla Lambdabar i K0.
Jesli nadal tło będzie zbyt duże to możemy sprawe bardziej komplikować i np. szukając protonu możemy nie tylko żądać +-3 sigma_proton ale również że nie jest pionem abs(sigma_pion)>3 .
Ale tak jak napisałem na poczatku lepiej nie patrzeć wcale na prawdopodobieństwa że czastka jest taka a nie inna.
Niech Pan zacznie od minimalnej selekcji:
Po każdej stronie jeden i tylko jeden proton z 0.005<xi< 0.08 (<0.2 dla trgera bez weta BBL)
Ciecia antyelestyczne jak jak wynika z analizy zero-bias
Przynajmniej dwa slady z ToF w zakresie pt,eta, nhits jak w analizie Patrycji
Dla takiej próbki szukamy K0 z cieciami DCAbeamline, DCAduaghters,decaylenghthHypo and cos(poinitng angle) jak w analizie Patrycji , oba slady z ToF
Robimy rozkład masy niezmienniczej pary w szerokim zakresie masy (jak w analizie Patrycji)
Jak Pan to będzie miał to pójdziemy dalej (jako input do V0 findera prosze przyjąć vertex=0,0,0
Odnośnie cięć na xi: dobrze rozumiem że afterburner powinienem stosować przed tymi cięciami?
tak, na poczatku afterburner potem jakiekolwiek ciecia.
Przy "dodatkowych śladach" chodzi o K0 poza wąskim zakresem masy czy o piony które je tworzą? Oraz czy do poprawek też mam brać vertex jako 0,0,0?
Przez "ślady" rozumiem cząstki naładowane mierzone w TPC. "Dodatkowe ślady" to wszsytkie slady w TPC (po cieciach i znaczowane z ToF) pomniejszone o ilość pionów które tworzą K0 w wąskim zakresie masy. Generalnie proces który badamy to: p+p-> p+K0+X+p lub p+p-> p+nK0+X+p przy produkcji n K0. Co możemy powiedzieć o stanie X? Jaka jest krotność sladów w tym stanie X? Czy wierzchołek stanu X pokrywa sie z wierzchołkiem produkji K0, ...
OK - wstępne wyniki (na niecałej próbce) będą wieczorem, z jakiegoś pwoodu analiza zajmuje znacznie dłużej niż przypuszczałem
Przy produkcji nK0 gdy mamy powiedzmy 2 zrekonstruowane K0 posiadające jeden wspólny ślad, czy wprowadzamy jakiegoś rodzaju selekcję np. na podstawie odległości od masy tablicowej K0, czy póki co ten problem pomijamy?
Teraz prosze przyjąć tę parę która ma mniejsze DCADaughters .
Natomiast w przyszłości trzeba pomysleć o jakimś cieciu które wymusi pewna isolację K0 od reszty sladów. Generalnie jeśli mamy trzy ślady które tworzą dwójke kandydatów na K0 to znaczy że one najprawdopodobnie nie sa K0 i obu kandydatów trzeba odrzucić. Do tego problemu wrócimy jako oddzielne issue bo to nie jest trywialne.
Rozkład masy par (wszystkich) w szerokim zakresie mam, rozkładu wąskiego nie mam, bo z jakiegoś powodu wypełnia histogram zerami, naprawię to jutro
Niepokoi mnie że pik nie jest w dobrej pozycji, spróbuję jeszcze sprawdzić czy po usunięciu korekt do nachyleń wiązki (do wyliczenia używałem getVertex(0), chyba że też go powinienem zamienić na (0,0,0)?) coś się zmieni
pik jest przesuniety jest zbyt szeroki i zbyt niski. Może mi /pan wskazać w kodzie gdzie Pan wypełnia ten histogram?
tempParticle->decayLength() -> tempParticle->decayLengthHypo()
decayLength używa werteksu z zewnatrz (0,0,0) decayLengthHypo() używa werteksu produkcji K0 policzone wewnatrz klasy StUPCV0 jako punkt DCA od beamlinu. Używamy decayLengthHypo()
Po drugie ostatni parameter konstruktora K0 okresla czy stosujemy przybliżenie liniowe czy nie. Prosze zmienić true na false.
Poprawiło się:
Sortowanie K0 ze względu na DCAdaughter nadal nie działa, ale dzisiaj powinienem je naprawić
Czy to jest pełna statystyka?
Oprócz rozkładu krotności K0 ( w wąskim zakresie masy) prosze pomysleć o plotach:
rezygnujemy z cięc nz DCAxy, DCAz . Zostaje |eta|<0.9 i pT>0.2
Szukamy pary śladów o przeciwnych znakach w oknie masy(szerokim) K0. Przy kilku parach w oknie masy wybieramy pare bliższą masy K0. Druga para tworzy PV (primary werteks) bez żadnych warunków.
Interesuja nas rozkłady:
masy K0 w szerokim zakresie masy dca(pipi)K0 , R K0 w wąskim zakresie masy dca(pipi)PV , R PV pod warunkiem że druga para (K0) w wąskim zakresie masy. Odległość między PViKO dla przypadków w wąskim zakresie masy K0.