4 static enum LMMECutSet {
6 kPbPb2011TPCandTOFwide, //TOF required, more relaxed cut on TPC
13 static enum LMMECentSel {
20 //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
25 AliDielectronEventCuts* GetEventCuts(Int_t cutSet);
26 AliAnalysisCuts* GetCentralityCuts(Int_t centSel);
27 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet);
28 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
30 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);
31 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);
33 AliAnalysisCuts* GetPairCuts2(Int_t cutSet,Bool_t tooglePC=kFALSE);
34 AliAnalysisCuts* GetPairCuts(Int_t cutSet);
36 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);
37 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);
42 AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
43 AliDielectronEventCuts* eventCuts = 0x0;
45 case kPbPb2011TPCandTOF :
46 case kPbPb2011TPCandTOFwide :
47 case kPbPb2011TPCorTOF :
48 case kpp2010TPCandTOF :
49 case kpp2010TPCorTOF :
50 eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
51 //eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny); // AOD
52 eventCuts->SetVertexType(AliDielectronEventCuts::kVtxTPC); // AOD
53 // eventCuts->SetCentralityRange(0.0,80.0);
54 eventCuts->SetRequireVertex();
55 eventCuts->SetMinVtxContributors(1);
56 eventCuts->SetVertexZ(-10.,10.);
58 default: cout << "No Event Cut defined" << endl;
63 AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
64 AliDielectronVarCuts* centCuts = 0x0;
66 case kPbPb2011Central:
67 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
68 centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
70 case kPbPb2011SemiCentral:
71 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral");
72 //Restrict to 50%, Trigger selction
73 centCuts->AddCut(AliDielectronVarManager::kCentrality,20.,50.);
75 case kPbPb2011Peripheral:
76 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
77 centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
79 default: cout << "No Centrality selected" << endl;
85 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
86 AliDielectronTrackRotator* trackRotator = 0x0;
88 case kPbPb2011TPCandTOF :
89 case kPbPb2011TPCandTOFwide :
90 case kPbPb2011TPCorTOF :
91 case kpp2010TPCandTOF :
92 case kpp2010TPCorTOF :
93 trackRotator = new AliDielectronTrackRotator();
94 trackRotator->SetIterations(20);
95 trackRotator->SetConeAnglePhi(TMath::Pi()/180*165);
96 trackRotator->SetStartAnglePhi(TMath::Pi());
98 default: cout << "No Rotator defined" << endl;
104 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
105 AliDielectronMixingHandler* mixingHandler = 0x0;
107 case kPbPb2011TPCorTOF :
109 mixingHandler = new AliDielectronMixingHandler;
110 mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
111 mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,40,80");
112 mixingHandler->SetDepth(25);
113 mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
116 case kPbPb2011TPCandTOF :
117 case kPbPb2011TPCandTOFwide :
118 mixingHandler = new AliDielectronMixingHandler;
119 mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
120 mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,40,80");
121 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)");
122 //mixingHandler->SetDepth(50);
123 mixingHandler->SetDepth(15);
124 mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
126 case kpp2010TPCandTOF :
127 case kpp2010TPCorTOF :
128 mixingHandler = new AliDielectronMixingHandler;
129 mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
130 mixingHandler->AddVariable(AliDielectronVarManager::kNacc,"0,10000");
131 //might want to add multiplicity?
132 mixingHandler->SetDepth(50);
133 mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
135 default: cout << "No Rotator defined" << endl;
137 return mixingHandler;
141 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
142 AliAnalysisCuts* anaCuts=0x0;
144 // + [2] added for Dec2010 Cut!
145 TF1 *lowerCut = new TF1("lowerCut", "[0] * TMath::Exp([1]*x) + [2]", 0, 20);
147 lowerCut->SetParameter(0, -2.7);
148 lowerCut->SetParameter(1, -0.4357);
150 /* 18.01.2011 ALiHFEpid.cxx */
151 lowerCut->SetParameter(0,-3.7);
152 lowerCut->SetParameter(1,-0.8);
153 lowerCut->SetParameter(2,-0.35);
155 if (MCenabled) { //overwrite parameters
156 lowerCut->SetParameter(0,-2.5);
157 lowerCut->SetParameter(2,-2.2);
160 //---------------------------------------------
161 AliDielectronPID *pidTPCTOFeOnly = new AliDielectronPID("TPC-TOF","TPC-TOF");
162 pidTPCTOFeOnly->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3,3.,0.0,100.,kFALSE);
163 pidTPCTOFeOnly->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
166 AliDielectronPID *pidTPCandTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
167 pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
168 pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
169 pidTPCandTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
171 AliDielectronPID *pidTPChardTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
172 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,lowerCut,3.,0.0,100.,kFALSE);
173 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
174 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
175 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
176 pidTPChardTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
177 //___________________________________________
178 AliDielectronPID *pidTT = new AliDielectronPID("TPC-TOF","TPC-TOF");
179 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5,3.,0.2,0.4,kFALSE);
180 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3,3.,0.4,100.,kFALSE);
181 pidTT->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.2 , 100., kFALSE );
183 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
184 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
185 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
186 //___________________________________________
187 AliDielectronVarCuts *pidTPCsignal = new AliDielectronVarCuts("pidTPCsignal","cut on the TPC signal");
189 pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,65.,85.);
192 pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.);
194 //___________________________________________
196 AliDielectronVarCuts *pidTPCsignalWide = new AliDielectronVarCuts("pidTPCsignalWide","cut on the TPC signal");
197 pidTPCsignalWide->AddCut(AliDielectronVarManager::kTPCsignal,70.,90.);
200 AliDielectronVarCuts *pTPC = new AliDielectronVarCuts("P>.4","P>.4");
201 pTPC->AddCut(AliDielectronVarManager::kPt,.4,5.);
203 AliDielectronVarCuts *pMin = new AliDielectronVarCuts("P>.2","P>.2");
204 pMin->AddCut(AliDielectronVarManager::kPt,.2,5.);
207 case kPbPb2011TPCandTOF :
208 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
209 cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
210 //cgSecondTrackFilterPIDTPC1->AddCut(pidTPChardTOF);
211 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCTOFeOnly);
212 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
213 cgSecondTrackFilterPIDTPC1->AddCut(GetTrackCutsAna(cutSet));
214 anaCuts = cgSecondTrackFilterPIDTPC1;
216 case kPbPb2011TPCandTOFwide :
217 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
218 cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
219 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
220 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignalWide);
221 cgSecondTrackFilterPIDTPC1->AddCut(GetTrackCutsAna(cutSet));
222 anaCuts = cgSecondTrackFilterPIDTPC1;
225 case kPbPb2011TPCorTOF :
226 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC2 = new AliDielectronCutGroup("cgPIDTPC2","cgPIDTPC2",AliDielectronCutGroup::kCompAND);
227 cgSecondTrackFilterPIDTPC2->AddCut(pMin);
228 cgSecondTrackFilterPIDTPC2->AddCut(pidTT);
229 cgSecondTrackFilterPIDTPC2->AddCut(pidTPCsignal);
230 cgSecondTrackFilterPIDTPC2->AddCut(GetTrackCutsAna(cutSet));
231 anaCuts = cgSecondTrackFilterPIDTPC2;
233 case kpp2010TPCandTOF :
234 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
235 cgSecondTrackFilterPIDTPC->AddCut(pTPC);
236 //cgSecondTrackFilterPIDTPC->AddCut(pidTPChardTOF);
237 cgSecondTrackFilterPIDTPC->AddCut(pidTPCTOFeOnly);
238 anaCuts = cgSecondTrackFilterPIDTPC;
240 case kpp2010TPCorTOF :
241 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
242 cgSecondTrackFilterPIDTPC->AddCut(pMin);
243 cgSecondTrackFilterPIDTPC->AddCut(pidTT);
244 anaCuts = cgSecondTrackFilterPIDTPC;
246 default: cout << "No Analysis PID Cut defined " << endl;
251 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
252 AliAnalysisCuts* anaCuts=0x0;
254 case kPbPb2011TPCandTOF :
255 case kPbPb2011TPCandTOFwide :
256 case kPbPb2011TPCorTOF :
257 case kpp2010TPCandTOF :
258 case kpp2010TPCorTOF :
259 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
260 AliDielectronCutGroup* cgITSTPC = new AliDielectronCutGroup("cgITSTPC","cgITSTPC",AliDielectronCutGroup::kCompAND);
261 AliDielectronPID *pidITSTPC = new AliDielectronPID("TPCpre","TPCpre");
262 pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
263 cgITSTPC->AddCut(pidITSTPC);
264 cgITSTPC->AddCut(GetTrackCutsAna(cutSet));
266 // cgITSTPC->AddCut(GetTrackCutsAna(cutSet));
268 AliDielectronCutGroup* cgITSSA = new AliDielectronCutGroup("cgITSSA","cgITSSA",AliDielectronCutGroup::kCompAND);
269 AliDielectronPID *pidITSSA = new AliDielectronPID("pidITSSA","pidITSSA");
270 pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-3.,3.);
271 cgITSSA->AddCut(pidITSSA);
272 cgITSSA->AddCut(GetTrackCutsAna(cutSet));
273 // cgITSSA->AddCut(GetTrackCutsPre(cutSet));
275 AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
276 cgInitialTrackFilter->AddCut(cgITSTPC);
277 cgInitialTrackFilter->AddCut(cgITSSA);
278 anaCuts = cgInitialTrackFilter;
280 default: cout << "No Pre-PID Cut defined " << endl;
287 AliAnalysisCuts* GetPairCuts2(Int_t cutSet, Bool_t togglePC /*=kFALSE*/) {
288 AliAnalysisCuts* pairCuts=0x0;
290 case kPbPb2011TPCorTOF :
291 case kpp2010TPCandTOF :
292 AliDielectronVarCuts* pairCutsV= new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
293 pairCutsV->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
294 pairCuts = pairCutsV;
296 case kPbPb2011TPCandTOF :
297 case kPbPb2011TPCandTOFwide :
298 case kpp2010TPCorTOF :
301 AliDielectronCutGroup* pairCutsCG2 =new AliDielectronCutGroup("pairCutsCG2","pairCutsCG2",AliDielectronCutGroup::kCompOR);
302 AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
303 pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
304 pairCutsPhiv->AddCut(AliDielectronVarManager::kPhivPair, 0.0, 2.0);
305 pairCutsInvM =new AliDielectronVarCuts("InvM Cuts","InvM<0.3");
306 pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.3);
307 pairCutsInvMgood =new AliDielectronVarCuts("InvM Cuts good","InvM>0.3");
308 pairCutsInvMgood->AddCut(AliDielectronVarManager::kM, 0.3, 99999.);
309 pairCutsCG->AddCut(pairCutsPhiv);
310 pairCutsCG->AddCut(pairCutsInvM);
311 pairCutsCG2->AddCut(pairCutsInvMgood);
312 pairCutsCG2->AddCut(pairCutsCG);
313 pairCuts = pairCutsCG2;
316 AliDielectronVarCuts* pairCutsV =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
317 pairCutsV->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035,kTRUE);
318 pairCuts = pairCutsV;
321 default: cout << "No Pair Cuts defined " << endl;
327 AliAnalysisCuts* GetPairCuts(Int_t cutSet) {
328 AliDielectronVarCuts* pairCuts=0x0;
330 case kPbPb2011TPCorTOF :
331 case kpp2010TPCandTOF :
332 pairCuts = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
333 pairCuts->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
335 case kPbPb2011TPCandTOF :
336 case kPbPb2011TPCandTOFwide :
337 case kpp2010TPCorTOF :
338 pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
339 pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
341 default: cout << "No Pair Cuts defined " << endl;
346 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
347 AliDielectronCutGroup* trackCuts=0x0;
349 case kPbPb2011TPCandTOF :
350 case kPbPb2011TPCandTOFwide :
351 case kPbPb2011TPCorTOF :
352 case kpp2010TPCandTOF :
353 case kpp2010TPCorTOF :
354 trackCuts = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
356 trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
357 //Not necessary for AOD?
358 //-AOD-trackCuts->SetDCAToVertex2D(kTRUE);
360 //Legacy cut: Use Crossed Rows in ESD, in AOD ASAP
362 //trackCutsAOD->AddCut(AliDielectronVarManager::kNclsTPC, 60.0, 160.0);
364 trackCutsAOD->AddCut(AliDielectronVarManager::kPt,0.05,200.);
365 trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.84,0.84);
368 trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
369 trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
371 trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS, 3.0, 100.0);
373 trackCutsAOD->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
374 trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 3.5);
375 AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
376 trackCutsDiel->SetRequireITSRefit(kTRUE);
377 trackCutsDiel->SetRequireTPCRefit(kTRUE);
378 //-AOD-trackCuts->SetMinNClustersITS(3);
379 /* trackCutsDiel->SetITSclusterCut(AliDielectronTrackCuts::kAtLeast,7); //>=3
381 trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
382 // trackCutsAOD->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,0.5); //ITS(0) = SPDfirst
383 //-AOD-trackCuts->SetMinNCrossedRowsTPC(110);
384 //-AOD-trackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.7);
385 trackCutsDiel->SetTPCNclFRobust(110);
386 trackCutsDiel->SetMinNCrossedRowsOverFindable(0.7);
387 trackCuts->AddCut(trackCutsDiel);
388 trackCuts->AddCut(trackCutsAOD);
390 default: cout << "No Analysis Track Cut defined " << endl;
395 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
396 AliESDtrackCuts* trackCuts=0x0;
398 case kPbPb2011TPCandTOF :
399 case kPbPb2011TPCorTOF :
400 case kpp2010TPCandTOF :
401 case kpp2010TPCorTOF :
403 // trackCuts = new AliESDtrackCuts();
404 // trackCuts->SetDCAToVertex2D(kTRUE);
405 // trackCuts->SetMaxDCAToVertexZ(3.0);
406 // trackCuts->SetMaxDCAToVertexXY(1.0);
407 trackCuts->SetEtaRange( -0.84 , 0.84 );
408 trackCuts->SetPtRange( 0.05 , 0.5);
409 trackCuts->SetAcceptKinkDaughters(kFALSE);
410 trackCuts->SetRequireITSRefit(kTRUE);
411 trackCuts->SetRequireITSStandAlone(kTRUE);
412 trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
413 trackCuts->SetMinNClustersITS(3); //PhotonGroup-Dalitz: 2?!
415 cout << "No Pre-Track Cut defined for AODs at the moment " << endl;
417 default: cout << "No Pre-Track Cut defined " << endl;