Updating the AliAnalysisFemtoTask to work with
authorakisiel <akisiel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 27 Feb 2008 13:47:00 +0000 (13:47 +0000)
committerakisiel <akisiel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 27 Feb 2008 13:47:00 +0000 (13:47 +0000)
both the ESD and AOD output

PWG2/FEMTOSCOPY/macros/AliAnalysisTaskFemto.cxx
PWG2/FEMTOSCOPY/macros/AliAnalysisTaskFemto.h

index 869aa66..876989a 100644 (file)
@@ -1,4 +1,10 @@
-#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
index 8b2e7ed..cd8d20e 100644 (file)
@@ -1,17 +1,31 @@
+//------------------------------------------------------
+// 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() {}
   
@@ -20,15 +34,20 @@ class AliAnalysisTaskFemto : public AliAnalysisTask {
   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