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