4 static enum LMMECutSet {
7 kPbPb2011TPC, //TOF required, more relaxed cut on TPC
8 kPbPb2011TPCandTOFwide, //TOF required, more relaxed cut on TPC
15 static enum LMMECentSel {
22 //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
27 AliDielectronEventCuts* GetEventCuts(Int_t cutSet);
28 AliAnalysisCuts* GetCentralityCuts(Int_t centSel);
29 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet);
30 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
32 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);
33 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);
35 AliAnalysisCuts* GetPairCuts2(Int_t cutSet,Bool_t tooglePC=kFALSE);
36 AliAnalysisCuts* GetPairCuts(Int_t cutSet);
38 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);
39 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);
44 AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
45 AliDielectronEventCuts* eventCuts = 0x0;
48 case kPbPb2011TPCandTOF :
50 case kPbPb2011TPCandTOFwide :
51 case kPbPb2011TPCorTOF :
52 case kpp2010TPCandTOF :
53 case kpp2010TPCorTOF :
54 eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
55 eventCuts->SetVertexType(AliDielectronEventCuts::kVtxSPD); // AOD
56 //eventCuts->SetVertexType(AliDielectronEventCuts::kVtxTPC); // AOD
57 // eventCuts->SetCentralityRange(0.0,80.0);
58 eventCuts->SetRequireVertex();
59 eventCuts->SetMinVtxContributors(1);
60 eventCuts->SetVertexZ(-10.,10.);
62 default: cout << "No Event Cut defined" << endl;
67 AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
68 AliDielectronVarCuts* centCuts = 0x0;
70 case kPbPb2011Central:
71 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
72 centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
74 case kPbPb2011SemiCentral:
75 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral");
76 //Restrict to 50%, Trigger selction
77 centCuts->AddCut(AliDielectronVarManager::kCentrality,20.,50.);
79 case kPbPb2011Peripheral:
80 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
81 centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
83 default: cout << "No Centrality selected" << endl;
89 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
90 AliDielectronTrackRotator* trackRotator = 0x0;
93 case kPbPb2011TPCandTOF :
95 case kPbPb2011TPCandTOFwide :
96 case kPbPb2011TPCorTOF :
97 case kpp2010TPCandTOF :
98 case kpp2010TPCorTOF :
99 trackRotator = new AliDielectronTrackRotator();
100 trackRotator->SetIterations(20);
101 trackRotator->SetConeAnglePhi(TMath::Pi()/180*165);
102 trackRotator->SetStartAnglePhi(TMath::Pi());
104 default: cout << "No Rotator defined" << endl;
110 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
111 AliDielectronMixingHandler* mixingHandler = 0x0;
113 case kPbPb2011TPCorTOF :
115 mixingHandler = new AliDielectronMixingHandler;
116 mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
117 mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,40,80");
118 mixingHandler->SetDepth(25);
119 mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
123 case kPbPb2011TPCandTOF :
125 case kPbPb2011TPCandTOFwide :
126 mixingHandler = new AliDielectronMixingHandler;
127 mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
128 mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,40,80");
129 mixingHandler->AddVariable(AliDielectronVarManager::kv0ACrpH2,"-6*(TMath::Pi()/6),-5*(TMath::Pi()/6),-4*(TMath::Pi()/6),-3*(TMath::Pi()/6),-2*(TMath::Pi()/6),-1*(TMath::Pi()/6),0,1*(TMath::Pi()/6),2*(TMath::Pi()/6),3*(TMath::Pi()/6),4*(TMath::Pi()/6),5*(TMath::Pi()/6),6*(TMath::Pi()/6)");
130 //mixingHandler->SetDepth(50);
131 mixingHandler->SetDepth(15);
132 mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
134 case kpp2010TPCandTOF :
135 case kpp2010TPCorTOF :
136 mixingHandler = new AliDielectronMixingHandler;
137 mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
138 mixingHandler->AddVariable(AliDielectronVarManager::kNacc,"0,10000");
139 //might want to add multiplicity?
140 mixingHandler->SetDepth(50);
141 mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
143 default: cout << "No Rotator defined" << endl;
145 return mixingHandler;
149 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
150 AliAnalysisCuts* anaCuts=0x0;
152 // + [2] added for Dec2010 Cut!
153 TF1 *lowerCut = new TF1("lowerCut", "[0] * TMath::Exp([1]*x) + [2]", 0, 20);
155 lowerCut->SetParameter(0, -2.7);
156 lowerCut->SetParameter(1, -0.4357);
158 /* 18.01.2011 ALiHFEpid.cxx */
159 lowerCut->SetParameter(0,-3.7);
160 lowerCut->SetParameter(1,-0.8);
161 lowerCut->SetParameter(2,-0.35);
163 if (MCenabled) { //overwrite parameters
164 lowerCut->SetParameter(0,-2.5);
165 lowerCut->SetParameter(2,-2.2);
168 //---------------------------------------------
169 AliDielectronPID *pidTPCTOFeOnly = new AliDielectronPID("TPC-TOF","TPC-TOF");
170 pidTPCTOFeOnly->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3,3.,0.0,100.,kFALSE);
171 pidTPCTOFeOnly->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
174 AliDielectronPID *pidTPCandTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
175 pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
176 pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
177 pidTPCandTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
179 AliDielectronPID *pidTPChardTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
180 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,lowerCut,3.,0.0,100.,kFALSE);
181 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
182 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
183 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
184 pidTPChardTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
185 //___________________________________________
186 AliDielectronPID *pidTT = new AliDielectronPID("TPC-TOF","TPC-TOF");
187 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5,3.,0.2,0.4,kFALSE);
188 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3,3.,0.4,100.,kFALSE);
189 pidTT->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.2 , 100., kFALSE );
191 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
192 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
193 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
194 //___________________________________________
195 AliDielectronVarCuts *pidTPCsignal = new AliDielectronVarCuts("pidTPCsignal","cut on the TPC signal");
197 pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,65.,85.);
200 pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.);
202 //___________________________________________
204 AliDielectronVarCuts *pidTPCsignalWide = new AliDielectronVarCuts("pidTPCsignalWide","cut on the TPC signal");
205 pidTPCsignalWide->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.);
208 AliDielectronVarCuts *pTPC = new AliDielectronVarCuts("P>.4","P>.4");
209 pTPC->AddCut(AliDielectronVarManager::kPt,.4,2.5);
211 AliDielectronVarCuts *pMin = new AliDielectronVarCuts("P>.2","P>.2");
212 pMin->AddCut(AliDielectronVarManager::kPt,.2,2.5);
216 AliDielectronCutGroup* cgSecondTrackFilterNoPID = new AliDielectronCutGroup("cgNoPID","cgNoPID",AliDielectronCutGroup::kCompAND);
217 cgSecondTrackFilterNoPID->AddCut(pTPC);
218 anaCuts= cgSecondTrackFilterNoPID;
220 case kPbPb2011TPCandTOF :
221 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
222 cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
223 //cgSecondTrackFilterPIDTPC1->AddCut(pidTPChardTOF);
224 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCTOFeOnly);
225 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
226 anaCuts = cgSecondTrackFilterPIDTPC1;
229 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
230 cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
231 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignalWide);
232 anaCuts = cgSecondTrackFilterPIDTPC1;
235 case kPbPb2011TPCandTOFwide :
236 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
237 cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
238 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
239 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignalWide);
240 anaCuts = cgSecondTrackFilterPIDTPC1;
243 case kPbPb2011TPCorTOF :
244 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC2 = new AliDielectronCutGroup("cgPIDTPC2","cgPIDTPC2",AliDielectronCutGroup::kCompAND);
245 cgSecondTrackFilterPIDTPC2->AddCut(pMin);
246 cgSecondTrackFilterPIDTPC2->AddCut(pidTT);
247 cgSecondTrackFilterPIDTPC2->AddCut(pidTPCsignal);
248 anaCuts = cgSecondTrackFilterPIDTPC2;
250 case kpp2010TPCandTOF :
251 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
252 cgSecondTrackFilterPIDTPC->AddCut(pTPC);
253 //cgSecondTrackFilterPIDTPC->AddCut(pidTPChardTOF);
254 cgSecondTrackFilterPIDTPC->AddCut(pidTPCTOFeOnly);
255 anaCuts = cgSecondTrackFilterPIDTPC;
257 case kpp2010TPCorTOF :
258 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
259 cgSecondTrackFilterPIDTPC->AddCut(pMin);
260 cgSecondTrackFilterPIDTPC->AddCut(pidTT);
261 anaCuts = cgSecondTrackFilterPIDTPC;
263 default: cout << "No Analysis PID Cut defined " << endl;
268 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
269 AliAnalysisCuts* anaCuts=0x0;
272 case kPbPb2011TPCandTOF :
274 case kPbPb2011TPCandTOFwide :
275 case kPbPb2011TPCorTOF :
276 case kpp2010TPCandTOF :
277 case kpp2010TPCorTOF :
278 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
279 AliDielectronCutGroup* cgITSTPC = new AliDielectronCutGroup("cgITSTPC","cgITSTPC",AliDielectronCutGroup::kCompAND);
280 AliDielectronPID *pidITSTPC = new AliDielectronPID("TPCpre","TPCpre");
281 pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
282 cgITSTPC->AddCut(pidITSTPC);
285 AliDielectronCutGroup* cgITSSA = new AliDielectronCutGroup("cgITSSA","cgITSSA",AliDielectronCutGroup::kCompAND);
286 AliDielectronPID *pidITSSA = new AliDielectronPID("pidITSSA","pidITSSA");
287 pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-3.,3.);
288 cgITSSA->AddCut(pidITSSA);
289 // cgITSSA->AddCut(GetTrackCutsPre(cutSet));
291 AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
292 cgInitialTrackFilter->AddCut(cgITSTPC);
293 cgInitialTrackFilter->AddCut(cgITSSA);
294 anaCuts = cgInitialTrackFilter;
296 default: cout << "No Pre-PID Cut defined " << endl;
303 AliAnalysisCuts* GetPairCuts2(Int_t cutSet, Bool_t togglePC /*=kFALSE*/) {
304 AliAnalysisCuts* pairCuts=0x0;
306 case kPbPb2011TPCorTOF :
307 case kpp2010TPCandTOF :
308 AliDielectronVarCuts* pairCutsV= new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
309 pairCutsV->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
310 pairCuts = pairCutsV;
313 case kPbPb2011TPCandTOF :
315 case kPbPb2011TPCandTOFwide :
316 case kpp2010TPCorTOF :
319 AliDielectronCutGroup* pairCutsCG2 =new AliDielectronCutGroup("pairCutsCG2","pairCutsCG2",AliDielectronCutGroup::kCompOR);
320 AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
321 pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
322 pairCutsPhiv->AddCut(AliDielectronVarManager::kPhivPair, 0.0, 2.0);
323 pairCutsInvM =new AliDielectronVarCuts("InvM Cuts","InvM<0.3");
324 pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.3);
325 pairCutsInvMgood =new AliDielectronVarCuts("InvM Cuts good","InvM>0.3");
326 pairCutsInvMgood->AddCut(AliDielectronVarManager::kM, 0.3, 99999.);
327 pairCutsCG->AddCut(pairCutsPhiv);
328 pairCutsCG->AddCut(pairCutsInvM);
329 pairCutsCG2->AddCut(pairCutsInvMgood);
330 pairCutsCG2->AddCut(pairCutsCG);
331 pairCuts = pairCutsCG2;
334 AliDielectronVarCuts* pairCutsV =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
335 pairCutsV->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035,kTRUE);
336 pairCuts = pairCutsV;
339 default: cout << "No Pair Cuts defined " << endl;
345 AliAnalysisCuts* GetPairCuts(Int_t cutSet) {
346 AliDielectronVarCuts* pairCuts=0x0;
348 case kPbPb2011TPCorTOF :
349 case kpp2010TPCandTOF :
350 pairCuts = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
351 pairCuts->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
354 case kPbPb2011TPCandTOF :
356 case kPbPb2011TPCandTOFwide :
357 case kpp2010TPCorTOF :
358 pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
359 pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
361 default: cout << "No Pair Cuts defined " << endl;
366 AliAnalysisCuts* GetESDTrackCutsAna(Int_t cutSet) {
367 AliESDtrackCuts* esdTrackCutsH = 0x0;
370 case kPbPb2011TPCandTOF :
372 case kPbPb2011TPCandTOFwide :
373 case kPbPb2011TPCorTOF :
374 case kpp2010TPCandTOF :
375 case kpp2010TPCorTOF :
376 // standard cuts with very loose DCA: Bit4 (Int: 16), AOD095&115
378 esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
379 esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
380 esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
381 esdTrackCutsH->SetDCAToVertex2D(kTRUE);
384 esdTrackCutsH = new AliESDtrackCuts();
385 esdTrackCutsH->SetAcceptKinkDaughters(kFALSE);
386 //Not done so far via dielectron cuts:
389 esdTrackCuts->SetDCAToVertex2D(kFALSE);
390 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
391 esdTrackCuts->SetMaxChi2PerClusterITS(36);
395 default: cout << "No Analysis Track Cut defined " << endl;
397 return esdTrackCutsH;
400 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
401 AliDielectronCutGroup* trackCuts=0x0;
404 case kPbPb2011TPCandTOF :
406 case kPbPb2011TPCandTOFwide :
407 case kPbPb2011TPCorTOF :
408 case kpp2010TPCandTOF :
409 case kpp2010TPCorTOF :
410 trackCuts = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
412 trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
413 trackCutsAOD->AddCut(AliDielectronVarManager::kPt,0.05,6.);
414 trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.84,0.84);
416 trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
417 trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
418 trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS, 3.0, 100.0);
419 trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 3.5);
420 AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
421 trackCutsDiel->SetAODFilterBit(16); //does nothing for ESDs
422 trackCutsDiel->SetRequireITSRefit(kTRUE);
423 trackCutsDiel->SetRequireTPCRefit(kTRUE);
425 trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
426 // trackCutsAOD->AddCut(AliDielectronVarManager::kNclsTPC, 80., 140.0);
427 trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCr, 110.0, 160.0);
428 trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCfCross, 0.8, 1.0);//tighter than before,
429 //due to AOD production
430 trackCuts->AddCut(trackCutsDiel);
431 trackCuts->AddCut(trackCutsAOD);
433 default: cout << "No Analysis Track Cut defined " << endl;
438 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
439 AliESDtrackCuts* trackCuts=0x0;
442 case kPbPb2011TPCandTOF :
443 case kPbPb2011TPCorTOF :
444 case kpp2010TPCandTOF :
445 case kpp2010TPCorTOF :
447 trackCuts = new AliESDtrackCuts();
448 trackCuts->SetDCAToVertex2D(kTRUE);
449 trackCuts->SetMaxDCAToVertexZ(3.0);
450 trackCuts->SetMaxDCAToVertexXY(1.0);
451 trackCuts->SetEtaRange( -0.84 , 0.84 );
452 trackCuts->SetPtRange( 0.05 , 0.5);
453 trackCuts->SetAcceptKinkDaughters(kFALSE);
454 trackCuts->SetRequireITSRefit(kTRUE);
455 trackCuts->SetRequireITSStandAlone(kTRUE);
456 trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
457 trackCuts->SetMinNClustersITS(3); //PhotonGroup-Dalitz: 2?!
459 cout << "No Pre-Track Cut defined for AODs at the moment " << endl;
461 default: cout << "No Pre-Track Cut defined " << endl;