1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void InitCF(AliDielectron* die, Int_t cutDefinition);
4 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
5 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
7 void AddMCSignals(AliDielectron *die);
8 void SetEtaCorrection();
9 TVectorD *GetRunNumbers();
11 TString names=("TPC;TOF;TRD;rec;TOFTRD;TOFTRD2;ITScls;ITSamy;dca;chi2;Gam0;Gam01;Gam05;Gam10;Gam15;Gam20;EtaGap01;EtaGap02;EtaGap03;EtaGap04;EtaGap05;SubLS;SubRndm");
12 enum { 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 TObjArray *arrNames=names.Tokenize(";");
15 const Int_t nDie=arrNames->GetEntries();
18 Bool_t hasMC = kFALSE;
19 TString list = gSystem->Getenv("LIST");
22 AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, TString prod="")
25 // Setup the instance of AliDielectron
29 if( list.IsNull()) list=prod;
30 if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
31 if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
34 isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
36 // switch off some configurations
37 switch(cutDefinition) {
45 if(!hasMC) return 0x0;
67 if( hasMC) return 0x0;
71 // create the actual framework object
72 TString name=Form("%02d",cutDefinition);
73 if (cutDefinition<arrNames->GetEntriesFast()){
74 name=arrNames->At(cutDefinition)->GetName();
76 AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("Track cuts: %s",name.Data()));
79 printf(" Add %s %s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?"MC":""),name.Data(),list.Data());
81 // Monte Carlo Signals and TRD efficiency tables
84 printf(" Add %d MC signals \n",die->GetMCSignals()->GetEntriesFast());
87 /* if (list.Contains("LHC11a") ) {
88 TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
89 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
90 if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
92 if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
93 Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
95 die->SetTRDcorrectionFilename(pidTab.Data());
100 SetupTrackCuts(die,cutDefinition);
101 SetupPairCuts(die,cutDefinition);
104 if(cutDefinition == kTOFTRD ||
105 cutDefinition == kGam0 ||
106 cutDefinition == kTOFTRD2 ||
107 cutDefinition >= kEtaGap01 ) {
108 InitHistograms(die,cutDefinition);
109 printf(" Add %d types and %03d histos to the manager \n",die->GetHistogramList()->GetEntries(),
110 0/*die->GetHistoManager()->GetList()->GetEntries()*/);
113 // CF container setup
114 if(cutDefinition < kEtaGap01 ||
115 cutDefinition == kSubRndm ) {
116 InitCF(die,cutDefinition);
117 printf(" Add %d pair, %d leg vars, %p steps and %p bins to the container \n",
118 die->GetCFManagerPair()->GetNvarsPair(),die->GetCFManagerPair()->GetNvarsLeg(),
119 die->GetCFManagerPair()->GetContainer(), die->GetCFManagerPair()->GetContainer() );
124 if(cutDefinition == kTOFTRD) {
125 printf(" Activate bgrd estimators: ME and ROT \n");
128 AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
129 rot->SetIterations(10);
130 rot->SetConeAnglePhi(TMath::Pi());
131 rot->SetStartAnglePhi(TMath::Pi());
132 die->SetTrackRotator(rot);
134 AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
135 mix->AddVariable(AliDielectronVarManager::kZvPrim,10,-10.,10.);
136 mix->AddVariable(AliDielectronVarManager::kCentrality,16,0.,80.);
137 mix->SetMixType(AliDielectronMixingHandler::kAll);
139 die->SetMixingHandler(mix);
143 // TPC event plane configurations
145 switch(cutDefinition) {
146 case kEtaGap01: gGap=0.1; break;
147 case kEtaGap02: gGap=0.2; break;
148 case kEtaGap03: gGap=0.3; break;
149 case kEtaGap04: gGap=0.4; break;
150 case kEtaGap05: gGap=0.5; break;
154 AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
155 poi->AddCut(AliDielectronVarManager::kM,2.92,3.20); // particles of interest, jpsi mass window
156 die->GetEventPlanePOIPreFilter().AddCuts(poi);
158 if(cutDefinition >= kEtaGap01 &&
159 cutDefinition < kSubLS ) {
160 AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
161 etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
162 die->GetEventPlanePreFilter().AddCuts(etaGap);
165 if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
166 die->SetPreFilterEventPlane();
169 // prefilter settings
170 if(cutDefinition == kTOFTRD2)
171 die->SetPreFilterAllSigns();
173 die->SetPreFilterUnlikeOnly();
175 // setup eta correction
176 // if(isESD && list.Contains("LHC10h")) SetEtaCorrection();
179 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
180 if (!trainRoot.IsNull()) {
181 die->SetVZEROCalibrationFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroCalibrationLHC10h.root");
182 die->SetVZERORecenteringFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroRecenteringLHC10h.root");
188 //______________________________________________________________________________________
189 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
192 // Setup the track cuts
196 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
197 die->GetTrackFilter().AddCuts(cuts);
199 // AOD track filter (needs to be first cut)
200 AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
201 trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqualSPDanyPIDele);
202 // if(!isESD) cuts->AddCut(trkFilter);
204 //Pt cut, should make execution a bit faster
205 AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
206 pt->AddCut(AliDielectronVarManager::kPt,0.8,1e30);
209 // track cuts ESD and AOD
210 AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
211 varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
212 varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
213 varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
214 varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
215 varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
216 varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
217 cuts->AddCut(varCuts);
219 AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
220 // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kAny);
221 // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kFirst);
222 trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 7); // ITS-3 = 1+2+4
223 trkCuts->SetMaxWaivedITSNcls(1);
224 trkCuts->SetRequireITSRefit(kTRUE);
225 trkCuts->SetRequireTPCRefit(kTRUE);
226 cuts->AddCut(trkCuts);
228 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
229 AliDielectronPID *pid = new AliDielectronPID("PID","PID");
231 ////////////////////////////////// DATA
233 pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,2.5,0.,0.,kTRUE);
234 pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
236 if(cutDefinition==kTRD || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
237 pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
238 AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
241 ////////////////////////////////// MC
245 Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
246 Double_t resolution=0.0549;
247 Double_t BBpro[5] = {0};
248 Double_t BBpio[5] = {0};
250 for(Int_t icent=0; icent<8; icent++) {
254 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
255 BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11; BBpio[3] = 5.27988; BBpio[4] = 4.3108;
258 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
259 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
262 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
263 BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11; BBpio[3] = 5.74458; BBpio[4] = 4.32459;
266 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
267 BBpio[0] = 0.026294; BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11; BBpio[3] = 5.28808; BBpio[4] = 4.31301;
270 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
271 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
274 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
275 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
278 BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
279 BBpio[0] = 0.026302; BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11; BBpio[3] = 5.2465; BBpio[4] = 4.31094;
282 BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
283 BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
286 BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11; BBpro[3] = 2.07912; BBpro[4] = 5.99986;
287 BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
290 BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11; BBpro[3] = 3.2431; BBpro[4] = 5.93388;
291 BBpio[0] = 0.027079; BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11; BBpio[3] = 9.61382; BBpio[4] = 5.99372;
296 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.);
298 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.);
301 if (list.Contains("LHC11a10b")) {
302 printf(" LHC11a10b parameters\n");
303 ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
304 ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
307 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
308 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
310 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
311 kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
315 // shifts for the nSigma electrons
316 TGraph* nSigmaCorrection = new TGraph();
318 if (list.Contains("LHC11a10b")) {
319 nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
320 nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
321 pid->SetCorrGraph(nSigmaCorrection);
326 ////////////////////////////////// DATA + MC
327 // pid cuts TPC + TOF & TRD
328 pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.5,3.);
329 if(cutDefinition==kTOF || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
330 pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
332 if(cutDefinition!=krec) cuts->AddCut(pid);
333 /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
336 // exclude conversion electrons selected by the tender
337 AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
338 noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
339 cuts->AddCut(noconv);
343 //______________________________________________________________________________________
344 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
347 // Setup the pair cuts
350 // conversion rejection
352 switch(cutDefinition) {
353 case kTPC: gCut=0.05; break;
354 case krec: gCut=0.05; break;
355 case kGam10: gCut=0.1; break;
356 case kGam15: gCut=0.15; break;
357 case kGam20: gCut=0.2; break;
358 case kGam05: gCut=0.05; break;
359 case kGam01: gCut=0.01; break;
360 case kGam0: gCut=0.0; break;
361 default: gCut=0.05; // default
364 AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
365 // gammaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1, kTRUE);
366 // gammaCuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25, kTRUE);
367 // gammaCuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0, kTRUE);
368 // gammaCuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05, kTRUE);
369 // gammaCuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0, kTRUE);
370 gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut);
371 die->GetPairPreFilter().AddCuts(gammaCuts);
374 // rapidity selection
375 AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
376 rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
377 die->GetPairFilter().AddCuts(rapCut);
381 //______________________________________________________________________________________
382 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
385 // Initialise the histograms
388 //Setup histogram Manager
389 AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
392 //add histograms to event class
393 histos->AddClass("Event");
394 histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)",
396 AliDielectronVarManager::kZvPrim);
397 histos->UserHistogram("Event","Centrality","Centrality;centrality (%)",
398 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
399 AliDielectronVarManager::kCentrality);
400 histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0",
402 AliDielectronVarManager::kMultV0);
403 histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
404 10,0.,100., 500,0.,25000.,
405 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
406 histos->UserProfile("Event","Cent_Nacc",
407 "accepted tracks;centrality (%)",
408 AliDielectronVarManager::kNacc,
409 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
410 AliDielectronVarManager::kCentrality);
411 histos->UserProfile("Event","Cent_NVtxContrib",
412 "number of vertex contributors;centrality (%)",
413 AliDielectronVarManager::kNVtxContrib,
414 "0.,5.,10.,20.,40.,50.,60.,80.,100.",
415 AliDielectronVarManager::kCentrality);
419 if(cutDefinition == kTOFTRD || cutDefinition >= kEtaGap01) {
420 histos->UserHistogram("Event","TPCxH2","TPC Qx component;TPCxH2",
422 AliDielectronVarManager::kTPCxH2);
423 histos->UserHistogram("Event","TPCyH2","TPC Qy component;TPCyH2",
425 AliDielectronVarManager::kTPCyH2);
426 histos->UserHistogram("Event","TPCrpH2","TPC reaction plane; #Psi^{TPC}",
428 AliDielectronVarManager::kTPCrpH2);
429 histos->UserHistogram("Event","TPCsub1xH2","TPC Qx component sub1;TPCsub1xH2",
431 AliDielectronVarManager::kTPCsub1xH2);
432 histos->UserHistogram("Event","TPCsub1yH2","TPC Qy component sub1;TPCsub1yH2",
434 AliDielectronVarManager::kTPCsub1yH2);
435 histos->UserHistogram("Event","TPCsub1rpH2","TPC reaction plane sub1; #Psi^{sub1}",
437 AliDielectronVarManager::kTPCsub1rpH2);
438 histos->UserHistogram("Event","TPCsub2xH2","TPC Qx component sub2;TPCsub2xH2",
440 AliDielectronVarManager::kTPCsub2xH2);
441 histos->UserHistogram("Event","TPCsub2yH2","TPC Qy component sub2;TPCsub2yH2",
443 AliDielectronVarManager::kTPCsub2yH2);
444 histos->UserHistogram("Event","TPCsub2rpH2","TPC reaction plane sub2; #Psi^{sub2}",
446 AliDielectronVarManager::kTPCsub2rpH2);
447 histos->UserHistogram("Event","TPCsub12DiffH2","TPC reaction plane diff; cos(2(#Psi^{sub1}-#Psi^{sub2}))",
449 AliDielectronVarManager::kTPCsub12DiffH2);
450 /* // uncorrected eventplane
451 histos->UserHistogram("Event","TPCxH2uc","TPC Qx component;TPCxH2uc",
453 AliDielectronVarManager::kTPCxH2uc);
454 histos->UserHistogram("Event","TPCyH2uc","TPC Qy component;TPCyH2uc",
456 AliDielectronVarManager::kTPCyH2uc);
457 histos->UserHistogram("Event","TPCrpH2uc","TPC reaction plane;TPCrpH2uc",
459 AliDielectronVarManager::kTPCrpH2uc);
460 histos->UserHistogram("Event","TPCsub1xH2uc","TPC Qx component sub1;TPCsub1xH2uc",
462 AliDielectronVarManager::kTPCsub1xH2uc);
463 histos->UserHistogram("Event","TPCsub1yH2uc","TPC Qy component sub1;TPCsub1yH2uc",
465 AliDielectronVarManager::kTPCsub1yH2uc);
466 histos->UserHistogram("Event","TPCsub1rpH2uc","TPC reaction plane sub1;TPCsub1rpH2uc",
468 AliDielectronVarManager::kTPCsub1rpH2uc);
469 histos->UserHistogram("Event","TPCsub2xH2uc","TPC Qx component sub2;TPCsub2xH2uc",
471 AliDielectronVarManager::kTPCsub2xH2uc);
472 histos->UserHistogram("Event","TPCsub2yH2uc","TPC Qy component sub2;TPCsub2yH2uc",
474 AliDielectronVarManager::kTPCsub2yH2uc);
475 histos->UserHistogram("Event","TPCsub2rpH2uc","TPC reaction plane sub2;TPCsub2rpH2uc",
477 AliDielectronVarManager::kTPCsub2rpH2uc);
478 histos->UserHistogram("Event","TPCsub12DiffH2uc","TPC reaction plane difference;TPCsub12DiffH2uc",
480 AliDielectronVarManager::kTPCsub12DiffH2uc);
482 histos->UserHistogram("Event","V0ACrpH2","VZERO-AC RP; #Psi_{2}^{V0AC} (rad.)",
484 AliDielectronVarManager::kV0ACrpH2);
485 histos->UserHistogram("Event","V0ArpH2","VZERO-A RP; #Psi_{2}^{V0A} (rad.)",
487 AliDielectronVarManager::kV0ArpH2);
488 histos->UserHistogram("Event","V0CrpH2","VZERO-C RP; #Psi_{2}^{V0C} (rad.)",
490 AliDielectronVarManager::kV0CrpH2);
492 histos->UserHistogram("Event","V0ATPCDiffH2","VZERO-A TPC diff; cos(2(#Psi^{V0A}-#Psi^{TPC}))",
494 AliDielectronVarManager::kV0ATPCDiffH2);
495 histos->UserHistogram("Event","V0CTPCDiffH2","VZERO-C TPC diff; cos(2(#Psi^{V0C}-#Psi^{TPC}))",
497 AliDielectronVarManager::kV0CTPCDiffH2);
498 histos->UserHistogram("Event","V0AV0CDiffH2","VZERO-A VZERO-C diff; cos(2(#Psi^{V0A}-#Psi^{V0C}))",
500 AliDielectronVarManager::kV0AV0CDiffH2);
502 // centrality dependent event plane histograms
503 histos->UserHistogram("Event","Cent_TPCrpH2","TPC RP;centrality (%);#Psi^{TPC} (rad.)",
504 10,0.,100.,100,-2.,2.,
505 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2);
506 histos->UserHistogram("Event","Cent_TPCsub1rpH2","TPC-1 RP;centrality (%);#Psi^{sub1} (rad.)",
507 10,0.,100.,100,-2.,2.,
508 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2);
509 histos->UserHistogram("Event","Cent_TPCsub2rpH2","TPC-2 RP;centrality (%);#Psi^{sub2} (rad.)",
510 10,0.,100.,100,-2.,2.,
511 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2);
513 histos->UserHistogram("Event","Cent_V0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{V0AC} (rad.)",
514 10,0.,100.,100,-2.0,2.0,
515 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ACrpH2);
516 histos->UserHistogram("Event","Cent_V0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A} (rad.)",
517 10,0.,100.,100,-2.0,2.0,
518 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ArpH2);
519 histos->UserHistogram("Event","Cent_V0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C} (rad.)",
520 10,0.,100.,100,-2.0,2.0,
521 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CrpH2);
522 // for resolution calculation
523 histos->UserHistogram("Event","Cent_V0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{TPC}))",
524 10,0.,100.,300,-1.0,1.0,
525 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ATPCDiffH2);
526 histos->UserHistogram("Event","Cent_V0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{V0C}-#Psi^{TPC}))",
527 10,0.,100.,300,-1.0,1.0,
528 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CTPCDiffH2);
529 histos->UserHistogram("Event","Cent_V0AV0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{V0C}))",
530 10,0.,100.,300,-1.0,1.0,
531 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0AV0CDiffH2);
532 histos->UserHistogram("Event","Cent_TPCsub12DiffH2","TPC-sub1 TPC-sub2 diff;centrality (%);cos(2(#Psi^{sub1}-#Psi^{sub2}))",
533 10,0.,100.,300,-1.0,1.0,
534 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2);
536 histos->UserHistogram("Event","Cent_TPCsub12DiffH2Sin","TPC-sub1 TPC-sub2 diff;centrality (%);sin(2(#Psi^{sub1}-#Psi^{sub2}))",
537 10,0.,100.,300,-1.0,1.0,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2Sin);
538 //// EPSelectionTask V0 information directly from the ESDs
539 histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{v0AC} (rad.)",
540 10,0.,100.,100,-2.0,2.0,
541 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
542 histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{v0A} (rad.)",
543 10,0.,100.,100,-2.0,2.0,
544 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
545 histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{v0C} (rad.)",
546 10,0.,100.,100,-2.0,2.0,
547 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
548 // for resolution calculation
549 histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{TPC}))",
550 10,0.,100.,300,-1.0,1.0,
551 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2);
552 histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{v0C}-#Psi^{TPC}))",
553 10,0.,100.,300,-1.0,1.0,
554 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2);
555 histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{v0C}))",
556 10,0.,100.,300,-1.0,1.0,
557 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2);
561 ////// MONTE CARLO //////
563 if(cutDefinition == kTOFTRD && hasMC) {
564 histos->AddClass("MCEvent");
565 histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
566 10,0.,100., 21,-0.5,20.5,
567 AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
572 //Initialise histogram classes
573 histos->SetReservedWords("Track;Pair");
577 // to fill also mixed event histograms loop until 10
578 for (Int_t i=0; i<3; ++i){
579 histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
582 if(cutDefinition < kEtaGap01) {
585 for (Int_t i=0; i<3; ++i){
586 histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
590 //to fill also track info from 2nd event loop until 2
591 for (Int_t i=0; i<2; ++i){
592 histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
596 // histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
597 // histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
599 //add histograms to Track classes
600 //histos->UserHistogram("Track","TOFbit","TOFbit;bit;#tracks",19,-9.5,9.5,AliDielectronVarManager::kTOFPIDBit);
601 histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",
603 AliDielectronVarManager::kPt);
604 histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",
606 AliDielectronVarManager::kNclsTPC);
607 histos->UserHistogram("Track","TPCsignalN","Number of Clusters TPC;TPC number clusteres;#tracks",
609 AliDielectronVarManager::kTPCsignalN);
611 histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",
613 AliDielectronVarManager::kImpactParXY);
614 histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",
616 AliDielectronVarManager::kImpactParZ);
617 histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
618 200,-1,1,200,0,6.285,
619 AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
621 histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
622 400,0.2,20.,200,0.,200.,
623 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
624 histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
625 400,0.2,20.,200,-10.,10.,
626 AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
628 histos->UserHistogram("Track","Ncl",";Number clusters TPC;Number clusters TPC",
630 AliDielectronVarManager::kNclsTPC);
631 histos->UserHistogram("Track","NclFr",";Number of findable clusters (robust);Number findable clusters TPC",
633 AliDielectronVarManager::kNFclsTPCr);
634 histos->UserHistogram("Track","Ncl_NclFr","Number of (findable) clusters TPC;found clusters;findable clusters",
635 160,-0.5,159.5,160,-0.5,159.5,
636 AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
637 histos->UserHistogram("Track","NtrklTRD",";Number tracklets TRD for pid;Number tracklets TRD",
639 AliDielectronVarManager::kTRDpidQuality);
641 //add histograms to Pair classes
642 histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
643 300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
644 histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
645 100,-1.,1., AliDielectronVarManager::kY);
646 histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
647 100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
648 histos->UserHistogram("Pair","Chi2NDF","#chi^{2}/NDF;#chi^{2}/NDF",
649 100,0.,20, AliDielectronVarManager::kChi2NDF);
650 histos->UserHistogram("Pair","PsiPair","PsiPair;#psi",
651 100,0.,3.15, AliDielectronVarManager::kPsiPair);
652 histos->UserHistogram("Pair","R","Radius;r (cm)",
653 200,0.,100., AliDielectronVarManager::kR);
654 histos->UserHistogram("Pair","LegDist",";dca (cm)",
655 50,0.,5., AliDielectronVarManager::kLegDist);
656 histos->UserHistogram("Pair","LegDistXY",";dca_{xy} (cm)",
657 50,0.,5., AliDielectronVarManager::kLegDistXY);
662 //// FLOW results use tprofiles
663 if(cutDefinition == kTOFTRD || cutDefinition == kTOFTRD2 || cutDefinition >= kEtaGap01) {
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);
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);
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);
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);
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);
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);
702 histos->UserProfile("Pair","M_V0ACrpH2FlowV2",
703 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
704 AliDielectronVarManager::kV0ACrpH2FlowV2,
706 AliDielectronVarManager::kM);
708 histos->UserProfile("Pair","M_V0ArpH2FlowV2",
709 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
710 AliDielectronVarManager::kV0ArpH2FlowV2,
712 AliDielectronVarManager::kM);
714 histos->UserProfile("Pair","M_V0CrpH2FlowV2",
715 "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
716 AliDielectronVarManager::kV0CrpH2FlowV2,
718 AliDielectronVarManager::kM);
721 die->SetHistogramManager(histos);
725 void InitCF(AliDielectron* die, Int_t cutDefinition)
728 // Setup the CF Manager if needed
732 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
735 cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
736 // if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
737 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
738 if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
739 if(hasMC) cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() );
742 // cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
743 cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
744 cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
745 cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
746 if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
747 // if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
750 cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi());
751 cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2,4,-1.*TMath::Pi(),TMath::Pi());
754 cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
755 if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
756 // cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
757 // cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);
758 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
759 cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
760 cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
761 // cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
762 // cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
763 // cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
764 // if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
768 cf->SetStepForMCtruth();
769 cf->SetStepsForMCtruthOnly();
770 // cf->SetStepsForBackground();
773 die->SetCFManagerPair(cf);
776 void AddMCSignals(AliDielectron *die){
777 //Do we have an MC handler?
780 AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
781 inclusiveJpsi->SetLegPDGs(11,-11);
782 inclusiveJpsi->SetMotherPDGs(443,443);
783 inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
784 inclusiveJpsi->SetFillPureMCStep(kTRUE);
785 inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
786 inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
787 die->AddSignalMC(inclusiveJpsi);
789 AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays)
790 promptJpsi->SetLegPDGs(11,-11);
791 promptJpsi->SetMotherPDGs(443,443);
792 promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
793 promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
794 promptJpsi->SetFillPureMCStep(kTRUE);
795 promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
796 promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
797 promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
798 promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
799 die->AddSignalMC(promptJpsi);
801 AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
802 beautyJpsi->SetLegPDGs(11,-11);
803 beautyJpsi->SetMotherPDGs(443,443);
804 beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
805 beautyJpsi->SetGrandMotherPDGs(500,500);
806 beautyJpsi->SetFillPureMCStep(kTRUE);
807 beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
808 beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
809 beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
810 die->AddSignalMC(beautyJpsi);
812 AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi
813 directJpsi->SetLegPDGs(11,-11);
814 directJpsi->SetMotherPDGs(443,443);
815 directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
816 directJpsi->SetFillPureMCStep(kTRUE);
817 directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
818 directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
819 directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
820 directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
821 die->AddSignalMC(directJpsi);
823 AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs"); // pairs made from conversion (may be also from 2 different conversions)
824 conversionElePairs->SetLegPDGs(11,-11);
825 conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
826 conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
827 conversionElePairs->SetMotherPDGs(22,22);
828 // die->AddSignalMC(conversionElePairs);
831 void SetEtaCorrection()
833 if (AliDielectronPID::GetEtaCorrFunction()) return;
835 TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
836 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
837 if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
838 if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
839 Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
843 TFile f(etaMap.Data());
844 if (!f.IsOpen()) return;
845 TList *keys=f.GetListOfKeys();
847 for (Int_t i=0; i<keys->GetEntries(); ++i){
848 TString kName=keys->At(i)->GetName();
850 if (reg.MatchB(list)){
851 printf(" Using Eta Correction Function: %s\n",kName.Data());
852 AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
857 TVectorD *GetRunNumbers() {
859 Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
860 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
863 Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
864 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
867 // selection via environement variable (works only for gsi trains)
870 if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
871 Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
872 TVectorD *vec = new TVectorD(size+1);
874 (*vec)[size] = runLHC10h[0] + 1;
875 for (int i = 0; i < size; i++) {
876 (*vec)[i] = runLHC10h[size-1-i];
882 if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
884 Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
885 TVectorD *vec = new TVectorD(size+1);
887 (*vec)[size] = runLHC11h[0] + 1;
888 for (int i = 0; i < size; i++) {
889 (*vec)[i] = runLHC11h[size-1-i];
895 TVectorD *vec = new TVectorD(2);