]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosLMEE/ConfigLMEEPbPb2011MC.C
New macros for the kaon train
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosLMEE / ConfigLMEEPbPb2011MC.C
1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void InitCF(AliDielectron* die, Int_t cutDefinition);
3 void EnableMC();
4 void SetSignals(AliDielectron *die);
5
6 TString names=("noPairing;TPCTOFCentnoRej;TPCTOFSemiCentnoRej;TPCTOFPerinoRej;TPCTOFCent;TPCTOFSemiCent;TPCTOFPeri;TPCTOFCentnoRejTight;TPCTOFCentTight");
7 TObjArray *arrNames=names.Tokenize(";");
8 const Int_t nDie=arrNames->GetEntries();
9
10 Bool_t MCenabled=kFALSE;
11
12
13 AliDielectron* ConfigLMEEPbPb2011MC(Int_t cutDefinition, Bool_t withMC=kTRUE, Bool_t CFenable=kTRUE)
14 {
15
16   Int_t selectedPID=-1;
17   Int_t selectedCentrality=-1;
18   Bool_t rejectionStep=kFALSE;
19   LMEECutLib*  LMCL = new LMEECutLib();
20
21   //
22   // Setup the instance of AliDielectron
23   //
24
25   MCenabled=withMC;
26   // create the actual framework object
27
28   TString name=Form("%02d",cutDefinition);
29   if ((cutDefinition)<arrNames->GetEntriesFast()){
30         name=arrNames->At((cutDefinition))->GetName();
31   }
32
33   //thisCut only relevant for MC:
34   AliDielectron *die =
35         new AliDielectron(Form
36                 ("%s",name.Data()),
37                 Form("Track cuts: %s",name.Data()));
38
39
40   if (MCenabled)
41           die->SetHasMC(kTRUE);
42
43
44   //Setup AnalysisSelection:
45   if (cutDefinition==0) {
46         //not yet implemented
47   }
48   else if (cutDefinition==1) {
49         selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
50         selectedCentrality = LMEECutLib::kPbPb2011Central;
51         rejectionStep = kFALSE;
52   }
53   else if (cutDefinition==2) {
54         selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
55         selectedCentrality = LMEECutLib::kPbPb2011SemiCentral;
56         rejectionStep = kFALSE;
57   }
58   else if (cutDefinition==3) {
59         selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
60         selectedCentrality = LMEECutLib::kPbPb2011Peripheral;
61         rejectionStep = kFALSE;
62   }
63   else if (cutDefinition==4) {
64         selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
65         selectedCentrality = LMEECutLib::kPbPb2011Central;
66         rejectionStep = kTRUE;
67   }
68   else if (cutDefinition==5) {
69         selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
70         selectedCentrality = LMEECutLib::kPbPb2011SemiCentral;
71         rejectionStep = kTRUE;
72   }
73   else if (cutDefinition==6) {
74         selectedPID = LMEECutLib::kPbPb2011TPCandTOFwide;
75         selectedCentrality = LMEECutLib::kPbPb2011Peripheral;
76         rejectionStep = kTRUE;
77   }
78
79 //Legacy cuts, check consistence w/ 1 & 4, then remove
80   else if (cutDefinition==7) {
81         selectedPID = LMEECutLib::kPbPb2011TPCandTOF;
82         selectedCentrality = LMEECutLib::kPbPb2011Central;
83         rejectionStep = kFALSE;
84   }
85   else if (cutDefinition==8) {
86         selectedPID = LMEECutLib::kPbPb2011TPCandTOF;
87         selectedCentrality = LMEECutLib::kPbPb2011Central;
88         rejectionStep = kTRUE;
89   }
90
91   else Semi{
92         cout << " =============================== " << endl;
93         cout << " ==== INVALID CONFIGURATION ==== " << endl;
94         cout << " =============================== " << endl;
95   }
96
97
98   //Now configure task
99
100   //Apply correct Pre-Filter Scheme, if necessary
101   die->SetPreFilterAllSigns();
102
103         if (rejectionStep) {
104                 die->GetTrackFilter().AddCuts(LMCL->GetPIDCutsPre(selectedPID) );
105                 die->GetPairPreFilterLegs().AddCuts(LMCL->GetPIDCutsAna(selectedPID) );
106                 die->GetPairPreFilter().AddCuts(LMCL->GetPairCuts(selectedPID) );
107         }
108         else { //No Prefilter, no Pairfilter
109                 die->GetTrackFilter().AddCuts( LMCL->GetPIDCutsAna(selectedPID) );
110         }
111         //Introduce NULL-check for pp?
112         die->GetEventFilter().AddCuts(LMCL->GetCentralityCuts(selectedCentrality));
113
114
115
116
117   AliDielectronTrackRotator *rot= 0x0;
118   /*AliDielectronTrackRotator *rot= LMCL->GetTrackRotator(selectedPID);
119   die->SetTrackRotator(rot);
120    */
121   AliDielectronMixingHandler *mix=LMCL->GetMixingHandler(selectedPID);
122   die->SetMixingHandler(mix);
123
124   // histogram setup
125   // only if an AliDielectronHistos object is attached to the
126   // dielectron framework histograms will be filled
127   //
128   InitHistograms(die,cutDefinition);
129
130   // the last definition uses no cuts and only the QA histograms should be filled!
131   if (CFenable) {
132     SetSignals(die);
133     InitCF(die,cutDefinition);
134   }
135   return die;
136 }
137
138 //______________________________________________________________________________________
139
140 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
141 {
142   //
143   // Initialise the histograms
144   //
145
146   //Setup histogram Manager
147   AliDielectronHistos *histos=
148         new AliDielectronHistos(die->GetName(),
149                 die->GetTitle());
150   //Initialise histogram classes
151   histos->SetReservedWords("Track;Pair;Pre;RejTrack;RejPair");
152
153   //Event class
154 //  if (cutDefinition==nDie-1) 
155   histos->AddClass("Event");
156
157   //Track classes
158   //to fill also track info from 2nd event loop until 2
159   for (Int_t i=0; i<2; ++i){
160         histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
161   }
162
163   //Pair classes
164   // to fill also mixed event histograms loop until 10
165   for (Int_t i=0; i<3; ++i){
166         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
167   }
168
169   //ME and track rot
170   if (die->GetMixingHandler()) {
171         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(3)));
172         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(4)));
173         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(6)));
174         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(7)));
175   }
176   if (die->GetTrackRotator()) {
177         histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(10)));
178   }
179
180   //PreFilter Classes
181   //to fill also track info from 2nd event loop until 2
182   for (Int_t i=0; i<2; ++i){
183         histos->AddClass(Form("Pre_%s",AliDielectron::TrackClassName(i)));
184   }
185
186
187   //Create Classes for Rejected Tracks/Pairs:
188   for (Int_t i=0; i<2; ++i){
189         histos->AddClass(Form("RejTrack_%s",AliDielectron::TrackClassName(i)));
190   }
191   for (Int_t i=0; i<3; ++i){
192         histos->AddClass(Form("RejPair_%s",AliDielectron::PairClassName(i)));
193   }
194
195   /*
196   //track rotation
197
198   histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
199   histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(AliDielectron::kEv1PMRot)));
200   */
201         //add histograms to event class
202         histos->UserHistogram("Event","nEvents","Number of processed events after cuts;Number events",
203                 1,0.,1.,AliDielectronVarManager::kNevents);
204         histos->UserHistogram("Event","Centrality","Centrality;Centrality [%]","0,10,20,40,80,100,101",
205                 AliDielectronVarManager::kCentrality);
206
207
208   //add histograms to Track classes, also fills RejTrack
209   histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",200,0,20.,AliDielectronVarManager::kPt);
210   histos->UserHistogram("Track","NclsSFracTPC","NclsSFracTPC; NclsSFracTPC;#tracks",200,0,10.,AliDielectronVarManager::kNclsSFracTPC);
211   histos->UserHistogram("Track","TPCclsDiff","TPCclsDiff; TPCclsDiff;#tracks",200,0,10.,AliDielectronVarManager::kTPCclsDiff);
212
213   histos->UserHistogram("Track","ITS_dEdx_P","ITS_dEdx;P [GeV];ITS signal (arb units);#tracks",
214           400,0.0,20.,1000,0.,1000.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSsignal,kTRUE);
215
216   histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
217           400,0.0,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
218
219   histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
220           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
221   histos->UserHistogram("Track","TPCnSigmaKao_P","TPC number of sigmas Kaons;P [GeV];TPC number of sigmas Kaons;#tracks",
222           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaKao,kTRUE);
223   histos->UserHistogram("Track","TPCnSigmaPio_P","TPC number of sigmas Pions;P [GeV];TPC number of sigmas Pions;#tracks",
224           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio,kTRUE);
225
226   histos->UserHistogram("Track","TRDpidPobEle_P","TRD PID probability Electrons;P [GeV];TRD prob Electrons;#tracks",
227           400,0.0,20.,100,0.,1.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTRDprobEle,kTRUE);
228   histos->UserHistogram("Track","TRDpidPobPio_P","TRD PID probability Pions;P [GeV];TRD prob Pions;#tracks",
229           400,0.0,20.,100,0.,1.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTRDprobPio,kTRUE);
230
231   histos->UserHistogram("Track","TOFnSigmaKao_P","TOF number of sigmas Kaons;P [GeV];TOF number of sigmas Kaons;#tracks",
232           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaKao,kTRUE);
233   histos->UserHistogram("Track","TOFnSigmaPro_P","TOF number of sigmas Protons;P [GeV];TOF number of sigmas Protons;#tracks",
234           400,0.0,20.,100,-5.,5.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaPro,kTRUE);
235
236   histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
237           200,-2,2,200,0,3.15,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
238
239   histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",200,-2.,2.,AliDielectronVarManager::kImpactParXY);
240
241   histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",159,0.,159.,AliDielectronVarManager::kNclsTPC);
242
243   histos->UserHistogram("Track","TPCnCls_kNFclsTPCr","nTPC vs nTPCr;nTPC vs nTPCr;#tracks",159,0.,159.,159,0.,159.,AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
244
245   histos->UserHistogram("Track","kNFclsTPCr_pT","nTPCr vs pt;nTPCr vs pt;#tracks",159,0.,159.,200,0.,20.,AliDielectronVarManager::kNFclsTPCr,AliDielectronVarManager::kPt);
246
247   //add histograms to Pair classes, also fills RejPair
248   histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
249           500,0.0,5.00,AliDielectronVarManager::kM);
250   histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
251           100,-2.,2.,AliDielectronVarManager::kY);
252   histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
253           100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
254   //2D Histo Plot
255   histos->UserHistogram("Pair","InvMassPairPt","Inv.Mass vs PairPt;Inv. Mass [GeV], pT [GeV];#pairs",
256           500,0.0,5.0,500,0.,50.,AliDielectronVarManager::kM,AliDielectronVarManager::kPt);
257
258   histos->UserHistogram("Pair","InvMassOpeningAngle","Opening Angle vs Inv.Mass;Inv. Mass [GeV];#pairs",
259           500,0.0,5.0,200,0.,6.3,AliDielectronVarManager::kM,AliDielectronVarManager::kOpeningAngle);
260
261   //add histograms to Track classes
262   histos->UserHistogram("Pre","Pt","Pt;Pt [GeV];#tracks",200,0,20.,AliDielectronVarManager::kPt);
263
264   histos->UserHistogram("Pre","ITS_dEdx_P","ITS_dEdx;P [GeV];ITS signal (arb units);#tracks",
265           400,0.0,20.,1000,0.,1000.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSsignal,kTRUE);
266
267   histos->UserHistogram("Pre","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
268           400,0.0,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
269
270   histos->UserHistogram("Pre","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
271           200,-2,2,200,0,3.15,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
272
273   histos->UserHistogram("Pre","dXY","dXY;dXY [cm];#tracks",200,-2.,2.,AliDielectronVarManager::kImpactParXY);
274
275   histos->UserHistogram("Pre","ZVertex ","ZVertex ;ZVertex[cm];#tracks",20,-20,20,AliDielectronVarManager::kZv);
276   histos->UserHistogram("Pre","XVertex ","XVertex ;XVertex[cm];#tracks",20,-20,20,AliDielectronVarManager::kXv);
277   histos->UserHistogram("Pre","YVertex ","YVertex ;YVertex[cm];#tracks",20,-20,20,AliDielectronVarManager::kYv);
278
279 //  histos->UserHistogram("Pre","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",159,0.,159.,AliDielectronVarManager::kNclsTPC);
280
281
282   die->SetHistogramManager(histos);
283 }
284
285
286 void InitCF(AliDielectron* die, Int_t cutDefinition)
287 {
288   //
289   // Setupd the CF Manager if needed
290   //
291   AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
292
293   //pair variables
294   cf->AddVariable(AliDielectronVarManager::kP,200,0,20);
295   cf->AddVariable(AliDielectronVarManager::kPt,200,0,20);
296   cf->AddVariable(AliDielectronVarManager::kM,2001,-0.01,4.01); //2Mev Steps
297   cf->AddVariable(AliDielectronVarManager::kY,100,-2.,2.);
298   cf->AddVariable(AliDielectronVarManager::kPairType,10,0,10);
299
300   cf->AddVariable(AliDielectronVarManager::kCentrality,"0.,10.0,30.0,40.0,60.,80.,100.");
301   cf->AddVariable(AliDielectronVarManager::kOpeningAngle,320,0.,3.2);
302   cf->AddVariable(AliDielectronVarManager::kPsiPair,320,0.,3.2);
303   //leg variables
304   cf->AddVariable(AliDielectronVarManager::kP,200,0.,20.,kTRUE);
305   cf->AddVariable(AliDielectronVarManager::kPt,200,0.,20.,kTRUE);
306   cf->AddVariable(AliDielectronVarManager::kITSsignal,1000,0.0.,1000.,kTRUE);
307   cf->AddVariable(AliDielectronVarManager::kTPCsignal,500,0.0.,500.,kTRUE);
308   cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,100,-10.0.,10.,kTRUE);
309   cf->AddVariable(AliDielectronVarManager::kITSnSigmaEle,100,-10.0.,10.,kTRUE);
310   cf->AddVariable(AliDielectronVarManager::kY,100,-2.,2.,kTRUE);
311   //only in this case write MC truth info
312   if (MCenabled) {
313     cf->SetStepForMCtruth();
314     //cf->SetStepsForMCtruthOnly();
315     cf->SetStepForAfterAllCuts();
316     cf->AddVariable(AliDielectronVarManager::kHaveSameMother,5,-2,2);
317     //cf->AddVariable(AliDielectronVarManager::kPdgCode,10000,-5000.5,4999.5,kTRUE);
318     //cf->AddVariable(AliDielectronVarManager::kPdgCodeMother,10000,-5000.5,4999.5,kTRUE);
319   }
320
321   cf->SetStepsForSignal();
322   die->SetCFManagerPair(cf);
323
324
325   /*
326  AliDielectronSignalMC* lowMassDiele=new
327     AliDielectronSignalMC("lowMassDiele","low mass dielectron pairs");
328   lowMassDiele->SetLegPDGs(11,-11);
329   lowMassDiele->SetCheckBothChargesLegs(kTRUE,kTRUE);
330   lowMassDiele->SetLegSources(AliDielectronSignalMC::kPrimary,
331       AliDielectronSignalMC::kPrimary);
332   lowMassDiele->SetFillPureMCStep(kTRUE);
333   die->AddSignalMC(lowMassDiele);
334
335   AliDielectronSignalMC* secondary=new
336     AliDielectronSignalMC("secondary","secondary electrons pairs");
337   secondary->SetLegPDGs(11,-11);
338   secondary->SetCheckBothChargesLegs(kTRUE,kTRUE);
339   secondary->SetLegSources(AliDielectronSignalMC::kSecondary,
340       AliDielectronSignalMC::kSecondary);
341   die->AddSignalMC(secondary);
342
343
344   AliDielectronSignalMC* finalState=new
345     AliDielectronSignalMC("finalState","finalState electrons pairs");
346   finalState->SetLegPDGs(11,-11);
347   finalState->SetCheckBothChargesLegs(kTRUE,kTRUE);
348   finalState->SetLegSources(AliDielectronSignalMC::kFinalState,
349       AliDielectronSignalMC::kFinalState);
350   die->AddSignalMC(finalState);
351   */
352
353 }
354
355 //--------------------------------------
356 void EnableMC() {
357   MCenabled=kTRUE;
358 }
359
360 //--------------------------------------
361 void SetSignals(AliDielectron *die)
362 {
363
364
365   AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi");   // prompt J/psi (not from beauty decays)
366   promptJpsi->SetLegPDGs(11,-11);
367   promptJpsi->SetMotherPDGs(443,443);
368   promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
369   promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
370   promptJpsi->SetFillPureMCStep(kTRUE);
371   promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
372   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
373   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
374   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
375   die->AddSignalMC(promptJpsi);
376
377   // physical backgrounds (electrons from other sources)
378   AliDielectronSignalMC* diEleContinuum = new AliDielectronSignalMC("diEleContinuum","di-electron continuum");     // all di-electrons originating in the collision
379   diEleContinuum->SetLegPDGs(11,-11);
380   diEleContinuum->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
381   diEleContinuum->SetCheckBothChargesLegs(kTRUE,kTRUE);
382   die->AddSignalMC(diEleContinuum);
383   
384   AliDielectronSignalMC* diEleCharm = new AliDielectronSignalMC("diEleCharm","di-electrons from charm");  // dielectrons originating from charm hadrons (not neccessary from same mother)
385   diEleCharm->SetLegPDGs(11,-11);
386   diEleCharm->SetMotherPDGs(403,403);
387   diEleCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
388   diEleCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
389   diEleCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
390   die->AddSignalMC(diEleCharm);
391
392   AliDielectronSignalMC* diEleOpenCharm = new AliDielectronSignalMC("diEleOpenCharm","di-electrons from open charm");  // dielectrons originating from open charm hadrons
393   diEleOpenCharm->SetLegPDGs(11,-11);
394   diEleOpenCharm->SetMotherPDGs(402,402);
395   diEleOpenCharm->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
396   diEleOpenCharm->SetCheckBothChargesLegs(kTRUE,kTRUE);
397   diEleOpenCharm->SetCheckBothChargesMothers(kTRUE,kTRUE);
398   die->AddSignalMC(diEleOpenCharm);
399
400
401   // background from secondary electrons
402   AliDielectronSignalMC* secondaryElectrons = new AliDielectronSignalMC("secondaryElectrons","Secondary electrons");   // all di-electrons from secondary electrons (interaction with detector)
403   secondaryElectrons->SetLegPDGs(11,-11);
404   secondaryElectrons->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
405   secondaryElectrons->SetCheckBothChargesLegs(kTRUE,kTRUE);
406   die->AddSignalMC(secondaryElectrons);
407
408   /*
409   AliDielectronSignalMC* primarySecElePairs = new AliDielectronSignalMC("primarySecElePairs","Primary+Secondary electron pairs");  // primary-secondary pairs
410   primarySecElePairs->SetLegPDGs(11,-11);
411   primarySecElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
412   primarySecElePairs->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kSecondary);
413   die->AddSignalMC(primarySecElePairs);
414   */
415
416   AliDielectronSignalMC* conversionElePairs = new AliDielectronSignalMC("conversionElePairs","conversion electron pairs");      // pairs made from conversion (may be also from 2 different conversions)
417   conversionElePairs->SetLegPDGs(11,-11);
418   conversionElePairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
419   conversionElePairs->SetLegSources(AliDielectronSignalMC::kSecondary, AliDielectronSignalMC::kSecondary);
420   conversionElePairs->SetMotherPDGs(22,22);
421   die->AddSignalMC(conversionElePairs);
422
423   // misidentification
424   /*
425   AliDielectronSignalMC* allEleMisIdPairs = new AliDielectronSignalMC("allEleMisIdPairs","all electron+misid. pairs");  // one true electron + a mis-id electron (all sources included)
426   allEleMisIdPairs->SetLegPDGs(11,11,kFALSE,kTRUE);
427   allEleMisIdPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
428   die->AddSignalMC(allEleMisIdPairs);
429
430   AliDielectronSignalMC* allMisIdMisIdPairs = new AliDielectronSignalMC("allMisIdMisIdPairs","all misid.+misid. pairs");  // mis-id + mis-id
431   allMisIdMisIdPairs->SetLegPDGs(11,11,kTRUE,kTRUE);
432   allMisIdMisIdPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
433   die->AddSignalMC(allMisIdMisIdPairs);
434
435   AliDielectronSignalMC* elePionPairs = new AliDielectronSignalMC("elePionPairs","electron+pion pairs");    // true electron + mis-id pion
436   elePionPairs->SetLegPDGs(11,211);
437   elePionPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
438   die->AddSignalMC(elePionPairs);
439
440   AliDielectronSignalMC* eleKaonPairs = new AliDielectronSignalMC("eleKaonPairs","electron+kaon pairs");   // true electron + mis-id kaon
441   eleKaonPairs->SetLegPDGs(11,321);
442   eleKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
443   die->AddSignalMC(eleKaonPairs);
444
445   AliDielectronSignalMC* eleProtonPairs = new AliDielectronSignalMC("eleProtonPairs","Electron+proton pairs");  // true electron + mis-id proton
446   eleProtonPairs->SetLegPDGs(11,2212);
447   eleProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
448   die->AddSignalMC(eleProtonPairs);
449
450   AliDielectronSignalMC* piPiPairs = new AliDielectronSignalMC("piPiPairs","pion+pion pairs");    // mis-id pion + mis-id pion
451   piPiPairs->SetLegPDGs(211,211);
452   piPiPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
453   die->AddSignalMC(piPiPairs);
454
455   AliDielectronSignalMC* piKaonPairs = new AliDielectronSignalMC("piKaonPairs","pion+kaon pairs");  // mis-id pion + mis-id kaon
456   piKaonPairs->SetLegPDGs(211,321);
457   piKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
458   die->AddSignalMC(piKaonPairs);
459
460   AliDielectronSignalMC* piProtonPairs = new AliDielectronSignalMC("piProtonPairs","pion+proton pairs");  // mis-id pion + mis-id proton
461   piProtonPairs->SetLegPDGs(211,2212);
462   piProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
463   die->AddSignalMC(piProtonPairs);
464
465   AliDielectronSignalMC* kaonKaonPairs = new AliDielectronSignalMC("kaonKaonPairs","kaon+kaon pairs");  // mis-id kaon + mis-id kaon
466   kaonKaonPairs->SetLegPDGs(321,321);
467   kaonKaonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
468   die->AddSignalMC(kaonKaonPairs);
469
470   AliDielectronSignalMC* kaonProtonPairs = new AliDielectronSignalMC("kaonProtonPairs","kaon+proton pairs");   // mis-id kaon + mis-id proton
471   kaonProtonPairs->SetLegPDGs(321,2212);
472   kaonProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
473   die->AddSignalMC(kaonProtonPairs);
474
475   AliDielectronSignalMC* protonProtonPairs = new AliDielectronSignalMC("protonProtonPairs","proton+proton pairs");  // mis-id proton + mis-id proton
476   protonProtonPairs->SetLegPDGs(2212,2212);
477   protonProtonPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
478   die->AddSignalMC(protonProtonPairs);
479
480   AliDielectronSignalMC* muonAllPairs = new AliDielectronSignalMC("muonAllPairs","muon+everything pairs");        // mis-id muon + something else (electron, pion, kaon, proton)
481   muonAllPairs->SetLegPDGs(13,13,kFALSE,kTRUE);
482   muonAllPairs->SetCheckBothChargesLegs(kTRUE,kTRUE);
483   die->AddSignalMC(muonAllPairs);
484   */
485
486
487   AliDielectronSignalMC* pi0Sig = new AliDielectronSignalMC("pi0", "pi0Signal"); ///pi0 dalitz pairs 
488   pi0Sig->SetLegPDGs(11,-11);
489   pi0Sig->SetMotherPDGs(111,111);
490   pi0Sig->SetMothersRelation(AliDielectronSignalMC::kSame);
491   pi0Sig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
492   pi0Sig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
493   pi0Sig->SetCheckBothChargesLegs(kFALSE,kFALSE);
494   pi0Sig->SetCheckBothChargesMothers(kTRUE,kTRUE);
495   pi0Sig->SetFillPureMCStep(kTRUE);
496   die->AddSignalMC(pi0Sig);
497
498
499   AliDielectronSignalMC* etaSig = new AliDielectronSignalMC("Eta", "etaSignal"); ///eta dalitz pairs 
500   etaSig->SetLegPDGs(11,-11);
501   etaSig->SetMotherPDGs(221,221);
502   etaSig->SetMothersRelation(AliDielectronSignalMC::kSame);
503   etaSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
504   etaSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
505   etaSig->SetCheckBothChargesLegs(kFALSE,kFALSE);
506   etaSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
507   etaSig->SetFillPureMCStep(kTRUE);
508   die->AddSignalMC(etaSig);
509
510
511   AliDielectronSignalMC* etaprimeSig = new AliDielectronSignalMC("Etaprime", "etaprimeSignal"); ///etaprime pairs 
512   etaprimeSig->SetLegPDGs(11,-11);
513   etaprimeSig->SetMotherPDGs(331,331);
514   etaprimeSig->SetMothersRelation(AliDielectronSignalMC::kSame);
515   etaprimeSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
516   etaprimeSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
517   etaprimeSig->SetCheckBothChargesLegs(kFALSE,kFALSE);
518   etaprimeSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
519   etaprimeSig->SetFillPureMCStep(kTRUE);
520   die->AddSignalMC(etaprimeSig);
521
522
523   AliDielectronSignalMC* rhoSig = new AliDielectronSignalMC("Rho", "rhoSignal"); ///rho pairs 
524   rhoSig->SetLegPDGs(11,-11);
525   rhoSig->SetMotherPDGs(113,113);
526   rhoSig->SetMothersRelation(AliDielectronSignalMC::kSame);
527   rhoSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
528   rhoSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
529   rhoSig->SetCheckBothChargesLegs(kFALSE,kFALSE);
530   rhoSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
531   rhoSig->SetFillPureMCStep(kTRUE);
532   die->AddSignalMC(rhoSig);
533
534   AliDielectronSignalMC* omegaSig = new AliDielectronSignalMC("Omega", "omegaSignal"); ///omega pairs 
535   omegaSig->SetLegPDGs(11,-11);
536   omegaSig->SetMotherPDGs(223,223);
537   omegaSig->SetMothersRelation(AliDielectronSignalMC::kSame);
538   omegaSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
539   omegaSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
540   omegaSig->SetCheckBothChargesLegs(kFALSE,kFALSE);
541   omegaSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
542   omegaSig->SetFillPureMCStep(kTRUE);
543   die->AddSignalMC(omegaSig);
544   
545   AliDielectronSignalMC* phiSig = new AliDielectronSignalMC("Phi", "phiSignal"); ///phi pairs 
546   phiSig->SetLegPDGs(11,-11);
547   phiSig->SetMotherPDGs(333,333);
548   phiSig->SetMothersRelation(AliDielectronSignalMC::kSame);
549   phiSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
550   phiSig->SetMotherSources(AliDielectronSignalMC::kPrimary, AliDielectronSignalMC::kPrimary);
551   phiSig->SetCheckBothChargesLegs(kFALSE,kFALSE);
552   phiSig->SetCheckBothChargesMothers(kTRUE,kTRUE);
553   phiSig->SetFillPureMCStep(kTRUE);
554   die->AddSignalMC(phiSig);
555
556   /*
557   AliDielectronSignalMC* convSig = new AliDielectronSignalMC("conv", "convSignal");
558   convSig->SetLegPDGs(11,-11);
559   convSig->SetMothersRelation(AliDielectronSignalMC::kSame);
560   convSig->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState); //in this case, ee needs to be true=IsPhysicalPrimary(label)
561   convSig->SetCheckBothChargesLegs(kFALSE,kFALSE);
562   die->AddSignalMC(convSig);
563   */
564 }