-#define AliAnalysisTaskFemto_cxx\r
+//------------------------------------------------------\r
+// AliAnalysisTaskFemto - A task for the analysis framework\r
+// from the FEMTOSCOPY analysis of PWG2. Creates the necessary\r
+// connection between the ESD or AOD input and the femtoscopic\r
+// code.\r
+// Author: Adam Kisiel, OSU; Adam.Kisiel@cern.ch\r
+//------------------------------------------------------\r
#include "TROOT.h"\r
#include "TChain.h"\r
#include "TH1.h"\r
\r
#include "AliESDEvent.h"\r
\r
+#include "AliFemtoAnalysis.h"\r
#include "AliAnalysisTaskFemto.h"\r
\r
ClassImp(AliAnalysisTaskFemto)\r
\r
//________________________________________________________________________\r
- AliAnalysisTaskFemto::AliAnalysisTaskFemto(const char *name) :AliAnalysisTask(name,""), fESD(0), fHistPt(0) {\r
+ AliAnalysisTaskFemto::AliAnalysisTaskFemto(const char *name): \r
+ AliAnalysisTask(name,""), \r
+ fESD(0), \r
+ fAOD(0),\r
+ fOutputList(0), \r
+ fReaderESD(0x0),\r
+ fReaderAOD(0x0),\r
+ fManager(0x0),\r
+ fAnalysisType(0)\r
+{\r
// Constructor.\r
// Input slot #0 works with an Ntuple\r
DefineInput(0, TChain::Class());\r
- // DefineInput(1, TChain::Class());\r
// Output slot #0 writes into a TH1 container\r
- DefineOutput(0, TH1F::Class());\r
+ DefineOutput(0, TList::Class());\r
}\r
\r
//________________________________________________________________________\r
void AliAnalysisTaskFemto::ConnectInputData(Option_t *) {\r
printf(" ConnectInputData %s\n", GetName());\r
\r
-// char ** address = (char **)GetBranchAddress(0, "ESD");\r
-// cout << "Got tree address " << address << endl;\r
-// if (address) {\r
-// fESD = (AliESDEvent*)(*address);\r
-// }\r
-// else {\r
-// fESD = new AliESDEvent();\r
-// fESD->\r
-// // SetBranchAddress(0, "ESD", &fESD);\r
-// }\r
- TChain *inpchain = (TChain *) GetInputData(0);\r
- fESD = new AliESDEvent();\r
- fESD->ReadFromTree(inpchain);\r
- \r
- \r
-\r
-// char ** addressfriend = (char **)GetBranchAddress(1, "ESDfriend");\r
-// cout << "Got friend address " << addressfriend << endl;\r
-// if (addressfriend) {\r
-// fESDfriend = (AliESDfriend*)(*address);\r
-// }\r
-// else {\r
-// fESDfriend = new AliESDfriend();\r
-// SetBranchAddress(1, "ESDfriend", &fESDfriend);\r
-// }\r
-\r
+ fESD = 0;\r
+ fAOD = 0;\r
+ fAnalysisType = 0;\r
\r
-// TString fileName(chain->GetCurrentFile()->GetName());\r
-// fileName.ReplaceAll("AliESDs", "AliESDfriends");\r
-// cout << "Reading friend " << fileName.Data() << endl;;\r
-// chain->AddFriend("esdFriendTree",fileName.Data());\r
-// SetBranchAddress(0, "ESDfriend",&fESDfriend);\r
+ TTree* tree = dynamic_cast<TTree*> (GetInputData(0));\r
+ if (!tree) {\r
+ Printf("ERROR: Could not read chain from input slot 0");\r
+ } \r
+ else {\r
+ AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
+ \r
+ if(esdH) {\r
+ cout << "Selected ESD analysis" << endl;\r
+ fAnalysisType = 1;\r
+ \r
+ if (!esdH) {\r
+ Printf("ERROR: Could not get ESDInputHandler");\r
+ } \r
+ else {\r
+ fESD = esdH->GetEvent();\r
+ }\r
+ }\r
+ else {\r
+ AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
+ \r
+ if (!aodH) {\r
+ Printf("ERROR: Could not get AODInputHandler");\r
+ } \r
+ else {\r
+ cout << "Selected AOD analysis" << endl;\r
+ fAnalysisType = 2;\r
\r
+ fAOD = aodH->GetEvent();\r
+ }\r
+ }\r
+ if ((!fAOD) && (!fESD)) {\r
+ Printf("Wrong analysis type: Only ESD and AOD types are allowed!");\r
+ }\r
+ }\r
+ \r
+ \r
}\r
\r
//________________________________________________________________________\r
void AliAnalysisTaskFemto::CreateOutputObjects() {\r
- if (!fHistPt) {\r
- fHistPt = new TH1F("fHistPt","This is the Pt distribution",15,0.1,3.1);\r
- fHistPt->SetStats(kTRUE);\r
- fHistPt->GetXaxis()->SetTitle("P_{T} [GeV]");\r
- fHistPt->GetYaxis()->SetTitle("#frac{dN}{dP_{T}}");\r
- fHistPt->GetXaxis()->SetTitleColor(1);\r
- fHistPt->SetMarkerStyle(kFullCircle);\r
- }\r
}\r
\r
//________________________________________________________________________\r
void AliAnalysisTaskFemto::Exec(Option_t *) {\r
- // Task making a pt distribution.\r
- // Get input data\r
- TChain *chain = (TChain*)GetInputData(0);\r
- Long64_t ientry = chain->GetReadEntry();\r
- if (!fESD) return;\r
- // if (!chain->GetCurrentFile())\r
- // return 0;\r
- \r
- printf("Tracks: %d \n",fESD->GetNumberOfTracks());\r
+ // Task making a femtoscopic analysis.\r
+ if (fAnalysisType==1) {\r
+ if (!fESD) {\r
+ Printf("ERROR: fESD not available");\r
+ return;\r
+ }\r
+\r
+ printf("Tracks in ESD: %d \n",fESD->GetNumberOfTracks());\r
\r
- if (fESD->GetNumberOfTracks() > 0) {\r
- cout << "Chain has " << chain->GetListOfFriends() << " friends" << endl;\r
- cout << "First track is " << fESD->GetTrack(0)->Get1P() << " momentum" << endl;\r
- \r
- fReader->SetESDSource(fESD);\r
- // fReader->SetESDfriendSource(*fESDfriend);\r
+ if (fESD->GetNumberOfTracks() >= 0) {\r
\r
- fManager->ProcessEvent();\r
+ if (!fReaderESD) {\r
+ printf("ERROR: No ESD reader for ESD analysis !\n");\r
+ }\r
+ else {\r
+ fReaderESD->SetESDSource(fESD);\r
+ fManager->ProcessEvent();\r
+ }\r
+ } \r
+ fOutputList = fManager->Analysis(0)->GetOutputList();\r
+ PostData(0, fOutputList);\r
+ }\r
\r
- // Post final data. It will be written to a file with option "RECREATE"\r
- PostData(0, fHistPt);\r
+ if (fAnalysisType==2) { \r
+ if (!fAOD) {\r
+ Printf("ERROR: fAOD not available");\r
+ return;\r
+ }\r
+ printf("Tracks in AOD: %d \n",fAOD->GetNumberOfTracks());\r
+ \r
+ if (fAOD->GetNumberOfTracks() > 0) {\r
+ Double_t pxyz[3];\r
+ \r
+ if (!fReaderAOD) {\r
+ printf("ERROR: No AOD reader for AOD analysis! \n");\r
+ }\r
+ else {\r
+ fReaderAOD->SetAODSource(fAOD);\r
+ fManager->ProcessEvent();\r
+ }\r
+ } \r
+ fOutputList = fManager->Analysis(0)->GetOutputList();\r
+ PostData(0, fOutputList);\r
}\r
} \r
\r
//________________________________________________________________________\r
void AliAnalysisTaskFemto::Terminate(Option_t *) {\r
- // Draw some histogram at the end.\r
-// if (!gROOT->IsBatch()) {\r
-// TCanvas *c1 = new TCanvas("c1","Pt",10,10,310,310);\r
-// c1->SetFillColor(10);\r
-// c1->SetHighLightColor(10);\r
- \r
-// c1->cd(1)->SetLeftMargin(0.15);\r
-// c1->cd(1)->SetBottomMargin(0.15); \r
-// c1->cd(1)->SetLogy();\r
-// //fHistPt = (TH1F*)GetOutputData(0);\r
-// if (fHistPt) fHistPt->DrawCopy("E");\r
-// }\r
- \r
+ // Do the final processing\r
}\r
//________________________________________________________________________\r
-void AliAnalysisTaskFemto::SetFemtoReader(AliFemtoEventReaderESDChain *aReader)\r
+void AliAnalysisTaskFemto::SetFemtoReaderESD(AliFemtoEventReaderESDChain *aReader)\r
{\r
- fReader = aReader;\r
+ fReaderESD = aReader;\r
+}\r
+//________________________________________________________________________\r
+void AliAnalysisTaskFemto::SetFemtoReaderAOD(AliFemtoEventReaderAODChain *aReader)\r
+{\r
+ fReaderAOD = aReader;\r
}\r
//________________________________________________________________________\r
void AliAnalysisTaskFemto::SetFemtoManager(AliFemtoManager *aManager)\r
{\r
fManager = aManager;\r
}\r
-//________________________________________________________________________\r
-// void AliAnalysisTaskFemto::SetFriendAddress(AliESDfriend **aFriendAddress)\r
-// {\r
-// fESDfriend = aFriendAddress;\r
-// }\r
\r
+//------------------------------------------------------
+// AliAnalysisTaskFemto - A task for the analysis framework
+// from the FEMTOSCOPY analysis of PWG2. Creates the necessary
+// connection between the ESD or AOD input and the femtoscopic
+// code.
+// Author: Adam Kisiel, OSU; Adam.Kisiel@cern.ch
+//------------------------------------------------------
+#ifndef ALIANALYSISTASKFEMTO_H
+#define ALIANALYSISTASKFEMTO_H
+
#include "TH1.h"
+#include "AliESDInputHandler.h"
+#include "AliAODInputHandler.h"
#include "AliESDEvent.h"
+#include "AliAODEvent.h"
#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"
#include "AliAnalysisDataContainer.h"
#include "AliFemtoEventReaderESDChain.h"
+#include "AliFemtoEventReaderAODChain.h"
#include "AliFemtoManager.h"
class AliAnalysisTaskFemto : public AliAnalysisTask {
public:
- AliAnalysisTaskFemto() : AliAnalysisTask(), fESD(0), fHistPt(0) {}
+ AliAnalysisTaskFemto() : AliAnalysisTask(), fESD(0), fAOD(0), fOutputList(0), fReaderESD(0x0), fReaderAOD(0x0), fManager(0x0), fAnalysisType(0) {}
AliAnalysisTaskFemto(const char *name);
virtual ~AliAnalysisTaskFemto() {}
virtual void Exec(Option_t *option);
virtual void Terminate(Option_t *);
- void SetFemtoReader(AliFemtoEventReaderESDChain *aReader);
+ void SetFemtoReaderESD(AliFemtoEventReaderESDChain *aReader);
+ void SetFemtoReaderAOD(AliFemtoEventReaderAODChain *aReader);
void SetFemtoManager(AliFemtoManager *aManager);
- // void SetFriendAddress(AliESDfriend **aFriendAddress);
private:
- AliESDEvent *fESD; // ESD object
- TH1F *fHistPt; // Pt spectrum
- AliFemtoEventReaderESDChain *fReader; // AliFemto reader for ESD given by the chain
- AliFemtoManager *fManager; // AliFemto top-level manager
-
- ClassDef(AliAnalysisTaskFemto, 1); // example of analysis
+ AliESDEvent *fESD; //! ESD object
+ AliAODEvent *fAOD; //! AOD object
+ TList *fOutputList; // AliFemto results list
+ AliFemtoEventReaderESDChain *fReaderESD; //! AliFemto reader for ESD given by the chain
+ AliFemtoEventReaderAODChain *fReaderAOD; //! AliFemto reader for AOD given by the chain
+ AliFemtoManager *fManager; //! AliFemto top-level manager
+ int fAnalysisType; // Mark ESD of AOD analysis
+
+ ClassDef(AliAnalysisTaskFemto, 2); // example of analysis
};
+
+#endif