ladamczy / STAR-Analysis

Repository for AGH-STAR analysis code
2 stars 0 forks source link

Wyznaczanie wydajności ToF metodą tag&probe #13

Open ladamczy opened 11 months ago

ladamczy commented 11 months ago

Przygotowując program do badania przypadków 3 ToF + 1 nie-ToF warto zacząć pisanie programu (to może być osobny projekt) do badania wydajności ToF.

Opisze główne kroki tej procedury (która moze jeszcze ulec zmianie):

wybieramy przypadki które maja 1 werteks i przynajmniej trzy sladu z ToF zmaczowane z tym werteksem (DCA < 3 cm) Teraz robimy petle po wszsytkich parach sladów stowarzyszonych z tym werteksem (DCA<3cm i sama ładunków 0) ale wtaki sposób że przynajmniej jeden jest z ToF (będziemy go nazywać tagiem) a drugi ślad jest probem . Jesli oba slady sa z ToF to mamy dwa przypadki (kazdy ze sladów jest raz tagiem a raz probem). Dla par które maja DCA(pomiędzu soba z algorytmu V0) < 1cm. histogramujemy ich masę niezmienniczą . Robimy dwa oaobne histogramy jeden gdy probe jest z ToF i druhi gdy jest bez ToF. Potem podam co dalej. To zalezy od tego czy tam będziemy cos widzieć czy nie.

f1pmpr commented 10 months ago

Ja się zastanawiam, czy w danych STAR skala energii śladów jest dobra? W naszych danych widać, że masa K0 jest systematycznie zawyżana o mniej wiecej jeden bin na plotach Pani Patrycji. Może należałoby te masy przeskalować o 0.996

Uważam też, że warto by najpierw robic fity do rozkladow w/ TOF, a nastepnie przy fitach do rozkladow w/o TOF utrzymac wartosc srednia Gaussa z fitow do w/ TOF.

Moja trzecia uwaga dotyczy prezentacji plotow. Niech Pani wróci do zwykłego opisu osi poziomej na rysunakch efficiency. Teraz nic nie widać, a dodatkowo nie ma potrzeby podawania przedziałów, bo każdy z łatwoscią sobie te przedzialy odczyta jak będzie chciał. Niech informacje z opisami rysunkow nie wychodza poza obręb rysunku (chodzi mi o \eta\in [...,...]) bo to pózniej będzie przeszkadzało w umieszczeniu rysunku na slajdach. W ogóle powinna Pani tak robić rysunki żeby każdy z nich było można umieścić na slajadach na prezentacji np. na STAR Collaboration meeting. Poza tym raczej nie pisze sie \eta\in [...,...] , tylko używa sie symboli < i mniejsze bądź równe.

ladamczy commented 10 months ago

Myślę że trudno ocenić tak mały problem ze skala energii na podstawie histogramów. Bardziej wiarygodna informacją jest wartość masy K0 z fitu. O ile sobie przypominam to tam nie było żadnych problemów nawet sugorowałem przyjęcie tego parametru z PDG i ustalenie w ficie. Może Pani to skomentować? Czy jak masa jest swobodna ta mamy zawsze zaniżona masę z fitu?

Moim zdaniem jesli faktycznie jest problem rzędu 0.996 to mozna myśleć i jakiejś poprawce do skali energii ale moim zdaniem jeszcze nie mamy ilościowego potwierdzenia tego efektu. Warto sprawdzić co mówi MC ale zlece to Panu Adamowi bo on obecnie nie robi nic technicznego.

Moim zdaniem wszystkie fity powinny mieć ustalona wartość masy K0(średniej Gaussa) pod warunkiem że nie widzimy systematycznych efektów w fitach gdzie masa nie jest ustalona. Pani Patrycjo prosze zrobić równeż ploty a) masy K0 b) szerokości Gaussa otrzymanych z fitów w funkcji pT, eta, ładunku. wtedy ocenimi czy i które parametry fitu można ustalić i na jakie wartości.

PatrycjaMalinowska commented 10 months ago

Masa jest swobodna, w załączniku przesyłam rokzład std i masy .

mass.pdf std.pdf

ladamczy commented 10 months ago

