]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/LMEECutLibAOD.C
update from pr task : sjena
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / LMEECutLibAOD.C
1 class LMEECutLib {
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                 kCUTSETMAX
14         };
15
16         static  enum LMMECentSel {
17           kPbPb2011Central,
18                 kPbPb2011SemiCentral,
19                 kPbPb2011Peripheral,
20                 kCENTSELMAX
21         };
22
23         //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
24
25
26         LMEECutLib() {}
27
28         AliDielectronEventCuts*     GetEventCuts(Int_t cutSet);
29         AliAnalysisCuts*            GetCentralityCuts(Int_t centSel);
30         AliDielectronTrackRotator*  GetTrackRotator(Int_t cutSet);
31         AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
32
33         AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);  
34         AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);  
35
36         AliAnalysisCuts* GetPairCuts2(Int_t cutSet,Bool_t tooglePC=kFALSE);
37         AliAnalysisCuts* GetPairCuts(Int_t cutSet);  
38
39         AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);  
40         AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);  
41
42
43
44
45         AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
46           AliDielectronEventCuts* eventCuts = 0x0;
47           switch (cutSet) {
48                 case kPbPb2011NoPID:
49                 case kPbPb2011TPCandTOF :
50                 case kPbPb2011TPCandTOFHPT:
51                 case kPbPb2011TPC :
52                 case kPbPb2011TPCandTOFwide :
53                 case kPbPb2011TPCorTOF  :
54                 case kpp2010TPCandTOF :
55                 case kpp2010TPCorTOF  :
56                   //Basic Event Cuts for pp and Pb-Pb, additional cuts may be in the AddTask
57                   eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
58                   eventCuts->SetVertexType(AliDielectronEventCuts::kVtxSPD); // AOD
59                   //eventCuts->SetVertexType(AliDielectronEventCuts::kVtxTPC); // AOD
60                   //           eventCuts->SetCentralityRange(0.0,80.0);
61                   eventCuts->SetRequireVertex();
62                   eventCuts->SetMinVtxContributors(1);
63                   eventCuts->SetVertexZ(-10.,10.);
64                   break;
65                 default: cout << "No Event Cut defined" << endl;
66           }
67           return eventCuts;
68         }
69
70
71         //Selection of relatively 'flat' centralities
72         AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
73           AliDielectronVarCuts* centCuts = 0x0;
74           switch (centSel) {
75                 case kPbPb2011Central:
76                   centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
77                   centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
78                   break;
79                 case kPbPb2011SemiCentral:
80                   centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral");
81                   //Restrict to 50%, Trigger selction
82                   centCuts->AddCut(AliDielectronVarManager::kCentrality,20.,50.);
83                   break;
84                 case kPbPb2011Peripheral:
85                   centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
86                   centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
87                   break;
88                         default: cout << "No Centrality selected" << endl;
89           }
90           return centCuts;
91         }
92
93
94         //Basic track rotator settings from J/Psi, more investigation needed
95         AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
96           AliDielectronTrackRotator* trackRotator = 0x0;
97           switch (cutSet) {
98                 case kPbPb2011NoPID:
99                 case kPbPb2011TPCandTOF :
100                 case kPbPb2011TPCandTOFHPT:
101                 case kPbPb2011TPC :
102                 case kPbPb2011TPCandTOFwide :
103                 case kPbPb2011TPCorTOF  :
104                 case kpp2010TPCandTOF :
105                 case kpp2010TPCorTOF  :
106                   trackRotator = new AliDielectronTrackRotator();
107                   trackRotator->SetIterations(20);
108                   trackRotator->SetConeAnglePhi(TMath::Pi()/180*165);
109                   trackRotator->SetStartAnglePhi(TMath::Pi());
110                   break;
111                 default: cout << "No Rotator defined" << endl;
112           }
113           return trackRotator;
114         }
115
116
117         AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
118           AliDielectronMixingHandler* mixingHandler = 0x0;
119           switch (cutSet) {
120                 case kPbPb2011TPCorTOF  :
121                 case kPbPb2011NoPID:
122                 case kPbPb2011TPCandTOF :
123                 case kPbPb2011TPCandTOFHPT:
124                 case kPbPb2011TPC :
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);
133                   break;
134                 case kpp2010TPCandTOF :
135                 case kpp2010TPCorTOF  :
136                   //ATTENTION: Trivial 1 Bin Variable on Nacc needed: Not understood bug, mixing breaks
137                   //when just adding one variable *****************!!! 
138                   mixingHandler = new AliDielectronMixingHandler;
139                   mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
140                   mixingHandler->AddVariable(AliDielectronVarManager::kNacc,"0,10000");
141                   //might want to add multiplicity?
142                   mixingHandler->SetDepth(50);
143                   mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
144                   break;
145                 default: cout << "No Rotator defined" << endl;
146           }
147           return mixingHandler;
148         }
149
150
151         AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
152           AliAnalysisCuts* anaCuts=0x0;
153
154           //-----------------------------------------------
155           //Define different PID Cuts, that are used later
156           //-----------------------------------------------
157           
158       //TPC: UPPER HALF inclusion of electron
159           //     3sigma exclusion of Pions
160           //TOF: 3sigma inclusion of electrons
161           AliDielectronPID *pidTPCTOFeOnly = new AliDielectronPID("TPC-TOF","TPC-TOF");
162           pidTPCTOFeOnly->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-0.,3.,0.0,100.,kFALSE);
163           pidTPCTOFeOnly->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
164           pidTPCTOFeOnly->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 1.5, kFALSE );
165
166       //TPC: 3sigma inclusion of electron
167           //     3sigma exclusion of Pions
168           //TOF: 3sigma inclusion of electrons in region where p,K cross electrons in TPC
169           AliDielectronPID *pidTPCandTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
170           pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
171           pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
172           pidTPCandTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 1.5, kFALSE );
173
174           //Apply ITS cuts (see Hongyan's talks):
175           //3 sigma inclusion of electrons in TPC
176           //3 sigma exclusion of pions in TPC
177           //3 sigma inclusion of electrons in ITS,TOF for p<1.5GeV, where p,K contamination
178           AliDielectronPID *pidTPCandITSandTOF = new AliDielectronPID("TPC-TOFANDITS","TPC-TOFANDITS");
179           pidTPCandITSandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
180           pidTPCandITSandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
181           pidTPCandITSandTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 1.5, kFALSE);
182           pidTPCandITSandTOF->AddCut(AliDielectronPID::kITS ,AliPID::kElectron , -6. , 3. , 0.0 , 1.5, kFALSE );
183
184           //Apply ITS cuts (see Hongyan's talks):
185           //3 sigma inclusion of electrons in TPC
186           //3 sigma exclusion of pions in TPC
187           //3 sigma inclusion of electrons in ITS,TOF for p<1.5GeV, where p,K contamination
188           //TOF only IF available!
189           AliDielectronPID *pidTPCandITSTOF = new AliDielectronPID("TPC-TOF-ITS","TPC-TOF-ITS");
190           pidTPCandITSTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
191           pidTPCandITSTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
192           pidTPCandITSTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 1.5, kFALSE,AliDielectronPID::kIfAvailable );
193           pidTPCandITSTOF->AddCut(AliDielectronPID::kITS ,AliPID::kElectron , -6. , 3. , 0.0 , 1.5, kFALSE );
194
195           //___________________________________________
196           //Direct cuts on TPC signal used for QM12
197           AliDielectronVarCuts *pidTPCsignal = new AliDielectronVarCuts("pidTPCsignal","cut on the TPC signal");
198           if (MCenabled) {
199           pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,65.,85.); 
200           }     
201           else {
202           pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.); 
203           }
204           //___________________________________________
205
206           //low pT cut-off 0.4 - Pb-Pb
207           AliDielectronVarCuts *pTPC = new AliDielectronVarCuts("P>.4","P>.4");
208           pTPC->AddCut(AliDielectronVarManager::kPt,.4,3.5);
209           
210           //low pT cut-off 0.4 - pp
211           AliDielectronVarCuts *pMin = new AliDielectronVarCuts("P>.2","P>.2");
212           pMin->AddCut(AliDielectronVarManager::kPt,.2,2.5);
213
214
215           //Now see what Config actually loads and assemble final cuts
216           switch (cutSet) {
217                 case kPbPb2011NoPID:
218                   AliDielectronCutGroup* cgSecondTrackFilterNoPID = new AliDielectronCutGroup("cgNoPID","cgNoPID",AliDielectronCutGroup::kCompAND);
219                   cgSecondTrackFilterNoPID->AddCut(pTPC);
220                   anaCuts= cgSecondTrackFilterNoPID;
221                   break;
222                 case kPbPb2011TPCandTOFHPT:
223                   //test Hongyan's cut
224                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
225                   cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
226                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandITSTOF);
227                   anaCuts = cgSecondTrackFilterPIDTPC1;
228                   break;
229                 case kPbPb2011TPCandTOF :
230                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
231                   cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
232                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
233                   anaCuts = cgSecondTrackFilterPIDTPC1;
234                   break;
235                 case kPbPb2011TPC :
236                   //Old, QM12
237                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
238                   cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
239                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
240                   anaCuts = cgSecondTrackFilterPIDTPC1;
241                   break;
242
243                 case kPbPb2011TPCandTOFwide :
244                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
245                   cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
246                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
247                   cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
248                   anaCuts = cgSecondTrackFilterPIDTPC1;
249                   break;
250
251                 case kPbPb2011TPCorTOF  :
252                   //unused
253                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC2 = new AliDielectronCutGroup("cgPIDTPC2","cgPIDTPC2",AliDielectronCutGroup::kCompAND);
254                   cgSecondTrackFilterPIDTPC2->AddCut(pTPC);
255 //                cgSecondTrackFilterPIDTPC2->AddCut(pidTT);
256                   anaCuts = cgSecondTrackFilterPIDTPC2;
257                   break;
258                 case kpp2010TPCandTOF :
259                   //unused
260                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
261                   cgSecondTrackFilterPIDTPC->AddCut(pTPC);
262                   cgSecondTrackFilterPIDTPC->AddCut(pidTPCandTOF);
263                   anaCuts = cgSecondTrackFilterPIDTPC;
264                   break;
265                 case kpp2010TPCorTOF  :
266                   //unused
267                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
268                   cgSecondTrackFilterPIDTPC->AddCut(pTPC);
269                   ///             cgSecondTrackFilterPIDTPC->AddCut(pidTT);
270                   anaCuts = cgSecondTrackFilterPIDTPC;
271                   break;
272                 default: cout << "No Analysis PID Cut defined " << endl;
273           }
274           return anaCuts;
275         }
276
277
278         //Relaxed PID cuts for additional rejectin step, do not use blindly
279         AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
280           AliAnalysisCuts* anaCuts=0x0;
281           switch (cutSet) {
282                 case kPbPb2011NoPID:
283                 case kPbPb2011TPCandTOF :
284                 case kPbPb2011TPCandTOFHPT:
285                 case kPbPb2011TPC :
286                 case kPbPb2011TPCandTOFwide :
287                 case kpp2010TPCandTOF :
288                 case kpp2010TPCorTOF  :
289                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
290                   AliDielectronCutGroup* cgITSTPC = new AliDielectronCutGroup("cgITSTPC","cgITSTPC",AliDielectronCutGroup::kCompAND);
291                   AliDielectronPID *pidITSTPC = new AliDielectronPID("TPCpre","TPCpre");
292
293                   pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
294                   pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
295                   pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,0.4,kTRUE);
296                   pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,0.4,kTRUE);
297                   pidITSTPC->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.4 , 100., kFALSE );
298                   cgITSTPC->AddCut(pidITSTPC);
299
300                   AliDielectronVarCuts *pTPCHPT = new AliDielectronVarCuts("P>.4hpt","P>.4hpt");
301                   pTPCHPT->AddCut(AliDielectronVarManager::kPt,.2,3.5);
302                   cgITSTPC->AddCut(pTPCHPT);
303
304                   cgITSTPC->AddCut(GetTrackCutsAna(cutSet));
305
306
307                   AliDielectronCutGroup* cgITSSA = new AliDielectronCutGroup("cgITSSA","cgITSSA",AliDielectronCutGroup::kCompAND);
308                   AliDielectronPID *pidITSSA = new  AliDielectronPID("pidITSSA","pidITSSA");
309                   pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-3.,3.);
310                   cgITSSA->AddCut(pidITSSA);
311                   AliDielectronVarCuts *pITSPT = new AliDielectronVarCuts("P>.4hpt","P>.4hpt");
312                   pITSPT->AddCut(AliDielectronVarManager::kPt,0.0,0.8);
313                   cgITSSA->AddCut(pITSPT);
314                   cgITSSA->AddCut(GetTrackCutsPre(cutSet));
315
316                   AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
317                   cgInitialTrackFilter->AddCut(cgITSTPC);
318                   cgInitialTrackFilter->AddCut(cgITSSA);
319                   anaCuts = cgInitialTrackFilter;
320                   break;
321
322
323                 case kPbPb2011TPCorTOF  :
324                   AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
325                   AliDielectronCutGroup* cgITSTPCalone = new AliDielectronCutGroup("cgITSTPCalone","cgITSTPCalone",AliDielectronCutGroup::kCompAND);
326                   AliDielectronPID *pidITSTPCalone = new AliDielectronPID("TPCpre","TPCpre");
327
328                   pidITSTPCalone->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
329                   pidITSTPCalone->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
330                   pidITSTPCalone->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,0.4,kTRUE);
331                   pidITSTPCalone->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,0.4,kTRUE);
332                   pidITSTPCalone->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.4 , 100., kFALSE );
333                   cgITSTPCalone->AddCut(pidITSTPCalone);
334
335                   AliDielectronVarCuts *pTPCHPT = new AliDielectronVarCuts("P>.4hpt","P>.4hpt");
336                   pTPCHPT->AddCut(AliDielectronVarManager::kPt,.2,3.5);
337                   cgITSTPCalone->AddCut(pTPCHPT);
338
339                   cgITSTPCalone->AddCut(GetTrackCutsAna(cutSet));
340
341
342
343                   anaCuts = cgITSTPCalone;
344                   break;
345                 default: cout << "No Pre-PID Cut defined " << endl;
346           }
347           return anaCuts;
348         }
349
350
351
352
353         //Pair Cuts for Analysis step - take care of logic - inverted compared to other PairCuts!!
354         AliAnalysisCuts* GetPairCuts2(Int_t cutSet, Bool_t togglePC /*=kFALSE*/)  {
355            AliAnalysisCuts* pairCuts=0x0;
356            switch (cutSet) {
357                   case kPbPb2011TPCorTOF  :
358                   case kpp2010TPCandTOF :
359                          AliDielectronVarCuts* pairCutsV= new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
360                          pairCutsV->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
361                          pairCuts = pairCutsV;
362                          break;
363                   case kPbPb2011NoPID:
364                   case kPbPb2011TPCandTOF :
365                   case kPbPb2011TPC :
366                   case kPbPb2011TPCandTOFHPT:
367                   case kPbPb2011TPCandTOFwide :
368                   case kpp2010TPCorTOF  :
369                          if (!togglePC) {
370
371                                 AliDielectronCutGroup* pairCutsCG2 =new AliDielectronCutGroup("pairCutsCG2","pairCutsCG2",AliDielectronCutGroup::kCompOR);
372                                 AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
373                                 pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
374                                 pairCutsPhiv->AddCut(AliDielectronVarManager::kPhivPair, 0.0, 2.0); 
375                                 pairCutsInvM =new AliDielectronVarCuts("InvM Cuts","InvM<0.3");
376                                 pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.05); 
377                                 pairCutsInvMgood =new AliDielectronVarCuts("InvM Cuts good","InvM>0.3");
378                                 pairCutsInvMgood->AddCut(AliDielectronVarManager::kM, 0.05, 99999.); 
379                                 pairCutsCG->AddCut(pairCutsPhiv);
380                                 pairCutsCG->AddCut(pairCutsInvM);
381                                 pairCutsCG2->AddCut(pairCutsInvMgood);
382                                 pairCutsCG2->AddCut(pairCutsCG);
383                                 pairCuts = pairCutsCG2;
384                          }
385                          else {
386                                 AliDielectronVarCuts* pairCutsV =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
387                                 pairCutsV->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035,kTRUE);
388                                 pairCuts = pairCutsV;
389                          }
390                          break;
391                   default: cout << "No Pair Cuts defined " << endl;
392            }
393            return pairCuts;
394         }
395
396
397
398         //Pair Cuts for PREFILTER step
399         AliAnalysisCuts* GetPairCuts(Int_t cutSet)  {  
400            AliAnalysisCuts* pairCuts=0x0;
401            switch (cutSet) {
402                   case kPbPb2011TPCorTOF  :
403                   case kpp2010TPCandTOF :
404                         AliDielectronVarCuts* pairCutsM=0x0;
405                   pairCutsM = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
406                   pairCutsM->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
407                   pairCuts = pairCutsM;
408                   break;
409                 case kPbPb2011NoPID:
410                 case kPbPb2011TPCandTOF :
411                 case kPbPb2011TPC :
412                 case kPbPb2011TPCandTOFwide :
413                 case kPbPb2011TPCandTOFHPT:
414 /*              case kpp2010TPCorTOF  :
415
416                   AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
417                   //AliDielectronVarCuts* pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
418                   //pairCutsPhiv->AddCut(AliDielectronVarManager::kPhivPair, 2.0, 3.2); 
419                   AliDielectronVarCuts* pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
420                   pairCutsPhiv->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.05); 
421                   AliDielectronVarCuts* pairCutsInvM =new AliDielectronVarCuts("InvM Cuts","InvM<0.3");
422                   pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.01); 
423                   pairCutsCG->AddCut(pairCutsPhiv);
424                   pairCutsCG->AddCut(pairCutsInvM);
425 */
426                   AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
427                   AliDielectronVarCuts* pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
428                   pairCutsPhiv->AddCut(AliDielectronVarManager::kPhivPair, 2.0, 3.2); 
429                   //AliDielectronVarCuts* pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
430                   //pairCutsPhiv->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.05); 
431                   AliDielectronVarCuts* pairCutsInvM =new AliDielectronVarCuts("InvM Cuts","InvM<0.3");
432                   pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.05); 
433                   pairCutsCG->AddCut(pairCutsPhiv);
434                   pairCutsCG->AddCut(pairCutsInvM);
435                                   pairCuts = pairCutsCG;
436
437
438                 //pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
439                 //pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
440                 break;
441                 default: cout << "No Pair Cuts defined " << endl;
442           } 
443           return pairCuts;
444         }
445
446
447
448
449
450         //*******************************************************************************
451         //*******************************************************************************
452         //** ESD TRACK CUTS TUNED FOR AGREEMENT BETWEEN AODS AND ESDS  ******************
453         //** NOT NECESSARILY 100% OPTIMIZED FOR DIEL-ANALYSIS          ******************
454         //*******************************************************************************
455         //*******************************************************************************
456
457         //WHEN RUNNING ON ESDs: LOAD Default Cuts for AODs
458         AliAnalysisCuts* GetESDTrackCutsAna(Int_t cutSet) {
459           AliESDtrackCuts* esdTrackCutsH = 0x0;
460           switch (cutSet) {
461                 case kPbPb2011NoPID:
462                 case kPbPb2011TPCandTOF :
463                 case kPbPb2011TPCandTOFHPT:
464                 case kPbPb2011TPC :
465                 case kPbPb2011TPCandTOFwide :
466                 case kPbPb2011TPCorTOF  :
467                 case kpp2010TPCandTOF :
468                 case kpp2010TPCorTOF  :
469                         // standard cuts with very loose DCA: Bit4 (Int: 16), AOD095&115
470
471                   
472                          esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE); 
473                          esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
474                          esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
475                          esdTrackCutsH->SetDCAToVertex2D(kTRUE);
476
477                          //The cuts below should be the onyl ones that are missing
478                          //explicitely in the TrackCutsAna method
479                          //To be sure, StandardITSTPCTrackCuts is loaded however
480                 /* 
481                   esdTrackCutsH = new AliESDtrackCuts();
482                   esdTrackCutsH->SetAcceptKinkDaughters(kFALSE);
483                   //Not done so far via dielectron cuts:
484                   */
485                   /*
486                   esdTrackCuts->SetDCAToVertex2D(kFALSE);
487                   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
488                   esdTrackCuts->SetMaxChi2PerClusterITS(36);
489                    */
490
491                   break;
492                 default: cout << "No Analysis Track Cut defined " << endl;
493           }
494           return esdTrackCutsH;
495         } 
496
497
498         //Make/Tighten track Cuts that are *NOT* already
499         //done in the AOD production
500         //**IMPORTANT**: For AODs, select FilterBit
501         //the method is ignored for ESDs
502         
503         AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
504           AliDielectronCutGroup* trackCuts=0x0;
505           switch (cutSet) {
506                 case kPbPb2011NoPID:
507                 case kPbPb2011TPCandTOF :
508                 case kPbPb2011TPCandTOFHPT:
509                 case kPbPb2011TPC :
510                 case kPbPb2011TPCandTOFwide :
511                 case kPbPb2011TPCorTOF  :
512                 case kpp2010TPCandTOF :
513                 case kpp2010TPCorTOF  :
514                         trackCuts = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
515
516                         AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
517                         trackCutsAOD->AddCut(AliDielectronVarManager::kPt,0.05,6.);
518                         trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.84,0.84);
519                         //DCA Cut
520                         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
521                         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
522                         trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     3.0, 100.0);
523                         trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   3.5);
524                         AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
525                         trackCutsDiel->SetAODFilterBit(16); //does nothing for ESDs
526                         trackCutsDiel->SetRequireITSRefit(kTRUE);
527                         trackCutsDiel->SetRequireTPCRefit(kTRUE);
528
529                         trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
530 //                      trackCutsAOD->AddCut(AliDielectronVarManager::kNclsTPC,     80., 140.0);
531                         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCr,     110.0, 160.0);
532                         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCfCross,     0.8, 1.0);//tighter than before,
533                                                                                                                                                                                  //due to AOD production
534                         trackCuts->AddCut(trackCutsDiel);
535                         trackCuts->AddCut(trackCutsAOD);
536                   break;
537                 default: cout << "No Analysis Track Cut defined " << endl;
538           }
539           return trackCuts;
540         } 
541
542
543         //Possibly different cut sets for Prefilter step
544         //Not used at the moment
545         AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
546           AliDielectronCutGroup* trackCuts=0x0;
547           switch (cutSet) {
548                 case kPbPb2011NoPID:
549                 case kPbPb2011TPCandTOF :
550                 case kPbPb2011TPCandTOFHPT:
551                 case kPbPb2011TPCorTOF  :
552                 case kpp2010TPCandTOF :
553                 case kpp2010TPCorTOF  :
554                    trackCuts = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
555
556                    AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
557                    trackCutsAOD->AddCut(AliDielectronVarManager::kPt,0.05,0.2);
558                    trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.84,0.84);
559                    //DCA Cut
560                    trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
561                    trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
562                    trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     3.0, 100.0);
563                    AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
564                    trackCutsDiel->SetAODFilterBit(1); //does nothing for ESDs, ITSSA
565                    trackCutsDiel->SetRequireITSRefit(kTRUE);
566
567                    trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
568                    trackCuts->AddCut(trackCutsDiel);
569                    trackCuts->AddCut(trackCutsAOD);
570                    //             cout << "No Pre-Track Cut defined for AODs at the moment " << endl;
571                   break;
572                 default: cout << "No Pre-Track Cut defined " << endl;
573           }
574           return trackCuts;
575         }
576
577 };