1 //------------------------------------------------------
2 // AliAnalysisTaskFemto - A task for the analysis framework
3 // from the FEMTOSCOPY analysis of PWG2. Creates the necessary
4 // connection between the ESD or AOD input and the femtoscopic
6 // Author: Adam Kisiel, OSU; Adam.Kisiel@cern.ch
7 //------------------------------------------------------
14 #include "TInterpreter.h"
16 #include "AliAnalysisTask.h"
18 #include "AliESDEvent.h"
20 #include "AliFemtoAnalysis.h"
21 #include "AliAnalysisTaskFemto.h"
22 #include "AliVHeader.h"
23 #include "AliGenEventHeader.h"
24 #include "AliGenHijingEventHeader.h"
25 #include "AliGenCocktailEventHeader.h"
27 ClassImp(AliAnalysisTaskFemto)
29 // Default name for the setup macro of femto analysis
30 // This function MUST be defined in the separate file !!!
31 // extern AliFemtoManager *ConfigFemtoAnalysis();
33 //________________________________________________________________________
34 AliAnalysisTaskFemto::AliAnalysisTaskFemto(const char *name, const char *aConfigMacro, const char *aConfigParams):
35 AliAnalysisTask(name,""),
49 // Input slot #0 works with an Ntuple
50 DefineInput(0, TChain::Class());
51 // Output slot #0 writes into a TH1 container
52 DefineOutput(0, TList::Class());
53 fConfigMacro = (char *) malloc(sizeof(char) * strlen(aConfigMacro));
54 strcpy(fConfigMacro, aConfigMacro);
55 fConfigParams = (char *) malloc(sizeof(char) * strlen(aConfigParams));
56 strcpy(fConfigParams, aConfigParams);
58 //________________________________________________________________________
59 AliAnalysisTaskFemto::AliAnalysisTaskFemto(const char *name, const char *aConfigMacro="ConfigFemtoAnalysis.C"):
60 AliAnalysisTask(name,""),
74 // Input slot #0 works with an Ntuple
75 DefineInput(0, TChain::Class());
76 // Output slot #0 writes into a TH1 container
77 DefineOutput(0, TList::Class());
78 fConfigMacro = (char *) malloc(sizeof(char) * strlen(aConfigMacro));
79 strcpy(fConfigMacro, aConfigMacro);
80 fConfigParams = (char *) malloc(sizeof(char) * 2);
81 strcpy(fConfigParams, "");
84 AliAnalysisTaskFemto::AliAnalysisTaskFemto(const AliAnalysisTaskFemto& aFemtoTask):
85 AliAnalysisTask(aFemtoTask),
99 fESD = aFemtoTask.fESD;
100 fESDpid = aFemtoTask.fESDpid;
101 fAOD = aFemtoTask.fAOD;
102 fAODpidUtil = aFemtoTask.fAODpidUtil;
103 fStack = aFemtoTask.fStack;
104 fOutputList = aFemtoTask.fOutputList;
105 fReader = aFemtoTask.fReader;
106 fManager = aFemtoTask.fManager;
107 fAnalysisType = aFemtoTask.fAnalysisType;
108 fConfigMacro = (char *) malloc(sizeof(char) * strlen(aFemtoTask.fConfigMacro));
109 strcpy(fConfigMacro, aFemtoTask.fConfigMacro);
110 fConfigParams = (char *) malloc(sizeof(char) * strlen(aFemtoTask.fConfigParams));
111 strcpy(fConfigParams, aFemtoTask.fConfigParams);
115 AliAnalysisTaskFemto& AliAnalysisTaskFemto::operator=(const AliAnalysisTaskFemto& aFemtoTask){
116 // assignment operator
117 if (this == &aFemtoTask)
120 fESD = aFemtoTask.fESD;
121 fESDpid = aFemtoTask.fESDpid;
122 fAOD = aFemtoTask.fAOD;
123 fAODpidUtil = aFemtoTask.fAODpidUtil;
124 fStack = aFemtoTask.fStack;
125 fOutputList = aFemtoTask.fOutputList;
126 fReader = aFemtoTask.fReader;
127 fManager = aFemtoTask.fManager;
128 fAnalysisType = aFemtoTask.fAnalysisType;
129 if (fConfigMacro) free(fConfigMacro);
130 fConfigMacro = (char *) malloc(sizeof(char) * strlen(aFemtoTask.fConfigMacro));
131 strcpy(fConfigMacro, aFemtoTask.fConfigMacro);
132 if (fConfigParams) free(fConfigParams);
133 fConfigParams = (char *) malloc(sizeof(char) * strlen(aFemtoTask.fConfigParams));
134 strcpy(fConfigParams, aFemtoTask.fConfigParams);
139 AliAnalysisTaskFemto::~AliAnalysisTaskFemto()
141 if (fConfigMacro) free(fConfigMacro);
142 if (fConfigParams) free(fConfigParams);
146 //________________________________________________________________________
147 void AliAnalysisTaskFemto::ConnectInputData(Option_t *) {
148 AliInfo(Form(" ConnectInputData %s\n", GetName()));
156 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
158 AliWarning("Could not read chain from input slot 0");
162 AliFemtoEventReaderESDChain *femtoReader = dynamic_cast<AliFemtoEventReaderESDChain *> (fReader);
163 if ((dynamic_cast<AliFemtoEventReaderESDChain *> (fReader))) {
164 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
167 AliInfo("Selected ESD analysis");
171 // AliWarning("Could not get ESDInputHandler");
174 fESD = esdH->GetEvent();
175 fESDpid = esdH->GetESDpid();
176 femtoReader->SetESDPid(fESDpid);
180 else if ((dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader))) {
181 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
184 AliInfo("Selected ESD analysis");
188 // AliWarning("Could not get ESDInputHandler");
191 fESD = esdH->GetEvent();
192 //fESDpid = esdH->GetESDpid();
193 //femtoReader->SetESDPid(fESDpid);
199 AliFemtoEventReaderESDChainKine *femtoReaderESDKine = dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader);
200 if ((dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader))) {
201 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
204 AliInfo("Selected ESD analysis");
208 // AliWarning("Could not get ESDInputHandler");
211 fESD = esdH->GetEvent();
212 fESDpid = esdH->GetESDpid();
213 femtoReaderESDKine->SetESDPid(fESDpid);
218 // AliFemtoEventReaderKinematicsChain *femtoReaderKine = dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader);
219 if ((dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader))) {
220 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
223 AliInfo("Selected ESD analysis");
227 // AliWarning("Could not get ESDInputHandler");
230 fESD = esdH->GetEvent();
231 //fESDpid = esdH->GetESDpid();
232 //femtoReader->SetESDPid(fESDpid);
238 AliFemtoEventReaderAODChain *femtoReaderAOD = dynamic_cast<AliFemtoEventReaderAODChain *> (fReader);
239 if (dynamic_cast<AliFemtoEventReaderAODChain *> (fReader)) {
240 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
243 TObject *handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
244 AliInfo("Has output handler ");
245 if( handler && handler->InheritsFrom("AliAODHandler") ) {
246 AliInfo("Selected AOD analysis");
248 fAOD = ((AliAODHandler*)handler)->GetAOD();
252 AliWarning("Selected AOD reader but no AOD handler found");
256 AliInfo("Selected AOD analysis");
259 fAOD = aodH->GetEvent();
261 fAODpidUtil = aodH->GetAODpidUtil();
262 // printf("aodH->GetAODpidUtil(): %x",aodH->GetAODpidUtil());
263 femtoReaderAOD->SetAODpidUtil(fAODpidUtil);
267 if ((!fAOD) && (!fESD)) {
268 AliWarning("Wrong analysis type: Only ESD and AOD types are allowed!");
272 //________________________________________________________________________
273 void AliAnalysisTaskFemto::CreateOutputObjects() {
274 AliInfo("Creating Femto Analysis objects\n");
276 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");
278 // sprintf(fcm, "%s++", fConfigMacro);
279 // gROOT->LoadMacro(fcm);
280 gROOT->LoadMacro(fConfigMacro);
281 // fJetFinder = (AliJetFinder*) gInterpreter->ProcessLine("ConfigJetAnalysis()");
283 SetFemtoManager((AliFemtoManager *) gInterpreter->ProcessLine("ConfigFemtoAnalysis()"));
285 SetFemtoManager((AliFemtoManager *) gInterpreter->ProcessLine(Form("ConfigFemtoAnalysis(%s)", fConfigParams)));
288 fOutputList = fManager->Analysis(0)->GetOutputList();
290 for (unsigned int ian = 1; ian<fManager->AnalysisCollection()->size(); ian++) {
291 tOL = fManager->Analysis(ian)->GetOutputList();
293 TIter nextListCf(tOL);
294 while (TObject *obj = nextListCf()) {
295 fOutputList->Add(obj);
301 PostData(0, fOutputList);
304 //________________________________________________________________________
305 void AliAnalysisTaskFemto::Exec(Option_t *) {
306 // Task making a femtoscopic analysis.
308 if (fAnalysisType==1) {
310 AliWarning("fESD not available");
315 AliMCEventHandler* mctruth = (AliMCEventHandler*)
316 ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
318 AliGenHijingEventHeader *hdh = 0;
320 fStack = mctruth->MCEvent()->Stack();
322 AliGenCocktailEventHeader *hd = dynamic_cast<AliGenCocktailEventHeader *> (mctruth->MCEvent()->GenEventHeader());
326 // AliInfo ("Got MC cocktail event header %p\n", (void *) hd);
327 TList *lhd = hd->GetHeaders();
328 // AliInfo ("Got list of headers %d\n", lhd->GetEntries());
330 for (int iterh=0; iterh<lhd->GetEntries(); iterh++)
332 hdh = dynamic_cast<AliGenHijingEventHeader *> (lhd->At(iterh));
333 // AliInfo ("HIJING header at %i is %p\n", iterh, (void *) hdh);
339 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
342 AliWarning("Could not get ESDInputHandler");
346 fESD = esdH->GetEvent();
347 fESDpid = esdH->GetESDpid();
350 AliInfo(Form("Tracks in ESD: %d \n",fESD->GetNumberOfTracks()));
352 if (fESD->GetNumberOfTracks() >= 0) {
355 AliWarning("No ESD reader for ESD analysis !\n");
358 AliFemtoEventReaderESDChain* fesdc = dynamic_cast<AliFemtoEventReaderESDChain *> (fReader);
361 // Process the event with no Kine information
362 fesdc->SetESDSource(fESD);
363 fManager->ProcessEvent();
366 AliFemtoEventReaderKinematicsChain* fkinec = dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader);
369 // Process the event with Kine information only
370 fkinec->SetStackSource(fStack);
371 fManager->ProcessEvent();
375 AliFemtoEventReaderESDChainKine* fesdck = dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader);
378 // Process the event with Kine information
379 fesdck->SetESDSource(fESD);
380 fesdck->SetStackSource(fStack);
382 fesdck->SetGenEventHeader(hdh);
383 fManager->ProcessEvent();
385 AliFemtoEventReaderStandard* fstd = dynamic_cast<AliFemtoEventReaderStandard *> (fReader);
388 // Process the event with Kine information
389 fstd->SetESDSource(fESD);
391 fstd->SetStackSource(fStack);
392 fstd->SetGenEventHeader(hdh);
393 fstd->SetInputType(AliFemtoEventReaderStandard::kESDKine);
396 fstd->SetInputType(AliFemtoEventReaderStandard::kESD);
397 fManager->ProcessEvent();
401 // Post the output histogram list
402 PostData(0, fOutputList);
405 if (fAnalysisType==2) {
407 AliWarning("fAOD not available");
412 // AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
415 // AliWarning("Could not get AODInputHandler");
420 // fAOD = aodH->GetEvent();
423 AliInfo(Form("Tracks in AOD: %d \n",fAOD->GetNumberOfTracks()));
425 if (fAOD->GetNumberOfTracks() > 0) {
427 AliWarning("No AOD reader for AOD analysis! \n");
430 AliFemtoEventReaderAODChain* faodc = dynamic_cast<AliFemtoEventReaderAODChain *> (fReader);
434 faodc->SetAODSource(fAOD);
435 fManager->ProcessEvent();
437 AliFemtoEventReaderStandard* fstd = dynamic_cast<AliFemtoEventReaderStandard *> (fReader);
441 fstd->SetAODSource(fAOD);
442 fstd->SetInputType(AliFemtoEventReaderStandard::kAOD);
443 fManager->ProcessEvent();
448 // Post the output histogram list
449 PostData(0, fOutputList);
453 //________________________________________________________________________
454 void AliAnalysisTaskFemto::Terminate(Option_t *) {
455 // Do the final processing
460 //________________________________________________________________________
461 void AliAnalysisTaskFemto:: FinishTaskOutput() {
462 // Do the final processing
467 //________________________________________________________________________
468 void AliAnalysisTaskFemto::SetFemtoReaderESD(AliFemtoEventReaderESDChain *aReader)
470 AliInfo("Selecting Femto reader for ESD\n");
473 //________________________________________________________________________
474 void AliAnalysisTaskFemto::SetFemtoReaderESDKine(AliFemtoEventReaderESDChainKine *aReader)
476 AliInfo("Selecting Femto reader for ESD with Kinematics information\n");
479 //________________________________________________________________________
480 void AliAnalysisTaskFemto::SetFemtoReaderAOD(AliFemtoEventReaderAODChain *aReader)
482 AliInfo("Selecting Femto reader for AOD\n");
485 void AliAnalysisTaskFemto::SetFemtoReaderStandard(AliFemtoEventReaderStandard *aReader)
487 AliInfo("Selecting Standard all-purpose Femto reader\n");
490 void AliAnalysisTaskFemto::SetFemtoReaderKinematics(AliFemtoEventReaderKinematicsChain *aReader)
492 printf("Selecting Femto reader for Kinematics (Monte Carlo) information\n");
495 //________________________________________________________________________
496 void AliAnalysisTaskFemto::SetFemtoManager(AliFemtoManager *aManager)
499 AliInfo(Form("Got reader %p\n", (void *) aManager->EventReader()));
500 AliFemtoEventReaderESDChain *tReaderESDChain = dynamic_cast<AliFemtoEventReaderESDChain *> (aManager->EventReader());
501 AliFemtoEventReaderESDChainKine *tReaderESDChainKine = dynamic_cast<AliFemtoEventReaderESDChainKine *> (aManager->EventReader());
502 AliFemtoEventReaderAODChain *tReaderAODChain = dynamic_cast<AliFemtoEventReaderAODChain *> (aManager->EventReader());
503 AliFemtoEventReaderStandard *tReaderStandard = dynamic_cast<AliFemtoEventReaderStandard *> (aManager->EventReader());
504 AliFemtoEventReaderKinematicsChain *tReaderKineChain = dynamic_cast<AliFemtoEventReaderKinematicsChain *> (aManager->EventReader());
506 if ((!tReaderESDChain) && (!tReaderESDChainKine) && (!tReaderAODChain) && (!tReaderStandard) && (!tReaderKineChain)) {
507 AliWarning("No AliFemto event reader created. Will not run femto analysis.\n");
510 if (tReaderESDChain) SetFemtoReaderESD(tReaderESDChain);
511 if (tReaderESDChainKine) SetFemtoReaderESDKine(tReaderESDChainKine);
512 if (tReaderAODChain) SetFemtoReaderAOD(tReaderAODChain);
513 if (tReaderStandard) SetFemtoReaderStandard(tReaderStandard);
514 if (tReaderKineChain) SetFemtoReaderKinematics(tReaderKineChain);