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