]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/macrosJPSI/ConfigJpsiME_jpsi_PbPb.C
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / ConfigJpsiME_jpsi_PbPb.C
CommitLineData
15f4cb18 1void InitHistograms(AliDielectron *die, Int_t cutDefinition);
ab5dc7f9 2void InitHF(AliDielectron* die, Int_t cutDefinition);
15f4cb18 3
4void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition);
5void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
6void SetupPairCuts( AliDielectron *die, Int_t cutDefinition);
7
8void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition);
9void ConfigBgrd( AliDielectron *die, Int_t cutDefinition);
10
ab5dc7f9 11TString names=("NoBins;Zvtx;ZvtxNoKF;ZvtxCent;ZvtxNcontr;ZvtxNcontrPE;ZvtxNcontrPEepTPC;ZvtxNcontrPEepTPCmag;ZvtxepTPC");
12enum { kNoBins=0, kZvtx, kZvtxNoKF, kZvtxCent, kZvtxNcontr, kZvtxNcontrPE, kZvtxNcontrPEepTPC, kZvtxNcontrPEepTPCmag, kZvtxepTPC};
15f4cb18 13
14TObjArray *arrNames=names.Tokenize(";");
15const Int_t nDie=arrNames->GetEntries();
16
17Bool_t isESD = kTRUE;
18Bool_t hasMC = kFALSE;
19TString list = gSystem->Getenv("LIST");
20
21AliDielectron* ConfigJpsiME_jpsi_PbPb(Int_t cutDefinition, TString prod="", ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB)
22{
23 //
24 // Setup the instance of AliDielectron
25 //
26
27 // gsi train?
28 TString trainRoot = gSystem->Getenv("TRAIN_ROOT");
29 Bool_t isGSItrain = (trainRoot.IsNull()?kFALSE:kTRUE);
30
31 // find mc or not?
32 if( list.IsNull()) list=prod;
33 if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
34 if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
35
36 //ESD handler?
37 isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
38
ab5dc7f9 39 // switch off some configurations
40 if(hasMC) { // MONTE CARLO
41 switch(cutDefinition) {
42 //case kQA: return 0x0;
43 }
44 } else { // COLLISION DATA
45 switch(cutDefinition) {
46 // case kNoBins: return 0x0;
47 // case kZvtx: return 0x0;
48 case kZvtxNoKF: return 0x0;
49 // case kZvtxCent: return 0x0;
50 // case kZvtxNcontr: return 0x0;
51 case kZvtxNcontrPE: return 0x0;
52 case kZvtxNcontrPEepTPC: return 0x0;
53 case kZvtxNcontrPEepTPCmag: return 0x0;
54 // case kZvtxepTPC: return 0x0;
55 // case kQA: return 0x0;
56 // case kGammas: return 0x0;
57 }
58 }
59
60
15f4cb18 61 // task name
62 TString name=Form("%02d",cutDefinition);
63 if (cutDefinition<arrNames->GetEntriesFast()) name=arrNames->At(cutDefinition)->GetName();
64 printf(" Adding %s%s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?" MC":""),name.Data(),list.Data());
65
66 // init AliDielectron
67 AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("ME config: %s",name.Data()));
68 die->SetHasMC(hasMC);
69
70 // cut setup
71 SetupEventCuts(die,triggers,cutDefinition);
72 SetupTrackCuts(die,cutDefinition);
73 SetupPairCuts(die,cutDefinition);
74
15f4cb18 75 // bgrd estimators
76 ConfigBgrd(die,cutDefinition);
77
78 // tpc event plane configuration
79 ConfigEvtPlane(die,cutDefinition);
80
81 // prefilter settings
82 die->SetPreFilterUnlikeOnly();
83 //die->SetPreFilterAllSigns();
84 //die->SetNoPairing();
85
1c96a71e 86 // KF usgae
87 if(cutDefinition==kZvtxNoKF) die->SetUseKF(kFALSE);
88
ab5dc7f9 89 // histogram setup
90 InitHistograms(die,cutDefinition);
91 printf(" Add %d class types to the histo manager \n",die->GetHistogramList()->GetEntries());
92
93 // HF array setup
94 InitHF(die,cutDefinition);
95
96
15f4cb18 97 return die;
98}
99
100//______________________________________________________________________________________
101void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition)
102{
103 //
104 // Setup the event cuts
105 //
106
107 // trigger specific centrality cuts (reject trigger inefficiencies)
108 Double_t minCent=0.0, maxCent=100.;
109 if(!hasMC) {
110 switch(triggers) {
111 case AliVEvent::kCentral: minCent= 0.; maxCent= 9.; break;
112 case AliVEvent::kSemiCentral: minCent=12.; maxCent=53.; break;
113 case AliVEvent::kMB: minCent= 0.; maxCent=80.; break;
114 default: minCent= 0.; maxCent=80.; break;
115 }
116 }
117
118 // VZERO multiplicity vs. number ob global tracks cut
119 TF1 *fMean = new TF1("fMean", "pol1", 0,25e+3);
120 fMean->SetParameters(691.633, 1.4892);
121 TF1 *fSigma = new TF1("fSigma","[0]+sqrt([1]*x+[2])",0,25e+3);
122 fSigma->SetParameters(-83.6599, 36.7677, 69530.7);
123
124 // number of vertex contributors TPC vs. global cut
125 TF1* vtxContribUp = new TF1("vtxContribUp","pol1",0.,20000.);
126 vtxContribUp->SetParameters(0.,1.38); // --> strong cut, removes about 40% of events
127 TF1* vtxContribLow= new TF1("vtxContribLow","pol1",0.,20000.);
128 vtxContribLow->SetParameters(-100.,1.2);
129
130 AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","eventCuts");
131 if(!isESD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
132 eventCuts->SetRequireVertex();
133 eventCuts->SetMinVtxContributors(1);
134 eventCuts->SetVertexZ(-10.,+10.);
135 eventCuts->SetCentralityRange(minCent,maxCent);
136
137 // apply pile-up event (PE) rejection
138 switch(cutDefinition) {
139 case kZvtxNcontrPE:
140 case kZvtxNcontrPEepTPC:
141 case kZvtxNcontrPEepTPCmag:
142 eventCuts->SetCutOnV0MultipicityNTrks(fMean, fSigma, 4.0);
143 // eventCuts->SetCutOnNVtxContributorsGloablTPC(vtxContribLow, vtxContribUp);
144 }
145 eventCuts->Print();
146 die->GetEventFilter().AddCuts(eventCuts);
147
148}
149
150//______________________________________________________________________________________
151void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
152{
153 //
154 // Setup the track cuts
155 //
156
157 // Quality cuts
158 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
159 die->GetTrackFilter().AddCuts(cuts);
160
161 // AOD track filter (needs to be first cut to speed up)
162 AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
163 trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual);
164 // trkFilter->SetMinNCrossedRowsOverFindable(0.6);
165 if(!isESD) cuts->AddCut(trkFilter);
166
167 //Pt cut, should make execution a bit faster
168 AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
ab5dc7f9 169 pt->AddCut(AliDielectronVarManager::kPt,0.85,1e30); //0.8
15f4cb18 170 cuts->AddCut(pt);
171
172 // track cuts ESD and AOD
173 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
174 varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
175 varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
176 varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9); // -0.9, 0.9
177 varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
178 varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
179 varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
180 varCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE);
181 cuts->AddCut(varCuts);
182 varCuts->Print();
183
184 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
185 trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // ITS-4 = 1+2+4+8
186 trkCuts->SetRequireITSRefit(kTRUE);
187 trkCuts->SetRequireTPCRefit(kTRUE);
188 cuts->AddCut(trkCuts);
189
190 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
191 AliDielectronPID *pid = new AliDielectronPID("PID","PID");
192 pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE);
193 pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
194 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.,4.);
195 pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
196 cuts->AddCut(pid);
197 /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
198
199 // exclude conversion electrons selected by the tender
200 AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
201 noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
202 // cuts->AddCut(noconv);
203
204}
205
206//______________________________________________________________________________________
207void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
208{
209 //
210 // Setup the pair cuts
211 //
212
213 // conversion rejection
214 Double_t gCut = 0.05;
215 AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
216// gammaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1, kTRUE);
217// gammaCuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25, kTRUE);
218// gammaCuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0, kTRUE);
219// gammaCuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05, kTRUE);
220// gammaCuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0, kTRUE);
221 gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut);
222 die->GetPairPreFilter().AddCuts(gammaCuts);
223
224 // rapidity selection
225 // AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
226 // rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
227 // die->GetPairFilter().AddCuts(rapCut);
228
229}
230
231//______________________________________________________________________________________
232void ConfigBgrd(AliDielectron *die, Int_t cutDefinition)
233{
234 //
235 // Configurate the background estimators
236 //
237
238 // add mixed events
239 AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
240
241 // mixing handler
242 switch(cutDefinition) {
243 case kNoBins: /* */ break;
244 case kZvtx:
1c96a71e 245 case kZvtxNoKF:
15f4cb18 246 mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
247 break;
248 case kZvtxCent:
249 mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
250 mix->AddVariable(AliDielectronVarManager::kCentrality, 8, 0.,80.);
251 break;
252 case kZvtxNcontrPEepTPCmag:
ab5dc7f9 253 mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
254 mix->AddVariable(AliDielectronVarManager::kNVtxContrib, 32, 0.,3200.);
255 mix->AddVariable(AliDielectronVarManager::kTPCrpH2, 8, TMath::Pi()/-2., TMath::Pi()/2.);
15f4cb18 256 mix->AddVariable(AliDielectronVarManager::kTPCmagH2, "0.,20.,50.,80.,110.,150.,500.");
ab5dc7f9 257 break;
15f4cb18 258 case kZvtxNcontrPEepTPC:
ab5dc7f9 259 mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
260 mix->AddVariable(AliDielectronVarManager::kNVtxContrib, 32, 0.,3200.);
15f4cb18 261 mix->AddVariable(AliDielectronVarManager::kTPCrpH2, 8, TMath::Pi()/-2., TMath::Pi()/2.);
ab5dc7f9 262 break;
15f4cb18 263 case kZvtxNcontrPE:
264 case kZvtxNcontr:
ab5dc7f9 265 mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
15f4cb18 266 mix->AddVariable(AliDielectronVarManager::kNVtxContrib, 32, 0.,3200.);
ab5dc7f9 267 break;
268 case kZvtxepTPC:
15f4cb18 269 mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
ab5dc7f9 270 mix->AddVariable(AliDielectronVarManager::kTPCrpH2, 8, TMath::Pi()/-2., TMath::Pi()/2.);
271 mix->AddVariable(AliDielectronVarManager::kTPCmagH2, "0.,20.,50.,80.,110.,150.,500.");
15f4cb18 272 break;
273 }
274 mix->SetMixType(AliDielectronMixingHandler::kOSonly);
275 mix->SetDepth(150);
276 mix->Print();
277
278 die->SetMixingHandler(mix);
279}
280
281//______________________________________________________________________________________
282void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition)
283{
284 //
285 // Configurate the TPC event plane
286 //
287
ab5dc7f9 288 if(cutDefinition!=kZvtxNcontrPEepTPC && cutDefinition!=kZvtxNcontrPEepTPCmag && cutDefinition!=kZvtxepTPC ) return;
15f4cb18 289
290 Double_t gGap = 0.0;
291 AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
292 poi->AddCut(AliDielectronVarManager::kM,2.92,3.20); // particles of interest, jpsi mass window
293 die->GetEventPlanePOIPreFilter().AddCuts(poi);
294
295 // eta gap in tpc event plane
296 //AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
297 //etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
298 //die->GetEventPlanePreFilter().AddCuts(etaGap);
299 //if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
300
301 die->SetPreFilterEventPlane();
302}
303
304//______________________________________________________________________________________
305void InitHistograms(AliDielectron *die, Int_t cutDefinition)
306{
307 //
308 // Initialise the histograms
309 //
310
311 //Setup histogram Manager
312 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
313
314 //add histograms to event class
315 histos->AddClass("Event");
316
317
318 switch(cutDefinition) {
319 case kNoBins: /* */ break;
320 case kZvtxCent:
321 histos->UserHistogram("Event","","", 200,-10., 10., AliDielectronVarManager::kZvPrim);
322 histos->UserHistogram("Event","","", 100, 0.0, 100.0, AliDielectronVarManager::kCentrality);
323 break;
324 case kZvtxNcontrPEepTPCmag:
325 histos->UserHistogram("Event","","", 250, 0., 500., AliDielectronVarManager::kTPCmagH2);
326 case kZvtxNcontrPEepTPC:
327 histos->UserHistogram("Event","","", 16, TMath::Pi()/-2., TMath::Pi()/2., AliDielectronVarManager::kTPCrpH2);
328 case kZvtxNcontrPE:
329 case kZvtxNcontr:
330 histos->UserHistogram("Event","","", 200, 0., 4000., AliDielectronVarManager::kNVtxContrib);
331 case kZvtx:
1c96a71e 332 case kZvtxNoKF:
15f4cb18 333 histos->UserHistogram("Event","","", 200,-10., 10., AliDielectronVarManager::kZvPrim);
334 break;
ab5dc7f9 335 case kZvtxepTPC:
336 histos->UserHistogram("Event","","", 200,-10., 10., AliDielectronVarManager::kZvPrim);
337 histos->UserHistogram("Event","","", 250, 0., 500., AliDielectronVarManager::kTPCmagH2);
338 histos->UserHistogram("Event","","", 16, TMath::Pi()/-2., TMath::Pi()/2., AliDielectronVarManager::kTPCrpH2);
339 break;
15f4cb18 340 }
341
342 //Initialise histogram classes
343 histos->SetReservedWords("Pair");
344 //Pair classes inclusive mixed events
345 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(0)));
346 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(1)));
347 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(2)));
348 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(4)));
349
350 ///// add histograms to Pair classes /////
1c96a71e 351 histos->UserHistogram("Pair","","", 300,.0,300*0.04, 80,0.,80.,
352 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality); // 40MeV bins, 12GeV/c2
353 histos->UserHistogram("Pair","","", 300,.0,300*0.04, 20,0.,20.,
354 AliDielectronVarManager::kM, AliDielectronVarManager::kPt); // 40MeV bins, 12GeV/c2
355
15f4cb18 356 histos->UserHistogram("Pair","","", 100,-1.,1., AliDielectronVarManager::kY);
357 histos->UserHistogram("Pair","","", 400,0,20., AliDielectronVarManager::kPt);
ab5dc7f9 358 histos->UserHistogram("Pair","","", 125,0,0.04*125, AliDielectronVarManager::kM);
359
360 Int_t maxMixBins = die->GetMixingHandler()->GetNumberOfBins();
361 TObjArray *limits = new TObjArray();
362 limits->Add(AliDielectronHelper::MakeLinBinning(125, 0., 5.));
363 limits->Add(AliDielectronHelper::MakeLinBinning( 32, 0., 80.));
364 limits->Add(AliDielectronHelper::MakeLinBinning( 20, 0., 20.));
365 limits->Add(AliDielectronHelper::MakeLinBinning(maxMixBins, 0., maxMixBins));
366
367 UInt_t vars[4]={AliDielectronVarManager::kM,
368 AliDielectronVarManager::kCentrality,
369 AliDielectronVarManager::kPt,
370 AliDielectronVarManager::kMixingBin };
371 histos->UserSparse("Pair", 4, limits, vars);
372
15f4cb18 373
374
375 //legs from pair (fill SE)
376 // for (Int_t i=0; i<3; ++i){
377 // histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
378 // }
379 //Track classes
380 //to fill also track info from 2nd event loop until 2
381 //for (Int_t i=0; i<2; ++i){
382 // histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
383 //}
384
385
386 die->SetHistogramManager(histos);
387}
ab5dc7f9 388void InitHF(AliDielectron* die, Int_t cutDefinition)
389{
390 //
391 // Setup the HF arrays
392 //
393
394
395 AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
396 // if(hasMC) hf->SetStepForMCGenerated();
397 hf->SetPairTypes(AliDielectronHF::kAll);
398 hf->SetVariable(AliDielectronVarManager::kM, 125, 0.0, 0.04*125);
399 hf->AddCutVariable(AliDielectronVarManager::kCentrality, "0.,80.");
400 die->SetHistogramArray(hf);
401}
402