No to ja nie widze 0.5% problemu ale to wszystko jest na poziomie szerokości binow. Binowanie przeszkadza w ocenia czy średnia jest zgodna z PDG czy nie.

Prosze zrobić wykres zalezności masy i szerokości od pT i eta probu. Oraz stała linie masy K0 z PDG. Tak abyśmy mogli ocenić czy tutaj sa jakieś systematyczne efekty (odchyki od stalej wartości) czy nie. Teraz trudno to teraz ocenić. Prosze próbować czasem samej dopasować sposób prezentacji do informacji jaka chcemy uzysać. Tutaj pytamy czy mozna załozyć że masa i szerokość nie zależą od pT, eta, ładunku czy zależą? A jesli nie zależą to czy sa takie jak podaje PDG (dla masy K0). Czy Pani ploty odpowiadaja na takie pytania?

PatrycjaMalinowska commented 9 months ago

przesyłam pdf z rokładami dopasowanej średniej i szerokości gausa jako funkcje pt i eta. Na wykresach dodałam błędy pochodzące z fitu. Przesyłam również zipy z wszystkimi fitami. W wykresach ety odrzuciłam pierwszy i ostatni bin.

efficiency_as_a_function_of_pT_and_eta-4.pdf pTNegProbe.zip pTPosProbe.zip etaNegProbe.zip etaPosProbe.zip

ladamczy commented 9 months ago

Patrząc na średnia w funkcji eta to nie widze żadnego problemu ani istotnych odchyleń od PDG. Są problemy ze średnią w funkcji pT.

Moim zdaniem można to zrozumieć faktem że eta (kierunek) jest mierzony bardzo dobrze natomiast pT (pęd) ma dość duże rozmycie. To rozmycie detektorowe generuje korelacje między obciązeniem pędu a obciążeniu masy niezmienniczej. To wygląda tak że dla pT=0.75 mamy średnio tyle samo migracji pędu w góre i w dół i w efekcie dobrą masą niezmienniczą. Większość śladów z pT<0.75 ma zaniżony pęd i w efekcie zaniżona mase. Na odwrót jest dla pT>0.75. Myślę, ze MC pokaże ten sam efekt.

Co z tego wynika w praktyce:

  1. myślę ze problemu niedoszacowania pędu pionu w STAR nie ma.
  2. to co widzimy jest efektem korelacji pęd-masa
  3. dla liczenia wydajnosci fakt swobodnej masy nie ma znaczenia
  4. widać ze srednie dla bez ToFu są zgodne z tymi z ToF i myslę że może Pani wartość sfredniej w ficie bez ToF ustalić na wartość z fitu z ToF. Myślę ze to samo można zrobić w szerekością. Czyli dla bez ToF fitujemy tlko parametry tła oraz normalizację K0.
ladamczy commented 9 months ago

dobrzy by jeszcze sprawdzić jak wydajność ToF zalezy od czasu (fillu) ni i powtóryć tę analiże dla symulacji MC.

Cała ta praca jest potrzebna do tego aby zobaczyć czy jest rózmica miedzy danymi i MC. Jeśli nie będzie tp możemy korzystać do poprawek na ToF wyników z MC.

PatrycjaMalinowska commented 9 months ago

dodałam zależność od numeru fillu - pierwsze 9 punktów zawiera 20 różnych numerów fillów, a ostatni 5. Dla MC zrobię jeden pomiar dla całego zakresu, ze względu na małą liczbę zdarzeń.

efficiency_as_a_function_of_pT_and_eta-5.pdf

ladamczy commented 9 months ago

w zależności od napełnienia RHIC interesuje nas tylko zalezność czasowa. Moze Pani połączyć dodatnie i ujemne proby i policzyć wydajność średnią.

PatrycjaMalinowska commented 9 months ago

połączyłam histogramy z ujmenym i dodatnim probem.

Na ten moment wydajność TOF jest przedstawiona dla danych z preselekcji, czy powtórzyć analizę dla pełnych danych?

efficiency_as_a_function_of_pT_and_eta-6.pdf

PatrycjaMalinowska commented 9 months ago

Użyłam nowego MC oraz dodałam wydajność dla MC true.

