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