]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/macrosLMEE/LMEECutLib_reichelt.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / LMEECutLib_reichelt.C
CommitLineData
bae04e0a 1class LMEECutLib {
2
3public:
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};