updates from Taku
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / LMEECutLibTaku.C
CommitLineData
571a7b22 1class LMEECutLib {
2
3 public:
4 static enum LMMECutSet {
5 kPbPb2011TPCandTOF, //TOF required
6 kPbPb2011TPCandTOFwide, //TOF required, more relaxed cut on TPC
7 kPbPb2011TPCorTOF,
8 kpp2010TPCandTOF,
9 kpp2010TPCorTOF,
10 kCUTSETMAX
11 };
12
13 static enum LMMECentSel {
14 kPbPb2011Central,
15 kPbPb2011SemiCentral1,
16 kPbPb2011SemiCentral2,
17 kPbPb2011Peripheral,
18 kCENTSELMAX
19 };
20
21
22 static enum LMMEPairCutSet {
23 kPbPb2011Mass, //Mass cut
24 kPbPb2011OP, //Opening angle cut
25 kPbPb2011Phiv, //Phiv cut
26 kPAIRCUTSETMAX
27 };
28
29
30 //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
31
32 Bool_t useMC;
33
34
35 LMEECutLib() {useMC=kFALSE;}
36
37 AliDielectronEventCuts* GetEventCuts(Int_t cutSet);
38 AliAnalysisCuts* GetCentralityCuts(Int_t centSel);
39 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet);
40 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
41
42 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);
43 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);
44
45 AliAnalysisCuts* GetPairCuts(Int_t cutSet);
46 AliAnalysisCuts* GetPairPreFilterCuts(Int_t cutSet);
47
48 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);
49 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);
50
51 void SetMCFlag( Bool_t isMC=kTRUE) {useMC=isMC;}
52
53
54
55
56 AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
57 AliDielectronEventCuts* eventCuts = 0x0;
58 switch (cutSet) {
59 case kPbPb2011TPCandTOF :
60 case kPbPb2011TPCandTOFwide :
61 case kPbPb2011TPCorTOF :
62 case kpp2010TPCandTOF :
63 case kpp2010TPCorTOF :
64 eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
65 eventCuts->SetRequireVertex();
66 eventCuts->SetMinVtxContributors(1);
67 eventCuts->SetVertexZ(-10.,10.);
68 break;
69 default: cout << "No Event Cut defined" << endl;
70 }
71 return eventCuts;
72 }
73
74 AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
75 AliDielectronVarCuts* centCuts = 0x0;
76 switch (centSel) {
77 case kPbPb2011Central:
78 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
79 centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
80 break;
81 case kPbPb2011SemiCentral1:
82 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral1");
83 centCuts->AddCut(AliDielectronVarManager::kCentrality,10.,30.);
84 break;
85 case kPbPb2011SemiCentral2:
86 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral2");
87 centCuts->AddCut(AliDielectronVarManager::kCentrality,30.,50.);
88 break;
89 case kPbPb2011Peripheral:
90 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
91 centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
92 break;
93 default: cout << "No Centrality selected" << endl;
94 }
95 return centCuts;
96 }
97
98
99 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
100 AliDielectronTrackRotator* trackRotator = 0x0;
101 switch (cutSet) {
102 case kPbPb2011TPCandTOF :
103 case kPbPb2011TPCandTOFwide :
104 case kPbPb2011TPCorTOF :
105 case kpp2010TPCandTOF :
106 case kpp2010TPCorTOF :
107 trackRotator = new AliDielectronTrackRotator();
108 trackRotator->SetIterations(20);
109 trackRotator->SetConeAnglePhi(TMath::Pi()/180*165);
110 trackRotator->SetStartAnglePhi(TMath::Pi());
111 break;
112 default: cout << "No Rotator defined" << endl;
113 }
114 return trackRotator;
115 }
116
117
118 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
119 AliDielectronMixingHandler* mixingHandler = 0x0;
120 switch (cutSet) {
121 case kPbPb2011TPCandTOF :
122 case kPbPb2011TPCandTOFwide :
123 case kPbPb2011TPCorTOF :
124 mixingHandler = new AliDielectronMixingHandler;
125 mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
126 mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,40,80,100");
127 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)");
128 //mixingHandler->SetDepth(50);
129 mixingHandler->SetDepth(15);
130 mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
131 break;
132 case kpp2010TPCandTOF :
133 case kpp2010TPCorTOF :
134 mixingHandler = new AliDielectronMixingHandler;
135 mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
136 mixingHandler->AddVariable(AliDielectronVarManager::kNacc,"0,10000");
137 //might want to add multiplicity?
138 mixingHandler->SetDepth(25);
139 mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
140 break;
141 default: cout << "No Mixing Handler defined" << endl;
142 }
143 return mixingHandler;
144 }
145
146
147 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
148 AliAnalysisCuts* anaCuts=0x0;
149
150 // + [2] added for Dec2010 Cut!
151 TF1 *lowerCut = new TF1("lowerCut", "[0] * TMath::Exp([1]*x) + [2]", 0, 20);
152 /* until Nov2010
153 lowerCut->SetParameter(0, -2.7);
154 lowerCut->SetParameter(1, -0.4357);
155 */
156 /* 18.01.2011 ALiHFEpid.cxx */
157 lowerCut->SetParameter(0,-3.7);
158 lowerCut->SetParameter(1,-0.8);
159 lowerCut->SetParameter(2,-0.35);
160
161 if (useMC) { //overwrite parameters
162 lowerCut->SetParameter(0,-2.5);
163 lowerCut->SetParameter(2,-2.2);
164 }
165
166 //---------------------------------------------
167 AliDielectronPID *pidTPCTOFeOnly = new AliDielectronPID("TPC-TOF","TPC-TOF");
168 pidTPCTOFeOnly->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3. ,3.,0.0,100.,kFALSE);
169 pidTPCTOFeOnly->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
170
171 AliDielectronPID *pidTPCandTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
172 pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
173 pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
174 pidTPCandTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
175
176 AliDielectronPID *pidTPChardTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
177 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,lowerCut,3.,0.0,100.,kFALSE);
178 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
179 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
180 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
181 pidTPChardTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
182 //___________________________________________
183 AliDielectronPID *pidTT = new AliDielectronPID("TPC-TOF","TPC-TOF");
184 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5,3.,0.2,0.4,kFALSE);
185 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3,3.,0.4,100.,kFALSE);
186 pidTT->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.2 , 100., kFALSE );
187
188 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
189 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
190 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
191 //___________________________________________
192 AliDielectronVarCuts *pidTPCsignal = new AliDielectronVarCuts("pidTPCsignal","cut on the TPC signal");
193 if (useMC) {
194 pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,65.,85.);
195 }
196 else {
197 pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.);
198 }
199 //___________________________________________
200 AliDielectronVarCuts *pidTPCsignalWide = new AliDielectronVarCuts("pidTPCsignalWide","cut on the TPC signal");
201 pidTPCsignalWide->AddCut(AliDielectronVarManager::kTPCsignal,70.,90.);
202 //___________________________________________
203
204 AliDielectronVarCuts *pTPC = new AliDielectronVarCuts("Py>.4","Py>.4");
205 pTPC->AddCut(AliDielectronVarManager::kPt,.4,5.);
206
207 AliDielectronVarCuts *pMin = new AliDielectronVarCuts("P>.2","P>.2");
208 pMin->AddCut(AliDielectronVarManager::kPt,.2,5.);
209
210 switch (cutSet) {
211 case kPbPb2011TPCandTOF :
212 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
213 cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
214 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
215 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
216 cgSecondTrackFilterPIDTPC1->AddCut(GetTrackCutsAna(cutSet));
217 anaCuts = cgSecondTrackFilterPIDTPC1;
218 break;
219 case kPbPb2011TPCandTOFwide :
220 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
221 cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
222 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
223 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignalWide);
224 cgSecondTrackFilterPIDTPC1->AddCut(GetTrackCutsAna(cutSet));
225 anaCuts = cgSecondTrackFilterPIDTPC1;
226 break;
227 case kPbPb2011TPCorTOF :
228 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC2 = new AliDielectronCutGroup("cgPIDTPC2","cgPIDTPC2",AliDielectronCutGroup::kCompAND);
229 cgSecondTrackFilterPIDTPC2->AddCut(pMin);
230 cgSecondTrackFilterPIDTPC2->AddCut(pidTT);
231 cgSecondTrackFilterPIDTPC2->AddCut(pidTPCsignal);
232 cgSecondTrackFilterPIDTPC2->AddCut(GetTrackCutsAna(cutSet));
233 anaCuts = cgSecondTrackFilterPIDTPC2;
234 break;
235 case kpp2010TPCandTOF :
236 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
237 cgSecondTrackFilterPIDTPC->AddCut(pTPC);
238 //cgSecondTrackFilterPIDTPC->AddCut(pidTPChardTOF);
239 cgSecondTrackFilterPIDTPC->AddCut(pidTPCandTOF);
240 cgSecondTrackFilterPIDTPC->AddCut(pidTPCTOFeOnly);
241 cgSecondTrackFilterPIDTPC->AddCut(GetTrackCutsAna(cutSet));
242 anaCuts = cgSecondTrackFilterPIDTPC;
243 break;
244 case kpp2010TPCorTOF :
245 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
246 cgSecondTrackFilterPIDTPC->AddCut(pMin);
247 cgSecondTrackFilterPIDTPC->AddCut(pidTT);
248 cgSecondTrackFilterPIDTPC->AddCut(GetTrackCutsAna(cutSet));
249 anaCuts = cgSecondTrackFilterPIDTPC;
250 break;
251 default: cout << "No Analysis PID Cut defined " << endl;
252 }
253 return anaCuts;
254 }
255
256 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
257 AliAnalysisCuts* anaCuts=0x0;
258 switch (cutSet) {
259 case kPbPb2011TPCandTOF :
260 case kPbPb2011TPCandTOFwide :
261 case kPbPb2011TPCorTOF :
262 case kpp2010TPCandTOF :
263 case kpp2010TPCorTOF :
264 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
265 AliDielectronCutGroup* cgITSTPC = new AliDielectronCutGroup("cgITSTPC","cgITSTPC",AliDielectronCutGroup::kCompAND);
266 AliDielectronPID *pidITSTPC = new AliDielectronPID("TPCpre","TPCpre");
267 pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
268 cgITSTPC->AddCut(pidITSTPC);
269 cgITSTPC->AddCut(GetTrackCutsAna(cutSet));
270
271 AliDielectronCutGroup* cgITSSA = new AliDielectronCutGroup("cgITSSA","cgITSSA",AliDielectronCutGroup::kCompAND);
272 AliDielectronPID *pidITSSA = new AliDielectronPID("pidITSSA","pidITSSA");
273 pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-3.,3.);
274 cgITSSA->AddCut(pidITSSA);
275 cgITSSA->AddCut(GetTrackCutsPre(cutSet));
276
277 AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
278 cgInitialTrackFilter->AddCut(cgITSTPC);
279 cgInitialTrackFilter->AddCut(cgITSSA);
280 anaCuts = cgInitialTrackFilter;
281 break;
282 default: cout << "No Pre-PID Cut defined " << endl;
283 }
284 return anaCuts;
285 }
286
287 /*
288 AliAnalysisCuts* GetPairCuts(Int_t cutSet) {
289 AliDielectronVarCuts* pairCuts=0x0;
290 switch (cutSet) {
291 case kPbPb2011TPCorTOF :
292 case kpp2010TPCandTOF :
293 pairCuts = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
294 pairCuts->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
295 break;
296 case kPbPb2011TPCandTOF :
297 case kPbPb2011TPCandTOFwide :
298 case kpp2010TPCorTOF :
299 pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
300 pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
301 break;
302 default: cout << "No Pair Cuts defined " << endl;
303 }
304 return pairCuts;
305 }
306 */
307
308 AliAnalysisCuts* GetPairCuts(Int_t cutSet) {
309 AliDielectronVarCuts* pairCuts=0x0;
310 switch (cutSet) {
311 case kPbPb2011Mass:
312 pairCuts = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
313 pairCuts->AddCut(AliDielectronVarManager::kM, 0.15,100.);
314 break;
315 case kPbPb2011OP:
316 pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
317 pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035, kTRUE); ///exclude
318 break;
319 case kPbPb2011Phiv:
320 pairCuts =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
321 pairCuts->AddCut(AliDielectronVarManager::kPhivPair, 2.0, TMath::ACos(-1.0), kTRUE); //exclude
4d42c2f6 322 pairCuts->AddCut(AliDielectronVarManager::kM, 0, 0.15,kTRUE); ///exclude
571a7b22 323 break;
324 default: cout << "No Pair Cuts defined " << endl;
325 }
326 return pairCuts;
327 }
328
329
330 //// for the pairprefilter
331 //// this cut is defined to "reject" pairs
332 //// for the paircuts, defintion is based on "accept" pairs.
333 AliAnalysisCuts* GetPairPreFilterCuts(Int_t cutSet) {
334 AliDielectronVarCuts* pairCuts=0x0;
335 switch (cutSet) {
336 case kPbPb2011Mass:
337 pairCuts = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
338 pairCuts->AddCut(AliDielectronVarManager::kM, 0.15,100.,kTRUE);
339 break;
340 case kPbPb2011OP:
341 pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
342 pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
343 break;
344 case kPbPb2011Phiv:
4d42c2f6 345 pairCuts =new AliDielectronVarCuts("Phiv Cut and Mee Cut","Phiv<2.0rad");
571a7b22 346 pairCuts->AddCut(AliDielectronVarManager::kPhivPair, 2.0, TMath::ACos(-1.0));
4d42c2f6 347 pairCuts->AddCut(AliDielectronVarManager::kM, 0, 0.15);
571a7b22 348 break;
349 default: cout << "No Pair Cuts defined " << endl;
350 }
351 return pairCuts;
352 }
353
354
355 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
356 AliESDtrackCuts* trackCuts=0x0;
357 switch (cutSet) {
358 case kPbPb2011TPCandTOF :
359 case kPbPb2011TPCandTOFwide :
360 case kPbPb2011TPCorTOF :
361 case kpp2010TPCandTOF :
362 case kpp2010TPCorTOF :
363 trackCuts = new AliESDtrackCuts();
364 trackCuts->SetDCAToVertex2D(kTRUE);
365 trackCuts->SetMaxDCAToVertexZ(3.0);
366 trackCuts->SetMaxDCAToVertexXY(1.0);
367 //trackCuts->SetMaxNsigmaToVertex(3.0);
368 trackCuts->SetPtRange( 0.05 , 200.0);
369 trackCuts->SetEtaRange( -0.84 , 0.84 );
370 trackCuts->SetAcceptKinkDaughters(kFALSE);
371 trackCuts->SetRequireITSRefit(kTRUE);
372 trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
373 trackCuts->SetMinNClustersITS(3);
374 trackCuts->SetRequireTPCRefit(kTRUE);
375 //trackCuts->SetMinNClustersTPC(60);
376 trackCuts->SetMinNCrossedRowsTPC(110);
377 trackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.7);
378 trackCuts->SetMaxChi2PerClusterTPC(3.5);
379 //trackCuts->SetMaxChi2PerClusterITS(6);
380 break;
381 default: cout << "No Analysis Track Cut defined " << endl;
382 }
383 return trackCuts;
384 }
385
386 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
387 AliESDtrackCuts* trackCuts=0x0;
388 switch (cutSet) {
389 case kPbPb2011TPCandTOF :
390 case kPbPb2011TPCandTOFwide :
391 case kPbPb2011TPCorTOF :
392 case kpp2010TPCandTOF :
393 case kpp2010TPCorTOF :
394 trackCuts = new AliESDtrackCuts();
395 trackCuts->SetDCAToVertex2D(kTRUE);
396 trackCuts->SetMaxDCAToVertexZ(3.0);
397 trackCuts->SetMaxDCAToVertexXY(1.0);
398 trackCuts->SetEtaRange( -0.84 , 0.84 );
399 trackCuts->SetPtRange( 0.05 , 0.5);
400 trackCuts->SetAcceptKinkDaughters(kFALSE);
401 trackCuts->SetRequireITSRefit(kTRUE);
402 trackCuts->SetRequireITSStandAlone(kTRUE);
403 trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
404 trackCuts->SetMinNClustersITS(3); //PhotonGroup-Dalitz: 2?!
405 break;
406 default: cout << "No Pre-Track Cut defined " << endl;
407 }
408 return trackCuts;
409 }
410
411};