]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosJPSI/AddTask_jpsi_Default.C
-updates jpsi default QAtask (raul)
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / AddTask_jpsi_Default.C
1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void InitCF(AliDielectron* die, Int_t cutDefinition);
3
4 void SetupEventCuts(AliDielectron *die, Int_t cutDefinition);
5 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
6 void SetupPairCuts(AliDielectron *die,  Int_t cutDefinition);
7 //QAtask
8
9 void SetupV0cuts(AliDielectron *die, Int_t cutDefinition);
10 void SetupV0Add(AliDielectron *die, Int_t cutDefinition);
11
12 /*
13 namespace ConfDef {
14         
15         void InitHistograms(AliDielectron *die, Int_t cutDefinition);
16         void InitCF(AliDielectron* die, Int_t cutDefinition);
17         void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition);
18         void SetupV0Add(AliDielectron *die, Int_t cutDefinition);
19         void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
20         void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
21         void SetEtaCorrection();        
22         enum {kDefault,kHF,kLmee,kDefault_activevolume,kDefault_conversions,kDefault_conversions_wPID};
23 }
24 */
25
26 enum ConfDef {kDefault,kHF,kLmee,kDefault_activevolume,kDefault_conversions,kDefault_conversions_wPID};
27 void SetupMCsignals(AliDielectron *die);
28 //TVectorD *GetRunNumbers();
29 TVectorD *GetRunNumbers() {
30     if (period="LHC10d"){
31     return AliDielectronHelper::MakeArbitraryBinning ("122374,122375,124751,125023,125085,125097,125100,125101,125134,125296,125628,125630,125632,125633,125842,125843,125844,125847,125848,125849,125850,125851,125855,125941,125942,125943,125944,125945,125946,125947,125948,125949,125950,125951,125952,125953,125954,125955,125956,125957,125958,125959,125960,125961,125962,125963,125964,125965,125966,125969,125970,125976,125978,125981,125982,125983,125984,125985,125986,125997,125998,125999,126004,126007,126008,126073,126078,126081,126082,126088,126090,126097,126158,126160,126168,126283,126284,126285,126351,126352,126359,126403,126404,126405,126406,126407,126408,126409,126422,126424,126425,126432");
32      }
33 }
34   // increasing order of run array is important
35
36 //TString names=("default");
37 TString names=("JPsi;kHFe;Lmee;Jpsi_activevolume;Jpsi_conversions;Jpsi_conversions_wPID");
38 TObjArray *arrNames=names.Tokenize(";");
39
40 const Int_t nDie=arrNames->GetEntries();
41 Bool_t isAOD=kFALSE;
42 Bool_t hasMC=kFALSE;
43 Int_t iPeriod=-1;
44 enum { k10b=0, k10c, k10d, k10e, k10f, k10h, k11a, k11d, k11h, k12h, k13b, k13c, k13d, k13e, k13f };
45
46 //______________________________________________________________________________________
47 AliAnalysisTask* AddTask_jpsi_Default(TString prod="", Bool_t isMC=kFALSE)
48 {
49   //get the current analysis manager
50
51   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
52   if (!mgr) {
53     Error("AddTask_jpsi_JPsi", "No analysis manager found.");
54     return 0;
55   }
56
57   //Do we have an MC handler?
58   hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
59
60   //AOD input?
61   isAOD=mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
62   if(isAOD) hasMC=isMC;
63
64   //Get the current train configuration
65   TString trainConfig=gSystem->Getenv("CONFIG_FILE");
66   TString list=gSystem->Getenv("LIST");
67   if( list.IsNull()) list=prod;
68
69   // selected period
70   if(      !prod.CompareTo("LHC10b") ) iPeriod = k10b;
71   else if( !prod.CompareTo("LHC10c") ) iPeriod = k10c;
72   else if( !prod.CompareTo("LHC10d") ) iPeriod = k10d;
73   else if( !prod.CompareTo("LHC10e") ) iPeriod = k10e;
74   else if( !prod.CompareTo("LHC10f") ) iPeriod = k10f;
75   else if( !prod.CompareTo("LHC10h") ) iPeriod = k10h;
76   else if( !prod.CompareTo("LHC11a") ) iPeriod = k11a;
77   else if( !prod.CompareTo("LHC11d") ) iPeriod = k11d;
78   else if( !prod.CompareTo("LHC11h") ) iPeriod = k11h;
79   else if( !prod.CompareTo("LHC12h") ) iPeriod = k12h;
80   else if( !prod.CompareTo("LHC13b") ) iPeriod = k13b;
81   else if( !prod.CompareTo("LHC13c") ) iPeriod = k13c;
82   else if( !prod.CompareTo("LHC12d") ) iPeriod = k13d;
83   else if( !prod.CompareTo("LHC12e") ) iPeriod = k13e;
84   else if( !prod.CompareTo("LHC12f") ) iPeriod = k13f;
85
86   // // aod monte carlo
87   // if( list.Contains("LHC11a10") ||
88   //     list.Contains("LHC11b10") ||
89   //     list.Contains("LHC12a17") ||
90   //     list.Contains("fix")
91   //     ) hasMC=kTRUE;
92
93   //create task and add it to the manager
94   AliAnalysisTaskMultiDielectron *task=new AliAnalysisTaskMultiDielectron("JpsiDefault");
95   //  task->SetBeamEnergy(1380.); // not neeeded since we are not looking at helicity and Collins-Soper coordinates
96   if (!hasMC) task->UsePhysicsSelection();
97
98   // add special triggers
99   switch(iPeriod) {
100   case k11d: task->SetTriggerMask(AliVEvent::kEMCEJE+AliVEvent::kEMC7+AliVEvent::kEMCEGA);     break;
101   case k11h: task->SetTriggerMask(AliVEvent::kMB+AliVEvent::kCentral+AliVEvent::kSemiCentral); break;
102   case k12h: task->SetTriggerMask(AliVEvent::kAnyINT); break;                                      
103   case k13b: task->SetTriggerMask(AliVEvent::kINT7); break;
104   case k13c: task->SetTriggerMask(AliVEvent::kINT7); break;
105   case k13d: task->SetTriggerMask(AliVEvent::kAnyINT); break;
106   case k13e: task->SetTriggerMask(AliVEvent::kAnyINT); break;
107   case k13f: task->SetTriggerMask(AliVEvent::kAnyINT); break;
108   }
109   mgr->AddTask(task);
110
111   //add dielectron analysis with different cuts to the task
112   for (Int_t i=0; i<nDie; ++i){ //nDie defined in config file
113     AliDielectron *jpsi=ConfigDefault(i);
114     if (!jpsi) continue;
115     jpsi->SetHasMC(hasMC);
116     task->AddDielectron(jpsi);
117   }
118
119   //   task->SetTriggerOnV0AND();
120   //   if ( trainConfig=="pp" ) task->SetRejectPileup();
121   
122   //create output container
123   AliAnalysisDataContainer *coutput1 =
124     mgr->CreateContainer("jpsi_Default_tree",
125                          TTree::Class(),
126                          AliAnalysisManager::kExchangeContainer,
127                          "jpsi_Default_default");
128   
129   AliAnalysisDataContainer *cOutputHist1 =
130     mgr->CreateContainer("jpsi_Default_QA",
131                          TList::Class(),
132                          AliAnalysisManager::kOutputContainer,
133                          "jpsi_Default.root");
134
135   AliAnalysisDataContainer *cOutputHist2 =
136     mgr->CreateContainer("jpsi_Default_CF",
137                          TList::Class(),
138                          AliAnalysisManager::kOutputContainer,
139                          "jpsi_Default.root");
140   
141   AliAnalysisDataContainer *cOutputHist3 =
142     mgr->CreateContainer("jpsi_Default_EventStat",
143                          TH1D::Class(),
144                          AliAnalysisManager::kOutputContainer,
145                          "jpsi_Default.root");
146   
147   mgr->ConnectInput(task,  0, mgr->GetCommonInputContainer());
148   mgr->ConnectOutput(task, 0, coutput1 );
149   mgr->ConnectOutput(task, 1, cOutputHist1);
150   mgr->ConnectOutput(task, 2, cOutputHist2);
151   mgr->ConnectOutput(task, 3, cOutputHist3);
152   
153   return task;
154 }
155
156
157 //______________________________________________________________________________________
158 //______________________________________________________________________________________
159 //______________________________________________________________________________________
160 //
161 // Here the configuration part starts
162 //
163 AliDielectron* ConfigDefault(Int_t cutDefinition)
164 {
165   //
166   // Setup the instance of AliDielectron
167   //
168   
169   // create the actual framework object
170   TString name=Form("%02d",cutDefinition);
171   if (cutDefinition<arrNames->GetEntriesFast()){
172     name=arrNames->At(cutDefinition)->GetName();
173   }
174   AliDielectron *die =
175   new AliDielectron(Form("%s",name.Data()),
176                     Form("Track cuts: %s",name.Data()));
177   
178   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
179   SetupEventCuts(die,cutDefinition);
180   SetupTrackCuts(die,cutDefinition);
181   
182   if (cutDefinition ==ConfDef::kDefault || cutDefinition ==ConfDef::kLmee || cutDefinition ==ConfDef::kDefault_activevolume){
183                 SetupV0Cuts(die,cutDefinition);
184         }
185                 
186 //V0s to have a pure e+e- sample to check the TPC nsigma        
187   if (cutDefinition ==ConfDef::kDefault_conversions || cutDefinition ==ConfDef::kDefault_conversions_wPID){
188                 SetupV0add(die,cutDefinition);
189         }
190         
191   if (cutDefinition ==ConfDef::kLmee || cutDefinition ==ConfDef::kDefault_conversions || cutDefinition ==ConfDef::kDefault_conversions_wPID ){
192                 die->SetNoPairing();
193         }       
194   
195   //SetupV0Cuts(die,cutDefinition); 
196   SetupPairCuts(die,cutDefinition);
197
198   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MISC vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
199   // Monte Carlo Signals
200   if (hasMC) SetupMCsignals(die);
201   // prefilter settings
202   // die->SetPreFilterUnlikeOnly();//  die->SetNoPairing();//  die->SetPreFilterAllSigns();
203   // cut QA
204   // die->SetCutQA();
205
206   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv OUTPUT vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
207   InitHistograms(die,cutDefinition);
208   InitCF(die,cutDefinition);
209
210
211   //   AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
212   //   mix->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-8,-5,0,5,8,10");
213   //   mix->AddVariable(AliDielectronVarManager::kPhi ,"0,3.14,6.3");
214   //   mix->SetDepth(10);
215   //  die->SetMixingHandler(mix);
216   //
217   
218   return die;
219 }
220
221 //______________________________________________________________________________________
222 void SetupEventCuts(AliDielectron *die, Int_t cutDefinition)
223 {
224   //
225   // Setup the event cuts
226   //
227
228   AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","eventCuts");
229   if(isAOD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
230   eventCuts->SetRequireVertex();
231   eventCuts->SetMinVtxContributors(1);
232   eventCuts->SetVertexZ(-10.,+10.);
233   eventCuts->Print();
234   die->GetEventFilter().AddCuts(eventCuts);
235
236 }
237
238 //______________________________________________________________________________________
239 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
240 {
241   //
242   // Setup the track cuts
243   //
244
245     AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
246         die->GetTrackFilter().AddCuts(cuts);
247         
248         //default quality cuts
249         AliDielectronTrackCuts *refit=new AliDielectronTrackCuts("refit","refit");
250         
251         if (cutDefinition==ConfDef::kDefault){
252                 refit->SetRequireITSRefit(kTRUE);
253                 refit->SetRequireTPCRefit(kTRUE);
254                 refit->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
255         }else if(cutDefinition==ConfDef::kHF){
256                 refit->SetRequireITSRefit(kTRUE);
257                 refit->SetRequireTPCRefit(kTRUE);
258                 refit->SetClusterRequirementITS(AliESDtrackCuts::kFirst,AliESDtrackCuts::kBoth);
259         }else if(cutDefinition==ConfDef::kLmee){
260                 refit->SetRequireITSRefit(kTRUE);
261                 refit->SetRequireTPCRefit(kTRUE);
262                 refit->SetClusterRequirementITS(AliESDtrackCuts::kFirst,AliESDtrackCuts::kAny);
263         }else if (cutDefinition ==ConfDef::kDefault_activevolume){
264                 refit->SetRequireITSRefit(kTRUE);
265                 refit->SetRequireTPCRefit(kTRUE);
266                 refit->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
267         }else if (cutDefinition ==ConfDef::kDefault_conversions){
268                 refit->SetRequireITSRefit(kTRUE);
269                 refit->SetRequireTPCRefit(kTRUE);
270                 //    refit->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
271         }else if(cutDefinition ==ConfDef::kDefault_conversions_wPID){
272                 refit->SetRequireITSRefit(kTRUE);
273                 refit->SetRequireTPCRefit(kTRUE);
274                 //  refit->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
275                 
276         }
277         cuts->AddCut(refit);
278         
279         
280         //pt and kink mother
281         AliDielectronVarCuts *pt = new AliDielectronVarCuts("ptCut","pt cut");
282         
283         if (cutDefinition==kDefault){
284                 pt->AddCut(AliDielectronVarManager::kPt,1.,1.e30);
285                 pt->AddCut(AliDielectronVarManager::kEta,-0.9,0.9);
286                 pt->AddCut(AliDielectronVarManager::kKinkIndex0,0.);    
287                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaEle,-3.,3.);
288                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaPio,3.5,1000.);
289                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaPro,3.,1000.);
290                 //rjim NTPCclusters cut
291                 pt->AddCut(AliDielectronVarManager::kNclsTPC,70.,160.);  
292                 pt->AddCut(AliDielectronVarManager::kTPCchi2Cl,0.,4.);
293                 //impact parameter
294                 pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
295                 pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
296         }
297         else if (cutDefinition==kHF) {
298                 pt->AddCut(AliDielectronVarManager::kPt,1.,1.e30);
299                 pt->AddCut(AliDielectronVarManager::kEta,-0.8,0.8);
300                 //to be checked
301                 pt->AddCut(AliDielectronVarManager::kKinkIndex0,0.);
302                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaEle,-0.5.,3.);
303                 if (AliDielectronVarManager::kTOFPIDBit >0.8){
304                         pt->AddCut(AliDielectronVarManager::kTOFnSigmaEle,-3.,3.);
305                 }
306                 //TPC PID ClusteR
307                 pt->AddCut(AliDielectronVarManager::kTPCsignalN,80.,160.);
308                 //rjim NTPCcluster cut
309                 pt->AddCut(AliDielectronVarManager::kNclsTPC,120.,160.);  
310                 pt->AddCut(AliDielectronVarManager::kNFclsTPCfCross,0.6,1.1);    
311                 pt->AddCut(AliDielectronVarManager::kTPCchi2Cl,0.,4.);
312                 //    pt->AddCut(AliDielectronVarManager::kNClsITS,4.,200); 
313                 //rjim 
314                 pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
315                 pt->AddCut(AliDielectronVarManager::kImpactParZ,-2.,2.);  
316         }
317         else if (cutDefinition==kLmee) {
318                 pt->AddCut(AliDielectronVarManager::kPt,0.2,1.e30);
319                 pt->AddCut(AliDielectronVarManager::kEta,-0.8,0.8);
320                 pt->AddCut(AliDielectronVarManager::kKinkIndex0,0.);
321                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaEle,-3.,3.);
322                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaPio,3.,1000.);
323                 pt->AddCut(AliDielectronVarManager::kTOFnSigmaEle,-3.,3.); 
324                 //rjim Nitsclusters cut
325                 //  pt->AddCut(AliDielectronVarManager::kNclsITS,4.,160.);
326                 //add ncrossed rows tpc instead cluster instead Ncluster
327                 pt->AddCut(AliDielectronVarManager::kNclsTPC,70.,160.);
328                 pt->AddCut(AliDielectronVarManager::kNFclsTPCfCross,0.8,1.0);    
329                 pt->AddCut(AliDielectronVarManager::kTPCchi2Cl,0.,4.); 
330                 pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
331                 pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
332         }else if(cutDefinition==kDefault_activevolume){
333                 pt->AddCut(AliDielectronVarManager::kPt,1.,1.e30);
334                 pt->AddCut(AliDielectronVarManager::kEta,-0.9,0.9);
335                 pt->AddCut(AliDielectronVarManager::kKinkIndex0,0.);
336                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaEle,-3.,3.);
337                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaPio,3.5,1000.);
338                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaPro,3.,1000.);
339                 //    pt->AddCut(AliDielectronVarManager::kTPCactvol,120.,200.);
340                 // NTPCclusters
341                 pt->AddCut(AliDielectronVarManager::kNclsTPC,70.,160.);  
342                 pt->AddCut(AliDielectronVarManager::kTPCchi2Cl,0.,4.);
343                 //impact parameter
344                 pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
345                 pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
346                 //  pt->AddCut(AliDielectronVarManager::kTOFPIDBit,0.8,2.0);
347         }else if(cutDefinition==kDefault_conversions){
348                 pt->AddCut(AliDielectronVarManager::kPt,1.,1.e30);
349                 pt->AddCut(AliDielectronVarManager::kEta,-0.9,0.9);
350                 pt->AddCut(AliDielectronVarManager::kKinkIndex0,0.);
351                 //    pt->AddCut(AliDielectronVarManager::kTPCnSigmaEle,-3.,3.);
352                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaPio,3.5,1000.);
353                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaPro,3.,1000.);
354                 pt->AddCut(AliDielectronVarManager::kNclsTPC,70.,160.);  
355                 pt->AddCut(AliDielectronVarManager::kTPCchi2Cl,0.,4.);
356                 pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
357                 pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
358         }else if(cutDefinition==kDefault_conversions_wPID){
359                 pt->AddCut(AliDielectronVarManager::kPt,1.,1.e30);
360                 pt->AddCut(AliDielectronVarManager::kEta,-0.9,0.9);
361                 pt->AddCut(AliDielectronVarManager::kKinkIndex0,0.);
362                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaEle,-3.,3.);
363                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaPio,3.5,1000.);
364                 pt->AddCut(AliDielectronVarManager::kTPCnSigmaPro,3.,1000.);
365                 pt->AddCut(AliDielectronVarManager::kNclsTPC,70.,160.);  
366                 pt->AddCut(AliDielectronVarManager::kTPCchi2Cl,0.,4.);
367                 pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
368                 pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
369         }
370         cuts->AddCut(pt);
371         
372         
373         
374         /*
375         
376   // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TRACK CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv /
377   AliDielectronVarCuts *varAccCuts   = new AliDielectronVarCuts("acc","acc");
378   varAccCuts->AddCut(AliDielectronVarManager::kPt,           0.8, 1e30);
379   varAccCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,  0.9);
380   die->GetTrackFilter().AddCuts(varAccCuts);
381   varAccCuts->Print();
382
383
384   AliDielectronVarCuts   *varRecCuts = new AliDielectronVarCuts("VarRecCuts","VarRecCuts");
385   varRecCuts->AddCut(AliDielectronVarManager::kNclsTPC,      70.,   160.);
386   varRecCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
387   varRecCuts->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
388   varRecCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
389   //  varRecCuts->AddCut(AliDielectronVarManager::kITSchi2Cl,     0.  ,   36.     ); // not defined in AOD
390   varRecCuts->AddCut(AliDielectronVarManager::kKinkIndex0,.000001,1e30,kTRUE);
391
392   AliDielectronTrackCuts *trkRecCuts = new AliDielectronTrackCuts("TrkRecCuts","TrkRecCuts");
393   trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
394   trkRecCuts->SetRequireITSRefit(kTRUE);
395   trkRecCuts->SetRequireTPCRefit(kTRUE);
396
397   AliDielectronCutGroup  *grpRecCuts = new AliDielectronCutGroup("rec","rec",AliDielectronCutGroup::kCompAND);
398   grpRecCuts->AddCut(trkRecCuts);
399   grpRecCuts->AddCut(varRecCuts);
400   die->GetTrackFilter().AddCuts(grpRecCuts);
401   grpRecCuts->Print();
402
403
404   /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
405   AliDielectronVarCuts *pidVarCuts = new AliDielectronVarCuts("varPIDCuts","varPIDCuts");
406   pidVarCuts->AddCut(AliDielectronVarManager::kTPCnSigmaEle,  -2. ,    3.     ); //-3.0
407   pidVarCuts->AddCut(AliDielectronVarManager::kTPCnSigmaPio,   3.5, 1000.     );
408   pidVarCuts->AddCut(AliDielectronVarManager::kTPCnSigmaPro,   4. , 1000.     ); //3.0
409   //  AliDielectronPID *pidCuts        = new AliDielectronPID("PIDCuts","PIDCuts"); //not used
410   AliDielectronCutGroup *grpPIDCuts = new AliDielectronCutGroup("PID","PID",AliDielectronCutGroup::kCompAND);
411   grpPIDCuts->AddCut(pidVarCuts);
412   //grpPIDCuts->AddCut(pidCuts);
413   die->GetTrackFilter().AddCuts(grpPIDCuts);
414   grpPIDCuts->Print();
415
416   //
417
418
419   //exclude conversion electrons selected by the tender
420   //   AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
421   //   noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
422   //   cuts->AddCut(noconv);
423
424         cuts->Print();
425 }
426 void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
427 {
428         //
429         // Setup the V0 cuts
430         //
431         AliDielectronV0Cuts *gammaV0Cuts = new AliDielectronV0Cuts("IsGamma","IsGamma");
432         gammaV0Cuts->SetPdgCodes(22,11,11);
433         gammaV0Cuts->SetDefaultPID(13); // TPC+-10, TOF+-3 if available
434         gammaV0Cuts->AddCut(AliDielectronVarManager::kCosPointingAngle,TMath::Cos(0.02),1.0, kFALSE);
435         gammaV0Cuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0,  10.0, kFALSE);//to be checked, if properly filled
436         gammaV0Cuts->AddCut(AliDielectronVarManager::kLegDist, 0.0,   0.25, kFALSE);
437         gammaV0Cuts->AddCut(AliDielectronVarManager::kR, 3.0,  90.0, kFALSE);
438         gammaV0Cuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0,   0.05, kFALSE);
439         gammaV0Cuts->AddCut(AliDielectronVarManager::kM, 0.0,   0.05, kFALSE);
440         // gammaV0Cuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0,   0.1, kFALSE);
441         gammaV0Cuts->AddCut(AliDielectronVarManager::kArmPt, 0.0,   0.05, kFALSE);
442         // gammaV0Cuts->AddCut(AliDielectronVarManager::kArmAlpha, -0.35,0.35, kFALSE); // not sure if it works as expected
443         gammaV0Cuts->SetExcludeTracks(kTRUE);//ktrue excludes tracks v0s, 
444         //kfalse 
445         // gammaV0Cuts->Print();
446         //  const Double_t |cutAlphaG| < 0.35; &&  const Double_t cutQTG < 0.05;
447         //  const Double_t |cutAlphaG2|[2] = {0.6, 0.8}; && const Double_t cutQTG2 < 0.04;
448         die->GetTrackFilter().AddCuts(gammaV0Cuts);
449         gammaV0Cuts->Print();   // 
450 }
451
452 void SetupV0add(AliDielectron *die, Int_t cutDefinition)
453 {
454         //
455         // Setup the V0 cuts
456         //
457         AliDielectronV0Cuts *gammaV0Add = new AliDielectronV0Cuts("IsGamma2","IsGamma2");
458         gammaV0Add->SetPdgCodes(22,11,11);
459         gammaV0Add->SetDefaultPID(13); // TPC+-10, TOF+-3 if available
460         gammaV0Add->AddCut(AliDielectronVarManager::kCosPointingAngle,TMath::Cos(0.02),1.0, kFALSE);
461         gammaV0Add->AddCut(AliDielectronVarManager::kChi2NDF, 0.0,  10.0, kFALSE);//to be checked, if properly filled
462         gammaV0Add->AddCut(AliDielectronVarManager::kLegDist, 0.0,   0.25, kFALSE);
463         gammaV0Add->AddCut(AliDielectronVarManager::kR, 3.0,  90.0, kFALSE);
464         gammaV0Add->AddCut(AliDielectronVarManager::kPsiPair, 0.0,   0.05, kFALSE);
465         gammaV0Add->AddCut(AliDielectronVarManager::kM, 0.0,   0.05, kFALSE);
466         // gammaV0Cuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0,   0.1, kFALSE);
467         gammaV0Add->AddCut(AliDielectronVarManager::kArmPt, 0.0,   0.05, kFALSE);
468         // gammaV0Cuts->AddCut(AliDielectronVarManager::kArmAlpha, -0.35,0.35, kFALSE); // not sure if it works as expected
469         
470         gammaV0Add->SetExcludeTracks(kFALSE);//ktrue excludes tracks v0s, 
471         
472         //kfalse 
473         // gammaV0Cuts->Print();
474         //  const Double_t |cutAlphaG| < 0.35; &&  const Double_t cutQTG < 0.05;
475         //  const Double_t |cutAlphaG2|[2] = {0.6, 0.8}; && const Double_t cutQTG2 < 0.04;
476         die->GetTrackFilter().AddCuts(gammaV0Add);
477         gammaV0Add->Print();    // 
478 }
479 //______________________________________________________________________________________
480 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
481 {
482   //
483   // Setup the pair cuts
484   //
485
486   // add conversion rejection
487   AliDielectronVarCuts *gammaCut=new AliDielectronVarCuts("gammaCut","gammaCut");
488   gammaCut->AddCut(AliDielectronVarManager::kM,0.,.05);
489   die->GetPairPreFilter().AddCuts(gammaCut);
490
491 }
492
493 //______________________________________________________________________________________
494 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
495 {
496   //
497   // Initialise the histograms
498   //
499
500   //Setup histogram Manager
501   AliDielectronHistos *histos=
502   new AliDielectronHistos(die->GetName(),
503                           die->GetTitle());
504
505   //Initialise histogram classes
506   histos->SetReservedWords("Track;Pair");
507
508   //Track classes
509   //to fill also track info from 2nd event loop until 2
510   for (Int_t i=0; i<2; ++i){
511     histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
512   }
513
514   //Pair classes
515   // to fill also mixed event histograms loop until 10
516   for (Int_t i=0; i<3; ++i){
517     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
518   }
519
520   //add MC signal histograms to track and pair class
521   if(die->GetMCSignals()) {
522     for(Int_t isig=0; isig<die->GetMCSignals()->GetEntriesFast(); isig++) {
523       TString sigMCname = die->GetMCSignals()->At(isig)->GetName(); 
524
525       // mc truth
526       histos->AddClass(Form("Pair_%s_MCtruth",       sigMCname.Data()));
527       histos->AddClass(Form("Track_Legs_%s_MCtruth", sigMCname.Data())); 
528       // mc reconstructed
529       histos->AddClass(Form("Pair_%s",               sigMCname.Data()));
530       histos->AddClass(Form("Track_Legs_%s",         sigMCname.Data())); 
531     }
532   }
533
534   //add histograms to event class
535   if (cutDefinition==0) {
536     histos->AddClass("Event");
537     histos->UserHistogram("Event","","",300,-15.,15.,AliDielectronVarManager::kZvPrim);
538     histos->UserHistogram("Event","","",
539                           100,-2.,2.,100,-2.,2.,AliDielectronVarManager::kXvPrim,AliDielectronVarManager::kYvPrim);
540     histos->UserHistogram("Event","","",GetRunNumbers(),AliDielectronVarManager::kRunNumber);
541     histos->UserProfile("Event","","", AliDielectronVarManager::kTracks, GetRunNumbers(), AliDielectronVarManager::kRunNumber);
542     histos->UserProfile("Event","","", AliDielectronVarManager::kPairs,  GetRunNumbers(), AliDielectronVarManager::kRunNumber);
543
544   }
545
546   //add histograms to Track classes
547   histos->UserHistogram("Track","","",
548                         200,0,20.,AliDielectronVarManager::kPIn);  
549  
550   //general histograms per run number
551   histos->UserHistogram("Track","","",
552                         400,0.2,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
553   histos->UserHistogram("Track","","",GetRunNumbers(),AliDielectronHelper::MakeLinBinning(100,-10.,10.),
554                         AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kTPCnSigmaEle);
555   histos->UserHistogram("Track","","",GetRunNumbers(),AliDielectronHelper::MakeLinBinning(100,-10.,10.),
556                         AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kTPCnSigmaEle);
557   histos->UserHistogram("Track","","",GetRunNumbers(),AliDielectronHelper::MakeLinBinning(100,-10.,10.),
558                         AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kITSnSigmaEle);
559   histos->UserHistogram("Track","","",GetRunNumbers(),AliDielectronHelper::MakeLinBinning(100,-10.,10.),
560                         AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kTOFnSigmaEle);
561   histos->UserHistogram("Track","","",GetRunNumbers(),AliDielectronHelper::MakeLinBinning(161,-0.5,161.5),
562                         AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kNclsTPC);
563   histos->UserHistogram("Track","","",GetRunNumbers(),AliDielectronHelper::MakeLinBinning(300,0.5,300.5),
564                         AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kNclsTRD);
565   histos->UserHistogram("Track","","",GetRunNumbers(),AliDielectronHelper::MakeLinBinning(150,0.,150.),
566                         AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kNaccTrckltsEsd10Corr);
567   histos->UserHistogram("Track","","",GetRunNumbers(),AliDielectronHelper::MakeLinBinning(5,-0.5,2.0),
568                         AliDielectronVarManager::kRunNumber,AliDielectronVarManager::kTOFPIDBit);
569   histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
570                         400,0.2,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
571   //  histos->UserHistogram("Track","","",GetRunNumbers(),
572   //            400,0.2,20.,200,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
573   histos->UserHistogram("Track","","",
574                         100,0.2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kITSnSigmaEle);
575   histos->UserHistogram("Track","","",
576                         100,0.2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
577   histos->UserHistogram("Track","","",
578                         100,0.2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPio,kTRUE);
579   histos->UserHistogram("Track","","",
580                         100,0.2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaPro,kTRUE);
581   histos->UserHistogram("Track","","",
582                         200,0.2,20.,100,-15.,15.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaKao,kTRUE);           
583   histos->UserHistogram("Track","","",
584                         200,0.2,20.,100,0.,1.2,AliDielectronVarManager::kP,AliDielectronVarManager::kTOFbeta,kTRUE);
585   histos->UserHistogram("Track","","",
586                         200,0.2,20.,200,-20.,20.,AliDielectronVarManager::kP,AliDielectronVarManager::kTOFnSigmaEle,kTRUE);    
587   histos->UserHistogram("Track","","",
588                         144,0.0,6.285,100,0.0,200,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTPCsignal);
589   histos->UserHistogram("Track","","",
590                         40,-1.0,1.0,100,0.0,200,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCsignal);
591   histos->UserHistogram("Track","","",
592                         100,-5,5.,100,-5.,5.,AliDielectronVarManager::kTPCnSigmaEle,AliDielectronVarManager::kITSnSigmaEle);
593   histos->UserHistogram("Track","","",
594                         100,-5,5.,100,-5.,5.,AliDielectronVarManager::kTOFnSigmaEle,AliDielectronVarManager::kTPCnSigmaEle);
595   histos->UserHistogram("Track","","",
596                         100,-2,2,144,0,6.285,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
597   histos->UserHistogram("Track","","",
598                         160,-0.5,159.5,AliDielectronVarManager::kNclsTPC);
599   histos->UserHistogram("Track","","",
600                         100,0.,10.,AliDielectronVarManager::kTPCchi2Cl);
601   histos->UserHistogram("Track","","",
602                         150,-15,15,160,-0.5,159.5,AliDielectronVarManager::kYsignedIn,AliDielectronVarManager::kTPCsignalN);
603   histos->UserHistogram("Track","","",
604                         1000,0.,0.,AliDielectronVarManager::kKinkIndex0);
605         
606   //rjim findable cluster vs pt
607   histos->UserHistogram("Track","","",
608                         200.,0.0.,20.0, 161,-0.5,161.5,AliDielectronVarManager::kPt,AliDielectronVarManager::kNFclsTPCr);
609   //rjim frac find vs pt
610   histos->UserHistogram("Track","","",
611                         200.0,0.0,20.0,160,0,1.1,AliDielectronVarManager::kPt,AliDielectronVarManager::kNFclsTPCrFrac);
612   
613   // histos rjimenez 2nd part
614   //check tofbit
615   
616   histos->UserHistogram("Track","","",5,-0.5,2.0,AliDielectronVarManager::kTOFPIDBit);
617   
618   histos->UserHistogram("Track","","",
619                         3.,-0.5,2.5, 200,0.,20.,AliDielectronVarManager::kTOFPIDBit,AliDielectronVarManager::kPt);
620   
621   histos->UserHistogram("Track","","",
622                         160,-0.5,159.5,AliDielectronVarManager::kNFclsTPCr);
623   histos->UserHistogram("Track","","",
624                         160,0,1.1,AliDielectronVarManager::kNFclsTPCrFrac);
625   
626   //rjimenez nsigma vseta
627   histos->UserHistogram("Track","","",
628                         20,-1.0,1.0,100,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kITSnSigmaEle);
629   
630   histos->UserHistogram("Track","","",
631                         20,-1.0,1.0,100,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);
632   
633   histos->UserHistogram("Track","","",
634                         20,-1.0,1.0,100,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTOFnSigmaEle); 
635   //rjimenez nsigma vs phi
636   histos->UserHistogram("Track","","",
637                         20,0.0,7.0,100,-10.,10.,AliDielectronVarManager::kPhi,AliDielectronVarManager::kITSnSigmaEle);
638   
639   histos->UserHistogram("Track","","",
640                         20,0.0,7.0,100,-10.,10.,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTPCnSigmaEle);
641   
642   histos->UserHistogram("Track","","",
643                         20,0.0,7.0,100,-10.,10.,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTOFnSigmaEle);
644   
645   //for now SPD tracklets but multiplicity should be implemented
646   histos->UserHistogram("Track","","",
647                         100,0.0,100.,100,-10.,10.,AliDielectronVarManager::kNaccTrckltsEsd10Corr,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
648   histos->UserHistogram("Track","","",
649                         100,0.0,100.,200,-20.,20.,AliDielectronVarManager::kNaccTrckltsEsd10Corr,AliDielectronVarManager::kTOFnSigmaEle,kTRUE);      
650   //
651   histos->UserHistogram("Track","","",
652                         200,-20,20,160,-0.5,159.5,AliDielectronVarManager::kYsignedIn,AliDielectronVarManager::kTPCsignalN);
653         
654   histos->UserHistogram("Track","","",
655                         200,-20.,20.,100,-10.,10.,AliDielectronVarManager::kYsignedIn,AliDielectronVarManager::kTPCnSigmaEle);
656   
657   histos->UserHistogram("Track","","",
658                         200,-20.,20.,200,0.2,20.,AliDielectronVarManager::kYsignedIn,AliDielectronVarManager::kPIn);
659   histos->UserHistogram("Track","","",
660                         500,-1.,1.,AliDielectronVarManager::kImpactParXY);
661   histos->UserHistogram("Track","","",
662                         600,-3.,3.,AliDielectronVarManager::kImpactParZ);
663   //inner and outer read out TPC clusters
664   histos->UserHistogram("Track","","",
665                         70,0.0,7.0,160.,0.0,160.0,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTPCclsIRO);
666   histos->UserHistogram("Track","","",
667                         70,0.0,7.0,160.,0.0,160.0,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTPCclsORO);
668   histos->UserHistogram("Track","","",
669                         10000,0.0,1.0,AliDielectronVarManager::kM);
670   histos->UserHistogram("Track","","",
671                         200,0.0,20.0,10000,0.0,1.0,AliDielectronVarManager::kPt,AliDielectronVarManager::kM);
672   histos->UserHistogram("Track","","",
673                         300,0.,300.,AliDielectronVarManager::kNclsTRD);
674   histos->UserHistogram("Track","","",
675                         200.,0.0.,20.0, 301,-0.5,300.5,AliDielectronVarManager::kPt,AliDielectronVarManager::kNclsTRD);
676   histos->UserHistogram("Track","","",
677                         11,-0.5,10.5.,AliDielectronVarManager::kTRDntracklets);
678   
679   histos->UserHistogram("Track","","",
680                         200.,0.0.,20.0,11,-0.5,10.5,AliDielectronVarManager::kPt,AliDielectronVarManager::kTRDntracklets);
681   
682   histos->UserHistogram("Track","","",
683                         150.,-15.0.,15.0,20,0.,1.,AliDielectronVarManager::kYsignedIn,AliDielectronVarManager::kTRDprobEle);
684   
685   histos->UserHistogram("Track","","",
686                         150.,-15.0,15.0,20,0.,1.,AliDielectronVarManager::kYsignedIn,AliDielectronVarManager::kTRDprobPio);
687   
688   histos->UserHistogram("Track","","",
689                         200.,0.2,20.0,20,0.,1.,AliDielectronVarManager::kP,AliDielectronVarManager::kTRDprob2DEle);
690   
691   histos->UserHistogram("Track","","",
692                         200.,0.2,20.0,20,0.,1.,AliDielectronVarManager::kP,AliDielectronVarManager::kTRDprob2DPio);
693   
694   histos->UserHistogram("Track","","",
695                         8.,-0.5,7.5,AliDielectronVarManager::kTRDpidQuality);
696   
697   histos->UserHistogram("Track","","",
698                         100.,0.0,1.0,AliDielectronVarManager::kTRDpidEffLeg);
699   
700   histos->UserHistogram("Track","","",
701                         20,-1.0,1.0,70,-3.5,3.5,AliDielectronVarManager::kEta,AliDielectronVarManager::kTRDphi);
702   
703   histos->UserHistogram("Track","","",500,-1.,1.,AliDielectronVarManager::kImpactParXY);
704   histos->UserHistogram("Track","","",600,-3.,3.,AliDielectronVarManager::kImpactParZ);
705
706   //add histograms to Pair classes
707   histos->UserHistogram("Pair","","",
708                         301,-.01,6.01,AliDielectronVarManager::kM);
709   histos->UserHistogram("Pair","","",
710                         100,-1.,1.,AliDielectronVarManager::kY);
711   histos->UserHistogram("Pair","","",
712                         100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
713
714   die->SetHistogramManager(histos);
715
716 }
717
718 //______________________________________________________________________________________
719 void InitCF(AliDielectron* die, Int_t cutDefinition)
720 {
721   //
722   // Setupd the CF Manager if needed
723   //
724
725   AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
726
727   //pair variables
728   cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 1.0, 1.3, 2.0, 3.0, 5., 7.0, 10.0, 100.0");
729
730   cf->AddVariable(AliDielectronVarManager::kZvPrim,"-10,-5,0,5,10");
731   cf->AddVariable(AliDielectronVarManager::kY,"-1,-0.9,-0.8,-0.3,0,0.3,0.9,1.0");
732   cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
733   cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11);
734
735   //leg variables
736   cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.8, 1.0, 1.1, 1.2, 1.3, 100.0",kTRUE);
737   cf->AddVariable(AliDielectronVarManager::kEta,"-1.,-0.9,-0.8,0,0.8,0.9,1.0",kTRUE);
738
739   //cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,6,0,6,kTRUE);
740
741   if (hasMC && 0){ //ATTENTION SWITCHED OFF
742     cf->AddVariable(AliDielectronVarManager::kPdgCode,10000,-5000.5,4999.5,kTRUE);
743     cf->AddVariable(AliDielectronVarManager::kPdgCodeMother,10000,-5000.5,4999.5,kTRUE);
744     cf->AddVariable(AliDielectronVarManager::kPdgCodeGrandMother,10000,-5000.5,4999.5,kTRUE);
745   }
746
747   if(hasMC) {
748     //only steps for efficiencies
749     cf->SetStepsForMCtruthOnly();
750     //only in this case write MC truth info
751     if (cutDefinition==0){
752       cf->SetStepForMCtruth();
753     }
754   }
755   // cf->SetStepsForSignal();
756
757   die->SetCFManagerPair(cf);
758 }
759
760 //______________________________________________________________________________________
761 void SetupMCsignals(AliDielectron *die){
762   AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi");   // prompt J/psi (not from beauty decays)
763   promptJpsi->SetLegPDGs(11,-11);
764   promptJpsi->SetMotherPDGs(443,443);
765   promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
766   promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
767   promptJpsi->SetFillPureMCStep(kTRUE);
768   promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
769   promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
770   promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
771   promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
772   die->AddSignalMC(promptJpsi);
773
774   AliDielectronSignalMC* promptJpsiNonRad = new AliDielectronSignalMC("promptJpsiNonRad","Prompt J/psi non-Radiative");   // prompt J/psi (not from beauty decays)
775   promptJpsiNonRad->SetLegPDGs(11,-11);
776   promptJpsiNonRad->SetMotherPDGs(443,443);
777   promptJpsiNonRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
778   promptJpsiNonRad->SetMothersRelation(AliDielectronSignalMC::kSame);
779   promptJpsiNonRad->SetFillPureMCStep(kTRUE);
780   promptJpsiNonRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
781   promptJpsiNonRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
782   promptJpsiNonRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
783   promptJpsiNonRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
784   promptJpsiNonRad->SetJpsiRadiative(AliDielectronSignalMC::kIsNotRadiative);
785   die->AddSignalMC(promptJpsiNonRad);
786
787   AliDielectronSignalMC* promptJpsiRad = new AliDielectronSignalMC("promptJpsiRad","Prompt J/psi Radiative");   // prompt J/psi (not from beauty decays)
788   promptJpsiRad->SetLegPDGs(11,-11);
789   promptJpsiRad->SetMotherPDGs(443,443);
790   promptJpsiRad->SetGrandMotherPDGs(503,503,kTRUE,kTRUE);   // not from beauty hadrons
791   promptJpsiRad->SetMothersRelation(AliDielectronSignalMC::kSame);
792   promptJpsiRad->SetFillPureMCStep(kTRUE);
793   promptJpsiRad->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
794   promptJpsiRad->SetCheckBothChargesLegs(kTRUE,kTRUE);
795   promptJpsiRad->SetCheckBothChargesMothers(kTRUE,kTRUE);
796   promptJpsiRad->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
797   promptJpsiRad->SetJpsiRadiative(AliDielectronSignalMC::kIsRadiative);
798   die->AddSignalMC(promptJpsiRad);
799
800 }
801
802 TVectorD *GetRunNumbers() {
803   // returns a vector with the runnumber used in the period
804
805   Double_t first=0;
806   Double_t last =1;
807
808   switch(iPeriod) {
809   case k10b: first=114737; last=117223; break;
810   case k10c: first=117777; last=121417; break;
811   case k10d: first=121692; last=126437; break;
812   case k10e: first=127102; last=130850; break;
813   case k10f: first=130931; last=135031; break;
814   case k10h: first=136831; last=139517; break;
815   case k11a: first=141052; last=146974; break;
816   case k11d: first=155838; last=159649; break;
817   case k11h: first=165772; last=170718; break;
818   case k12h: first=188720; last=192738; break;
819   }
820   //  printf("iPeriod: %d \t %.0f-%.0f \n",iPeriod,first,last);
821   return (AliDielectronHelper::MakeLinBinning(last-first, first, last));
822 }