Na poziomie true nałożyłam te same warunki co na dane - z wyłączeniem cięć DCA na kaony. Wydajność MC z poziomu truth dobrze zgadza się z danymi, poniżej 1 Gev, ale nie z MC tag and probe. Dla tag&probe dane i MC przechodzą tę samą selekcję z tą różnicą, że dane są wypełniane dla kilku histogramów masy w poszczególnych zakresach pT, a MC jest wypełniane do jednego wspólnego histogramu, tu w zakresie 0, 2.5 GeV.

posZNeg.pdf

f1pmpr commented 9 months ago

Na poziomie true nie powinno być żadnych cięć eksperymentalnych oprócz ogólnych cięć kinematycznych (pseudorapidity, pT) opisujących obszar w którym robimy pomiar. Ten rysunek jest bardziej przejrzysty niz poprzednie, ale wciaz nie rozumiem dlaczego Pani przeszla z robieniem rysunkow do Pythona. Rysunki z Pythona nie beda mogly byc uzyte w zadnej publikacji. Wszystkie rysunki musza byc w formacie Root.

PatrycjaMalinowska commented 9 months ago

mam wymóg 1 vertexu w odleglosci 80 cm od środka. Dodatkowo mam następujące cięcia: ((sqrt(pow(track->getDcaXY(),2) + pow(track->getDcaZ(),2)) < 3.0) and (abs(track->getEta()) < 0.9) and (track->getPt() > 0.2) and (track->getNhitsFit() >= 25) ) i w podwójnej pętli po pionach MC i trackach UPC sprawdzam zmatchowanie w eta-phi.

ladamczy commented 9 months ago

przypomne jedynie, że wydajność ToF liczymy względem wydajności TPC. Czyli akurat tutaj robimy wszystkie ciecia detektorowe licząc wydajność z poziomu true. Czyli sekwencja jest taka

selekcjonujemy piony w normalny sposób (wszystkie ciecia detektorowe jak w normalnej analizie) ale dodatkowo wymagamy aby taki pion w TPC był zmaczowany w przestrzeni eta-phi z pionem z poziomu true. Czyli mamy pewność że ślad w TPC jest prawdziwym pionem.

dla powyższej próbki sprawdzamy jak często jest ToF.

f1pmpr commented 9 months ago

To w takim razie nie bardzo rozumiem co Pani nazywa true przy liczeniu wydajnosci TOF, a mój komentarz odnosi sie do wydajnosci TPC - czyli tej liczonej wzgledem poziomu true.

ladamczy commented 9 months ago

true, czyli ślad w TPC jest napewno pionem true.

f1pmpr commented 9 months ago

OK - Pani Patrycja uzyla sformulowania poziom true piszac o MC, stad moja uwaga. Ale mam nadzieje, ze gdzies gdzie na etapie tych wydajnosci z MC bedzie uzywany "prawdziwy poziom true z MC" to tam bedziemy akceptowali wszystkie czastki spelniajace ogolne ciecia kinematyczne.

ladamczy commented 9 months ago

niska wydajność true dla duzych pT nie jest dobra. Cos tam jest źle.

Prosze najpierw wymagać aby slady TPC miały flagę kPrimary.

Drugie pytanie, czy dla wydajności w funkcji pT histogramuje Pani pT true czy pT zrekonstruowanego śladu.

Czy może Pani mi wskazać jak liczy Pani błąd na wydajność z prawa przenoszenia błędów?

PatrycjaMalinowska commented 9 months ago

dodałam flagę, ale nie ma dużej różnicy: posZNeg.pdf

tak liczę błąd dla T/(T+N) def error(T,N): a = np.sqrt(np.power(N/np.power((T+N),2)np.sqrt(T) ,2) + np.power(T/np.power((T+N),2)np.sqrt(N),2) ) return a

PatrycjaMalinowska commented 9 months ago

używam pędu zrekonstruowanego śladu

ladamczy commented 9 months ago

pytam o błąd bo te błędy na plotach na oko sa zbyt duże. Prosze może policzyć te błędy z fitu nawet jak chi2 nie jest idealne.

Być może duże pT sa zrekonstruowane jest bardzo źle. W sensie że duża część śladów z duzym pT to źle zrekonstruowane ślady które nie trafiaja w ToF i nie ma matchingu. Niech Pani zrobi ten sam plot ale w funkcji pT true.

