]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C
warning fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / ConfigJpsi_jb_PbPb.C
CommitLineData
8c06b662 1void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2void InitCF(AliDielectron* die, Int_t cutDefinition);
443a091c 3void InitHF(AliDielectron* die, Int_t cutDefinition);
8c06b662 4
5void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
6void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
7
8void AddMCSignals(AliDielectron *die);
9void SetEtaCorrection();
10TVectorD *GetRunNumbers();
11
8c06b662 12TString names=("TPC;TOF;TRD;rec;TOFTRD;TOFTRD2;ITScls;ITSamy;dca;chi2;Gam0;Gam01;Gam05;Gam10;Gam15;Gam20;EtaGap01;EtaGap02;EtaGap03;EtaGap04;EtaGap05;SubLS;SubRndm");
13enum { kTPC=0, kTOF, kTRD, krec, kTOFTRD, kTOFTRD2, kITScls, kITSamy, kDCA, kChi, kGam0, kGam01, kGam05, kGam10, kGam15, kGam20, kEtaGap01, kEtaGap02, kEtaGap03, kEtaGap04, kEtaGap05, kSubLS, kSubRndm };
14
15TObjArray *arrNames=names.Tokenize(";");
16const Int_t nDie=arrNames->GetEntries();
17
256b2ae5 18Bool_t isESD = kTRUE;
2d7910f3 19Bool_t hasMC = kFALSE;
20TString list = gSystem->Getenv("LIST");
6938ad55 21
256b2ae5 22
2d7910f3 23AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, TString prod="")
8c06b662 24{
25 //
26 // Setup the instance of AliDielectron
27 //
187de573 28
2d7910f3 29 // find mc or not?
30 if( list.IsNull()) list=prod;
31 if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
32 if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
8c06b662 33
34 //ESD handler?
256b2ae5 35 isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
187de573 36
8c06b662 37 // switch off some configurations
38 switch(cutDefinition) {
3e831a33 39 case kTPC:
187de573 40 //case kTOF:
3e831a33 41 case kTRD:
42 case kTOFTRD:
8c06b662 43 return 0x0;
44 break;
3e831a33 45 case krec:
8c06b662 46 if(!hasMC) return 0x0;
47 break;
187de573 48 //case kTOFTRD2:
8c06b662 49 case kITScls:
50 case kITSamy:
51 case kDCA:
187de573 52 case kChi:
8c06b662 53 return 0x0;
54 break;
187de573 55 // case kGam0:
56 // case kGam01:
57 // case kGam05:
58 // case kGam10:
59 // case kGam15:
8c06b662 60 // case kGam20:
187de573 61 case kEtaGap01:
62 case kEtaGap02:
63 case kEtaGap03:
64 case kEtaGap04:
65 case kEtaGap05:
8c06b662 66 case kSubLS:
67 case kSubRndm:
68 if( hasMC) return 0x0;
69 break;
70 }
187de573 71
8c06b662 72 // create the actual framework object
73 TString name=Form("%02d",cutDefinition);
74 if (cutDefinition<arrNames->GetEntriesFast()){
75 name=arrNames->At(cutDefinition)->GetName();
76 }
0094dcc0 77 AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("Track cuts: %s",name.Data()));
78 die->SetHasMC(hasMC);
79
256b2ae5 80 printf(" Add %s %s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?"MC":""),name.Data(),list.Data());
81
8c06b662 82 // Monte Carlo Signals and TRD efficiency tables
83 if(hasMC) {
84 AddMCSignals(die);
256b2ae5 85 printf(" Add %d MC signals \n",die->GetMCSignals()->GetEntriesFast());
187de573 86
8c06b662 87 // trd tables
256b2ae5 88 /* if (list.Contains("LHC11a") ) {
89 TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
90 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
91 if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
8c06b662 92
256b2ae5 93 if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
94 Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
187de573 95 else
256b2ae5 96 die->SetTRDcorrectionFilename(pidTab.Data());
97 }*/
8c06b662 98 }
187de573 99
8c06b662 100 // cut setup
101 SetupTrackCuts(die,cutDefinition);
102 SetupPairCuts(die,cutDefinition);
187de573 103
8c06b662 104 // histogram setup
3e831a33 105 if(cutDefinition == kTOF ||
106 cutDefinition == kTOFTRD ||
187de573 107 cutDefinition == kGam0 ||
108 cutDefinition == kTOFTRD2 ||
256b2ae5 109 cutDefinition >= kEtaGap01 ) {
8c06b662 110 InitHistograms(die,cutDefinition);
256b2ae5 111 printf(" Add %d types and %03d histos to the manager \n",die->GetHistogramList()->GetEntries(),
112 0/*die->GetHistoManager()->GetList()->GetEntries()*/);
187de573 113 }
256b2ae5 114
443a091c 115 // CF container setup, switched off
187de573 116 if(cutDefinition < kEtaGap01 ||
256b2ae5 117 cutDefinition == kSubRndm ) {
443a091c 118 if(0) InitCF(die,cutDefinition);
119 if(0) printf(" Add %d pair, %d leg vars, %p steps and %p bins to the container \n",
120 die->GetCFManagerPair()->GetNvarsPair(),die->GetCFManagerPair()->GetNvarsLeg(),
121 die->GetCFManagerPair()->GetContainer(), die->GetCFManagerPair()->GetContainer() );
256b2ae5 122 }
123
443a091c 124 // HF arrays setup
779267ed 125// if(cutDefinition < kEtaGap01 ) {
126// InitHF(die,cutDefinition);
127// }
443a091c 128
129
8c06b662 130 // bgrd estimators
131 if(!hasMC) {
256b2ae5 132 printf(" Activate bgrd estimators: ME and ROT \n");
187de573 133
8c06b662 134 // rotations
135 AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
136 rot->SetIterations(10);
137 rot->SetConeAnglePhi(TMath::Pi());
138 rot->SetStartAnglePhi(TMath::Pi());
139 die->SetTrackRotator(rot);
140 // mixing
141 AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
66c684fd 142 mix->AddVariable(AliDielectronVarManager::kZvPrim, 30,-10.,10.);
143 // mix->AddVariable(AliDielectronVarManager::kCentrality, 8, 0.,80.);
8c06b662 144 mix->SetMixType(AliDielectronMixingHandler::kAll);
66c684fd 145 mix->SetDepth(120);
8c06b662 146 die->SetMixingHandler(mix);
187de573 147
148
3e831a33 149 // TPC event plane configurations
150 Double_t gGap;
151 switch(cutDefinition) {
8c06b662 152 case kEtaGap01: gGap=0.1; break;
153 case kEtaGap02: gGap=0.2; break;
154 case kEtaGap03: gGap=0.3; break;
155 case kEtaGap04: gGap=0.4; break;
156 case kEtaGap05: gGap=0.5; break;
157 default: gGap=0.0;
3e831a33 158 }
187de573 159
8c06b662 160 AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
d41e5a99 161 poi->AddCut(AliDielectronVarManager::kM,2.92,3.20); // particles of interest, jpsi mass window
187de573 162 die->GetEventPlanePOIPreFilter().AddCuts(poi);
163
164 if(cutDefinition >= kEtaGap01 &&
8c06b662 165 cutDefinition < kSubLS ) {
166 AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
167 etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
168 die->GetEventPlanePreFilter().AddCuts(etaGap);
169 }
187de573 170
8c06b662 171 if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
172 die->SetPreFilterEventPlane();
173 }
187de573 174
8c06b662 175 // prefilter settings
187de573 176 if(cutDefinition == kTOFTRD2)
8c06b662 177 die->SetPreFilterAllSigns();
187de573 178 else
8c06b662 179 die->SetPreFilterUnlikeOnly();
187de573 180
8c06b662 181 // setup eta correction
256b2ae5 182 // if(isESD && list.Contains("LHC10h")) SetEtaCorrection();
187de573 183
d41e5a99 184 // VZERO calibration
185 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
186 if (!trainRoot.IsNull()) {
187 die->SetVZEROCalibrationFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroCalibrationLHC10h.root");
188 die->SetVZERORecenteringFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroRecenteringLHC10h.root");
189 }
187de573 190
8c06b662 191 return die;
192}
193
194//______________________________________________________________________________________
195void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
196{
197 //
198 // Setup the track cuts
199 //
9dcb603f 200
8c06b662 201 // Quality cuts
202 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
203 die->GetTrackFilter().AddCuts(cuts);
187de573 204
4a1bef93 205 // AOD track filter (needs to be first cut)
206 AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
207 trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqualSPDanyPIDele);
256b2ae5 208 // if(!isESD) cuts->AddCut(trkFilter);
4a1bef93 209
8c06b662 210 //Pt cut, should make execution a bit faster
d41e5a99 211 AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
3e831a33 212 pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30); //0.8
8c06b662 213 cuts->AddCut(pt);
187de573 214
d41e5a99 215 // track cuts ESD and AOD
8c06b662 216 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
217 varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
218 varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
219 varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
d28542ba 220 varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
8c06b662 221 varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
d41e5a99 222 varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
8c06b662 223 cuts->AddCut(varCuts);
187de573 224
8c06b662 225 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
3c59f53e 226 // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kAny);
227 // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kFirst);
779267ed 228 trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 15); // ITS-4 = 1+2+4+8
187de573 229 // trkCuts->SetMaxWaivedITSNcls(1);
8c06b662 230 trkCuts->SetRequireITSRefit(kTRUE);
231 trkCuts->SetRequireTPCRefit(kTRUE);
232 cuts->AddCut(trkCuts);
187de573 233
8c06b662 234 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
235 AliDielectronPID *pid = new AliDielectronPID("PID","PID");
187de573 236
8c06b662 237 ////////////////////////////////// DATA
238 if(!hasMC) {
187de573 239 pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,3.0,0.,0.,kTRUE);
8c06b662 240 pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
187de573 241
242 if(cutDefinition==kTRD || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
8c06b662 243 pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
244 AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
245 }
187de573 246
8c06b662 247 ////////////////////////////////// MC
248 if(hasMC) {
187de573 249
8c06b662 250 // electron
8c06b662 251 Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
252 Double_t resolution=0.0549;
253 Double_t BBpro[5] = {0};
254 Double_t BBpio[5] = {0};
187de573 255
8c06b662 256 for(Int_t icent=0; icent<8; icent++) {
187de573 257
8c06b662 258 switch (icent) {
259 case 0: // 0-10%
260 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
261 BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11; BBpio[3] = 5.27988; BBpio[4] = 4.3108;
262 break;
263 case 1: // 10-20%
264 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
265 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
266 break;
267 case 2: // 20-30%
268 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
269 BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11; BBpio[3] = 5.74458; BBpio[4] = 4.32459;
270 break;
271 case 3: // 30-40%
272 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
273 BBpio[0] = 0.026294; BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11; BBpio[3] = 5.28808; BBpio[4] = 4.31301;
274 break;
275 case 4: // 40-50%
276 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
277 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
278 break;
279 case 5: // 50-60%
280 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
281 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
282 break;
283 case 6: // 60-70%
284 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
285 BBpio[0] = 0.026302; BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11; BBpio[3] = 5.2465; BBpio[4] = 4.31094;
286 break;
287 case 7: // 70-80%
288 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
289 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
290 break;
291 case 8: // 80-90%
292 BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11; BBpro[3] = 2.07912; BBpro[4] = 5.99986;
293 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
294 break;
295 case 9: // 90-100%
296 BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11; BBpro[3] = 3.2431; BBpro[4] = 5.93388;
297 BBpio[0] = 0.027079; BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11; BBpio[3] = 9.61382; BBpio[4] = 5.99372;
298 break;
299 }
187de573 300
301
8c06b662 302 TF1 *ffPro=new TF1(Form("fBethe%d_c%d",AliPID::kProton,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaP,resolution, AliPID::ParticleMass(AliPID::kProton), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
187de573 303
8c06b662 304 TF1 *ffPio=new TF1(Form("fBethe%d_c%d",AliPID::kPion,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaPi,resolution, AliPID::ParticleMass(AliPID::kPion), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
187de573 305
8c06b662 306 //LHC11a10b
2d7910f3 307 if (list.Contains("LHC11a10b")) {
256b2ae5 308 printf(" LHC11a10b parameters\n");
8c06b662 309 ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
310 ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
187de573 311
8c06b662 312 // proton cut
313 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
314 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
315 // pion cut
316 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
317 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
318 }
319 }
187de573 320
8c06b662 321 // shifts for the nSigma electrons
322 TGraph* nSigmaCorrection = new TGraph();
323 // LHC11a10b
2d7910f3 324 if (list.Contains("LHC11a10b")) {
8c06b662 325 nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
326 nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
327 pid->SetCorrGraph(nSigmaCorrection);
328 }
187de573 329
8c06b662 330 } //hasMC
187de573 331
8c06b662 332 ////////////////////////////////// DATA + MC
d41e5a99 333 // pid cuts TPC + TOF & TRD
e0f6eeb2 334 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.0,4.);
187de573 335 if(cutDefinition==kTOF || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
8c06b662 336 pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
187de573 337
8c06b662 338 if(cutDefinition!=krec) cuts->AddCut(pid);
339 /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
187de573 340
341
8c06b662 342 // exclude conversion electrons selected by the tender
343 AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
344 noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
345 cuts->AddCut(noconv);
187de573 346
8c06b662 347}
348
349//______________________________________________________________________________________
350void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
351{
352 //
353 // Setup the pair cuts
354 //
187de573 355
8c06b662 356 // conversion rejection
357 Double_t gCut;
358 switch(cutDefinition) {
359 case kTPC: gCut=0.05; break;
360 case krec: gCut=0.05; break;
361 case kGam10: gCut=0.1; break;
362 case kGam15: gCut=0.15; break;
363 case kGam20: gCut=0.2; break;
364 case kGam05: gCut=0.05; break;
365 case kGam01: gCut=0.01; break;
366 case kGam0: gCut=0.0; break;
367 default: gCut=0.05; // default
368 }
187de573 369
d28542ba 370 AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
371// gammaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1, kTRUE);
372// gammaCuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25, kTRUE);
373// gammaCuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0, kTRUE);
374// gammaCuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05, kTRUE);
375// gammaCuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0, kTRUE);
376 gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut);
377 die->GetPairPreFilter().AddCuts(gammaCuts);
187de573 378
379
8c06b662 380 // rapidity selection
e0f6eeb2 381 // AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
382 // rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
383 // die->GetPairFilter().AddCuts(rapCut);
187de573 384
8c06b662 385}
386
8c06b662 387//______________________________________________________________________________________
388void InitHistograms(AliDielectron *die, Int_t cutDefinition)
389{
390 //
391 // Initialise the histograms
392 //
187de573 393
8c06b662 394 //Setup histogram Manager
395 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
187de573 396
8c06b662 397 //add histograms to event class
398 histos->AddClass("Event");
779267ed 399 histos->UserHistogram("Event","RunNumber","Events per run;run;events",
400 GetRunNumbers(),
401 AliDielectronVarManager::kRunNumber);
187de573 402 histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)", 300,-15.,15.,
8c06b662 403 AliDielectronVarManager::kZvPrim);
187de573 404 histos->UserHistogram("Event","Centrality","Centrality;centrality (%);events",
405 "0.,5.,10.,20.,40.,50.,60.,80.",
8c06b662 406 AliDielectronVarManager::kCentrality);
187de573 407 histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0;events", 500,0.,25000.,
8c06b662 408 AliDielectronVarManager::kMultV0);
409 histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
410 10,0.,100., 500,0.,25000.,
411 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
412 histos->UserProfile("Event","Cent_Nacc",
413 "accepted tracks;centrality (%)",
414 AliDielectronVarManager::kNacc,
415 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
416 AliDielectronVarManager::kCentrality);
417 histos->UserProfile("Event","Cent_NVtxContrib",
418 "number of vertex contributors;centrality (%)",
419 AliDielectronVarManager::kNVtxContrib,
420 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
421 AliDielectronVarManager::kCentrality);
187de573 422
8c06b662 423 ////// FLOW //////
3e831a33 424 if(cutDefinition == kTOFTRD || cutDefinition==kTOF) {
8c06b662 425 histos->UserHistogram("Event","TPCxH2","TPC Qx component;TPCxH2",
426 100,-1500.,1500.,
427 AliDielectronVarManager::kTPCxH2);
428 histos->UserHistogram("Event","TPCyH2","TPC Qy component;TPCyH2",
429 100,-1500.,1500.,
430 AliDielectronVarManager::kTPCyH2);
431 histos->UserHistogram("Event","TPCrpH2","TPC reaction plane; #Psi^{TPC}",
432 100,-2.,2.,
433 AliDielectronVarManager::kTPCrpH2);
434 histos->UserHistogram("Event","TPCsub1xH2","TPC Qx component sub1;TPCsub1xH2",
435 100,-1500.,1500.,
436 AliDielectronVarManager::kTPCsub1xH2);
437 histos->UserHistogram("Event","TPCsub1yH2","TPC Qy component sub1;TPCsub1yH2",
438 100,-1500.,1500.,
439 AliDielectronVarManager::kTPCsub1yH2);
440 histos->UserHistogram("Event","TPCsub1rpH2","TPC reaction plane sub1; #Psi^{sub1}",
441 100,-2.,2.,
442 AliDielectronVarManager::kTPCsub1rpH2);
443 histos->UserHistogram("Event","TPCsub2xH2","TPC Qx component sub2;TPCsub2xH2",
444 100,-1500.,1500.,
445 AliDielectronVarManager::kTPCsub2xH2);
446 histos->UserHistogram("Event","TPCsub2yH2","TPC Qy component sub2;TPCsub2yH2",
447 100,-1500.,1500.,
448 AliDielectronVarManager::kTPCsub2yH2);
449 histos->UserHistogram("Event","TPCsub2rpH2","TPC reaction plane sub2; #Psi^{sub2}",
450 100,-2.,2.,
451 AliDielectronVarManager::kTPCsub2rpH2);
452 histos->UserHistogram("Event","TPCsub12DiffH2","TPC reaction plane diff; cos(2(#Psi^{sub1}-#Psi^{sub2}))",
453 100,-1.,1.,
454 AliDielectronVarManager::kTPCsub12DiffH2);
455 /* // uncorrected eventplane
456 histos->UserHistogram("Event","TPCxH2uc","TPC Qx component;TPCxH2uc",
457 100,-1500.,1500.,
458 AliDielectronVarManager::kTPCxH2uc);
459 histos->UserHistogram("Event","TPCyH2uc","TPC Qy component;TPCyH2uc",
460 100,-1500.,1500.,
461 AliDielectronVarManager::kTPCyH2uc);
462 histos->UserHistogram("Event","TPCrpH2uc","TPC reaction plane;TPCrpH2uc",
463 100,-2.,2.,
464 AliDielectronVarManager::kTPCrpH2uc);
465 histos->UserHistogram("Event","TPCsub1xH2uc","TPC Qx component sub1;TPCsub1xH2uc",
466 100,-1500.,1500.,
467 AliDielectronVarManager::kTPCsub1xH2uc);
468 histos->UserHistogram("Event","TPCsub1yH2uc","TPC Qy component sub1;TPCsub1yH2uc",
469 100,-1500.,1500.,
470 AliDielectronVarManager::kTPCsub1yH2uc);
471 histos->UserHistogram("Event","TPCsub1rpH2uc","TPC reaction plane sub1;TPCsub1rpH2uc",
472 100,-2.,2.,
473 AliDielectronVarManager::kTPCsub1rpH2uc);
474 histos->UserHistogram("Event","TPCsub2xH2uc","TPC Qx component sub2;TPCsub2xH2uc",
475 100,-1500.,1500.,
476 AliDielectronVarManager::kTPCsub2xH2uc);
477 histos->UserHistogram("Event","TPCsub2yH2uc","TPC Qy component sub2;TPCsub2yH2uc",
478 100,-1500.,1500.,
479 AliDielectronVarManager::kTPCsub2yH2uc);
480 histos->UserHistogram("Event","TPCsub2rpH2uc","TPC reaction plane sub2;TPCsub2rpH2uc",
481 100,-2.,2.,
482 AliDielectronVarManager::kTPCsub2rpH2uc);
483 histos->UserHistogram("Event","TPCsub12DiffH2uc","TPC reaction plane difference;TPCsub12DiffH2uc",
484 100,-1.,1.,
485 AliDielectronVarManager::kTPCsub12DiffH2uc);
486 */
487 histos->UserHistogram("Event","V0ACrpH2","VZERO-AC RP; #Psi_{2}^{V0AC} (rad.)",
488 100,-2.0,2.0,
489 AliDielectronVarManager::kV0ACrpH2);
490 histos->UserHistogram("Event","V0ArpH2","VZERO-A RP; #Psi_{2}^{V0A} (rad.)",
491 100,-2.0,2.0,
492 AliDielectronVarManager::kV0ArpH2);
493 histos->UserHistogram("Event","V0CrpH2","VZERO-C RP; #Psi_{2}^{V0C} (rad.)",
494 100,-2.0,2.0,
495 AliDielectronVarManager::kV0CrpH2);
187de573 496
8c06b662 497 histos->UserHistogram("Event","V0ATPCDiffH2","VZERO-A TPC diff; cos(2(#Psi^{V0A}-#Psi^{TPC}))",
498 300,-1.0,1.0,
499 AliDielectronVarManager::kV0ATPCDiffH2);
500 histos->UserHistogram("Event","V0CTPCDiffH2","VZERO-C TPC diff; cos(2(#Psi^{V0C}-#Psi^{TPC}))",
501 300,-1.0,1.0,
502 AliDielectronVarManager::kV0CTPCDiffH2);
503 histos->UserHistogram("Event","V0AV0CDiffH2","VZERO-A VZERO-C diff; cos(2(#Psi^{V0A}-#Psi^{V0C}))",
504 300,-1.0,1.0,
505 AliDielectronVarManager::kV0AV0CDiffH2);
187de573 506
8c06b662 507 // centrality dependent event plane histograms
508 histos->UserHistogram("Event","Cent_TPCrpH2","TPC RP;centrality (%);#Psi^{TPC} (rad.)",
509 10,0.,100.,100,-2.,2.,
510 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2);
511 histos->UserHistogram("Event","Cent_TPCsub1rpH2","TPC-1 RP;centrality (%);#Psi^{sub1} (rad.)",
512 10,0.,100.,100,-2.,2.,
513 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2);
514 histos->UserHistogram("Event","Cent_TPCsub2rpH2","TPC-2 RP;centrality (%);#Psi^{sub2} (rad.)",
515 10,0.,100.,100,-2.,2.,
516 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2);
187de573 517
8c06b662 518 histos->UserHistogram("Event","Cent_V0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{V0AC} (rad.)",
519 10,0.,100.,100,-2.0,2.0,
520 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ACrpH2);
521 histos->UserHistogram("Event","Cent_V0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A} (rad.)",
522 10,0.,100.,100,-2.0,2.0,
523 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ArpH2);
524 histos->UserHistogram("Event","Cent_V0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C} (rad.)",
525 10,0.,100.,100,-2.0,2.0,
526 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CrpH2);
527 // for resolution calculation
528 histos->UserHistogram("Event","Cent_V0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{TPC}))",
529 10,0.,100.,300,-1.0,1.0,
530 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ATPCDiffH2);
531 histos->UserHistogram("Event","Cent_V0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{V0C}-#Psi^{TPC}))",
532 10,0.,100.,300,-1.0,1.0,
533 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CTPCDiffH2);
534 histos->UserHistogram("Event","Cent_V0AV0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{V0C}))",
535 10,0.,100.,300,-1.0,1.0,
536 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0AV0CDiffH2);
537 histos->UserHistogram("Event","Cent_TPCsub12DiffH2","TPC-sub1 TPC-sub2 diff;centrality (%);cos(2(#Psi^{sub1}-#Psi^{sub2}))",
538 10,0.,100.,300,-1.0,1.0,
539 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2);
540 // detector effects
541 histos->UserHistogram("Event","Cent_TPCsub12DiffH2Sin","TPC-sub1 TPC-sub2 diff;centrality (%);sin(2(#Psi^{sub1}-#Psi^{sub2}))",
542 10,0.,100.,300,-1.0,1.0,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2Sin);
187de573 543
544 // EPSelectionTask V0 information directly from the ESDs
8c06b662 545 histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{v0AC} (rad.)",
546 10,0.,100.,100,-2.0,2.0,
547 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
548 histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{v0A} (rad.)",
549 10,0.,100.,100,-2.0,2.0,
550 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
551 histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{v0C} (rad.)",
552 10,0.,100.,100,-2.0,2.0,
553 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
554 // for resolution calculation
555 histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{TPC}))",
556 10,0.,100.,300,-1.0,1.0,
557 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2);
558 histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{v0C}-#Psi^{TPC}))",
559 10,0.,100.,300,-1.0,1.0,
560 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2);
561 histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{v0C}))",
562 10,0.,100.,300,-1.0,1.0,
563 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2);
187de573 564
8c06b662 565 }
187de573 566
8c06b662 567 ////// MONTE CARLO //////
568 /*
187de573 569 if(cutDefinition == kTOFTRD && hasMC) {
8c06b662 570 histos->AddClass("MCEvent");
571 histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
187de573 572 10,0.,100., 21,-0.5,20.5,
573 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
574 }
8c06b662 575 */
187de573 576
8c06b662 577 //Initialise histogram classes
578 histos->SetReservedWords("Track;Pair");
187de573 579
8c06b662 580 //Pair classes
581 // to fill also mixed event histograms loop until 10
582 for (Int_t i=0; i<3; ++i){
583 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
584 }
187de573 585
8c06b662 586 if(cutDefinition < kEtaGap01) {
187de573 587
8c06b662 588 //legs from pair
589 for (Int_t i=0; i<3; ++i){
590 histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
591 }
187de573 592
8c06b662 593 //Track classes
594 //to fill also track info from 2nd event loop until 2
595 for (Int_t i=0; i<2; ++i){
596 histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
597 }
8c06b662 598 //track rotation
599 // histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
600 // histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
187de573 601
602 ///// add histograms to Track classes /////
603
604 // Vertex
605 histos->UserHistogram("Track","ImpactParXY",";dXY (cm);#tracks", 500,-1.,1.,
8c06b662 606 AliDielectronVarManager::kImpactParXY);
187de573 607 histos->UserHistogram("Track","ImpactParZ",";dZ (cm);#tracks", 600,-3.,3.,
8c06b662 608 AliDielectronVarManager::kImpactParZ);
187de573 609
610 // Kinematics
611 histos->UserHistogram("Track","Pt",";p_{T} (GeV/c);#tracks", 400,0,20.,
612 AliDielectronVarManager::kPt);
613 histos->UserHistogram("Track","Eta_Phi",";#eta;#varphi;#tracks", 200,-1,1,200,0,6.285,
8c06b662 614 AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
187de573 615
616 // TPC
617 histos->UserHistogram("Track","TPCnCls",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
8c06b662 618 AliDielectronVarManager::kNclsTPC);
187de573 619 histos->UserHistogram("Track","TPCsignalN",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
620 AliDielectronVarManager::kTPCsignalN);
621 histos->UserHistogram("Track","NclFr",";N_{max.cls}^{TPC};#tracks", 160,-0.5,159.5,
8c06b662 622 AliDielectronVarManager::kNFclsTPCr);
187de573 623 histos->UserHistogram("Track","Ncl_NclFr",";N_{cls}^{TPC};N_{max.cls}^{TPC};#tracks",
8c06b662 624 160,-0.5,159.5,160,-0.5,159.5,
625 AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
187de573 626
627 // TRD
628 histos->UserHistogram("Track","NtrklTRD",";N_{trkl}^{TRD};#tracks",
8c06b662 629 8,-0.5,7.5,
630 AliDielectronVarManager::kTRDpidQuality);
187de573 631
632 // PID
633 histos->UserHistogram("Track","dEdx_P",";p (GeV/c);TPC signal (arb units);#tracks",
634 400,0.2,20.,200,0.,200.,
635 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
636 histos->UserHistogram("Track","TPCnSigmaEle_P","p (GeV/c);n#sigma_{ele}^{TPC};#tracks",
637 400,0.2,20.,200,-10.,10.,
638 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
779267ed 639 histos->UserHistogram("Track","TOFbeta_P",";p (GeV/c);#beta;#tracks",
640 250,0.0,5.0,300,0.,1.2,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta,kTRUE);
187de573 641
642 ///// add histograms to Pair classes /////
643 histos->UserHistogram("Pair","InvMass",";m_{ee} (GeV/c^{2});#pairs",
d28542ba 644 300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
187de573 645 histos->UserHistogram("Pair","Rapidity",";y;#pairs",
d28542ba 646 100,-1.,1., AliDielectronVarManager::kY);
187de573 647 histos->UserHistogram("Pair","OpeningAngle","opening angle (rad.);#pairs",
d28542ba 648 100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
187de573 649 histos->UserHistogram("Pair","Chi2NDF",";#chi^{2}/NDF;#pairs",
d28542ba 650 100,0.,20, AliDielectronVarManager::kChi2NDF);
187de573 651 histos->UserHistogram("Pair","PsiPair",";#psi;#pairs",
d28542ba 652 100,0.,3.15, AliDielectronVarManager::kPsiPair);
187de573 653 histos->UserHistogram("Pair","R",";r (cm)",
d28542ba 654 200,0.,100., AliDielectronVarManager::kR);
655 histos->UserHistogram("Pair","LegDist",";dca (cm)",
656 50,0.,5., AliDielectronVarManager::kLegDist);
657 histos->UserHistogram("Pair","LegDistXY",";dca_{xy} (cm)",
658 50,0.,5., AliDielectronVarManager::kLegDistXY);
187de573 659
8c06b662 660 }
187de573 661
8c06b662 662 //// FLOW results use tprofiles
187de573 663 if(cutDefinition == kTOFTRD || cutDefinition == kTOF || cutDefinition >= kEtaGap01) {
664
8c06b662 665 histos->UserProfile("Pair","M_Cent_Pt_V0ACrpH2FlowV2",
666 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
667 AliDielectronVarManager::kV0ACrpH2FlowV2,
668 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
669 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
187de573 670
8c06b662 671 histos->UserProfile("Pair","M_Cent_Pt_V0ArpH2FlowV2",
672 "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
673 AliDielectronVarManager::kV0ArpH2FlowV2,
674 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
675 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
187de573 676
8c06b662 677 histos->UserProfile("Pair","M_Cent_Pt_V0CrpH2FlowV2",
678 "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
679 AliDielectronVarManager::kV0CrpH2FlowV2,
680 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
681 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
d28542ba 682
683 histos->UserProfile("Pair","M_Cent_Pt_v0ACrpH2FlowV2",
684 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
685 AliDielectronVarManager::kv0ACrpH2FlowV2,
686 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
687 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
187de573 688
d28542ba 689 histos->UserProfile("Pair","M_Cent_Pt_v0ArpH2FlowV2",
690 "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
691 AliDielectronVarManager::kv0ArpH2FlowV2,
692 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
693 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
187de573 694
d28542ba 695 histos->UserProfile("Pair","M_Cent_Pt_v0CrpH2FlowV2",
696 "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
697 AliDielectronVarManager::kv0CrpH2FlowV2,
698 125,0.,125*.04, 10, 0.,100., 200,0.,100.,
699 AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
187de573 700
701 // 1D control histos
702 /*
8c06b662 703 histos->UserProfile("Pair","M_V0ACrpH2FlowV2",
704 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
705 AliDielectronVarManager::kV0ACrpH2FlowV2,
706 125,0.,125*.04,
707 AliDielectronVarManager::kM);
187de573 708
8c06b662 709 histos->UserProfile("Pair","M_V0ArpH2FlowV2",
710 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
711 AliDielectronVarManager::kV0ArpH2FlowV2,
712 125,0.,125*.04,
713 AliDielectronVarManager::kM);
187de573 714
8c06b662 715 histos->UserProfile("Pair","M_V0CrpH2FlowV2",
716 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
717 AliDielectronVarManager::kV0CrpH2FlowV2,
718 125,0.,125*.04,
719 AliDielectronVarManager::kM);
187de573 720 */
721 }
722
8c06b662 723 die->SetHistogramManager(histos);
724}
725
443a091c 726void InitHF(AliDielectron* die, Int_t cutDefinition)
727{
728 //
4d7704c5 729 // Setup the HF arrays
443a091c 730 //
443a091c 731
732 AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
187de573 733 // if(hasMC) hf->SetStepForMCGenerated();
443a091c 734 hf->SetPairTypes(AliDielectronHF::kAll);
735 hf->SetVariable(AliDielectronVarManager::kM, 125, 0.0, 0.04*125);
187de573 736
3e831a33 737 hf->AddCutVariable(AliDielectronVarManager::kCentrality, "0.,5.,10.,20.,40.,50.,60.,80." );
738 hf->AddCutVariable(AliDielectronVarManager::kPt, "0.,2.5,5.,100." );
66c684fd 739 hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, 8,-1.*TMath::Pi(),TMath::Pi());
779267ed 740 // hf->AddCutVariable(AliDielectronVarManager::kY, 1, -0.9, 0.9 );
187de573 741 // hf->AddCutVariable(AliDielectronVarManager::kPt, "0.8, 1.0, 1.1, 1.2, 1.5, 100.0", kTRUE, AliDielectronHF::kBinToMax);
779267ed 742 // hf->AddCutVariable(AliDielectronVarManager::kNclsTPC, "70,90,100,120,160", kTRUE, AliDielectronHF::kBinToMax);
743 // hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaEle,"-4,-3,-2.5,-2,2,2.5,3,4", kTRUE, AliDielectronHF::kSymBin);
744 //hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100.", kTRUE, AliDielectronHF::kBinToMax);
745 //hf->AddCutVariable(AliDielectronVarManager::kITSLayerFirstCls,4,0.,4., kFALSE, kTRUE, AliDielectronHF::kBinFromMin);
187de573 746 //hf->AddCutVariable(AliDielectronVarManager::kNclsITS, 5,2.,7., kFALSE, kTRUE, AliDielectronHF::kBinToMax);
747 //hf->AddCutVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers());
4d7704c5 748
443a091c 749 die->SetHistogramArray(hf);
750}
8c06b662 751
752void InitCF(AliDielectron* die, Int_t cutDefinition)
753{
754 //
755 // Setup the CF Manager if needed
756 //
3c59f53e 757
187de573 758 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
3c59f53e 759
760 // event variables
761 cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
762 // if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
763 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
764 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
765 if(hasMC) cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() );
766
8c06b662 767 // pair variables
3c59f53e 768 // cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
8c06b662 769 cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
3c59f53e 770 cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
771 cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
772 if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
773 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
774
e0f6eeb2 775 // flow variables
776 cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi());
777 cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2,4,-1.*TMath::Pi(),TMath::Pi());
d28542ba 778
3c59f53e 779 // leg variables
780 cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
781 if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
e0f6eeb2 782 // cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
3c59f53e 783 // cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);
784 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
785 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
786 cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
787 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
788 // cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
789 // cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
790 // if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
e0f6eeb2 791
3c59f53e 792 // mc steps
8c06b662 793 if(hasMC) {
f5daa827 794 if(cutDefinition==kTOFTRD) cf->SetStepForMCtruth();
e0f6eeb2 795 cf->SetStepsForMCtruthOnly();
796 // cf->SetStepsForBackground();
8c06b662 797 }
e0f6eeb2 798
8c06b662 799 die->SetCFManagerPair(cf);
800}
801
802void AddMCSignals(AliDielectron *die){
803 //Do we have an MC handler?
8c06b662 804 if (!hasMC) return;
805
806 AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
807 inclusiveJpsi->SetLegPDGs(11,-11);
808 inclusiveJpsi->SetMotherPDGs(443,443);
809 inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
810 inclusiveJpsi->SetFillPureMCStep(kTRUE);
811 inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
812 inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
813 die->AddSignalMC(inclusiveJpsi);
814
815 AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays)
816 promptJpsi->SetLegPDGs(11,-11);
817 promptJpsi->SetMotherPDGs(443,443);
818 promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
819 promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
820 promptJpsi->SetFillPureMCStep(kTRUE);
821 promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
822 promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
823 promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
824 promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
825 die->AddSignalMC(promptJpsi);
826
827 AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
828 beautyJpsi->SetLegPDGs(11,-11);
829 beautyJpsi->SetMotherPDGs(443,443);
830 beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
831 beautyJpsi->SetGrandMotherPDGs(500,500);
832 beautyJpsi->SetFillPureMCStep(kTRUE);
833 beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
834 beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
835 beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
836 die->AddSignalMC(beautyJpsi);
837
838 AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi
839 directJpsi->SetLegPDGs(11,-11);
840 directJpsi->SetMotherPDGs(443,443);
841 directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
842 directJpsi->SetFillPureMCStep(kTRUE);
843 directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
844 directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
845 directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
846 directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
847 die->AddSignalMC(directJpsi);
d28542ba 848
849 AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs"); // pairs made from conversion (may be also from 2 different conversions)
850 conversionElePairs->SetLegPDGs(11,-11);
851 conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
852 conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
853 conversionElePairs->SetMotherPDGs(22,22);
187de573 854 // die->AddSignalMC(conversionElePairs);
8c06b662 855}
856
857void SetEtaCorrection()
858{
859 if (AliDielectronPID::GetEtaCorrFunction()) return;
860
8c06b662 861 TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
862 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
d41e5a99 863 if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
8c06b662 864 if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
865 Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
866 return;
867 }
868
869 TFile f(etaMap.Data());
870 if (!f.IsOpen()) return;
871 TList *keys=f.GetListOfKeys();
872
873 for (Int_t i=0; i<keys->GetEntries(); ++i){
874 TString kName=keys->At(i)->GetName();
875 TPRegexp reg(kName);
876 if (reg.MatchB(list)){
256b2ae5 877 printf(" Using Eta Correction Function: %s\n",kName.Data());
8c06b662 878 AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
879 }
880 }
881}
882
883TVectorD *GetRunNumbers() {
d28542ba 884
885 Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
886 139510, 139507, 139505, 139503, 139465, 139438, 139437, 139360, 139329, 139328, 139314, 139310, 139309, 139173, 139107, 139105, 139038, 139037, 139036, 139029, 139028, 138872, 138871, 138870, 138837, 138732, 138730, 138666, 138662, 138653, 138652, 138638, 138624, 138621, 138583, 138582, 138579, 138578, 138534, 138469, 138442, 138439, 138438, 138396, 138364, 138275, 138225, 138201, 138197, 138192, 138190, 137848, 137844, 137752, 137751, 137724, 137722, 137718, 137704, 137693, 137692, 137691, 137686, 137685, 137639, 137638, 137608, 137595, 137549, 137546, 137544, 137541, 137539, 137531, 137530, 137443, 137441, 137440, 137439, 137434, 137432, 137431, 137430, 137366, 137243, 137236, 137235, 137232, 137231, 137230, 137162, 137161, 137135
8c06b662 887 };
888
d28542ba 889 Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
256b2ae5 890 170593, 170572, 170388, 170387, 170315, 170313, 170312, 170311, 170309, 170308, 170306, 170270, 170269, 170268, 170230, 170228, 170207, 170204, 170203, 170193, 170163, 170159, 170155, 170091, 170089, 170088, 170085, 170084, 170083, 170081, 170040, 170027, 169965, 169923, 169859, 169858, 169855, 169846, 169838, 169837, 169835, 169591, 169590, 169588, 169587, 169586, 169557, 169555, 169554, 169553, 169550, 169515, 169512, 169506, 169504, 169498, 169475, 169420, 169419, 169418, 169417, 169415, 169411, 169238, 169167, 169160, 169156, 169148, 169145, 169144, 169138, 169099, 169094, 169091, 169045, 169044, 169040, 169035, 168992, 168988, 168826, 168777, 168514, 168512, 168511, 168467, 168464, 168460, 168458, 168362, 168361, 168342, 168341, 168325, 168322, 168311, 168310, 168115, 168108, 168107, 168105, 168076, 168069, 167988, 167987, 167985, 167920, 167915
d28542ba 891 };
892
893 // selection via environement variable (works only for gsi trains)
2d7910f3 894
8c06b662 895
2d7910f3 896 if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
d28542ba 897 Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
898 TVectorD *vec = new TVectorD(size+1);
899
900 (*vec)[size] = runLHC10h[0] + 1;
901 for (int i = 0; i < size; i++) {
902 (*vec)[i] = runLHC10h[size-1-i];
903 }
904 // vec->Print("");
905 return vec;
906 }
8c06b662 907
2d7910f3 908 if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
d28542ba 909
910 Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
911 TVectorD *vec = new TVectorD(size+1);
912
913 (*vec)[size] = runLHC11h[0] + 1;
914 for (int i = 0; i < size; i++) {
915 (*vec)[i] = runLHC11h[size-1-i];
916 }
917 // vec->Print("");
918 return vec;
919 }
256b2ae5 920
921 TVectorD *vec = new TVectorD(2);
922 (*vec)[0] = 0;
923 (*vec)[0] = 1;
924 return vec;
d28542ba 925
8c06b662 926}