1 void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2 void InitCF(AliDielectron* die, Int_t cutDefinition);
4 void SetupEventCuts(AliDielectron *die, Int_t cutDefinition);
5 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
6 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
9 void SetupV0cuts(AliDielectron *die, Int_t cutDefinition);
10 void SetupV0Add(AliDielectron *die, Int_t cutDefinition);
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};
26 enum ConfDef {kDefault,kHF,kLmee,kDefault_activevolume,kDefault_conversions,kDefault_conversions_wPID};
27 void SetupMCsignals(AliDielectron *die);
28 //TVectorD *GetRunNumbers();
29 TVectorD *GetRunNumbers() {
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");
34 // increasing order of run array is important
36 //TString names=("default");
37 TString names=("JPsi;kHFe;Lmee;Jpsi_activevolume;Jpsi_conversions;Jpsi_conversions_wPID");
38 TObjArray *arrNames=names.Tokenize(";");
40 const Int_t nDie=arrNames->GetEntries();
44 enum { k10b=0, k10c, k10d, k10e, k10f, k10h, k11a, k11d, k11h, k12h, k13b, k13c, k13d, k13e, k13f };
46 //______________________________________________________________________________________
47 AliAnalysisTask* AddTask_jpsi_Default(TString prod="", Bool_t isMC=kFALSE)
49 //get the current analysis manager
51 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
53 Error("AddTask_jpsi_JPsi", "No analysis manager found.");
57 //Do we have an MC handler?
58 hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
61 isAOD=mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
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;
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;
87 // if( list.Contains("LHC11a10") ||
88 // list.Contains("LHC11b10") ||
89 // list.Contains("LHC12a17") ||
90 // list.Contains("fix")
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();
98 // add special triggers
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;
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);
115 jpsi->SetHasMC(hasMC);
116 task->AddDielectron(jpsi);
119 // task->SetTriggerOnV0AND();
120 // if ( trainConfig=="pp" ) task->SetRejectPileup();
122 //create output container
123 AliAnalysisDataContainer *coutput1 =
124 mgr->CreateContainer("jpsi_Default_tree",
126 AliAnalysisManager::kExchangeContainer,
127 "jpsi_Default_default");
129 AliAnalysisDataContainer *cOutputHist1 =
130 mgr->CreateContainer("jpsi_Default_QA",
132 AliAnalysisManager::kOutputContainer,
133 "jpsi_Default.root");
135 AliAnalysisDataContainer *cOutputHist2 =
136 mgr->CreateContainer("jpsi_Default_CF",
138 AliAnalysisManager::kOutputContainer,
139 "jpsi_Default.root");
141 AliAnalysisDataContainer *cOutputHist3 =
142 mgr->CreateContainer("jpsi_Default_EventStat",
144 AliAnalysisManager::kOutputContainer,
145 "jpsi_Default.root");
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);
157 //______________________________________________________________________________________
158 //______________________________________________________________________________________
159 //______________________________________________________________________________________
161 // Here the configuration part starts
163 AliDielectron* ConfigDefault(Int_t cutDefinition)
166 // Setup the instance of AliDielectron
169 // create the actual framework object
170 TString name=Form("%02d",cutDefinition);
171 if (cutDefinition<arrNames->GetEntriesFast()){
172 name=arrNames->At(cutDefinition)->GetName();
175 new AliDielectron(Form("%s",name.Data()),
176 Form("Track cuts: %s",name.Data()));
178 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
179 SetupEventCuts(die,cutDefinition);
180 SetupTrackCuts(die,cutDefinition);
182 if (cutDefinition ==ConfDef::kDefault || cutDefinition ==ConfDef::kLmee || cutDefinition ==ConfDef::kDefault_activevolume){
183 SetupV0Cuts(die,cutDefinition);
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);
191 if (cutDefinition ==ConfDef::kLmee || cutDefinition ==ConfDef::kDefault_conversions || cutDefinition ==ConfDef::kDefault_conversions_wPID ){
195 //SetupV0Cuts(die,cutDefinition);
196 SetupPairCuts(die,cutDefinition);
198 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MISC vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
199 // Monte Carlo Signals
200 if (hasMC) SetupMCsignals(die);
201 // prefilter settings
202 // die->SetPreFilterUnlikeOnly();// die->SetNoPairing();// die->SetPreFilterAllSigns();
206 /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv OUTPUT vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
207 InitHistograms(die,cutDefinition);
208 InitCF(die,cutDefinition);
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);
221 //______________________________________________________________________________________
222 void SetupEventCuts(AliDielectron *die, Int_t cutDefinition)
225 // Setup the event cuts
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.);
234 die->GetEventFilter().AddCuts(eventCuts);
238 //______________________________________________________________________________________
239 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
242 // Setup the track cuts
245 AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
246 die->GetTrackFilter().AddCuts(cuts);
248 //default quality cuts
249 AliDielectronTrackCuts *refit=new AliDielectronTrackCuts("refit","refit");
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);
281 AliDielectronVarCuts *pt = new AliDielectronVarCuts("ptCut","pt cut");
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.);
294 pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
295 pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
297 else if (cutDefinition==kHF) {
298 pt->AddCut(AliDielectronVarManager::kPt,1.,1.e30);
299 pt->AddCut(AliDielectronVarManager::kEta,-0.8,0.8);
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.);
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);
314 pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
315 pt->AddCut(AliDielectronVarManager::kImpactParZ,-2.,2.);
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.);
341 pt->AddCut(AliDielectronVarManager::kNclsTPC,70.,160.);
342 pt->AddCut(AliDielectronVarManager::kTPCchi2Cl,0.,4.);
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.);
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);
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);
392 AliDielectronTrackCuts *trkRecCuts = new AliDielectronTrackCuts("TrkRecCuts","TrkRecCuts");
393 trkRecCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
394 trkRecCuts->SetRequireITSRefit(kTRUE);
395 trkRecCuts->SetRequireTPCRefit(kTRUE);
397 AliDielectronCutGroup *grpRecCuts = new AliDielectronCutGroup("rec","rec",AliDielectronCutGroup::kCompAND);
398 grpRecCuts->AddCut(trkRecCuts);
399 grpRecCuts->AddCut(varRecCuts);
400 die->GetTrackFilter().AddCuts(grpRecCuts);
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);
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);
426 void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition)
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,
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(); //
452 void SetupV0add(AliDielectron *die, Int_t cutDefinition)
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
470 gammaV0Add->SetExcludeTracks(kFALSE);//ktrue excludes tracks v0s,
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(); //
479 //______________________________________________________________________________________
480 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
483 // Setup the pair cuts
486 // add conversion rejection
487 AliDielectronVarCuts *gammaCut=new AliDielectronVarCuts("gammaCut","gammaCut");
488 gammaCut->AddCut(AliDielectronVarManager::kM,0.,.05);
489 die->GetPairPreFilter().AddCuts(gammaCut);
493 //______________________________________________________________________________________
494 void InitHistograms(AliDielectron *die, Int_t cutDefinition)
497 // Initialise the histograms
500 //Setup histogram Manager
501 AliDielectronHistos *histos=
502 new AliDielectronHistos(die->GetName(),
505 //Initialise histogram classes
506 histos->SetReservedWords("Track;Pair");
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)));
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)));
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();
526 histos->AddClass(Form("Pair_%s_MCtruth", sigMCname.Data()));
527 histos->AddClass(Form("Track_Legs_%s_MCtruth", sigMCname.Data()));
529 histos->AddClass(Form("Pair_%s", sigMCname.Data()));
530 histos->AddClass(Form("Track_Legs_%s", sigMCname.Data()));
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);
546 //add histograms to Track classes
547 histos->UserHistogram("Track","","",
548 200,0,20.,AliDielectronVarManager::kPIn);
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);
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);
613 // histos rjimenez 2nd part
616 histos->UserHistogram("Track","","",5,-0.5,2.0,AliDielectronVarManager::kTOFPIDBit);
618 histos->UserHistogram("Track","","",
619 3.,-0.5,2.5, 200,0.,20.,AliDielectronVarManager::kTOFPIDBit,AliDielectronVarManager::kPt);
621 histos->UserHistogram("Track","","",
622 160,-0.5,159.5,AliDielectronVarManager::kNFclsTPCr);
623 histos->UserHistogram("Track","","",
624 160,0,1.1,AliDielectronVarManager::kNFclsTPCrFrac);
626 //rjimenez nsigma vseta
627 histos->UserHistogram("Track","","",
628 20,-1.0,1.0,100,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kITSnSigmaEle);
630 histos->UserHistogram("Track","","",
631 20,-1.0,1.0,100,-10.,10.,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);
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);
639 histos->UserHistogram("Track","","",
640 20,0.0,7.0,100,-10.,10.,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTPCnSigmaEle);
642 histos->UserHistogram("Track","","",
643 20,0.0,7.0,100,-10.,10.,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTOFnSigmaEle);
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);
651 histos->UserHistogram("Track","","",
652 200,-20,20,160,-0.5,159.5,AliDielectronVarManager::kYsignedIn,AliDielectronVarManager::kTPCsignalN);
654 histos->UserHistogram("Track","","",
655 200,-20.,20.,100,-10.,10.,AliDielectronVarManager::kYsignedIn,AliDielectronVarManager::kTPCnSigmaEle);
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);
679 histos->UserHistogram("Track","","",
680 200.,0.0.,20.0,11,-0.5,10.5,AliDielectronVarManager::kPt,AliDielectronVarManager::kTRDntracklets);
682 histos->UserHistogram("Track","","",
683 150.,-15.0.,15.0,20,0.,1.,AliDielectronVarManager::kYsignedIn,AliDielectronVarManager::kTRDprobEle);
685 histos->UserHistogram("Track","","",
686 150.,-15.0,15.0,20,0.,1.,AliDielectronVarManager::kYsignedIn,AliDielectronVarManager::kTRDprobPio);
688 histos->UserHistogram("Track","","",
689 200.,0.2,20.0,20,0.,1.,AliDielectronVarManager::kP,AliDielectronVarManager::kTRDprob2DEle);
691 histos->UserHistogram("Track","","",
692 200.,0.2,20.0,20,0.,1.,AliDielectronVarManager::kP,AliDielectronVarManager::kTRDprob2DPio);
694 histos->UserHistogram("Track","","",
695 8.,-0.5,7.5,AliDielectronVarManager::kTRDpidQuality);
697 histos->UserHistogram("Track","","",
698 100.,0.0,1.0,AliDielectronVarManager::kTRDpidEffLeg);
700 histos->UserHistogram("Track","","",
701 20,-1.0,1.0,70,-3.5,3.5,AliDielectronVarManager::kEta,AliDielectronVarManager::kTRDphi);
703 histos->UserHistogram("Track","","",500,-1.,1.,AliDielectronVarManager::kImpactParXY);
704 histos->UserHistogram("Track","","",600,-3.,3.,AliDielectronVarManager::kImpactParZ);
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);
714 die->SetHistogramManager(histos);
718 //______________________________________________________________________________________
719 void InitCF(AliDielectron* die, Int_t cutDefinition)
722 // Setupd the CF Manager if needed
725 AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
728 cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 1.0, 1.3, 2.0, 3.0, 5., 7.0, 10.0, 100.0");
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);
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);
739 //cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,6,0,6,kTRUE);
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);
748 //only steps for efficiencies
749 cf->SetStepsForMCtruthOnly();
750 //only in this case write MC truth info
751 if (cutDefinition==0){
752 cf->SetStepForMCtruth();
755 // cf->SetStepsForSignal();
757 die->SetCFManagerPair(cf);
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);
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);
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);
802 TVectorD *GetRunNumbers() {
803 // returns a vector with the runnumber used in the period
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;
820 // printf("iPeriod: %d \t %.0f-%.0f \n",iPeriod,first,last);
821 return (AliDielectronHelper::MakeLinBinning(last-first, first, last));