]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/SPECTRA/AliProtonCorrectionAnalysisTask.cxx
Coverity fixes for BUFFER_SIZE
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliProtonCorrectionAnalysisTask.cxx
1 #include "TChain.h"\r
2 #include "TTree.h"\r
3 #include "TString.h"\r
4 #include "TList.h"\r
5 #include "TH2F.h"\r
6 \r
7 #include "AliAnalysisTask.h"\r
8 #include "AliAnalysisManager.h"\r
9 \r
10 #include "AliESDEvent.h"\r
11 #include "AliESDInputHandler.h"\r
12 #include "AliAODEvent.h"\r
13 #include "AliAODInputHandler.h"\r
14 #include "AliMCEventHandler.h"\r
15 #include "AliMCEvent.h"\r
16 #include "AliStack.h"\r
17 #include "AliESDVertex.h"\r
18 \r
19 #include "AliProtonFeedDownAnalysis.h"\r
20 #include "AliProtonAnalysisBase.h"\r
21 #include "AliProtonCorrectionAnalysisTask.h"\r
22 \r
23 #include "AliProtonAbsorptionCorrection.h"\r
24 #include "AliProtonSpectraCorrection.h"\r
25 \r
26 #include <Riostream.h>\r
27 \r
28 ClassImp(AliProtonCorrectionAnalysisTask)\r
29   \r
30 //________________________________________________________________________ \r
31 AliProtonCorrectionAnalysisTask::AliProtonCorrectionAnalysisTask()\r
32   : AliAnalysisTask(), fESD(0), fAOD(0), fMC(0),\r
33     fList(0),fProtonAnalysisBase(0),fProtonAbsorptionCorrection(0), fProtonFeedDownAnalysis(0),fProtonSpectraCorrection(0),fStatHist(0),\r
34     fIsOn_AliProtonAbsorptionCorrection(0),fIsOn_AliProtonFeedDownAnalysis(0),fIsOn_AliProtonSpectraCorrection(0)\r
35  {\r
36   //Dummy constructor\r
37   \r
38 }\r
39 \r
40 //________________________________________________________________________\r
41 AliProtonCorrectionAnalysisTask::AliProtonCorrectionAnalysisTask(const char *name) \r
42   : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0),\r
43     fList(0),fProtonAnalysisBase(0),fProtonAbsorptionCorrection(0), fProtonFeedDownAnalysis(0),fProtonSpectraCorrection(0),fStatHist(0),\r
44     fIsOn_AliProtonAbsorptionCorrection(0),fIsOn_AliProtonFeedDownAnalysis(0),fIsOn_AliProtonSpectraCorrection(0)\r
45     {\r
46         // Constructor\r
47         \r
48         // Define input and output slots here\r
49         // Input slot #0 works with a TChain\r
50         DefineInput(0, TChain::Class());\r
51         // Output slot #0 writes into a TList container\r
52         DefineOutput(0, TList::Class());\r
53 }\r
54 \r
55 //________________________________________________________________________\r
56 void AliProtonCorrectionAnalysisTask::ConnectInputData(Option_t *) \r
57 {\r
58         // Connect ESD or AOD here\r
59         // Called once\r
60         TString gAnalysisLevel = fProtonAnalysisBase->GetAnalysisLevel(); \r
61         \r
62         TTree* tree = dynamic_cast<TTree*> (GetInputData(0));\r
63         if (!tree) \r
64         {\r
65                 Printf("ERROR: Could not read chain from input slot 0");\r
66         } \r
67         else \r
68         {\r
69                 if(gAnalysisLevel == "ESD") \r
70                 {\r
71                         AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());   \r
72                         if (!esdH) \r
73                         {\r
74                                 Printf("ERROR: Could not get ESDInputHandler");\r
75                         } \r
76                         else\r
77                                 fESD = esdH->GetEvent();\r
78                         AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());\r
79                         if (!mcH) \r
80                         {\r
81                                 Printf("ERROR: Could not retrieve MC event handler");\r
82                         }\r
83                         else\r
84                                 fMC = mcH->MCEvent();\r
85                 }\r
86                 else if(gAnalysisLevel == "AOD") \r
87                 {\r
88                         AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());        \r
89                         if (!aodH) \r
90                         {\r
91                                 Printf("ERROR: Could not get AODInputHandler");\r
92                         }\r
93                          else\r
94                                 fAOD = aodH->GetEvent();\r
95                 }\r
96                 else\r
97                         Printf("Wrong analysis type: Only ESD, AOD  types are allowed!");\r
98         }\r
99 }\r
100 //________________________________________________________________________\r
101 void AliProtonCorrectionAnalysisTask::CreateOutputObjects() \r
102 {\r
103         // Create output objects\r
104         // Called once\r
105         fList = new TList();\r
106         if(fIsOn_AliProtonAbsorptionCorrection)\r
107         {\r
108                 fProtonAbsorptionCorrection->GetProtonContainer()->SetName("containerProtonsAbsorptionCorrection");\r
109                 fList->Add(fProtonAbsorptionCorrection->GetProtonContainer());\r
110                 fProtonAbsorptionCorrection->GetAntiProtonContainer()->SetName("containerAntiProtonsAbsorptionCorrection");\r
111                 fList->Add(fProtonAbsorptionCorrection->GetAntiProtonContainer());\r
112         }\r
113         if(fIsOn_AliProtonFeedDownAnalysis)\r
114         {\r
115                 fProtonFeedDownAnalysis->GetProtonContainer()->SetName("containerProtonsFeedDown");\r
116                 fList->Add(fProtonFeedDownAnalysis->GetProtonContainer());\r
117                 fProtonFeedDownAnalysis->GetAntiProtonContainer()->SetName("containerAntiProtonsFeedDown");\r
118                 fList->Add(fProtonFeedDownAnalysis->GetAntiProtonContainer());\r
119                 fList->Add(fProtonFeedDownAnalysis->GetLambdaHist());\r
120                 fList->Add(fProtonFeedDownAnalysis->GetLambdaweightedHist());\r
121                 fList->Add(fProtonFeedDownAnalysis->GetAntiLambdaHist());\r
122                 fList->Add(fProtonFeedDownAnalysis->GetAntiLambdaweightedHist());\r
123         }\r
124         if(fIsOn_AliProtonSpectraCorrection)\r
125         {\r
126                 fProtonSpectraCorrection->GetProtonContainer()->SetName("containerProtonsSpectraCorrection");\r
127                 fList->Add(fProtonSpectraCorrection->GetProtonContainer());\r
128                 fProtonSpectraCorrection->GetProtonContainer()->SetName("containerAntiProtonsSpectraCorrection");\r
129                 fList->Add(fProtonSpectraCorrection->GetAntiProtonContainer());\r
130         }\r
131         fStatHist=new TH1F("StatsHist","StatsHist",10,-0.5,9.5);\r
132         fList->Add(fStatHist);\r
133         fStatHist->GetXaxis()->SetBinLabel(1,"level1cutESD");\r
134         fStatHist->GetXaxis()->SetBinLabel(2,"level2cutTrigger");\r
135         fStatHist->GetXaxis()->SetBinLabel(3,"level3cutVerstex");\r
136         fStatHist->GetXaxis()->SetBinLabel(4,"level4cutMC");\r
137 }\r
138 //________________________________________________________________________\r
139 void AliProtonCorrectionAnalysisTask::Exec(Option_t *) \r
140 {\r
141         // Main loop\r
142         // Called for each event\r
143         TString gAnalysisLevel =fProtonAnalysisBase->GetAnalysisLevel(); \r
144         //TString gAnalysisLevel = (fProtonFeedDownAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); \r
145         if(gAnalysisLevel == "ESD") \r
146         {\r
147                 if (!fESD) \r
148                 {\r
149                         Printf("ERROR: fESD not available");\r
150                         return;\r
151                 }\r
152                 fStatHist->Fill(0);\r
153                 if(fProtonAnalysisBase->IsEventTriggered(fESD,fProtonAnalysisBase->GetTriggerMode())) \r
154                 {\r
155                         fStatHist->Fill(1);\r
156                         const AliESDVertex *vertex = fProtonAnalysisBase->GetVertex(fESD,fProtonAnalysisBase->GetAnalysisMode(),fProtonAnalysisBase->GetVxMax(),fProtonAnalysisBase->GetVyMax(),fProtonAnalysisBase->GetVzMax());\r
157                         if(vertex) \r
158                         {\r
159                                 fStatHist->Fill(2);\r
160                                 Printf("Proton ESD analysis task: There are %d tracks in this event", fESD->GetNumberOfTracks());\r
161                                 AliStack* stack1=0x0;\r
162                                 if(!fMC)\r
163                                         return;                 \r
164                                 stack1 = fMC->Stack();\r
165                                 if(!stack1)\r
166                                         return;\r
167                                 fStatHist->Fill(3);\r
168                                 if(fIsOn_AliProtonAbsorptionCorrection)\r
169                                   //fProtonAbsorptionCorrection->FillAbsorptionMaps(fESD,vertex,fMC);\r
170                                   fProtonAbsorptionCorrection->FillAbsorptionMaps(fESD,fMC);\r
171                                 if(fIsOn_AliProtonFeedDownAnalysis)\r
172                                 {       \r
173                                         fProtonFeedDownAnalysis->Analyze(fESD,vertex,stack1);\r
174                                         fProtonFeedDownAnalysis->Analyze(stack1);\r
175                                 }       \r
176                                 if(fIsOn_AliProtonSpectraCorrection)\r
177                                         fProtonSpectraCorrection->FillCorrectionMaps(fESD,vertex,fMC);\r
178 \r
179                         }//reconstructed vertex\r
180                 }//triggered event\r
181         }//ESD analysis              \r
182         \r
183         else if(gAnalysisLevel == "AOD") \r
184         {\r
185                 if (!fAOD) \r
186                 {\r
187                         Printf("ERROR: fAOD not available");\r
188                         return;\r
189                 }\r
190                 Printf("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks());\r
191                 if(fIsOn_AliProtonAbsorptionCorrection)\r
192                         fProtonAbsorptionCorrection->FillAbsorptionMaps(fAOD);\r
193                 if(fIsOn_AliProtonFeedDownAnalysis)\r
194                         fProtonFeedDownAnalysis->Analyze(fAOD);\r
195                 if(fIsOn_AliProtonSpectraCorrection)\r
196                         fProtonSpectraCorrection->FillCorrectionMaps(fAOD);\r
197         }//AOD analysis\r
198                          \r
199         \r
200         // Post output data.\r
201         PostData(0, fList);\r
202 }    \r
203 //__________________________________________________________________________________________\r
204 void AliProtonCorrectionAnalysisTask::Terminate(Option_t *) \r
205 {\r
206 \r
207 }\r
208 //___________________________________________________________________________________________\r
209 void AliProtonCorrectionAnalysisTask::SetAnalysisObjectAbsorptionCorrection(AliProtonAbsorptionCorrection *const analysis) \r
210 {\r
211         if (analysis&&fProtonAnalysisBase)\r
212         {\r
213                 Printf("Absorption Correection ON\n");\r
214                 fIsOn_AliProtonAbsorptionCorrection=kTRUE;\r
215                 fProtonAbsorptionCorrection = analysis;\r
216                 fProtonAbsorptionCorrection->SetBaseAnalysis(fProtonAnalysisBase);\r
217                 fProtonAbsorptionCorrection->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY());\r
218         }\r
219         else\r
220                 fIsOn_AliProtonAbsorptionCorrection=kFALSE;\r
221 }\r
222 //___________________________________________________________________________________________\r
223 void AliProtonCorrectionAnalysisTask::SetAnalysisObjectFeedDown(AliProtonFeedDownAnalysis *const analysis) \r
224 {\r
225         if (analysis&&fProtonAnalysisBase)\r
226         {\r
227                 Printf("Feed Down ON\n");\r
228                  fIsOn_AliProtonFeedDownAnalysis=kTRUE;\r
229                 fProtonFeedDownAnalysis = analysis;\r
230                 fProtonFeedDownAnalysis->SetBaseAnalysis(fProtonAnalysisBase);\r
231                 fProtonFeedDownAnalysis->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY());\r
232         }\r
233         else\r
234                  fIsOn_AliProtonFeedDownAnalysis=kFALSE;\r
235 }\r
236 //___________________________________________________________________________________________\r
237 void AliProtonCorrectionAnalysisTask::SetAnalysisObjectSpectraCorrection(AliProtonSpectraCorrection *const analysis) \r
238\r
239         if (analysis&&fProtonAnalysisBase)\r
240         {\r
241                 Printf("Spectra Correection ON\n");\r
242                 fIsOn_AliProtonSpectraCorrection=kTRUE;\r
243                 fProtonSpectraCorrection= analysis;\r
244                 fProtonSpectraCorrection->SetBaseAnalysis(fProtonAnalysisBase);\r
245                 fProtonSpectraCorrection->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY());\r
246         }\r
247         else\r
248                 fIsOn_AliProtonSpectraCorrection=kFALSE;\r
249 }\r
250   \r
251 \r
252 \r
253 \r