]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/CreateStandardAODfromESD.C
Macro to create std AOD + MC
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / CreateStandardAODfromESD.C
1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 #include <TChain.h>
3 #include <TSystem.h>
4 #include "AliAnalysisManager.h"
5 #include "AliESDInputHandler.h"
6 #include "AliAODHandler.h"
7 #include "AliAnalysisTaskESDfilter.h"
8 #include "AliAnalysisDataContainer.h"
9 #endif
10
11 void CreateStandardAODfromESD(const char *inFileName = "AliESDs.root",
12                               const char *outFileName = "AliAOD.root",
13                               Bool_t writeKineToAOD = kTRUE) 
14 {
15   
16   gSystem->Load("libTree");
17   gSystem->Load("libGeom");
18   gSystem->Load("libPhysics");
19   gSystem->Load("libVMC");
20   gSystem->Load("libSTEERBase");
21   gSystem->Load("libESD");
22   gSystem->Load("libAOD");
23   
24   gSystem->Load("libANALYSIS");
25   gSystem->Load("libANALYSISalice");
26   gSystem->Load("libPWG3muon");
27   
28   TChain *chain = new TChain("esdTree");
29   // Steering input chain
30   chain->Add(inFileName);
31   AliAnalysisManager *mgr  = new AliAnalysisManager("ESD to AOD", "Analysis Manager");
32   
33   // Input
34   AliESDInputHandler* inpHandler = new AliESDInputHandler();
35   mgr->SetInputEventHandler (inpHandler);
36   
37   // Output
38   AliAODHandler* aodHandler   = new AliAODHandler();
39   aodHandler->SetOutputFileName(outFileName);
40   mgr->SetOutputEventHandler(aodHandler);
41  
42   // MC Truth
43   AliMCEventHandler* mcHandler = new AliMCEventHandler();
44   if(writeKineToAOD) mgr->SetMCtruthEventHandler(mcHandler);
45
46   // Tasks
47   
48   // Filtering of MC particles (decays conversions etc)
49   // this task is also needed to set the MCEventHandler
50   // to the AODHandler, this will not be needed when
51   // AODHandler goes to ANALYSISalice
52   AliAnalysisTaskMCParticleFilter *kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Filter");
53   if(writeKineToAOD) mgr->AddTask(kinefilter);
54   
55   // Barrel Tracks
56   AliAnalysisTaskESDfilter *filter = new AliAnalysisTaskESDfilter("Filter");
57   mgr->AddTask(filter);
58
59   // Muons
60   AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");
61   mgr->AddTask(esdmuonfilter);
62
63   AliESDtrackCuts* esdTrackCutsHF = new AliESDtrackCuts("AliESDtrackCuts", "Heavy flavour");
64   esdTrackCutsHF->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
65
66   AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
67   trackFilter->AddCuts(esdTrackCutsHF);
68
69   filter->SetTrackFilter(trackFilter);
70
71   // Pipelining
72   AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("cchain", TChain::Class(),
73                                                            AliAnalysisManager::kInputContainer);
74   
75   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("tree", TTree::Class(),
76                                                             AliAnalysisManager::kOutputContainer,
77                                                             "default");
78   
79   
80   mgr->ConnectInput(filter,0,cinput1);
81   mgr->ConnectOutput(filter,0,coutput1);
82
83   mgr->ConnectInput(esdmuonfilter,0,cinput1);
84   mgr->ConnectOutput(esdmuonfilter,0,coutput1);
85
86   if(writeKineToAOD) {
87     mgr->ConnectInput(kinefilter,0,cinput1);
88     mgr->ConnectOutput(kinefilter,0,coutput1);
89   }
90   //
91   // Run the analysis
92   //
93   mgr->InitAnalysis();
94   mgr->PrintStatus();
95   mgr->StartAnalysis("local",chain);
96
97   return;
98 }