]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/LMEECutLibAsako.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / LMEECutLibAsako.C
1 class LMEECutLibAsako {
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         kPbPb2011SemiCentral1,
19     kPbPb2011SemiCentral2,
20         kPbPb2011Peripheral,
21         kCENTSELMAX
22   };
23
24   static  enum LMEEPairCutSet{
25         kPbPb2011RP,
26         kPbPb2011Mag,
27         //kPbPb2011RPxy,
28         //kPbPb2011RPxz,
29
30         kPbPb2011MassLow,
31         kPbPb2011MassMiddle,
32         kPbPb2011MassHigh,
33         kPbPb2011MassAll,
34
35
36
37         kPAIRCUTSETMAX
38   };
39
40   //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
41
42
43   LMEECutLib() {}
44
45   AliDielectronEventCuts*     GetEventCuts(Int_t cutSet);
46   AliAnalysisCuts*            GetCentralityCuts(Int_t centSel);
47   AliDielectronTrackRotator*  GetTrackRotator(Int_t cutSet);
48   AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
49
50   AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);  
51   AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);  
52
53   AliAnalysisCuts* GetPairCuts2(Int_t cutSet,Bool_t tooglePC=kFALSE);
54   AliAnalysisCuts* GetPairCuts(Int_t cutSet);  
55
56   AliAnalysisCuts* GetPairCutsInOut(Int_t cutSet);
57   AliAnalysisCuts* GetPairCuts4(Int_t cutSet);
58
59   AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);  
60   AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);  
61
62
63
64
65   AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
66         AliDielectronEventCuts* eventCuts = 0x0;
67         switch (cutSet) {
68         case kPbPb2011NoPID:
69         case kPbPb2011TPCandTOF :
70         case kPbPb2011TPCandTOFHPT:
71         case kPbPb2011TPC :
72         case kPbPb2011TPCandTOFwide :
73         case kPbPb2011TPCorTOF  :
74         case kpp2010TPCandTOF :
75         case kpp2010TPCorTOF  :
76           eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
77           eventCuts->SetVertexType(AliDielectronEventCuts::kVtxSPD); // AOD
78           //eventCuts->SetVertexType(AliDielectronEventCuts::kVtxTPC); // AOD
79           //           eventCuts->SetCentralityRange(0.0,80.0);
80           eventCuts->SetRequireVertex();
81           eventCuts->SetMinVtxContributors(1);
82           eventCuts->SetVertexZ(-10.,10.);
83           break;
84         default: cout << "No Event Cut defined" << endl;
85         }
86         return eventCuts;
87   }
88
89   AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
90         AliDielectronVarCuts* centCuts = 0x0;
91         switch (centSel) {
92         case kPbPb2011Central:
93           centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
94           centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
95           break;
96         case kPbPb2011SemiCentral1:
97           centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral1");
98           //Restrict to 50%, Trigger selction
99           centCuts->AddCut(AliDielectronVarManager::kCentrality,10.,30.);
100           break;
101         case kPbPb2011SemiCentral2:
102           centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral2");
103           //Restrict to 50%, Trigger selction
104           centCuts->AddCut(AliDielectronVarManager::kCentrality,30.,50.);//
105           break;
106         case kPbPb2011Peripheral:
107           centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
108           centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
109           break;
110         default: cout << "No Centrality selected" << endl;
111         }
112         return centCuts;
113   }
114
115
116   AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
117         AliDielectronTrackRotator* trackRotator = 0x0;
118         switch (cutSet) {
119         case kPbPb2011NoPID:
120         case kPbPb2011TPCandTOF :
121         case kPbPb2011TPCandTOFHPT:
122         case kPbPb2011TPC :
123         case kPbPb2011TPCandTOFwide :
124         case kPbPb2011TPCorTOF  :
125         case kpp2010TPCandTOF :
126         case kpp2010TPCorTOF  :
127           trackRotator = new AliDielectronTrackRotator();
128           trackRotator->SetIterations(20);
129           trackRotator->SetConeAnglePhi(TMath::Pi()/180*165);
130           trackRotator->SetStartAnglePhi(TMath::Pi());
131           break;
132         default: cout << "No Rotator defined" << endl;
133         }
134         return trackRotator;
135   }
136
137
138   AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
139         AliDielectronMixingHandler* mixingHandler = 0x0;
140         switch (cutSet) {
141         case kPbPb2011TPCorTOF  :
142           /*
143                   mixingHandler = new AliDielectronMixingHandler;
144                       mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
145                             mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,40,80");
146                                     mixingHandler->SetDepth(25);
147                                           mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
148                                               break;
149           */
150         case kPbPb2011NoPID:
151         case kPbPb2011TPCandTOF :
152         case kPbPb2011TPCandTOFHPT:
153         case kPbPb2011TPC :
154         case kPbPb2011TPCandTOFwide :
155           mixingHandler = new AliDielectronMixingHandler;
156           mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
157           mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,40,80");
158           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)");
159           mixingHandler->SetDepth(50);
160           //mixingHandler->SetDepth(15);
161           mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
162           break;
163         case kpp2010TPCandTOF :
164         case kpp2010TPCorTOF  :
165           mixingHandler = new AliDielectronMixingHandler;
166           mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
167           mixingHandler->AddVariable(AliDielectronVarManager::kNacc,"0,10000");
168           //might want to add multiplicity?
169           mixingHandler->SetDepth(50);
170           mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
171           break;
172         default: cout << "No Rotator defined" << endl;
173         }
174         return mixingHandler;
175   }
176
177
178   AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
179         AliAnalysisCuts* anaCuts=0x0;
180
181         // + [2] added for Dec2010 Cut! 
182         TF1 *lowerCut = new TF1("lowerCut", "[0] * TMath::Exp([1]*x) + [2]", 0, 20);
183         /* until Nov2010
184                lowerCut->SetParameter(0, -2.7);
185                     lowerCut->SetParameter(1, -0.4357);
186         */
187         /* 18.01.2011 ALiHFEpid.cxx */
188         lowerCut->SetParameter(0,-3.7);
189         lowerCut->SetParameter(1,-0.8);
190         lowerCut->SetParameter(2,-0.35);
191
192         if (MCenabled) { //overwrite parameters
193           lowerCut->SetParameter(0,-2.5);
194           lowerCut->SetParameter(2,-2.2);
195         }
196
197         //---------------------------------------------
198         AliDielectronPID *pidTPCTOFeOnly = new AliDielectronPID("TPC-TOF","TPC-TOF");
199         pidTPCTOFeOnly->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3,3.,0.0,100.,kFALSE);
200         pidTPCTOFeOnly->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
201
202
203         AliDielectronPID *pidTPCandTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
204         pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
205         pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
206         pidTPCandTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
207
208         AliDielectronPID *pidTPChardTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
209         pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,lowerCut,3.,0.0,100.,kFALSE);
210         pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
211         pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
212         pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
213         pidTPChardTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
214         //___________________________________________
215         AliDielectronPID *pidTT = new AliDielectronPID("TPC-TOF","TPC-TOF");
216         pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5,3.,0.2,0.4,kFALSE);
217         pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3,3.,0.4,100.,kFALSE);
218         pidTT->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.2 , 100., kFALSE );
219
220         pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
221         pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
222         pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
223         //___________________________________________
224         AliDielectronVarCuts *pidTPCsignal = new AliDielectronVarCuts("pidTPCsignal","cut on the TPC signal");
225         if (MCenabled) {
226           pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,65.,85.); 
227         }
228         else {
229           pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.); 
230         }
231         //___________________________________________
232
233         AliDielectronVarCuts *pidTPCsignalWide = new AliDielectronVarCuts("pidTPCsignalWide","cut on the TPC signal");
234         pidTPCsignalWide->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.);
235
236
237         AliDielectronVarCuts *pTPCHPT = new AliDielectronVarCuts("P>.4hpt","P>.4hpt");
238         pTPCHPT->AddCut(AliDielectronVarManager::kPt,.4,3.0);
239
240         AliDielectronVarCuts *pTPC = new AliDielectronVarCuts("P>.4","P>.4");
241         pTPC->AddCut(AliDielectronVarManager::kPt,.4,2.0);
242           
243         AliDielectronVarCuts *pMin = new AliDielectronVarCuts("P>.2","P>.2");
244         pMin->AddCut(AliDielectronVarManager::kPt,.2,2.5);
245
246         switch (cutSet) {
247         case kPbPb2011NoPID:
248           AliDielectronCutGroup* cgSecondTrackFilterNoPID = new AliDielectronCutGroup("cgNoPID","cgNoPID",AliDielectronCutGroup::kCompAND);
249           cgSecondTrackFilterNoPID->AddCut(pTPC);
250           anaCuts= cgSecondTrackFilterNoPID;
251           break;
252         case kPbPb2011TPCandTOFHPT:
253           AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
254           cgSecondTrackFilterPIDTPC1->AddCut(pTPCHPT);
255           cgSecondTrackFilterPIDTPC1->AddCut(pidTPCTOFeOnly);
256           cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
257           anaCuts = cgSecondTrackFilterPIDTPC1;
258
259         case kPbPb2011TPCandTOF :
260           AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
261           cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
262           //cgSecondTrackFilterPIDTPC1->AddCut(pidTPChardTOF);
263           // cgSecondTrackFilterPIDTPC1->AddCut(pidTPCTOFeOnly);
264           cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
265           cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
266           anaCuts = cgSecondTrackFilterPIDTPC1;
267           break;
268
269         case kPbPb2011TPC :
270           AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
271           cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
272           cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignalWide);
273           anaCuts = cgSecondTrackFilterPIDTPC1;
274           break;
275             
276         case kPbPb2011TPCandTOFwide :
277           AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
278           cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
279           cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
280           cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignalWide);
281           anaCuts = cgSecondTrackFilterPIDTPC1;
282           break;
283
284         case kPbPb2011TPCorTOF  :
285           AliDielectronCutGroup* cgSecondTrackFilterPIDTPC2 = new AliDielectronCutGroup("cgPIDTPC2","cgPIDTPC2",AliDielectronCutGroup::kCompAND);
286           cgSecondTrackFilterPIDTPC2->AddCut(pMin);
287           cgSecondTrackFilterPIDTPC2->AddCut(pidTT);
288           cgSecondTrackFilterPIDTPC2->AddCut(pidTPCsignal);
289           anaCuts = cgSecondTrackFilterPIDTPC2;
290           break;
291
292         case kpp2010TPCandTOF :
293           AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
294           cgSecondTrackFilterPIDTPC->AddCut(pTPC);
295           //cgSecondTrackFilterPIDTPC->AddCut(pidTPChardTOF);
296           cgSecondTrackFilterPIDTPC->AddCut(pidTPCTOFeOnly);
297           anaCuts = cgSecondTrackFilterPIDTPC;
298           break;
299         case kpp2010TPCorTOF  :
300           AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
301           cgSecondTrackFilterPIDTPC->AddCut(pMin);
302           cgSecondTrackFilterPIDTPC->AddCut(pidTT);
303           anaCuts = cgSecondTrackFilterPIDTPC;
304           break;
305         default: cout << "No Analysis PID Cut defined " << endl;
306         }
307         return anaCuts;
308   }
309
310   AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
311         AliAnalysisCuts* anaCuts=0x0;
312         switch (cutSet) {
313         case kPbPb2011NoPID:
314         case kPbPb2011TPCandTOF :
315         case kPbPb2011TPCandTOFHPT:
316         case kPbPb2011TPC :
317         case kPbPb2011TPCandTOFwide :
318         case kPbPb2011TPCorTOF  :
319         case kpp2010TPCandTOF :
320         case kpp2010TPCorTOF  :
321           AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
322           AliDielectronCutGroup* cgITSTPC = new AliDielectronCutGroup("cgITSTPC","cgITSTPC",AliDielectronCutGroup::kCompAND);
323           AliDielectronPID *pidITSTPC = new AliDielectronPID("TPCpre","TPCpre");
324           pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
325           cgITSTPC->AddCut(pidITSTPC);
326
327
328           AliDielectronCutGroup* cgITSSA = new AliDielectronCutGroup("cgITSSA","cgITSSA",AliDielectronCutGroup::kCompAND);
329           AliDielectronPID *pidITSSA = new  AliDielectronPID("pidITSSA","pidITSSA");
330           pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-3.,3.);
331           cgITSSA->AddCut(pidITSSA);
332           //  cgITSSA->AddCut(GetTrackCutsPre(cutSet));
333
334           AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
335           cgInitialTrackFilter->AddCut(cgITSTPC);
336           cgInitialTrackFilter->AddCut(cgITSSA);
337           anaCuts = cgInitialTrackFilter;
338           break;
339         default: cout << "No Pre-PID Cut defined " << endl;
340         }
341         return anaCuts;
342   }
343
344
345
346   AliAnalysisCuts* GetPairCuts2(Int_t cutSet, Bool_t togglePC /*=kFALSE*/) {
347         AliAnalysisCuts* pairCuts=0x0;
348         switch (cutSet) {
349         case kPbPb2011TPCorTOF  :
350         case kpp2010TPCandTOF :
351           AliDielectronVarCuts* pairCutsV= new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
352           pairCutsV->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
353           pairCuts = pairCutsV;
354           break;
355         case kPbPb2011NoPID:
356         case kPbPb2011TPCandTOF :
357         case kPbPb2011TPC :
358         case kPbPb2011TPCandTOFHPT:
359         case kPbPb2011TPCandTOFwide :
360         case kpp2010TPCorTOF  :
361           if (!togglePC) {
362
363                 AliDielectronCutGroup* pairCutsCG2 =new AliDielectronCutGroup("pairCutsCG2","pairCutsCG2",AliDielectronCutGroup::kCompOR);
364                 AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
365                 pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
366                 pairCutsPhiv->AddCut(AliDielectronVarManager::kPhivPair, 0.0, 2.0); 
367                 pairCutsInvM =new AliDielectronVarCuts("InvM Cuts","InvM<0.3");
368                 pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.3); 
369                 pairCutsInvMgood =new AliDielectronVarCuts("InvM Cuts good","InvM>0.3");
370                 pairCutsInvMgood->AddCut(AliDielectronVarManager::kM, 0.3, 99999.); 
371                 pairCutsCG->AddCut(pairCutsPhiv);
372                 pairCutsCG->AddCut(pairCutsInvM);
373                 pairCutsCG2->AddCut(pairCutsInvMgood);
374                 pairCutsCG2->AddCut(pairCutsCG);
375                 pairCuts = pairCutsCG2;
376           }
377           else {
378                 AliDielectronVarCuts* pairCutsV =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
379                 pairCutsV->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035,kTRUE);
380                 pairCuts = pairCutsV;
381           }
382           break;
383         default: cout << "No Pair Cuts defined " << endl;
384         }
385         return pairCuts;
386   }
387
388
389   AliAnalysisCuts* GetPairCuts(Int_t cutSet) {  
390         AliAnalysisCuts* pairCuts=0x0;
391         switch (cutSet) {
392         case kPbPb2011TPCorTOF  :
393         case kpp2010TPCandTOF :
394           AliDielectronVarCuts* pairCutsM=0x0;
395           pairCutsM = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
396           pairCutsM->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
397           pairCuts = pairCutsM;
398           break;
399         case kPbPb2011NoPID:
400         case kPbPb2011TPCandTOF :
401         case kPbPb2011TPC :
402         case kPbPb2011TPCandTOFwide :
403         case kPbPb2011TPCandTOFHPT:
404         case kpp2010TPCorTOF  :
405
406           AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
407           AliDielectronVarCuts* pairCutsPhiv =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
408           pairCutsPhiv->AddCut(AliDielectronVarManager::kPhivPair, 2.0, 3.2); 
409           AliDielectronVarCuts* pairCutsInvM =new AliDielectronVarCuts("InvM Cuts","InvM<0.3");
410           pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.3); 
411           pairCutsCG->AddCut(pairCutsPhiv);
412           pairCutsCG->AddCut(pairCutsInvM);
413
414           pairCuts = pairCutsCG;
415
416
417           //pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
418           //pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
419           break;
420         default: cout << "No Pair Cuts defined " << endl;
421         } 
422         return pairCuts;
423   }
424
425   AliAnalysisCuts* GetPairCutsInOut(Int_t cutSet){
426         AliAnalysisCuts* pairCut=0x0;
427         switch (cutSet) {
428         case kPbPb2011RP:
429           AliDielectronCutGroup* pairCutsPhiRP =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompOR);
430       AliDielectronVarCuts* pairCutsPhi1 =new AliDielectronVarCuts("Phi Cuts","-pi/4<Phi<pi/4");
431       pairCutsPhi1->AddCut(AliDielectronVarManager::kDeltaPhiv0CrpH2, (-1.0)*TMath::Pi()/4., TMath::Pi()/4.);
432       AliDielectronVarCuts* pairCutsPhi2 =new AliDielectronVarCuts("Phi Cuts","3*pi/4<Phi");
433       pairCutsPhi2->AddCut(AliDielectronVarManager::kDeltaPhiv0CrpH2, 3.0*TMath::Pi()/4., TMath::Pi());
434       AliDielectronVarCuts* pairCutsPhi3 =new AliDielectronVarCuts("Phi Cuts","-3*pi/4<Phi");
435       pairCutsPhi3->AddCut(AliDielectronVarManager::kDeltaPhiv0CrpH2,  (-1.0)*TMath::Pi(),(-3.0)*TMath::Pi()/4.);
436
437       pairCutsPhiRP->AddCut(pairCutsPhi1);
438           pairCutsPhiRP->AddCut(pairCutsPhi2);
439           pairCutsPhiRP->AddCut(pairCutsPhi3);
440
441       pairCuts = pairCutsPhiRP;
442
443           break;
444         case kPbPb2011Mag:
445           AliDielectronCutGroup* pairCutsPhiMag=new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompOR);
446       AliDielectronVarCuts* pairCutsPhi4 =new AliDielectronVarCuts("Phi Cuts","-3*pi/4<Phi");
447       pairCutsPhi4->AddCut(AliDielectronVarManager::kDeltaPhiv0CrpH2, TMath::Pi()/4.,3.0*TMath::Pi()/4.);
448       AliDielectronVarCuts* pairCutsPhi5 =new AliDielectronVarCuts("Phi Cuts","-3*pi/4<Phi");
449       pairCutsPhi5->AddCut(AliDielectronVarManager::kDeltaPhiv0CrpH2,(-3.0)*TMath::Pi()/4.,(-1.0)*TMath::Pi()/4.);
450
451           pairCutsPhiMag->AddCut(pairCutsPhi4);
452           pairCutsPhiMag->AddCut(pairCutsPhi5);
453           
454           pairCuts = pairCutsPhiMag;
455       //pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
456       //pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
457       break;
458     default: cout << "No Pair Cuts defined " << endl;
459     }
460     return pairCuts;
461   }
462
463
464   AliAnalysisCuts* GetPairCuts4(Int_t cutSet) {
465     AliDielectronVarCuts* pairCuts=0x0;
466     switch (cutSet) {
467     case kPbPb2011MassLow :
468       pairCuts = new AliDielectronVarCuts("InvMass","0 MeV  < InvMass < 30 MeV");
469       pairCuts->AddCut(AliDielectronVarManager::kM, 0.,0.03);
470       break;
471     case kPbPb2011MassMiddle :
472       pairCuts = new AliDielectronVarCuts("InvMass","120 MeV  < InvMass < 300 MeV");
473       pairCuts->AddCut(AliDielectronVarManager::kM, 0.12,0.30);
474       break;
475     case kPbPb2011MassHigh :
476       pairCuts = new AliDielectronVarCuts("InvMass","300 MeV  < InvMass < 500 MeV");
477       pairCuts->AddCut(AliDielectronVarManager::kM, 0.30,0.50);
478       break;
479     case kPbPb2011MassAll :
480       pairCuts = new AliDielectronVarCuts("InvMass","0 GeV  < InvMass < 10 GeV");
481       pairCuts->AddCut(AliDielectronVarManager::kM, 0.0,10.0);
482       break;
483
484     default: cout << "No Pair Cuts defined " << endl;
485     }
486     return pairCuts;
487   }
488
489
490
491
492
493
494   AliAnalysisCuts* GetESDTrackCutsAna(Int_t cutSet) {
495         AliESDtrackCuts* esdTrackCutsH = 0x0;
496         switch (cutSet) {
497         case kPbPb2011NoPID:
498         case kPbPb2011TPCandTOF :
499         case kPbPb2011TPCandTOFHPT:
500         case kPbPb2011TPC :
501         case kPbPb2011TPCandTOFwide :
502         case kPbPb2011TPCorTOF  :
503         case kpp2010TPCandTOF :
504         case kpp2010TPCorTOF  :
505           // standard cuts with very loose DCA: Bit4 (Int: 16), AOD095&115
506               
507           esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE); 
508           esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
509           esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
510           esdTrackCutsH->SetDCAToVertex2D(kTRUE);
511           /* 
512
513               esdTrackCutsH = new AliESDtrackCuts();
514                     esdTrackCutsH->SetAcceptKinkDaughters(kFALSE);
515                             //Not done so far via dielectron cuts:
516                                 */
517           /*
518                   esdTrackCuts->SetDCAToVertex2D(kFALSE);
519                       esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
520                             esdTrackCuts->SetMaxChi2PerClusterITS(36);
521           */
522
523           break;
524         default: cout << "No Analysis Track Cut defined " << endl;
525         }
526         return esdTrackCutsH;
527   } 
528
529   AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
530         AliDielectronCutGroup* trackCuts=0x0;
531         switch (cutSet) {
532         case kPbPb2011NoPID:
533         case kPbPb2011TPCandTOF :
534         case kPbPb2011TPCandTOFHPT:
535         case kPbPb2011TPC :
536         case kPbPb2011TPCandTOFwide :
537         case kPbPb2011TPCorTOF  :
538         case kpp2010TPCandTOF :
539         case kpp2010TPCorTOF  :
540           trackCuts = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
541
542           AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
543           trackCutsAOD->AddCut(AliDielectronVarManager::kPt,0.05,6.);
544           trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.84,0.84);
545           //DCA Cut
546           trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
547           trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
548           trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     3.0, 100.0);
549           trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   3.5);
550           AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
551           trackCutsDiel->SetAODFilterBit(16); //does nothing for ESDs
552           trackCutsDiel->SetRequireITSRefit(kTRUE);
553           trackCutsDiel->SetRequireTPCRefit(kTRUE);
554
555           trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
556           //trackCutsAOD->AddCut(AliDielectronVarManager::kNclsTPC,     80., 140.0);
557           trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCr,     110.0, 160.0);
558           trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCfCross,     0.8, 1.0);//tighter than before,
559           //due to AOD production
560           trackCuts->AddCut(trackCutsDiel);
561           trackCuts->AddCut(trackCutsAOD);
562           break;
563         default: cout << "No Analysis Track Cut defined " << endl;
564         }
565         return trackCuts;
566   } 
567
568   AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
569         AliESDtrackCuts* trackCuts=0x0;
570         switch (cutSet) {
571         case kPbPb2011NoPID:
572         case kPbPb2011TPCandTOF :
573         case kPbPb2011TPCandTOFHPT:
574         case kPbPb2011TPCorTOF  :
575         case kpp2010TPCandTOF :
576         case kpp2010TPCorTOF  :
577           /*
578                 trackCuts = new AliESDtrackCuts();
579                 trackCuts->SetDCAToVertex2D(kTRUE);
580                 trackCuts->SetMaxDCAToVertexZ(3.0);
581                 trackCuts->SetMaxDCAToVertexXY(1.0);
582                   trackCuts->SetEtaRange( -0.84 , 0.84 );
583                       trackCuts->SetPtRange(  0.05 , 0.5);
584                             trackCuts->SetAcceptKinkDaughters(kFALSE);
585                                     trackCuts->SetRequireITSRefit(kTRUE);
586                                           trackCuts->SetRequireITSStandAlone(kTRUE);
587                                               trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
588                                                     trackCuts->SetMinNClustersITS(3); //PhotonGroup-Dalitz: 2?!
589           */
590           cout << "No Pre-Track Cut defined for AODs at the moment " << endl;
591           break;
592         default: cout << "No Pre-Track Cut defined " << endl;
593         }
594         return trackCuts;
595   }
596
597 };
598
599