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(const char *name, const char *aConfigMacro, const char *aConfigParams):
36 AliAnalysisTaskSE(name), //AliAnalysisTask(name,""),
47 fConfigMacro(aConfigMacro),
48 fConfigParams(aConfigParams)
51 // Input slot #0 works with an Ntuple
52 DefineInput(0, TChain::Class());
53 // Output slot #0 writes into a TH1 container
54 DefineOutput(0, TList::Class());
57 //________________________________________________________________________
58 AliAnalysisTaskFemto::AliAnalysisTaskFemto(const char *name, const char *aConfigMacro="ConfigFemtoAnalysis.C"):
59 AliAnalysisTaskSE(name), //AliAnalysisTask(name,""),
70 fConfigMacro(aConfigMacro),
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());
81 AliAnalysisTaskFemto::AliAnalysisTaskFemto(const AliAnalysisTaskFemto& aFemtoTask):
82 AliAnalysisTaskSE(aFemtoTask), //AliAnalysisTask(aFemtoTask),
97 fESD = aFemtoTask.fESD;
98 fESDpid = aFemtoTask.fESDpid;
99 fAOD = aFemtoTask.fAOD;
100 fAODpidUtil = aFemtoTask.fAODpidUtil;
101 fAODheader = aFemtoTask.fAODheader;
102 fStack = aFemtoTask.fStack;
103 fOutputList = aFemtoTask.fOutputList;
104 fReader = aFemtoTask.fReader;
105 fManager = aFemtoTask.fManager;
106 fAnalysisType = aFemtoTask.fAnalysisType;
108 fConfigMacro = aFemtoTask.fConfigMacro;
109 fConfigParams = aFemtoTask.fConfigParams;
114 AliAnalysisTaskFemto& AliAnalysisTaskFemto::operator=(const AliAnalysisTaskFemto& aFemtoTask){
115 // assignment operator
116 if (this == &aFemtoTask)
119 fESD = aFemtoTask.fESD;
120 fESDpid = aFemtoTask.fESDpid;
121 fAOD = aFemtoTask.fAOD;
122 fAODpidUtil = aFemtoTask.fAODpidUtil;
123 fAODheader = aFemtoTask.fAODheader;
124 fStack = aFemtoTask.fStack;
125 fOutputList = aFemtoTask.fOutputList;
126 fReader = aFemtoTask.fReader;
127 fManager = aFemtoTask.fManager;
128 fAnalysisType = aFemtoTask.fAnalysisType;
130 fConfigMacro = aFemtoTask.fConfigMacro;
131 fConfigParams = aFemtoTask.fConfigParams;
136 AliAnalysisTaskFemto::~AliAnalysisTaskFemto()
141 //________________________________________________________________________
142 void AliAnalysisTaskFemto::ConnectInputData(Option_t *) {
143 AliInfo(Form(" ConnectInputData %s\n", GetName()));
152 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
154 AliWarning("Could not read chain from input slot 0");
158 AliFemtoEventReaderESDChain *femtoReader = dynamic_cast<AliFemtoEventReaderESDChain *> (fReader);
159 if ((dynamic_cast<AliFemtoEventReaderESDChain *> (fReader))) {
160 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
163 AliInfo("Selected ESD analysis");
167 // AliWarning("Could not get ESDInputHandler");
170 fESD = esdH->GetEvent();
171 fESDpid = esdH->GetESDpid();
172 femtoReader->SetESDPid(fESDpid);
176 else if ((dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader))) {
177 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
180 AliInfo("Selected ESD analysis");
184 // AliWarning("Could not get ESDInputHandler");
187 fESD = esdH->GetEvent();
188 //fESDpid = esdH->GetESDpid();
189 //femtoReader->SetESDPid(fESDpid);
195 AliFemtoEventReaderESDChainKine *femtoReaderESDKine = dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader);
196 if ((dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader))) {
197 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
200 AliInfo("Selected ESD analysis");
204 // AliWarning("Could not get ESDInputHandler");
207 fESD = esdH->GetEvent();
208 fESDpid = esdH->GetESDpid();
209 femtoReaderESDKine->SetESDPid(fESDpid);
214 // AliFemtoEventReaderKinematicsChain *femtoReaderKine = dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader);
215 if ((dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader))) {
216 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();
240 AliInfo("Has output handler ");
241 if( handler && handler->InheritsFrom("AliAODHandler") ) {
242 AliInfo("Selected AOD analysis");
244 fAOD = ((AliAODHandler*)handler)->GetAOD();
248 AliWarning("Selected AOD reader but no AOD handler found");
252 AliInfo("Selected AOD analysis");
255 fAOD = aodH->GetEvent();
257 fAODpidUtil = aodH->GetAODpidUtil(); //correct way
258 //fAODpidUtil = new AliAODpidUtil(); //not correct way
259 // printf("aodH->GetAODpidUtil(): %x",aodH->GetAODpidUtil());
260 cout<<"AliAnalysisTaskFemto::AodpidUtil:"<<fAODpidUtil<<endl;
261 femtoReaderAOD->SetAODpidUtil(fAODpidUtil);
263 fAODheader = fAOD->GetHeader();
264 femtoReaderAOD->SetAODheader(fAODheader);
269 if ((!fAOD) && (!fESD)) {
270 AliWarning("Wrong analysis type: Only ESD and AOD types are allowed!");
274 //________________________________________________________________________
275 void AliAnalysisTaskFemto::CreateOutputObjects() {
276 AliInfo("Creating Femto Analysis objects\n");
278 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");
280 // sprintf(fcm, "%s++", fConfigMacro);
281 // gROOT->LoadMacro(fcm);
282 gROOT->LoadMacro(fConfigMacro);
283 // fJetFinder = (AliJetFinder*) gInterpreter->ProcessLine("ConfigJetAnalysis()");
285 SetFemtoManager((AliFemtoManager *) gInterpreter->ProcessLine("ConfigFemtoAnalysis()"));
287 SetFemtoManager((AliFemtoManager *) gInterpreter->ProcessLine(Form("ConfigFemtoAnalysis(%s)", fConfigParams.Data())));
290 fOutputList = fManager->Analysis(0)->GetOutputList();
292 for (unsigned int ian = 1; ian<fManager->AnalysisCollection()->size(); ian++) {
293 tOL = fManager->Analysis(ian)->GetOutputList();
295 TIter nextListCf(tOL);
296 while (TObject *obj = nextListCf()) {
297 fOutputList->Add(obj);
303 PostData(0, fOutputList);
306 //________________________________________________________________________
307 void AliAnalysisTaskFemto::Exec(Option_t *) {
308 // Task making a femtoscopic analysis.
310 if (fAnalysisType==1) {
312 AliWarning("fESD not available");
317 AliMCEventHandler* mctruth = (AliMCEventHandler*)
318 ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
320 AliGenHijingEventHeader *hdh = 0;
322 fStack = mctruth->MCEvent()->Stack();
324 AliGenCocktailEventHeader *hd = dynamic_cast<AliGenCocktailEventHeader *> (mctruth->MCEvent()->GenEventHeader());
328 // AliInfo ("Got MC cocktail event header %p\n", (void *) hd);
329 TList *lhd = hd->GetHeaders();
330 // AliInfo ("Got list of headers %d\n", lhd->GetEntries());
332 for (int iterh=0; iterh<lhd->GetEntries(); iterh++)
334 hdh = dynamic_cast<AliGenHijingEventHeader *> (lhd->At(iterh));
335 // AliInfo ("HIJING header at %i is %p\n", iterh, (void *) hdh);
341 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
344 AliWarning("Could not get ESDInputHandler");
348 fESD = esdH->GetEvent();
349 fESDpid = esdH->GetESDpid();
352 AliInfo(Form("Tracks in ESD: %d \n",fESD->GetNumberOfTracks()));
354 if (fESD->GetNumberOfTracks() >= 0) {
357 AliWarning("No ESD reader for ESD analysis !\n");
360 AliFemtoEventReaderESDChain* fesdc = dynamic_cast<AliFemtoEventReaderESDChain *> (fReader);
363 // Process the event with no Kine information
364 fesdc->SetESDSource(fESD);
365 fManager->ProcessEvent();
368 AliFemtoEventReaderKinematicsChain* fkinec = dynamic_cast<AliFemtoEventReaderKinematicsChain *> (fReader);
371 // Process the event with Kine information only
372 fkinec->SetStackSource(fStack);
373 fManager->ProcessEvent();
377 AliFemtoEventReaderESDChainKine* fesdck = dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader);
380 // Process the event with Kine information
381 fesdck->SetESDSource(fESD);
382 fesdck->SetStackSource(fStack);
384 fesdck->SetGenEventHeader(hdh);
385 fManager->ProcessEvent();
387 AliFemtoEventReaderStandard* fstd = dynamic_cast<AliFemtoEventReaderStandard *> (fReader);
390 // Process the event with Kine information
391 fstd->SetESDSource(fESD);
393 fstd->SetStackSource(fStack);
394 fstd->SetGenEventHeader(hdh);
395 fstd->SetInputType(AliFemtoEventReaderStandard::kESDKine);
398 fstd->SetInputType(AliFemtoEventReaderStandard::kESD);
399 fManager->ProcessEvent();
403 // Post the output histogram list
404 PostData(0, fOutputList);
407 if (fAnalysisType==2) {
409 AliWarning("fAOD not available");
414 // AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
417 // AliWarning("Could not get AODInputHandler");
422 // fAOD = aodH->GetEvent();
427 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fOfflineTriggerMask);
428 if(!isSelected) {//cout << "AliAnalysisTaskFemto: is not selected" << endl;
434 AliInfo(Form("Tracks in AOD: %d \n",fAOD->GetNumberOfTracks()));
436 if (fAOD->GetNumberOfTracks() > 0) {
438 AliWarning("No AOD reader for AOD analysis! \n");
441 AliFemtoEventReaderAODChain* faodc = dynamic_cast<AliFemtoEventReaderAODChain *> (fReader);
445 faodc->SetAODSource(fAOD);
446 fManager->ProcessEvent();
448 AliFemtoEventReaderStandard* fstd = dynamic_cast<AliFemtoEventReaderStandard *> (fReader);
452 fstd->SetAODSource(fAOD);
453 fstd->SetInputType(AliFemtoEventReaderStandard::kAOD);
454 fManager->ProcessEvent();
459 // Post the output histogram list
460 PostData(0, fOutputList);
464 //________________________________________________________________________
465 void AliAnalysisTaskFemto::Terminate(Option_t *) {
466 // Do the final processing
471 //________________________________________________________________________
472 void AliAnalysisTaskFemto:: FinishTaskOutput() {
473 // Do the final processing
478 //________________________________________________________________________
479 void AliAnalysisTaskFemto::SetFemtoReaderESD(AliFemtoEventReaderESDChain *aReader)
481 AliInfo("Selecting Femto reader for ESD\n");
484 //________________________________________________________________________
485 void AliAnalysisTaskFemto::SetFemtoReaderESDKine(AliFemtoEventReaderESDChainKine *aReader)
487 AliInfo("Selecting Femto reader for ESD with Kinematics information\n");
490 //________________________________________________________________________
491 void AliAnalysisTaskFemto::SetFemtoReaderAOD(AliFemtoEventReaderAODChain *aReader)
493 AliInfo("Selecting Femto reader for AOD\n");
496 void AliAnalysisTaskFemto::SetFemtoReaderStandard(AliFemtoEventReaderStandard *aReader)
498 AliInfo("Selecting Standard all-purpose Femto reader\n");
501 void AliAnalysisTaskFemto::SetFemtoReaderKinematics(AliFemtoEventReaderKinematicsChain *aReader)
503 printf("Selecting Femto reader for Kinematics (Monte Carlo) information\n");
506 //________________________________________________________________________
507 void AliAnalysisTaskFemto::SetFemtoManager(AliFemtoManager *aManager)
510 AliInfo(Form("Got reader %p\n", (void *) aManager->EventReader()));
511 AliFemtoEventReaderESDChain *tReaderESDChain = dynamic_cast<AliFemtoEventReaderESDChain *> (aManager->EventReader());
512 AliFemtoEventReaderESDChainKine *tReaderESDChainKine = dynamic_cast<AliFemtoEventReaderESDChainKine *> (aManager->EventReader());
513 AliFemtoEventReaderAODChain *tReaderAODChain = dynamic_cast<AliFemtoEventReaderAODChain *> (aManager->EventReader());
514 AliFemtoEventReaderStandard *tReaderStandard = dynamic_cast<AliFemtoEventReaderStandard *> (aManager->EventReader());
515 AliFemtoEventReaderKinematicsChain *tReaderKineChain = dynamic_cast<AliFemtoEventReaderKinematicsChain *> (aManager->EventReader());
517 if ((!tReaderESDChain) && (!tReaderESDChainKine) && (!tReaderAODChain) && (!tReaderStandard) && (!tReaderKineChain)) {
518 AliWarning("No AliFemto event reader created. Will not run femto analysis.\n");
521 if (tReaderESDChain) SetFemtoReaderESD(tReaderESDChain);
522 if (tReaderESDChainKine) SetFemtoReaderESDKine(tReaderESDChainKine);
523 if (tReaderAODChain) SetFemtoReaderAOD(tReaderAODChain);
524 if (tReaderStandard) SetFemtoReaderStandard(tReaderStandard);
525 if (tReaderKineChain) SetFemtoReaderKinematics(tReaderKineChain);