]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/LMEECutLibRemi.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / LMEECutLibRemi.C
1 class LMEECutLibRemi {
2
3   public:
4         static  enum LMMECutSet {
5                 kPbPb2011NoPID,
6                 kPbPb2011TPCandTOF,
7                 kPbPb2011TPCandTOFHPT,
8                 kPbPb2011TPC, //TOF required, more relaxed cut on TPC
9                 kPbPb2011TPCandTOFwide, //TOF required, more relaxed cut on TPC
10                 kPbPb2011TPCorTOF,
11                 kpp2010TPCandTOF,
12                 kpp2010TPCorTOF,
13                 kPbPb2011pidITSTPCTOF,
14                 kCUTSETMAX
15         };
16
17         static  enum LMMECentSel {
18                 kPbPb2011Central,
19                 kPbPb2011SemiCentral1,
20                 kPbPb2011SemiCentral2,
21                 kPbPb2011Peripheral,
22                 kCENTSELMAX
23         };
24
25         static  enum LMEEPairCutSet{
26           kPbPb2011RP,
27           kPbPb2011Mag,
28           kPbPb2011MassLow,
29           kPbPb2011MassMiddle,
30           kPbPb2011MassHigh,
31           kPbPb2011MassAll,
32                 
33           kPAIRCUTSETMAX
34         };
35
36
37         //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
38
39
40         LMEECutLib() {}
41
42         AliDielectronEventCuts*     GetEventCuts(Int_t cutSet);
43         AliAnalysisCuts*            GetCentralityCuts(Int_t centSel);
44         AliDielectronTrackRotator*  GetTrackRotator(Int_t cutSet);
45         AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
46
47         AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);  
48         AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);  
49
50         AliAnalysisCuts* GetPairCuts2(Int_t cutSet,Bool_t tooglePC=kFALSE);
51         AliAnalysisCuts* GetPairCuts(Int_t cutSet);  
52         AliAnalysisCuts* GetPairCutsInvMass(Int_t cutSet);
53         AliAnalysisCuts* GetPairCutsInOut(Int_t cutSet);
54
55         AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);  
56         AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);  
57
58
59
60
61         AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
62           AliDielectronEventCuts* eventCuts = 0x0;
63           switch (cutSet) {
64                 case kPbPb2011NoPID:
65                 case kPbPb2011TPCandTOF :
66                 case kPbPb2011TPCandTOFHPT:
67                 case kPbPb2011TPC :
68                 case kPbPb2011TPCandTOFwide :
69                 case kPbPb2011TPCorTOF  :
70                 case kpp2010TPCandTOF :
71                 case kpp2010TPCorTOF  :
72                 case kPbPb2011pidITSTPCTOF:
73
74                   //Basic Event Cuts for pp and Pb-Pb, additional cuts may be in the AddTask
75                   eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
76                   eventCuts->SetVertexType(AliDielectronEventCuts::kVtxSPD); // AOD
77                   //                                      eventCuts->SetVertexType(AliDielectronEventCuts::kVtxTPC); // AOD
78                   //                              eventCuts->SetCentralityRange(0.0,80.0);
79                   //                         eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny); // AOD
80                   
81                   eventCuts->SetRequireVertex();
82                   eventCuts->SetMinVtxContributors(1);
83                   eventCuts->SetVertexZ(-10.,10.);
84                   break;
85                 default: cout << "No Event Cut defined" << endl;
86           }
87           return eventCuts;
88         }
89
90
91         //Selection of relatively 'flat' centralities
92   AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
93     AliDielectronVarCuts* centCuts = 0x0;
94     switch (centSel) {
95     case kPbPb2011Central:
96       centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
97       centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
98       break;
99     case kPbPb2011SemiCentral1:
100       centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral1");
101       //Restrict to 50%, Trigger selction
102       centCuts->AddCut(AliDielectronVarManager::kCentrality,10.,30.);
103       break;
104     case kPbPb2011SemiCentral2:
105       centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral2");
106       //Restrict to 50%, Trigger selction
107       centCuts->AddCut(AliDielectronVarManager::kCentrality,30.,50.);//
108       break;
109
110     case kPbPb2011Peripheral:
111       centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
112       centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
113       break;
114
115     default: cout << "No Centrality selected" << endl;
116
117
118     }
119     return centCuts;
120   }
121
122
123
124
125         //Basic track rotator settings from J/Psi, more investigation needed
126         AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
127           AliDielectronTrackRotator* trackRotator = 0x0;
128           switch (cutSet) {
129                 case kPbPb2011NoPID:
130                 case kPbPb2011TPCandTOF :
131                 case kPbPb2011TPCandTOFHPT:
132                 case kPbPb2011TPC :
133                 case kPbPb2011TPCandTOFwide :
134                 case kPbPb2011TPCorTOF  :
135                 case kpp2010TPCandTOF :
136                 case kpp2010TPCorTOF  :
137                 case kPbPb2011pidITSTPCTOF :
138
139                   trackRotator = new AliDielectronTrackRotator();
140                   trackRotator->SetIterations(20);
141                   trackRotator->SetConeAnglePhi(TMath::Pi()/180*165);
142                   trackRotator->SetStartAnglePhi(TMath::Pi());
143                   break;
144                 default: cout << "No Rotator defined" << endl;
145           }
146           return trackRotator;
147         }
148
149
150         AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
151           AliDielectronMixingHandler* mixingHandler = 0x0;
152           switch (cutSet) {
153                 case kPbPb2011TPCorTOF  :
154                 case kPbPb2011NoPID:
155                 case kPbPb2011TPCandTOF :
156                 case kPbPb2011TPCandTOFHPT:
157                 case kPbPb2011TPC :
158                 case kPbPb2011TPCandTOFwide :
159                 case kPbPb2011pidITSTPCTOF :
160
161                   mixingHandler = new AliDielectronMixingHandler;
162                   mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
163                   mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,40,80");
164                   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)");
165                   
166                   mixingHandler->SetDepth(20);
167                   // mixingHandler->SetDepth(15);
168                   mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
169                   break;
170                 case kpp2010TPCandTOF :
171                 case kpp2010TPCorTOF  :
172                   //ATTENTION: Trivial 1 Bin Variable on Nacc needed: Not understood bug, mixing breaks
173                   //when just adding one variable *****************!!! 
174                   mixingHandler = new AliDielectronMixingHandler;
175                   mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
176                   mixingHandler->AddVariable(AliDielectronVarManager::kNacc,"0,10000");
177                   //might want to add multiplicity?
178                   mixingHandler->SetDepth(50);
179                   mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
180                   break;
181                 default: cout << "No Rotator defined" << endl;
182           }
183           return mixingHandler;
184         }
185
186   /*
187   //Pair Cuts for PREFILTER step
188   // cuts = REJECTION!!!
189   AliAnalysisCuts* GetPairCutsPre(Int_t cutSet) {
190     cout << " >>>>>>>>>>>>>>>>>>>>>> GetPairCutsPre() >>>>>>>>>>>>>>>>>>>>>> " << endl;
191     AliAnalysisCuts* pairCuts=0x0;
192     switch (cutSet) {
193     case kPbPb2011_pidITSTPC_trkSPDfirst_3:
194     case kPbPb2011_pidTPC_trkSPDfirst_3:
195     case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight:
196     case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
197     case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
198     case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
199     case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4:
200     case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
201     case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
202     case kPbPb2011pidITSTPCTOF:
203     case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
204     case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
205     case kPbPb2011_TPCITS_TOFif1:
206     case kPbPb2011_TPCTOF_Semi2:
207       AliDielectronVarCuts* pairCutsInvM =new AliDielectronVarCuts("pairCutsInvM","pairCutsInvM");
208       pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.02); // in upgrade: 0.01
209       AliDielectronVarCuts* pairCutsOpAng =new AliDielectronVarCuts("pairCutsOpAng","pairCutsOpAng");
210       pairCutsOpAng->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.05); // in upgrade: 0.05
211
212       AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
213       pairCutsCG->AddCut(pairCutsInvM);
214       pairCutsCG->AddCut(pairCutsOpAng);
215       //pairCutsCG->AddCut(pairCutsPhiv);
216       pairCuts = pairCutsCG;
217       break;
218
219     case kPbPb2011_TPCTOF_Semi1:
220       //[...] // PhiV and InvMass
221     default: cout << "No Prefilter Pair Cuts defined " << endl;
222     }
223     return pairCuts;
224   }
225   */
226
227
228
229         AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
230           AliAnalysisCuts* anaCuts=0x0;
231
232           //-----------------------------------------------
233           //Define different PID Cuts, that are used later
234           //-----------------------------------------------
235           
236       //TPC: UPPER HALF inclusion of electron
237           //     3sigma exclusion of Pions
238           //TOF: 3sigma inclusion of electrons
239           AliDielectronPID *pidTPCTOFeOnly = new AliDielectronPID("TPC-TOF","TPC-TOF");
240           pidTPCTOFeOnly->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.,3.,0.0,100.,kFALSE);
241           pidTPCTOFeOnly->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
242           pidTPCTOFeOnly->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 1.5, kFALSE );
243
244       //TPC: 3sigma inclusion of electron
245           //     3sigma exclusion of Pions
246           //TOF: 3sigma inclusion of electrons in region where p,K cross electrons in TPC
247           AliDielectronPID *pidTPCandTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
248           pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
249           pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
250           pidTPCandTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 1.5, kFALSE );
251
252           //Apply ITS cuts (see Hongyan's talks):
253           //3 sigma inclusion of electrons in TPC
254           //3 sigma exclusion of pions in TPC
255           //3 sigma inclusion of electrons in ITS,TOF for p<1.5GeV, where p,K contamination
256           AliDielectronPID *pidTPCandITSandTOF = new AliDielectronPID("TPC-TOFANDITS","TPC-TOFANDITS");
257           pidTPCandITSandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
258           pidTPCandITSandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
259           pidTPCandITSandTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 1.5, kFALSE);
260           pidTPCandITSandTOF->AddCut(AliDielectronPID::kITS ,AliPID::kElectron , -6. , 3. , 0.0 , 1.5, kFALSE );
261
262           //Apply ITS cuts (see Hongyan's talks):
263           //3 sigma inclusion of electrons in TPC
264           //3 sigma exclusion of pions in TPC
265           //3 sigma inclusion of electrons in ITS,TOF for p<1.5GeV, where p,K contamination
266           //TOF only IF available!
267           AliDielectronPID *pidTPCandITSTOF = new AliDielectronPID("TPC-TOF-ITS","TPC-TOF-ITS");
268           pidTPCandITSTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
269           pidTPCandITSTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
270           pidTPCandITSTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 1.5, kFALSE,AliDielectronPID::kIfAvailable );
271           pidTPCandITSTOF->AddCut(AliDielectronPID::kITS ,AliPID::kElectron , -6. , 3. , 0.0 , 1.5, kFALSE );
272
273           //___________________________________________
274           //Direct cuts on TPC signal used for QM12
275           AliDielectronVarCuts *pidTPCsignal = new AliDielectronVarCuts("pidTPCsignal","cut on the TPC signal");
276           if (MCenabled) {
277           pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,65.,85.); 
278           }     
279           else {
280           pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.); 
281           }
282           //___________________________________________
283
284           //low pT cut-off 0.4 - Pb-Pb
285           AliDielectronVarCuts *pTPC = new AliDielectronVarCuts("P>.4","P>.4");
286           pTPC->AddCut(AliDielectronVarManager::kPt,.4,3.5);
287           
288           //low pT cut-off 0.4 - pp
289           AliDielectronVarCuts *pMin = new AliDielectronVarCuts("P>.2","P>.2");
290           pMin->AddCut(AliDielectronVarManager::kPt,.2,2.5);
291
292           //
293           //
294           //TPC: electron inclusion asymmetric
295           //     pion     exclusion 3sigma
296           //ITS: electron inclusion asymmetric OVER FULL MOMENTUM RANGE
297           //TOF: electron inclusion 3sigma - BUT ONLY IF AVAILABLE
298           AliDielectronPID *pidTPCITS_TOFif2 = new AliDielectronPID("pidTPCITS_TOFif2","pidTPCITS_TOFif2");
299           pidTPCITS_TOFif2->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -1.5, 3. , 0. ,100., kFALSE);
300           pidTPCITS_TOFif2->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3. , 3. , 0. ,100., kTRUE);
301           pidTPCITS_TOFif2->AddCut(AliDielectronPID::kITS,AliPID::kElectron, -4. , 1. , 0. ,100., kFALSE);
302           pidTPCITS_TOFif2->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -3. , 3. , 0. ,100., kFALSE, AliDielectronPID::kIfAvailable);
303
304           // eta range:
305           AliDielectronVarCuts *etaRange090 = new AliDielectronVarCuts("etaRange090","etaRange090");
306           etaRange090->AddCut(AliDielectronVarManager::kEta, -0.90, 0.90);
307           AliDielectronVarCuts *etaRange084 = new AliDielectronVarCuts("etaRange084","etaRange084");
308           etaRange084->AddCut(AliDielectronVarManager::kEta, -0.84, 0.84);
309           AliDielectronVarCuts *etaRange076 = new AliDielectronVarCuts("etaRange076","etaRange076");
310           etaRange076->AddCut(AliDielectronVarManager::kEta, -0.76, 0.76);
311           // pt range:
312           AliDielectronVarCuts *ptRange400to3500 = new AliDielectronVarCuts("ptRange400to3500","ptRange400to3500");
313           ptRange400to3500->AddCut(AliDielectronVarManager::kPt, .4, 3.5);
314
315
316
317           //Now see what Config actually loads and assemble final cuts
318           switch (cutSet) {
319                 case kPbPb2011NoPID:
320                   AliDielectronCutGroup* cgSecondTrackFilterNoPID = new AliDielectronCutGroup("cgNoPID","cgNoPID",AliDielectronCutGroup::kCompAND);
321                   cgSecondTrackFilterNoPID->AddCut(pTPC);
322                   anaCuts= cgSecondTrackFilterNoPID;
323                   break;
324                 case kPbPb2011TPCandTOFHPT:
325                   //test Hongyan's cut
326                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
327                   cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
328                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandITSTOF);
329                   anaCuts = cgSecondTrackFilterPIDTPC1;
330                   break;
331                 case kPbPb2011TPCandTOF :
332                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
333                   cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
334                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
335                   anaCuts = cgSecondTrackFilterPIDTPC1;
336                   break;
337                 case kPbPb2011TPC :
338                   //Old, QM12
339                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
340                   cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
341                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
342                   anaCuts = cgSecondTrackFilterPIDTPC1;
343                   break;
344
345                 case kPbPb2011TPCandTOFwide :
346                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
347                   cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
348                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
349                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
350                   anaCuts = cgSecondTrackFilterPIDTPC1;
351                   break;
352
353                 case kPbPb2011TPCorTOF  :
354                   //unused
355                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC2 = new AliDielectronCutGroup("cgPIDTPC2","cgPIDTPC2",AliDielectronCutGroup::kCompAND);
356                   cgSecondTrackFilterPIDTPC2->AddCut(pTPC);
357 //                cgSecondTrackFilterPIDTPC2->AddCut(pidTT);
358                   anaCuts = cgSecondTrackFilterPIDTPC2;
359                   break;
360                 case kpp2010TPCandTOF :
361                   //unused
362                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
363                   cgSecondTrackFilterPIDTPC->AddCut(pTPC);
364                   cgSecondTrackFilterPIDTPC->AddCut(pidTPCandTOF);
365                   anaCuts = cgSecondTrackFilterPIDTPC;
366                   break;
367                 case kpp2010TPCorTOF  :
368                   //unused
369                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
370                   cgSecondTrackFilterPIDTPC->AddCut(pTPC);
371                   ///             cgSecondTrackFilterPIDTPC->AddCut(pidTT);
372                   anaCuts = cgSecondTrackFilterPIDTPC;
373                   break;
374                 case kPbPb2011pidITSTPCTOF:
375                   AliDielectronCutGroup* cgPIDCutsAna = new AliDielectronCutGroup("cgPIDCutsAna","cgPIDCutsAna",AliDielectronCutGroup::kCompAND);
376                   cgPIDCutsAna->AddCut(etaRange076);
377                   cgPIDCutsAna->AddCut(ptRange400to3500);
378                   cgPIDCutsAna->AddCut(pidTPCITS_TOFif2);
379                   cgPIDCutsAna->AddCut(GetTrackCutsAna(cutSet));
380                   anaCuts = cgPIDCutsAna;
381                   break;
382
383                 default: cout << "No Analysis PID Cut defined " << endl;
384           }
385           return anaCuts;
386         }
387
388
389         //Relaxed PID cuts for additional rejectin step, do not use blindly
390         AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
391           AliAnalysisCuts* anaCuts=0x0;
392           switch (cutSet) {
393                 case kPbPb2011NoPID:
394                 case kPbPb2011TPCandTOF :
395                 case kPbPb2011TPCandTOFHPT:
396                 case kPbPb2011TPC :
397                 case kPbPb2011TPCandTOFwide :
398                 case kpp2010TPCandTOF :
399                 case kpp2010TPCorTOF  :
400                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
401                   AliDielectronCutGroup* cgITSTPC = new AliDielectronCutGroup("cgITSTPC","cgITSTPC",AliDielectronCutGroup::kCompAND);
402                   AliDielectronPID *pidITSTPC = new AliDielectronPID("TPCpre","TPCpre");
403
404                   pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
405                   pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
406                   pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,0.4,kTRUE);
407                   pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,0.4,kTRUE);
408                   pidITSTPC->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.4 , 100., kFALSE );
409                   cgITSTPC->AddCut(pidITSTPC);
410
411                   AliDielectronVarCuts *pTPCHPT = new AliDielectronVarCuts("P>.4hpt","P>.4hpt");
412                   pTPCHPT->AddCut(AliDielectronVarManager::kPt,.2,3.5);
413                   cgITSTPC->AddCut(pTPCHPT);
414
415                   cgITSTPC->AddCut(GetTrackCutsAna(cutSet));
416
417
418                   AliDielectronCutGroup* cgITSSA = new AliDielectronCutGroup("cgITSSA","cgITSSA",AliDielectronCutGroup::kCompAND);
419                   AliDielectronPID *pidITSSA = new  AliDielectronPID("pidITSSA","pidITSSA");
420                   pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-3.,3.);
421                   cgITSSA->AddCut(pidITSSA);
422                   AliDielectronVarCuts *pITSPT = new AliDielectronVarCuts("P>.4hpt","P>.4hpt");
423                   pITSPT->AddCut(AliDielectronVarManager::kPt,0.0,0.8);
424                   cgITSSA->AddCut(pITSPT);
425                   cgITSSA->AddCut(GetTrackCutsPre(cutSet));
426
427                   AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
428                   cgInitialTrackFilter->AddCut(cgITSTPC);
429                   cgInitialTrackFilter->AddCut(cgITSSA);
430                   anaCuts = cgInitialTrackFilter;
431                   break;
432
433
434                 case kPbPb2011TPCorTOF  :
435                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
436                   AliDielectronCutGroup* cgITSTPCalone = new AliDielectronCutGroup("cgITSTPCalone","cgITSTPCalone",AliDielectronCutGroup::kCompAND);
437                   AliDielectronPID *pidITSTPCalone = new AliDielectronPID("TPCpre","TPCpre");
438
439                   pidITSTPCalone->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
440                   pidITSTPCalone->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
441                   pidITSTPCalone->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,0.4,kTRUE);
442                   pidITSTPCalone->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,0.4,kTRUE);
443                   pidITSTPCalone->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.4 , 100., kFALSE );
444                   cgITSTPCalone->AddCut(pidITSTPCalone);
445
446                   AliDielectronVarCuts *pTPCHPT = new AliDielectronVarCuts("P>.4hpt","P>.4hpt");
447                   pTPCHPT->AddCut(AliDielectronVarManager::kPt,.2,3.5);
448                   cgITSTPCalone->AddCut(pTPCHPT);
449
450                   cgITSTPCalone->AddCut(GetTrackCutsAna(cutSet));
451
452
453
454                   anaCuts = cgITSTPCalone;
455                   break;
456
457           case kPbPb2011pidITSTPCTOF:
458
459                   // eta range:
460                   AliDielectronVarCuts *etaRangePre1 = new AliDielectronVarCuts("etaRangePre1","etaRangePre1");
461                   etaRangePre1->AddCut(AliDielectronVarManager::kEta,-0.9,0.9);
462                   // pt range:
463                   AliDielectronVarCuts *ptRangePre1 = new AliDielectronVarCuts("ptRangePre1","ptRangePre1");
464                   ptRangePre1->AddCut(AliDielectronVarManager::kPt, .2, 3.5); // 0.2 is realistic. turnon at ~180MeV
465                   //AliDielectronVarCuts *ptRangePre2 = new AliDielectronVarCuts("ptRangePre2","ptRangePre2");
466                   //ptRangePre2->AddCut(AliDielectronVarManager::kPt, .4, 3.5);
467                   //AliDielectronVarCuts *ptRangePre3 = new AliDielectronVarCuts("ptRangePre3","ptRangePre3");
468                   //ptRangePre3->AddCut(AliDielectronVarManager::kPt, 0.05, 1.5);
469
470                   AliDielectronCutGroup* cgITSTPCTOFpre = new AliDielectronCutGroup("cgITSTPCTOFpre","cgITSTPCTOFpre",AliDielectronCutGroup::kCompAND);
471                   AliDielectronPID *pidITSTPCTOFpre = new AliDielectronPID("pidITSTPCTOFpre","pidITSTPCTOFpre");
472                   pidITSTPCTOFpre->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -3. , 3., 0. ,100., kFALSE);
473                   pidITSTPCTOFpre->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3. , 3., 0. ,100., kTRUE);
474                   // ITS will be used:
475                   //  pidITSTPCTOFpre->AddCut(AliDielectronPID::kITS,AliPID::kElectron, -3. , 3., 0. ,1.7 , kFALSE);
476                   // TOF will be used if available, and with pt instead of p:
477                   //  pidITSTPCTOFpre->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -3. , 3., 0.4,100., kFALSE,
478                   //                          AliDielectronPID::kIfAvailable, AliDielectronVarManager::kPt);
479                   cgITSTPCTOFpre->AddCut(pidITSTPCTOFpre);
480                   cgITSTPCTOFpre->AddCut(etaRangePre1);
481                   cgITSTPCTOFpre->AddCut(ptRangePre1);
482                   cgITSTPCTOFpre->AddCut(GetTrackCutsAna(cutSet));
483                   AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
484                   cgInitialTrackFilter->AddCut(GetPIDCutsAna(cutSet)); // in case the prefilter cuts do not include all needed global tracks.
485                   cgInitialTrackFilter->AddCut(cgITSTPCTOFpre);
486                   //cgInitialTrackFilter->AddCut(cgTPCpre);
487                   //cgInitialTrackFilter->AddCut(cgITSSA);
488                   anaCuts = cgInitialTrackFilter;   // kCompOR works!!! <- checked with 'SetNoPairing()' and commented out 'GetPIDCutsAna(selectedPID)'
489                   //cout << " ========== anaCuts prefilter: ========== " << endl;
490                   //anaCuts->Print();
491                   break;
492
493
494                 default: cout << "No Pre-PID Cut defined " << endl;
495           }
496           return anaCuts;
497         }
498
499
500
501
502         //Pair Cuts for Analysis step - take care of logic - inverted compared to other PairCuts!!
503         AliAnalysisCuts* GetPairCuts2(Int_t cutSet, Bool_t togglePC /*=kFALSE*/)  {
504            AliAnalysisCuts* pairCuts=0x0;
505            switch (cutSet) {
506                   case kPbPb2011TPCorTOF  :
507                   case kpp2010TPCandTOF :
508                          AliDielectronVarCuts* pairCutsV= new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
509                          pairCutsV->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
510                          pairCuts = pairCutsV;
511                          break;
512                   case kPbPb2011NoPID:
513                   case kPbPb2011TPCandTOF :
514                   case kPbPb2011TPC :
515                   case kPbPb2011TPCandTOFHPT:
516                   case kPbPb2011TPCandTOFwide :
517                   case kpp2010TPCorTOF  :
518                          if (!togglePC) {
519
520                                 AliDielectronCutGroup* pairCutsCG2 =new AliDielectronCutGroup("pairCutsCG2","pairCutsCG2",AliDielectronCutGroup::kCompOR);
521                                 AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
522                                 pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
523                                 pairCutsPhiv->AddCut(AliDielectronVarManager::kPhivPair, 0.0, 2.0); 
524                                 pairCutsInvM =new AliDielectronVarCuts("InvM Cuts","InvM<0.3");
525                                 pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.05); 
526                                 pairCutsInvMgood =new AliDielectronVarCuts("InvM Cuts good","InvM>0.3");
527                                 pairCutsInvMgood->AddCut(AliDielectronVarManager::kM, 0.05, 99999.); 
528                                 pairCutsCG->AddCut(pairCutsPhiv);
529                                 pairCutsCG->AddCut(pairCutsInvM);
530                                 pairCutsCG2->AddCut(pairCutsInvMgood);
531                                 pairCutsCG2->AddCut(pairCutsCG);
532                                 pairCuts = pairCutsCG2;
533                          }
534                          else {
535                                 AliDielectronVarCuts* pairCutsV =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
536                                 pairCutsV->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035,kTRUE);
537                                 pairCuts = pairCutsV;
538                          }
539                          break;
540                   default: cout << "No Pair Cuts defined " << endl;
541            }
542            return pairCuts;
543         }
544
545
546
547         //Pair Cuts for PREFILTER step
548         AliAnalysisCuts* GetPairCuts(Int_t cutSet)  {  
549            AliAnalysisCuts* pairCuts=0x0;
550            switch (cutSet) {
551                   case kPbPb2011TPCorTOF  :
552                   case kpp2010TPCandTOF :
553                         AliDielectronVarCuts* pairCutsM=0x0;
554                   pairCutsM = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
555                   pairCutsM->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
556                   pairCuts = pairCutsM;
557                   break;
558                 case kPbPb2011NoPID:
559                 case kPbPb2011TPCandTOF :
560                 case kPbPb2011TPC :
561                 case kPbPb2011TPCandTOFwide :
562                 case kPbPb2011TPCandTOFHPT:
563 /*              case kpp2010TPCorTOF  :
564
565                   AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
566                   //AliDielectronVarCuts* pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
567                   //pairCutsPhiv->AddCut(AliDielectronVarManager::kPhivPair, 2.0, 3.2); 
568                   AliDielectronVarCuts* pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
569                   pairCutsPhiv->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.05); 
570                   AliDielectronVarCuts* pairCutsInvM =new AliDielectronVarCuts("InvM Cuts","InvM<0.3");
571                   pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.01); 
572                   pairCutsCG->AddCut(pairCutsPhiv);
573                   pairCutsCG->AddCut(pairCutsInvM);
574 */
575                   AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
576                   AliDielectronVarCuts* pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
577                   pairCutsPhiv->AddCut(AliDielectronVarManager::kPhivPair, 2.0, 3.2); 
578                   //AliDielectronVarCuts* pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
579                   //pairCutsPhiv->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.05); 
580                   AliDielectronVarCuts* pairCutsInvM =new AliDielectronVarCuts("InvM Cuts","InvM<0.3");
581                   pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.05); 
582                   pairCutsCG->AddCut(pairCutsPhiv);
583                   pairCutsCG->AddCut(pairCutsInvM);
584                                   pairCuts = pairCutsCG;
585
586
587                 //pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
588                 //pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
589                 break;
590                 default: cout << "No Pair Cuts defined " << endl;
591           } 
592           return pairCuts;
593         }
594
595
596   AliAnalysisCuts* GetPairCutsInvMass(Int_t cutSet) {
597     cout << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>> GetPairCutsInvMass() >>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl;
598     AliAnalysisCuts* pairCuts=0x0;
599     switch (cutSet) {
600     case kPbPb2011MassLow :
601       AliDielectronVarCuts* pairCutsInvSelect = new AliDielectronVarCuts("InvMass","0 MeV  < InvMass < 30 MeV");
602       pairCutsInvSelect->AddCut(AliDielectronVarManager::kM, 0.,0.03);
603       break;
604     case kPbPb2011MassMiddle :
605       AliDielectronVarCuts* pairCutsInvSelect = new AliDielectronVarCuts("InvMass","120 MeV  < InvMass < 300 MeV");
606       pairCutsInvSelect->AddCut(AliDielectronVarManager::kM, 0.12,0.30);
607       break;
608     case kPbPb2011MassHigh :
609       AliDielectronVarCuts* pairCutsInvSelect = new AliDielectronVarCuts("InvMass","300 MeV  < InvMass < 500 MeV");
610       pairCutsInvSelect->AddCut(AliDielectronVarManager::kM, 0.30,0.50);
611       break;
612     case kPbPb2011MassAll :
613       AliDielectronVarCuts* pairCutsInvSelect = new AliDielectronVarCuts("InvMass","0 GeV  < InvMass < 10 GeV");
614       pairCutsInvSelect->AddCut(AliDielectronVarManager::kM, 0.0,10.0);
615       break;
616
617     default: cout << "No Pair Cuts defined " << endl;
618     }
619
620     pairCuts = pairCutsInvSelect;
621     return pairCuts;
622   }
623
624   
625   AliAnalysisCuts* GetPairCutsInOut(Int_t cutSet){
626     AliAnalysisCuts* pairCut=0x0;
627     switch (cutSet) {
628     case kPbPb2011RP:
629       AliDielectronCutGroup* pairCutsPhiRP =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompOR);
630       AliDielectronVarCuts* pairCutsPhi1 =new AliDielectronVarCuts("Phi Cuts","-pi/4<Phi<pi/4");
631       pairCutsPhi1->AddCut(AliDielectronVarManager::kDeltaPhiv0CrpH2, (-1.0)*TMath::Pi()/4., TMath::Pi()/4.);
632       AliDielectronVarCuts* pairCutsPhi2 =new AliDielectronVarCuts("Phi Cuts","3*pi/4<Phi");
633       pairCutsPhi2->AddCut(AliDielectronVarManager::kDeltaPhiv0CrpH2, 3.0*TMath::Pi()/4., TMath::Pi());
634       AliDielectronVarCuts* pairCutsPhi3 =new AliDielectronVarCuts("Phi Cuts","-3*pi/4<Phi");
635       pairCutsPhi3->AddCut(AliDielectronVarManager::kDeltaPhiv0CrpH2, (-1.0)*TMath::Pi(),(-3.0)*TMath::Pi()/4.);
636         
637       pairCutsPhiRP->AddCut(pairCutsPhi1);
638       pairCutsPhiRP->AddCut(pairCutsPhi2);
639       pairCutsPhiRP->AddCut(pairCutsPhi3);
640
641       pairCuts = pairCutsPhiRP;
642
643       break;
644     case kPbPb2011Mag:
645       AliDielectronCutGroup* pairCutsPhiMag=new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompOR);
646       AliDielectronVarCuts* pairCutsPhi4 =new AliDielectronVarCuts("Phi Cuts","-3*pi/4<Phi");
647       pairCutsPhi4->AddCut(AliDielectronVarManager::kDeltaPhiv0CrpH2, TMath::Pi()/4.,3.0*TMath::Pi()/4.);
648       AliDielectronVarCuts* pairCutsPhi5 =new AliDielectronVarCuts("Phi Cuts","-3*pi/4<Phi");
649       pairCutsPhi5->AddCut(AliDielectronVarManager::kDeltaPhiv0CrpH2,(-3.0)*TMath::Pi()/4.,(-1.0)*TMath::Pi()/4.);
650
651       pairCutsPhiMag->AddCut(pairCutsPhi4);
652       pairCutsPhiMag->AddCut(pairCutsPhi5);
653
654       pairCuts = pairCutsPhiMag;
655       //pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
656       //pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
657       break;
658     default: cout << "No Pair Cuts defined " << endl;
659     }
660     return pairCuts;
661   }
662   
663
664
665
666         //*******************************************************************************
667         //*******************************************************************************
668         //** ESD TRACK CUTS TUNED FOR AGREEMENT BETWEEN AODS AND ESDS  ******************
669         //** NOT NECESSARILY 100% OPTIMIZED FOR DIEL-ANALYSIS          ******************
670         //*******************************************************************************
671         //*******************************************************************************
672
673         //WHEN RUNNING ON ESDs: LOAD Default Cuts for AODs
674         AliAnalysisCuts* GetESDTrackCutsAna(Int_t cutSet) {
675           AliESDtrackCuts* esdTrackCutsH = 0x0;
676           switch (cutSet) {
677                 case kPbPb2011NoPID:
678                 case kPbPb2011TPCandTOF :
679                 case kPbPb2011TPCandTOFHPT:
680                 case kPbPb2011TPC :
681                 case kPbPb2011TPCandTOFwide :
682                 case kPbPb2011TPCorTOF  :
683                 case kpp2010TPCandTOF :
684                 case kpp2010TPCorTOF  :
685                         // standard cuts with very loose DCA: Bit4 (Int: 16), AOD095&115
686
687                   
688                          esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE); 
689                          esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
690                          esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
691                          esdTrackCutsH->SetDCAToVertex2D(kTRUE);
692
693                          //The cuts below should be the onyl ones that are missing
694                          //explicitely in the TrackCutsAna method
695                          //To be sure, StandardITSTPCTrackCuts is loaded however
696                 /* 
697                   esdTrackCutsH = new AliESDtrackCuts();
698                   esdTrackCutsH->SetAcceptKinkDaughters(kFALSE);
699                   //Not done so far via dielectron cuts:
700                   */
701                   /*
702                   esdTrackCuts->SetDCAToVertex2D(kFALSE);
703                   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
704                   esdTrackCuts->SetMaxChi2PerClusterITS(36);
705                    */
706
707                   break;
708
709                 default: cout << "No Analysis Track Cut defined " << endl;
710           }
711           return esdTrackCutsH;
712         } 
713
714
715         //Make/Tighten track Cuts that are *NOT* already
716         //done in the AOD production
717         //**IMPORTANT**: For AODs, select FilterBit
718         //the method is ignored for ESDs
719         
720         AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
721           AliDielectronCutGroup* trackCuts=0x0;
722           switch (cutSet) {
723                 case kPbPb2011NoPID:
724                 case kPbPb2011TPCandTOF :
725                 case kPbPb2011TPCandTOFHPT:
726                 case kPbPb2011TPC :
727                 case kPbPb2011TPCandTOFwide :
728                 case kPbPb2011TPCorTOF  :
729                 case kpp2010TPCandTOF :
730                 case kpp2010TPCorTOF  :
731                         trackCuts = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
732
733                         AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
734                         trackCutsAOD->AddCut(AliDielectronVarManager::kPt,0.05,6.);
735                         trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.84,0.84);
736                         //DCA Cut
737                         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
738                         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
739                         trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     3.0, 100.0);
740                         trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   3.5);
741                         AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
742                         trackCutsDiel->SetAODFilterBit(16); //does nothing for ESDs
743                         trackCutsDiel->SetRequireITSRefit(kTRUE);
744                         trackCutsDiel->SetRequireTPCRefit(kTRUE);
745
746                         trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
747 //                      trackCutsAOD->AddCut(AliDielectronVarManager::kNclsTPC,     80., 140.0);
748                         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCr,     110.0, 160.0);
749                         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCfCross,     0.8, 1.0);//tighter than before,
750                                                                                                                                                                                  //due to AOD production
751                         trackCuts->AddCut(trackCutsDiel);
752                         trackCuts->AddCut(trackCutsAOD);
753                   break;
754
755           case kPbPb2011pidITSTPCTOF:
756             AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
757             trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
758             trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
759             trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     4.0, 100.0); // means at least 2 with PID
760             trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
761             trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCr,     100.0, 160.0);
762             trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCfCross,     0.8, 1.1); // lower limit 0.8 in most filterbits! // 1.1 since 26.02.2014
763             AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
764             trackCutsDiel->SetAODFilterBit(1<<4); // (=16) filterbit 4! //GetStandardITSTPCTrackCuts2011(kFALSE); loose DCA, 2D cut
765             trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
766
767             cgTrackCutsAnaSPDfirst = new AliDielectronCutGroup("cgTrackCutsAnaSPDfirst","cgTrackCutsAnaSPDfirst",AliDielectronCutGroup::kCompAND);
768             cgTrackCutsAnaSPDfirst->AddCut(trackCutsDiel);
769             cgTrackCutsAnaSPDfirst->AddCut(trackCutsAOD);
770             trackCuts = cgTrackCutsAnaSPDfirst;
771             break;
772
773
774
775                 default: cout << "No Analysis Track Cut defined " << endl;
776           }
777           return trackCuts;
778         } 
779
780
781         //Possibly different cut sets for Prefilter step
782         //Not used at the moment
783         AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
784           AliDielectronCutGroup* trackCuts=0x0;
785           switch (cutSet) {
786                 case kPbPb2011NoPID:
787                 case kPbPb2011TPCandTOF :
788                 case kPbPb2011TPCandTOFHPT:
789                 case kPbPb2011TPCorTOF  :
790                 case kpp2010TPCandTOF :
791                 case kpp2010TPCorTOF  :
792                    trackCuts = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
793
794                    AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
795                    trackCutsAOD->AddCut(AliDielectronVarManager::kPt,0.05,0.2);
796                    trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.84,0.84);
797                    //DCA Cut
798                    trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
799                    trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
800                    trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     3.0, 100.0);
801                    AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
802                    trackCutsDiel->SetAODFilterBit(1); //does nothing for ESDs, ITSSA
803                    trackCutsDiel->SetRequireITSRefit(kTRUE);
804
805                    trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
806                    trackCuts->AddCut(trackCutsDiel);
807                    trackCuts->AddCut(trackCutsAOD);
808                    //             cout << "No Pre-Track Cut defined for AODs at the moment " << endl;
809                   break;
810
811           case kPbPb2011pidITSTPCTOF:
812
813             AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
814             trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.84,0.84);
815             trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
816             trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
817             trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     3.0, 100.0);
818             AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
819             trackCutsDiel->SetAODFilterBit(1); //does nothing for ESDs, ITSSA(???) // maybe use FilterBit(2) instead!
820
821             cgTrackCutsPre = new AliDielectronCutGroup("cgTrackCutsPre","cgTrackCutsPre",AliDielectronCutGroup::kCompAND);
822             cgTrackCutsPre->AddCut(trackCutsDiel);
823             cgTrackCutsPre->AddCut(trackCutsAOD);
824             trackCuts = cgTrackCutsPre;
825             break;
826
827                 default: cout << "No Pre-Track Cut defined " << endl;
828           }
829           return trackCuts;
830         }
831
832 };