]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C
1084c90ae9ebfcd75f72c2127c5902548e599465
[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,     30,-10.,10.);
143       //      mix->AddVariable(AliDielectronVarManager::kCentrality,  8,  0.,80.);
144       mix->SetMixType(AliDielectronMixingHandler::kAll);
145       mix->SetDepth(120);
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, 15); // ITS-4 = 1+2+4+8
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","RunNumber","Events per run;run;events",
400                         GetRunNumbers(),
401                         AliDielectronVarManager::kRunNumber);
402   histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)", 300,-15.,15.,
403                         AliDielectronVarManager::kZvPrim);
404   histos->UserHistogram("Event","Centrality","Centrality;centrality (%);events",
405                         "0.,5.,10.,20.,40.,50.,60.,80.",
406                         AliDielectronVarManager::kCentrality);
407   histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0;events", 500,0.,25000.,
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);
422
423   ////// FLOW //////
424   if(cutDefinition == kTOFTRD || cutDefinition==kTOF) {
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);
496
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);
506
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);
517
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);
543
544     // EPSelectionTask V0 information directly from the ESDs
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);
564
565   }
566
567   ////// MONTE CARLO //////
568   /*
569     if(cutDefinition == kTOFTRD && hasMC) {
570     histos->AddClass("MCEvent");
571     histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
572     10,0.,100., 21,-0.5,20.5,
573     AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
574     }
575   */
576
577   //Initialise histogram classes
578   histos->SetReservedWords("Track;Pair");
579
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   }
585
586   if(cutDefinition < kEtaGap01) {
587
588     //legs from pair
589     for (Int_t i=0; i<3; ++i){
590       histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
591     }
592
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     }
598     //track rotation
599     //   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
600     //   histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
601
602     ///// add histograms to Track classes /////
603
604     // Vertex
605     histos->UserHistogram("Track","ImpactParXY",";dXY (cm);#tracks", 500,-1.,1.,
606                           AliDielectronVarManager::kImpactParXY);
607     histos->UserHistogram("Track","ImpactParZ",";dZ (cm);#tracks", 600,-3.,3.,
608                           AliDielectronVarManager::kImpactParZ);
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,
614                           AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
615
616     // TPC
617     histos->UserHistogram("Track","TPCnCls",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
618                           AliDielectronVarManager::kNclsTPC);
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,
622                           AliDielectronVarManager::kNFclsTPCr);
623     histos->UserHistogram("Track","Ncl_NclFr",";N_{cls}^{TPC};N_{max.cls}^{TPC};#tracks",
624                           160,-0.5,159.5,160,-0.5,159.5,
625                           AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
626
627     // TRD
628     histos->UserHistogram("Track","NtrklTRD",";N_{trkl}^{TRD};#tracks",
629                           8,-0.5,7.5,
630                           AliDielectronVarManager::kTRDpidQuality);
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);
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);
641
642     ///// add histograms to Pair classes /////
643     histos->UserHistogram("Pair","InvMass",";m_{ee} (GeV/c^{2});#pairs",
644                           300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
645     histos->UserHistogram("Pair","Rapidity",";y;#pairs",
646                           100,-1.,1., AliDielectronVarManager::kY);
647     histos->UserHistogram("Pair","OpeningAngle","opening angle (rad.);#pairs",
648                           100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
649     histos->UserHistogram("Pair","Chi2NDF",";#chi^{2}/NDF;#pairs",
650                           100,0.,20, AliDielectronVarManager::kChi2NDF);
651     histos->UserHistogram("Pair","PsiPair",";#psi;#pairs",
652                           100,0.,3.15, AliDielectronVarManager::kPsiPair);
653     histos->UserHistogram("Pair","R",";r (cm)",
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);
659
660   }
661
662   //// FLOW results use tprofiles
663   if(cutDefinition == kTOFTRD || cutDefinition == kTOF || cutDefinition >= kEtaGap01) {
664
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);
670
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);
676
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);
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);
688
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);
694
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);
700
701     // 1D control histos
702     /*
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);
708
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);
714
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);
720     */
721   }
722
723   die->SetHistogramManager(histos);
724 }
725
726 void InitHF(AliDielectron* die, Int_t cutDefinition)
727 {
728   //
729   // Setup the HF arrays
730   //
731
732   AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
733   //  if(hasMC) hf->SetStepForMCGenerated();
734   hf->SetPairTypes(AliDielectronHF::kAll);
735   hf->SetVariable(AliDielectronVarManager::kM, 125, 0.0, 0.04*125);
736
737   hf->AddCutVariable(AliDielectronVarManager::kCentrality,  "0.,5.,10.,20.,40.,50.,60.,80."  );
738   hf->AddCutVariable(AliDielectronVarManager::kPt,          "0.,2.5,5.,100."                 );
739   hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, 8,-1.*TMath::Pi(),TMath::Pi());
740   //  hf->AddCutVariable(AliDielectronVarManager::kY,           1, -0.9, 0.9                     );
741   //  hf->AddCutVariable(AliDielectronVarManager::kPt,          "0.8, 1.0, 1.1, 1.2, 1.5, 100.0", kTRUE, AliDielectronHF::kBinToMax);
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);
746   //hf->AddCutVariable(AliDielectronVarManager::kNclsITS,         5,2.,7.,              kFALSE, kTRUE, AliDielectronHF::kBinToMax);
747   //hf->AddCutVariable(AliDielectronVarManager::kRunNumber,  GetRunNumbers());
748
749   die->SetHistogramArray(hf);
750 }
751
752 void InitCF(AliDielectron* die, Int_t cutDefinition)
753 {
754   //
755   // Setup the CF Manager if needed
756   //
757
758  AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
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
767   // pair variables
768   //    cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
769   cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
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
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());
778
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);
782   //    cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
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);
791
792   // mc steps
793   if(hasMC) {
794     if(cutDefinition==kTOFTRD) cf->SetStepForMCtruth();
795     cf->SetStepsForMCtruthOnly();
796     // cf->SetStepsForBackground();
797   }
798
799   die->SetCFManagerPair(cf);
800 }
801
802 void AddMCSignals(AliDielectron *die){
803   //Do we have an MC handler?
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);
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);
854   //   die->AddSignalMC(conversionElePairs);
855 }
856
857 void SetEtaCorrection()
858 {
859   if (AliDielectronPID::GetEtaCorrFunction()) return;
860   
861   TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
862   TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
863   if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
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)){
877       printf(" Using Eta Correction Function: %s\n",kName.Data());
878       AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
879     }
880   }
881 }
882
883 TVectorD *GetRunNumbers() {
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
887   };
888   
889   Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
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
891   };
892   
893   // selection via environement variable (works only for gsi trains)
894
895   
896   if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
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   }
907
908   if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
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   }
920
921   TVectorD *vec = new TVectorD(2);
922   (*vec)[0] = 0;
923   (*vec)[0] = 1;
924   return vec;
925      
926 }