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