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"
17 #include "AliAnalysisTaskSE.h"
19 #include "AliESDEvent.h"
21 #include "AliFemtoAnalysis.h"
22 #include "AliAnalysisTaskFemto.h"
23 #include "AliVHeader.h"
24 #include "AliGenEventHeader.h"
25 #include "AliGenHijingEventHeader.h"
26 #include "AliGenCocktailEventHeader.h"
28 ClassImp(AliAnalysisTaskFemto)
30 // Default name for the setup macro of femto analysis
31 // This function MUST be defined in the separate file !!!
32 // extern AliFemtoManager *ConfigFemtoAnalysis();
34 //________________________________________________________________________
35 AliAnalysisTaskFemto::AliAnalysisTaskFemto(TString name, TString aConfigMacro, TString aConfigParams, Bool_t aVerbose):
36 AliAnalysisTaskSE(name), //AliAnalysisTask(name,""),
47 fConfigMacro(aConfigMacro),
48 fConfigParams(aConfigParams),
52 // Input slot #0 works with an Ntuple
53 //DefineInput(0, TChain::Class());
54 // Output slot #0 writes into a TH1 container
55 DefineOutput(0, TList::Class());
58 //________________________________________________________________________
59 AliAnalysisTaskFemto::AliAnalysisTaskFemto(TString name, TString aConfigMacro="ConfigFemtoAnalysis.C", Bool_t aVerbose):
60 AliAnalysisTaskSE(name), //AliAnalysisTask(name,""),
71 fConfigMacro(aConfigMacro),
76 // Input slot #0 works with an Ntuple
77 //DefineInput(0, TChain::Class());
78 // Output slot #0 writes into a TH1 container
79 DefineOutput(0, TList::Class());
83 AliAnalysisTaskFemto::AliAnalysisTaskFemto(const AliAnalysisTaskFemto& aFemtoTask):
84 AliAnalysisTaskSE(aFemtoTask), //AliAnalysisTask(aFemtoTask),
100 fESD = aFemtoTask.fESD;
101 fESDpid = aFemtoTask.fESDpid;
102 fAOD = aFemtoTask.fAOD;
103 fAODpidUtil = aFemtoTask.fAODpidUtil;
104 fAODheader = aFemtoTask.fAODheader;
105 fStack = aFemtoTask.fStack;
106 fOutputList = aFemtoTask.fOutputList;
107 fReader = aFemtoTask.fReader;
108 fManager = aFemtoTask.fManager;
109 fAnalysisType = aFemtoTask.fAnalysisType;
111 fConfigMacro = aFemtoTask.fConfigMacro;
112 fConfigParams = aFemtoTask.fConfigParams;
114 fVerbose = aFemtoTask.fVerbose;
118 AliAnalysisTaskFemto& AliAnalysisTaskFemto::operator=(const AliAnalysisTaskFemto& aFemtoTask){
119 // assignment operator
120 if (this == &aFemtoTask)
123 fESD = aFemtoTask.fESD;
124 fESDpid = aFemtoTask.fESDpid;
125 fAOD = aFemtoTask.fAOD;
126 fAODpidUtil = aFemtoTask.fAODpidUtil;
127 fAODheader = aFemtoTask.fAODheader;
128 fStack = aFemtoTask.fStack;
129 fOutputList = aFemtoTask.fOutputList;
130 fReader = aFemtoTask.fReader;
131 fManager = aFemtoTask.fManager;
132 fAnalysisType = aFemtoTask.fAnalysisType;
134 fConfigMacro = aFemtoTask.fConfigMacro;
135 fConfigParams = aFemtoTask.fConfigParams;
136 fVerbose = aFemtoTask.fVerbose;
142 AliAnalysisTaskFemto::~AliAnalysisTaskFemto()
147 //________________________________________________________________________
148 void AliAnalysisTaskFemto::ConnectInputData(Option_t *) {
149 AliInfo(Form(" ConnectInputData %s\n", GetName()));
158 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
160 AliWarning("Could not read chain from input slot 0");
164 AliFemtoEventReaderESDChain *femtoReader = dynamic_cast<AliFemtoEventReaderESDChain *> (fReader);
165 if ((dynamic_cast<AliFemtoEventReaderESDChain *> (fReader))) {
166 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
170 AliInfo("Selected ESD analysis");
173 fESD = esdH->GetEvent();
174 fESDpid = esdH->GetESDpid();
175 femtoReader->SetESDPid(fESDpid);
178 else if ((dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader))) {
179 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
183 AliInfo("Selected ESD analysis");
185 fESD = esdH->GetEvent();
188 else if ((dynamic_cast<AliFemtoEventReaderKinematicsChainESD *> (fReader))) {
189 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
192 AliInfo("Selected ESD analysis");
194 fESD = esdH->GetEvent();
198 AliFemtoEventReaderESDChainKine *femtoReaderESDKine = dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader);
199 if ((dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader))) {
200 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
204 AliInfo("Selected ESD analysis");
206 fESD = esdH->GetEvent();
207 fESDpid = esdH->GetESDpid();
208 femtoReaderESDKine->SetESDPid(fESDpid);
213 // AliFemtoEventReaderKinematicsChain *femtoReaderKine = dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader);
214 if ((dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader))) {
215 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
219 AliInfo("Selected ESD analysis");
223 // AliWarning("Could not get ESDInputHandler");
226 fESD = esdH->GetEvent();
227 //fESDpid = esdH->GetESDpid();
228 //femtoReader->SetESDPid(fESDpid);
234 AliFemtoEventReaderAODChain *femtoReaderAOD = dynamic_cast<AliFemtoEventReaderAODChain *> (fReader);
235 if (dynamic_cast<AliFemtoEventReaderAODChain *> (fReader)) {
236 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
239 TObject *handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
241 AliInfo("Has output handler ");
242 if( handler && handler->InheritsFrom("AliAODHandler") ) {
244 AliInfo("Selected AOD analysis");
246 fAOD = ((AliAODHandler*)handler)->GetAOD();
251 AliWarning("Selected AOD reader but no AOD handler found");
256 AliInfo("Selected AOD analysis");
259 fAOD = aodH->GetEvent();
261 fAODpidUtil = aodH->GetAODpidUtil(); //correct way
262 //fAODpidUtil = new AliAODpidUtil(); //not correct way
263 // printf("aodH->GetAODpidUtil(): %x",aodH->GetAODpidUtil());
265 cout<<"AliAnalysisTaskFemto::AodpidUtil:"<<fAODpidUtil<<endl;
266 femtoReaderAOD->SetAODpidUtil(fAODpidUtil);
268 fAODheader = fAOD->GetHeader();
269 femtoReaderAOD->SetAODheader(fAODheader);
274 if ((!fAOD) && (!fESD)) {
276 AliWarning("Wrong analysis type: Only ESD and AOD types are allowed!");
280 //________________________________________________________________________
281 void AliAnalysisTaskFemto::CreateOutputObjects() {
283 AliInfo("Creating Femto Analysis objects\n");
285 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");
287 // sprintf(fcm, "%s++", fConfigMacro);
288 // gROOT->LoadMacro(fcm);
289 gROOT->LoadMacro(fConfigMacro);
290 // fJetFinder = (AliJetFinder*) gInterpreter->ProcessLine("ConfigJetAnalysis()");
292 SetFemtoManager((AliFemtoManager *) gInterpreter->ProcessLine("ConfigFemtoAnalysis()"));
294 SetFemtoManager((AliFemtoManager *) gInterpreter->ProcessLine(Form("ConfigFemtoAnalysis(%s)", fConfigParams.Data())));
297 fOutputList = fManager->Analysis(0)->GetOutputList();
299 for (unsigned int ian = 1; ian<fManager->AnalysisCollection()->size(); ian++) {
300 tOL = fManager->Analysis(ian)->GetOutputList();
302 TIter nextListCf(tOL);
303 while (TObject *obj = nextListCf()) {
304 fOutputList->Add(obj);
310 PostData(0, fOutputList);
313 //________________________________________________________________________
314 void AliAnalysisTaskFemto::Exec(Option_t *) {
315 // Task making a femtoscopic analysis.
316 if(fOfflineTriggerMask){
317 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fOfflineTriggerMask);
320 cout << "AliAnalysisTaskFemto: is not selected" << endl;
324 if (fAnalysisType==1) {
327 AliWarning("fESD not available");
331 AliMCEventHandler* mctruth = (AliMCEventHandler*)
332 ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
334 AliGenHijingEventHeader *hdh = 0;
336 fStack = mctruth->MCEvent()->Stack();
338 AliGenCocktailEventHeader *hd = dynamic_cast<AliGenCocktailEventHeader *> (mctruth->MCEvent()->GenEventHeader());
342 // AliInfo ("Got MC cocktail event header %p\n", (void *) hd);
343 TList *lhd = hd->GetHeaders();
344 // AliInfo ("Got list of headers %d\n", lhd->GetEntries());
346 for (int iterh=0; iterh<lhd->GetEntries(); iterh++)
348 hdh = dynamic_cast<AliGenHijingEventHeader *> (lhd->At(iterh));
349 // AliInfo ("HIJING header at %i is %p\n", iterh, (void *) hdh);
355 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
359 AliWarning("Could not get ESDInputHandler");
363 fESD = esdH->GetEvent();
364 fESDpid = esdH->GetESDpid();
368 AliInfo(Form("Tracks in ESD: %d \n",fESD->GetNumberOfTracks()));
370 if (fESD->GetNumberOfTracks() >= 0) {
374 AliWarning("No ESD reader for ESD analysis !\n");
377 AliFemtoEventReaderESDChain* fesdc = dynamic_cast<AliFemtoEventReaderESDChain *> (fReader);
380 // Process the event with no Kine information
381 fesdc->SetESDSource(fESD);
382 fManager->ProcessEvent();
385 AliFemtoEventReaderKinematicsChain* fkinec = dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader);
388 // Process the event with Kine information only
389 fkinec->SetStackSource(fStack);
390 fManager->ProcessEvent();
394 AliFemtoEventReaderESDChainKine* fesdck = dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader);
397 // Process the event with Kine information
398 fesdck->SetESDSource(fESD);
399 fesdck->SetStackSource(fStack);
401 fesdck->SetGenEventHeader(hdh);
402 fManager->ProcessEvent();
406 AliFemtoEventReaderKinematicsChainESD* fkcesd = dynamic_cast<AliFemtoEventReaderKinematicsChainESD *> (fReader);
409 // Process the event with Kine information
410 fkcesd->SetESDSource(fESD);
411 fkcesd->SetStackSource(fStack);
412 fkcesd->SetGenEventHeader(hdh);
413 fManager->ProcessEvent();
416 AliFemtoEventReaderStandard* fstd = dynamic_cast<AliFemtoEventReaderStandard *> (fReader);
419 // Process the event with Kine information
420 fstd->SetESDSource(fESD);
422 fstd->SetStackSource(fStack);
423 fstd->SetGenEventHeader(hdh);
424 fstd->SetInputType(AliFemtoEventReaderStandard::kESDKine);
427 fstd->SetInputType(AliFemtoEventReaderStandard::kESD);
428 fManager->ProcessEvent();
432 // Post the output histogram list
433 PostData(0, fOutputList);
436 if (fAnalysisType==2) {
439 AliWarning("fAOD not available");
444 // AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
447 // AliWarning("Could not get AODInputHandler");
452 // fAOD = aodH->GetEvent();
459 AliInfo(Form("Tracks in AOD: %d \n",fAOD->GetNumberOfTracks()));
461 if (fAOD->GetNumberOfTracks() > 0) {
464 AliWarning("No AOD reader for AOD analysis! \n");
467 AliFemtoEventReaderAODChain* faodc = dynamic_cast<AliFemtoEventReaderAODChain *> (fReader);
471 faodc->SetAODSource(fAOD);
472 fManager->ProcessEvent();
474 AliFemtoEventReaderStandard* fstd = dynamic_cast<AliFemtoEventReaderStandard *> (fReader);
478 fstd->SetAODSource(fAOD);
479 fstd->SetInputType(AliFemtoEventReaderStandard::kAOD);
480 fManager->ProcessEvent();
485 // Post the output histogram list
486 PostData(0, fOutputList);
490 //________________________________________________________________________
491 void AliAnalysisTaskFemto::Terminate(Option_t *) {
492 // Do the final processing
497 //________________________________________________________________________
498 void AliAnalysisTaskFemto:: FinishTaskOutput() {
499 // Do the final processing
504 //________________________________________________________________________
505 void AliAnalysisTaskFemto::SetFemtoReaderESD(AliFemtoEventReaderESDChain *aReader)
508 AliInfo("Selecting Femto reader for ESD\n");
511 //________________________________________________________________________
512 void AliAnalysisTaskFemto::SetFemtoReaderESDKine(AliFemtoEventReaderESDChainKine *aReader)
515 AliInfo("Selecting Femto reader for ESD with Kinematics information\n");
518 //________________________________________________________________________
519 void AliAnalysisTaskFemto::SetFemtoReaderAOD(AliFemtoEventReaderAODChain *aReader)
522 AliInfo("Selecting Femto reader for AOD\n");
525 void AliAnalysisTaskFemto::SetFemtoReaderStandard(AliFemtoEventReaderStandard *aReader)
528 AliInfo("Selecting Standard all-purpose Femto reader\n");
531 void AliAnalysisTaskFemto::SetFemtoReaderKinematics(AliFemtoEventReaderKinematicsChain *aReader)
534 printf("Selecting Femto reader for Kinematics (Monte Carlo) information\n");
537 void AliAnalysisTaskFemto::SetFemtoReaderKinematicsESD(AliFemtoEventReaderKinematicsChainESD *aReader)
540 printf("Selecting Femto reader for Kinematics (Monte Carlo) information + ESD\n");
543 //________________________________________________________________________
544 void AliAnalysisTaskFemto::SetFemtoManager(AliFemtoManager *aManager)
548 AliInfo(Form("Got reader %p\n", (void *) aManager->EventReader()));
549 AliFemtoEventReaderESDChain *tReaderESDChain = dynamic_cast<AliFemtoEventReaderESDChain *> (aManager->EventReader());
550 AliFemtoEventReaderESDChainKine *tReaderESDChainKine = dynamic_cast<AliFemtoEventReaderESDChainKine *> (aManager->EventReader());
551 AliFemtoEventReaderAODChain *tReaderAODChain = dynamic_cast<AliFemtoEventReaderAODChain *> (aManager->EventReader());
552 AliFemtoEventReaderStandard *tReaderStandard = dynamic_cast<AliFemtoEventReaderStandard *> (aManager->EventReader());
553 AliFemtoEventReaderKinematicsChain *tReaderKineChain = dynamic_cast<AliFemtoEventReaderKinematicsChain *> (aManager->EventReader());
554 AliFemtoEventReaderKinematicsChainESD *tReaderKineChainESD = dynamic_cast<AliFemtoEventReaderKinematicsChainESD *> (aManager->EventReader());
556 if ((!tReaderESDChain) && (!tReaderESDChainKine) && (!tReaderAODChain) && (!tReaderStandard) && (!tReaderKineChain) && (!tReaderKineChainESD)) {
558 AliWarning("No AliFemto event reader created. Will not run femto analysis.\n");
561 if (tReaderESDChain) SetFemtoReaderESD(tReaderESDChain);
562 if (tReaderESDChainKine) SetFemtoReaderESDKine(tReaderESDChainKine);
563 if (tReaderAODChain) SetFemtoReaderAOD(tReaderAODChain);
564 if (tReaderStandard) SetFemtoReaderStandard(tReaderStandard);
565 if (tReaderKineChain) SetFemtoReaderKinematics(tReaderKineChain);
566 if (tReaderKineChainESD) SetFemtoReaderKinematicsESD(tReaderKineChainESD);