]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/LMEECutLib_reichelt.C
update from pr task : sjena
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / LMEECutLib_reichelt.C
1 class LMEECutLib {
2   
3 public:
4         static  enum LMMECutSet {
5
6     kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight,
7     kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight,
8     kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight,
9     kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight,
10     kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4,
11     kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4,
12     kPbPb2011_pidITSTPC_trkSPDfirst_3,            // (cutset w/o pairing)
13     kPbPb2011_pidTPC_trkSPDfirst_3,               // (cutset w/o pairing)
14     kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_2_loose, // (cutset w/o pairing)
15     kPbPb2011_pidITSTPCTOFif_trkSPDfirst_2_loose, // (cutset w/o pairing)
16     kPbPb2011_pidTPCTOF_trkSPDorSDD_2_loose,      // (cutset w/o pairing)
17     kPbPb2011_pidTPCTOF_trkSPDfirst_2_loose,      // (cutset w/o pairing)
18     kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1,
19     kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1,       // Cutset for Technical Preliminaries for QM2014 (no prefilter used!)
20     kPbPb2011_pidTPCTOF_trkSPDorSDD_1,
21     kPbPb2011_pidTPCTOF_trkSPDfirst_1,
22     kPbPb2011PID_ITSTPCTOFif2,        // (NO FULL CUTSET)
23     kPbPb2011PID_TPCTOF3,             // (NO FULL CUTSET)
24     kPbPb2011TRK_SDDfirstSPDnone,     // (NO FULL CUTSET) complimentary tracks, strictly without SPD, to be combined with others!
25     kPbPb2011TRK_SPDfirst,            // (NO FULL CUTSET) main track selection, with SPD first
26     kPbPb2011TRK_SDDfirstSPDnone4cls, // (NO FULL CUTSET) complimentary tracks, strictly without SPD, to be combined with others!
27     kPbPb2011TRK_SPDfirst5cls,        // (NO FULL CUTSET) main track selection, with SPD first
28     kPbPb2011_TPCITS_TOFif1,
29     kPbPb2011_TPCTOF_Semi2, // changed PairCutsAna from PhiV to OpeningAngle. prefilter cuts renewed (if applicable)
30     // following cutsets are not complete anymore!
31     kPbPb2011_TPCTOF_Semi1, // old prefilter cuts (leg & pair), some are confusing
32     kPbPb2011NoPID, // pairing disabled in config
33     kPbPb2011TPCandTOF, // this was the final one activated by Christoph!
34     kPbPb2011TPCandTOFHPT,
35                 kPbPb2011TPC, //TOF required, more relaxed cut on TPC
36                 kPbPb2011TPCandTOFwide, //TOF required, more relaxed cut on TPC
37                 kPbPb2011TPCorTOF,
38                 kpp2010TPCandTOF,
39                 kpp2010TPCorTOF,
40                 kCUTSETMAX
41         };
42   
43         static  enum LMMECentSel {
44           kPbPb2011Central,
45     kPbPb2011MidCentral,
46                 kPbPb2011SemiCentral,
47                 kPbPb2011Peripheral,
48                 kCENTSELMAX
49         };
50   
51         //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
52   
53   
54         LMEECutLib() {}
55   
56         AliDielectronEventCuts*     GetEventCuts(Int_t cutSet);
57         AliAnalysisCuts*            GetCentralityCuts(Int_t centSel);
58         AliDielectronTrackRotator*  GetTrackRotator(Int_t cutSet);
59         AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
60   
61         AliAnalysisCuts* GetPairCutsAna(Int_t cutSet, Bool_t tooglePC=kFALSE);
62         AliAnalysisCuts* GetPairCutsPre(Int_t cutSet);  
63   
64         AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);  
65         AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);  
66   
67         AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);  
68         AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);  
69         AliAnalysisCuts* GetESDTrackCutsAna(Int_t cutSet);  
70   
71   
72   // Note: event cuts are identical for all analysis 'cutDefinition's that run together!
73   // the selection is hardcoded in the AddTask, currently to 'kPbPb2011_TPCTOF_Semi1'
74         AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
75           AliDielectronEventCuts* eventCuts = 0x0;
76           switch (cutSet) {
77       case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight:
78       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
79       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
80       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
81       case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4:
82       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
83       case kPbPb2011_pidITSTPC_trkSPDfirst_3:
84       case kPbPb2011_pidTPC_trkSPDfirst_3:
85       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_2_loose:
86       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_2_loose:
87       case kPbPb2011_pidTPCTOF_trkSPDorSDD_2_loose:
88       case kPbPb2011_pidTPCTOF_trkSPDfirst_2_loose:
89       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
90       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1:
91       case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
92       case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
93       case kPbPb2011_TPCITS_TOFif1:
94       case kPbPb2011_TPCTOF_Semi2:
95       case kPbPb2011_TPCTOF_Semi1:
96       case kPbPb2011NoPID:
97       case kPbPb2011TPCandTOF :
98                 case kPbPb2011TPCandTOFHPT:
99       case kPbPb2011TPC :
100       case kPbPb2011TPCandTOFwide :
101       case kPbPb2011TPCorTOF  :
102       case kpp2010TPCandTOF :
103       case kpp2010TPCorTOF  :
104         //Basic Event Cuts for pp and Pb-Pb, additional cuts may be in the AddTask
105         eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
106         eventCuts->SetVertexType(AliDielectronEventCuts::kVtxSPD); // AOD
107         //eventCuts->SetVertexType(AliDielectronEventCuts::kVtxTPC); // AOD
108         //           eventCuts->SetCentralityRange(0.0,80.0);
109         eventCuts->SetRequireVertex();
110         eventCuts->SetMinVtxContributors(1);
111         eventCuts->SetVertexZ(-10.,10.);
112         break;
113       default: cout << "No Event Cut defined" << endl;
114           }
115           return eventCuts;
116         }
117   
118   
119         //Selection of relatively 'flat' centralities
120         AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
121           AliDielectronVarCuts* centCuts = 0x0;
122           switch (centSel) {
123       case kPbPb2011Central:
124         centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
125         centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
126         break;
127       case kPbPb2011MidCentral:
128         centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011MidCentral");
129         centCuts->AddCut(AliDielectronVarManager::kCentrality,10.,20.);
130         break;
131       case kPbPb2011SemiCentral:
132         centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral");
133         centCuts->AddCut(AliDielectronVarManager::kCentrality,20.,50.);
134         break;
135       case kPbPb2011Peripheral:
136         centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
137         centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
138         break;
139                         default: cout << "No Centrality selected" << endl;
140           }
141           return centCuts;
142         }
143   
144   
145         //Basic track rotator settings from J/Psi, more investigation needed
146         AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
147           AliDielectronTrackRotator* trackRotator = 0x0;
148           switch (cutSet) {
149       case kPbPb2011_pidITSTPC_trkSPDfirst_3:
150       case kPbPb2011_pidTPC_trkSPDfirst_3:
151       case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight:
152       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
153       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
154       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
155       case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4:
156       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
157       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
158       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1:
159       case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
160       case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
161       case kPbPb2011_TPCITS_TOFif1:
162       case kPbPb2011_TPCTOF_Semi2:
163       case kPbPb2011_TPCTOF_Semi1:
164       case kPbPb2011NoPID:
165       case kPbPb2011TPCandTOF :
166                 case kPbPb2011TPCandTOFHPT:
167       case kPbPb2011TPC :
168       case kPbPb2011TPCandTOFwide :
169       case kPbPb2011TPCorTOF  :
170       case kpp2010TPCandTOF :
171       case kpp2010TPCorTOF  :
172         trackRotator = new AliDielectronTrackRotator();
173         trackRotator->SetIterations(20);
174         trackRotator->SetConeAnglePhi(TMath::Pi()/180*165);
175         trackRotator->SetStartAnglePhi(TMath::Pi());
176         break;
177       default: cout << "No Rotator defined" << endl;
178           }
179           return trackRotator;
180         }
181   
182   
183         AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
184           AliDielectronMixingHandler* mixingHandler = 0x0;
185           switch (cutSet) {
186       case kPbPb2011_pidITSTPC_trkSPDfirst_3:
187       case kPbPb2011_pidTPC_trkSPDfirst_3:
188       case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight:
189       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
190       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
191       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
192       case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4:
193       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
194       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
195       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1:
196       case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
197       case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
198       case kPbPb2011_TPCITS_TOFif1:
199       case kPbPb2011_TPCTOF_Semi2:
200       case kPbPb2011_TPCTOF_Semi1:
201         mixingHandler = new AliDielectronMixingHandler;
202         mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
203         mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,30,50,80");
204         // now using TPC event plane, uncorrected. (also, the old phi range was wrong, now same effective binning.)
205         mixingHandler->AddVariable(AliDielectronVarManager::kTPCrpH2uc, 6, TMath::Pi()/-2., TMath::Pi()/2.);
206         mixingHandler->SetDepth(15);
207         mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
208         break;
209         //[...]
210       default: cout << "No Mixer defined" << endl;
211           }
212           return mixingHandler;
213         }
214   
215   
216   
217         //Pair Cuts for Analysis step - take care of logic - inverted compared to other PairCuts!!
218   // cuts = SELECTION!!!
219         AliAnalysisCuts* GetPairCutsAna(Int_t cutSet, Bool_t togglePC /*=kFALSE*/)  {
220     cout << " >>>>>>>>>>>>>>>>>>>>>> GetPairCutsAna() >>>>>>>>>>>>>>>>>>>>>> " << endl;
221     AliAnalysisCuts* pairCuts=0x0;
222     switch (cutSet) {
223       case kPbPb2011_pidITSTPC_trkSPDfirst_3:
224       case kPbPb2011_pidTPC_trkSPDfirst_3:
225       case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight:
226       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
227       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
228       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
229       case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4:
230       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
231       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
232       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1:
233       case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
234       case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
235         cout << "No Pair Cuts used - ok " << endl; // since 18.02.2014
236         break;
237         
238       case kPbPb2011_TPCITS_TOFif1:
239       case kPbPb2011_TPCTOF_Semi2:
240         //        AliDielectronVarCuts* pairCutsPhivGood =new AliDielectronVarCuts("pairCutsPhivGood","pairCutsPhivGood");
241         //        pairCutsPhivGood->AddCut(AliDielectronVarManager::kPhivPair, 0.0, 2.0); 
242         AliDielectronVarCuts* pairCutsOpAngGood =new AliDielectronVarCuts("pairCutsOpAngGood","pairCutsOpAngGood");
243         pairCutsOpAngGood->AddCut(AliDielectronVarManager::kOpeningAngle, 0.05, 999.); // in upgrade: 0.05
244         AliDielectronVarCuts* pairCutsInvM =new AliDielectronVarCuts("pairCutsInvM","pairCutsInvM");
245         pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.02); // in upgrade: 0.01
246         AliDielectronVarCuts* pairCutsInvMgood =new AliDielectronVarCuts("pairCutsInvMgood","pairCutsInvMgood");
247         pairCutsInvMgood->AddCut(AliDielectronVarManager::kM, 0.02, 99999.);
248         
249         AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
250         pairCutsCG->AddCut(pairCutsInvM);
251         pairCutsCG->AddCut(pairCutsOpAngGood);
252         //        pairCutsCG->AddCut(pairCutsPhivGood);
253         
254         AliDielectronCutGroup* pairCutsCG2 =new AliDielectronCutGroup("pairCutsCG2","pairCutsCG2",AliDielectronCutGroup::kCompOR);
255         pairCutsCG2->AddCut(pairCutsInvMgood);
256         pairCutsCG2->AddCut(pairCutsCG);
257         pairCuts = pairCutsCG2;
258         break;
259         
260       case kPbPb2011_TPCTOF_Semi1:
261         //[...] // PhiV and InvMass
262                   default: cout << "No Pair Cuts defined " << endl;
263     }
264     return pairCuts;
265         }
266   
267   
268         //Pair Cuts for PREFILTER step
269   // cuts = REJECTION!!!
270         AliAnalysisCuts* GetPairCutsPre(Int_t cutSet)  {  
271     cout << " >>>>>>>>>>>>>>>>>>>>>> GetPairCutsPre() >>>>>>>>>>>>>>>>>>>>>> " << endl;
272     AliAnalysisCuts* pairCuts=0x0;
273     switch (cutSet) {
274       case kPbPb2011_pidITSTPC_trkSPDfirst_3:
275       case kPbPb2011_pidTPC_trkSPDfirst_3:
276       case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight:
277       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
278       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
279       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
280       case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4:
281       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
282       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
283       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1:
284       case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
285       case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
286       case kPbPb2011_TPCITS_TOFif1:
287       case kPbPb2011_TPCTOF_Semi2:
288         AliDielectronVarCuts* pairCutsInvM =new AliDielectronVarCuts("pairCutsInvM","pairCutsInvM");
289         pairCutsInvM->AddCut(AliDielectronVarManager::kM, 0.0, 0.02); // in upgrade: 0.01
290         AliDielectronVarCuts* pairCutsOpAng =new AliDielectronVarCuts("pairCutsOpAng","pairCutsOpAng");
291         pairCutsOpAng->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.05); // in upgrade: 0.05
292         
293         AliDielectronCutGroup* pairCutsCG =new AliDielectronCutGroup("pairCutsCG","pairCutsCG",AliDielectronCutGroup::kCompAND);
294         pairCutsCG->AddCut(pairCutsInvM);
295         pairCutsCG->AddCut(pairCutsOpAng);
296         //pairCutsCG->AddCut(pairCutsPhiv);
297         pairCuts = pairCutsCG;
298         break;
299         
300       case kPbPb2011_TPCTOF_Semi1:
301         //[...] // PhiV and InvMass
302       default: cout << "No Prefilter Pair Cuts defined " << endl;
303           } 
304           return pairCuts;
305         }
306   
307   
308   
309         AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
310     cout << " >>>>>>>>>>>>>>>>>>>>>> GetPIDCutsAna() >>>>>>>>>>>>>>>>>>>>>> " << endl;
311           AliAnalysisCuts* pidCuts=0x0;
312     
313           //-----------------------------------------------
314           // Define different PID Cuts, that are used later
315           //-----------------------------------------------
316     // PID cuts depend on TPC_inner_p, if not specified
317     // PID cut ranges correspond to global momentum P
318     // check it again!!!
319           //-----------------------------------------------
320           
321     //
322     //
323     //TPC: electron inclusion asymmetric
324           //     pion     exclusion 3sigma
325           //TOF: electron inclusion 3sigma in region where p,K cross electrons in TPC
326           AliDielectronPID *pidTPCTOF_Semi1 = new AliDielectronPID("pidTPCTOF_Semi1","pidTPCTOF_Semi1");
327           pidTPCTOF_Semi1->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -1.5, 3., 0. ,100., kFALSE);
328           pidTPCTOF_Semi1->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3. , 3., 0. ,100., kTRUE);
329           pidTPCTOF_Semi1->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -3. , 3., 0. ,1.7 , kFALSE);
330     //
331     //
332     // LOOSE PID TPC+TOF
333     AliDielectronPID *pidTPCTOF_Semi_LOOSE = new AliDielectronPID("pidTPCTOF_Semi_LOOSE","pidTPCTOF_Semi_LOOSE");
334           pidTPCTOF_Semi_LOOSE->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-12. ,20. , 0. ,100., kFALSE);
335           pidTPCTOF_Semi_LOOSE->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -3. , 3. , 0. ,1.7 , kFALSE);
336     //
337     //
338     // PID TPC only
339           AliDielectronPID *pidTPC_3 = new AliDielectronPID("pidTPC_3","pidTPC_3");
340           pidTPC_3->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -1.5, 3., 0. ,100., kFALSE);
341           pidTPC_3->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3. , 3., 0. ,100., kTRUE);
342     
343     
344     //TPC: electron inclusion asymmetric
345           //     pion     exclusion 3sigma
346           //ITS: electron inclusion asymmetric in region where p,K cross electrons in TPC
347           //TOF: electron inclusion 3sigma in similar region - BUT ONLY IF AVAILABLE
348           AliDielectronPID *pidTPCITS_TOFif1 = new AliDielectronPID("pidTPCITS_TOFif1","pidTPCITS_TOFif1");
349           pidTPCITS_TOFif1->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -1.5, 3. , 0. ,100., kFALSE);
350           pidTPCITS_TOFif1->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3. , 3. , 0. ,100., kTRUE);
351           pidTPCITS_TOFif1->AddCut(AliDielectronPID::kITS,AliPID::kElectron, -4. , 1. , 0. ,1.5 , kFALSE);
352           pidTPCITS_TOFif1->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -3. , 3. , 0. ,1.7 , kFALSE, AliDielectronPID::kIfAvailable);
353     //
354     //
355     //TPC: electron inclusion asymmetric
356           //     pion     exclusion 3sigma
357           //ITS: electron inclusion asymmetric OVER FULL MOMENTUM RANGE
358           //TOF: electron inclusion 3sigma - BUT ONLY IF AVAILABLE
359           AliDielectronPID *pidTPCITS_TOFif2 = new AliDielectronPID("pidTPCITS_TOFif2","pidTPCITS_TOFif2");
360           pidTPCITS_TOFif2->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -1.5, 3. , 0. ,100., kFALSE);
361           pidTPCITS_TOFif2->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3. , 3. , 0. ,100., kTRUE);
362           pidTPCITS_TOFif2->AddCut(AliDielectronPID::kITS,AliPID::kElectron, -4. , 1. , 0. ,100., kFALSE);
363           pidTPCITS_TOFif2->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -3. , 3. , 0. ,100., kFALSE, AliDielectronPID::kIfAvailable);
364     //
365     //
366     // LOOSE PID ITS+TPC+TOFif
367     AliDielectronPID *pidTPCITS_TOFif_LOOSE = new AliDielectronPID("pidTPCITS_TOFif_LOOSE","pidTPCITS_TOFif_LOOSE");
368           pidTPCITS_TOFif_LOOSE->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-12. ,20. , 0. ,100., kFALSE);
369           pidTPCITS_TOFif_LOOSE->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-10. ,20. , 0. ,100., kFALSE);
370           pidTPCITS_TOFif_LOOSE->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -3. , 3. , 0. ,100., kFALSE, AliDielectronPID::kIfAvailable);
371     //
372     //
373     // PID ITS+TPC
374     AliDielectronPID *pidTPCITS_3 = new AliDielectronPID("pidTPCITS_3","pidTPCITS_3");
375           pidTPCITS_3->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -1.5, 3. , 0. ,100., kFALSE);
376           pidTPCITS_3->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3. , 3. , 0. ,100., kTRUE);
377           pidTPCITS_3->AddCut(AliDielectronPID::kITS,AliPID::kElectron, -4. , 1. , 0. ,100., kFALSE);
378     //
379     //
380     // tighter PID ITS+TPC+TOFif
381     // ITS only up to momentum where proton contamination is seen in TPC signal
382     AliDielectronPID *pidTPCITS_TOFif56 = new AliDielectronPID("pidTPCITS_TOFif56","pidTPCITS_TOFif56");
383           pidTPCITS_TOFif56->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -1.5, 2.5, 0. ,100., kFALSE);
384           pidTPCITS_TOFif56->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3. , 3. , 0. ,100., kTRUE);
385           pidTPCITS_TOFif56->AddCut(AliDielectronPID::kITS,AliPID::kElectron, -4. , 0.5, 0. ,  2., kFALSE);
386           pidTPCITS_TOFif56->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -2. , 2. , 0. ,100., kFALSE, AliDielectronPID::kIfAvailable);
387     
388     
389           //Apply ITS cuts (see Hongyan's talks):
390           //3 sigma inclusion of electrons in TPC
391           //3 sigma exclusion of pions in TPC
392           //3 sigma inclusion of electrons in ITS,TOF for p<1.5GeV, where p,K contamination
393           //TOF only IF available!
394           AliDielectronPID *pidTPCandITSTOF = new AliDielectronPID("pidTPCandITSTOF","pidTPCandITSTOF");//"TPC-TOF-ITS"
395           pidTPCandITSTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -3.,3., 0.,100., kFALSE);
396           pidTPCandITSTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3.,3., 0.,100., kTRUE);
397           pidTPCandITSTOF->AddCut(AliDielectronPID::kITS,AliPID::kElectron, -6.,3., 0.,1.5, kFALSE );
398           pidTPCandITSTOF->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -3.,3., 0.,1.5, kFALSE,AliDielectronPID::kIfAvailable );
399     
400     // eta range:
401     AliDielectronVarCuts *etaRange090 = new AliDielectronVarCuts("etaRange090","etaRange090");
402     etaRange090->AddCut(AliDielectronVarManager::kEta, -0.90, 0.90);
403     AliDielectronVarCuts *etaRange084 = new AliDielectronVarCuts("etaRange084","etaRange084");
404     etaRange084->AddCut(AliDielectronVarManager::kEta, -0.84, 0.84);
405     AliDielectronVarCuts *etaRange076 = new AliDielectronVarCuts("etaRange076","etaRange076");
406     etaRange076->AddCut(AliDielectronVarManager::kEta, -0.76, 0.76);
407     // pt range:
408     AliDielectronVarCuts *ptRange400to3500 = new AliDielectronVarCuts("ptRange400to3500","ptRange400to3500");
409     ptRange400to3500->AddCut(AliDielectronVarManager::kPt, .4, 3.5);
410     
411     
412           //-----------------------------------------------
413           // Now see what Config actually loads and assemble final cuts
414           //-----------------------------------------------
415     switch (cutSet) {
416       case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight: // tighter "ITSTPCTOFif" PID
417       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
418       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
419       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
420         AliDielectronCutGroup* cgPIDCutsAna = new AliDielectronCutGroup("cgPIDCutsAna","cgPIDCutsAna",AliDielectronCutGroup::kCompAND);
421         cgPIDCutsAna->AddCut(etaRange076);
422         cgPIDCutsAna->AddCut(ptRange400to3500);
423         cgPIDCutsAna->AddCut(pidTPCITS_TOFif56);
424         cgPIDCutsAna->AddCut(GetTrackCutsAna(cutSet));
425         pidCuts = cgPIDCutsAna;
426         break;
427     
428       case kPbPb2011_pidITSTPC_trkSPDfirst_3:
429         AliDielectronCutGroup* cgPIDCutsAna = new AliDielectronCutGroup("cgPIDCutsAna","cgPIDCutsAna",AliDielectronCutGroup::kCompAND);
430         cgPIDCutsAna->AddCut(etaRange076);
431         cgPIDCutsAna->AddCut(ptRange400to3500);
432         cgPIDCutsAna->AddCut(pidTPCITS_3);
433         cgPIDCutsAna->AddCut(GetTrackCutsAna(cutSet));
434         pidCuts = cgPIDCutsAna;
435         break;
436       case kPbPb2011_pidTPC_trkSPDfirst_3:
437         AliDielectronCutGroup* cgPIDCutsAna = new AliDielectronCutGroup("cgPIDCutsAna","cgPIDCutsAna",AliDielectronCutGroup::kCompAND);
438         cgPIDCutsAna->AddCut(etaRange090);
439         cgPIDCutsAna->AddCut(ptRange400to3500);
440         cgPIDCutsAna->AddCut(pidTPC_3);
441         cgPIDCutsAna->AddCut(GetTrackCutsAna(cutSet));
442         pidCuts = cgPIDCutsAna;
443         break;
444       
445       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_2_loose: // loose "ITSTPCTOFif" PID - for 2D contamination study
446       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_2_loose:
447         AliDielectronCutGroup* cgPIDCutsAna = new AliDielectronCutGroup("cgPIDCutsAna","cgPIDCutsAna",AliDielectronCutGroup::kCompAND);
448         cgPIDCutsAna->AddCut(etaRange076);
449         cgPIDCutsAna->AddCut(ptRange400to3500);
450         cgPIDCutsAna->AddCut(pidTPCITS_TOFif_LOOSE);
451         cgPIDCutsAna->AddCut(GetTrackCutsAna(cutSet));
452         pidCuts = cgPIDCutsAna;
453         break;
454       case kPbPb2011_pidTPCTOF_trkSPDorSDD_2_loose:
455       case kPbPb2011_pidTPCTOF_trkSPDfirst_2_loose:
456         AliDielectronCutGroup* cgPIDCutsAna = new AliDielectronCutGroup("cgPIDCutsAna","cgPIDCutsAna",AliDielectronCutGroup::kCompAND);
457         cgPIDCutsAna->AddCut(etaRange090);
458         cgPIDCutsAna->AddCut(ptRange400to3500);
459         cgPIDCutsAna->AddCut(pidTPCTOF_Semi_LOOSE);
460         cgPIDCutsAna->AddCut(GetTrackCutsAna(cutSet));
461         pidCuts = cgPIDCutsAna;
462         break;
463       
464       case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4: // regular "ITSTPCTOFif" PID
465       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
466       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
467       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1:
468         AliDielectronCutGroup* cgPIDCutsAna = new AliDielectronCutGroup("cgPIDCutsAna","cgPIDCutsAna",AliDielectronCutGroup::kCompAND);
469         cgPIDCutsAna->AddCut(etaRange076);
470         cgPIDCutsAna->AddCut(ptRange400to3500);
471         cgPIDCutsAna->AddCut(pidTPCITS_TOFif2);
472         cgPIDCutsAna->AddCut(GetTrackCutsAna(cutSet));
473         pidCuts = cgPIDCutsAna;
474         break;
475       case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
476       case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
477         AliDielectronCutGroup* cgPIDCutsAna = new AliDielectronCutGroup("cgPIDCutsAna","cgPIDCutsAna",AliDielectronCutGroup::kCompAND);
478         cgPIDCutsAna->AddCut(etaRange090);
479         cgPIDCutsAna->AddCut(ptRange400to3500);
480         cgPIDCutsAna->AddCut(pidTPCTOF_Semi1);
481         cgPIDCutsAna->AddCut(GetTrackCutsAna(cutSet));
482         pidCuts = cgPIDCutsAna;
483         break;
484         
485       case kPbPb2011_TPCITS_TOFif1:
486         AliDielectronCutGroup* cgPIDCutsAna = new AliDielectronCutGroup("cgPIDCutsAna","cgPIDCutsAna",AliDielectronCutGroup::kCompAND);
487         cgPIDCutsAna->AddCut(etaRange084); // was 0.84 -> not ideal
488         cgPIDCutsAna->AddCut(ptRange400to3500);
489         cgPIDCutsAna->AddCut(pidTPCITS_TOFif1);
490         cgPIDCutsAna->AddCut(GetTrackCutsAna(cutSet));
491         pidCuts = cgPIDCutsAna;
492         break;
493       case kPbPb2011_TPCTOF_Semi2:
494       case kPbPb2011_TPCTOF_Semi1:
495         AliDielectronCutGroup* cgPIDCutsAna = new AliDielectronCutGroup("cgPIDCutsAna","cgPIDCutsAna",AliDielectronCutGroup::kCompAND);
496         cgPIDCutsAna->AddCut(etaRange084);
497         cgPIDCutsAna->AddCut(ptRange400to3500);
498         cgPIDCutsAna->AddCut(pidTPCTOF_Semi1);
499         cgPIDCutsAna->AddCut(GetTrackCutsAna(cutSet)); // for 'kPbPb2011_TPCTOF_Semi1', this was called in the Config
500         pidCuts = cgPIDCutsAna;
501         break;
502         //[...]
503                 case kPbPb2011TPCandTOFHPT:
504         //test Hongyan's cut
505         AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
506         cgSecondTrackFilterPIDTPC1->AddCut(etaRange084);
507         cgSecondTrackFilterPIDTPC1->AddCut(ptRange400to3500);
508         cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandITSTOF);
509         pidCuts = cgSecondTrackFilterPIDTPC1;
510         break;
511         //[...]
512       default: cout << "No Analysis PID Cut defined " << endl;
513           }
514           return pidCuts;
515         }
516   
517   
518         //Make/Tighten track Cuts that are *NOT* already
519         //done in the AOD production
520         //**IMPORTANT**: For AODs, select FilterBit
521         //the method is ignored for ESDs
522         
523         AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
524     cout << " >>>>>>>>>>>>>>>>>>>>>> GetTrackCutsAna() >>>>>>>>>>>>>>>>>>>>>> " << endl;
525           AliDielectronCutGroup* trackCuts=0x0;
526           switch (cutSet) {
527         
528       
529         //----------
530         // these MAIN settings have to combine different track selections:
531         //----------
532       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
533       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_2_loose:
534       case kPbPb2011_pidTPCTOF_trkSPDorSDD_2_loose:
535       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
536       case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
537         // combine typical and new trackcuts with "kCompOR" condition:
538         cgTrackCutsAnaSPDorSDD = new AliDielectronCutGroup("cgTrackCutsAnaSPDorSDD","cgTrackCutsAnaSPDorSDD",AliDielectronCutGroup::kCompOR);
539         cgTrackCutsAnaSPDorSDD->AddCut(GetTrackCutsAna(kPbPb2011TRK_SPDfirst));         // typical trackcuts with requirement of SPD
540         cgTrackCutsAnaSPDorSDD->AddCut(GetTrackCutsAna(kPbPb2011TRK_SDDfirstSPDnone)); // new additional trackcuts with SDD instead of SPD
541         trackCuts = cgTrackCutsAnaSPDorSDD;
542         break;
543         
544         //----------
545         // these MAIN settings just load the main track selection directly below:
546         //----------
547       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
548       case kPbPb2011_pidITSTPC_trkSPDfirst_3:
549       case kPbPb2011_pidTPC_trkSPDfirst_3:
550       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_2_loose:
551       case kPbPb2011_pidTPCTOF_trkSPDfirst_2_loose:
552       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1:
553       case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
554         //----------
555       case kPbPb2011TRK_SPDfirst: // main track selection, now closer to what Hongyan does...
556         AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
557         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
558         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
559         trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     4.0, 100.0); // means at least 2 with PID
560         trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
561         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCr,     100.0, 160.0);
562         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCfCross,     0.8, 1.1); // lower limit 0.8 in most filterbits! // 1.1 since 26.02.2014
563         AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
564         trackCutsDiel->SetAODFilterBit(1<<4); // (=16) filterbit 4! //GetStandardITSTPCTrackCuts2011(kFALSE); loose DCA, 2D cut
565         trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
566         
567         cgTrackCutsAnaSPDfirst = new AliDielectronCutGroup("cgTrackCutsAnaSPDfirst","cgTrackCutsAnaSPDfirst",AliDielectronCutGroup::kCompAND);
568         cgTrackCutsAnaSPDfirst->AddCut(trackCutsDiel);
569         cgTrackCutsAnaSPDfirst->AddCut(trackCutsAOD);
570         trackCuts = cgTrackCutsAnaSPDfirst;
571         break;
572         
573       case kPbPb2011TRK_SDDfirstSPDnone: // complimentary tracks, strictly without SPD, to be combined with others!
574         AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
575         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
576         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
577         trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     3.0, 100.0); // means at least 3 with PID
578         trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
579         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCr,     100.0, 160.0);
580         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCfCross,     0.8, 1.1); // lower limit 0.8 in most filterbits! // 1.1 since 26.02.2014
581         AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
582         trackCutsDiel->SetAODFilterBit(1<<6); // GetStandardITSTPCTrackCuts2011(kTRUE), SPD none, SDD first
583         
584         cgTrackCutsAnaSDDnoSPD = new AliDielectronCutGroup("cgTrackCutsAnaSDDnoSPD","cgTrackCutsAnaSDDnoSPD",AliDielectronCutGroup::kCompAND);
585         cgTrackCutsAnaSDDnoSPD->AddCut(trackCutsDiel);
586         cgTrackCutsAnaSDDnoSPD->AddCut(trackCutsAOD);
587         trackCuts = cgTrackCutsAnaSDDnoSPD;
588         break;
589         
590         //----------
591         // MAIN settings - combined trackset - variation 1
592         //----------
593       case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight:
594       case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4:
595         // combine typical and new trackcuts with "kCompOR" condition:
596         cgTrackCutsAnaSPDorSDD = new AliDielectronCutGroup("cgTrackCutsAnaSPDorSDD","cgTrackCutsAnaSPDorSDD",AliDielectronCutGroup::kCompOR);
597         cgTrackCutsAnaSPDorSDD->AddCut(GetTrackCutsAna(kPbPb2011TRK_SPDfirst5cls));         // typical trackcuts with requirement of SPD
598         cgTrackCutsAnaSPDorSDD->AddCut(GetTrackCutsAna(kPbPb2011TRK_SDDfirstSPDnone4cls)); // new additional trackcuts with SDD instead of SPD
599         trackCuts = cgTrackCutsAnaSPDorSDD;
600         break;
601         
602         //----------
603         // MAIN settings - single trackset - variation 1
604         //----------
605       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
606       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
607         //----------
608       case kPbPb2011TRK_SPDfirst5cls: // main track selection, 5+ ITS clusters
609         AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
610         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
611         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
612         trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     5.0, 100.0); // means at least 3 with PID
613         trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
614         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCr,     100.0, 160.0);
615         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCfCross,     0.8, 1.1);
616         AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
617         trackCutsDiel->SetAODFilterBit(1<<4); // (=16) filterbit 4! //GetStandardITSTPCTrackCuts2011(kFALSE); loose DCA, 2D cut
618         trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
619         
620         cgTrackCutsAnaSPDfirst = new AliDielectronCutGroup("cgTrackCutsAnaSPDfirst","cgTrackCutsAnaSPDfirst",AliDielectronCutGroup::kCompAND);
621         cgTrackCutsAnaSPDfirst->AddCut(trackCutsDiel);
622         cgTrackCutsAnaSPDfirst->AddCut(trackCutsAOD);
623         trackCuts = cgTrackCutsAnaSPDfirst;
624         break;
625         
626       case kPbPb2011TRK_SDDfirstSPDnone4cls: // complimentary tracks, 4+ ITS clusters, strictly without SPD, to be combined with others!
627         AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
628         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
629         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
630         trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     4.0, 100.0); // means at least 4 with PID
631         trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
632         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCr,     100.0, 160.0);
633         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCfCross,     0.8, 1.1);
634         AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
635         trackCutsDiel->SetAODFilterBit(1<<6); // GetStandardITSTPCTrackCuts2011(kTRUE), SPD none, SDD first
636         
637         cgTrackCutsAnaSDDnoSPD = new AliDielectronCutGroup("cgTrackCutsAnaSDDnoSPD","cgTrackCutsAnaSDDnoSPD",AliDielectronCutGroup::kCompAND);
638         cgTrackCutsAnaSDDnoSPD->AddCut(trackCutsDiel);
639         cgTrackCutsAnaSDDnoSPD->AddCut(trackCutsAOD);
640         trackCuts = cgTrackCutsAnaSDDnoSPD;
641         break;
642         
643         // ==========
644       case kPbPb2011_TPCITS_TOFif1:
645       case kPbPb2011_TPCTOF_Semi2: // no pt and eta ranges in the trackcuts anymore!
646         AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
647         // trackCutsAOD->AddCut(AliDielectronVarManager::kEta, -0.84, 0.84); // eta commented out later. (05.02.2014)
648         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
649         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
650         trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     3.0, 100.0);
651         trackCutsAOD->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   3.5);
652         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCr,     110.0, 160.0);
653         trackCutsAOD->AddCut(AliDielectronVarManager::kNFclsTPCfCross,     0.8, 1.0);
654         AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
655         trackCutsDiel->SetAODFilterBit(16); //does nothing for ESDs // 16=2^4 -> filter bit 4!
656         trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst); //function in AliDielectronTrackCuts
657         
658         cgTrackCutsAna = new AliDielectronCutGroup("cgTrackCutsAna","cgTrackCutsAna",AliDielectronCutGroup::kCompAND);
659         cgTrackCutsAna->AddCut(trackCutsDiel);
660         cgTrackCutsAna->AddCut(trackCutsAOD);
661         trackCuts = cgTrackCutsAna;
662         break;
663         
664       case kPbPb2011_TPCTOF_Semi1:
665         //[...]
666       default: cout << "No Analysis Track Cut defined " << endl;
667           }
668           return trackCuts;
669         } 
670   
671   
672   
673         //Relaxed PID cuts for additional rejectin step, do not use blindly
674         AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
675     cout << " >>>>>>>>>>>>>>>>>>>>>> GetPIDCutsPre() >>>>>>>>>>>>>>>>>>>>>> " << endl;
676           AliAnalysisCuts* pidCuts=0x0;
677           switch (cutSet) {
678       case kPbPb2011_pidITSTPC_trkSPDfirst_3:
679       case kPbPb2011_pidTPC_trkSPDfirst_3:
680       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_2_loose:
681       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_2_loose:
682       case kPbPb2011_pidTPCTOF_trkSPDorSDD_2_loose:
683       case kPbPb2011_pidTPCTOF_trkSPDfirst_2_loose:
684       case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight:
685       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
686       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
687       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
688       case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4:
689       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
690       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
691       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1:
692       case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
693       case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
694       case kPbPb2011_TPCITS_TOFif1:
695       case kPbPb2011_TPCTOF_Semi2:
696         
697         // eta range:
698         AliDielectronVarCuts *etaRangePre1 = new AliDielectronVarCuts("etaRangePre1","etaRangePre1");
699         etaRangePre1->AddCut(AliDielectronVarManager::kEta,-0.9,0.9);
700         // pt range:
701         AliDielectronVarCuts *ptRangePre1 = new AliDielectronVarCuts("ptRangePre1","ptRangePre1");
702         ptRangePre1->AddCut(AliDielectronVarManager::kPt, .2, 3.5); // 0.2 is realistic. turnon at ~180MeV
703         //AliDielectronVarCuts *ptRangePre2 = new AliDielectronVarCuts("ptRangePre2","ptRangePre2");
704         //ptRangePre2->AddCut(AliDielectronVarManager::kPt, .4, 3.5);
705         //AliDielectronVarCuts *ptRangePre3 = new AliDielectronVarCuts("ptRangePre3","ptRangePre3");
706         //ptRangePre3->AddCut(AliDielectronVarManager::kPt, 0.05, 1.5);
707         
708         AliDielectronCutGroup* cgITSTPCTOFpre = new AliDielectronCutGroup("cgITSTPCTOFpre","cgITSTPCTOFpre",AliDielectronCutGroup::kCompAND);
709         AliDielectronPID *pidITSTPCTOFpre = new AliDielectronPID("pidITSTPCTOFpre","pidITSTPCTOFpre");
710         pidITSTPCTOFpre->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -3. , 3., 0. ,100., kFALSE);
711         pidITSTPCTOFpre->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3. , 3., 0. ,100., kTRUE);
712         // ITS will be used:
713         //  pidITSTPCTOFpre->AddCut(AliDielectronPID::kITS,AliPID::kElectron, -3. , 3., 0. ,1.7 , kFALSE);
714         // TOF will be used if available, and with pt instead of p:
715         //  pidITSTPCTOFpre->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -3. , 3., 0.4,100., kFALSE, 
716         //                          AliDielectronPID::kIfAvailable, AliDielectronVarManager::kPt);
717         cgITSTPCTOFpre->AddCut(pidITSTPCTOFpre);
718         cgITSTPCTOFpre->AddCut(etaRangePre1);
719         cgITSTPCTOFpre->AddCut(ptRangePre1);
720         cgITSTPCTOFpre->AddCut(GetTrackCutsAna(cutSet));
721         
722         //        AliDielectronCutGroup* cgTPCpre = new AliDielectronCutGroup("cgTPCpre","cgTPCpre",AliDielectronCutGroup::kCompAND);
723         //        AliDielectronPID *pidTPCpre = new AliDielectronPID("pidTPCpre","pidTPCpre");
724         //        pidTPCpre->AddCut(AliDielectronPID::kTPC,AliPID::kElectron, -3. , 3., 0. ,100., kFALSE);
725         //        pidTPCpre->AddCut(AliDielectronPID::kTPC,AliPID::kPion,     -3. , 3., 0. ,100., kTRUE);
726         //        // TOF will be used if available, and with pt instead of p:
727         //        pidTPCpre->AddCut(AliDielectronPID::kTOF,AliPID::kElectron, -3. , 3., 0.4,5.  , kFALSE, 
728         //                          AliDielectronPID::kIfAvailable, AliDielectronVarManager::kPt);
729         //        cgTPCpre->AddCut(pidTPCpre);
730         //        cgITSTPCTOFpre->AddCut(etaRangePre1);
731         //        cgTPCpre->AddCut(ptRangePre2);
732         //        cgTPCpre->AddCut(GetTrackCutsAna(cutSet));
733         
734         //        AliDielectronCutGroup* cgITSSA = new AliDielectronCutGroup("cgITSSA","cgITSSA",AliDielectronCutGroup::kCompAND);
735         //        AliDielectronPID *pidITSSA = new AliDielectronPID("pidITSSA","pidITSSA");
736         //        pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kElectron, -3., 3.);
737         //        // this means that very many pions will be used for rejection!
738         //        cgITSSA->AddCut(pidITSSA);
739         //        cgITSTPCTOFpre->AddCut(etaRangePre1);
740         //        cgITSSA->AddCut(ptRangePre3);
741         //        cgITSSA->AddCut(GetTrackCutsPre(cutSet));
742         
743         AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
744         cgInitialTrackFilter->AddCut(GetPIDCutsAna(cutSet)); // in case the prefilter cuts do not include all needed global tracks.
745         cgInitialTrackFilter->AddCut(cgITSTPCTOFpre);
746         //cgInitialTrackFilter->AddCut(cgTPCpre);
747         //cgInitialTrackFilter->AddCut(cgITSSA);
748         pidCuts = cgInitialTrackFilter;   // kCompOR works!!! <- checked with 'SetNoPairing()' and commented out 'GetPIDCutsAna(selectedPID)'
749         //cout << " ========== pidCuts prefilter: ========== " << endl;
750         //pidCuts->Print();
751         break;
752         
753       case kPbPb2011_TPCTOF_Semi1:
754         //[...]
755       default: cout << "No Prefilter PID Cut defined " << endl;
756           }
757           return pidCuts;
758         }
759   
760   
761         //Possibly different cut sets for Prefilter step
762         //Not used at the moment
763         AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
764     cout << " >>>>>>>>>>>>>>>>>>>>>> GetTrackCutsPre() >>>>>>>>>>>>>>>>>>>>>> " << endl;
765           AliDielectronCutGroup* trackCuts=0x0;
766           switch (cutSet) {
767       case kPbPb2011_pidITSTPC_trkSPDfirst_3:
768       case kPbPb2011_pidTPC_trkSPDfirst_3:
769       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_2_loose:
770       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_2_loose:
771       case kPbPb2011_pidTPCTOF_trkSPDorSDD_2_loose:
772       case kPbPb2011_pidTPCTOF_trkSPDfirst_2_loose:
773       case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight:
774       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
775       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
776       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
777       case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4:
778       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
779       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
780       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1:
781       case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
782         AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
783         trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.84,0.84);
784         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
785         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
786         trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     3.0, 100.0);
787         AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
788         trackCutsDiel->SetAODFilterBit(1); //does nothing for ESDs, ITSSA(???) // maybe use FilterBit(2) instead!
789         
790         cgTrackCutsPre = new AliDielectronCutGroup("cgTrackCutsPre","cgTrackCutsPre",AliDielectronCutGroup::kCompAND);
791         cgTrackCutsPre->AddCut(trackCutsDiel);
792         cgTrackCutsPre->AddCut(trackCutsAOD);
793         trackCuts = cgTrackCutsPre;
794         break;
795         
796       case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
797         AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
798         trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.9,0.9);
799         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
800         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
801         trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     4.0, 100.0);
802         AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
803         trackCutsDiel->SetAODFilterBit(1); //does nothing for ESDs, ITSSA(???) // maybe use FilterBit(2) instead!
804         trackCutsDiel->SetRequireITSRefit(kTRUE); //function in AliDielectronTrackCuts
805         trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst); //function in AliDielectronTrackCuts
806         
807         cgTrackCutsPre = new AliDielectronCutGroup("cgTrackCutsPre","cgTrackCutsPre",AliDielectronCutGroup::kCompAND);
808         cgTrackCutsPre->AddCut(trackCutsDiel);
809         cgTrackCutsPre->AddCut(trackCutsAOD);
810         trackCuts = cgTrackCutsPre;
811         break;
812         
813       case kPbPb2011_TPCITS_TOFif1:
814       case kPbPb2011_TPCTOF_Semi2: // no pt ranges in the trackcuts anymore!
815         AliDielectronVarCuts* trackCutsAOD =new AliDielectronVarCuts("trackCutsAOD","trackCutsAOD");
816         trackCutsAOD->AddCut(AliDielectronVarManager::kEta,-0.84,0.84);
817         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
818         trackCutsAOD->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
819         trackCutsAOD->AddCut(AliDielectronVarManager::kNclsITS,     3.0, 100.0);
820         AliDielectronTrackCuts *trackCutsDiel = new AliDielectronTrackCuts("trackCutsDiel","trackCutsDiel");
821         trackCutsDiel->SetAODFilterBit(1); //does nothing for ESDs, ITSSA(???) // maybe use FilterBit(2) instead!
822         trackCutsDiel->SetRequireITSRefit(kTRUE); //function in AliDielectronTrackCuts
823         trackCutsDiel->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst); //function in AliDielectronTrackCuts
824         
825         cgTrackCutsPre = new AliDielectronCutGroup("cgTrackCutsPre","cgTrackCutsPre",AliDielectronCutGroup::kCompAND);
826         cgTrackCutsPre->AddCut(trackCutsDiel);
827         cgTrackCutsPre->AddCut(trackCutsAOD);
828         trackCuts = cgTrackCutsPre;
829         break;
830         
831       case kPbPb2011_TPCTOF_Semi1:
832         //[...]
833       default: cout << "No Prefilter Track Cut defined " << endl;
834           }
835           return trackCuts;
836         }
837   
838   
839   
840         //*******************************************************************************
841         //*******************************************************************************
842         //** ESD TRACK CUTS TUNED FOR AGREEMENT BETWEEN AODS AND ESDS  ******************
843         //** NOT NECESSARILY 100% OPTIMIZED FOR DIEL-ANALYSIS          ******************
844         //*******************************************************************************
845         //*******************************************************************************
846   
847         //WHEN RUNNING ON ESDs: LOAD Default Cuts for AODs
848         AliAnalysisCuts* GetESDTrackCutsAna(Int_t cutSet) {
849     //cout << " >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> " << endl;
850     cout << " >>>>>>>>>>>>>>>>>>>>>>  GetESDTrackCutsAna()  >>>>>>>>>>>>>>>>>>>>>> " << endl;
851     //cout << " >>>>>>>>>>>>>>>>>>>>>> Setting ESD Track Cuts >>>>>>>>>>>>>>>>>>>>>> " << endl;
852     //cout << " >>>>>>>>>>>>>>>>>>>>>> ( do we run on ESD?! ) >>>>>>>>>>>>>>>>>>>>>> " << endl;
853     //cout << " >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> " << endl;
854           AliESDtrackCuts* esdTrackCutsH = 0x0;
855           switch (cutSet) {
856       case kPbPb2011_pidITSTPC_trkSPDfirst_3:
857       case kPbPb2011_pidTPC_trkSPDfirst_3:
858       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_2_loose:
859       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_2_loose:
860       case kPbPb2011_pidTPCTOF_trkSPDorSDD_2_loose:
861       case kPbPb2011_pidTPCTOF_trkSPDfirst_2_loose:
862       case kPbPb2011_pidITS2gevTPCTOFif_trkSPD5orSDD4cls_6_tight:
863       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst5cls_6_tight:
864       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDorSDD_5_tight:
865       case kPbPb2011_pidITS2gevTPCTOFif_trkSPDfirst_5_tight:
866       case kPbPb2011_pidITSTPCTOFif_trkSPD5orSDD4cls_4:
867       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst5cls_4:
868       case kPbPb2011_pidITSTPCTOFif_trkSPDorSDD_1:
869       case kPbPb2011_pidITSTPCTOFif_trkSPDfirst_1:
870       case kPbPb2011_pidTPCTOF_trkSPDorSDD_1:
871       case kPbPb2011_pidTPCTOF_trkSPDfirst_1:
872       case kPbPb2011_TPCITS_TOFif1:
873       case kPbPb2011_TPCTOF_Semi2:
874       case kPbPb2011_TPCTOF_Semi1:
875       case kPbPb2011NoPID:
876       case kPbPb2011TPCandTOF :
877                 case kPbPb2011TPCandTOFHPT:
878       case kPbPb2011TPC :
879       case kPbPb2011TPCandTOFwide :
880       case kPbPb2011TPCorTOF  :
881       case kpp2010TPCandTOF :
882       case kpp2010TPCorTOF  :
883         // standard cuts with very loose DCA: Bit4 (Int: 16), AOD095&115
884         
885         esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE); 
886         esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
887         esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
888         esdTrackCutsH->SetDCAToVertex2D(kTRUE);
889         
890         //The cuts below should be the onyl ones that are missing
891         //explicitely in the TrackCutsAna method
892         //To be sure, StandardITSTPCTrackCuts is loaded however
893         /* 
894          esdTrackCutsH = new AliESDtrackCuts();
895          esdTrackCutsH->SetAcceptKinkDaughters(kFALSE);
896          //Not done so far via dielectron cuts:
897          */
898         /*
899          esdTrackCuts->SetDCAToVertex2D(kFALSE);
900          esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
901          esdTrackCuts->SetMaxChi2PerClusterITS(36);
902          */
903         
904         break;
905       default: cout << "No ESD Track Cut defined " << endl;
906           }
907           return esdTrackCutsH;
908         } 
909   
910   
911 };