ladamczy commented 9 months ago

czy dla MC tag-and-probe również liczy Pani błąd tak samo ? Czy z fitu ?

PatrycjaMalinowska commented 9 months ago

liczę w taki sam sposób

PatrycjaMalinowska commented 9 months ago

pytam o błąd bo te błędy na plotach na oko sa zbyt duże. Prosze może policzyć te błędy z fitu nawet jak chi2 nie jest idealne.

Być może duże pT sa zrekonstruowane jest bardzo źle. W sensie że duża część śladów z duzym pT to źle zrekonstruowane ślady które nie trafiaja w ToF i nie ma matchingu. Niech Pani zrobi ten sam plot ale w funkcji pT true.

Rozkład dla pT true - teraz przedostatni bin jest zgodny z danymi, a w ostatnim nie mam przypadków posZNeg.pdf

PatrycjaMalinowska commented 9 months ago

dodałam flagę, ale nie ma dużej różnicy: posZNeg.pdf

tak liczę błąd dla T/(T+N) def error(T,N): a = np.sqrt(np.power(N/np.power((T+N),2)np.sqrt(T) ,2) + np.power(T/np.power((T+N),2)np.sqrt(N),2) ) return a

Tutaj przekazywalam różnicę całek - fitu - tła w zakresie od 0.48 do 0.52 - teraz znormalizowałam przez szerokość binu

posZNeg.pdf

ladamczy commented 9 months ago

nier rozumiem co to znaczy "znormalizowałam przez szerokość binu" i jaki to moze mieć wpływ na wydajność/błąd ?

PatrycjaMalinowska commented 9 months ago

Używając TF1.Integral() dostaję wymiar 1*GeV - wartość liczbowa jest o dwa rzędy mniejsza niż suma wartości binów pomiędzy 0.48, a 0.52. Błąd liczę z funkcji jak wyżej.

ladamczy commented 9 months ago

nadal nie rozumiem. Fit był do histogramu (ilość przypadków) czy do gęstości (ilość przypadków podzielona przez szerokość binu)? A co Pani miała wcześniej (jak były duże błędy) ?

PatrycjaMalinowska commented 9 months ago

Fit był wykonany do liczby przypadków. W przypadku dużych błędów - użyłam signal.Integral(0.48,0.52)-bck.Integral(0.48,0.52) odpowiednio dla probe z TOF i bez TOF (signal,bck to TF1). Dla małych błędów do ich policzenia użyłam tych samych wartości, ale podzielonych przez szerokość binu.

ladamczy commented 9 months ago

moim zdaniem nie powinno się dzielić przez szerokośc binu. Jak ma Pani funkcje dopasowana do histogramu to jej całka odpowiada sumie przypadków w histogramie. Nic sie nie dzieli. Ale moze nadal czegoś nie rozumię?

ladamczy commented 9 months ago

Nie rozumiem dlaczego liczy Pani sygnał jako różnice między funckcja opisująca sume tła i sygnału a funkcja tła. Czy nie lepiej od razy jako całka z funkcji sygnału?

natomiast nadal sugeruje aby policzyła Pani błąd na eff. z błędów z fitu czyli z błędu na normalizacje. Nie wiem czy się rozumiemy: fituje Pani gauss czyli sygnał to Agaus . do tej pory brała Pani jako błąd sqrt( A całka z gaussa) a teraz prosze przyjąć błąd jako

błąd(A) * całka z gaussa

ladamczy commented 9 months ago

Ostatnim ranem użytym do embeddingu jest run 181 48 047 . Powyżej tego ranu jest tylko 60 ranów w analizie (na 2800)

Czy może Pani potwierdzić że ostatnie cztery grupy napełnien (gdzie nie ma embeddingu) to faktycznie rany > 181 48 047

A jesli tak to dlaczego tak mała grupa ranów tworzy az 4 grupy (połowe). Jakie było kryterium podziału napełnien na grupy?

ladamczy commented 9 months ago

Dodatkowo prosze przypomnieć nam dkładnie jakie miała Pani ciecia przy liczeniu wydajności metodą True

