]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosJPSI/ConfigBJpsi_ff_PbPbFilter.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / ConfigBJpsi_ff_PbPbFilter.C
1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2
3 void SetupTrackCuts(Bool_t isESD, AliDielectron *die, Int_t cutDefinition);
4 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
5
6 void AddMCSignals(AliDielectron *die);
7 void SetEtaCorrection();
8
9 TString names=("TOFTRDany");
10 enum { kTOFTRD};
11
12 TObjArray *arrNames=names.Tokenize(";");
13 const Int_t nDie=arrNames->GetEntries();
14
15 Bool_t hasMC=kFALSE;
16
17 AliDielectron* ConfigBJpsi_ff_PbPbFilter(Int_t cutDefinition, Bool_t isMC=kFALSE)
18 {
19   //
20   // Setup the instance of AliDielectron
21   //
22   
23
24   // MC event handler?
25   hasMC=isMC;
26     //(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);    
27
28   //ESD handler?
29   Bool_t isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
30   
31   
32   // create the actual framework object
33   TString name=Form("%02d",cutDefinition);
34   if (cutDefinition<arrNames->GetEntriesFast()){
35     name=arrNames->At(cutDefinition)->GetName();
36   }
37   AliDielectron *die = new AliDielectron(Form("%s",name.Data()),
38                                          Form("Track cuts: %s",name.Data()));
39   
40   // Monte Carlo Signals and TRD efficiency tables
41   if(hasMC) {
42     AddMCSignals(die);
43     
44     // trd tables
45     TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
46     TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
47     if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
48
49     if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
50       Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
51     else 
52       die->SetTRDcorrectionFilename(pidTab.Data());
53   }
54   
55   // cut setup
56   SetupTrackCuts(isESD,die,cutDefinition);
57   SetupPairCuts(die,cutDefinition);
58   
59   // histogram setup
60   if(cutDefinition == kTOFTRD) 
61     InitHistograms(die,cutDefinition);
62   
63   // setup eta correction
64   SetEtaCorrection();
65   
66   return die;
67 }
68
69 //______________________________________________________________________________________
70 void SetupTrackCuts(Bool_t isESD, AliDielectron *die, Int_t cutDefinition)
71 {
72   //
73   // Setup the track cuts
74   //
75   
76   // Quality cuts
77   AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
78   die->GetTrackFilter().AddCuts(cuts);
79  
80   //Pt cut, should make execution a bit faster
81   AliDielectronVarCuts *pt = new AliDielectronVarCuts("Pt>.85","Pt>.85");
82   pt->AddCut(AliDielectronVarManager::kPt,0.85,1e30);
83   cuts->AddCut(pt);
84   
85   // track cuts ESD and AOD
86   AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
87   varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
88   varCuts->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
89   varCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9);
90   varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
91   varCuts->AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
92   varCuts->AddCut(AliDielectronVarManager::kKinkIndex0,   0.0);
93
94    AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
95    varCuts->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,1.5); //ITS(0-1) = SPDany
96  
97   cuts->AddCut(varCuts);
98  
99   trkCuts->SetRequireITSRefit(kTRUE);
100   trkCuts->SetRequireTPCRefit(kTRUE);
101   cuts->AddCut(trkCuts);
102   
103   //Do we have an MC handler?
104   //  Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
105   
106   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
107   AliDielectronPID *pid = new AliDielectronPID("PID","PID");
108   
109   ////////////////////////////////// DATA
110   if(!hasMC) {
111     
112     pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.0,3.0,0.,0.,kTRUE);
113     pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.0,3.0,0.,0.,kTRUE);
114   }
115   
116   ////////////////////////////////// MC
117   if(hasMC) {
118     
119     // electron
120     Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
121     Double_t resolution=0.0549;
122     Double_t BBpro[5] = {0};
123     Double_t BBpio[5] = {0};
124     
125     for(Int_t icent=0; icent<8; icent++) {
126       
127       switch (icent) {
128         case 0:  // 0-10%
129           BBpro[0] = 0.031555;  BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11;  BBpro[3] = 2.05594; BBpro[4] = 5.99848;
130           BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11;   BBpio[3] = 5.27988; BBpio[4] = 4.3108;
131           break;
132         case 1:  // 10-20%
133           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
134           BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11;  BBpio[3] = 5.24831; BBpio[4] = 4.31093;
135           break;
136         case 2:  // 20-30%
137           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
138           BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11;  BBpio[3] = 5.74458; BBpio[4] = 4.32459;
139           break;
140         case 3:  // 30-40%
141           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
142           BBpio[0] = 0.026294;  BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11;  BBpio[3] = 5.28808; BBpio[4] = 4.31301;
143           break;
144         case 4:  // 40-50%
145           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
146           BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
147           break;
148         case 5:  // 50-60%
149           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
150           BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
151           break;
152         case 6:  // 60-70%
153           BBpro[0] = 0.031555;  BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11;  BBpro[3] = 2.05594; BBpro[4] = 5.99848;
154           BBpio[0] = 0.026302;  BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11;  BBpio[3] = 5.2465;  BBpio[4] = 4.31094;
155           break;
156         case 7:  // 70-80%
157           BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11;  BBpro[3] = 2.05802; BBpro[4] = 5.99999;
158           BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11;  BBpio[3] = 5.78125; BBpio[4] = 4.31363;
159           break;
160         case 8:  // 80-90%
161           BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11;   BBpro[3] = 2.07912; BBpro[4] = 5.99986;
162           BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11;  BBpio[3] = 5.24831; BBpio[4] = 4.31093;
163           break;
164         case 9:  // 90-100%
165           BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11;   BBpro[3] = 3.2431;  BBpro[4] = 5.93388;
166           BBpio[0] = 0.027079;  BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11;  BBpio[3] = 9.61382; BBpio[4] = 5.99372;
167           break;
168       }
169       
170       
171       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.);
172       
173       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.);
174       
175       TString list=gSystem->Getenv("LIST");
176       
177       //LHC11a10b
178       if (list.Contains("LHC11a10b") || list.IsNull()) {
179         printf("LHC11a10b parameters\n");
180         ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
181         ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
182         
183         // proton cut
184         pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
185                     kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
186         // pion cut
187         pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
188                     kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
189       }
190     }
191     
192     // shifts for the nSigma electrons
193     TGraph* nSigmaCorrection = new TGraph();
194     // LHC11a10b
195     if (list.Contains("LHC11a10b") || list.IsNull()) {
196       nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
197       nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
198       pid->SetCorrGraph(nSigmaCorrection);
199     }
200     
201   } //hasMC
202   
203   ////////////////////////////////// DATA + MC
204   // pid cuts TPC + TOF 
205   pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.,4.);
206     pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
207   
208   cuts->AddCut(pid);  
209   /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
210   
211   
212   // exclude conversion electrons selected by the tender
213   AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
214   noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
215   cuts->AddCut(noconv);
216   
217 }
218
219 //______________________________________________________________________________________
220 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
221 {
222   //
223   // Setup the pair cuts
224   //
225   
226   // conversion rejection
227   Double_t gCut = 0.05;             // default
228   
229   AliDielectronVarCuts *gammaCut=new AliDielectronVarCuts("gammaCut","gammaCut");
230   gammaCut->AddCut(AliDielectronVarManager::kM,0.,gCut);
231   die->GetPairPreFilter().AddCuts(gammaCut);
232   
233   
234 }
235
236 //______________________________________________________________________________________
237 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
238 {
239   //
240   // Initialise the histograms
241   //
242   //  Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
243   
244   //Setup histogram Manager
245   AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
246   
247   
248   //add histograms to event class
249   histos->AddClass("Event");
250   histos->AddClass("Event_noCuts");
251   histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)",
252                         300,-15.,15.,AliDielectronVarManager::kZvPrim);
253  histos->UserHistogram("Event_noCuts","VtxZ","Vertex Z;z (cm)",
254                         300,-15.,15.,AliDielectronVarManager::kZvPrim);
255  
256   histos->UserHistogram("Event","Centrality","Centrality;centrality (%)",
257                         20,0.,100.,AliDielectronVarManager::kCentrality);
258
259   histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0",
260                         500,0.,25000., AliDielectronVarManager::kMultV0);
261   histos->UserHistogram("Event","Multiplicity_nTracks","Multiplicity V0 vs #tracks; #tracks; Multiplicity V0;",
262                         500,0.,25000.,500,0.,25000.,AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMultV0);
263
264   histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
265                         10,0.,100., 500,0.,500.,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
266   histos->UserProfile("Event","Cent_Nacc",
267                       "accepted tracks;centrality (%)",
268                       AliDielectronVarManager::kNacc,
269                       "0.,5.,10.,20.,40.,50.,60.,80.,100.",
270                       AliDielectronVarManager::kCentrality);
271   histos->UserProfile("Event","Cent_NVtxContrib",
272                       "number of vertex contributors;centrality (%)",
273                       AliDielectronVarManager::kNVtxContrib,
274                       "0.,5.,10.,20.,40.,50.,60.,80.,100.",
275                       AliDielectronVarManager::kCentrality);
276   
277   
278  
279   
280   
281   //Initialise histogram classes
282   histos->SetReservedWords("Track;Pair");
283   
284   
285   //Pair classes
286   // to fill also mixed event histograms loop until 10
287   for (Int_t i=0; i<3; ++i){
288     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
289   }
290   
291   if(cutDefinition <= kTOFTRD) {
292     
293     //legs from pair
294     for (Int_t i=0; i<3; ++i){
295       histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
296     }
297     
298     //Track classes
299     //to fill also track info from 2nd event loop until 2
300     for (Int_t i=0; i<2; ++i){
301       histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
302     }
303     
304     //add histograms to Track classes
305     //histos->UserHistogram("Track","TOFbit","TOFbit;bit;#tracks",19,-9.5,9.5,AliDielectronVarManager::kTOFPIDBit);
306     histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",
307                           400,0,20.,
308                           AliDielectronVarManager::kPt);
309    
310     histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",
311                           160,-0.5,159.5,
312                           AliDielectronVarManager::kNclsTPC);
313     histos->UserHistogram("Track","TPCsignalN","Number of Clusters TPC;TPC number clusteres;#tracks",
314                           160,-0.5,159.5,
315                           AliDielectronVarManager::kTPCsignalN);
316     
317     histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",
318                           500,-1.,1.,
319                           AliDielectronVarManager::kImpactParXY);
320     histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",
321                           600,-3.,3.,
322                           AliDielectronVarManager::kImpactParZ);
323
324     histos->UserHistogram("Track","Centrality_Eta_Nsigma","Cent_Eta_nSigma; Centrality; #eta; TPCnSigma_Electron",20,0.,100.,200,-1.,1.,200,-10.,10.,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);
325
326     histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
327                           200,-1,1,200,0,6.285,
328                           AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
329     
330     histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
331                           400,0.2,20.,200,0.,200.,
332                           AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
333
334     histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",400,0.2,20.,200,-10.,10., AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
335
336     histos->UserHistogram("Track","nSigmaTOF_P","TOF sigmas Electrons;P [GeV];TOF number of sigmas Electrons;#tracks", 400,0.2,20.,200,-10.,10., AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaEle,kTRUE);
337     
338     histos->UserHistogram("Track","Ncl",";Number clusters TPC;Number clusters TPC",
339                           160,-0.5,159.5,
340                           AliDielectronVarManager::kNclsTPC);
341     histos->UserHistogram("Track","NclFr",";Number of findable clusters (robust);Number findable clusters TPC",
342                           160,-0.5,159.5,
343                           AliDielectronVarManager::kNFclsTPCr);
344     histos->UserHistogram("Track","Ncl_NclFr","Number of (findable) clusters TPC;found clusters;findable clusters",
345                           160,-0.5,159.5,160,-0.5,159.5,
346                           AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
347     histos->UserHistogram("Track","NtrklTRD",";Number tracklets TRD for pid;Number tracklets TRD",
348                           8,-0.5,7.5,
349                           AliDielectronVarManager::kTRDpidQuality);
350     
351     //add histograms to Pair classes
352     histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
353                           300,.0,300*0.04,
354                           AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
355     histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
356                           100,-1.,1.,
357                           AliDielectronVarManager::kY);
358     histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
359                           100,0.,3.15,
360                           AliDielectronVarManager::kOpeningAngle);
361     histos->UserHistogram("Pair","Chi2NDF","#chi^{2}/NDF;#chi^{2}/NDF",
362                           100,0.,20,
363                           AliDielectronVarManager::kChi2NDF);
364   
365    histos->UserHistogram("Pair","PseudoProperTime","Pseudoproper decay length; pseudoproper-decay-length[#mum];Entries/40#mum",
366                           150,-0.3.,0.3,AliDielectronVarManager::kPseudoProperTime);
367
368
369    }
370   
371   die->SetHistogramManager(histos);
372 }
373
374
375 void AddMCSignals(AliDielectron *die){
376   //Do we have an MC handler?
377   //Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
378   if (!hasMC) return;
379   
380   AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
381   inclusiveJpsi->SetLegPDGs(11,-11);
382   inclusiveJpsi->SetMotherPDGs(443,443);
383   inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
384   inclusiveJpsi->SetFillPureMCStep(kTRUE);
385   inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
386   inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
387   die->AddSignalMC(inclusiveJpsi);
388   
389   AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi");   // prompt J/psi (not from beauty decays)
390   promptJpsi->SetLegPDGs(11,-11);
391   promptJpsi->SetMotherPDGs(443,443);
392   promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
393   promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
394   promptJpsi->SetFillPureMCStep(kTRUE);
395   promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
396   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
397   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
398   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
399   die->AddSignalMC(promptJpsi);
400   
401   AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
402   beautyJpsi->SetLegPDGs(11,-11);
403   beautyJpsi->SetMotherPDGs(443,443);
404   beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
405   beautyJpsi->SetGrandMotherPDGs(500,500);
406   beautyJpsi->SetFillPureMCStep(kTRUE);
407   beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
408   beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
409   beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
410   die->AddSignalMC(beautyJpsi);
411   
412   AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi");   // embedded J/psi
413   directJpsi->SetLegPDGs(11,-11);
414   directJpsi->SetMotherPDGs(443,443);
415   directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
416   directJpsi->SetFillPureMCStep(kTRUE);
417   directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
418   directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
419   directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
420   directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
421   die->AddSignalMC(directJpsi);
422 }
423
424 void SetEtaCorrection()
425 {
426
427   if (AliDielectronPID::GetEtaCorrFunction()) return;
428   
429   //TString list=gSystem->Getenv("LIST");
430   TString list="LHC11h.pass2";
431
432   //TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
433   //TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
434   //if (trainRoot.IsNull()) 
435   TString etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
436   if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
437     Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
438     return;
439   }
440
441   TFile f(etaMap.Data());
442   if (!f.IsOpen()) return;
443   TList *keys=f.GetListOfKeys();
444
445  
446   for (Int_t i=0; i<keys->GetEntries(); ++i){
447     TString kName=keys->At(i)->GetName();
448     TPRegexp reg(kName);
449     if (reg.MatchB(list)){
450       printf("Using Eta Correction Function: %s\n",kName.Data());
451       AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
452     }
453   }
454 }
455