1 //------------------------------------------------------
\r
2 // AliAnalysisTaskFemto - A task for the analysis framework
\r
3 // from the FEMTOSCOPY analysis of PWG2. Creates the necessary
\r
4 // connection between the ESD or AOD input and the femtoscopic
\r
6 // Author: Adam Kisiel, OSU; Adam.Kisiel@cern.ch
\r
7 //------------------------------------------------------
\r
11 #include "TCanvas.h"
\r
12 #include "TSystem.h"
\r
14 #include "TInterpreter.h"
\r
16 #include "AliAnalysisTask.h"
\r
18 #include "AliESDEvent.h"
\r
20 #include "AliFemtoAnalysis.h"
\r
21 #include "AliAnalysisTaskFemto.h"
\r
22 #include "AliVHeader.h"
\r
23 #include "AliGenEventHeader.h"
\r
24 #include "AliGenHijingEventHeader.h"
\r
25 #include "AliGenCocktailEventHeader.h"
\r
27 ClassImp(AliAnalysisTaskFemto)
\r
29 // Default name for the setup macro of femto analysis
\r
30 // This function MUST be defined in the separate file !!!
\r
31 // extern AliFemtoManager *ConfigFemtoAnalysis();
\r
33 //________________________________________________________________________
\r
34 AliAnalysisTaskFemto::AliAnalysisTaskFemto(const char *name):
\r
35 AliAnalysisTask(name,""),
\r
45 // Input slot #0 works with an Ntuple
\r
46 DefineInput(0, TChain::Class());
\r
47 // Output slot #0 writes into a TH1 container
\r
48 DefineOutput(0, TList::Class());
\r
51 AliAnalysisTaskFemto::AliAnalysisTaskFemto(const AliAnalysisTaskFemto& aFemtoTask):
\r
52 AliAnalysisTask(aFemtoTask),
\r
62 fESD = aFemtoTask.fESD;
\r
63 fAOD = aFemtoTask.fAOD;
\r
64 fStack = aFemtoTask.fStack;
\r
65 fOutputList = aFemtoTask.fOutputList;
\r
66 fReader = aFemtoTask.fReader;
\r
67 fManager = aFemtoTask.fManager;
\r
68 fAnalysisType = aFemtoTask.fAnalysisType;
\r
72 AliAnalysisTaskFemto& AliAnalysisTaskFemto::operator=(const AliAnalysisTaskFemto& aFemtoTask){
\r
73 // assignment operator
\r
74 if (this == &aFemtoTask)
\r
77 fESD = aFemtoTask.fESD;
\r
78 fAOD = aFemtoTask.fAOD;
\r
79 fStack = aFemtoTask.fStack;
\r
80 fOutputList = aFemtoTask.fOutputList;
\r
81 fReader = aFemtoTask.fReader;
\r
82 fManager = aFemtoTask.fManager;
\r
83 fAnalysisType = aFemtoTask.fAnalysisType;
\r
88 //________________________________________________________________________
\r
89 void AliAnalysisTaskFemto::ConnectInputData(Option_t *) {
\r
90 printf(" ConnectInputData %s\n", GetName());
\r
96 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
\r
98 Printf("ERROR: Could not read chain from input slot 0");
\r
101 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
104 cout << "Selected ESD analysis" << endl;
\r
108 Printf("ERROR: Could not get ESDInputHandler");
\r
111 fESD = esdH->GetEvent();
\r
115 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
118 Printf("ERROR: Could not get AODInputHandler");
\r
121 cout << "Selected AOD analysis" << endl;
\r
124 fAOD = aodH->GetEvent();
\r
127 if ((!fAOD) && (!fESD)) {
\r
128 Printf("Wrong analysis type: Only ESD and AOD types are allowed!");
\r
135 //________________________________________________________________________
\r
136 void AliAnalysisTaskFemto::CreateOutputObjects() {
\r
137 printf("Creating Femto Analysis objects\n");
\r
139 gROOT->LoadMacro("ConfigFemtoAnalysis.C");
\r
140 // fJetFinder = (AliJetFinder*) gInterpreter->ProcessLine("ConfigJetAnalysis()");
\r
141 SetFemtoManager((AliFemtoManager *) gInterpreter->ProcessLine("ConfigFemtoAnalysis()"));
\r
144 fOutputList = fManager->Analysis(0)->GetOutputList();
\r
146 for (unsigned int ian = 1; ian<fManager->AnalysisCollection()->size(); ian++) {
\r
147 tOL = fManager->Analysis(ian)->GetOutputList();
\r
149 TIter nextListCf(tOL);
\r
150 while (TObject *obj = nextListCf()) {
\r
151 fOutputList->Add(obj);
\r
158 //________________________________________________________________________
\r
159 void AliAnalysisTaskFemto::Exec(Option_t *) {
\r
160 // Task making a femtoscopic analysis.
\r
162 if (fAnalysisType==1) {
\r
164 Printf("ERROR: fESD not available");
\r
169 AliMCEventHandler* mctruth = (AliMCEventHandler*)
\r
170 ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
\r
172 AliGenHijingEventHeader *hdh = 0;
\r
174 fStack = mctruth->MCEvent()->Stack();
\r
176 AliGenCocktailEventHeader *hd = dynamic_cast<AliGenCocktailEventHeader *> (mctruth->MCEvent()->GenEventHeader());
\r
180 printf ("Got MC cocktail event header %p\n", (void *) hd);
\r
181 TList *lhd = hd->GetHeaders();
\r
182 printf ("Got list of headers %d\n", lhd->GetEntries());
\r
184 for (int iterh=0; iterh<lhd->GetEntries(); iterh++)
\r
186 hdh = dynamic_cast<AliGenHijingEventHeader *> (lhd->At(iterh));
\r
187 printf ("HIJING header at %i is %p\n", iterh, (void *) hdh);
\r
193 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
196 Printf("ERROR: Could not get ESDInputHandler");
\r
200 fESD = esdH->GetEvent();
\r
203 printf("Tracks in ESD: %d \n",fESD->GetNumberOfTracks());
\r
205 if (fESD->GetNumberOfTracks() >= 0) {
\r
208 printf("ERROR: No ESD reader for ESD analysis !\n");
\r
211 AliFemtoEventReaderESDChain* fesdc = dynamic_cast<AliFemtoEventReaderESDChain *> (fReader);
\r
214 // Process the event with no Kine information
\r
215 fesdc->SetESDSource(fESD);
\r
216 fManager->ProcessEvent();
\r
218 AliFemtoEventReaderESDChainKine* fesdck = dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader);
\r
221 // Process the event with Kine information
\r
222 fesdck->SetESDSource(fESD);
\r
223 fesdck->SetStackSource(fStack);
\r
225 fesdck->SetGenEventHeader(hdh);
\r
226 fManager->ProcessEvent();
\r
230 // Post the output histogram list
\r
231 PostData(0, fOutputList);
\r
234 if (fAnalysisType==2) {
\r
236 Printf("ERROR: fAOD not available");
\r
241 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
244 Printf("ERROR: Could not get AODInputHandler");
\r
249 fAOD = aodH->GetEvent();
\r
252 printf("Tracks in AOD: %d \n",fAOD->GetNumberOfTracks());
\r
254 if (fAOD->GetNumberOfTracks() > 0) {
\r
256 printf("ERROR: No AOD reader for AOD analysis! \n");
\r
259 AliFemtoEventReaderAODChain* faodc = dynamic_cast<AliFemtoEventReaderAODChain *> (fReader);
\r
262 // Process the event
\r
263 faodc->SetAODSource(fAOD);
\r
264 fManager->ProcessEvent();
\r
269 // Post the output histogram list
\r
270 PostData(0, fOutputList);
\r
274 //________________________________________________________________________
\r
275 void AliAnalysisTaskFemto::Terminate(Option_t *) {
\r
276 // Do the final processing
\r
278 fManager->Finish();
\r
281 //________________________________________________________________________
\r
282 void AliAnalysisTaskFemto:: FinishTaskOutput() {
\r
283 // Do the final processing
\r
285 fManager->Finish();
\r
288 //________________________________________________________________________
\r
289 void AliAnalysisTaskFemto::SetFemtoReaderESD(AliFemtoEventReaderESDChain *aReader)
\r
291 printf("Selectring Femto reader for ESD\n");
\r
294 //________________________________________________________________________
\r
295 void AliAnalysisTaskFemto::SetFemtoReaderESDKine(AliFemtoEventReaderESDChainKine *aReader)
\r
297 printf("Selectring Femto reader for ESD with Kinematics information\n");
\r
300 //________________________________________________________________________
\r
301 void AliAnalysisTaskFemto::SetFemtoReaderAOD(AliFemtoEventReaderAODChain *aReader)
\r
303 printf("Selecting Femto reader for AOD\n");
\r
306 //________________________________________________________________________
\r
307 void AliAnalysisTaskFemto::SetFemtoManager(AliFemtoManager *aManager)
\r
309 fManager = aManager;
\r
310 printf("Got reader %p\n", (void *) aManager->EventReader());
\r
311 AliFemtoEventReaderESDChain *tReaderESDChain = dynamic_cast<AliFemtoEventReaderESDChain *> (aManager->EventReader());
\r
312 AliFemtoEventReaderESDChainKine *tReaderESDChainKine = dynamic_cast<AliFemtoEventReaderESDChainKine *> (aManager->EventReader());
\r
313 AliFemtoEventReaderAODChain *tReaderAODChain = dynamic_cast<AliFemtoEventReaderAODChain *> (aManager->EventReader());
\r
315 if ((!tReaderESDChain) && (!tReaderESDChainKine) && (!tReaderAODChain)) {
\r
316 printf("No AliFemto event reader created. Will not run femto analysis.\n");
\r
319 if (tReaderESDChain) SetFemtoReaderESD(tReaderESDChain);
\r
320 if (tReaderESDChainKine) SetFemtoReaderESDKine(tReaderESDChainKine);
\r
321 if (tReaderAODChain) SetFemtoReaderAOD(tReaderAODChain);
\r