PatrycjaMalinowska commented 9 months ago

Przy tworzeniu grup napełnień, nie patrzyłam na numer runu, a na numer fillu. W pętli po przypadkach stworzyłam zmienną która zlicza różne numery fillow - jeżeli ta zmienna osiagnie wartosc 20, to jest zerowana i ponownie grupuje przypadki. Teraz widzę, że w MC początkowe eventy mają numer fillu zaczyna się od 207-- a w danych od 205---.

W metodzie True wymagałam: 1 vertexu o z(max) = 80 cm. Zewnętrza pętla po pionach: Wewnętrza pętla po trackach: Akceptuję tracki: DCA(R) < 3 cm, abs(eta) < 0.9, pT > 0.2, Nhitfit >= 25, kPrimary. Sprawdzam zgodność z eta i phi - wartość bezwzlędna różnicy dla obydwu wielkości mniejsza niż 0.1

ladamczy commented 9 months ago

w MC nie mamy wszystkich napełnień. Cala idea tego porównania jest taka aby punkty dla danych i MC odpowiadały dokładnie tym samym napełnieniom. Musi Pani znać zakresy napełnień w każdej grupie dla danych i tak samo pogrupowac MC. A moze lepiej odwrotnie grupuje Pani napełnienia dla MC i tak samo grupuje dane dodając dwie grupy dla danych : grupe napełnień przed pierwszym filem w MC i grupe napełńień po ostatnim filu w MC.

Zatem w metodzie true jesteśmy faktycznie obciążeni wymogie verteksowania. Prosze te metoda zmienić .

Żądamy aby true pion w zakresia abs(eta_true) < 0.9, pT_true > 0.2 i |production_vertex_true|<80 miał zmaczowany ślad w TPC ( bez patrzenia na kPrimary i DCA(R)) jak często jest ToF.

ladamczy commented 7 months ago

Tutaj też jeszcze problem nie jest zamknięty:

  1. Czy jednak wyniki nie sa obciążone przez tryger w danych. Im więcej śladów z ToF tym obciążenie mniejsze. Zatem prosze policzyć wydajność dla danych w dwóch niezależnych próbkach: a) 3 slady z ToF b) 4 lub więcej sladów z ToF

  2. Dlaczego w MC metoda tag&probe oraz true się nie zgadzają. Czy Pani zrobiła to o co prosiłem w ostatniej wymianie. Czyli: nie ma ciecia na werteks rekonstruowany ani ciecia na DCA_R. Mamy na poziomie detektorowym tylko ciecia na: abs(eta) < 0.9, pT > 0.2, Nhitfit >= 25 na poziomie true był stowarzyszony true pion w przestrzeni eta-phi i pT_true>0.2 i ciecia |production_vertex_true_z|<80 i |production_vertex_true_R|<3

PatrycjaMalinowska commented 6 months ago

Poniżej przesyłam wyniki dla pseudopospieszności Z podziałem na 3 i 4 TOF . W skrócie zastosowałam następujące cięcia:

tag & probe 1) wyselekcjonowanie tracków TPC:

Dla poziomu truth biorę przypadki: 1) abs(trueVtxR) < 3 and abs(trueVtxZ) < 80 and pT_true > 0.15 2) gdzie track TPC jest zmatchowany z true w eta-phi

PatrycjaMalinowska commented 6 months ago

Ostatnio wysłałam złe wyniki - mieszanka nowych i starych danych, spowodowana nadpisanym wczytywanym plikiem..

Dla selekcji jak powyżej nie mogę wydobyć kaonów - albo z powodu braku przypadków, a po zwiekszenie statystyki na przedział - zbyt dużym tłem.

Przesyłam pliki ROOT dla danych i MC w którym są przedstawione rozkłady - histogramy są opisane i ponumerowane - kolejn numer oznacza kolejny bin.

tof.zip

Zakresy binów:

double binsPt[7] = {0.15, 0.3, 0.5, 0.7, 0.9, 1.1, 1.5};
double binsEta[13] = {-1.2, -1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2};

Proszę nie patrzyć na histogramy zakończone MC.root

PatrycjaMalinowska commented 6 months ago

