]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C
-change pt cut
[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
4 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
5 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
6
7 void AddMCSignals(AliDielectron *die);
8 void SetEtaCorrection();
9 TVectorD *GetRunNumbers();
10
11 TString names=("TPC;TOF;TRD;rec;TOFTRD;TOFTRD2;ITScls;ITSamy;dca;chi2;Gam0;Gam01;Gam05;Gam10;Gam15;Gam20;EtaGap01;EtaGap02;EtaGap03;EtaGap04;EtaGap05;SubLS;SubRndm");
12 enum { kTPC=0, kTOF, kTRD, krec, kTOFTRD, kTOFTRD2, kITScls, kITSamy, kDCA, kChi, kGam0, kGam01, kGam05, kGam10, kGam15, kGam20, kEtaGap01, kEtaGap02, kEtaGap03, kEtaGap04, kEtaGap05, kSubLS, kSubRndm };
13
14 TObjArray *arrNames=names.Tokenize(";");
15 const Int_t nDie=arrNames->GetEntries();
16
17 Bool_t  isESD = kTRUE;
18 Bool_t  hasMC = kFALSE;
19 TString list  = gSystem->Getenv("LIST");
20
21
22 AliDielectron* ConfigJpsi_jb_PbPb(Int_t cutDefinition, TString prod="")
23 {
24   //
25   // Setup the instance of AliDielectron
26   //
27   
28   // find mc or not?
29   if( list.IsNull()) list=prod;
30   if( list.Contains("LHC10h")   || list.Contains("LHC11h")   ) hasMC=kFALSE;
31   if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
32
33   //ESD handler?
34   isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
35   
36   // switch off some configurations
37   switch(cutDefinition) {
38     case kTPC:   
39     case kTOF:   
40     case kTRD:
41       return 0x0;
42       break;
43       //case kTOFTRD:   
44     case krec:   
45       if(!hasMC) return 0x0;
46       break;
47       //case kTOFTRD2:   
48     case kITScls:
49     case kITSamy:
50     case kDCA:
51     case kChi:      
52       return 0x0;
53       break;
54       //    case kGam0:   
55       //    case kGam01:   
56       //    case kGam05:   
57       //    case kGam10:   
58       //    case kGam15:   
59       //    case kGam20:
60     case kEtaGap01:   
61     case kEtaGap02:   
62     case kEtaGap03:   
63     case kEtaGap04:   
64     case kEtaGap05:   
65     case kSubLS:
66     case kSubRndm:
67       if( hasMC) return 0x0;
68       break;
69   }
70   
71   // create the actual framework object
72   TString name=Form("%02d",cutDefinition);
73   if (cutDefinition<arrNames->GetEntriesFast()){
74     name=arrNames->At(cutDefinition)->GetName();
75   }
76   AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("Track cuts: %s",name.Data()));
77   die->SetHasMC(hasMC);
78
79   printf(" Add %s %s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?"MC":""),name.Data(),list.Data());
80
81   // Monte Carlo Signals and TRD efficiency tables
82   if(hasMC) {
83     AddMCSignals(die);
84     printf(" Add %d MC signals \n",die->GetMCSignals()->GetEntriesFast());
85     
86     // trd tables
87     /* if (list.Contains("LHC11a") ) {
88       TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
89       TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
90       if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
91
92       if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
93         Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
94       else 
95         die->SetTRDcorrectionFilename(pidTab.Data());
96         }*/
97   }
98   
99   // cut setup
100   SetupTrackCuts(die,cutDefinition);
101   SetupPairCuts(die,cutDefinition);
102   
103   // histogram setup
104   if(cutDefinition == kTOFTRD  || 
105      cutDefinition == kGam0    || 
106      cutDefinition == kTOFTRD2 || 
107      cutDefinition >= kEtaGap01 ) {
108     InitHistograms(die,cutDefinition);
109     printf(" Add %d types and %03d histos to the manager \n",die->GetHistogramList()->GetEntries(),
110            0/*die->GetHistoManager()->GetList()->GetEntries()*/);
111   }  
112
113   // CF container setup
114   if(cutDefinition <  kEtaGap01 || 
115      cutDefinition == kSubRndm  ) {
116     InitCF(die,cutDefinition);
117     printf(" Add %d pair, %d leg vars, %p steps and %p bins to the container \n",
118            die->GetCFManagerPair()->GetNvarsPair(),die->GetCFManagerPair()->GetNvarsLeg(),
119            die->GetCFManagerPair()->GetContainer(), die->GetCFManagerPair()->GetContainer() );
120   }
121
122   // bgrd estimators
123   if(!hasMC) {
124     if(cutDefinition == kTOFTRD) {  
125       printf(" Activate bgrd estimators: ME and ROT \n");
126  
127       // rotations
128       AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
129       rot->SetIterations(10);
130       rot->SetConeAnglePhi(TMath::Pi());
131       rot->SetStartAnglePhi(TMath::Pi());
132       die->SetTrackRotator(rot);
133       // mixing
134       AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
135       mix->AddVariable(AliDielectronVarManager::kZvPrim,10,-10.,10.);
136       mix->AddVariable(AliDielectronVarManager::kCentrality,16,0.,80.);
137       mix->SetMixType(AliDielectronMixingHandler::kAll);
138       mix->SetDepth(100);
139       die->SetMixingHandler(mix);
140     }
141     
142     
143     // TPC event plane configurations
144     Double_t gGap;
145     switch(cutDefinition) {
146       case kEtaGap01:   gGap=0.1;   break;
147       case kEtaGap02:   gGap=0.2;   break;
148       case kEtaGap03:   gGap=0.3;   break;
149       case kEtaGap04:   gGap=0.4;   break;
150       case kEtaGap05:   gGap=0.5;   break;
151       default: gGap=0.0;
152     }
153     
154     AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
155     poi->AddCut(AliDielectronVarManager::kM,2.92,3.20);     // particles of interest, jpsi mass window
156     die->GetEventPlanePOIPreFilter().AddCuts(poi); 
157     
158     if(cutDefinition >= kEtaGap01 && 
159        cutDefinition <  kSubLS     ) {
160       AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
161       etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
162       die->GetEventPlanePreFilter().AddCuts(etaGap);
163     }
164     
165     if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
166     die->SetPreFilterEventPlane();
167   }
168   
169   // prefilter settings
170   if(cutDefinition == kTOFTRD2) 
171     die->SetPreFilterAllSigns();
172   else 
173     die->SetPreFilterUnlikeOnly();
174   
175   // setup eta correction
176   //  if(isESD && list.Contains("LHC10h")) SetEtaCorrection();
177   
178   // VZERO calibration
179   TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
180   if (!trainRoot.IsNull()) {
181     die->SetVZEROCalibrationFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroCalibrationLHC10h.root");
182     die->SetVZERORecenteringFilename("$TRAIN_ROOT/util/dielectron/dielectron/VzeroRecenteringLHC10h.root");
183   }
184   
185   return die;
186 }
187
188 //______________________________________________________________________________________
189 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
190 {
191   //
192   // Setup the track cuts
193   //
194
195   // Quality cuts
196   AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
197   die->GetTrackFilter().AddCuts(cuts);
198   
199   // AOD track filter (needs to be first cut)
200   AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
201   trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqualSPDanyPIDele);
202   //  if(!isESD) cuts->AddCut(trkFilter);
203
204   //Pt cut, should make execution a bit faster
205   AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
206   //  if(cutDefinition >= kEtaGap01 )   
207     pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30);
208   //  else   
209     //    pt->AddCut(AliDielectronVarManager::kPt,0.8,1e30);
210   cuts->AddCut(pt);
211   
212         // track cuts ESD and AOD
213   AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
214   varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
215   varCuts->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
216   varCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9);
217   varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
218   varCuts->AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
219   varCuts->AddCut(AliDielectronVarManager::kKinkIndex0,   0.0);
220   cuts->AddCut(varCuts);
221   
222   AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
223   switch(cutDefinition) {
224   case kTOFTRD2: trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kFirst);
225     break;
226   default:       trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD,AliDielectronTrackCuts::kAny);
227     break;
228   }
229   trkCuts->SetRequireITSRefit(kTRUE);
230   trkCuts->SetRequireTPCRefit(kTRUE);
231   cuts->AddCut(trkCuts);
232   
233   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
234   AliDielectronPID *pid = new AliDielectronPID("PID","PID");
235   
236   ////////////////////////////////// DATA
237   if(!hasMC) {
238     pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,2.5,0.,0.,kTRUE);
239     pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
240     
241     if(cutDefinition==kTRD || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2) 
242       pid->AddCut(AliDielectronPID::kTRDeleEff,AliPID::kElectron,.8,1.,3.5.,6.,kFALSE,
243                   AliDielectronPID::kIfAvailable,AliDielectronVarManager::kTRDpidQuality);
244   }
245   
246   ////////////////////////////////// MC
247   if(hasMC) {
248     
249     // electron
250     Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
251     Double_t resolution=0.0549;
252     Double_t BBpro[5] = {0};
253     Double_t BBpio[5] = {0};
254     
255     for(Int_t icent=0; icent<8; icent++) {
256       
257       switch (icent) {
258         case 0:  // 0-10%
259           BBpro[0] = 0.031555;  BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11;  BBpro[3] = 2.05594; BBpro[4] = 5.99848;
260           BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11;   BBpio[3] = 5.27988; BBpio[4] = 4.3108;
261           break;
262         case 1:  // 10-20%
263           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
264           BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11;  BBpio[3] = 5.24831; BBpio[4] = 4.31093;
265           break;
266         case 2:  // 20-30%
267           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
268           BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11;  BBpio[3] = 5.74458; BBpio[4] = 4.32459;
269           break;
270         case 3:  // 30-40%
271           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
272           BBpio[0] = 0.026294;  BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11;  BBpio[3] = 5.28808; BBpio[4] = 4.31301;
273           break;
274         case 4:  // 40-50%
275           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
276           BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
277           break;
278         case 5:  // 50-60%
279           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
280           BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
281           break;
282         case 6:  // 60-70%
283           BBpro[0] = 0.031555;  BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11;  BBpro[3] = 2.05594; BBpro[4] = 5.99848;
284           BBpio[0] = 0.026302;  BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11;  BBpio[3] = 5.2465;  BBpio[4] = 4.31094;
285           break;
286         case 7:  // 70-80%
287           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
288           BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
289           break;
290         case 8:  // 80-90%
291           BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11;   BBpro[3] = 2.07912; BBpro[4] = 5.99986;
292           BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11;  BBpio[3] = 5.24831; BBpio[4] = 4.31093;
293           break;
294         case 9:  // 90-100%
295           BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11;   BBpro[3] = 3.2431;  BBpro[4] = 5.93388;
296           BBpio[0] = 0.027079;  BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11;  BBpio[3] = 9.61382; BBpio[4] = 5.99372;
297           break;
298       }
299       
300       
301       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.);
302       
303       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.);
304       
305       //LHC11a10b
306       if (list.Contains("LHC11a10b")) {
307         printf(" LHC11a10b parameters\n");
308         ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
309         ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
310         
311         // proton cut
312         pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
313                     kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
314         // pion cut
315         pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
316                     kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
317       }
318     }
319     
320     // shifts for the nSigma electrons
321     TGraph* nSigmaCorrection = new TGraph();
322     // LHC11a10b
323     if (list.Contains("LHC11a10b")) {
324       nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
325       nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
326       pid->SetCorrGraph(nSigmaCorrection);
327     }
328     
329   } //hasMC
330   
331   ////////////////////////////////// DATA + MC
332   // pid cuts TPC + TOF & TRD
333   pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
334   if(cutDefinition==kTOF || cutDefinition>=kTOFTRD || cutDefinition>=kTOFTRD2) 
335     pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
336   
337   if(cutDefinition!=krec) cuts->AddCut(pid);
338   /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
339   
340   
341   // exclude conversion electrons selected by the tender
342   AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
343   noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
344   cuts->AddCut(noconv);
345   
346 }
347
348 //______________________________________________________________________________________
349 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
350 {
351   //
352   // Setup the pair cuts
353   //
354   
355   // conversion rejection
356   Double_t gCut;
357   switch(cutDefinition) {
358     case kTPC:    gCut=0.05;  break;
359     case krec:    gCut=0.05;  break;
360     case kGam10:  gCut=0.1;   break;
361     case kGam15:  gCut=0.15;  break;
362     case kGam20:  gCut=0.2;   break;
363     case kGam05:  gCut=0.05;  break;
364     case kGam01:  gCut=0.01;  break;
365     case kGam0:   gCut=0.0;   break;
366     default: gCut=0.05;             // default
367   }
368   
369   AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
370 //  gammaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0,   0.1,  kTRUE);
371 //  gammaCuts->AddCut(AliDielectronVarManager::kLegDist,      0.0,   0.25, kTRUE);
372 //  gammaCuts->AddCut(AliDielectronVarManager::kR,            3.0,   90.0, kTRUE);
373 //  gammaCuts->AddCut(AliDielectronVarManager::kPsiPair,      0.0,   0.05, kTRUE);
374 //  gammaCuts->AddCut(AliDielectronVarManager::kChi2NDF,      0.0,   10.0, kTRUE);
375   gammaCuts->AddCut(AliDielectronVarManager::kM,            0.0,   gCut);
376   die->GetPairPreFilter().AddCuts(gammaCuts);
377   
378   
379   // rapidity selection
380   AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
381   rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
382   die->GetPairFilter().AddCuts(rapCut);
383   
384 }
385
386 //______________________________________________________________________________________
387 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
388 {
389   //
390   // Initialise the histograms
391   //
392   
393   //Setup histogram Manager
394   AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
395   
396   
397   //add histograms to event class
398   histos->AddClass("Event");
399   histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)",
400                         300,-15.,15.,
401                         AliDielectronVarManager::kZvPrim);
402   histos->UserHistogram("Event","Centrality","Centrality;centrality (%)",
403                         "0.,5.,10.,20.,40.,50.,60.,80.,100.",
404                         AliDielectronVarManager::kCentrality);
405   histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0",
406                         500,0.,25000.,
407                         AliDielectronVarManager::kMultV0);
408   histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
409                         10,0.,100., 500,0.,25000.,
410                         AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
411   histos->UserProfile("Event","Cent_Nacc",
412                       "accepted tracks;centrality (%)",
413                       AliDielectronVarManager::kNacc,
414                       "0.,5.,10.,20.,40.,50.,60.,80.,100.",
415                       AliDielectronVarManager::kCentrality);
416   histos->UserProfile("Event","Cent_NVtxContrib",
417                       "number of vertex contributors;centrality (%)",
418                       AliDielectronVarManager::kNVtxContrib,
419                       "0.,5.,10.,20.,40.,50.,60.,80.,100.",
420                       AliDielectronVarManager::kCentrality);
421   
422   
423   ////// FLOW //////
424   if(cutDefinition == kTOFTRD || cutDefinition >= kEtaGap01) {
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     //// EPSelectionTask V0 information directly from the ESDs
544     histos->UserHistogram("Event","Cent_v0ACrpH2","VZERO-AC RP;centrality (%);#Psi_{2}^{v0AC} (rad.)",
545                           10,0.,100.,100,-2.0,2.0,
546                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ACrpH2);
547     histos->UserHistogram("Event","Cent_v0ArpH2","VZERO-A RP;centrality (%);#Psi_{2}^{v0A} (rad.)",
548                           10,0.,100.,100,-2.0,2.0,
549                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ArpH2);
550     histos->UserHistogram("Event","Cent_v0CrpH2","VZERO-C RP;centrality (%);#Psi_{2}^{v0C} (rad.)",
551                           10,0.,100.,100,-2.0,2.0,
552                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CrpH2);
553     // for resolution calculation
554     histos->UserHistogram("Event","Cent_v0ATPCDiffH2","VZERO-A TPC diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{TPC}))",
555                           10,0.,100.,300,-1.0,1.0,
556                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0ATPCDiffH2);
557     histos->UserHistogram("Event","Cent_v0CTPCDiffH2","VZERO-C TPC diff;centrality (%);cos(2(#Psi^{v0C}-#Psi^{TPC}))",
558                           10,0.,100.,300,-1.0,1.0,
559                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0CTPCDiffH2);
560     histos->UserHistogram("Event","Cent_v0Av0CDiffH2","VZERO-A VZERO-C diff;centrality (%);cos(2(#Psi^{v0A}-#Psi^{v0C}))",
561                           10,0.,100.,300,-1.0,1.0,
562                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kv0Av0CDiffH2);
563     
564   }
565   
566   ////// MONTE CARLO //////
567   /*
568   if(cutDefinition == kTOFTRD && hasMC) {
569     histos->AddClass("MCEvent");
570     histos->UserHistogram("MCEvent","Cent_NJPsis","Centrality vs. generated incl. J/#psi per event;centrality (%);N_{J/#psi}",
571                           10,0.,100., 21,-0.5,20.5,
572                           AliDielectronVarManager::kCentrality,AliDielectronVarManager::kNumberOfJPsis);
573   }
574   */
575   
576   
577   //Initialise histogram classes
578   histos->SetReservedWords("Track;Pair");
579   
580   
581   //Pair classes
582   // to fill also mixed event histograms loop until 10
583   for (Int_t i=0; i<3; ++i){
584     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
585   }
586   
587   if(cutDefinition < kEtaGap01) {
588     
589     //legs from pair
590     for (Int_t i=0; i<3; ++i){
591       histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
592     }
593     
594     //Track classes
595     //to fill also track info from 2nd event loop until 2
596     for (Int_t i=0; i<2; ++i){
597       histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
598     }
599     
600     //track rotation
601     //   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
602     //   histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
603     
604     //add histograms to Track classes
605     //histos->UserHistogram("Track","TOFbit","TOFbit;bit;#tracks",19,-9.5,9.5,AliDielectronVarManager::kTOFPIDBit);
606     histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",
607                           400,0,20.,
608                           AliDielectronVarManager::kPt);
609     histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",
610                           160,-0.5,159.5,
611                           AliDielectronVarManager::kNclsTPC);
612     histos->UserHistogram("Track","TPCsignalN","Number of Clusters TPC;TPC number clusteres;#tracks",
613                           160,-0.5,159.5,
614                           AliDielectronVarManager::kTPCsignalN);
615     
616     histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",
617                           500,-1.,1.,
618                           AliDielectronVarManager::kImpactParXY);
619     histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",
620                           600,-3.,3.,
621                           AliDielectronVarManager::kImpactParZ);
622     histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
623                           200,-1,1,200,0,6.285,
624                           AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
625     
626     histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
627                           400,0.2,20.,200,0.,200.,
628                           AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
629     histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
630                           400,0.2,20.,200,-10.,10.,
631                           AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
632     
633     histos->UserHistogram("Track","Ncl",";Number clusters TPC;Number clusters TPC",
634                           160,-0.5,159.5,
635                           AliDielectronVarManager::kNclsTPC);
636     histos->UserHistogram("Track","NclFr",";Number of findable clusters (robust);Number findable clusters TPC",
637                           160,-0.5,159.5,
638                           AliDielectronVarManager::kNFclsTPCr);
639     histos->UserHistogram("Track","Ncl_NclFr","Number of (findable) clusters TPC;found clusters;findable clusters",
640                           160,-0.5,159.5,160,-0.5,159.5,
641                           AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
642     histos->UserHistogram("Track","NtrklTRD",";Number tracklets TRD for pid;Number tracklets TRD",
643                           8,-0.5,7.5,
644                           AliDielectronVarManager::kTRDpidQuality);
645     
646     //add histograms to Pair classes
647     histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
648                           300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
649     histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
650                           100,-1.,1., AliDielectronVarManager::kY);
651     histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
652                           100,0.,3.15, AliDielectronVarManager::kOpeningAngle);
653     histos->UserHistogram("Pair","Chi2NDF","#chi^{2}/NDF;#chi^{2}/NDF",
654                           100,0.,20, AliDielectronVarManager::kChi2NDF);
655     histos->UserHistogram("Pair","PsiPair","PsiPair;#psi",
656                           100,0.,3.15, AliDielectronVarManager::kPsiPair);
657     histos->UserHistogram("Pair","R","Radius;r (cm)",
658                           200,0.,100., AliDielectronVarManager::kR);
659     histos->UserHistogram("Pair","LegDist",";dca (cm)",
660                           50,0.,5., AliDielectronVarManager::kLegDist);
661     histos->UserHistogram("Pair","LegDistXY",";dca_{xy} (cm)",
662                           50,0.,5., AliDielectronVarManager::kLegDistXY);
663     
664   
665   }
666   
667   //// FLOW results use tprofiles
668   if(cutDefinition == kTOFTRD || cutDefinition == kTOFTRD2 || cutDefinition >= kEtaGap01) {
669     
670     histos->UserProfile("Pair","M_Cent_Pt_V0ACrpH2FlowV2",
671                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
672                         AliDielectronVarManager::kV0ACrpH2FlowV2,
673                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
674                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
675     
676     histos->UserProfile("Pair","M_Cent_Pt_V0ArpH2FlowV2",
677                         "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
678                         AliDielectronVarManager::kV0ArpH2FlowV2,
679                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
680                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
681     
682     histos->UserProfile("Pair","M_Cent_Pt_V0CrpH2FlowV2",
683                         "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
684                         AliDielectronVarManager::kV0CrpH2FlowV2,
685                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
686                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
687
688     histos->UserProfile("Pair","M_Cent_Pt_v0ACrpH2FlowV2",
689                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
690                         AliDielectronVarManager::kv0ACrpH2FlowV2,
691                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
692                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
693     
694     histos->UserProfile("Pair","M_Cent_Pt_v0ArpH2FlowV2",
695                         "cos(2(#varphi-#Psi^{V0A}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
696                         AliDielectronVarManager::kv0ArpH2FlowV2,
697                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
698                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
699     
700     histos->UserProfile("Pair","M_Cent_Pt_v0CrpH2FlowV2",
701                         "cos(2(#varphi-#Psi^{V0C}));mass (GeV/c^{2});centrality (%);p_{T} (GeV/c)",
702                         AliDielectronVarManager::kv0CrpH2FlowV2,
703                         125,0.,125*.04, 10, 0.,100., 200,0.,100.,
704                         AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality, AliDielectronVarManager::kPt);
705     
706     // 1D
707     histos->UserProfile("Pair","M_V0ACrpH2FlowV2",
708                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
709                         AliDielectronVarManager::kV0ACrpH2FlowV2,
710                         125,0.,125*.04,
711                         AliDielectronVarManager::kM);
712     
713     histos->UserProfile("Pair","M_V0ArpH2FlowV2",
714                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
715                         AliDielectronVarManager::kV0ArpH2FlowV2,
716                         125,0.,125*.04,
717                         AliDielectronVarManager::kM);
718     
719     histos->UserProfile("Pair","M_V0CrpH2FlowV2",
720                         "cos(2(#varphi-#Psi^{V0AC}));mass (GeV/c^{2})",
721                         AliDielectronVarManager::kV0CrpH2FlowV2,
722                         125,0.,125*.04,
723                         AliDielectronVarManager::kM);
724   }  
725   
726   die->SetHistogramManager(histos);
727 }
728
729
730 void InitCF(AliDielectron* die, Int_t cutDefinition)
731 {
732   //
733   // Setup the CF Manager if needed
734   //
735   
736   AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
737   
738   // pair variables
739   cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
740   if(cutDefinition!=kSubRndm) cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
741   
742   if(cutDefinition <  kGam0 || cutDefinition == kSubRndm) {
743     
744     // pair and event vars
745     if(cutDefinition <= kChi || cutDefinition == kSubRndm) {
746       cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,5.,10.,20.,40.,50.,60.,80.");
747       cf->AddVariable(AliDielectronVarManager::kPt,"0., 1., 2.5, 5., 100.0");
748       if(!hasMC) cf->AddVariable(AliDielectronVarManager::kZvPrim,20, -10., 10.);
749       if(hasMC) cf->AddVariable(AliDielectronVarManager::kNacc,20,0.,3000.0);
750       if(hasMC) cf->AddVariable(AliDielectronVarManager::kNVtxContrib,20,0.,4000.);
751       if(hasMC) cf->AddVariable(AliDielectronVarManager::kTRDpidEffPair,101,0.0,1.01);
752       //cf->AddVariable(AliDielectronVarManager::kY,"-0.8,0.8");
753       cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0ArpH2,4,-1.*TMath::Pi(),TMath::Pi()); 
754       cf->AddVariable(AliDielectronVarManager::kDeltaPhiv0CrpH2,4,-1.*TMath::Pi(),TMath::Pi()); 
755     }
756     
757     //leg variables
758     if(cutDefinition!=kSubRndm) {
759       cf->AddVariable(AliDielectronVarManager::kPt,"0.8, 1.0, 1.1, 1.2, 1.5, 100.0",kTRUE);
760       cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-3,-2.5,-2,2,2.5,3",kTRUE);
761       cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"2.5,3.0,3.5,4.0,4.5,100",kTRUE);
762       //    cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.5,4.0,4.5,5.0,100",kTRUE);
763       //    cf->AddVariable(AliDielectronVarManager::kTRDpidQuality,"3.5, 4.5, 5.5, 6.5",kTRUE);
764       if(!hasMC && isESD) cf->AddVariable(AliDielectronVarManager::kTRDchi2,"-1.,0.,2.,4.",kTRUE);
765       cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE); 
766       
767       // standard vars
768       if(cutDefinition<=kChi) {
769         if(hasMC) cf->AddVariable(AliDielectronVarManager::kEta,"-0.9,0.9",kTRUE);
770         //cf->AddVariable(AliDielectronVarManager::kNclsTPC,"70, 90, 100, 120, 160",kTRUE);
771       }
772     }
773     
774     switch(cutDefinition) {
775       case kTPC:
776       case krec:
777       case kTOF: //cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE); break;
778       case kTRD: 
779       case kTOFTRD: 
780         // if(hasMC) cf->AddVariable(AliDielectronVarManager::kThetaCS,15,-1.,1.);
781         //cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE); break;
782         break;
783       case kITScls: cf->AddVariable(AliDielectronVarManager::kNclsITS,"1,2,3,4,5,6",kTRUE);       break;
784       case kITSamy: cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE); break;
785       case kDCA:
786         cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,7,-1.5,5.5,kTRUE); 
787         cf->AddVariable(AliDielectronVarManager::kImpactParXY,8,-2.,2.,kTRUE);
788         cf->AddVariable(AliDielectronVarManager::kImpactParZ,8,-4.,4.,kTRUE); 
789         break;
790       case kChi:    cf->AddVariable(AliDielectronVarManager::kChi2NDF,"0,1,2,3,4,5",kTRUE); break;
791         //    cf->AddVariable(AliDielectronVarManager::kTOFnSigmaEle,"-3,-2,2,3",kTRUE);
792         //    cf->AddVariable(AliDielectronVarManager::kTOFPIDBit,"-.5,.5,1.5",kTRUE);
793     }
794     
795   }
796   
797
798   if(hasMC) {
799     cf->AddVariable(AliDielectronVarManager::kRunNumber, GetRunNumbers() );
800     //if(cutDefinition==kTOFTRD || cutDefinition==kGam0)
801     cf->SetStepForMCtruth();
802     //    if(cutDefinition!=kTOFTRD) 
803     cf->SetStepsForMCtruthOnly();  
804     // cf->SetStepsForBackground();   
805   }
806   
807   die->SetCFManagerPair(cf);
808 }
809
810 void AddMCSignals(AliDielectron *die){
811   //Do we have an MC handler?
812   if (!hasMC) return;
813   
814   AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
815   inclusiveJpsi->SetLegPDGs(11,-11);
816   inclusiveJpsi->SetMotherPDGs(443,443);
817   inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
818   inclusiveJpsi->SetFillPureMCStep(kTRUE);
819   inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
820   inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
821   die->AddSignalMC(inclusiveJpsi);
822   
823   AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi");   // prompt J/psi (not from beauty decays)
824   promptJpsi->SetLegPDGs(11,-11);
825   promptJpsi->SetMotherPDGs(443,443);
826   promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
827   promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
828   promptJpsi->SetFillPureMCStep(kTRUE);
829   promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
830   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
831   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
832   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
833   die->AddSignalMC(promptJpsi);
834   
835   AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
836   beautyJpsi->SetLegPDGs(11,-11);
837   beautyJpsi->SetMotherPDGs(443,443);
838   beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
839   beautyJpsi->SetGrandMotherPDGs(500,500);
840   beautyJpsi->SetFillPureMCStep(kTRUE);
841   beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
842   beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
843   beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
844   die->AddSignalMC(beautyJpsi);
845   
846   AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi");   // embedded J/psi
847   directJpsi->SetLegPDGs(11,-11);
848   directJpsi->SetMotherPDGs(443,443);
849   directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
850   directJpsi->SetFillPureMCStep(kTRUE);
851   directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
852   directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
853   directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
854   directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
855   die->AddSignalMC(directJpsi);
856   
857   AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs");  // pairs made from conversion (may be also from 2 different conversions)                                                                                                                                                                                             
858   conversionElePairs->SetLegPDGs(11,-11);
859   conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
860   conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
861   conversionElePairs->SetMotherPDGs(22,22);
862   //   die->AddSignalMC(conversionElePairs);           
863 }
864
865 void SetEtaCorrection()
866 {
867   if (AliDielectronPID::GetEtaCorrFunction()) return;
868   
869   TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
870   TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
871   if (trainRoot.IsNull()) etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
872   if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
873     Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
874     return;
875   }
876
877   TFile f(etaMap.Data());
878   if (!f.IsOpen()) return;
879   TList *keys=f.GetListOfKeys();
880
881   for (Int_t i=0; i<keys->GetEntries(); ++i){
882     TString kName=keys->At(i)->GetName();
883     TPRegexp reg(kName);
884     if (reg.MatchB(list)){
885       printf(" Using Eta Correction Function: %s\n",kName.Data());
886       AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
887     }
888   }
889 }
890
891 TVectorD *GetRunNumbers() {
892   
893   Double_t runLHC10h[] = { // all good runs based on RCT 29.Mai
894     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
895   };
896   
897   Double_t runLHC11h[] = { // all good runs based on RCT 29.Mai
898     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
899   };
900   
901   // selection via environement variable (works only for gsi trains)
902
903   
904   if(list.Contains("LHC10h") || list.Contains("LHC11a10")) {
905     Int_t size = (int) (sizeof(runLHC10h)/sizeof(Double_t));
906     TVectorD *vec = new TVectorD(size+1);
907     
908     (*vec)[size] = runLHC10h[0] + 1;
909     for (int i = 0; i < size; i++) {
910       (*vec)[i] = runLHC10h[size-1-i];
911     }
912     //    vec->Print("");
913     return vec;
914   }
915
916   if( list.Contains("LHC11h") || list.Contains("LHC12a17") ) {
917     
918     Int_t size = (int) (sizeof(runLHC11h)/sizeof(Double_t));
919     TVectorD *vec = new TVectorD(size+1);
920     
921     (*vec)[size] = runLHC11h[0] + 1;
922     for (int i = 0; i < size; i++) {
923       (*vec)[i] = runLHC11h[size-1-i];
924     }
925     //   vec->Print("");
926     return vec;
927   }
928
929   TVectorD *vec = new TVectorD(2);
930   (*vec)[0] = 0;
931   (*vec)[0] = 1;
932   return vec;
933      
934 }