7 #include "AliAnalysisTask.h"
\r
8 #include "AliAnalysisManager.h"
\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
19 #include "AliProtonFeedDownAnalysis.h"
\r
20 #include "AliProtonAnalysisBase.h"
\r
21 #include "AliProtonCorrectionAnalysisTask.h"
\r
23 #include "AliProtonAbsorptionCorrection.h"
\r
24 #include "AliProtonSpectraCorrection.h"
\r
26 #include <Riostream.h>
\r
28 ClassImp(AliProtonCorrectionAnalysisTask)
\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
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
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
55 //________________________________________________________________________
\r
56 void AliProtonCorrectionAnalysisTask::ConnectInputData(Option_t *)
\r
58 // Connect ESD or AOD here
\r
60 TString gAnalysisLevel = fProtonAnalysisBase->GetAnalysisLevel();
\r
62 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
\r
65 Printf("ERROR: Could not read chain from input slot 0");
\r
69 if(gAnalysisLevel == "ESD")
\r
71 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
74 Printf("ERROR: Could not get ESDInputHandler");
\r
77 fESD = esdH->GetEvent();
\r
78 AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
\r
81 Printf("ERROR: Could not retrieve MC event handler");
\r
84 fMC = mcH->MCEvent();
\r
86 else if(gAnalysisLevel == "AOD")
\r
88 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
91 Printf("ERROR: Could not get AODInputHandler");
\r
94 fAOD = aodH->GetEvent();
\r
97 Printf("Wrong analysis type: Only ESD, AOD types are allowed!");
\r
100 //________________________________________________________________________
\r
101 void AliProtonCorrectionAnalysisTask::CreateOutputObjects()
\r
103 // Create output objects
\r
105 fList = new TList();
\r
106 if(fIsOn_AliProtonAbsorptionCorrection)
\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
113 if(fIsOn_AliProtonFeedDownAnalysis)
\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
124 if(fIsOn_AliProtonSpectraCorrection)
\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
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
138 //________________________________________________________________________
\r
139 void AliProtonCorrectionAnalysisTask::Exec(Option_t *)
\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
149 Printf("ERROR: fESD not available");
\r
152 fStatHist->Fill(0);
\r
153 if(fProtonAnalysisBase->IsEventTriggered(fESD,fProtonAnalysisBase->GetTriggerMode()))
\r
155 fStatHist->Fill(1);
\r
156 const AliESDVertex *vertex = fProtonAnalysisBase->GetVertex(fESD,fProtonAnalysisBase->GetAnalysisMode(),fProtonAnalysisBase->GetVxMax(),fProtonAnalysisBase->GetVyMax(),fProtonAnalysisBase->GetVzMax());
\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
164 stack1 = fMC->Stack();
\r
167 fStatHist->Fill(3);
\r
168 if(fIsOn_AliProtonAbsorptionCorrection)
\r
169 fProtonAbsorptionCorrection->FillAbsorptionMaps(fESD,vertex,fMC);
\r
170 if(fIsOn_AliProtonFeedDownAnalysis)
\r
172 fProtonFeedDownAnalysis->Analyze(fESD,vertex,stack1);
\r
173 fProtonFeedDownAnalysis->Analyze(stack1);
\r
175 if(fIsOn_AliProtonSpectraCorrection)
\r
176 fProtonSpectraCorrection->FillCorrectionMaps(fESD,vertex,fMC);
\r
178 }//reconstructed vertex
\r
182 else if(gAnalysisLevel == "AOD")
\r
186 Printf("ERROR: fAOD not available");
\r
189 Printf("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks());
\r
190 if(fIsOn_AliProtonAbsorptionCorrection)
\r
191 fProtonAbsorptionCorrection->FillAbsorptionMaps(fAOD);
\r
192 if(fIsOn_AliProtonFeedDownAnalysis)
\r
193 fProtonFeedDownAnalysis->Analyze(fAOD);
\r
194 if(fIsOn_AliProtonSpectraCorrection)
\r
195 fProtonSpectraCorrection->FillCorrectionMaps(fAOD);
\r
199 // Post output data.
\r
200 PostData(0, fList);
\r
202 //__________________________________________________________________________________________
\r
203 void AliProtonCorrectionAnalysisTask::Terminate(Option_t *)
\r
207 //___________________________________________________________________________________________
\r
208 void AliProtonCorrectionAnalysisTask::SetAnalysisObjectAbsorptionCorrection(AliProtonAbsorptionCorrection *const analysis)
\r
210 if (analysis&&fProtonAnalysisBase)
\r
212 Printf("Absorption Correection ON\n");
\r
213 fIsOn_AliProtonAbsorptionCorrection=kTRUE;
\r
214 fProtonAbsorptionCorrection = analysis;
\r
215 fProtonAbsorptionCorrection->SetBaseAnalysis(fProtonAnalysisBase);
\r
216 fProtonAbsorptionCorrection->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY());
\r
219 fIsOn_AliProtonAbsorptionCorrection=kFALSE;
\r
221 //___________________________________________________________________________________________
\r
222 void AliProtonCorrectionAnalysisTask::SetAnalysisObjectFeedDown(AliProtonFeedDownAnalysis *const analysis)
\r
224 if (analysis&&fProtonAnalysisBase)
\r
226 Printf("Feed Down ON\n");
\r
227 fIsOn_AliProtonFeedDownAnalysis=kTRUE;
\r
228 fProtonFeedDownAnalysis = analysis;
\r
229 fProtonFeedDownAnalysis->SetBaseAnalysis(fProtonAnalysisBase);
\r
230 fProtonFeedDownAnalysis->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY());
\r
233 fIsOn_AliProtonFeedDownAnalysis=kFALSE;
\r
235 //___________________________________________________________________________________________
\r
236 void AliProtonCorrectionAnalysisTask::SetAnalysisObjectSpectraCorrection(AliProtonSpectraCorrection *const analysis)
\r
238 if (analysis&&fProtonAnalysisBase)
\r
240 Printf("Spectra Correection ON\n");
\r
241 fIsOn_AliProtonSpectraCorrection=kTRUE;
\r
242 fProtonSpectraCorrection= analysis;
\r
243 fProtonSpectraCorrection->SetBaseAnalysis(fProtonAnalysisBase);
\r
244 fProtonSpectraCorrection->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY());
\r
247 fIsOn_AliProtonSpectraCorrection=kFALSE;
\r