Mam pytanie dotyczące jednoczesnego matchowania czterech pionów true z trackami TPC do wyznaczenia wydajności cięć. Warunek na różnicę w eta i phi < 0.1 ma za małą rozdzielczość. Natomiast, w przypadku poszukiwania najmniejszej odległości eta-phi dla poszczególnych pionów true, istnieją przypadki, gdzie dla dwóch pionów true dostaję najmniejszą odległość dla tego samego śladu TPC.

W związku z tym sprawdzam wszystkie możliwe permutacje i wybieram przypadek dający najmniejszą sumaryczną odległość wszytskich pionów od tracków TPC. Nie jest to idealne rozwiązanie i zastanawiam się w jaki sposób odrzucić przypadek. Czy moze nie powinnam odrzucać na tym etpaie żadnego przypadku?

Przykładowo dopsowane piony: tpc true

ETA -1.01259 -1.10827 -0.12539 -0.0994402 -0.53886 -0.361533 0.90851 0.256543

PHI 1.59862 1.0878 0.922225 0.722014 1.78797 1.21535 2.76819 2.3151

inny: tpc true

ETA 1) -0.0967972 -0.679712 2) 0.450375 1.11644 3) 0.355143 0.370586 4) -0.456099 -0.390269

PHI -1.51838 -1.0005 -1.53399 -2.1022 1.47141 1.44683 1.5637 3.08408

w tym przypadku mam całkiem dobre dopasowanie w eta dla 4 pionu, ale dość dużą różnicę w phi.

Mam też przypadki o bardzo podobnych liczbach i przeciwnych znakach:

np. eta 0.57 i - 0.57 oraz phi 0.33 i -0.33

nie chciałbym dać cięcia na znak bo wted ryzykuję utratę dobrego dopasowanie dla śladów w poblżu 0,0

PatrycjaMalinowska commented 6 months ago

tu jeszcze pokazuje przypadek, gdzie dopasowanie nie zadziałało najlepiej: 0.625178 -0.834512 -0.107431 -2.63774 -0.519892 -0.512569 -0.0133091 -0.00536639 PHI 0.541026 0.798805 -0.101444 1.01898 -2.88013 -2.87698 2.37971 2.38133

PatrycjaMalinowska commented 6 months ago

spróbuję jeszcze odwrócić kolejność - najpierw zrobię dopasowanie, a później sprawdzę warunki na TOF i kinematykę

ladamczy commented 6 months ago

nie rozumiem problemu.

Mówimy że slady sa dopasowane jeśli

sqrt( (eta_true-eta)^2 + (phi_true-phi)^2) < 0.1

nie rozumiem co ma Pani na myśli mówiąc że dopasowanie nie zadziałało? A skąd Pani wie że powinno zadziałać ? Przecież tam sa fałszywe ślady.

Nie rozumiem również co znaczy "dać ciecie na znak" oraz "ryzykuję utrate dobrego dopasowania w poblizu 0

PatrycjaMalinowska commented 6 months ago

nie rozumiem problemu.

Mówimy że slady sa dopasowane jeśli

sqrt( (eta_true-eta)^2 + (phi_true-phi)^2) < 0.1

nie rozumiem co ma Pani na myśli mówiąc że dopasowanie nie zadziałało? A skąd Pani wie że powinno zadziałać ? Przecież tam sa fałszywe ślady.

Nie rozumiem również co znaczy "dać ciecie na znak" oraz "ryzykuję utrate dobrego dopasowania w poblizu 0

W przypadku wydajności TOF dla starych danych z nałożonymi cięciami na liczbę śladów TOF i wertkes, dopasowanie pionów true na podstawie cięcia abs (etaTrue-etaTrack) < 0.1 i abs (phiTrue - phiTrack) < 0.1 pozwalało mi dobrze dopasować ślady, co było oszacowane " na oko" .

Przez cięcie na znak miałam na myśli wymuszenie zgodności pomiędzy znakiem pionuTrue i tracku: np jeżeli etaTrue>0.0, to etaTrack też powinno być większe od zera - aby usunąć przypadki ko których pisałam wyżej,

Niemniej ten problem jest już rozwiązany - rozsądniej było po prostu wykonać dopasowanie przed cięciem na piony.

