]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosJPSI/AddTask_ReducedTree.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / AddTask_ReducedTree.C
1
2 //__________________________________________________________________________________________
3 AliAnalysisTask *AddTask_ReducedTree(){
4   //get the current analysis manager
5   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
6   if (!mgr) {
7     Error("AddTask_ReducedTree", "No analysis manager found.");
8     return 0;
9   }
10
11   //Do we have an MC handler?
12   Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
13   
14   //create task and add it to the manager
15   AliAnalysisTaskReducedTree *task=new AliAnalysisTaskReducedTree("DSTTreeMaker");
16   task->SetTriggerMask(AliVEvent::kMB+AliVEvent::kCentral+AliVEvent::kSemiCentral);
17   //if(trainConfig=="pp") task->SetRejectPileup();
18   if(!hasMC) task->UsePhysicsSelection(kTRUE);
19   mgr->AddTask(task);
20   
21   //  task->SetFillV0Info(kFALSE);
22   //task->SetFillGammaConversions(kFALSE);
23   task->SetFillK0s(kFALSE);
24   task->SetFillLambda(kFALSE);
25   task->SetFillALambda(kFALSE);
26   task->SetFillCaloClusterInfo(kFALSE);
27   //task->SetFillDielectronInfo(kFALSE);
28   task->SetFillFriendInfo(kFALSE);
29   
30   task->SetEventFilter(CreateEventFilter());
31   task->SetTrackFilter(CreateGlobalTrackFilter());
32   task->SetFlowTrackFilter(CreateFlowTrackFilter());
33   task->SetK0sPionCuts(CreateK0sPionCuts());
34   task->SetLambdaProtonCuts(CreateLambdaProtonCuts());
35   task->SetLambdaPionCuts(CreateLambdaPionCuts());
36   task->SetGammaElectronCuts(CreateGammaConvElectronCuts());
37   task->SetK0sCuts(CreateK0sCuts());
38   task->SetK0sMassRange(0.44,0.55);
39   task->SetLambdaMassRange(1.090,1.14);
40   task->SetLambdaCuts(CreateLambdaCuts());
41   task->SetGammaConvCuts(CreateGammaConvCuts(AliESDv0KineCuts::kPurity, AliESDv0KineCuts::kPbPb));
42   task->SetGammaConvMassRange(0.0,0.1);
43   //task->SetV0Histograms(CreateV0Histograms());
44   
45   //task->AddDielectron(ConfigDielectron(0));   // J/psi -> e+e-
46   //task->AddDielectron(ConfigDielectron(1));   // phi -> K+K-
47   
48   //create output container
49   AliAnalysisDataContainer *coutput1 =
50     mgr->CreateContainer("diele_defaultTree",
51                          TTree::Class(),
52                          AliAnalysisManager::kExchangeContainer,
53                          "diele_default");
54   
55   AliAnalysisDataContainer *cOutputHist1 =
56     mgr->CreateContainer("qaHistos",
57                          TList::Class(),
58                          AliAnalysisManager::kOutputContainer,
59                          "dst_Histos.root");
60
61   AliAnalysisDataContainer *cOutputHist2 =
62     mgr->CreateContainer("dstTree",
63                          TTree::Class(),
64                          AliAnalysisManager::kOutputContainer,
65                          "dstTree.root");
66   
67   /*AliAnalysisDataContainer *cOutputHist3 =
68     mgr->CreateContainer("friendTree",
69                          TTree::Class(),
70                          AliAnalysisManager::kOutputContainer,
71                          "dstTree_friend.root");*/
72   /*  cout << "output containers: " << endl
73        << cOutputHist1 << endl
74        << cOutputHist2 << endl
75        << cOutputHist3 << endl;*/
76
77   mgr->ConnectInput(task,  0, mgr->GetCommonInputContainer());
78   mgr->ConnectOutput(task, 0, coutput1 );
79   mgr->ConnectOutput(task, 1, cOutputHist1);
80   mgr->ConnectOutput(task, 2, cOutputHist2);
81   //mgr->ConnectOutput(task, 3, cOutputHist3);
82   //mgr->ConnectOutput(task, 2, cOutputHist3);
83   //mgr->ConnectOutput(task, 1, cOutputHist2);
84   return task;
85 }
86
87
88 //_______________________________________________________________________________________________
89 AliAnalysisCuts* CreateEventFilter() {
90   //
91   // Event wise cuts
92   //
93   AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
94   eventCuts->SetRequireVertex();
95   eventCuts->SetMinVtxContributors(1);
96   eventCuts->SetVertexZ(-10.,10.);
97   return eventCuts;
98 }
99
100
101 //_______________________________________________________________________________________________
102 AliAnalysisCuts* CreateGlobalTrackFilter() {
103   //
104   // Cuts for tracks to be written in the dst
105   //
106   AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
107   // general ESD cuts ---------------------------------
108   AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
109   // basic track quality cuts  (basicQ)
110   esdTrackCuts->SetMaxDCAToVertexZ(10.0);
111   esdTrackCuts->SetMaxDCAToVertexXY(3.0);
112   esdTrackCuts->SetEtaRange( -1.0 , 1.0 );
113   //esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
114   esdTrackCuts->SetRequireITSRefit(kTRUE);
115   esdTrackCuts->SetRequireTPCRefit(kTRUE);
116   esdTrackCuts->SetPRange(0.2,1e30);
117   //esdTrackCuts->SetPtRange(0.15,1e30);
118   //esdTrackCuts->SetMinNClustersTPC(60);
119   //esdTrackCuts->SetMaxChi2PerClusterTPC(4);
120   //  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
121   //  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
122   cuts->AddCut(esdTrackCuts);
123
124   AliDielectronPID *electronPid = new AliDielectronPID("PID","PID cut");
125   electronPid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.0, 4.0, 0.0, 0.0, kFALSE, AliDielectronPID::kRequire); // TPC 3-sigma inclusion for electron     
126   electronPid->AddCut(AliDielectronPID::kTOF,AliPID::kProton,  -3.0, 3.0, -2.0, 2.0, kTRUE, AliDielectronPID::kRequire,AliDielectronVarManager::kTPCnSigmaPro); // TPC exclusion for proton   
127   cuts->AddCut(electronPid);
128  
129   return cuts;
130 }
131
132
133 //_______________________________________________________________________________________________
134 AliAnalysisCuts* CreateFlowTrackFilter() {
135   //
136   // Cuts for tracks to be used for the event plane q-vector
137   // These cuts are applied aditionally to the global track cuts
138   //
139   AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
140   esdTrackCuts->SetPtRange(0.2,2.0);
141   esdTrackCuts->SetEtaRange(-0.8, 0.8);
142   esdTrackCuts->SetMinNClustersTPC(70);
143   return esdTrackCuts;
144 }
145
146
147 //_______________________________________________________________________________________________
148 AliAnalysisCuts* CreateK0sPionCuts() {
149   //
150   // Cuts on the K0s pions (tracking cuts, pid cuts, ...) 
151   //
152   AliESDtrackCuts *pionCuts = new AliESDtrackCuts;
153   pionCuts->SetPtRange(0.1,100.0);
154   pionCuts->SetRequireTPCRefit(kTRUE);
155   pionCuts->SetMinNClustersTPC(50);
156   return pionCuts;
157 }
158
159
160 //_______________________________________________________________________________________________
161 AliAnalysisCuts* CreateLambdaPionCuts() {
162   //
163   // Cuts on the Lambda pions (tracking cuts, pid cuts, ...) 
164   //
165   AliESDtrackCuts *pionCuts = new AliESDtrackCuts;
166   pionCuts->SetPtRange(0.1,100.0);
167   return pionCuts;
168 }
169
170
171 //_______________________________________________________________________________________________
172 AliAnalysisCuts* CreateLambdaProtonCuts() {
173   //
174   // Cuts on the Lambda protons (tracking cuts, pid cuts, ...) 
175   //
176   AliESDtrackCuts *protonCuts = new AliESDtrackCuts;
177   protonCuts->SetPtRange(0.1,100.0);
178   return protonCuts;
179 }
180
181
182 //______________________________________________________________________________________
183 AliAnalysisCuts* CreateGammaConvElectronCuts() {
184   //
185   // Cuts for the selection of electrons from gamma conversions
186   //
187   AliESDtrackCuts* electronCuts = new AliESDtrackCuts;
188   electronCuts->SetRequireTPCRefit(kTRUE);
189   electronCuts->SetMinNClustersTPC(50);
190   return electronCuts;
191 }
192
193
194 //______________________________________________________________________________________
195 AliESDv0Cuts* CreateK0sCuts() {
196   //
197   // Cuts on the V0s with K0s hypothesis
198   //
199   
200   AliESDv0Cuts *cuts=new AliESDv0Cuts();
201   //cuts->SetMinDcaPosToVertex(-1);
202   //cuts->SetMinDcaNegToVertex(-1);
203   //cuts->SetMaxChi2(10);
204   //cuts->SetMaxDcaV0Daughters(0.3);
205   //cuts->SetMinRadius(3.0);
206   //cuts->SetMaxRadius(90.0);
207   cuts->SetMinCosinePointingAngle(0.8);
208   //cuts->SetRequireOnFlyStatus(kTRUE);
209   //cuts->SetMaxDcaV0ToVertex(0.5);
210   //cuts->SetPRange(0.,1.0e10);
211   //cuts->SetPtRange(0.,1.0e10);
212   return cuts;
213 }
214
215
216 //______________________________________________________________________________________
217 AliESDv0Cuts* CreateLambdaCuts() {
218   //
219   // Cuts on the V0s with Lambda hypothesis
220   //
221   
222   AliESDv0Cuts *cuts=new AliESDv0Cuts();
223   //cuts->SetMinDcaPosToVertex(-1);
224   //cuts->SetMinDcaNegToVertex(-1);
225   //cuts->SetMaxChi2(10);
226   //cuts->SetMaxDcaV0Daughters(0.3);
227   //cuts->SetMinRadius(3.0);
228   //cuts->SetMaxRadius(90.0);
229   //cuts->SetMinCosinePointingAngle(0.9);
230   //cuts->SetRequireOnFlyStatus(kTRUE);
231   //cuts->SetMaxDcaV0ToVertex(0.5);
232   //cuts->SetPRange(0.,1.0e10);
233   //cuts->SetPtRange(0.,1.0e10);
234   return cuts;
235 }
236
237
238 //______________________________________________________________________________________
239 AliESDv0KineCuts* CreateGammaConvCuts(Int_t mode, Int_t type) {
240   //
241   // cuts for the selection of gamma conversions
242   //
243   AliESDv0KineCuts* cuts = new AliESDv0KineCuts();
244   cuts->SetMode(mode, type);
245   
246   //cuts->SetNTPCclusters(60);
247   cuts->SetTPCrefit(kTRUE);
248   //cuts->SetTPCchi2perCls(4.0);
249   //cuts->SetTPCclusterratio(0.6);
250   cuts->SetNoKinks(kTRUE);
251   // gamma cuts                                                                                                                      
252   cuts->SetGammaCutChi2NDF(10.0);
253   Float_t cosPoint[2] = {0.0, 0.2};
254   //cuts->SetGammaCutCosPoint(cosPoint);
255   Float_t cutDCA[2] = {0.0, 1.25};
256   cuts->SetGammaCutDCA(cutDCA);
257   Float_t vtxR[2] = {3.0, 90.0};
258   cuts->SetGammaCutVertexR(vtxR);
259   Float_t psiPairCut[2]={0.0,0.10};
260   cuts->SetGammaCutPsiPair(psiPairCut);
261   cuts->SetGammaCutInvMass(0.1);
262   
263   return cuts;
264 }
265
266
267 //______________________________________________________________________________________
268 AliDielectronHistos* CreateV0Histograms()
269 {
270   //
271   // Initialise the histograms
272   //
273   
274   //Setup histogram Manager
275   AliDielectronHistos *histos=new AliDielectronHistos("V0Histograms","");
276         
277   //add histograms to Track classes ---------------------------------------------------------------------------
278   histos->SetReservedWords("V0Track");
279   
280   //Track classes
281   histos->AddClass("V0Track_Pos"); histos->AddClass("V0Track_Neg"); 
282   
283   // kinematic acceptance histograms
284   histos->UserHistogram("V0Track","Pt","Pt;Pt (GeV/c);#tracks",400,0,20.,AliDielectronVarManager::kPt);
285   histos->UserHistogram("V0Track","Eta_P","Eta_P;#eta;P (GeV/c)",40, -1.0, +1.0, 200,0,10., AliDielectronVarManager::kEta, AliDielectronVarManager::kP);
286   histos->UserHistogram("V0Track","Eta_TRDPhi","Eta Phi Map; Eta; Phi;#tracks",
287                         40,-1,1,200,-3.15,3.15,AliDielectronVarManager::kEta,AliDielectronVarManager::kTRDphi);  
288
289   // DCA diagnostic histograms
290   histos->UserHistogram("V0Track","dXY","dXY;dXY (cm);#tracks",500,-1.,1.,AliDielectronVarManager::kImpactParXY);
291   histos->UserHistogram("V0Track","dZ","dZ;dZ (cm);#tracks",600,-3.,3.,AliDielectronVarManager::kImpactParZ);
292   histos->UserHistogram("V0Track","dZ_dXY","dZ_dXY;dZ (cm);dXY (cm)",600,-3.,3.,500,-1.,1.,AliDielectronVarManager::kImpactParZ, AliDielectronVarManager::kImpactParXY);
293   histos->UserHistogram("V0Track","P_dXY","P_dXY;P (GeV/c);dXY (cm)",200,0.,10.,500,-1.,1.,AliDielectronVarManager::kP, AliDielectronVarManager::kImpactParXY);
294   histos->UserHistogram("V0Track","P_dZ","P_dZ;P (GeV/c);dZ (cm)",200,0.,10.,600,-3.,3.,AliDielectronVarManager::kP, AliDielectronVarManager::kImpactParZ);
295
296   // ITS
297   histos->UserHistogram("V0Track","ITSsignal","ITS signal;ITS dE/dx",1000,0.0,1000.0, AliDielectronVarManager::kITSsignal);  
298   histos->UserHistogram("V0Track","ITSsignal_P","ITS signal vs P;P (GeV/c); ITS dE/dx",300, 0.0, 3.0, 200,0.0,1000.0, AliDielectronVarManager::kP, AliDielectronVarManager::kITSsignal);
299   
300   // TPC
301   histos->UserHistogram("V0Track","TPCchi2","#chi^{2}/cluster;#chi^{2}/cluster;#tracks",200,0.0,5.0, AliDielectronVarManager::kTPCchi2Cl);
302   histos->UserHistogram("V0Track","Pt_TPCchi2","#chi^{2}/cluster vs pt;p_{T} (GeV/c);#chi^{2}/cluster",400,0.,20., 200,0.0,5.0,
303                         AliDielectronVarManager::kPt,AliDielectronVarManager::kTPCchi2Cl);
304   histos->UserHistogram("V0Track","TPCnCls","Number of Clusters TPC;TPC number clusters;#tracks",160,-0.5,159.5, AliDielectronVarManager::kNclsTPC);
305   histos->UserHistogram("V0Track","Phi_TPCnCls","Number of Clusters TPC vs #phi;#phi (rad.);TPC number clusters",200,0,6.285, 160,-0.5,159.5,
306                         AliDielectronVarManager::kPhi,AliDielectronVarManager::kNclsTPC);
307   histos->UserHistogram("V0Track","Pin_TPCnCls","Number of Clusters TPC vs TPC inner param P;p (GeV/c);TPC number clusters",400,0,20., 160,-0.5,159.5,
308                         AliDielectronVarManager::kPIn, AliDielectronVarManager::kNclsTPC);
309   histos->UserHistogram("V0Track","TPCnCls_dEdx","Number of Clusters TPC vs dE/dx; TPC number clusters; dE/dx (arb.units)", 160,-0.5,159.5, 200,0,200.,
310                         AliDielectronVarManager::kNclsTPC, AliDielectronVarManager::kTPCsignal);
311   histos->UserHistogram("V0Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
312                         400,0.2,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal);
313   histos->UserHistogram("V0Track","dEdx_Eta","dEdx;#eta;TPC signal (arb units);#tracks",
314                         110,-1.1,1.1,200,0.,200.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCsignal);
315   histos->UserHistogram("V0Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
316                         400,0.2,20.,200,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle);
317   histos->UserHistogram("V0Track","TPCnSigmaEle_Eta","TPC number of sigmas Electrons;#eta;TPC number of sigmas Electrons;#tracks",
318                         110,-1.1,1.1,200,-5.,5.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);  
319   histos->UserHistogram("V0Track","TPCnSigmaPio_P","TPC number of sigmas Pions;P [GeV];TPC number of sigmas Pions;#tracks",
320                         400,0.2,20.,200,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio);
321   histos->UserHistogram("V0Track","TPCnSigmaPio_Eta","TPC number of sigmas Pions;#eta;TPC number of sigmas Pions;#tracks",
322                         110,-1.1,1.1,200,-5.,5.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaPio);  
323   histos->UserHistogram("V0Track","TPCnSigmaKao_P","TPC number of sigmas Kaons;P [GeV];TPC number of sigmas Kaons;#tracks",
324                         400,0.2,20.,200,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaKao);
325   histos->UserHistogram("V0Track","TPCnSigmaKao_Eta","TPC number of sigmas Kaons;#eta;TPC number of sigmas Kaons;#tracks",
326                         110,-1.1,1.1,200,-5.,5.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaKao);  
327   histos->UserHistogram("V0Track","TPCnSigmaPro_P","TPC number of sigmas Protons;P [GeV];TPC number of sigmas Protons;#tracks",
328                         400,0.2,20.,200,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPro);
329   histos->UserHistogram("V0Track","TPCnSigmaPro_Eta","TPC number of sigmas Protons;#eta;TPC number of sigmas Protons;#tracks",
330                         110,-1.1,1.1,200,-5.,5.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaPro);  
331   histos->UserHistogram("V0Track","POut","Track POut;P (GeV/c)",100,0.0,10.0, AliDielectronVarManager::kPOut);
332
333   // TOF
334   histos->UserHistogram("V0Track","Pin_TOFsignal","TOF signal vs TPC inner param P; P [GeV]; TOF signal",
335                         120,0.0,6.,1200,0.,120000.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFsignal);
336   histos->UserHistogram("V0Track","Pin_TOFbeta","TOF #beta vs TPC inner param P; P [GeV]; TOF #beta",
337                         120,0.0,6.,120,0.,1.2,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta);
338   histos->UserHistogram("V0Track","TOFnSigmaPio_Pin","TOF number of sigmas Pions;P [GeV];TOF number of sigmas Pions;#tracks",
339                         400,0.2,20.,200,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaPio);
340   histos->UserHistogram("V0Track","TOFnSigmaPio_eta","TOF number of sigmas Pions vs #eta;#eta;TOF number of sigmas Pions;#tracks",
341                         100,-1.2,1.2,200,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTOFnSigmaPio);
342   histos->UserHistogram("V0Track","TOFnSigmaKao_Pin","TOF number of sigmas Kaons;P [GeV];TOF number of sigmas Kaons;#tracks",
343                         400,0.2,20.,200,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaKao);
344   histos->UserHistogram("V0Track","TOFnSigmaKao_eta","TOF number of sigmas Kaons vs #eta;#eta;TOF number of sigmas Kaons;#tracks",
345                         100,-1.2,1.2,200,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTOFnSigmaKao);
346   histos->UserHistogram("V0Track","TOFnSigmaPro_Pin","TOF number of sigmas Protons;P [GeV];TOF number of sigmas Protons;#tracks",
347                         400,0.2,20.,200,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaPro);
348   histos->UserHistogram("V0Track","TOFnSigmaPro_eta","TOF number of sigmas Protons vs #eta;#eta;TOF number of sigmas Protons;#tracks",
349                         100,-1.2,1.2,200,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTOFnSigmaPro);
350   return histos;
351 }
352
353
354 //____________________________________________________________________________________________
355 AliDielectron* ConfigDielectron(Int_t cutDefinition)
356 {
357   //
358   // Setup the instance of an AliDielectron
359   //
360   const Char_t* dieleNames[2] = {"JpsiToEE", "PhiToKK"};
361       
362   AliDielectron *die =
363     new AliDielectron(dieleNames[cutDefinition],
364                       Form("Track cuts: %s", dieleNames));
365   die->SetDontClearArrays(kTRUE);
366   //die->SetEstimatorFilename("$TRAIN_ROOT/util/dielectron/dielectron/estimators.root");
367   if(cutDefinition==0) {       // J/psi -> e+e-
368     die->SetLegPdg(11,11);
369     die->SetMotherPdg(443);
370   }
371   if(cutDefinition==1) {       // phi -> K+K-
372     die->SetLegPdg(321,321);
373     die->SetMotherPdg(333);
374   }
375   
376   // cut setup
377   SetupDielectronTrackCuts(die,cutDefinition);
378   SetupDielectronPairCuts(die,cutDefinition);
379
380   // Set MC signals
381   //SetDielectronMCSignals(die);
382   
383   //
384   // histogram setup
385   // only if an AliDielectronHistos object is attached to the
386   // dielectron framework histograms will be filled
387   //
388   InitDielectronHistograms(die,cutDefinition);
389  
390   //setup eta correction
391   //SetEtaCorrection();
392
393   return die;
394 }
395
396 //______________________________________________________________________________________
397 void SetupDielectronTrackCuts(AliDielectron *die, Int_t cutDefinition)
398 {
399   //
400   // Setup the track cuts
401   //
402
403   AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
404   die->GetTrackFilter().AddCuts(cuts);
405   //ESD quality cuts  
406   AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
407   // basic track quality cuts  (basicQ)
408   esdTrackCuts->SetMaxDCAToVertexZ(3.0);
409   esdTrackCuts->SetMaxDCAToVertexXY(1.0);
410   if(cutDefinition==1) {
411     esdTrackCuts->SetMaxDCAToVertexZ(0.3);
412     esdTrackCuts->SetMaxDCAToVertexXY(0.3);
413   }
414   if(cutDefinition==1) esdTrackCuts->SetEtaRange(-1.0,1.0);
415   if(cutDefinition==0) esdTrackCuts->SetEtaRange(-0.9,0.9);
416   esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
417   //esdTrackCuts->SetRequireITSRefit(kTRUE);
418   if(cutDefinition==0) esdTrackCuts->SetRequireTPCRefit(kTRUE);
419   if(cutDefinition==0) esdTrackCuts->SetPRange(.8,1e30);   // for J/psi
420   if(cutDefinition==1) esdTrackCuts->SetPRange(.1,1e30);   // for phi
421   //if(cutDefinition==0) esdTrackCuts->SetMinNClustersTPC(60);
422   //if(cutDefinition==0) esdTrackCuts->SetMaxChi2PerClusterTPC(4);
423   //esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
424   cuts->AddCut(esdTrackCuts);
425     
426   Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
427
428   AliDielectronPID *pid = new AliDielectronPID("PID","PID cut");
429   if(cutDefinition==0) {   // J/psi->ee, phi->ee
430     pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.5, 4.5, 0.0, 0.0,  kFALSE, AliDielectronPID::kRequire); // TPC 3-sigma inclusion for electron
431     pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,  -100.0, 2.0, 0.0, 10.0, kTRUE,  AliDielectronPID::kRequire); // TPC 3.0-sigma exclusion for proton
432 //    pid->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,    -3.0, 3.0, 0.0, 10.0, kTRUE,  AliDielectronPID::kRequire); // TPC 3.0-sigma exclusion for kaon
433 //    pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,    -3.0, 3.0, 0.0, 10.0, kTRUE,  AliDielectronPID::kRequire); // TPC 3.0-sigma exclusion for pion
434   }
435   if(cutDefinition==1) {     // phi -> KK
436     pid->AddCut(AliDielectronPID::kTOF,AliPID::kKaon,   -3.5, 3.5, 0.6, 100.0, kFALSE, AliDielectronPID::kRequire, AliDielectronVarManager::kPIn);  // TOF 3-sigma inclusion for kaon
437     pid->AddCut(AliDielectronPID::kTPC,AliPID::kKaon,   -3.0, 3.5, 0.3, 100.0, kFALSE, AliDielectronPID::kRequire, AliDielectronVarManager::kPIn);  // TPC 3-sigma inclusion for kaon
438     /*    pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton, -2.0, 2.0, 0.0, 0.0, kTRUE,  AliDielectronPID::kRequire);  // TPC 2.0-sigma exclusion for  proton
439     pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,   -2.0, 2.0, 0.0, 0.0, kTRUE,  AliDielectronPID::kRequire);  // TPC 2.0-sigma exclusion for  pion
440     pid->AddCut(AliDielectronPID::kTOF,AliPID::kProton, -2.0, 2.0, 0.6, 3.0, kTRUE,  AliDielectronPID::kIfAvailable);  // TOF 2.0-sigma exclusion for  proton
441     pid->AddCut(AliDielectronPID::kTOF,AliPID::kPion,   -2.0, 2.0, 0.6, 3.0, kTRUE,  AliDielectronPID::kIfAvailable);  // TOF 2.0-sigma exclusion for  pion
442 */
443   }
444     
445   // ++++++++++++++++++++++++++++++++++++++++
446   // shifts for the nSigma electrons
447   TGraph* nSigmaCorrection = new TGraph();
448   // b period (LHC10f7a)
449   nSigmaCorrection->SetPoint(0, 114000., -0.23-(0.0));
450   nSigmaCorrection->SetPoint(1, 117222., -0.23-(0.0));
451   // c period (LHC10f7a)
452   nSigmaCorrection->SetPoint(2, 119000., -0.23-(0.0));
453   nSigmaCorrection->SetPoint(3, 120829., -0.23-(0.0));
454   // d period (LHC10f7a)
455   nSigmaCorrection->SetPoint(4, 121000., -0.353-(-0.111));
456   nSigmaCorrection->SetPoint(5, 127000., -0.353-(-0.111));
457   // e period (LHC10f7a)
458   nSigmaCorrection->SetPoint(6, 127500., -0.351-(-0.116));
459   nSigmaCorrection->SetPoint(7, 130900., -0.351-(-0.116));
460   // LHC11a period (LHC11b10b)
461   nSigmaCorrection->SetPoint(8, 146680., -0.70-(+0.381));   //
462   nSigmaCorrection->SetPoint(9, 146870., -0.70-(+0.381));   //
463   if(hasMC)
464     pid->SetCorrGraph(nSigmaCorrection);
465   
466   cuts->AddCut(pid);
467 }
468
469 //______________________________________________________________________________________
470 void SetupDielectronPairCuts(AliDielectron *die, Int_t cutDefinition)
471 {
472   //
473   // Setup the pair cuts
474   //
475   
476   //Invariant mass selection
477   AliDielectronVarCuts *cuts=new AliDielectronVarCuts("|y|<0.9","|Y|<.9");
478   if(cutDefinition==0) cuts->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
479   if(cutDefinition==1) cuts->AddCut(AliDielectronVarManager::kY,-1.0,1.0);
480   if(cutDefinition==1) cuts->AddCut(AliDielectronVarManager::kM, 0.95,1.1);
481   die->GetPairFilter().AddCuts(cuts);
482
483   // Configure prefilter to remove conversions
484   AliDielectronVarCuts *gammaCut=new AliDielectronVarCuts("gammaCut","gammaCut");
485   gammaCut->AddCut(AliDielectronVarManager::kM,0.,.05);
486   if(cutDefinition==0) {
487     die->GetPairPreFilter().AddCuts(gammaCut);
488     die->SetPreFilterUnlikeOnly();
489   }  
490 }
491
492 //______________________________________________________________________________________
493 void InitDielectronHistograms(AliDielectron *die, Int_t cutDefinition)
494 {
495   //
496   // Initialise the histograms
497   //
498   
499   //Setup histogram Manager
500   AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
501   
502   //Initialise histogram classes
503   histos->SetReservedWords("Track;Pair");
504   
505   //Track classes
506   //to fill also track info from 2nd event loop until 2
507   for (Int_t i=0; i<2; ++i){
508     histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
509   }
510   
511   //Pair classes
512   // to fill also mixed event histograms loop until 10
513   for (Int_t i=0; i<3; ++i){
514     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
515   }
516   
517   //legs from pair
518   for (Int_t i=0; i<3; ++i){
519     histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
520   }
521     
522   //add histograms to event class
523   if (cutDefinition==0) {
524     histos->AddClass("Event");
525     histos->UserHistogram("Event","VtxZ","Vertex Z;Z[cm]",500,-25.,25.,AliDielectronVarManager::kZvPrim);
526     histos->UserHistogram("Event","NTrk","NTrk",500,-0.5,499.5,AliDielectronVarManager::kNTrk);
527     histos->UserHistogram("Event","VtxZ_NaccTrcklts","VtxZ_NaccTrcklts;VtxZ;NaccTrcklts", 
528                           240,-12.,12.,200,-0.5,199.5,AliDielectronVarManager::kZvPrim, AliDielectronVarManager::kNaccTrcklts);
529  
530     histos->UserHistogram("Event","MultV0A","VZERO mult",2000,0.,2000.,AliDielectronVarManager::kMultV0A);
531     histos->UserHistogram("Event","MultV0C","VZERO mult",2000,0.,2000.,AliDielectronVarManager::kMultV0C);
532     histos->UserHistogram("Event","MultV0","VZERO mult",2000,0.,2000.,AliDielectronVarManager::kMultV0);
533     histos->UserHistogram("Event","AdcV0A","VZERO adc",10000,0.,100000.,AliDielectronVarManager::kAdcV0A);
534     histos->UserHistogram("Event","AdcV0C","VZERO adc",10000,0.,100000.,AliDielectronVarManager::kAdcV0C);
535     histos->UserHistogram("Event","AdcV0","VZERO adc",10000,0.,100000.,AliDielectronVarManager::kAdcV0);
536     histos->UserHistogram("Event","MultV0A_MultV0C","MultV0A_MultV0C;MultV0A;MultV0C", 
537                           2000,0.0,2000.,2000,0.0,2000,AliDielectronVarManager::kMultV0A, AliDielectronVarManager::kMultV0C);
538     histos->UserHistogram("Event","AdcV0A_AdcV0C","AdcV0A_AdcV0C;AdcV0A;AdcV0C", 
539                           1000,0.0,20000.,1000,0.0,20000,AliDielectronVarManager::kAdcV0A, AliDielectronVarManager::kAdcV0C);
540     histos->UserHistogram("Event","MultV0A_AdcV0A","MultV0A_AdcV0A;MultV0A;AdcV0A", 
541                           2000,0.0,2000.,2000,0.0,20000,AliDielectronVarManager::kMultV0A, AliDielectronVarManager::kAdcV0A);
542     histos->UserHistogram("Event","MultV0C_AdcV0C","MultV0C_AdcV0C;MultV0C;AdcV0C", 
543                           2000,0.0,2000.,2000,0.0,20000,AliDielectronVarManager::kMultV0C, AliDielectronVarManager::kAdcV0C);
544   }
545     
546   //add histograms to Track classes ---------------------------------------------------------------------------
547   // kinematic acceptance histograms
548   histos->UserHistogram("Track","Pt","Pt;Pt (GeV/c);#tracks",400,0,20.,AliDielectronVarManager::kPt);
549   histos->UserHistogram("Track","Eta_P","Eta_P;#eta;P (GeV/c)",40, -1.0, +1.0, 200,0,10., AliDielectronVarManager::kEta, AliDielectronVarManager::kP);
550   histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
551                         40,-1,1,200,0,6.285,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);  
552
553   // DCA diagnostic histograms
554   histos->UserHistogram("Track","dXY","dXY;dXY (cm);#tracks",500,-1.,1.,AliDielectronVarManager::kImpactParXY);
555   histos->UserHistogram("Track","dZ","dZ;dZ (cm);#tracks",600,-3.,3.,AliDielectronVarManager::kImpactParZ);
556   histos->UserHistogram("Track","dZ_dXY","dZ_dXY;dZ (cm);dXY (cm)",600,-3.,3.,500,-1.,1.,AliDielectronVarManager::kImpactParZ, AliDielectronVarManager::kImpactParXY);
557   histos->UserHistogram("Track","P_dXY","P_dXY;P (GeV/c);dXY (cm)",200,0.,10.,500,-1.,1.,AliDielectronVarManager::kP, AliDielectronVarManager::kImpactParXY);
558   histos->UserHistogram("Track","P_dZ","P_dZ;P (GeV/c);dZ (cm)",200,0.,10.,600,-3.,3.,AliDielectronVarManager::kP, AliDielectronVarManager::kImpactParZ);
559
560     // ITS
561   histos->UserHistogram("Track","ITSsignal","ITS signal;ITS dE/dx",1000,0.0,1000.0, AliDielectronVarManager::kITSsignal);  
562   histos->UserHistogram("Track","ITSsignal_P","ITS signal vs P;P (GeV/c); ITS dE/dx",300, 0.0, 3.0, 400,0.0,1000.0, AliDielectronVarManager::kP, AliDielectronVarManager::kITSsignal);
563   
564   // TPC
565   histos->UserHistogram("Track","TPCchi2","#chi^{2}/cluster;#chi^{2}/cluster;#tracks",200,0.0,5.0, AliDielectronVarManager::kTPCchi2Cl);
566   histos->UserHistogram("Track","Pt_TPCchi2","#chi^{2}/cluster vs pt;p_{T} (GeV/c);#chi^{2}/cluster",400,0.,20., 200,0.0,5.0,
567                         AliDielectronVarManager::kPt,AliDielectronVarManager::kTPCchi2Cl);
568   histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusters;#tracks",160,-0.5,159.5, AliDielectronVarManager::kNclsTPC);
569   histos->UserHistogram("Track","Phi_TPCnCls","Number of Clusters TPC vs #phi;#phi (rad.);TPC number clusters",200,0,6.285, 160,-0.5,159.5,
570                         AliDielectronVarManager::kPhi,AliDielectronVarManager::kNclsTPC);
571   histos->UserHistogram("Track","Pin_TPCnCls","Number of Clusters TPC vs TPC inner param P;p (GeV/c);TPC number clusters",400,0,20., 160,-0.5,159.5,
572                         AliDielectronVarManager::kPIn, AliDielectronVarManager::kNclsTPC);
573   histos->UserHistogram("Track","TPCnCls_dEdx","Number of Clusters TPC vs dE/dx; TPC number clusters; dE/dx (arb.units)", 160,-0.5,159.5, 200,0,200.,
574                         AliDielectronVarManager::kNclsTPC, AliDielectronVarManager::kTPCsignal);
575   histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
576                         400,0.2,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal);
577   histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
578                         400,0.2,20.,200,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle);
579   histos->UserHistogram("Track","TPCnSigmaPio_P","TPC number of sigmas Pions;P [GeV];TPC number of sigmas Pions;#tracks",
580                         400,0.2,20.,200,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio);
581   histos->UserHistogram("Track","TPCnSigmaKao_P","TPC number of sigmas Kaons;P [GeV];TPC number of sigmas Kaons;#tracks",
582                         400,0.2,20.,200,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaKao);
583   histos->UserHistogram("Track","TPCnSigmaPro_P","TPC number of sigmas Protons;P [GeV];TPC number of sigmas Protons;#tracks",
584                         400,0.2,20.,200,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPro);
585   histos->UserHistogram("Track","dEdx_Eta","dEdx;#eta;TPC signal (arb units);#tracks",
586                         100,-1.0,1.0,200,0.,200.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCsignal);
587   histos->UserHistogram("Track","TPCnSigmaEle_Eta","TPC number of sigmas Electrons;#eta;TPC number of sigmas Electrons;#tracks",
588                         100,-1.0,1.0,200,-5.,5.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);
589   histos->UserHistogram("Track","TPCnSigmaPio_Eta","TPC number of sigmas Pions;#eta;TPC number of sigmas Pions;#tracks",
590                         100,-1.0,1.0,200,-5.,5.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaPio);
591   histos->UserHistogram("Track","TPCnSigmaKao_Eta","TPC number of sigmas Kaons;#eta;TPC number of sigmas Kaons;#tracks",
592                         100,-1.0,1.0,200,-5.,5.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaKao);
593   histos->UserHistogram("Track","TPCnSigmaPro_Eta","TPC number of sigmas Protons;#eta;TPC number of sigmas Protons;#tracks",
594                         100,-1.0,1.0,200,-5.,5.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaPro);
595
596   // TOF
597   histos->UserHistogram("Track","Pin_TOFsignal","TOF signal vs TPC inner param P; P [GeV]; TOF signal",
598                         120,0.0,6.,1200,0.,120000.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFsignal);
599   histos->UserHistogram("Track","Pin_TOFbeta","TOF #beta vs TPC inner param P; P [GeV]; TOF #beta",
600                         120,0.0,6.,120,0.,1.2,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFbeta);
601   histos->UserHistogram("Track","TOFnSigmaPio_Pin","TOF number of sigmas Pions;P [GeV];TOF number of sigmas Pions;#tracks",
602                         400,0.2,20.,200,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaPio);
603   histos->UserHistogram("Track","TOFnSigmaPio_eta","TOF number of sigmas Pions vs #eta;#eta;TOF number of sigmas Pions;#tracks",
604                         100,-1.2,1.2,200,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTOFnSigmaPio);
605   histos->UserHistogram("Track","TOFnSigmaKao_Pin","TOF number of sigmas Kaons;P [GeV];TOF number of sigmas Kaons;#tracks",
606                         400,0.2,20.,200,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaKao);
607   histos->UserHistogram("Track","TOFnSigmaKao_eta","TOF number of sigmas Kaons vs #eta;#eta;TOF number of sigmas Kaons;#tracks",
608                         100,-1.2,1.2,200,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTOFnSigmaKao);
609   histos->UserHistogram("Track","TOFnSigmaPro_Pin","TOF number of sigmas Protons;P [GeV];TOF number of sigmas Protons;#tracks",
610                         400,0.2,20.,200,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaPro);
611   histos->UserHistogram("Track","TOFnSigmaPro_eta","TOF number of sigmas Protons vs #eta;#eta;TOF number of sigmas Protons;#tracks",
612                         100,-1.2,1.2,200,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTOFnSigmaPro);
613
614   //add histograms to Pair classes
615   Int_t nMassBins = 10000;
616   Double_t massRange[2] = {-0.005, 100.005};
617   if(cutDefinition==1) {   // Phi -> K+K-
618     nMassBins = 4000;
619     massRange[0] = 0.8; massRange[1] = 1.2;
620   }
621   histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
622                         nMassBins, massRange[0], massRange[1], AliDielectronVarManager::kM);
623   histos->UserHistogram("Pair","InvMass_Pt","Inv.Mass vs pt;Inv. Mass [GeV]; pt (GeV/c);#pairs",
624                         nMassBins/10, massRange[0], massRange[1], 100, 0.0, 50.0, AliDielectronVarManager::kM, AliDielectronVarManager::kPt);
625   histos->UserHistogram("Pair","InvMass_Cent","Inv.Mass vs centrality;Inv. Mass [GeV]; centrality;#pairs",
626                         nMassBins/10, massRange[0], massRange[1], 20, 0.0, 100.0, AliDielectronVarManager::kM, AliDielectronVarManager::kCentrality);
627   histos->UserHistogram("Pair","InvMass_Rap","Inv.Mass vs rapidity;Inv. Mass [GeV]; rapidity;#pairs",
628                         nMassBins/10, massRange[0], massRange[1], 100, -1.0, 1.0, AliDielectronVarManager::kM, AliDielectronVarManager::kY);
629   histos->UserHistogram("Pair","InvMass_OpAngle","Inv.Mass vs opening angle;Inv. Mass [GeV]; op. angle (rad.);#pairs",
630                         nMassBins/10, massRange[0], massRange[1], 100, 0.0, 4.0, AliDielectronVarManager::kM, AliDielectronVarManager::kOpeningAngle);
631   histos->UserHistogram("Pair","InvMass_ThetaHE","Inv.Mass vs cos #theta^{*}_{HE};Inv. Mass [GeV]; cos #theta^{*}_{HE};#pairs",
632                         nMassBins/10, massRange[0], massRange[1], 100, -1.0, 1.0, AliDielectronVarManager::kM, AliDielectronVarManager::kThetaHE);
633   histos->UserHistogram("Pair","InvMass_ThetaCS","Inv.Mass vs cos #theta^{*}_{CS};Inv. Mass [GeV]; cos #theta^{*}_{CS};#pairs",
634                         nMassBins/10, massRange[0], massRange[1], 100, -1.0, 1.0, AliDielectronVarManager::kM, AliDielectronVarManager::kThetaCS);
635   histos->UserHistogram("Pair","Pt","Transverse momentum; P_{t} [GeV/c];#pairs",
636                         1000, 0.0, 50.0, AliDielectronVarManager::kPt);
637   histos->UserHistogram("Pair","Pt_Y","Transverse momentum vs rapidity; rapidity;  P_{t} [GeV/c];#pairs",
638                         100, -1.0, 1.0, 200, 0.0, 50.0, AliDielectronVarManager::kY, AliDielectronVarManager::kPt);
639   histos->UserHistogram("Pair","Pt_ThetaCS","Transverse momentum vs cos #theta^{*}_{CS}; cos #theta^{*}_{CS};  P_{t} [GeV/c];#pairs",
640                         100, -1.0, 1.0, 200, 0.0, 50.0, AliDielectronVarManager::kThetaCS, AliDielectronVarManager::kPt);
641   histos->UserHistogram("Pair","Pt_ThetaHE","Transverse momentum vs cos #theta^{*}_{HE}; cos #theta^{*}_{HE};  P_{t} [GeV/c];#pairs",
642                         100, -1.0, 1.0, 200, 0.0, 50.0, AliDielectronVarManager::kThetaHE, AliDielectronVarManager::kPt);
643   histos->UserHistogram("Pair","Pt_Phi","Transverse momentum vs phi; #phi (rad.);  P_{t} [GeV/c];#pairs",
644                         200, -6.3, 6.3, 200, 0.0, 50.0, AliDielectronVarManager::kPhi, AliDielectronVarManager::kPt);
645   histos->UserHistogram("Pair","Phi","#phi; #phi (rad.);#pairs",
646                         1000, -6.3, 6.3, AliDielectronVarManager::kPhi);
647   histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
648                         100,-1.,1.,AliDielectronVarManager::kY);
649   histos->UserHistogram("Pair","Rapidity_OpAngle","Rapidity vs opening angle;Rapidity; Op.Angle (rad.);#pairs",
650                         100,-1.,1.,200, 0.0, 4.0, AliDielectronVarManager::kY, AliDielectronVarManager::kOpeningAngle);
651   histos->UserHistogram("Pair","Rapidity_ThetaCS","Rapidity vs cos #theta^{*}_{CS};Rapidity; cos #theta^{*}_{CS};#pairs",
652                         100,-1.,1.,200, -1.0, 1.0, AliDielectronVarManager::kY, AliDielectronVarManager::kThetaCS);
653   histos->UserHistogram("Pair","Rapidity_ThetaHE","Rapidity vs cos #theta^{*}_{HE};Rapidity; cos #theta^{*}_{HE};#pairs",
654                         100,-1.,1.,200, -1.0, 1.0, AliDielectronVarManager::kY, AliDielectronVarManager::kThetaHE);
655   histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
656                         100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
657   histos->UserHistogram("Pair","Radius","Radius;R[cm]",
658                         1000,0.,300.,AliDielectronVarManager::kR);
659   histos->UserHistogram("Pair","ThetaHE","cos #theta^{*}_{HE}; cos #theta^{*}_{HE}",
660                         220,-1.1,1.1,AliDielectronVarManager::kThetaHE);
661   histos->UserHistogram("Pair","PhiHE","#varphi^{*}_{HE};#varphi^{*}_{HE} (rad.)",
662                         160,-3.2,3.2,AliDielectronVarManager::kPhiHE);
663   histos->UserHistogram("Pair","ThetaCS","cos #theta^{*}_{CS}; cos #theta^{*}_{CS}",
664                         220,-1.1,1.1,AliDielectronVarManager::kThetaCS);
665   histos->UserHistogram("Pair","PhiCS","#varphi^{*}_{CS};#varphi^{*}_{CS} (rad.)",
666                         160,-3.2,3.2,AliDielectronVarManager::kPhiCS);
667   histos->UserHistogram("Pair","Lxy","Pseudo-proper time;Lxy (cm.)",
668                         1000,0.0,2.0,AliDielectronVarManager::kPseudoProperTime);
669   histos->UserHistogram("Pair","Chi2NDF","Pair #chi^{2}/NDF; #chi^{2}/NDF",
670                         1000,0.0,10.0,AliDielectronVarManager::kChi2NDF);
671   
672   
673   die->SetHistogramManager(histos);
674 }
675
676
677 //_____________________________________________________________________________________________
678 void SetDielectronMCSignals(AliDielectron *die)
679 {
680   // J/psi sources (direct + feed down from charm higher states)
681   // 0
682   AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi");   // prompt J/psi (not from beauty decays)
683   promptJpsi->SetLegPDGs(11,-11);
684   promptJpsi->SetMotherPDGs(443,443);
685   promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
686   promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
687   promptJpsi->SetFillPureMCStep(kTRUE);
688   promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
689   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
690   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
691   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
692   die->AddSignalMC(promptJpsi);
693
694   // 1
695   AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","beauty hadron -> J/psi");  // J/psi->e+e- from beauty hadron decays
696   beautyJpsi->SetLegPDGs(11,-11);
697   beautyJpsi->SetMotherPDGs(443,443);
698   beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
699   beautyJpsi->SetGrandMotherPDGs(503,503);
700   beautyJpsi->SetFillPureMCStep(kTRUE);
701   beautyJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
702   beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
703   beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
704   beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
705   die->AddSignalMC(beautyJpsi);
706
707   // 2
708   AliDielectronSignalMC* beautyMesonJpsi = new AliDielectronSignalMC("beautyMesonJpsi","beauty meson -> J/psi");  // J/psi->e+e- from beauty meson decays
709   beautyMesonJpsi->SetLegPDGs(11,-11);
710   beautyMesonJpsi->SetMotherPDGs(443,443);
711   beautyMesonJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
712   beautyMesonJpsi->SetGrandMotherPDGs(500,500);
713   beautyMesonJpsi->SetFillPureMCStep(kTRUE);
714   beautyMesonJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
715   beautyMesonJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
716   beautyMesonJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
717   beautyMesonJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
718   die->AddSignalMC(beautyMesonJpsi);
719   
720   // 3
721   AliDielectronSignalMC* openBeautyMesonJpsi = new AliDielectronSignalMC("openBeautyMesonJpsi","open beauty meson -> J/psi");  // J/psi->e+e- from open beauty meson decays
722   openBeautyMesonJpsi->SetLegPDGs(11,-11);
723   openBeautyMesonJpsi->SetMotherPDGs(443,443);
724   openBeautyMesonJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
725   openBeautyMesonJpsi->SetGrandMotherPDGs(501,501);
726   openBeautyMesonJpsi->SetFillPureMCStep(kTRUE);
727   openBeautyMesonJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
728   openBeautyMesonJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
729   openBeautyMesonJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
730   openBeautyMesonJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
731   die->AddSignalMC(openBeautyMesonJpsi);
732
733   // 4
734   AliDielectronSignalMC* chic0Jpsi = new AliDielectronSignalMC("chic0Jpsi","chic0 -> J/psi + X");  // J/psi->e+e- from chic0 decays
735   chic0Jpsi->SetLegPDGs(11,-11);
736   chic0Jpsi->SetMotherPDGs(443,443);
737   chic0Jpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
738   chic0Jpsi->SetGrandMotherPDGs(10441,10441);
739   chic0Jpsi->SetFillPureMCStep(kTRUE);
740   chic0Jpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
741   chic0Jpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
742   chic0Jpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
743   chic0Jpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
744   die->AddSignalMC(chic0Jpsi);
745   
746   // 5
747   AliDielectronSignalMC* chic1Jpsi = new AliDielectronSignalMC("chic1Jpsi","chic1 -> J/psi + X");  // J/psi->e+e- from chic1 decays
748   chic1Jpsi->SetLegPDGs(11,-11);
749   chic1Jpsi->SetMotherPDGs(443,443);
750   chic1Jpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
751   chic1Jpsi->SetGrandMotherPDGs(20443,20443);
752   chic1Jpsi->SetFillPureMCStep(kTRUE);
753   chic1Jpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
754   chic1Jpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
755   chic1Jpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
756   chic1Jpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
757   die->AddSignalMC(chic1Jpsi);
758   
759   // 6
760   AliDielectronSignalMC* chic2Jpsi = new AliDielectronSignalMC("chic2Jpsi","chic2 -> J/psi + X");  // J/psi->e+e- from chic2 decays
761   chic2Jpsi->SetLegPDGs(11,-11);
762   chic2Jpsi->SetMotherPDGs(443,443);
763   chic2Jpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
764   chic2Jpsi->SetGrandMotherPDGs(445,445);
765   chic2Jpsi->SetFillPureMCStep(kTRUE);
766   chic2Jpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
767   chic2Jpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
768   chic2Jpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
769   chic2Jpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
770   die->AddSignalMC(chic2Jpsi);
771   
772   // 7
773   AliDielectronSignalMC* psiPrimeJpsi = new AliDielectronSignalMC("psiPrimeJpsi","psi(2S) -> J/psi + X");  // J/psi->e+e- from psi(2S) decays
774   psiPrimeJpsi->SetLegPDGs(11,-11);
775   psiPrimeJpsi->SetMotherPDGs(443,443);
776   psiPrimeJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
777   psiPrimeJpsi->SetGrandMotherPDGs(445,445);
778   psiPrimeJpsi->SetFillPureMCStep(kTRUE);
779   psiPrimeJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
780   psiPrimeJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
781   psiPrimeJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
782   psiPrimeJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
783   die->AddSignalMC(psiPrimeJpsi);
784
785   // physical backgrounds (electrons pairs from other sources and their combinatorics)
786   // 8
787   AliDielectronSignalMC* diEleContinuum = new AliDielectronSignalMC("diEleContinuum","di-electron continuum");     // all di-electrons originating in the collision
788   diEleContinuum->SetLegPDGs(11,-11);
789   diEleContinuum->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
790   diEleContinuum->SetCheckBothChargesLegs(kTRUE,kTRUE);
791   diEleContinuum->SetFillPureMCStep(kTRUE);
792   die->AddSignalMC(diEleContinuum);
793
794   // 9
795   AliDielectronSignalMC* diEleCharm = new AliDielectronSignalMC("diEleCharm","di-electrons from charm");  // dielectrons originating from charm hadrons (not neccessary from same mother)
796   diEleCharm->SetLegPDGs(11,-11);
797   diEleCharm->SetMotherPDGs(403,403);
798   diEleCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
799   diEleCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
800   diEleCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
801   diEleCharm->SetFillPureMCStep(kTRUE);
802   die->AddSignalMC(diEleCharm);
803
804   // 10
805   AliDielectronSignalMC* diEleOpenCharm = new AliDielectronSignalMC("diEleOpenCharm","di-electrons from open charm");  // dielectrons originating from open charm hadrons
806   diEleOpenCharm->SetLegPDGs(11,-11);
807   diEleOpenCharm->SetMotherPDGs(402,402);
808   diEleOpenCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
809   diEleOpenCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
810   diEleOpenCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
811   diEleOpenCharm->SetFillPureMCStep(kTRUE);
812   die->AddSignalMC(diEleOpenCharm);
813
814   // 11
815   AliDielectronSignalMC* diEleOpenCharmJpsi = new AliDielectronSignalMC("diEleOpenCharmJpsi","1 leg from open charm + 1 jpsi leg");  // 1 leg from open charm + 1 leg from jpsi
816   diEleOpenCharmJpsi->SetLegPDGs(11,-11);
817   diEleOpenCharmJpsi->SetMotherPDGs(402,443);
818   diEleOpenCharmJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
819   diEleOpenCharmJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
820   diEleOpenCharmJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
821   diEleOpenCharmJpsi->SetFillPureMCStep(kTRUE);
822   die->AddSignalMC(diEleOpenCharmJpsi);
823   
824   // 12
825   AliDielectronSignalMC* diEleBeauty = new AliDielectronSignalMC("diEleBeauty","di-electrons from beauty");  // dielectrons originating from beauty hadrons (not neccessary from same mother)
826   diEleBeauty->SetLegPDGs(11,-11);
827   diEleBeauty->SetMotherPDGs(503,503);
828   diEleBeauty->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
829   diEleBeauty->SetCheckBothChargesLegs(kTRUE,kTRUE);
830   diEleBeauty->SetCheckBothChargesMothers(kTRUE,kTRUE);
831   diEleBeauty->SetFillPureMCStep(kTRUE);
832   die->AddSignalMC(diEleBeauty);
833
834   // 13
835   AliDielectronSignalMC* diEleOpenBeauty = new AliDielectronSignalMC("diEleOpenBeauty","di-electrons from open beauty");  // dielectrons originating from open beauty hadrons
836   diEleOpenBeauty->SetLegPDGs(11,-11);
837   diEleOpenBeauty->SetMotherPDGs(502,502);
838   diEleOpenBeauty->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
839   diEleOpenBeauty->SetCheckBothChargesLegs(kTRUE,kTRUE);
840   diEleOpenBeauty->SetCheckBothChargesMothers(kTRUE,kTRUE);
841   diEleOpenBeauty->SetFillPureMCStep(kTRUE);
842   die->AddSignalMC(diEleOpenBeauty);
843
844   // 14
845   AliDielectronSignalMC* diEleBeautyJpsi = new AliDielectronSignalMC("diEleBeautyJpsi","1 leg from beauty + 1 jpsi leg");  // 1 leg from beauty + 1 leg from jpsi
846   diEleBeautyJpsi->SetLegPDGs(11,-11);
847   diEleBeautyJpsi->SetMotherPDGs(503,443);
848   diEleBeautyJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
849   diEleBeautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
850   diEleBeautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
851   diEleBeautyJpsi->SetFillPureMCStep(kTRUE);
852   die->AddSignalMC(diEleBeautyJpsi);
853
854   // 15
855   AliDielectronSignalMC* diEleBeautyOpenCharm = new AliDielectronSignalMC("diEleBeautyOpenCharm","1 leg from beauty + 1 leg from open charm");  // 1 leg from open charm + 1 leg from beauty
856   diEleBeautyOpenCharm->SetLegPDGs(11,-11);
857   diEleBeautyOpenCharm->SetMotherPDGs(503,403);
858   diEleBeautyOpenCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
859   diEleBeautyOpenCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
860   diEleBeautyOpenCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
861   diEleBeautyOpenCharm->SetFillPureMCStep(kTRUE);
862   die->AddSignalMC(diEleBeautyOpenCharm);
863   
864   // 16
865   AliDielectronSignalMC* diEleStrange = new AliDielectronSignalMC("diEleStrange","di-electrons from strange particles");  // dielectrons originating from strange hadrons (not neccessary from same mother)
866   diEleStrange->SetLegPDGs(11,-11);
867   diEleStrange->SetMotherPDGs(300,300);
868   diEleStrange->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
869   diEleStrange->SetCheckBothChargesLegs(kTRUE,kTRUE);
870   diEleStrange->SetCheckBothChargesMothers(kTRUE,kTRUE);
871   diEleStrange->SetFillPureMCStep(kTRUE);
872   die->AddSignalMC(diEleStrange);
873   
874   // 17
875   AliDielectronSignalMC* diEleStrangeCharm = new AliDielectronSignalMC("diEleStrangeCharm","1 leg from strange + 1 leg from charm");  // 1 leg from strange + 1 leg from charm
876   diEleStrangeCharm->SetLegPDGs(11,-11);
877   diEleStrangeCharm->SetMotherPDGs(300,403);
878   diEleStrangeCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
879   diEleStrangeCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
880   diEleStrangeCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
881   diEleStrangeCharm->SetFillPureMCStep(kTRUE);
882   die->AddSignalMC(diEleStrangeCharm);
883   
884   // 18
885   AliDielectronSignalMC* diEleStrangeBeauty = new AliDielectronSignalMC("diEleStrangeBeauty","1 leg from strange + 1 leg from beauty");  // 1 leg from strange + 1 leg from beauty
886   diEleStrangeBeauty->SetLegPDGs(11,-11);
887   diEleStrangeBeauty->SetMotherPDGs(300,503);
888   diEleStrangeBeauty->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
889   diEleStrangeBeauty->SetCheckBothChargesLegs(kTRUE,kTRUE);
890   diEleStrangeBeauty->SetCheckBothChargesMothers(kTRUE,kTRUE);
891   diEleStrangeBeauty->SetFillPureMCStep(kTRUE);
892   die->AddSignalMC(diEleStrangeBeauty);
893   
894   // 19
895   AliDielectronSignalMC* diEleLight1 = new AliDielectronSignalMC("diEleLight1","1 leg from light particles + 1 leg from everything");  // 1 leg from light hadrons (100+ PYTHIA codes) + 1 leg from everything
896   diEleLight1->SetLegPDGs(11,-11);
897   diEleLight1->SetMotherPDGs(100,0);
898   diEleLight1->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
899   diEleLight1->SetCheckBothChargesLegs(kTRUE,kTRUE);
900   diEleLight1->SetCheckBothChargesMothers(kTRUE,kTRUE);
901   diEleLight1->SetFillPureMCStep(kTRUE);
902   die->AddSignalMC(diEleLight1);
903   
904   // 20
905   AliDielectronSignalMC* diEleLight1Charm = new AliDielectronSignalMC("diEleLight1Charm","1 leg from light particles + 1 leg from charm");  // 1 leg from light hadrons (100+ PYTHIA codes) + 1 leg from charm
906   diEleLight1Charm->SetLegPDGs(11,-11);
907   diEleLight1Charm->SetMotherPDGs(100,403);
908   diEleLight1Charm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
909   diEleLight1Charm->SetCheckBothChargesLegs(kTRUE,kTRUE);
910   diEleLight1Charm->SetCheckBothChargesMothers(kTRUE,kTRUE);
911   diEleLight1Charm->SetFillPureMCStep(kTRUE);
912   die->AddSignalMC(diEleLight1Charm);
913   
914   // 21
915   AliDielectronSignalMC* diEleLight1Beauty = new AliDielectronSignalMC("diEleLight1Beauty","1 leg from light particles + 1 leg from beauty");  // 1 leg from light hadrons (100+ PYTHIA codes) + 1 leg from beauty
916   diEleLight1Beauty->SetLegPDGs(11,-11);
917   diEleLight1Beauty->SetMotherPDGs(100,503);
918   diEleLight1Beauty->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
919   diEleLight1Beauty->SetCheckBothChargesLegs(kTRUE,kTRUE);
920   diEleLight1Beauty->SetCheckBothChargesMothers(kTRUE,kTRUE);
921   diEleLight1Beauty->SetFillPureMCStep(kTRUE);
922   die->AddSignalMC(diEleLight1Beauty);
923   
924   // 22
925   AliDielectronSignalMC* diEleLight2 = new AliDielectronSignalMC("diEleLight2","1 leg from light particles + 1 leg from everything");  // 1 leg from light hadrons (200+ PYTHIA codes) + 1 leg from everything
926   diEleLight2->SetLegPDGs(11,-11);
927   diEleLight2->SetMotherPDGs(200,0);
928   diEleLight2->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
929   diEleLight2->SetCheckBothChargesLegs(kTRUE,kTRUE);
930   diEleLight2->SetCheckBothChargesMothers(kTRUE,kTRUE);
931   diEleLight2->SetFillPureMCStep(kTRUE);
932   die->AddSignalMC(diEleLight2);
933   
934   // 23
935   AliDielectronSignalMC* diEleLight2Charm = new AliDielectronSignalMC("diEleLight2Charm","1 leg from light particles + 1 leg from charm");  // 1 leg from light hadrons (200+ PYTHIA codes) + 1 leg from charm
936   diEleLight2Charm->SetLegPDGs(11,-11);
937   diEleLight2Charm->SetMotherPDGs(100,403);
938   diEleLight2Charm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
939   diEleLight2Charm->SetCheckBothChargesLegs(kTRUE,kTRUE);
940   diEleLight2Charm->SetCheckBothChargesMothers(kTRUE,kTRUE);
941   diEleLight2Charm->SetFillPureMCStep(kTRUE);
942   die->AddSignalMC(diEleLight2Charm);
943   
944   // 24
945   AliDielectronSignalMC* diEleLight2Beauty = new AliDielectronSignalMC("diEleLight2Beauty","1 leg from light particles + 1 leg from beauty");  // 1 leg from light hadrons (100+ PYTHIA codes) + 1 leg from beauty
946   diEleLight2Beauty->SetLegPDGs(11,-11);
947   diEleLight2Beauty->SetMotherPDGs(100,503);
948   diEleLight2Beauty->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
949   diEleLight2Beauty->SetCheckBothChargesLegs(kTRUE,kTRUE);
950   diEleLight2Beauty->SetCheckBothChargesMothers(kTRUE,kTRUE);
951   diEleLight2Beauty->SetFillPureMCStep(kTRUE);
952   die->AddSignalMC(diEleLight2Beauty);
953   
954   // background from secondary electrons
955   // 25
956   AliDielectronSignalMC* secondaryElectrons = new AliDielectronSignalMC("secondaryElectrons","Secondary electrons");   // all di-electrons from secondary electrons (interaction with detector)
957   secondaryElectrons->SetLegPDGs(11,-11);
958   secondaryElectrons->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
959   secondaryElectrons->SetCheckBothChargesLegs(kTRUE,kTRUE);
960   die->AddSignalMC(secondaryElectrons);
961
962   // 26
963   AliDielectronSignalMC* primarySecElePairs = new AliDielectronSignalMC("primarySecElePairs","Primary+Secondary electron pairs");  // primary-secondary pairs
964   primarySecElePairs->SetLegPDGs(11,-11);
965   primarySecElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
966   primarySecElePairs->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kSecondary);
967   die->AddSignalMC(primarySecElePairs);
968
969   // 27
970   AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs");      // pairs made from conversion (may be also from 2 different conversions)
971   conversionElePairs->SetLegPDGs(11,-11);
972   conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
973   conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
974   conversionElePairs->SetMotherPDGs(22,22);
975   die->AddSignalMC(conversionElePairs);
976
977   // misidentification
978   // 28
979   AliDielectronSignalMC* allEleMisIdPairs = new AliDielectronSignalMC("allEleMisIdPairs","all electron+misid. pairs");  // one true electron + a mis-id electron (all sources included)
980   allEleMisIdPairs->SetLegPDGs(11,11,kFALSE,kTRUE);
981   allEleMisIdPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
982   die->AddSignalMC(allEleMisIdPairs);
983
984   // 29
985   AliDielectronSignalMC* allMisIdMisIdPairs = new AliDielectronSignalMC("allMisIdMisIdPairs","all misid.+misid. pairs");  // mis-id + mis-id
986   allMisIdMisIdPairs->SetLegPDGs(11,11,kTRUE,kTRUE);
987   allMisIdMisIdPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
988   die->AddSignalMC(allMisIdMisIdPairs);
989
990   // 30
991   AliDielectronSignalMC* elePionPairs = new AliDielectronSignalMC("elePionPairs","electron+pion pairs");    // true electron + mis-id pion
992   elePionPairs->SetLegPDGs(11,211);
993   elePionPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
994   die->AddSignalMC(elePionPairs);
995
996   // 31
997   AliDielectronSignalMC* eleProtonPairs = new AliDielectronSignalMC("eleProtonPairs","Electron+proton pairs");  // true electron + mis-id proton
998   eleProtonPairs->SetLegPDGs(11,2212);
999   eleProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
1000   die->AddSignalMC(eleProtonPairs);
1001   
1002   // 32
1003   AliDielectronSignalMC* eleKaonPairs = new AliDielectronSignalMC("eleKaonPairs","electron+kaon pairs");   // true electron + mis-id kaon
1004   eleKaonPairs->SetLegPDGs(11,321);
1005   eleKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
1006   die->AddSignalMC(eleKaonPairs);
1007
1008   // 33
1009   AliDielectronSignalMC* eleProtonPairs = new AliDielectronSignalMC("eleProtonPairs","Electron+proton pairs");  // true electron + mis-id proton
1010   eleProtonPairs->SetLegPDGs(11,2212);
1011   eleProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
1012   die->AddSignalMC(eleProtonPairs);
1013
1014   // 34
1015   AliDielectronSignalMC* piPiPairs = new AliDielectronSignalMC("piPiPairs","pion+pion pairs");    // mis-id pion + mis-id pion
1016   piPiPairs->SetLegPDGs(211,211);
1017   piPiPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
1018   die->AddSignalMC(piPiPairs);
1019
1020   // 35
1021   AliDielectronSignalMC* piKaonPairs = new AliDielectronSignalMC("piKaonPairs","pion+kaon pairs");  // mis-id pion + mis-id kaon
1022   piKaonPairs->SetLegPDGs(211,321);
1023   piKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
1024   die->AddSignalMC(piKaonPairs);
1025
1026   // 36
1027   AliDielectronSignalMC* piProtonPairs = new AliDielectronSignalMC("piProtonPairs","pion+proton pairs");  // mis-id pion + mis-id proton
1028   piProtonPairs->SetLegPDGs(211,2212);
1029   piProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
1030   die->AddSignalMC(piProtonPairs);
1031
1032   // 37
1033   AliDielectronSignalMC* kaonKaonPairs = new AliDielectronSignalMC("kaonKaonPairs","kaon+kaon pairs");  // mis-id kaon + mis-id kaon
1034   kaonKaonPairs->SetLegPDGs(321,321);
1035   kaonKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
1036   die->AddSignalMC(kaonKaonPairs);
1037
1038   // 38
1039   AliDielectronSignalMC* muonAllPairs = new AliDielectronSignalMC("muonAllPairs","muon+everything pairs");        // mis-id muon + something else (electron, pion, kaon, proton)
1040   muonAllPairs->SetLegPDGs(13,13,kFALSE,kTRUE);
1041   muonAllPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
1042   die->AddSignalMC(muonAllPairs);
1043 }
1044
1045 //______________________________________________________________________________________
1046 /*void SetEtaCorrection()
1047 {
1048 //
1049 // Eta equalization for the TPC response
1050 //
1051   if (AliDielectronPID::GetEtaCorrFunction()) return;
1052
1053   TString list=gSystem->Getenv("LIST");
1054
1055   TFile f("$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root");
1056   if (!f.IsOpen()) return;
1057   TList *keys=f.GetListOfKeys();
1058
1059   for (Int_t i=0; i<keys->GetEntries(); ++i){
1060     TString kName=keys->At(i)->GetName();
1061     TPRegexp reg(kName);
1062     if (reg.MatchB(list)){
1063       printf("Using Eta Correction Function: %s\n",kName.Data());
1064       AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
1065     }
1066   }
1067 }*/