Corrected library names and paths to macros
[u/mrichter/AliRoot.git] / STEER / macros / CreateAODfromESD.C
1 #if !defined( __CINT__) || defined(__MAKECINT__)
2 #include <cstring>
3 #include <TChain.h>
4 #include <TSystem.h>
5 #include "AliAnalysisManager.h"
6 #include "AliESDInputHandler.h"
7 #include "AliAODHandler.h"
8 #include "AliAnalysisTaskESDfilter.h"
9 #include "AliAnalysisDataContainer.h"
10 #include "AliTaskCDBconnect.h"
11 #endif
12
13 void CreateAODfromESD(const char *inFileName = "AliESDs.root",
14                       const char *outFileName = "AliAOD.root",
15                       const char *cdbLocation = "raw://",
16                       const char *grpSpecific = "",
17                       Bool_t bKineFilter = kTRUE) 
18 {
19   
20     TChain *chain = new TChain("esdTree");
21     // Steering input chain
22     chain->Add(inFileName);
23     AliAnalysisManager *mgr  = new AliAnalysisManager("ESD to AOD", "Analysis Manager");
24
25     // Input
26     AliESDInputHandler* inpHandler = new AliESDInputHandler();
27     inpHandler->SetReadFriends(kFALSE);
28     inpHandler->SetReadTags();
29     inpHandler->NeedField();
30     mgr->SetInputEventHandler  (inpHandler);
31     // Output
32     AliAODHandler* aodHandler   = new AliAODHandler();
33     aodHandler->SetOutputFileName(outFileName);
34     mgr->SetOutputEventHandler(aodHandler);
35
36     // MC Truth
37     if(bKineFilter){
38         AliMCEventHandler* mcHandler = new AliMCEventHandler();
39         mgr->SetMCtruthEventHandler(mcHandler);
40     }
41
42
43     // Tasks
44     // Filtering of MC particles (decays conversions etc)
45     // this task is also needed to set the MCEventHandler
46     // to the AODHandler, this will not be needed when
47     // AODHandler goes to ANALYSISalice
48     
49     // Connect CDB: needed by AliEMCALRecoUtils
50     Int_t run=-1; // Do not use 0, it is the default MC run
51     AliTaskCDBconnect *task= new AliTaskCDBconnect("CDBconnect", cdbLocation, run);
52     if (strlen(grpSpecific)>0) task->SetSpecificStorage("GRP/GRP/Data",grpSpecific);
53     mgr->AddTask(task);
54     AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();    
55     mgr->ConnectInput(task,  0, cinput0);
56
57     // Barrel Tracks
58     AliAnalysisTaskESDfilter *filter = new AliAnalysisTaskESDfilter("Filter");
59     mgr->AddTask(filter);
60     AliAnalysisTaskMCParticleFilter *kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Filter");
61     if (bKineFilter) mgr->AddTask(kinefilter);
62     // Muons
63     AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");
64     mgr->AddTask(esdmuonfilter);
65
66     // Cuts on primary tracks
67     AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Standard");
68     esdTrackCutsL->SetMinNClustersTPC(50);
69     esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);
70     esdTrackCutsL->SetMaxCovDiagonalElements(2, 2, 0.5, 0.5, 2);
71     esdTrackCutsL->SetRequireTPCRefit(kTRUE);
72     esdTrackCutsL->SetMaxDCAToVertexXY(3.0);
73     esdTrackCutsL->SetMaxDCAToVertexZ(3.0);
74     esdTrackCutsL->SetDCAToVertex2D(kTRUE);
75     esdTrackCutsL->SetRequireSigmaToVertex(kFALSE);
76     esdTrackCutsL->SetAcceptKinkDaughters(kFALSE);
77     // ITS stand-alone tracks
78     AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("AliESDtrackCuts", "ITS stand-alone");
79     esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
80
81     AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
82     trackFilter->AddCuts(esdTrackCutsL);
83     trackFilter->AddCuts(esdTrackCutsITSsa);
84
85     // Cuts on V0s
86     AliESDv0Cuts*   esdV0Cuts = new AliESDv0Cuts("AliESDv0Cuts", "Standard pp");
87     esdV0Cuts->SetMinRadius(0.2);
88     esdV0Cuts->SetMaxRadius(200);
89     esdV0Cuts->SetMinDcaPosToVertex(0.05);
90     esdV0Cuts->SetMinDcaNegToVertex(0.05);
91     esdV0Cuts->SetMaxDcaV0Daughters(1.0);
92     esdV0Cuts->SetMinCosinePointingAngle(0.99);
93     AliAnalysisFilter* v0Filter = new AliAnalysisFilter("v0Filter");
94     v0Filter->AddCuts(esdV0Cuts);
95
96
97 //
98     filter->SetTrackFilter(trackFilter);
99     filter->SetV0Filter(v0Filter);
100
101
102 //  Create AOD Tags
103     AliAnalysisTaskTagCreator* tagTask = new AliAnalysisTaskTagCreator("AOD Tag Creator");
104     mgr->AddTask(tagTask);
105
106     // Pipelining
107     AliAnalysisDataContainer *cinput1  = mgr->GetCommonInputContainer();    
108     AliAnalysisDataContainer *coutput1 = mgr->GetCommonOutputContainer();
109     
110     
111     AliAnalysisDataContainer *coutputT
112         = mgr->CreateContainer("cTag",  TTree::Class(), AliAnalysisManager::kOutputContainer, "AOD.tag.root");
113
114     coutput1->SetSpecialOutput();
115     coutputT->SetSpecialOutput();
116     
117     if(bKineFilter) {
118         mgr->ConnectInput  (kinefilter,     0, cinput1  );
119         mgr->ConnectOutput (kinefilter,     0, coutput1 );
120     }
121
122     mgr->ConnectInput (filter, 0, cinput1 );
123     mgr->ConnectOutput(filter, 0, coutput1);
124
125     mgr->ConnectInput (esdmuonfilter, 0, cinput1 );
126 //    mgr->ConnectOutput(esdmuonfilter, 0, coutput1);
127
128     mgr->ConnectInput (tagTask, 0, cinput1);
129     mgr->ConnectOutput(tagTask, 1, coutputT);
130
131     //
132     // Run the analysis
133     //
134     mgr->InitAnalysis();
135     mgr->PrintStatus();
136     mgr->StartAnalysis("local", chain);
137 }
138