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, const char *aConfigMacro="ConfigFemtoAnalysis.C"):
\r
35 AliAnalysisTask(name,""),
\r
46 // Input slot #0 works with an Ntuple
\r
47 DefineInput(0, TChain::Class());
\r
48 // Output slot #0 writes into a TH1 container
\r
49 DefineOutput(0, TList::Class());
\r
50 fConfigMacro = (char *) malloc(sizeof(char) * strlen(aConfigMacro));
\r
51 strcpy(fConfigMacro, aConfigMacro);
\r
54 AliAnalysisTaskFemto::AliAnalysisTaskFemto(const AliAnalysisTaskFemto& aFemtoTask):
\r
55 AliAnalysisTask(aFemtoTask),
\r
66 fESD = aFemtoTask.fESD;
\r
67 fAOD = aFemtoTask.fAOD;
\r
68 fStack = aFemtoTask.fStack;
\r
69 fOutputList = aFemtoTask.fOutputList;
\r
70 fReader = aFemtoTask.fReader;
\r
71 fManager = aFemtoTask.fManager;
\r
72 fAnalysisType = aFemtoTask.fAnalysisType;
\r
73 fConfigMacro = (char *) malloc(sizeof(char) * strlen(aFemtoTask.fConfigMacro));
\r
74 strcpy(fConfigMacro, aFemtoTask.fConfigMacro);
\r
78 AliAnalysisTaskFemto& AliAnalysisTaskFemto::operator=(const AliAnalysisTaskFemto& aFemtoTask){
\r
79 // assignment operator
\r
80 if (this == &aFemtoTask)
\r
83 fESD = aFemtoTask.fESD;
\r
84 fAOD = aFemtoTask.fAOD;
\r
85 fStack = aFemtoTask.fStack;
\r
86 fOutputList = aFemtoTask.fOutputList;
\r
87 fReader = aFemtoTask.fReader;
\r
88 fManager = aFemtoTask.fManager;
\r
89 fAnalysisType = aFemtoTask.fAnalysisType;
\r
90 if (fConfigMacro) free(fConfigMacro);
\r
91 fConfigMacro = (char *) malloc(sizeof(char) * strlen(aFemtoTask.fConfigMacro));
\r
92 strcpy(fConfigMacro, aFemtoTask.fConfigMacro);
\r
97 AliAnalysisTaskFemto::~AliAnalysisTaskFemto()
\r
99 if (fConfigMacro) free(fConfigMacro);
\r
103 //________________________________________________________________________
\r
104 void AliAnalysisTaskFemto::ConnectInputData(Option_t *) {
\r
105 AliInfo(Form(" ConnectInputData %s\n", GetName()));
\r
111 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
\r
113 AliWarning("Could not read chain from input slot 0");
\r
117 if ((dynamic_cast<AliFemtoEventReaderESDChain *> (fReader)) ||
\r
118 (dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader))) {
\r
119 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
122 AliInfo("Selected ESD analysis");
\r
126 // AliWarning("Could not get ESDInputHandler");
\r
129 fESD = esdH->GetEvent();
\r
134 if (dynamic_cast<AliFemtoEventReaderAODChain *> (fReader)) {
\r
135 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
138 TObject *handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
\r
139 AliInfo("Has output handler ");
\r
140 if( handler && handler->InheritsFrom("AliAODHandler") ) {
\r
141 AliInfo("Selected AOD analysis");
\r
143 fAOD = ((AliAODHandler*)handler)->GetAOD();
\r
147 AliWarning("Selected AOD reader but no AOD handler found");
\r
151 AliInfo("Selected AOD analysis");
\r
154 fAOD = aodH->GetEvent();
\r
158 if ((!fAOD) && (!fESD)) {
\r
159 AliWarning("Wrong analysis type: Only ESD and AOD types are allowed!");
\r
163 //________________________________________________________________________
\r
164 void AliAnalysisTaskFemto::CreateOutputObjects() {
\r
165 AliInfo("Creating Femto Analysis objects\n");
\r
167 gSystem->SetIncludePath("-I$ROOTSYS/include -I./STEERBase/ -I./ESD/ -I./AOD/ -I./ANALYSIS/ -I./ANALYSISalice/ -I./PWG2AOD/AOD -I./PWG2femtoscopy/FEMTOSCOPY/AliFemto -I./PWG2femtoscopyUser/FEMTOSCOPY/AliFemtoUser");
\r
169 // sprintf(fcm, "%s++", fConfigMacro);
\r
170 // gROOT->LoadMacro(fcm);
\r
171 gROOT->LoadMacro(fConfigMacro);
\r
172 // fJetFinder = (AliJetFinder*) gInterpreter->ProcessLine("ConfigJetAnalysis()");
\r
173 SetFemtoManager((AliFemtoManager *) gInterpreter->ProcessLine("ConfigFemtoAnalysis()"));
\r
176 fOutputList = fManager->Analysis(0)->GetOutputList();
\r
178 for (unsigned int ian = 1; ian<fManager->AnalysisCollection()->size(); ian++) {
\r
179 tOL = fManager->Analysis(ian)->GetOutputList();
\r
181 TIter nextListCf(tOL);
\r
182 while (TObject *obj = nextListCf()) {
\r
183 fOutputList->Add(obj);
\r
190 //________________________________________________________________________
\r
191 void AliAnalysisTaskFemto::Exec(Option_t *) {
\r
192 // Task making a femtoscopic analysis.
\r
194 if (fAnalysisType==1) {
\r
196 AliWarning("fESD not available");
\r
201 AliMCEventHandler* mctruth = (AliMCEventHandler*)
\r
202 ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
\r
204 AliGenHijingEventHeader *hdh = 0;
\r
206 fStack = mctruth->MCEvent()->Stack();
\r
208 AliGenCocktailEventHeader *hd = dynamic_cast<AliGenCocktailEventHeader *> (mctruth->MCEvent()->GenEventHeader());
\r
212 // AliInfo ("Got MC cocktail event header %p\n", (void *) hd);
\r
213 TList *lhd = hd->GetHeaders();
\r
214 // AliInfo ("Got list of headers %d\n", lhd->GetEntries());
\r
216 for (int iterh=0; iterh<lhd->GetEntries(); iterh++)
\r
218 hdh = dynamic_cast<AliGenHijingEventHeader *> (lhd->At(iterh));
\r
219 // AliInfo ("HIJING header at %i is %p\n", iterh, (void *) hdh);
\r
225 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
228 AliWarning("Could not get ESDInputHandler");
\r
232 fESD = esdH->GetEvent();
\r
235 AliInfo(Form("Tracks in ESD: %d \n",fESD->GetNumberOfTracks()));
\r
237 if (fESD->GetNumberOfTracks() >= 0) {
\r
240 AliWarning("No ESD reader for ESD analysis !\n");
\r
243 AliFemtoEventReaderESDChain* fesdc = dynamic_cast<AliFemtoEventReaderESDChain *> (fReader);
\r
246 // Process the event with no Kine information
\r
247 fesdc->SetESDSource(fESD);
\r
248 fManager->ProcessEvent();
\r
250 AliFemtoEventReaderESDChainKine* fesdck = dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader);
\r
253 // Process the event with Kine information
\r
254 fesdck->SetESDSource(fESD);
\r
255 fesdck->SetStackSource(fStack);
\r
257 fesdck->SetGenEventHeader(hdh);
\r
258 fManager->ProcessEvent();
\r
260 AliFemtoEventReaderStandard* fstd = dynamic_cast<AliFemtoEventReaderStandard *> (fReader);
\r
263 // Process the event with Kine information
\r
264 fstd->SetESDSource(fESD);
\r
266 fstd->SetStackSource(fStack);
\r
267 fstd->SetGenEventHeader(hdh);
\r
268 fstd->SetInputType(AliFemtoEventReaderStandard::kESDKine);
\r
271 fstd->SetInputType(AliFemtoEventReaderStandard::kESD);
\r
272 fManager->ProcessEvent();
\r
276 // Post the output histogram list
\r
277 PostData(0, fOutputList);
\r
280 if (fAnalysisType==2) {
\r
282 AliWarning("fAOD not available");
\r
287 // AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
290 // AliWarning("Could not get AODInputHandler");
\r
295 // fAOD = aodH->GetEvent();
\r
298 AliInfo(Form("Tracks in AOD: %d \n",fAOD->GetNumberOfTracks()));
\r
300 if (fAOD->GetNumberOfTracks() > 0) {
\r
302 AliWarning("No AOD reader for AOD analysis! \n");
\r
305 AliFemtoEventReaderAODChain* faodc = dynamic_cast<AliFemtoEventReaderAODChain *> (fReader);
\r
308 // Process the event
\r
309 faodc->SetAODSource(fAOD);
\r
310 fManager->ProcessEvent();
\r
312 AliFemtoEventReaderStandard* fstd = dynamic_cast<AliFemtoEventReaderStandard *> (fReader);
\r
315 // Process the event
\r
316 fstd->SetAODSource(fAOD);
\r
317 fstd->SetInputType(AliFemtoEventReaderStandard::kAOD);
\r
318 fManager->ProcessEvent();
\r
323 // Post the output histogram list
\r
324 PostData(0, fOutputList);
\r
328 //________________________________________________________________________
\r
329 void AliAnalysisTaskFemto::Terminate(Option_t *) {
\r
330 // Do the final processing
\r
332 fManager->Finish();
\r
335 //________________________________________________________________________
\r
336 void AliAnalysisTaskFemto:: FinishTaskOutput() {
\r
337 // Do the final processing
\r
339 fManager->Finish();
\r
342 //________________________________________________________________________
\r
343 void AliAnalysisTaskFemto::SetFemtoReaderESD(AliFemtoEventReaderESDChain *aReader)
\r
345 AliInfo("Selecting Femto reader for ESD\n");
\r
348 //________________________________________________________________________
\r
349 void AliAnalysisTaskFemto::SetFemtoReaderESDKine(AliFemtoEventReaderESDChainKine *aReader)
\r
351 AliInfo("Selecting Femto reader for ESD with Kinematics information\n");
\r
354 //________________________________________________________________________
\r
355 void AliAnalysisTaskFemto::SetFemtoReaderAOD(AliFemtoEventReaderAODChain *aReader)
\r
357 AliInfo("Selecting Femto reader for AOD\n");
\r
360 void AliAnalysisTaskFemto::SetFemtoReaderStandard(AliFemtoEventReaderStandard *aReader)
\r
362 AliInfo("Selecting Standard all-purpose Femto reader\n");
\r
365 //________________________________________________________________________
\r
366 void AliAnalysisTaskFemto::SetFemtoManager(AliFemtoManager *aManager)
\r
368 fManager = aManager;
\r
369 AliInfo(Form("Got reader %p\n", (void *) aManager->EventReader()));
\r
370 AliFemtoEventReaderESDChain *tReaderESDChain = dynamic_cast<AliFemtoEventReaderESDChain *> (aManager->EventReader());
\r
371 AliFemtoEventReaderESDChainKine *tReaderESDChainKine = dynamic_cast<AliFemtoEventReaderESDChainKine *> (aManager->EventReader());
\r
372 AliFemtoEventReaderAODChain *tReaderAODChain = dynamic_cast<AliFemtoEventReaderAODChain *> (aManager->EventReader());
\r
373 AliFemtoEventReaderStandard *tReaderStandard = dynamic_cast<AliFemtoEventReaderStandard *> (aManager->EventReader());
\r
375 if ((!tReaderESDChain) && (!tReaderESDChainKine) && (!tReaderAODChain) && (!tReaderStandard)) {
\r
376 AliWarning("No AliFemto event reader created. Will not run femto analysis.\n");
\r
379 if (tReaderESDChain) SetFemtoReaderESD(tReaderESDChain);
\r
380 if (tReaderESDChainKine) SetFemtoReaderESDKine(tReaderESDChainKine);
\r
381 if (tReaderAODChain) SetFemtoReaderAOD(tReaderAODChain);
\r
382 if (tReaderStandard) SetFemtoReaderStandard(tReaderStandard);
\r