]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C
- HFhelper updates
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / ConfigJpsi_jb_PbPb.C
1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void InitCF(AliDielectron* die, Int_t cutDefinition);
3 void InitHF(AliDielectron* die, Int_t cutDefinition);
4
5 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
6 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
7
8 void AddMCSignals(AliDielectron *die);
9 void SetEtaCorrection();
10 TVectorD *GetRunNumbers();
11
12 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");
13 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
15 TObjArray *arrNames=names.Tokenize(";");
16 const Int_t nDie=arrNames->GetEntries();
17
18 Bool_t  isESD = kTRUE;
19 Bool_t  hasMC = kFALSE;
20 TString list  = gSystem->Getenv("LIST");
21
22
23 AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, TString prod="")
24 {
25   //
26   // Setup the instance of AliDielectron
27   //
28
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;
33
34   //ESD handler?
35   isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
36
37   // switch off some configurations
38   switch(cutDefinition) {
39   case kTPC:
40       //case kTOF:
41   case kTRD:
42   case kTOFTRD:
43       return 0x0;
44       break;
45   case krec:
46       if(!hasMC) return 0x0;
47       break;
48       //case kTOFTRD2:
49     case kITScls:
50     case kITSamy:
51     case kDCA:
52     case kChi:
53       return 0x0;
54       break;
55       //    case kGam0:
56       //    case kGam01:
57       //    case kGam05:
58       //    case kGam10:
59       //    case kGam15:
60       //    case kGam20:
61     case kEtaGap01:
62     case kEtaGap02:
63     case kEtaGap03:
64     case kEtaGap04:
65     case kEtaGap05:
66     case kSubLS:
67     case kSubRndm:
68       if( hasMC) return 0x0;
69       break;
70   }
71
72   // create the actual framework object
73   TString name=Form("%02d",cutDefinition);
74   if (cutDefinition<arrNames->GetEntriesFast()){
75     name=arrNames->At(cutDefinition)->GetName();
76   }
77   AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("Track cuts: %s",name.Data()));
78   die->SetHasMC(hasMC);
79
80   printf(" Add %s %s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?"MC":""),name.Data(),list.Data());
81
82   // Monte Carlo Signals and TRD efficiency tables
83   if(hasMC) {
84     AddMCSignals(die);
85     printf(" Add %d MC signals \n",die->GetMCSignals()->GetEntriesFast());
86
87     // trd tables
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";
92
93       if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
94         Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
95       else
96         die->SetTRDcorrectionFilename(pidTab.Data());
97         }*/
98   }
99
100   // cut setup
101   SetupTrackCuts(die,cutDefinition);
102   SetupPairCuts(die,cutDefinition);
103
104   // histogram setup
105   if(cutDefinition == kTOF     ||
106      cutDefinition == kTOFTRD  ||
107      cutDefinition == kGam0    ||
108      cutDefinition == kTOFTRD2 ||
109      cutDefinition >= kEtaGap01 ) {
110     InitHistograms(die,cutDefinition);
111     printf(" Add %d types and %03d histos to the manager \n",die->GetHistogramList()->GetEntries(),
112            0/*die->GetHistoManager()->GetList()->GetEntries()*/);
113   }
114
115   // CF container setup, switched off
116   if(cutDefinition <  kEtaGap01 ||
117      cutDefinition == kSubRndm  ) {
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() );
122   }
123
124   // HF arrays setup
125   if(cutDefinition <  kEtaGap01 ) {
126     InitHF(die,cutDefinition);
127   }
128
129
130   // bgrd estimators
131   if(!hasMC) {
132       printf(" Activate bgrd estimators: ME and ROT \n");
133
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;
142       mix->AddVariable(AliDielectronVarManager::kZvPrim,     20,-10.,10.);
143       mix->AddVariable(AliDielectronVarManager::kCentrality,  8,  0.,80.);
144       mix->SetMixType(AliDielectronMixingHandler::kAll);
145       mix->SetDepth(100);
146       die->SetMixingHandler(mix);
147
148
149       // TPC event plane configurations
150       Double_t gGap;
151       switch(cutDefinition) {
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;
158       }
159
160     AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
161     poi->AddCut(AliDielectronVarManager::kM,2.92,3.20);     // particles of interest, jpsi mass window
162     die->GetEventPlanePOIPreFilter().AddCuts(poi);
163
164     if(cutDefinition >= kEtaGap01 &&
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     }
170
171     if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
172     die->SetPreFilterEventPlane();
173   }
174
175   // prefilter settings
176   if(cutDefinition == kTOFTRD2)
177     die->SetPreFilterAllSigns();
178   else
179     die->SetPreFilterUnlikeOnly();
180
181   // setup eta correction
182   //  if(isESD && list.Contains("LHC10h")) SetEtaCorrection();
183
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   }
190
191   return die;
192 }
193
194 //______________________________________________________________________________________
195 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
196 {
197   //
198   // Setup the track cuts
199   //
200
201   // Quality cuts
202   AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
203   die->GetTrackFilter().AddCuts(cuts);
204
205   // AOD track filter (needs to be first cut)
206   AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
207   trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqualSPDanyPIDele);
208   //  if(!isESD) cuts->AddCut(trkFilter);
209
210   //Pt cut, should make execution a bit faster
211   AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
212   pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30);    //0.8
213   cuts->AddCut(pt);
214
215         // track cuts ESD and AOD
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);
220   varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
221   varCuts->AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
222   varCuts->AddCut(AliDielectronVarManager::kKinkIndex0,   0.0);
223   cuts->AddCut(varCuts);
224
225   AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
226   // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kAny);
227   // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kFirst);
228   // trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 7); // ITS-3 = 1+2+4
229   // trkCuts->SetMaxWaivedITSNcls(1);
230   trkCuts->SetRequireITSRefit(kTRUE);
231   trkCuts->SetRequireTPCRefit(kTRUE);
232   cuts->AddCut(trkCuts);
233
234   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
235   AliDielectronPID *pid = new AliDielectronPID("PID","PID");
236
237   ////////////////////////////////// DATA
238   if(!hasMC) {
239     pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,3.0,0.,0.,kTRUE);
240     pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
241
242     if(cutDefinition==kTRD || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
243       pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
244                   AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
245   }
246
247   ////////////////////////////////// MC
248   if(hasMC) {
249
250     // electron
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};
255
256     for(Int_t icent=0; icent<8; icent++) {
257
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       }
300
301
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.);
303
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.);
305
306       //LHC11a10b
307       if (list.Contains("LHC11a10b")) {
308         printf(" LHC11a10b parameters\n");
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]);
311
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     }
320
321     // shifts for the nSigma electrons
322     TGraph* nSigmaCorrection = new TGraph();
323     // LHC11a10b
324     if (list.Contains("LHC11a10b")) {
325       nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
326       nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
327       pid->SetCorrGraph(nSigmaCorrection);
328     }
329
330   } //hasMC
331
332   ////////////////////////////////// DATA + MC
333   // pid cuts TPC + TOF & TRD
334   pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.0,4.);
335   if(cutDefinition==kTOF || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2)
336     pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
337
338   if(cutDefinition!=krec) cuts->AddCut(pid);
339   /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
340
341
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);
346
347 }
348
349 //______________________________________________________________________________________
350 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
351 {
352   //
353   // Setup the pair cuts
354   //
355
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   }
369
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);
378
379
380   // rapidity selection
381   //  AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
382   // rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
383   // die->GetPairFilter().AddCuts(rapCut);
384
385 }
386
387 //______________________________________________________________________________________
388 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
389 {
390   //
391   // Initialise the histograms
392   //
393
394   //Setup histogram Manager
395   AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
396
397   //add histograms to event class
398   histos->AddClass("Event");
399   histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)", 300,-15.,15.,
400                         AliDielectronVarManager::kZvPrim);
401   histos->UserHistogram("Event","Centrality","Centrality;centrality (%);events",
402                         "0.,5.,10.,20.,40.,50.,60.,80.",
403                         AliDielectronVarManager::kCentrality);
404   histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0;events", 500,0.,25000.,
405                         AliDielectronVarManager::kMultV0);
406   histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
407                         10,0.,100., 500,0.,25000.,
408                         AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
409   histos->UserProfile("Event","Cent_Nacc",
410                       "accepted tracks;centrality (%)",
411                       AliDielectronVarManager::kNacc,
412                       "0.,5.,10.,20.,40.,50.,60.,80.,100.",
413                       AliDielectronVarManager::kCentrality);
414   histos->UserProfile("Event","Cent_NVtxContrib",
415                       "number of vertex contributors;centrality (%)",
416                       AliDielectronVarManager::kNVtxContrib,
417                       "0.,5.,10.,20.,40.,50.,60.,80.,100.",
418                       AliDielectronVarManager::kCentrality);
419
420   ////// FLOW //////
421   if(cutDefinition == kTOFTRD || cutDefinition==kTOF) {
422     histos->UserHistogram("Event","TPCxH2","TPC Qx component;TPCxH2",
423                           100,-1500.,1500.,
424                           AliDielectronVarManager::kTPCxH2);
425     histos->UserHistogram("Event","TPCyH2","TPC Qy component;TPCyH2",
426                           100,-1500.,1500.,
427                           AliDielectronVarManager::kTPCyH2);
428     histos->UserHistogram("Event","TPCrpH2","TPC reaction plane; #Psi^{TPC}",
429                           100,-2.,2.,
430                           AliDielectronVarManager::kTPCrpH2);
431     histos->UserHistogram("Event","TPCsub1xH2","TPC Qx component sub1;TPCsub1xH2",
432                           100,-1500.,1500.,
433                           AliDielectronVarManager::kTPCsub1xH2);
434     histos->UserHistogram("Event","TPCsub1yH2","TPC Qy component sub1;TPCsub1yH2",
435                           100,-1500.,1500.,
436                           AliDielectronVarManager::kTPCsub1yH2);
437     histos->UserHistogram("Event","TPCsub1rpH2","TPC reaction plane sub1; #Psi^{sub1}",
438                           100,-2.,2.,
439                           AliDielectronVarManager::kTPCsub1rpH2);
440     histos->UserHistogram("Event","TPCsub2xH2","TPC Qx component sub2;TPCsub2xH2",
441                           100,-1500.,1500.,
442                           AliDielectronVarManager::kTPCsub2xH2);
443     histos->UserHistogram("Event","TPCsub2yH2","TPC Qy component sub2;TPCsub2yH2",
444                           100,-1500.,1500.,
445                           AliDielectronVarManager::kTPCsub2yH2);
446     histos->UserHistogram("Event","TPCsub2rpH2","TPC reaction plane sub2; #Psi^{sub2}",
447                           100,-2.,2.,
448                           AliDielectronVarManager::kTPCsub2rpH2);
449     histos->UserHistogram("Event","TPCsub12DiffH2","TPC reaction plane diff; cos(2(#Psi^{sub1}-#Psi^{sub2}))",
450                           100,-1.,1.,
451                           AliDielectronVarManager::kTPCsub12DiffH2);
452     /* // uncorrected eventplane
453      histos->UserHistogram("Event","TPCxH2uc","TPC Qx component;TPCxH2uc",
454      100,-1500.,1500.,
455      AliDielectronVarManager::kTPCxH2uc);
456      histos->UserHistogram("Event","TPCyH2uc","TPC Qy component;TPCyH2uc",
457      100,-1500.,1500.,
458      AliDielectronVarManager::kTPCyH2uc);
459      histos->UserHistogram("Event","TPCrpH2uc","TPC reaction plane;TPCrpH2uc",
460      100,-2.,2.,
461      AliDielectronVarManager::kTPCrpH2uc);
462      histos->UserHistogram("Event","TPCsub1xH2uc","TPC Qx component sub1;TPCsub1xH2uc",
463      100,-1500.,1500.,
464      AliDielectronVarManager::kTPCsub1xH2uc);
465      histos->UserHistogram("Event","TPCsub1yH2uc","TPC Qy component sub1;TPCsub1yH2uc",
466      100,-1500.,1500.,
467      AliDielectronVarManager::kTPCsub1yH2uc);
468      histos->UserHistogram("Event","TPCsub1rpH2uc","TPC reaction plane sub1;TPCsub1rpH2uc",
469      100,-2.,2.,
470      AliDielectronVarManager::kTPCsub1rpH2uc);
471      histos->UserHistogram("Event","TPCsub2xH2uc","TPC Qx component sub2;TPCsub2xH2uc",
472      100,-1500.,1500.,
473      AliDielectronVarManager::kTPCsub2xH2uc);
474      histos->UserHistogram("Event","TPCsub2yH2uc","TPC Qy component sub2;TPCsub2yH2uc",
475      100,-1500.,1500.,
476      AliDielectronVarManager::kTPCsub2yH2uc);
477      histos->UserHistogram("Event","TPCsub2rpH2uc","TPC reaction plane sub2;TPCsub2rpH2uc",
478      100,-2.,2.,
479      AliDielectronVarManager::kTPCsub2rpH2uc);
480      histos->UserHistogram("Event","TPCsub12DiffH2uc","TPC reaction plane difference;TPCsub12DiffH2uc",
481      100,-1.,1.,
482      AliDielectronVarManager::kTPCsub12DiffH2uc);
483      */
484     histos->UserHistogram("Event","V0ACrpH2","VZERO-AC RP; #Psi_{2}^{V0AC} (rad.)",
485                           100,-2.0,2.0,
486                           AliDielectronVarManager::kV0ACrpH2);
487     histos->UserHistogram("Event","V0ArpH2","VZERO-A RP; #Psi_{2}^{V0A} (rad.)",
488                           100,-2.0,2.0,
489                           AliDielectronVarManager::kV0ArpH2);
490     histos->UserHistogram("Event","V0CrpH2","VZERO-C RP; #Psi_{2}^{V0C} (rad.)",
491                           100,-2.0,2.0,
492                           AliDielectronVarManager::kV0CrpH2);
493
494     histos->UserHistogram("Event","V0ATPCDiffH2","VZERO-A TPC diff; cos(2(#Psi^{V0A}-#Psi^{TPC}))",
495                           300,-1.0,1.0,
496                           AliDielectronVarManager::kV0ATPCDiffH2);
497     histos->UserHistogram("Event","V0CTPCDiffH2","VZERO-C TPC diff; cos(2(#Psi^{V0C}-#Psi^{TPC}))",
498                           300,-1.0,1.0,
499                           AliDielectronVarManager::kV0CTPCDiffH2);
500     histos->UserHistogram("Event","V0AV0CDiffH2","VZERO-A VZERO-C diff; cos(2(#Psi^{V0A}-#Psi^{V0C}))",
501                           300,-1.0,1.0,
502                           AliDielectronVarManager::kV0AV0CDiffH2);
503
504     // centrality dependent event plane histograms
505     histos->UserHistogram("Event","Cent_TPCrpH2","TPC RP;centrality (%);#Psi^{TPC} (rad.)",
506                           10,0.,100.,100,-2.,2.,
507                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2);
508     histos->UserHistogram("Event","Cent_TPCsub1rpH2","TPC-1 RP;centrality (%);#Psi^{sub1} (rad.)",
509                           10,0.,100.,100,-2.,2.,
510                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2);
511     histos->UserHistogram("Event","Cent_TPCsub2rpH2","TPC-2 RP;centrality (%);#Psi^{sub2} (rad.)",
512                           10,0.,100.,100,-2.,2.,
513                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2);
514
515     histos->UserHistogram("Event","Cent_V0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{V0AC} (rad.)",
516                           10,0.,100.,100,-2.0,2.0,
517                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ACrpH2);
518     histos->UserHistogram("Event","Cent_V0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A} (rad.)",
519                           10,0.,100.,100,-2.0,2.0,
520                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ArpH2);
521     histos->UserHistogram("Event","Cent_V0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C} (rad.)",
522                           10,0.,100.,100,-2.0,2.0,
523                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CrpH2);
524     // for resolution calculation
525     histos->UserHistogram("Event","Cent_V0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{TPC}))",
526                           10,0.,100.,300,-1.0,1.0,
527                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0ATPCDiffH2);
528     histos->UserHistogram("Event","Cent_V0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{V0C}-#Psi^{TPC}))",
529                           10,0.,100.,300,-1.0,1.0,
530                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0CTPCDiffH2);
531     histos->UserHistogram("Event","Cent_V0AV0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{V0C}))",
532                           10,0.,100.,300,-1.0,1.0,
533                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kV0AV0CDiffH2);
534     histos->UserHistogram("Event","Cent_TPCsub12DiffH2","TPC-sub1 TPC-sub2 diff;centrality (%);cos(2(#Psi^{sub1}-#Psi^{sub2}))",
535                           10,0.,100.,300,-1.0,1.0,
536                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2);
537     // detector effects
538     histos->UserHistogram("Event","Cent_TPCsub12DiffH2Sin","TPC-sub1 TPC-sub2 diff;centrality (%);sin(2(#Psi^{sub1}-#Psi^{sub2}))",
539                           10,0.,100.,300,-1.0,1.0,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2Sin);
540
541     // EPSelectionTask V0 information directly from the ESDs
542     histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{v0AC} (rad.)",
543                           10,0.,100.,100,-2.0,2.0,
544                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
545     histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{v0A} (rad.)",
546                           10,0.,100.,100,-2.0,2.0,
547                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
548     histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{v0C} (rad.)",
549                           10,0.,100.,100,-2.0,2.0,
550                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
551     // for resolution calculation
552     histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{TPC}))",
553                           10,0.,100.,300,-1.0,1.0,
554                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2);
555     histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{v0C}-#Psi^{TPC}))",
556                           10,0.,100.,300,-1.0,1.0,
557                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2);
558     histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{v0C}))",
559                           10,0.,100.,300,-1.0,1.0,
560                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2);
561
562   }
563
564   ////// MONTE CARLO //////
565   /*
566     if(cutDefinition == kTOFTRD && hasMC) {
567     histos->AddClass("MCEvent");
568     histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
569     10,0.,100., 21,-0.5,20.5,
570     AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
571     }
572   */
573
574   //Initialise histogram classes
575   histos->SetReservedWords("Track;Pair");
576
577   //Pair classes
578   // to fill also mixed event histograms loop until 10
579   for (Int_t i=0; i<3; ++i){
580     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
581   }
582
583   if(cutDefinition < kEtaGap01) {
584
585     //legs from pair
586     for (Int_t i=0; i<3; ++i){
587       histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
588     }
589
590     //Track classes
591     //to fill also track info from 2nd event loop until 2
592     for (Int_t i=0; i<2; ++i){
593       histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
594     }
595     //track rotation
596     //   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
597     //   histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
598
599     ///// add histograms to Track classes /////
600
601     // Vertex
602     histos->UserHistogram("Track","ImpactParXY",";dXY (cm);#tracks", 500,-1.,1.,
603                           AliDielectronVarManager::kImpactParXY);
604     histos->UserHistogram("Track","ImpactParZ",";dZ (cm);#tracks", 600,-3.,3.,
605                           AliDielectronVarManager::kImpactParZ);
606
607     // Kinematics
608     histos->UserHistogram("Track","Pt",";p_{T} (GeV/c);#tracks", 400,0,20.,
609                           AliDielectronVarManager::kPt);
610     histos->UserHistogram("Track","Eta_Phi",";#eta;#varphi;#tracks", 200,-1,1,200,0,6.285,
611                           AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
612
613     // TPC
614     histos->UserHistogram("Track","TPCnCls",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
615                           AliDielectronVarManager::kNclsTPC);
616     histos->UserHistogram("Track","TPCsignalN",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
617                           AliDielectronVarManager::kTPCsignalN);
618     histos->UserHistogram("Track","NclFr",";N_{max.cls}^{TPC};#tracks", 160,-0.5,159.5,
619                           AliDielectronVarManager::kNFclsTPCr);
620     histos->UserHistogram("Track","Ncl_NclFr",";N_{cls}^{TPC};N_{max.cls}^{TPC};#tracks",
621                           160,-0.5,159.5,160,-0.5,159.5,
622                           AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
623
624     // TRD
625     histos->UserHistogram("Track","NtrklTRD",";N_{trkl}^{TRD};#tracks",
626                           8,-0.5,7.5,
627                           AliDielectronVarManager::kTRDpidQuality);
628
629     // PID
630     histos->UserHistogram("Track","dEdx_P",";p (GeV/c);TPC signal (arb units);#tracks",
631                           400,0.2,20.,200,0.,200.,
632                           AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
633     histos->UserHistogram("Track","TPCnSigmaEle_P","p (GeV/c);n#sigma_{ele}^{TPC};#tracks",
634                           400,0.2,20.,200,-10.,10.,
635                           AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
636
637     ///// add histograms to Pair classes /////
638     histos->UserHistogram("Pair","InvMass",";m_{ee} (GeV/c^{2});#pairs",
639                           300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
640     histos->UserHistogram("Pair","Rapidity",";y;#pairs",
641                           100,-1.,1., AliDielectronVarManager::kY);
642     histos->UserHistogram("Pair","OpeningAngle","opening angle (rad.);#pairs",
643                           100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
644     histos->UserHistogram("Pair","Chi2NDF",";#chi^{2}/NDF;#pairs",
645                           100,0.,20, AliDielectronVarManager::kChi2NDF);
646     histos->UserHistogram("Pair","PsiPair",";#psi;#pairs",
647                           100,0.,3.15, AliDielectronVarManager::kPsiPair);
648     histos->UserHistogram("Pair","R",";r (cm)",
649                           200,0.,100., AliDielectronVarManager::kR);
650     histos->UserHistogram("Pair","LegDist",";dca (cm)",
651                           50,0.,5., AliDielectronVarManager::kLegDist);
652     histos->UserHistogram("Pair","LegDistXY",";dca_{xy} (cm)",
653                           50,0.,5., AliDielectronVarManager::kLegDistXY);
654
655   }
656
657   //// FLOW results use tprofiles
658   if(cutDefinition == kTOFTRD || cutDefinition == kTOF || cutDefinition >= kEtaGap01) {
659
660     histos->UserProfile("Pair","M_Cent_Pt_V0ACrpH2FlowV2",
661                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
662                         AliDielectronVarManager::kV0ACrpH2FlowV2,
663                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
664                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
665
666     histos->UserProfile("Pair","M_Cent_Pt_V0ArpH2FlowV2",
667                         "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
668                         AliDielectronVarManager::kV0ArpH2FlowV2,
669                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
670                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
671
672     histos->UserProfile("Pair","M_Cent_Pt_V0CrpH2FlowV2",
673                         "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
674                         AliDielectronVarManager::kV0CrpH2FlowV2,
675                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
676                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
677
678     histos->UserProfile("Pair","M_Cent_Pt_v0ACrpH2FlowV2",
679                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
680                         AliDielectronVarManager::kv0ACrpH2FlowV2,
681                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
682                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
683
684     histos->UserProfile("Pair","M_Cent_Pt_v0ArpH2FlowV2",
685                         "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
686                         AliDielectronVarManager::kv0ArpH2FlowV2,
687                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
688                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
689
690     histos->UserProfile("Pair","M_Cent_Pt_v0CrpH2FlowV2",
691                         "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
692                         AliDielectronVarManager::kv0CrpH2FlowV2,
693                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
694                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
695
696     // 1D control histos
697     /*
698     histos->UserProfile("Pair","M_V0ACrpH2FlowV2",
699                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
700                         AliDielectronVarManager::kV0ACrpH2FlowV2,
701                         125,0.,125*.04,
702                         AliDielectronVarManager::kM);
703
704     histos->UserProfile("Pair","M_V0ArpH2FlowV2",
705                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
706                         AliDielectronVarManager::kV0ArpH2FlowV2,
707                         125,0.,125*.04,
708                         AliDielectronVarManager::kM);
709
710     histos->UserProfile("Pair","M_V0CrpH2FlowV2",
711                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
712                         AliDielectronVarManager::kV0CrpH2FlowV2,
713                         125,0.,125*.04,
714                         AliDielectronVarManager::kM);
715     */
716   }
717
718   die->SetHistogramManager(histos);
719 }
720
721 void InitHF(AliDielectron* die, Int_t cutDefinition)
722 {
723   //
724   // Setup the HF arrays
725   //
726
727   AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
728   //  if(hasMC) hf->SetStepForMCGenerated();
729   hf->SetPairTypes(AliDielectronHF::kAll);
730   hf->SetVariable(AliDielectronVarManager::kM, 125, 0.0, 0.04*125);
731
732   hf->AddCutVariable(AliDielectronVarManager::kCentrality,  "0.,5.,10.,20.,40.,50.,60.,80."  );
733   hf->AddCutVariable(AliDielectronVarManager::kPt,          "0.,2.5,5.,100."                 );
734   hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi() );
735   hf->AddCutVariable(AliDielectronVarManager::kY,           1, -0.9, 0.9                     );
736   //  hf->AddCutVariable(AliDielectronVarManager::kPt,          "0.8, 1.0, 1.1, 1.2, 1.5, 100.0", kTRUE, AliDielectronHF::kBinToMax);
737   hf->AddCutVariable(AliDielectronVarManager::kNclsTPC,     "70,90,100,120,160",              kTRUE, AliDielectronHF::kBinToMax);
738   hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaEle,"-4,-3,-2.5,-2,2,2.5,3,4",        kTRUE, AliDielectronHF::kSymBin);
739   hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100.",                 kTRUE, AliDielectronHF::kBinToMax);
740   hf->AddCutVariable(AliDielectronVarManager::kITSLayerFirstCls,4,0.,4.,              kFALSE, kTRUE, AliDielectronHF::kBinFromMin);
741   //hf->AddCutVariable(AliDielectronVarManager::kNclsITS,         5,2.,7.,              kFALSE, kTRUE, AliDielectronHF::kBinToMax);
742   //hf->AddCutVariable(AliDielectronVarManager::kRunNumber,  GetRunNumbers());
743
744   die->SetHistogramArray(hf);
745 }
746
747 void InitCF(AliDielectron* die, Int_t cutDefinition)
748 {
749   //
750   // Setup the CF Manager if needed
751   //
752
753  AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
754
755   // event variables
756   cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
757   //    if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
758   if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
759   if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
760   if(hasMC)  cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() );
761
762   // pair variables
763   //    cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
764   cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
765   cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
766   cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
767   if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
768   //    if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
769
770   // flow variables
771   cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi());
772   cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2,4,-1.*TMath::Pi(),TMath::Pi());
773
774   // leg variables
775   cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
776   if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
777   //    cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
778   //    cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);
779   cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
780   cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
781   cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
782   //    cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
783   //    cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
784   //    cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
785   //    if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
786
787   // mc steps
788   if(hasMC) {
789     if(cutDefinition==kTOFTRD) cf->SetStepForMCtruth();
790     cf->SetStepsForMCtruthOnly();
791     // cf->SetStepsForBackground();
792   }
793
794   die->SetCFManagerPair(cf);
795 }
796
797 void AddMCSignals(AliDielectron *die){
798   //Do we have an MC handler?
799   if (!hasMC) return;
800   
801   AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
802   inclusiveJpsi->SetLegPDGs(11,-11);
803   inclusiveJpsi->SetMotherPDGs(443,443);
804   inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
805   inclusiveJpsi->SetFillPureMCStep(kTRUE);
806   inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
807   inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
808   die->AddSignalMC(inclusiveJpsi);
809   
810   AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi");   // prompt J/psi (not from beauty decays)
811   promptJpsi->SetLegPDGs(11,-11);
812   promptJpsi->SetMotherPDGs(443,443);
813   promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
814   promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
815   promptJpsi->SetFillPureMCStep(kTRUE);
816   promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
817   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
818   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
819   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
820   die->AddSignalMC(promptJpsi);
821   
822   AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
823   beautyJpsi->SetLegPDGs(11,-11);
824   beautyJpsi->SetMotherPDGs(443,443);
825   beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
826   beautyJpsi->SetGrandMotherPDGs(500,500);
827   beautyJpsi->SetFillPureMCStep(kTRUE);
828   beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
829   beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
830   beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
831   die->AddSignalMC(beautyJpsi);
832   
833   AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi");   // embedded J/psi
834   directJpsi->SetLegPDGs(11,-11);
835   directJpsi->SetMotherPDGs(443,443);
836   directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
837   directJpsi->SetFillPureMCStep(kTRUE);
838   directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
839   directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
840   directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
841   directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
842   die->AddSignalMC(directJpsi);
843   
844   AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs");  // pairs made from conversion (may be also from 2 different conversions)                                                                                                                                                                                             
845   conversionElePairs->SetLegPDGs(11,-11);
846   conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
847   conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
848   conversionElePairs->SetMotherPDGs(22,22);
849   //   die->AddSignalMC(conversionElePairs);
850 }
851
852 void SetEtaCorrection()
853 {
854   if (AliDielectronPID::GetEtaCorrFunction()) return;
855   
856   TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
857   TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
858   if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
859   if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
860     Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
861     return;
862   }
863
864   TFile f(etaMap.Data());
865   if (!f.IsOpen()) return;
866   TList *keys=f.GetListOfKeys();
867
868   for (Int_t i=0; i<keys->GetEntries(); ++i){
869     TString kName=keys->At(i)->GetName();
870     TPRegexp reg(kName);
871     if (reg.MatchB(list)){
872       printf(" Using Eta Correction Function: %s\n",kName.Data());
873       AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
874     }
875   }
876 }
877
878 TVectorD *GetRunNumbers() {
879   
880   Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
881     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
882   };
883   
884   Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
885     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
886   };
887   
888   // selection via environement variable (works only for gsi trains)
889
890   
891   if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
892     Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
893     TVectorD *vec = new TVectorD(size+1);
894     
895     (*vec)[size] = runLHC10h[0] + 1;
896     for (int i = 0; i < size; i++) {
897       (*vec)[i] = runLHC10h[size-1-i];
898     }
899     //    vec->Print("");
900     return vec;
901   }
902
903   if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
904     
905     Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
906     TVectorD *vec = new TVectorD(size+1);
907     
908     (*vec)[size] = runLHC11h[0] + 1;
909     for (int i = 0; i < size; i++) {
910       (*vec)[i] = runLHC11h[size-1-i];
911     }
912     //   vec->Print("");
913     return vec;
914   }
915
916   TVectorD *vec = new TVectorD(2);
917   (*vec)[0] = 0;
918   (*vec)[0] = 1;
919   return vec;
920      
921 }