Bug fix in the constructor (thanks to A.Marin)
[u/mrichter/AliRoot.git] / STEER / CreateAODfromESD.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 CreateAODfromESD(const char *inFileName = "AliESDs.root",
12                       const char *outFileName = "AliAOD.root",
13                       Bool_t bKineFilter = 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("libCORRFW");
27     gSystem->Load("libPWG3base");
28     gSystem->Load("libPWG3muon");
29
30     TChain *chain = new TChain("esdTree");
31     // Steering input chain
32     chain->Add(inFileName);
33     AliAnalysisManager *mgr  = new AliAnalysisManager("ESD to AOD", "Analysis Manager");
34
35     // Input
36     AliESDInputHandler* inpHandler = new AliESDInputHandler();
37     inpHandler->SetReadFriends(kFALSE);
38     inpHandler->SetReadTags();
39     mgr->SetInputEventHandler  (inpHandler);
40     // Output
41     AliAODHandler* aodHandler   = new AliAODHandler();
42     aodHandler->SetOutputFileName(outFileName);
43     mgr->SetOutputEventHandler(aodHandler);
44
45     // MC Truth
46     if(bKineFilter){
47         AliMCEventHandler* mcHandler = new AliMCEventHandler();
48         mgr->SetMCtruthEventHandler(mcHandler);
49     }
50
51
52     // Tasks
53     // Filtering of MC particles (decays conversions etc)
54     // this task is also needed to set the MCEventHandler
55     // to the AODHandler, this will not be needed when
56     // AODHandler goes to ANALYSISalice
57     AliAnalysisTaskMCParticleFilter *kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Filter");
58     if (bKineFilter) mgr->AddTask(kinefilter);
59     
60     // Barrel Tracks
61     AliAnalysisTaskESDfilter *filter = new AliAnalysisTaskESDfilter("Filter");
62     mgr->AddTask(filter);
63     // Muons
64     AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");
65     mgr->AddTask(esdmuonfilter);
66
67     // Cuts on primary tracks
68     AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Standard");
69     esdTrackCutsL->SetMinNClustersTPC(50);
70     esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);
71     esdTrackCutsL->SetMaxCovDiagonalElements(2, 2, 0.5, 0.5, 2);
72     esdTrackCutsL->SetRequireTPCRefit(kTRUE);
73     esdTrackCutsL->SetMaxDCAToVertexXY(3.0);
74     esdTrackCutsL->SetMaxDCAToVertexZ(3.0);
75     esdTrackCutsL->SetDCAToVertex2D(kTRUE);
76     esdTrackCutsL->SetRequireSigmaToVertex(kFALSE);
77     esdTrackCutsL->SetAcceptKinkDaughters(kFALSE);
78     // ITS stand-alone tracks
79     AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("AliESDtrackCuts", "ITS stand-alone");
80     esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
81
82     AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
83     trackFilter->AddCuts(esdTrackCutsL);
84     trackFilter->AddCuts(esdTrackCutsITSsa);
85
86     // Cuts on V0s
87     AliESDv0Cuts*   esdV0Cuts = new AliESDv0Cuts("AliESDv0Cuts", "Standard pp");
88     esdV0Cuts->SetMinRadius(0.2);
89     esdV0Cuts->SetMaxRadius(200);
90     esdV0Cuts->SetMinDcaPosToVertex(0.05);
91     esdV0Cuts->SetMinDcaNegToVertex(0.05);
92     esdV0Cuts->SetMaxDcaV0Daughters(1.0);
93     esdV0Cuts->SetMinCosinePointingAngle(0.99);
94     AliAnalysisFilter* v0Filter = new AliAnalysisFilter("v0Filter");
95     v0Filter->AddCuts(esdV0Cuts);
96
97
98 //
99     filter->SetTrackFilter(trackFilter);
100     filter->SetV0Filter(v0Filter);
101
102
103 //  Create AOD Tags
104     AliAnalysisTaskTagCreator* tagTask = new AliAnalysisTaskTagCreator("AOD Tag Creator");
105     mgr->AddTask(tagTask);
106
107     // Pipelining
108     AliAnalysisDataContainer *cinput1  = mgr->GetCommonInputContainer();    
109     AliAnalysisDataContainer *coutput1 = mgr->GetCommonOutputContainer();
110     
111     
112     AliAnalysisDataContainer *coutputT
113         = mgr->CreateContainer("cTag",  TTree::Class(), AliAnalysisManager::kOutputContainer, "AOD.tag.root");
114
115     coutput1->SetSpecialOutput();
116     coutputT->SetSpecialOutput();
117     
118     if(bKineFilter) {
119         mgr->ConnectInput  (kinefilter,     0, cinput1  );
120         mgr->ConnectOutput (kinefilter,     0, coutput1 );
121     }
122
123     mgr->ConnectInput (filter, 0, cinput1 );
124     mgr->ConnectOutput(filter, 0, coutput1);
125
126     mgr->ConnectInput (esdmuonfilter, 0, cinput1 );
127 //    mgr->ConnectOutput(esdmuonfilter, 0, coutput1);
128
129     mgr->ConnectInput (tagTask, 0, cinput1);
130     mgr->ConnectOutput(tagTask, 1, coutputT);
131
132     //
133     // Run the analysis
134     //
135     mgr->InitAnalysis();
136     mgr->PrintStatus();
137     mgr->StartAnalysis("local", chain);
138 }
139