]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/macrosLMEE/LMEECutLib.C
change analysis macros
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / LMEECutLib.C
CommitLineData
6be5eb30 1class LMEECutLib {
2
3 public:
4 static enum LMMECutSet {
c9868ab1 5 kPbPb2011TPCandTOF, //TOF required
6 kPbPb2011TPCandTOFwide, //TOF required, more relaxed cut on TPC
6be5eb30 7 kPbPb2011TPCorTOF,
8 kpp2010TPCandTOF,
9 kpp2010TPCorTOF,
10 kCUTSETMAX
11 };
12
13 static enum LMMECentSel {
14 kPbPb2011Central,
15 kPbPb2011SemiCentral,
16 kPbPb2011Peripheral,
17 kCENTSELMAX
18 };
19
20 //char* LMEECutNames[kCUTSETMAX] = { "PbPb2011TPCandTOF","PbPb2011TPCorTOF"};
8349c102 21
22 Bool_t useMC;
6be5eb30 23
24
8349c102 25 LMEECutLib() {useMC=kFALSE;}
6be5eb30 26
27 AliDielectronEventCuts* GetEventCuts(Int_t cutSet);
28 AliAnalysisCuts* GetCentralityCuts(Int_t centSel);
29 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet);
30 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet);
31
32 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet);
33 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet);
34
1350e718 35 AliAnalysisCuts* GetPairCuts2(Int_t cutSet,Bool_t tooglePC=kFALSE);
6be5eb30 36 AliAnalysisCuts* GetPairCuts(Int_t cutSet);
37
38 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet);
39 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet);
40
8349c102 41 void SetMCFlag( Bool_t isMC=kTRUE) {useMC=isMC;}
42
6be5eb30 43 AliDielectronEventCuts* GetEventCuts(Int_t cutSet) {
44 AliDielectronEventCuts* eventCuts = 0x0;
45 switch (cutSet) {
46 case kPbPb2011TPCandTOF :
c9868ab1 47 case kPbPb2011TPCandTOFwide :
6be5eb30 48 case kPbPb2011TPCorTOF :
49 case kpp2010TPCandTOF :
50 case kpp2010TPCorTOF :
51 eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
52 eventCuts->SetRequireVertex();
53 eventCuts->SetMinVtxContributors(1);
54 eventCuts->SetVertexZ(-10.,10.);
6be5eb30 55 break;
56 default: cout << "No Event Cut defined" << endl;
57 }
58 return eventCuts;
59 }
60
61 AliAnalysisCuts* GetCentralityCuts(Int_t centSel) {
62 AliDielectronVarCuts* centCuts = 0x0;
63 switch (centSel) {
64 case kPbPb2011Central:
65 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Central");
66 centCuts->AddCut(AliDielectronVarManager::kCentrality,0.,10.);
67 break;
68 case kPbPb2011SemiCentral:
69 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011SemiCentral");
70 //Restrict to 50%, Trigger selction
9a476b26 71 centCuts->AddCut(AliDielectronVarManager::kCentrality,20.,50.);
6be5eb30 72 break;
73 case kPbPb2011Peripheral:
74 centCuts = new AliDielectronVarCuts("centCuts","CentralityPbPb2011Peripheral");
75 centCuts->AddCut(AliDielectronVarManager::kCentrality,50.,90.);
76 break;
77 default: cout << "No Centrality selected" << endl;
78 }
79 return centCuts;
80 }
81
82
83 AliDielectronTrackRotator* GetTrackRotator(Int_t cutSet) {
84 AliDielectronTrackRotator* trackRotator = 0x0;
85 switch (cutSet) {
86 case kPbPb2011TPCandTOF :
c9868ab1 87 case kPbPb2011TPCandTOFwide :
6be5eb30 88 case kPbPb2011TPCorTOF :
89 case kpp2010TPCandTOF :
90 case kpp2010TPCorTOF :
91 trackRotator = new AliDielectronTrackRotator();
92 trackRotator->SetIterations(20);
93 trackRotator->SetConeAnglePhi(TMath::Pi()/180*165);
94 trackRotator->SetStartAnglePhi(TMath::Pi());
95 break;
96 default: cout << "No Rotator defined" << endl;
97 }
98 return trackRotator;
99 }
100
101
102 AliDielectronMixingHandler* GetMixingHandler(Int_t cutSet) {
103 AliDielectronMixingHandler* mixingHandler = 0x0;
104 switch (cutSet) {
8217d84c 105 case kPbPb2011TPCandTOF :
c9868ab1 106 case kPbPb2011TPCandTOFwide :
7f5f1ec3 107 case kPbPb2011TPCorTOF :
8217d84c 108 mixingHandler = new AliDielectronMixingHandler;
109 mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
7f5f1ec3 110 mixingHandler->AddVariable(AliDielectronVarManager::kCentrality,"0,5,10,20,40,80,100");
111 mixingHandler->AddVariable(AliDielectronVarManager::kv0ACrpH2,"-6*(TMath::Pi()/6),-5*(TMath::Pi()/6),-4*(TMath::Pi()/6),-3*(TMath::Pi()/6),-2*(TMath::Pi()/6),-1*(TMath::Pi()/6),0,1*(TMath::Pi()/6),2*(TMath::Pi()/6),3*(TMath::Pi()/6),4*(TMath::Pi()/6),5*(TMath::Pi()/6),6*(TMath::Pi()/6)");
8217d84c 112 //mixingHandler->SetDepth(50);
7f5f1ec3 113 mixingHandler->SetDepth(15);
8217d84c 114 mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
6be5eb30 115 break;
116 case kpp2010TPCandTOF :
117 case kpp2010TPCorTOF :
118 mixingHandler = new AliDielectronMixingHandler;
119 mixingHandler->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
8217d84c 120 mixingHandler->AddVariable(AliDielectronVarManager::kNacc,"0,10000");
6be5eb30 121 //might want to add multiplicity?
7f5f1ec3 122 mixingHandler->SetDepth(25);
6be5eb30 123 mixingHandler->SetMixType(AliDielectronMixingHandler::kAll);
124 break;
7f5f1ec3 125 default: cout << "No Mixing Handler defined" << endl;
6be5eb30 126 }
127 return mixingHandler;
128 }
129
130
131 AliAnalysisCuts* GetPIDCutsAna(Int_t cutSet) {
132 AliAnalysisCuts* anaCuts=0x0;
133
134 // + [2] added for Dec2010 Cut!
135 TF1 *lowerCut = new TF1("lowerCut", "[0] * TMath::Exp([1]*x) + [2]", 0, 20);
136 /* until Nov2010
137 lowerCut->SetParameter(0, -2.7);
138 lowerCut->SetParameter(1, -0.4357);
139 */
140 /* 18.01.2011 ALiHFEpid.cxx */
141 lowerCut->SetParameter(0,-3.7);
142 lowerCut->SetParameter(1,-0.8);
143 lowerCut->SetParameter(2,-0.35);
144
8349c102 145 if (useMC) { //overwrite parameters
6be5eb30 146 lowerCut->SetParameter(0,-2.5);
147 lowerCut->SetParameter(2,-2.2);
148 }
149
150 //---------------------------------------------
cb0b0223 151 AliDielectronPID *pidTPCTOFeOnly = new AliDielectronPID("TPC-TOF","TPC-TOF");
7f5f1ec3 152 pidTPCTOFeOnly->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3. ,3.,0.0,100.,kFALSE);
6be5eb30 153 pidTPCTOFeOnly->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
154
7f5f1ec3 155 AliDielectronPID *pidTPCandTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
156 pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.,0.0,100.,kFALSE);
157 pidTPCandTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
158 pidTPCandTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
159
6be5eb30 160 AliDielectronPID *pidTPChardTOF = new AliDielectronPID("TPC-TOF-HFE","TPC-TOF-HFE");
161 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,lowerCut,3.,0.0,100.,kFALSE);
7f5f1ec3 162 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,100.,kTRUE);
6be5eb30 163 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
164 pidTPChardTOF->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
165 pidTPChardTOF->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.0 , 100., kFALSE );
166 //___________________________________________
cb0b0223 167 AliDielectronPID *pidTT = new AliDielectronPID("TPC-TOF","TPC-TOF");
168 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-1.5,3.,0.2,0.4,kFALSE);
169 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3,3.,0.4,100.,kFALSE);
0ff2c21d 170 pidTT->AddCut(AliDielectronPID::kTOF ,AliPID::kElectron , -3. , 3. , 0.2 , 100., kFALSE );
6be5eb30 171
172 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3.,0.,100.,kTRUE);
173 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0.,100.,kTRUE);
174 pidTT->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,-3.,3.,0.,100.,kTRUE);
175 //___________________________________________
176 AliDielectronVarCuts *pidTPCsignal = new AliDielectronVarCuts("pidTPCsignal","cut on the TPC signal");
8349c102 177 if (useMC) {
178 pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,65.,85.);
179 }
180 else {
181 pidTPCsignal->AddCut(AliDielectronVarManager::kTPCsignal,75.,90.);
182 }
6be5eb30 183 //___________________________________________
c9868ab1 184 AliDielectronVarCuts *pidTPCsignalWide = new AliDielectronVarCuts("pidTPCsignalWide","cut on the TPC signal");
54beba6b 185 pidTPCsignalWide->AddCut(AliDielectronVarManager::kTPCsignal,70.,90.);
c9868ab1 186 //___________________________________________
6be5eb30 187
188 AliDielectronVarCuts *pTPC = new AliDielectronVarCuts("P>.4","P>.4");
50191baf 189 pTPC->AddCut(AliDielectronVarManager::kPt,.4,5.);
6be5eb30 190
191 AliDielectronVarCuts *pMin = new AliDielectronVarCuts("P>.2","P>.2");
50191baf 192 pMin->AddCut(AliDielectronVarManager::kPt,.2,5.);
6be5eb30 193
194 switch (cutSet) {
195 case kPbPb2011TPCandTOF :
196 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
197 cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
7f5f1ec3 198 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
6be5eb30 199 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignal);
200 cgSecondTrackFilterPIDTPC1->AddCut(GetTrackCutsAna(cutSet));
201 anaCuts = cgSecondTrackFilterPIDTPC1;
202 break;
c9868ab1 203 case kPbPb2011TPCandTOFwide :
204 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC1 = new AliDielectronCutGroup("cgPIDTPC1","cgPIDTPC1",AliDielectronCutGroup::kCompAND);
205 cgSecondTrackFilterPIDTPC1->AddCut(pTPC);
206 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCandTOF);
207 cgSecondTrackFilterPIDTPC1->AddCut(pidTPCsignalWide);
208 cgSecondTrackFilterPIDTPC1->AddCut(GetTrackCutsAna(cutSet));
209 anaCuts = cgSecondTrackFilterPIDTPC1;
210 break;
6be5eb30 211 case kPbPb2011TPCorTOF :
212 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC2 = new AliDielectronCutGroup("cgPIDTPC2","cgPIDTPC2",AliDielectronCutGroup::kCompAND);
213 cgSecondTrackFilterPIDTPC2->AddCut(pMin);
214 cgSecondTrackFilterPIDTPC2->AddCut(pidTT);
215 cgSecondTrackFilterPIDTPC2->AddCut(pidTPCsignal);
216 cgSecondTrackFilterPIDTPC2->AddCut(GetTrackCutsAna(cutSet));
217 anaCuts = cgSecondTrackFilterPIDTPC2;
218 break;
219 case kpp2010TPCandTOF :
220 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
221 cgSecondTrackFilterPIDTPC->AddCut(pTPC);
222 //cgSecondTrackFilterPIDTPC->AddCut(pidTPChardTOF);
7f5f1ec3 223 cgSecondTrackFilterPIDTPC->AddCut(pidTPCandTOF);
6be5eb30 224 cgSecondTrackFilterPIDTPC->AddCut(pidTPCTOFeOnly);
0ff2c21d 225 cgSecondTrackFilterPIDTPC->AddCut(GetTrackCutsAna(cutSet));
6be5eb30 226 anaCuts = cgSecondTrackFilterPIDTPC;
227 break;
228 case kpp2010TPCorTOF :
229 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
230 cgSecondTrackFilterPIDTPC->AddCut(pMin);
231 cgSecondTrackFilterPIDTPC->AddCut(pidTT);
0ff2c21d 232 cgSecondTrackFilterPIDTPC->AddCut(GetTrackCutsAna(cutSet));
6be5eb30 233 anaCuts = cgSecondTrackFilterPIDTPC;
234 break;
235 default: cout << "No Analysis PID Cut defined " << endl;
236 }
237 return anaCuts;
238 }
239
240 AliAnalysisCuts* GetPIDCutsPre(Int_t cutSet) {
241 AliAnalysisCuts* anaCuts=0x0;
242 switch (cutSet) {
243 case kPbPb2011TPCandTOF :
c9868ab1 244 case kPbPb2011TPCandTOFwide :
6be5eb30 245 case kPbPb2011TPCorTOF :
246 case kpp2010TPCandTOF :
247 case kpp2010TPCorTOF :
248 AliDielectronCutGroup* cgSecondTrackFilterPIDTPC = new AliDielectronCutGroup("cgPIDTPC","cgPIDTPC",AliDielectronCutGroup::kCompAND);
249 AliDielectronCutGroup* cgITSTPC = new AliDielectronCutGroup("cgITSTPC","cgITSTPC",AliDielectronCutGroup::kCompAND);
250 AliDielectronPID *pidITSTPC = new AliDielectronPID("TPCpre","TPCpre");
251 pidITSTPC->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
252 cgITSTPC->AddCut(pidITSTPC);
0ff2c21d 253 cgITSTPC->AddCut(GetTrackCutsAna(cutSet));
6be5eb30 254
255 AliDielectronCutGroup* cgITSSA = new AliDielectronCutGroup("cgITSSA","cgITSSA",AliDielectronCutGroup::kCompAND);
256 AliDielectronPID *pidITSSA = new AliDielectronPID("pidITSSA","pidITSSA");
257 pidITSSA->AddCut(AliDielectronPID::kITS,AliPID::kElectron,-3.,3.);
258 cgITSSA->AddCut(pidITSSA);
0ff2c21d 259 cgITSSA->AddCut(GetTrackCutsPre(cutSet));
6be5eb30 260
261 AliDielectronCutGroup* cgInitialTrackFilter = new AliDielectronCutGroup("cgInitialTrackFilter","cgInitialTrackFilter",AliDielectronCutGroup::kCompOR);
262 cgInitialTrackFilter->AddCut(cgITSTPC);
263 cgInitialTrackFilter->AddCut(cgITSSA);
264 anaCuts = cgInitialTrackFilter;
265 break;
266 default: cout << "No Pre-PID Cut defined " << endl;
267 }
268 return anaCuts;
269 }
270
271
1350e718 272 AliAnalysisCuts* GetPairCuts2(Int_t cutSet, Bool_t togglePC /*=kFALSE*/) {
54beba6b 273 AliDielectronVarCuts* pairCuts=0x0;
274 switch (cutSet) {
275 case kPbPb2011TPCorTOF :
276 case kpp2010TPCandTOF :
277 pairCuts = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
278 pairCuts->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
279 break;
280 case kPbPb2011TPCandTOF :
281 case kPbPb2011TPCandTOFwide :
282 case kpp2010TPCorTOF :
1350e718 283 if (!togglePC) {
54beba6b 284 pairCuts =new AliDielectronVarCuts("Phiv Cuts","Phiv<2.0rad");
285 pairCuts->AddCut(AliDielectronVarManager::kPhivPair, 2.0, TMath::ACos(-1.0), kTRUE); //exclude
1350e718 286 }
287 else {
288 pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
289 pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035,kTRUE); //Logic inverted with pre-cut
290 }
54beba6b 291 break;
292 default: cout << "No Pair Cuts defined " << endl;
293 }
294 return pairCuts;
295 }
296
6be5eb30 297 AliAnalysisCuts* GetPairCuts(Int_t cutSet) {
298 AliDielectronVarCuts* pairCuts=0x0;
299 switch (cutSet) {
6be5eb30 300 case kPbPb2011TPCorTOF :
301 case kpp2010TPCandTOF :
6be5eb30 302 pairCuts = new AliDielectronVarCuts("InvMass","InvMass > 150 MeV");
303 pairCuts->AddCut(AliDielectronVarManager::kM,0.15,100.,kTRUE);
304 break;
cb0b0223 305 case kPbPb2011TPCandTOF :
c9868ab1 306 case kPbPb2011TPCandTOFwide :
cb0b0223 307 case kpp2010TPCorTOF :
308 pairCuts =new AliDielectronVarCuts("OpeningAngle","Opening angle > .035rad");
309 pairCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0. , 0.035);
310 break;
6be5eb30 311 default: cout << "No Pair Cuts defined " << endl;
312 }
313 return pairCuts;
314 }
315
316 AliAnalysisCuts* GetTrackCutsAna(Int_t cutSet) {
317 AliESDtrackCuts* trackCuts=0x0;
318 switch (cutSet) {
319 case kPbPb2011TPCandTOF :
c9868ab1 320 case kPbPb2011TPCandTOFwide :
6be5eb30 321 case kPbPb2011TPCorTOF :
322 case kpp2010TPCandTOF :
323 case kpp2010TPCorTOF :
324 trackCuts = new AliESDtrackCuts();
325 trackCuts->SetDCAToVertex2D(kTRUE);
326 trackCuts->SetMaxDCAToVertexZ(3.0);
327 trackCuts->SetMaxDCAToVertexXY(1.0);
328 //trackCuts->SetMaxNsigmaToVertex(3.0);
329 trackCuts->SetPtRange( 0.05 , 200.0);
330 trackCuts->SetEtaRange( -0.84 , 0.84 );
331 trackCuts->SetAcceptKinkDaughters(kFALSE);
332 trackCuts->SetRequireITSRefit(kTRUE);
333 trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
334 trackCuts->SetMinNClustersITS(3);
335 trackCuts->SetRequireTPCRefit(kTRUE);
336 //trackCuts->SetMinNClustersTPC(60);
337 trackCuts->SetMinNCrossedRowsTPC(110);
338 trackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.7);
339 trackCuts->SetMaxChi2PerClusterTPC(3.5);
cb0b0223 340 //trackCuts->SetMaxChi2PerClusterITS(6);
6be5eb30 341 break;
342 default: cout << "No Analysis Track Cut defined " << endl;
343 }
344 return trackCuts;
345 }
346
347 AliAnalysisCuts* GetTrackCutsPre(Int_t cutSet) {
348 AliESDtrackCuts* trackCuts=0x0;
349 switch (cutSet) {
350 case kPbPb2011TPCandTOF :
c9868ab1 351 case kPbPb2011TPCandTOFwide :
6be5eb30 352 case kPbPb2011TPCorTOF :
353 case kpp2010TPCandTOF :
354 case kpp2010TPCorTOF :
355 trackCuts = new AliESDtrackCuts();
356 trackCuts->SetDCAToVertex2D(kTRUE);
357 trackCuts->SetMaxDCAToVertexZ(3.0);
358 trackCuts->SetMaxDCAToVertexXY(1.0);
359 trackCuts->SetEtaRange( -0.84 , 0.84 );
360 trackCuts->SetPtRange( 0.05 , 0.5);
361 trackCuts->SetAcceptKinkDaughters(kFALSE);
362 trackCuts->SetRequireITSRefit(kTRUE);
363 trackCuts->SetRequireITSStandAlone(kTRUE);
364 trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
365 trackCuts->SetMinNClustersITS(3); //PhotonGroup-Dalitz: 2?!
366 break;
367 default: cout << "No Pre-Track Cut defined " << endl;
368 }
369 return trackCuts;
370 }
371
372};