]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C
ync gsi and aliroot trunk
[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;TOFTRD;TOFTRD2D;rec;Gam0;Gam01;Gam05;Gam10;Gam15;Gam20;EtaGap01;EtaGap02;EtaGap03;EtaGap04;EtaGap05;SubLS;SubRndm");
13 enum { kTPC=0, kTOF, kTRD, kTOFTRD, kTOFTRD2D, krec,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   if(hasMC) { // MONTE CARLO
39     switch(cutDefinition) {
40     case kTPC:       return 0x0;
41     case kTOF:       return 0x0;
42     case kTRD:       return 0x0;
43     case kTOFTRD:    return 0x0;
44     case kTOFTRD2D:  return 0x0;
45     case krec:       return 0x0;
46     case kGam0:      return 0x0;
47     case kGam01:     return 0x0;
48     case kGam05:     return 0x0;
49     case kGam10:     return 0x0;
50     case kGam15:     return 0x0;
51     case kGam20:     return 0x0;
52     case kEtaGap01:  return 0x0;
53     case kEtaGap02:  return 0x0;
54     case kEtaGap03:  return 0x0;
55     case kEtaGap04:  return 0x0;
56     case kEtaGap05:  return 0x0;
57     case kSubLS:     return 0x0;
58     case kSubRndm:   return 0x0;
59     }
60   } else { // COLLISION DATA
61     switch(cutDefinition) {
62     case kTPC:       return 0x0;
63       //            case kTOF:       return 0x0;
64     case kTRD:       return 0x0;
65       //            case kTOFTRD:    return 0x0;
66     case kTOFTRD2D:  return 0x0;
67     case krec:       return 0x0;
68     case kGam0:      return 0x0;
69     case kGam01:     return 0x0;
70     case kGam05:     return 0x0;
71     case kGam10:     return 0x0;
72     case kGam15:     return 0x0;
73     case kGam20:     return 0x0;
74     case kEtaGap01:  return 0x0;
75     case kEtaGap02:  return 0x0;
76     case kEtaGap03:  return 0x0;
77     case kEtaGap04:  return 0x0;
78     case kEtaGap05:  return 0x0;
79     case kSubLS:     return 0x0;
80     case kSubRndm:   return 0x0;
81     }
82   }
83
84   // create the actual framework object
85   TString name=Form("%02d",cutDefinition);
86   if (cutDefinition<arrNames->GetEntriesFast()){
87     name=arrNames->At(cutDefinition)->GetName();
88   }
89   AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("Track cuts: %s",name.Data()));
90   die->SetHasMC(hasMC);
91
92   printf(" Add %s %s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?"MC":""),name.Data(),list.Data());
93
94   // Monte Carlo Signals and TRD efficiency tables
95   if(hasMC) {
96     AddMCSignals(die);
97     printf(" Add %d MC signals \n",die->GetMCSignals()->GetEntriesFast());
98
99     // trd tables
100     /* if (list.Contains("LHC11a") ) {
101       TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
102       TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
103       if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
104
105       if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
106         Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
107       else
108         die->SetTRDcorrectionFilename(pidTab.Data());
109         }*/
110   }
111
112   // histogram setup
113   InitHistograms(die,cutDefinition);
114   printf(" Add %d class types to the histo manager \n",die->GetHistogramList()->GetEntries());
115
116   // cut setup
117   SetupTrackCuts(die,cutDefinition);
118   SetupPairCuts(die,cutDefinition);
119
120
121   // CF container setup, switched off
122   if(cutDefinition <  kEtaGap01 ||
123      cutDefinition == kSubRndm  ) {
124     if(0) InitCF(die,cutDefinition);
125     if(0) printf(" Add %d pair, %d leg vars, %p steps and %p bins to the container \n",
126                  die->GetCFManagerPair()->GetNvarsPair(),die->GetCFManagerPair()->GetNvarsLeg(),
127                  die->GetCFManagerPair()->GetContainer(), die->GetCFManagerPair()->GetContainer() );
128   }
129
130   // HF arrays setup
131   InitHF(die,cutDefinition);
132
133   // bgrd estimators
134   if(!hasMC) {
135       printf(" Activate bgrd estimators: ME and ROT \n");
136
137       // rotations
138       AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
139       rot->SetIterations(10);
140       rot->SetConeAnglePhi(TMath::Pi());
141       rot->SetStartAnglePhi(TMath::Pi());
142       //      die->SetTrackRotator(rot);
143
144       // mixing
145       AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
146       mix->AddVariable(AliDielectronVarManager::kZvPrim,     20,-10.,10.);
147       mix->AddVariable(AliDielectronVarManager::kCentrality,  8,  0.,80.);
148       mix->AddVariable(AliDielectronVarManager::kv0ACrpH2,    8,  TMath::Pi()/-2., TMath::Pi()/2.);
149       mix->SetMixType(AliDielectronMixingHandler::kAll);
150       mix->SetDepth(120);
151       die->SetMixingHandler(mix);
152
153       // TPC event plane configurations
154       Double_t gGap;
155       switch(cutDefinition) {
156       case kEtaGap01:   gGap=0.1;   break;
157       case kEtaGap02:   gGap=0.2;   break;
158       case kEtaGap03:   gGap=0.3;   break;
159       case kEtaGap04:   gGap=0.4;   break;
160       case kEtaGap05:   gGap=0.5;   break;
161       default: gGap=0.0;
162       }
163
164     AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
165     poi->AddCut(AliDielectronVarManager::kM,2.92,3.20);     // particles of interest, jpsi mass window
166     die->GetEventPlanePOIPreFilter().AddCuts(poi);
167
168     if(cutDefinition >= kEtaGap01 &&
169        cutDefinition <  kSubLS     ) {
170       AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
171       etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
172       die->GetEventPlanePreFilter().AddCuts(etaGap);
173     }
174
175     if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
176     die->SetPreFilterEventPlane();
177   }
178
179   // prefilter settings
180   die->SetPreFilterUnlikeOnly();
181   //die->SetPreFilterAllSigns();
182   //die->SetNoPairing();
183
184   // setup eta correction
185   //  if(isESD && list.Contains("LHC10h")) SetEtaCorrection();
186
187   // VZERO calibration
188   TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
189   if (!trainRoot.IsNull()) {
190     die->SetVZEROCalibrationFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroCalibrationLHC10h.root");
191     die->SetVZERORecenteringFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroRecenteringLHC10h.root");
192   }
193
194   return die;
195 }
196
197 //______________________________________________________________________________________
198 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
199 {
200   //
201   // Setup the track cuts
202   //
203
204   // Quality cuts
205   AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
206   //  cuts->AddDielectron(die);
207   die->GetTrackFilter().AddCuts(cuts);
208
209   // AOD track filter (needs to be first cut to speed up)
210   AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
211   //  trkFilter->AddCutQA(die->GetHistoManager());
212   trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual);
213   //  trkFilter->SetMinNCrossedRowsOverFindable(0.6);
214   if(!isESD) cuts->AddCut(trkFilter);
215
216   //Pt cut, should make execution a bit faster
217   AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
218   //  pt->AddCutQA(die->GetHistoManager());
219   pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30);    //0.8
220   cuts->AddCut(pt);
221
222   // track cuts ESD and AOD
223   AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
224   //  varCuts->AddCutQA(die->GetHistoManager());
225   varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
226   varCuts->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
227   varCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9);
228   varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
229   varCuts->AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
230   varCuts->AddCut(AliDielectronVarManager::kKinkIndex0,   0.0);
231   if(cutDefinition==kTOF || cutDefinition==kTOFTRD || cutDefinition==kTOFTRD2D)
232     varCuts->AddCut(AliDielectronVarManager::kTOFbeta,      0.2,   0.9, kTRUE);
233   cuts->AddCut(varCuts);
234   varCuts->Print();
235
236   AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
237   //  trkCuts->AddCutQA(die->GetHistoManager());
238   // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kAny);
239   // trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kFirst);
240   trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 15); // ITS-4 = 1+2+4+8
241   // trkCuts->SetMaxWaivedITSNcls(1);
242   trkCuts->SetRequireITSRefit(kTRUE);
243   trkCuts->SetRequireTPCRefit(kTRUE);
244   cuts->AddCut(trkCuts);
245
246   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
247   AliDielectronPID *pid = new AliDielectronPID("PID","PID");
248   //  pid->AddCutQA(die->GetHistoManager());
249   ////////////////////////////////// DATA
250   if(!hasMC) {
251     pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE);
252     pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
253
254     if(cutDefinition==kTRD || cutDefinition==kTOFTRD)
255       pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
256                   AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
257
258     if(cutDefinition==kTOFTRD2D)
259       pid->AddCut(AliDielectronPID::kTRDeleEff2D,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
260                   AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
261   }
262
263   ////////////////////////////////// MC
264   if(hasMC) {
265
266     // electron
267     Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
268     Double_t resolution=0.0549;
269     Double_t BBpro[5] = {0};
270     Double_t BBpio[5] = {0};
271
272     for(Int_t icent=0; icent<8; icent++) {
273
274       switch (icent) {
275         case 0:  // 0-10%
276           BBpro[0] = 0.031555;  BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11;  BBpro[3] = 2.05594; BBpro[4] = 5.99848;
277           BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11;   BBpio[3] = 5.27988; BBpio[4] = 4.3108;
278           break;
279         case 1:  // 10-20%
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.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11;  BBpio[3] = 5.24831; BBpio[4] = 4.31093;
282           break;
283         case 2:  // 20-30%
284           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
285           BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11;  BBpio[3] = 5.74458; BBpio[4] = 4.32459;
286           break;
287         case 3:  // 30-40%
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.026294;  BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11;  BBpio[3] = 5.28808; BBpio[4] = 4.31301;
290           break;
291         case 4:  // 40-50%
292           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
293           BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
294           break;
295         case 5:  // 50-60%
296           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
297           BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
298           break;
299         case 6:  // 60-70%
300           BBpro[0] = 0.031555;  BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11;  BBpro[3] = 2.05594; BBpro[4] = 5.99848;
301           BBpio[0] = 0.026302;  BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11;  BBpio[3] = 5.2465;  BBpio[4] = 4.31094;
302           break;
303         case 7:  // 70-80%
304           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
305           BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
306           break;
307         case 8:  // 80-90%
308           BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11;   BBpro[3] = 2.07912; BBpro[4] = 5.99986;
309           BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11;  BBpio[3] = 5.24831; BBpio[4] = 4.31093;
310           break;
311         case 9:  // 90-100%
312           BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11;   BBpro[3] = 3.2431;  BBpro[4] = 5.93388;
313           BBpio[0] = 0.027079;  BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11;  BBpio[3] = 9.61382; BBpio[4] = 5.99372;
314           break;
315       }
316
317
318       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.);
319
320       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.);
321
322       //LHC11a10b
323       if (list.Contains("LHC11a10b")) {
324         printf(" LHC11a10b parameters\n");
325         ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
326         ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
327
328         // proton cut
329         pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
330                     kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
331         // pion cut
332         pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
333                     kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
334       }
335     }
336
337     // shifts for the nSigma electrons
338     TGraph* nSigmaCorrection = new TGraph();
339     // LHC11a10b
340     if (list.Contains("LHC11a10b")) {
341       nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
342       nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
343       pid->SetCorrGraph(nSigmaCorrection);
344     }
345
346   } //hasMC
347
348   ////////////////////////////////// DATA + MC
349   // pid cuts TPC + TOF & TRD
350   pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.,4.);
351
352   if(cutDefinition==kTOF || cutDefinition==kTOFTRD || cutDefinition==kTOFTRD2D)
353     pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
354
355   if(cutDefinition!=krec) cuts->AddCut(pid);
356   /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
357
358
359   // exclude conversion electrons selected by the tender
360   AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
361   noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
362   cuts->AddCut(noconv);
363
364 }
365
366 //______________________________________________________________________________________
367 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
368 {
369   //
370   // Setup the pair cuts
371   //
372
373   // conversion rejection
374   Double_t gCut;
375   switch(cutDefinition) {
376     case kTPC:    gCut=0.05;  break;
377     case krec:    gCut=0.05;  break;
378     case kGam10:  gCut=0.1;   break;
379     case kGam15:  gCut=0.15;  break;
380     case kGam20:  gCut=0.2;   break;
381     case kGam05:  gCut=0.05;  break;
382     case kGam01:  gCut=0.01;  break;
383     case kGam0:   gCut=0.0;   break;
384     default: gCut=0.05;             // default
385   }
386
387   AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
388 //  gammaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0,   0.1,  kTRUE);
389 //  gammaCuts->AddCut(AliDielectronVarManager::kLegDist,      0.0,   0.25, kTRUE);
390 //  gammaCuts->AddCut(AliDielectronVarManager::kR,            3.0,   90.0, kTRUE);
391 //  gammaCuts->AddCut(AliDielectronVarManager::kPsiPair,      0.0,   0.05, kTRUE);
392 //  gammaCuts->AddCut(AliDielectronVarManager::kChi2NDF,      0.0,   10.0, kTRUE);
393   gammaCuts->AddCut(AliDielectronVarManager::kM,            0.0,   gCut);
394   die->GetPairPreFilter().AddCuts(gammaCuts);
395
396
397   // rapidity selection
398   //  AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
399   // rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
400   // die->GetPairFilter().AddCuts(rapCut);
401
402 }
403
404 //______________________________________________________________________________________
405 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
406 {
407   //
408   // Initialise the histograms
409   //
410
411   // booleans for histo selection
412   Bool_t bHistTrackQA=kFALSE, bHistEvts = kFALSE, bHistPair = kFALSE, bHistPairME = kFALSE, bHistFlow = kFALSE, bHistFlowQA=kFALSE;
413   switch (cutDefinition) {
414   case kTPC:
415   case kTOF:      bHistEvts=kTRUE; bHistFlow=kTRUE; bHistPair=kTRUE; bHistPairME=kTRUE; break;
416   case kTRD:
417   case kTOFTRD:
418   case kTOFTRD2D: bHistFlow=kTRUE; bHistPair=kTRUE; break;
419   case krec:
420   case kITScls:
421   case kITSamy:
422   case kDCA:
423   case kChi:      break;
424   case kEtaGap01:
425   case kEtaGap02:
426   case kEtaGap03:
427   case kEtaGap04:
428   case kEtaGap05:
429   case kSubRndm:  bHistFlow=kTRUE; bHistFlowQA=kTRUE; break;
430   case kSubLS:    bHistFlow=kTRUE; bHistFlowQA=kTRUE; bHistEvts=kTRUE; break;
431   case kGam0:
432   case kGam01:
433   case kGam05:
434   case kGam10:
435   case kGam15:
436   case kGam20:    break;
437   }
438
439
440   //Setup histogram Manager
441   AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
442
443   //add histograms to event class
444   histos->AddClass("Event");
445   histos->UserHistogram("Event","Centrality","Centrality;centrality (%);events",
446                         100, 0.0, 100.0,
447                         AliDielectronVarManager::kCentrality);
448
449   ////// EVENT HISTOS /////
450   if(bHistEvts) {
451     histos->UserHistogram("Event","RunNumber","Events per run;run;events",
452                           GetRunNumbers(),
453                           AliDielectronVarManager::kRunNumber);
454     histos->UserHistogram("Event","RunNumber_VtxZ",";run;z_{vtx} (cm)",
455                           GetRunNumbers(), AliDielectronHelper::MakeLinBinning(150,-15.,15.),
456                           AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kZvPrim);
457     histos->UserHistogram("Event","RunNumber_Multiplicity",";run;multiplicity V0",
458                           GetRunNumbers(), AliDielectronHelper::MakeLinBinning(250,0.,25000.),
459                           AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kMultV0);
460     histos->UserHistogram("Event","RunNumber_v0ArpH2",";run;#Psi_{2}^{V0A} (rad.)",
461                           GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
462                           AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0ArpH2);
463     histos->UserHistogram("Event","RunNumber_v0CrpH2",";run;#Psi_{2}^{V0C} (rad.)",
464                           GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
465                           AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kv0CrpH2);
466     histos->UserHistogram("Event","RunNumber_TPCrpH2",";run;#Psi_{2}^{TPC} (rad.)",
467                           GetRunNumbers(), AliDielectronHelper::MakeLinBinning(100,-2.,+2.),
468                           AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kTPCrpH2);
469
470     histos->UserHistogram("Event","VtxZ","Vertex Z;z_{vtx} (cm)", 300,-15.,15.,
471                           AliDielectronVarManager::kZvPrim);
472     histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0;events", 500,0.,25000.,
473                           AliDielectronVarManager::kMultV0);
474     histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
475                           100,0.,100., 250,0.,25000.,
476                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
477     histos->UserProfile("Event","Cent_Nacc", "accepted tracks;centrality (%)",
478                         AliDielectronVarManager::kNacc,
479                         "0.,5.,10.,20.,40.,50.,60.,80.,100.",
480                         AliDielectronVarManager::kCentrality);
481     histos->UserProfile("Event","Cent_NVtxContrib", "number of vertex contributors;centrality (%)",
482                         AliDielectronVarManager::kNVtxContrib,
483                         100,0.,100.,
484                         AliDielectronVarManager::kCentrality);
485   } //hist: event
486
487
488   ////// FLOW //////
489   if(bHistFlow) {
490
491     // RP angles versus centrality
492     histos->UserHistogram("Event","Cent_TPCrpH2","TPC RP;centrality (%);#Psi^{TPC} (rad.)",
493                           10,0.,100.,100,-2.,2.,
494                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCrpH2);
495     histos->UserHistogram("Event","Cent_TPCsub1rpH2","TPC-1 RP;centrality (%);#Psi^{sub1} (rad.)",
496                           10,0.,100.,100,-2.,2.,
497                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub1rpH2);
498     histos->UserHistogram("Event","Cent_TPCsub2rpH2","TPC-2 RP;centrality (%);#Psi^{sub2} (rad.)",
499                           10,0.,100.,100,-2.,2.,
500                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub2rpH2);
501
502     histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{V0AC} (rad.)",
503                           10,0.,100.,100,-2.0,2.0,
504                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
505     histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A} (rad.)",
506                           10,0.,100.,100,-2.0,2.0,
507                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
508     histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C} (rad.)",
509                           10,0.,100.,100,-2.0,2.0,
510                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
511
512     histos->UserHistogram("Event","Cent_v0A0rpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A0} (rad.)",
513                           10,0.,100.,100,-2.0,2.0,
514                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0A0rpH2);
515     histos->UserHistogram("Event","Cent_v0A3rpH2","VZERO-A RP;centrality (%);#Psi_{2}^{V0A3} (rad.)",
516                           10,0.,100.,100,-2.0,2.0,
517                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0A3rpH2);
518     histos->UserHistogram("Event","Cent_v0C0rpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C0} (rad.)",
519                           10,0.,100.,100,-2.0,2.0,
520                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0C0rpH2);
521     histos->UserHistogram("Event","Cent_v0C3rpH2","VZERO-C RP;centrality (%);#Psi_{2}^{V0C3} (rad.)",
522                           10,0.,100.,100,-2.0,2.0,
523                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0C3rpH2);
524   } // hist: flow
525
526   if(bHistFlowQA) {
527     // TPC event plane
528     histos->UserHistogram("Event","TPCxH2","TPC Qx component;TPCxH2",
529                           100,-1500.,1500.,
530                           AliDielectronVarManager::kTPCxH2);
531     histos->UserHistogram("Event","TPCyH2","TPC Qy component;TPCyH2",
532                           100,-1500.,1500.,
533                           AliDielectronVarManager::kTPCyH2);
534     histos->UserHistogram("Event","TPCrpH2","TPC reaction plane; #Psi^{TPC}",
535                           100,-2.,2.,
536                           AliDielectronVarManager::kTPCrpH2);
537     histos->UserHistogram("Event","TPCsub1rpH2","TPC reaction plane sub1; #Psi^{sub1}",
538                           100,-2.,2.,
539                           AliDielectronVarManager::kTPCsub1rpH2);
540     histos->UserHistogram("Event","TPCsub2rpH2","TPC reaction plane sub2; #Psi^{sub2}",
541                           100,-2.,2.,
542                           AliDielectronVarManager::kTPCsub2rpH2);
543     histos->UserHistogram("Event","TPCsub12DiffH2","TPC reaction plane diff; cos(2(#Psi^{sub1}-#Psi^{sub2}))",
544                           100,-1.,1.,
545                           AliDielectronVarManager::kTPCsub12DiffH2);
546     /* // uncorrected eventplane
547      histos->UserHistogram("Event","TPCxH2uc","TPC Qx component;TPCxH2uc",
548      100,-1500.,1500.,
549      AliDielectronVarManager::kTPCxH2uc);
550      histos->UserHistogram("Event","TPCyH2uc","TPC Qy component;TPCyH2uc",
551      100,-1500.,1500.,
552      AliDielectronVarManager::kTPCyH2uc);
553      histos->UserHistogram("Event","TPCrpH2uc","TPC reaction plane;TPCrpH2uc",
554      100,-2.,2.,
555      AliDielectronVarManager::kTPCrpH2uc);
556      histos->UserHistogram("Event","TPCsub1xH2uc","TPC Qx component sub1;TPCsub1xH2uc",
557      100,-1500.,1500.,
558      AliDielectronVarManager::kTPCsub1xH2uc);
559      histos->UserHistogram("Event","TPCsub1yH2uc","TPC Qy component sub1;TPCsub1yH2uc",
560      100,-1500.,1500.,
561      AliDielectronVarManager::kTPCsub1yH2uc);
562      histos->UserHistogram("Event","TPCsub1rpH2uc","TPC reaction plane sub1;TPCsub1rpH2uc",
563      100,-2.,2.,
564      AliDielectronVarManager::kTPCsub1rpH2uc);
565      histos->UserHistogram("Event","TPCsub2xH2uc","TPC Qx component sub2;TPCsub2xH2uc",
566      100,-1500.,1500.,
567      AliDielectronVarManager::kTPCsub2xH2uc);
568      histos->UserHistogram("Event","TPCsub2yH2uc","TPC Qy component sub2;TPCsub2yH2uc",
569      100,-1500.,1500.,
570      AliDielectronVarManager::kTPCsub2yH2uc);
571      histos->UserHistogram("Event","TPCsub2rpH2uc","TPC reaction plane sub2;TPCsub2rpH2uc",
572      100,-2.,2.,
573      AliDielectronVarManager::kTPCsub2rpH2uc);
574      histos->UserHistogram("Event","TPCsub12DiffH2uc","TPC reaction plane difference;TPCsub12DiffH2uc",
575      100,-1.,1.,
576      AliDielectronVarManager::kTPCsub12DiffH2uc);
577     */
578
579     // EP resolution calculation
580     histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{TPC}))",
581                           10,0.,100.,300,-1.0,1.0,
582                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2);
583     histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{V0C}-#Psi^{TPC}))",
584                           10,0.,100.,300,-1.0,1.0,
585                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2);
586     histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{V0A}-#Psi^{V0C}))",
587                           10,0.,100.,300,-1.0,1.0,
588                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2);
589     histos->UserHistogram("Event","Cent_TPCsub12DiffH2","TPC-sub1 TPC-sub2 diff;centrality (%);cos(2(#Psi^{sub1}-#Psi^{sub2}))",
590                           10,0.,100.,300,-1.0,1.0,
591                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2);
592     // detector effects
593     histos->UserHistogram("Event","Cent_TPCsub12DiffH2Sin","TPC-sub1 TPC-sub2 diff;centrality (%);sin(2(#Psi^{sub1}-#Psi^{sub2}))",
594                           10,0.,100.,300,-1.0,1.0,
595                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kTPCsub12DiffH2Sin);
596     // recentering stuff
597     histos->UserProfile("Pair","TPCxH2-Cent-RunNumber", ";centrality (%);run;#LTQ_{x}#GT",
598                         AliDielectronVarManager::kTPCxH2,
599                         AliDielectronHelper::MakeLinBinning(10, 0.,100.), GetRunNumbers(),
600                         AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
601     histos->UserProfile("Pair","TPCyH2-Cent-RunNumber", ";centrality (%);run;#LTQ_{x}#GT",
602                         AliDielectronVarManager::kTPCyH2,
603                         AliDielectronHelper::MakeLinBinning(10, 0.,100.), GetRunNumbers(),
604                         AliDielectronVarManager::kCentrality, AliDielectronVarManager::kRunNumber);
605
606   } //hist: flowQA
607
608
609   // RUN QA
610   if(bHistTrackQA) {
611
612     // Event QA
613     histos->UserHistogram("Event","RunNumber","Events per run;run;#events",
614                           GetRunNumbers(), AliDielectronVarManager::kRunNumber);
615     histos->UserProfile("Event","RunNumber-Centrality",";run;#LTcentrality#GT (%)", AliDielectronVarManager::kCentrality,
616                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
617     histos->UserProfile("Event","RunNumber-CentralitySPD",";run;#LTcentrality_{SPD}#GT (%)", AliDielectronVarManager::kCentralitySPD,
618                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
619     histos->UserProfile("Event","RunNumber-VtxZ",";run;#LTz_{vtx}#GT (cm)", AliDielectronVarManager::kZvPrim,
620                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
621     histos->UserProfile("Event","RunNumber-sigVtxZ",";run;#LTRMS(z_{vtx})#GT (cm)", AliDielectronVarManager::kZvPrim,
622                         GetRunNumbers(), AliDielectronVarManager::kRunNumber, "s;-10;10");
623
624     //Track classes
625     histos->SetReservedWords("Track");
626     for (Int_t i=0; i<2; ++i) histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
627
628     histos->UserProfile("Track","RunNumber-Pt",";run;#LTp_{T}#GT (GeV/c)", AliDielectronVarManager::kPt,
629                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
630     histos->UserProfile("Track","RunNumber-Eta",";run;#LT#eta#GT", AliDielectronVarManager::kEta,
631                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
632     histos->UserProfile("Track","RunNumber-Phi",";run;#LT#varphi#GT", AliDielectronVarManager::kPhi,
633                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
634     histos->UserProfile("Track","RunNumber-ImpactParXY",";run;#LTdXY#GT (cm)", AliDielectronVarManager::kImpactParXY,
635                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
636     histos->UserProfile("Track","RunNumber-ImpactParZ",";run;#LTdZ#GT (cm)", AliDielectronVarManager::kImpactParZ,
637                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
638     // TPC
639     histos->UserProfile("Track","RunNumber-NclsTPC",";run;#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
640                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
641     histos->UserProfile("Track","RunNumber_Cent-NclsTPC",";run;centrality (%);#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
642                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
643                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
644     histos->UserProfile("Track","RunNumber_Eta-NclsTPC",";run;#eta;#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
645                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
646                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
647     histos->UserProfile("Track","RunNumber_Phi-NclsTPC",";run;#varphi;#LTN_{cls}^{TPC}#GT", AliDielectronVarManager::kNclsTPC,
648                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
649                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
650
651     // ITS
652     histos->UserProfile("Track","RunNumber-NclsITS",";run;#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
653                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
654     histos->UserProfile("Track","RunNumber_Cent-NclsITS",";run;centrality (%);#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
655                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
656                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
657     histos->UserProfile("Track","RunNumber_Eta-NclsITS",";run;#eta;#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
658                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
659                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
660     histos->UserProfile("Track","RunNumber_Phi-NclsITS",";run;#varphi;#LTN_{cls}^{ITS}#GT", AliDielectronVarManager::kNclsITS,
661                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
662                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
663
664     // TPC PID
665     histos->UserProfile("Track","RunNumber-TPCnSigmaEle",";run;#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
666                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
667     histos->UserProfile("Track","RunNumber_Cent-TPCnSigmaEle",";run;centrality (%);#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
668                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
669                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
670     histos->UserProfile("Track","RunNumber_Eta-TPCnSigmaEle",";run;#eta;#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
671                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
672                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
673     histos->UserProfile("Track","RunNumber_Phi-TPCnSigmaEle",";run;#varphi;#LTn#sigma_{ele}^{TPC}#GT", AliDielectronVarManager::kTPCnSigmaEle,
674                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
675                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
676     // TOF PID
677     histos->UserProfile("Track","RunNumber-TOFnSigmaEle",";run;#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
678                         GetRunNumbers(), AliDielectronVarManager::kRunNumber);
679     histos->UserProfile("Track","RunNumber_Cent-TOFnSigmaEle",";run;centrality (%);#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
680                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(32, 0.,80.),
681                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kCentrality);
682     histos->UserProfile("Track","RunNumber_Eta-TOFnSigmaEle",";run;#eta;#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
683                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(20, -1.,+1.),
684                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kEta);
685     histos->UserProfile("Track","RunNumber_Phi-TOFnSigmaEle",";run;#varphi;#LTn#sigma_{ele}^{TOF}#GT", AliDielectronVarManager::kTOFnSigmaEle,
686                         GetRunNumbers(), AliDielectronHelper::MakeLinBinning(18, 0.,TMath::Pi()),
687                         AliDielectronVarManager::kRunNumber, AliDielectronVarManager::kPhi);
688   }
689
690
691   if(bHistPair) {
692     //Initialise histogram classes
693     histos->SetReservedWords("Track;Pair");
694
695     //Pair classes
696     // to fill also mixed event histograms loop until 7 or 10
697     for (Int_t i=0; i<(bHistPairME ? 8 : 3); ++i){
698       histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
699     }
700     //legs from pair (fill SE)
701     for (Int_t i=0; i<3; ++i){
702       histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
703     }
704     //Track classes
705     //to fill also track info from 2nd event loop until 2
706     for (Int_t i=0; i<2; ++i){
707       histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
708     }
709     //track rotation
710     //   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
711     //   histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
712
713     // Vertex
714     histos->UserHistogram("Track","ImpactParXY",";dXY (cm);#tracks", 500,-1.,1.,
715                           AliDielectronVarManager::kImpactParXY);
716     histos->UserHistogram("Track","ImpactParZ",";dZ (cm);#tracks", 600,-3.,3.,
717                           AliDielectronVarManager::kImpactParZ);
718
719     // Kinematics
720     histos->UserHistogram("Track","pt",";p_{T} (GeV/c);#tracks", 400,0,20.,
721                           AliDielectronVarManager::kPt);
722     histos->UserHistogram("Track","Eta_Phi",";#eta;#varphi;#tracks", 200,-1,1,200,0,6.285,
723                           AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
724
725     // TPC
726     histos->UserHistogram("Track","TPCnCls",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
727                           AliDielectronVarManager::kNclsTPC);
728     histos->UserHistogram("Track","TPCsignalN",";N_{cls}^{TPC};#tracks", 160,-0.5,159.5,
729                           AliDielectronVarManager::kTPCsignalN);
730     histos->UserHistogram("Track","NclFr",";N_{max.cls}^{TPC};#tracks", 160,-0.5,159.5,
731                           AliDielectronVarManager::kNFclsTPCr);
732     histos->UserHistogram("Track","Ncl_NclFr",";N_{cls}^{TPC};N_{max.cls}^{TPC};#tracks",
733                           160,-0.5,159.5,160,-0.5,159.5,
734                           AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
735
736     // TRD
737     histos->UserHistogram("Track","NtrklTRD",";N_{trkl}^{TRD};#tracks",
738                           8,-0.5,7.5,
739                           AliDielectronVarManager::kTRDpidQuality);
740
741     // PID
742     histos->UserHistogram("Track","dEdx_P",";p (GeV/c);TPC signal (arb units);#tracks",
743                           400,0.2,20.,200,0.,200.,
744                           AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
745     histos->UserHistogram("Track","TPCnSigmaEle_P","p (GeV/c);n#sigma_{ele}^{TPC};#tracks",
746                           400,0.2,20.,200,-10.,10.,
747                           AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
748     histos->UserHistogram("Track","TOFbeta_P",";p (GeV/c);#beta;#tracks",
749                           250,0.0,5.0,300,0.,1.2,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta,kTRUE);
750
751     ///// add histograms to Pair classes /////
752     histos->UserHistogram("Pair","InvMass",";m_{ee} (GeV/c^{2});#pairs",
753                           300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
754     histos->UserHistogram("Pair","Rapidity",";y;#pairs",
755                           100,-1.,1., AliDielectronVarManager::kY);
756     histos->UserHistogram("Pair","Pt",";p_{T} (GeV/c);#pairs",
757                           400,0,20., AliDielectronVarManager::kPt);
758     histos->UserHistogram("Pair","OpeningAngle",";opening angle (rad.);#pairs",
759                           100,0.,3.15, AliDielectronVarManager::kOpeningOBAngle);
760     histos->UserHistogram("Pair","Chi2NDF",";#chi^{2}/NDF;#pairs",
761                           100,0.,20, AliDielectronVarManager::kChi2NDF);
762     histos->UserHistogram("Pair","PsiPair",";#psi;#pairs",
763                           100,0.,3.15, AliDielectronVarManager::kPsiPair);
764     histos->UserHistogram("Pair","R",";r (cm)",
765                           200,0.,100., AliDielectronVarManager::kR);
766     histos->UserHistogram("Pair","LegDist",";dca (cm)",
767                           50,0.,5., AliDielectronVarManager::kLegDist);
768     histos->UserHistogram("Pair","LegDistXY",";dca_{xy} (cm)",
769                           50,0.,5., AliDielectronVarManager::kLegDistXY);
770
771     //// FLOW results use tprofiles
772     if(bHistFlow) {
773       histos->UserProfile("Pair","M_Cent_Pt_v0ACrpH2FlowV2",
774                           "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
775                           AliDielectronVarManager::kv0ACrpH2FlowV2,
776                           125,0.,125*.04, 10, 0.,100., 200,0.,100.,
777                           AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
778       histos->UserProfile("Pair","M_Cent_Pt_v0ArpH2FlowV2",
779                           "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
780                           AliDielectronVarManager::kv0ArpH2FlowV2,
781                           125,0.,125*.04, 10, 0.,100., 200,0.,100.,
782                           AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
783       histos->UserProfile("Pair","M_Cent_Pt_v0CrpH2FlowV2",
784                           "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
785                           AliDielectronVarManager::kv0CrpH2FlowV2,
786                           125,0.,125*.04, 10, 0.,100., 200,0.,100.,
787                           AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
788     } //hist: flow
789   } //hist: pair
790
791
792   ////// MONTE CARLO //////
793   /*
794     if(cutDefinition == kTOFTRD && hasMC) {
795     histos->AddClass("MCEvent");
796     histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
797     10,0.,100., 21,-0.5,20.5,
798     AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
799     }
800   */
801
802   //  histos->UserHistogram("Track","TRDprobEle",";P_{ele}^{TRD};#tracks", 
803   //                    100,0.,1.,            AliDielectronVarManager::kTRDprobEle);
804   
805   die->SetHistogramManager(histos);
806 }
807
808 void InitHF(AliDielectron* die, Int_t cutDefinition)
809 {
810   //
811   // Setup the HF arrays
812   //
813
814   AliDielectronHF *hf=new AliDielectronHF(die->GetName(),die->GetTitle());
815   //  if(hasMC) hf->SetStepForMCGenerated();
816   hf->SetPairTypes(AliDielectronHF::kAll);
817   hf->SetVariable(AliDielectronVarManager::kM, 125, 0.0, 0.04*125);
818
819   hf->AddCutVariable(AliDielectronVarManager::kCentrality,  "0.,5.,10.,20.,40.,50.,60.,80."  );
820   hf->AddCutVariable(AliDielectronVarManager::kPt,          "0.,2.5,5.,100."                 );
821   hf->AddCutVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2, 8,-1.*TMath::Pi(),TMath::Pi());
822   //  hf->AddCutVariable(AliDielectronVarManager::kY,           1, -0.9, 0.9                     );
823   //  hf->AddCutVariable(AliDielectronVarManager::kPt,          "0.8, 1.0, 1.1, 1.2, 1.5, 100.0", kTRUE, AliDielectronHF::kBinToMax);
824   // hf->AddCutVariable(AliDielectronVarManager::kNclsTPC,     "70,90,100,120,160",              kTRUE, AliDielectronHF::kBinToMax);
825   //  hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaEle,"-4,-3,-2.5,-2,2,2.5,3,4",        kTRUE, AliDielectronHF::kSymBin);
826   //hf->AddCutVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100.",                 kTRUE, AliDielectronHF::kBinToMax);
827   //hf->AddCutVariable(AliDielectronVarManager::kITSLayerFirstCls,4,0.,4.,              kFALSE, kTRUE, AliDielectronHF::kBinFromMin);
828   //hf->AddCutVariable(AliDielectronVarManager::kNclsITS,         5,2.,7.,              kFALSE, kTRUE, AliDielectronHF::kBinToMax);
829   //hf->AddCutVariable(AliDielectronVarManager::kRunNumber,  GetRunNumbers());
830
831   die->SetHistogramArray(hf);
832 }
833
834 void InitCF(AliDielectron* die, Int_t cutDefinition)
835 {
836   //
837   // Setup the CF Manager if needed
838   //
839
840  AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
841
842   // event variables
843   cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
844   //    if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
845   if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
846   if(hasMC)  cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
847   if(hasMC)  cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() );
848
849   // pair variables
850   //    cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
851   cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
852   cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
853   cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
854   if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
855   //    if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
856
857   // flow variables
858   cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi());
859   cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2,4,-1.*TMath::Pi(),TMath::Pi());
860
861   // leg variables
862   cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
863   if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
864   //    cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE);
865   //    cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);
866   cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
867   cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
868   cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
869   //    cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
870   //    cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
871   //    cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
872   //    if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
873
874   // mc steps
875   if(hasMC) {
876     if(cutDefinition==kTOFTRD) cf->SetStepForMCtruth();
877     cf->SetStepsForMCtruthOnly();
878     // cf->SetStepsForBackground();
879   }
880
881   die->SetCFManagerPair(cf);
882 }
883
884 void AddMCSignals(AliDielectron *die){
885   //Do we have an MC handler?
886   if (!hasMC) return;
887   
888   AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
889   inclusiveJpsi->SetLegPDGs(11,-11);
890   inclusiveJpsi->SetMotherPDGs(443,443);
891   inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
892   inclusiveJpsi->SetFillPureMCStep(kTRUE);
893   inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
894   inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
895   die->AddSignalMC(inclusiveJpsi);
896   
897   AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi");   // prompt J/psi (not from beauty decays)
898   promptJpsi->SetLegPDGs(11,-11);
899   promptJpsi->SetMotherPDGs(443,443);
900   promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
901   promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
902   promptJpsi->SetFillPureMCStep(kTRUE);
903   promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
904   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
905   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
906   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
907   die->AddSignalMC(promptJpsi);
908   
909   AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
910   beautyJpsi->SetLegPDGs(11,-11);
911   beautyJpsi->SetMotherPDGs(443,443);
912   beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
913   beautyJpsi->SetGrandMotherPDGs(500,500);
914   beautyJpsi->SetFillPureMCStep(kTRUE);
915   beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
916   beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
917   beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
918   die->AddSignalMC(beautyJpsi);
919   
920   AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi");   // embedded J/psi
921   directJpsi->SetLegPDGs(11,-11);
922   directJpsi->SetMotherPDGs(443,443);
923   directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
924   directJpsi->SetFillPureMCStep(kTRUE);
925   directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
926   directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
927   directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
928   directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
929   die->AddSignalMC(directJpsi);
930   
931   AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs");  // pairs made from conversion (may be also from 2 different conversions)
932   conversionElePairs->SetLegPDGs(11,-11);
933   conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
934   conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
935   conversionElePairs->SetMotherPDGs(22,22);
936   //   die->AddSignalMC(conversionElePairs);
937
938   // prompt J/psi radiative channel
939   AliDielectronSignalMC* promptJpsiRad = new AliDielectronSignalMC("promptJpsiRad","Prompt J/psi Radiative");   // prompt J/psi (not from beauty decays)
940   promptJpsiRad->SetLegPDGs(11,-11);
941   promptJpsiRad->SetMotherPDGs(443,443);
942   promptJpsiRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
943   promptJpsiRad->SetMothersRelation(AliDielectronSignalMC::kSame);
944   promptJpsiRad->SetFillPureMCStep(kTRUE);
945   promptJpsiRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
946   promptJpsiRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
947   promptJpsiRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
948   promptJpsiRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
949   promptJpsiRad->SetJpsiRadiative(AliDielectronSignalMC::kIsRadiative);
950   die->AddSignalMC(promptJpsiRad);
951
952   // prompt J/psi Non radiative channel
953   AliDielectronSignalMC* promptJpsiNonRad = new AliDielectronSignalMC("promptJpsiNonRad","Prompt J/psi non-Radiative");   // prompt J/psi (not from beauty decays)
954   promptJpsiNonRad->SetLegPDGs(11,-11);
955   promptJpsiNonRad->SetMotherPDGs(443,443);
956   promptJpsiNonRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
957   promptJpsiNonRad->SetMothersRelation(AliDielectronSignalMC::kSame);
958   promptJpsiNonRad->SetFillPureMCStep(kTRUE);
959   promptJpsiNonRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
960   promptJpsiNonRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
961   promptJpsiNonRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
962   promptJpsiNonRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
963   promptJpsiNonRad->SetJpsiRadiative(AliDielectronSignalMC::kIsNotRadiative);
964   die->AddSignalMC(promptJpsiNonRad);
965 }
966
967 void SetEtaCorrection()
968 {
969   if (AliDielectronPID::GetEtaCorrFunction()) return;
970   
971   TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
972   TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
973   if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
974   if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
975     Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
976     return;
977   }
978
979   TFile f(etaMap.Data());
980   if (!f.IsOpen()) return;
981   TList *keys=f.GetListOfKeys();
982
983   for (Int_t i=0; i<keys->GetEntries(); ++i){
984     TString kName=keys->At(i)->GetName();
985     TPRegexp reg(kName);
986     if (reg.MatchB(list)){
987       printf(" Using Eta Correction Function: %s\n",kName.Data());
988       AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
989     }
990   }
991 }
992
993 TVectorD *GetRunNumbers() {
994   
995   Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
996     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
997   };
998   
999   Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
1000     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
1001   };
1002   
1003   // selection via environement variable (works only for gsi trains)
1004
1005   
1006   if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
1007     Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
1008     TVectorD *vec = new TVectorD(size+1);
1009     
1010     (*vec)[size] = runLHC10h[0] + 1;
1011     for (int i = 0; i < size; i++) {
1012       (*vec)[i] = runLHC10h[size-1-i];
1013     }
1014     //    vec->Print("");
1015     return vec;
1016   }
1017
1018   if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
1019     
1020     Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
1021     TVectorD *vec = new TVectorD(size+1);
1022     
1023     (*vec)[size] = runLHC11h[0] + 1;
1024     for (int i = 0; i < size; i++) {
1025       (*vec)[i] = runLHC11h[size-1-i];
1026     }
1027     //   vec->Print("");
1028     return vec;
1029   }
1030
1031   TVectorD *vec = new TVectorD(2);
1032   (*vec)[0] = 0;
1033   (*vec)[1] = 1;
1034   return vec;
1035      
1036 }