Obecnie sprawdzam wszystkie możliwe permutacje dla 4 pionów true dzięki czemu mogę dobrze dopasować piony do tracków TPC. Jednak pojawił się inny probem, dla liczby tracków 130 ponizsza pętla zawiesza program -  teraz szukam bardziej optymalnego rozwiązania.

    for (int i = 0; i < all.size(); i++)
    {
        for (int j = 0; j < all.size(); j++)
        {
            for (int k = 0; k < all.size(); k++)
            {

                for (int l = 0; l < all.size(); l++)
                {
                    if (i!=j and i!=k and i!=l and j!=k and j!=l and k!=l)
                    {
                        TLorentzVector pion1, pion2, pion3, pion4;

                        pion1.SetPxPyPzE(vPions[0]->Px(), vPions[0]->Py(), vPions[0]->Pz(), vPions[0]->Energy());
                        pion2.SetPxPyPzE(vPions[1]->Px(), vPions[1]->Py(), vPions[1]->Pz(), vPions[1]->Energy());
                        pion3.SetPxPyPzE(vPions[2]->Px(), vPions[2]->Py(), vPions[2]->Pz(), vPions[2]->Energy());
                        pion4.SetPxPyPzE(vPions[3]->Px(), vPions[3]->Py(), vPions[3]->Pz(), vPions[3]->Energy());

                        r1 = pow((all[i]->getEta() -pion1.Eta() ),2) + pow((all[i]->getPhi() -pion1.Phi() ),2);
                        r2 = pow((all[j]->getEta() -pion2.Eta() ),2) + pow((all[j]->getPhi() -pion2.Phi() ),2);
                        r3 = pow((all[k]->getEta() -pion3.Eta() ),2) + pow((all[k]->getPhi() -pion3.Phi() ),2);
                        r4 = pow((all[l]->getEta() -pion4.Eta() ),2) + pow((all[l]->getPhi() -pion4.Phi() ),2);

                         r = r1+r2+r3+r4;
                        distR.push_back(r);

                        vector <int> ind;
                        ind.push_back(i);ind.push_back(j);ind.push_back(k);ind.push_back(l);
                        indices.push_back(ind);
                        ind.clear();
                    }
                }
            }
        }
    }

    auto minElement = std::min_element(distR.begin(), distR.end());
    int minIndex = std::distance(distR.begin(), minElement);
ladamczy commented 6 months ago

równoczesne dopasowanie czterech cząstek na podstawie najmniejszej sumarycznej odległości nie jest moim zdaniem dobrym rozwiązaniem. To tylko pozornie rozwiązuje problem bo dalej możemy mieć sytuacje gdy mamy trzy bardzo dobrze dopasowane czastki i czwartą która jest przypadkowa ale suma odległości będzie akceptowalna. Mamy cztery pętle i ich ilość rosnie jak czwarta potega liczby śladów, ...

Do tych potrzeb jakie mamy dopasowanie może od czasu do czasu być złe dlatego wydaje mi się że trzeba to robić cząstak po cząstce. Oczywiście jak juz Pani wspomniała czasami jeden ślad mierzony jest dopasowany do dwóch śladów true. Dlatedo proponuje aby Pan zmodyfikowała dopasowanie w taki sposób że slad z poziomu mierzonego dopasowany do pierwszego sladu true jest usuwany z listy sladów do maczowania dla sladu true drugiego. Wtedy jeśli faktycznie jest tylko jeden ślad mierzony w pobluzy dwóch śladów true to drugi ślad true nie zostanie dopasowany i przypadek odrzucimy

ladamczy commented 6 months ago

jeszcze jedna uwaga:
jak ma Pani phi_true = pi a phi_mierzone = -pi (lub 0, 2pi) to żle Pani maczuje . Prosze używac metody w klasie TLorentzVector DeltaR która to poprawnie liczy.

PatrycjaMalinowska commented 6 months ago

Pozmieniam kod.

Jak już znajdę dopasowane pionyTrue i tracki TPC, to rozumiem, powinnam brać pod uwagę przypadki które mają 4 piony true zmatchowane z TOF i odpowiednim zakresie eta, pT, Nhit. |eta| < 0.9, pedsT > 0.15, Nhit > 20

