1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
3 void SetupEventCuts(AliDielectron *die, Int_t cutDefinition);
4 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
5 void SetupV0Cuts( AliDielectron *die, Int_t cutDefinition);
6 void SetupPairCuts( AliDielectron *die, Int_t cutDefinition);
8 void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition);
9 void SetEtaCorrection(AliDielectron *die);
11 TString names=("NANO");
14 TObjArray *arrNames=names.Tokenize(";");
15 const Int_t nDie=arrNames->GetEntries();
18 TString list = gSystem->Getenv("LIST");
20 AliDielectron* ConfigJpsi_nano_PbPb(Int_t cutDefinition, Bool_t hasMC=kFALSE)
23 // Setup the instance of AliDielectron
27 isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
30 TString name=Form("%02d",cutDefinition);
31 if (cutDefinition<arrNames->GetEntriesFast()) name=arrNames->At(cutDefinition)->GetName();
32 printf(" Adding %s%s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?" MC":""),name.Data(),list.Data());
35 AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("%s",name.Data()));
38 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
39 SetupEventCuts(die,cutDefinition);
40 SetupTrackCuts(die,cutDefinition);
41 // SetupV0Cuts(die,cutDefinition); // switch off for nanoAODs??
42 // SetupPairCuts(die,cutDefinition);
44 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MISC vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
46 //SetEtaCorrection(die); //no eta corrction
50 // else die->SetPreFilterUnlikeOnly();
51 //die->SetPreFilterAllSigns();
53 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv OUTPUT vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
55 InitHistograms(die,cutDefinition);
63 //______________________________________________________________________________________
64 void SetupEventCuts(AliDielectron *die, Int_t cutDefinition)
67 // Setup the event cuts
70 AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","eventCuts");
71 if(!isESD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
72 eventCuts->SetRequireVertex();
73 eventCuts->SetMinVtxContributors(1);
74 // eventCuts->SetVertexZ(-10.,+10.);
75 eventCuts->SetCentralityRange(0., 90.);
77 die->GetEventFilter().AddCuts(eventCuts);
81 //______________________________________________________________________________________
82 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
85 // Setup the track cuts
88 Bool_t hasMC=die->GetHasMC();
91 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
92 die->GetTrackFilter().AddCuts(cuts);
94 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv FILTER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
95 // AOD track filter (needs to be first cut to speed up)
96 AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
97 trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual);
98 // trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqualSPDany);
99 // trkFilter->SetMinNCrossedRowsOverFindable(0.6);
101 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TRACK CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
102 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
103 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
105 varCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 1e30);
106 varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
107 varCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0);
108 varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
109 // trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
112 varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
113 varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
114 varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
115 varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.000001,1e30, kTRUE);
116 trkCuts->SetRequireITSRefit(kTRUE);
117 trkCuts->SetRequireTPCRefit(kTRUE);
119 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
120 // AliDielectronVarCuts *pidVarCuts = new AliDielectronVarCuts("varPIDCuts","varPIDCuts");
121 AliDielectronPID *pidCuts = new AliDielectronPID("PIDCuts","PIDCuts");
123 // pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE);
124 // pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE, AliDielectronPID::kIfAvailable);
126 // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.0,4.3); // when eta correction OFF (LHC11h) [-1.5,+3.]
127 pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-2.6,4.7); // when eta correction OFF (LHC10h) [-2.0,+3.]
128 // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE);
129 // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
131 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MC PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
132 AliDielectronVarCuts *pidCutsMC = new AliDielectronVarCuts("PIDCutsMC","PIDCutsMC");
133 pidCutsMC->SetCutType(AliDielectronVarCuts::kAny);
134 pidCutsMC->SetCutOnMCtruth(kTRUE);
135 pidCutsMC->AddCut(AliDielectronVarManager::kPdgCode, -11., -11.);
136 pidCutsMC->AddCut(AliDielectronVarManager::kPdgCode, +11., +11.);
138 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TENDER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
139 // exclude conversion electrons selected by the tender
140 AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
141 noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
143 // activate the cut sets (order might be CPU timewise important)
145 // cuts->AddCut(pidCutsMC);
148 if(!isESD) cuts->AddCut(trkFilter);
149 cuts->AddCut(varCuts);
150 cuts->AddCut(trkCuts);
151 cuts->AddCut(pidCuts);
152 //cuts->AddCut(pidVarCuts);
153 //cuts->AddCut(noconv);
159 //______________________________________________________________________________________
160 void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
166 // Quality cuts (add the gamma filter to the cut group)
167 TIter next(die->GetTrackFilter().GetCuts());
168 AliAnalysisCuts *cuts;
169 while((cuts = (AliAnalysisCuts*)next())) {
170 if(cuts->IsA() == AliDielectronCutGroup::Class()) break;
173 AliDielectronV0Cuts *gammaV0Cuts = new AliDielectronV0Cuts("IsGamma","IsGamma");
174 gammaV0Cuts->SetPdgCodes(22,11,11);
175 gammaV0Cuts->SetDefaultPID(16);
176 gammaV0Cuts->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.02), 1.0, kFALSE);
177 gammaV0Cuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0, kFALSE);
178 gammaV0Cuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25, kFALSE);
179 gammaV0Cuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0, kFALSE);
180 gammaV0Cuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05, kFALSE);
181 gammaV0Cuts->AddCut(AliDielectronVarManager::kM, 0.0, 0.05, kFALSE);
182 // gammaV0Cuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1, kFALSE);
183 gammaV0Cuts->AddCut(AliDielectronVarManager::kArmPt, 0.0, 0.05, kFALSE);
184 // gammaV0Cuts->AddCut(AliDielectronVarManager::kArmAlpha, -0.35, 0.35, kFALSE); // not sure if it works as expected
185 gammaV0Cuts->SetExcludeTracks(kTRUE);
186 gammaV0Cuts->Print();
188 // const Double_t |cutAlphaG| < 0.35; && const Double_t cutQTG < 0.05;
189 // const Double_t |cutAlphaG2|[2] = {0.6, 0.8}; && const Double_t cutQTG2 < 0.04;
192 ((AliDielectronCutGroup*)cuts)->AddCut(gammaV0Cuts);
194 die->GetTrackFilter().AddCuts(gammaV0Cuts);
197 //______________________________________________________________________________________
198 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
201 // Setup the pair cuts
204 // conversion rejection
206 AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
207 gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut);
208 // die->GetPairPreFilter().AddCuts(gammaCuts);
210 // rapidity selection
212 AliDielectronVarCuts *rapCut=new AliDielectronVarCuts(Form("|Y|<%.1f",yCut),Form("|Y|<%.1f",yCut));
213 rapCut->AddCut(AliDielectronVarManager::kY,-1.*yCut,yCut);
214 die->GetPairFilter().AddCuts(rapCut);
218 //______________________________________________________________________________________
219 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
222 // Initialise the histograms
224 Bool_t hasMC=die->GetHasMC();
226 //Setup histogram Manager
227 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
229 //add histograms to event class
230 histos->AddClass("Event");
231 histos->UserHistogram("Event","","", 100, 0.0, 100.0, AliDielectronVarManager::kCentrality);
232 histos->UserHistogram("Event","","", 300,-15., +15.0, AliDielectronVarManager::kZvPrim);
233 // candidates monitoring
234 histos->UserProfile("Event","","", AliDielectronVarManager::kTracks, 100,0,100., AliDielectronVarManager::kCentrality);
235 histos->UserProfile("Event","","", AliDielectronVarManager::kPairs, 100,0,100., AliDielectronVarManager::kCentrality);
237 die->SetHistogramManager(histos);
240 //______________________________________________________________________________________
241 void SetEtaCorrection(AliDielectron *die) {
243 if (AliDielectronPID::GetCentroidCorrFunction()) return;
247 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv DATA vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
248 if( !die->GetHasMC() ) {
249 // 2-dimensional eta correction for the centroid of electron sigmas
250 fCntrdCorr = new TF2("fCntrdCorr", "[0] + [1]*y + [2]*y*y + [3]*TMath::Power(y,3) + [4]*TMath::Power(y,4) + [5]*TMath::Power(y,5) + [6]*TMath::Power(y,6) + [7]*x",
251 //0.0, 3000.0, -0.9, +0.9); // Nacc
252 0.0, 90.0, -0.9, +0.9); // centrality
253 // fCntrdCorr->SetParameters(0.723106, 0.23958, -6.31221, -0.687976, 15.912, 0.579609, -11.6901, -0.000354381); // Nacc
254 fCntrdCorr->SetParameters(+0.149002, +0.214644 , -6.034930, -0.529588, +14.97902, +0.402640, -10.890027, +0.011248); // centrality
255 // 1-dimensional eta correction for the width of electron sigmas
256 // fWdthCorr = new TF1("fWdthCorr", "pol2", 0.0, 3000.0); // Nacc
257 // fWdthCorr->SetParameters(1.06108, 0.000217804,-5.80291e-08);
258 fWdthCorr = new TF1("fWdthCorr", "pol2", 0.0, 90.0); // centrality
259 fWdthCorr->SetParameters(+1.290755, -0.005261, +0.000021);
262 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MONTE CARLO vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
263 // 2-dimensional eta correction for the centroid of electron sigmas
264 fCntrdCorr = new TF2("fCntrdCorr", "[0] + [1]*y + [2]*y*y + [3]*TMath::Power(y,3) + [4]*TMath::Power(y,4) + [5]*TMath::Power(y,5) + [6]*TMath::Power(y,6) + [7]*x",
265 0.0, 3000.0, -0.9, +0.9);
266 fCntrdCorr->SetParameters(+0.378611, -0.070831, -3.076778, +0.121977, +8.576097, +0.113009, -5.001368, -0.000181);
268 // 1-dimensional eta correction for the width of electron sigmas
269 fWdthCorr = new TF1("fWdthCorr", "pol1", 0.0, 3000.0);
270 fWdthCorr->SetParameters(+0.881894, +0.000053);
274 // AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kNacc,AliDielectronVarManager::kEta);
275 // AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kNacc);
276 AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta);
277 AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kCentrality);