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