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