From 7fd35fdd26e06558aeb8f5fd611d63157b83c975 Mon Sep 17 00:00:00 2001 From: jgrosseo Date: Wed, 4 Apr 2012 12:16:55 +0000 Subject: [PATCH] optimization and bug fix in two track cut --- PWGCF/Correlations/Base/AliUEHistograms.cxx | 140 +++++------------- PWGCF/Correlations/Base/AliUEHistograms.h | 30 +++- .../DPhi/AliAnalysisTaskPhiCorrelations.cxx | 11 +- 3 files changed, 67 insertions(+), 114 deletions(-) diff --git a/PWGCF/Correlations/Base/AliUEHistograms.cxx b/PWGCF/Correlations/Base/AliUEHistograms.cxx index d37e7730358..bc36501f2ec 100644 --- a/PWGCF/Correlations/Base/AliUEHistograms.cxx +++ b/PWGCF/Correlations/Base/AliUEHistograms.cxx @@ -436,6 +436,12 @@ void AliUEHistograms::FillCorrelations(Double_t centrality, Float_t zVtx, AliUEH if (weight < 0) fillpT = kTRUE; + if (twoTrackEfficiencyCut && !fTwoTrackDistancePt[0]) + { + fTwoTrackDistancePt[0] = new TH3F("fTwoTrackDistancePt[0]", ";#Delta#eta;#Delta#varphi^{*}_{min};#Delta p_{T}", 100, -0.05, 0.05, 100, -0.05, 0.05, 20, 0, 10); + fTwoTrackDistancePt[1] = (TH3F*) fTwoTrackDistancePt[0]->Clone("fTwoTrackDistancePt[1]"); + } + // Eta() is extremely time consuming, therefore cache it for the inner loop here: TObjArray* input = (mixed) ? mixed : particles; TArrayF eta(input->GetEntriesFast()); @@ -526,6 +532,9 @@ void AliUEHistograms::FillCorrelations(Double_t centrality, Float_t zVtx, AliUEH if (twoTrackEfficiencyCut) { + // the variables & cuthave been developed by the HBT group + // see e.g. https://indico.cern.ch/materialDisplay.py?contribId=36&sessionId=6&materialId=slides&confId=142700 + Float_t phi1 = triggerParticle->Phi(); Float_t pt1 = triggerParticle->Pt(); Float_t charge1 = triggerParticle->Charge(); @@ -537,25 +546,41 @@ void AliUEHistograms::FillCorrelations(Double_t centrality, Float_t zVtx, AliUEH Float_t deta = triggerEta - eta[j]; // optimization - if (TMath::Abs(deta) < 0.02) + if (TMath::Abs(deta) < 0.05) { - Float_t dphistarmin = 1e5; - Float_t dphistarminabs = 1e5; + // check first boundaries to see if is worth to loop and find the minimum + Float_t dphistar1 = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, 0.8, bSign); + Float_t dphistar2 = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, 2.5, bSign); + + const Float_t kLimit = 0.06; - for (Double_t rad=0.8; rad<2.51; rad+=0.05) + Float_t dphistarminabs = 1e5; + Float_t dphistarmin = 1e5; + if (TMath::Abs(dphistar1) < kLimit || TMath::Abs(dphistar2) < kLimit || dphistar1 * dphistar2 < 0) { - Float_t dphistar = phi1 - phi2 - TMath::ASin(charge1 * 0.075 * bSign * rad / pt1) + TMath::ASin(charge2 * 0.075 * bSign * rad / pt2); - Float_t dphistarabs = TMath::Abs(dphistar); + for (Double_t rad=0.8; rad<2.51; rad+=0.01) + { + Float_t dphistar = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, rad, bSign); + + Float_t dphistarabs = TMath::Abs(dphistar); + + if (dphistarabs < dphistarminabs) + { + dphistarmin = dphistar; + dphistarminabs = dphistarabs; + } + } + + fTwoTrackDistancePt[0]->Fill(deta, dphistarmin, TMath::Abs(pt1 - pt2)); - if (dphistarabs < dphistarminabs) + if (dphistarminabs < 0.02 && TMath::Abs(deta) < 0.02) { - dphistarmin = dphistar; - dphistarminabs = dphistarabs; +// Printf("Removed track pair %d %d with %f %f %f %f %f %f %f %f %f", i, j, deta, dphistarminabs, phi1, pt1, charge1, phi2, pt2, charge2, bSign); + continue; } + + fTwoTrackDistancePt[1]->Fill(deta, dphistarmin, TMath::Abs(pt1 - pt2)); } - - if (dphistarminabs < 0.02) - continue; } } @@ -929,97 +954,6 @@ void AliUEHistograms::Reset() GetUEHist(i)->Reset(); } -void AliUEHistograms::TwoTrackEfficiency(TObjArray* tracks, TObjArray* mixed, Float_t bSign) -{ - // takes the input list and fills histograms to study two two-track efficiency effects - // fTwoTrackDistancePt[i] (i = 0 same, i = 1 mixed) - // - // the variables have been developed by the HBT group - // see e.g. https://indico.cern.ch/materialDisplay.py?contribId=36&sessionId=6&materialId=slides&confId=142700 - - if (!fTwoTrackDistancePt[0]) - { - fTwoTrackDistancePt[0] = new TH3F("fTwoTrackDistancePt[0]", ";#Delta#eta;#Delta#varphi^{*}_{min};#Delta p_{T}", 100, -0.05, 0.05, 400, -0.2, 0.2, 20, 0, 10); - fTwoTrackDistancePt[1] = (TH3F*) fTwoTrackDistancePt[0]->Clone("fTwoTrackDistancePt[1]"); - } - - // Eta() is extremely time consuming, therefore cache it for the inner loop here: - TArrayF eta1(tracks->GetEntriesFast()); - for (Int_t i=0; iGetEntriesFast(); i++) - eta1[i] = ((AliVParticle*) tracks->At(i))->Eta(); - - Int_t jMax = tracks->GetEntriesFast(); - if (mixed) - jMax = mixed->GetEntriesFast(); - - TArrayF eta2(jMax); - if (!mixed) - eta2 = eta1; - else - for (Int_t i=0; iGetEntriesFast(); i++) - eta2[i] = ((AliVParticle*) mixed->At(i))->Eta(); - - for (Int_t i=0; iGetEntriesFast(); i++) - { - AliVParticle* particle1 = (AliVParticle*) tracks->At(i); - Float_t phi1 = particle1->Phi(); - Float_t pt1 = particle1->Pt(); - Float_t charge1 = particle1->Charge(); - - for (Int_t j=0; jAt(j); - else - particle2 = (AliVParticle*) tracks->At(j); - Float_t phi2 = particle2->Phi(); - Float_t pt2 = particle2->Pt(); - Float_t charge2 = particle2->Charge(); - - if (pt2 > pt1) - continue; - -// Double_t dpt = TMath::Abs(pt1 - pt2); - Float_t deta = eta1[i] - eta2[j]; - Float_t detaabs = TMath::Abs(deta); - - // optimization - if (detaabs > 0.05 && (pt1 < 8 || pt1 > 15)) - continue; - - Float_t dphistarmin = 1e5; - Float_t dphistarminabs = 1e5; - - for (Double_t rad=0.8; rad<2.51; rad+=0.01) - { - Float_t dphistar = phi1 - phi2 - TMath::ASin(charge1 * 0.075 * bSign * rad / pt1) + TMath::ASin(charge2 * 0.075 * bSign * rad / pt2); - Float_t dphistarabs = TMath::Abs(dphistar); - - if (dphistarabs < dphistarminabs) - { - dphistarmin = dphistar; - dphistarminabs = dphistarabs; - } - } - - Float_t fillPt = pt2; - - // analyze region for IAA paper - if (pt1 < 8 || pt1 > 15) - fillPt = 0.25; - - if (!mixed) - fTwoTrackDistancePt[0]->Fill(deta, dphistarmin, fillPt); - else - fTwoTrackDistancePt[1]->Fill(deta, dphistarmin, fillPt); - } - } -} - Float_t AliUEHistograms::GetInvMassSquared(Float_t pt1, Float_t eta1, Float_t phi1, Float_t pt2, Float_t eta2, Float_t phi2, Float_t m0) { // calculate inv mass squared diff --git a/PWGCF/Correlations/Base/AliUEHistograms.h b/PWGCF/Correlations/Base/AliUEHistograms.h index c468cf3198c..125ea7a1c55 100644 --- a/PWGCF/Correlations/Base/AliUEHistograms.h +++ b/PWGCF/Correlations/Base/AliUEHistograms.h @@ -10,6 +10,7 @@ #include "TNamed.h" #include "AliUEHist.h" +#include "TMath.h" class AliVParticle; @@ -33,8 +34,6 @@ class AliUEHistograms : public TNamed void FillEvent(Double_t centrality, Int_t step); void FillTrackingEfficiency(TObjArray* mc, TObjArray* recoPrim, TObjArray* recoAll, Int_t particleType, Double_t centrality = 0); - void TwoTrackEfficiency(TObjArray* tracks, TObjArray* mixed, Float_t bSign); - void CopyReconstructedData(AliUEHistograms* from); AliUEHist* GetUEHist(Int_t id); @@ -90,6 +89,7 @@ protected: Int_t CountParticles(TList* list, Float_t ptMin); void DeleteContainers(); Float_t GetInvMassSquared(Float_t pt1, Float_t eta1, Float_t phi1, Float_t pt2, Float_t eta2, Float_t phi2, Float_t m0); + inline Float_t GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1, Float_t phi2, Float_t pt2, Float_t charge2, Float_t radius, Float_t bSign); static const Int_t fgkUEHists; // number of histograms @@ -126,4 +126,30 @@ protected: ClassDef(AliUEHistograms, 13) // underlying event histogram container }; +Float_t AliUEHistograms::GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1, Float_t phi2, Float_t pt2, Float_t charge2, Float_t radius, Float_t bSign) +{ + // + // calculates dphistar + // + + Float_t dphistar = phi1 - phi2 - charge1 * bSign * TMath::ASin(0.075 * radius / pt1) + charge2 * bSign * TMath::ASin(0.075 * radius / pt2); + + static const Double_t kPi = TMath::Pi(); + + // circularity +// if (dphistar > 2 * kPi) +// dphistar -= 2 * kPi; +// if (dphistar < -2 * kPi) +// dphistar += 2 * kPi; + + if (dphistar > kPi) + dphistar = kPi * 2 - dphistar; + if (dphistar < -kPi) + dphistar = -kPi * 2 - dphistar; + if (dphistar > kPi) // might look funny but is needed + dphistar = kPi * 2 - dphistar; + + return dphistar; +} + #endif diff --git a/PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.cxx b/PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.cxx index 2db04542a78..3e110ea95a1 100644 --- a/PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.cxx +++ b/PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.cxx @@ -650,13 +650,9 @@ void AliAnalysisTaskPhiCorrelations::AnalyseDataMode() ((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(1); if (fTwoTrackEfficiencyCut) - fHistos->FillCorrelations(centrality, zVtx, AliUEHist::kCFStepBiasStudy, tracksClone, 0, weight, kTRUE, bSign); + fHistos->FillCorrelations(centrality, zVtx, AliUEHist::kCFStepBiasStudy, tracksClone, 0, weight, kTRUE, kTRUE, bSign); } - // Two-track effect study - if (fTwoTrackEfficiencyStudy) - fHistos->TwoTrackEfficiency(tracksClone, 0, bSign); - // fill second time with SPD centrality if (fCompareCentralities && centralityObj) { @@ -664,7 +660,7 @@ void AliAnalysisTaskPhiCorrelations::AnalyseDataMode() if (centrality >= 0) fHistos->FillCorrelations(centrality, 2, AliUEHist::kCFStepReconstructed, tracksClone, 0, weight); } - + if (fFillMixed) { // event mixing @@ -708,9 +704,6 @@ void AliAnalysisTaskPhiCorrelations::AnalyseDataMode() { TObjArray* bgTracks = pool->GetEvent(jMix); - if (fTwoTrackEfficiencyStudy) - fHistos->TwoTrackEfficiency(tracksClone, bgTracks, bSign); - fHistosMixed->FillCorrelations(centrality, zVtx, AliUEHist::kCFStepReconstructed, tracksClone, bgTracks, 1.0 / nMix, (jMix == 0)); if (fTwoTrackEfficiencyCut) -- 2.43.0