W jaki sposób przedstawić wydajność cięć ? Ncut/Nnocut bez nałożonych innych cięć?

Czy wybrać leading i subleading kaon tak jak to robiłam dla danych dla przypadku nTof = 4?

ladamczy commented 6 months ago

Tak, przczym tniemy tylko na sladach mierzonych . Na sladach true żadnych cięć (nawet eta i pT) jedyne ciecia to maczowanie do poziomy mierzonego.

Narazie chcemy się jedynie przekonać czy mamy duzo przypadków takich jak wyzej które maja >=5 sladów z ToF. Nawet bez patrzenia na kaony. Potem przejdziemy do innych typów wydajnosci.

Teraz jednak widzę ze chyba wiekszość przypadków które chcielibysmy zachować będą miały veto w BBCL. Więc byc może to jest troch sprawa pozbawiona sensu. Chyba ze zacznie Pani analizowac rówwniż tryger NoBBCLveto

PatrycjaMalinowska commented 6 months ago

W powyższej analizie wyieram przypadki z 4 pionami, a dokładniej 2 pary pionów o przeciwnych znakach, które posiadają tę samą wartość GetFirstMother(), ale czasami mam przypadki 5 lub więcej pionami.

Przykładowy listing z 6 pionami:

ID, particle->GetFirstMother() 2212, 1 2212, 1 310, 1 310, 1 211, 2 -211, 2 2212, 3 -211, 3 13, 4 12, 4 11, 5 12, 5 12, 5 211, 3 -13, 6 12, 6 -11, 7 12, 7 12, 7 211, 8 -211, 8 11, 9 11, 10 2212, 11 2212, 11 11, 12

Czy taki przypadek zachować i brać pod uwagę pierwsze pojawiające się pary w pętli po upcEvt->getNumberOfMCParticles() ?

ladamczy commented 6 months ago

wydaje mi sie że pierwsze dwie pary są tymi które nas interesują. Może Pani ewnetualnie sprawdzić czy ich masa niezmiennicza (po zsumowania 4-pędów) jest zgodna z masą K0. Pozostałe pary powinny miec inną mase niezmiennicza.

Takie przypadki prosze zachować, chociaż wydaje mi sie że i tak nie bądą miały one maczingu z poziomem mierzonym bo wyraźnie cos tutaj było wytworzone w jakims oddziaływaniu. Pytanie na jakim etapie. Przed czy po rozpadzie K0.

PatrycjaMalinowska commented 5 months ago

Do policzenia wydajności:

1) wybieram 4 pierwsze piony z pętli po MCParticles, o ładunku równym 0 - parę tworzą piony o tej samej wartości GetFirstMother() i przeciwnym znaku.

2) 1SC: Jeżeli liczba takich pionów !=4 odrzucam przypadek

3) 2SC: odrzucam przypadki któere mają liczbę śladów TPC < 4 (tu moje pytanie: dlaczego mamy przypadki bez śladów TPC upcEvt->getNumberOfTracks() = 0 ?)

4) pętla po 4 pionach , a wewnątrz pętla po śladach TPC

5) 3SC: jeżeli liczba tracków TPC spełniająca powyższy wymóg < 4 - odrzucam przypadek - to występuje dla przypadków gdzie mam N śladów TPC, a N-1 ma ten sam ładunek.

  1. 4SC:Dla 4 tracków TPC sprawdzam zakres eta, pT, i Nhit i matchowanie z TOF
    • jeżeli wszystkie przypadki spełniają powyższy wymóg to przechodzę do liczenia wydajności

Nevt = całkowita liczba przypadków która przeszła powyższe cztery cięcia jest brana do liczenia wydajności.

Rozkłady: perf.pdf

HistCorr1.pdf HistDcaBeamlineLeadingKaon.pdf HistMassLeadingK0.pdf HistNumOfClusters.pdf HistDcaDaughtersLeadingKaon.pdf HistDiffProtonX.pdf HistNumTofTracks.pdf HistPointingAngleLeadingKaon.pdf HistDistR.pdf HistEtaCorrelation.pdf HistPtMiss.pdf HistKsi1.pdf HistKsiCorrelation.pdf HistHypoLengthLeadingKaon.pdf