]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/FEMTOSCOPY/AliFemto/AliAnalysisTaskFemto.cxx
Fix macro loading condition
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliAnalysisTaskFemto.cxx
index ab6e30659ae877204a3bdb1474b33aa3a90c754a..bb5511c50944eceeb50571eb85ec0ba7cd30fbdf 100644 (file)
@@ -11,6 +11,7 @@
 #include "TCanvas.h"\r
 #include "TSystem.h"\r
 #include "TFile.h"\r
+#include "TInterpreter.h"\r
 \r
 #include "AliAnalysisTask.h"\r
 \r
@@ -27,28 +28,114 @@ ClassImp(AliAnalysisTaskFemto)
 \r
 // Default name for the setup macro of femto analysis  \r
 // This function MUST be defined in the separate file !!!\r
-extern AliFemtoManager *ConfigFemtoAnalysis();\r
+// extern AliFemtoManager *ConfigFemtoAnalysis();\r
 \r
 //________________________________________________________________________\r
-  AliAnalysisTaskFemto::AliAnalysisTaskFemto(const char *name): \r
+AliAnalysisTaskFemto::AliAnalysisTaskFemto(const char *name, const char *aConfigMacro, const char *aConfigParams):\r
     AliAnalysisTask(name,""), \r
     fESD(0), \r
     fAOD(0),\r
+    fStack(0),\r
     fOutputList(0), \r
     fReader(0x0),\r
     fManager(0x0),\r
-    fAnalysisType(0)\r
+    fAnalysisType(0),\r
+    fConfigMacro(0),\r
+    fConfigParams(0)\r
 {\r
   // Constructor.\r
   // Input slot #0 works with an Ntuple\r
   DefineInput(0, TChain::Class());\r
   // Output slot #0 writes into a TH1 container\r
   DefineOutput(0, TList::Class());\r
+  fConfigMacro = (char *) malloc(sizeof(char) * strlen(aConfigMacro));\r
+  strcpy(fConfigMacro, aConfigMacro);\r
+  fConfigParams = (char *) malloc(sizeof(char) * strlen(aConfigParams));\r
+  strcpy(fConfigParams, aConfigParams);\r
+}\r
+//________________________________________________________________________\r
+AliAnalysisTaskFemto::AliAnalysisTaskFemto(const char *name, const char *aConfigMacro="ConfigFemtoAnalysis.C"): \r
+    AliAnalysisTask(name,""), \r
+    fESD(0), \r
+    fAOD(0),\r
+    fStack(0),\r
+    fOutputList(0), \r
+    fReader(0x0),\r
+    fManager(0x0),\r
+    fAnalysisType(0),\r
+    fConfigMacro(0),\r
+    fConfigParams(0)\r
+{\r
+  // Constructor.\r
+  // Input slot #0 works with an Ntuple\r
+  DefineInput(0, TChain::Class());\r
+  // Output slot #0 writes into a TH1 container\r
+  DefineOutput(0, TList::Class());\r
+  fConfigMacro = (char *) malloc(sizeof(char) * strlen(aConfigMacro));\r
+  strcpy(fConfigMacro, aConfigMacro);\r
+  fConfigParams = (char *) malloc(sizeof(char) * 2);\r
+  strcpy(fConfigParams, "");\r
+}\r
+\r
+AliAnalysisTaskFemto::AliAnalysisTaskFemto(const AliAnalysisTaskFemto& aFemtoTask):\r
+    AliAnalysisTask(aFemtoTask), \r
+    fESD(0), \r
+    fAOD(0),\r
+    fStack(0),\r
+    fOutputList(0), \r
+    fReader(0x0),\r
+    fManager(0x0),\r
+    fAnalysisType(0),\r
+    fConfigMacro(0),\r
+    fConfigParams(0)\r
+{\r
+  // copy constructor\r
+  fESD = aFemtoTask.fESD; \r
+  fAOD = aFemtoTask.fAOD; \r
+  fStack = aFemtoTask.fStack;\r
+  fOutputList = aFemtoTask.fOutputList;   \r
+  fReader = aFemtoTask.fReader;       \r
+  fManager = aFemtoTask.fManager;      \r
+  fAnalysisType = aFemtoTask.fAnalysisType; \r
+  fConfigMacro = (char *) malloc(sizeof(char) * strlen(aFemtoTask.fConfigMacro));\r
+  strcpy(fConfigMacro, aFemtoTask.fConfigMacro);\r
+  fConfigParams = (char *) malloc(sizeof(char) * strlen(aFemtoTask.fConfigParams));\r
+  strcpy(fConfigParams, aFemtoTask.fConfigParams);\r
+}\r
+\r
+\r
+AliAnalysisTaskFemto& AliAnalysisTaskFemto::operator=(const AliAnalysisTaskFemto& aFemtoTask){\r
+  // assignment operator\r
+  if (this == &aFemtoTask)\r
+    return *this;\r
+\r
+  fESD = aFemtoTask.fESD; \r
+  fAOD = aFemtoTask.fAOD; \r
+  fStack = aFemtoTask.fStack;\r
+  fOutputList = aFemtoTask.fOutputList;   \r
+  fReader = aFemtoTask.fReader;       \r
+  fManager = aFemtoTask.fManager;      \r
+  fAnalysisType = aFemtoTask.fAnalysisType; \r
+  if (fConfigMacro) free(fConfigMacro);\r
+  fConfigMacro = (char *) malloc(sizeof(char) * strlen(aFemtoTask.fConfigMacro));\r
+  strcpy(fConfigMacro, aFemtoTask.fConfigMacro);\r
+  if (fConfigParams) free(fConfigParams);\r
+  fConfigParams = (char *) malloc(sizeof(char) * strlen(aFemtoTask.fConfigParams));\r
+  strcpy(fConfigParams, aFemtoTask.fConfigParams);\r
+\r
+  return *this;\r
+}\r
+\r
+AliAnalysisTaskFemto::~AliAnalysisTaskFemto() \r
+{\r
+  if (fConfigMacro) free(fConfigMacro);\r
+  if (fConfigParams) free(fConfigParams);\r
 }\r
 \r
+\r
 //________________________________________________________________________\r
 void AliAnalysisTaskFemto::ConnectInputData(Option_t *) {\r
-  printf("   ConnectInputData %s\n", GetName());\r
+  AliInfo(Form("   ConnectInputData %s\n", GetName()));\r
 \r
   fESD = 0;\r
   fAOD = 0;\r
@@ -56,48 +143,70 @@ void AliAnalysisTaskFemto::ConnectInputData(Option_t *) {
 \r
   TTree* tree = dynamic_cast<TTree*> (GetInputData(0));\r
   if (!tree) {\r
-    Printf("ERROR: Could not read chain from input slot 0");\r
+    AliWarning("Could not read chain from input slot 0");\r
+    return;\r
   } \r
-  else {\r
+\r
+  if ((dynamic_cast<AliFemtoEventReaderESDChain *> (fReader)) ||\r
+      (dynamic_cast<AliFemtoEventReaderESDChainKine *> (fReader))) {\r
     AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
     \r
     if(esdH) {\r
-      cout << "Selected ESD analysis" << endl;\r
+      AliInfo("Selected ESD analysis");\r
       fAnalysisType = 1;\r
       \r
-      if (!esdH) {\r
-       Printf("ERROR: Could not get ESDInputHandler");\r
-      } \r
-      else {\r
+//       if (!esdH) {\r
+//     AliWarning("Could not get ESDInputHandler");\r
+//       } \r
+//       else {\r
        fESD = esdH->GetEvent();\r
-      }\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
+  \r
+  if (dynamic_cast<AliFemtoEventReaderAODChain *> (fReader)) {\r
+    AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
+       \r
+    if (!aodH) {\r
+      TObject *handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();\r
+      AliInfo("Has output handler ");\r
+      if( handler && handler->InheritsFrom("AliAODHandler") ) {\r
+       AliInfo("Selected AOD analysis");\r
 \r
-       fAOD = aodH->GetEvent();\r
+       fAOD = ((AliAODHandler*)handler)->GetAOD();\r
+       fAnalysisType = 2;\r
       }\r
-    }\r
-    if ((!fAOD) && (!fESD)) {\r
-      Printf("Wrong analysis type: Only ESD and AOD types are allowed!");\r
+      else {\r
+       AliWarning("Selected AOD reader but no AOD handler found");\r
+      }\r
+    } \r
+    else {\r
+      AliInfo("Selected AOD analysis");\r
+      fAnalysisType = 2;\r
+      \r
+      fAOD = aodH->GetEvent();\r
     }\r
   }\r
-  \r
-  \r
+\r
+  if ((!fAOD) && (!fESD)) {\r
+    AliWarning("Wrong analysis type: Only ESD and AOD types are allowed!");\r
+  }\r
 }\r
 \r
 //________________________________________________________________________\r
 void AliAnalysisTaskFemto::CreateOutputObjects() {\r
-  printf("Creating Femto Analysis objects\n");\r
+  AliInfo("Creating Femto Analysis objects\n");\r
 \r
-  SetFemtoManager(ConfigFemtoAnalysis());\r
+  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");\r
+  //  char fcm[2000];\r
+//   sprintf(fcm, "%s++", fConfigMacro);\r
+//   gROOT->LoadMacro(fcm);\r
+  gROOT->LoadMacro(fConfigMacro);\r
+  //  fJetFinder = (AliJetFinder*) gInterpreter->ProcessLine("ConfigJetAnalysis()");\r
+  if (!fConfigParams)\r
+    SetFemtoManager((AliFemtoManager *) gInterpreter->ProcessLine("ConfigFemtoAnalysis()"));\r
+  else\r
+    SetFemtoManager((AliFemtoManager *) gInterpreter->ProcessLine(Form("ConfigFemtoAnalysis(%s)", fConfigParams)));\r
 \r
   TList *tOL;\r
   fOutputList = fManager->Analysis(0)->GetOutputList();\r
@@ -112,6 +221,8 @@ void AliAnalysisTaskFemto::CreateOutputObjects() {
 \r
     delete tOL;\r
   }\r
+\r
+  PostData(0, fOutputList);\r
 }\r
 \r
 //________________________________________________________________________\r
@@ -120,7 +231,7 @@ void AliAnalysisTaskFemto::Exec(Option_t *) {
 \r
   if (fAnalysisType==1) {\r
     if (!fESD) {\r
-      Printf("ERROR: fESD not available");\r
+      AliWarning("fESD not available");\r
       return;\r
     }\r
 \r
@@ -128,7 +239,7 @@ void AliAnalysisTaskFemto::Exec(Option_t *) {
     AliMCEventHandler*    mctruth = (AliMCEventHandler*) \r
       ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());\r
     \r
-    AliGenHijingEventHeader *hdh;\r
+    AliGenHijingEventHeader *hdh = 0;\r
     if(mctruth) {\r
       fStack = mctruth->MCEvent()->Stack();\r
 \r
@@ -136,24 +247,35 @@ void AliAnalysisTaskFemto::Exec(Option_t *) {
       \r
       if (hd) {\r
        \r
-       printf ("Got MC cocktail event header %p\n", (void *) hd);\r
+       //      AliInfo ("Got MC cocktail event header %p\n", (void *) hd);\r
        TList *lhd = hd->GetHeaders();\r
-       printf ("Got list of headers %d\n", lhd->GetEntries());\r
+       //      AliInfo ("Got list of headers %d\n", lhd->GetEntries());\r
        \r
        for (int iterh=0; iterh<lhd->GetEntries(); iterh++) \r
          {\r
            hdh = dynamic_cast<AliGenHijingEventHeader *> (lhd->At(iterh));\r
-           printf ("HIJING header at %i is %p\n", iterh, (void *) hdh);\r
+           //      AliInfo ("HIJING header at %i is %p\n", iterh, (void *) hdh);\r
          }\r
       }    \r
     }\r
 \r
-    printf("Tracks in ESD: %d \n",fESD->GetNumberOfTracks());\r
+    // Get ESD\r
+    AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
+    \r
+    if (!esdH) {\r
+      AliWarning("Could not get ESDInputHandler");\r
+      return;\r
+    } \r
+    else {\r
+      fESD = esdH->GetEvent();\r
+    }\r
+\r
+    AliInfo(Form("Tracks in ESD: %d \n",fESD->GetNumberOfTracks()));\r
 \r
     if (fESD->GetNumberOfTracks() >= 0) {\r
     \r
       if (!fReader) {\r
-       printf("ERROR: No ESD reader for ESD analysis !\n");\r
+       AliWarning("No ESD reader for ESD analysis !\n");\r
       }\r
       \r
       AliFemtoEventReaderESDChain* fesdc = dynamic_cast<AliFemtoEventReaderESDChain *> (fReader);\r
@@ -173,22 +295,49 @@ void AliAnalysisTaskFemto::Exec(Option_t *) {
          fesdck->SetGenEventHeader(hdh);\r
          fManager->ProcessEvent();\r
        }\r
+      AliFemtoEventReaderStandard* fstd = dynamic_cast<AliFemtoEventReaderStandard *> (fReader);\r
+      if (fstd) \r
+       {\r
+         // Process the event with Kine information\r
+         fstd->SetESDSource(fESD);\r
+         if (mctruth) {\r
+           fstd->SetStackSource(fStack);\r
+           fstd->SetGenEventHeader(hdh);\r
+           fstd->SetInputType(AliFemtoEventReaderStandard::kESDKine);\r
+         }\r
+         else\r
+           fstd->SetInputType(AliFemtoEventReaderStandard::kESD);\r
+         fManager->ProcessEvent();\r
+       }\r
     } \r
 \r
     // Post the output histogram list\r
     PostData(0, fOutputList);\r
   }\r
-  \r
+\r
   if (fAnalysisType==2) {    \r
     if (!fAOD) {\r
-      Printf("ERROR: fAOD not available");\r
+      AliWarning("fAOD not available");\r
       return;\r
     }\r
-    printf("Tracks in AOD: %d \n",fAOD->GetNumberOfTracks());\r
+\r
+    // Get AOD\r
+//     AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
+      \r
+//     if (!aodH) {\r
+//       AliWarning("Could not get AODInputHandler");\r
+//       return;\r
+//     } \r
+//     else {\r
+\r
+//       fAOD = aodH->GetEvent();\r
+//     }\r
+\r
+    AliInfo(Form("Tracks in AOD: %d \n",fAOD->GetNumberOfTracks()));\r
     \r
     if (fAOD->GetNumberOfTracks() > 0) {\r
       if (!fReader) {\r
-       printf("ERROR: No AOD reader for AOD analysis! \n");\r
+       AliWarning("No AOD reader for AOD analysis! \n");\r
       }\r
       else {\r
        AliFemtoEventReaderAODChain* faodc = dynamic_cast<AliFemtoEventReaderAODChain *> (fReader);\r
@@ -198,6 +347,14 @@ void AliAnalysisTaskFemto::Exec(Option_t *) {
          faodc->SetAODSource(fAOD);\r
          fManager->ProcessEvent();\r
        }\r
+       AliFemtoEventReaderStandard* fstd = dynamic_cast<AliFemtoEventReaderStandard *> (fReader);\r
+\r
+       if (fstd) {\r
+         // Process the event\r
+         fstd->SetAODSource(fAOD);\r
+         fstd->SetInputType(AliFemtoEventReaderStandard::kAOD);\r
+         fManager->ProcessEvent();\r
+       }\r
       }\r
     } \r
 \r
@@ -223,36 +380,43 @@ void AliAnalysisTaskFemto:: FinishTaskOutput() {
 //________________________________________________________________________\r
 void AliAnalysisTaskFemto::SetFemtoReaderESD(AliFemtoEventReaderESDChain *aReader)\r
 {\r
-  printf("Selectring Femto reader for ESD\n");\r
+  AliInfo("Selecting Femto reader for ESD\n");\r
   fReader = aReader;\r
 }\r
 //________________________________________________________________________\r
 void AliAnalysisTaskFemto::SetFemtoReaderESDKine(AliFemtoEventReaderESDChainKine *aReader)\r
 {\r
-  printf("Selectring Femto reader for ESD with Kinematics information\n");\r
+  AliInfo("Selecting Femto reader for ESD with Kinematics information\n");\r
   fReader = aReader;\r
 }\r
 //________________________________________________________________________\r
 void AliAnalysisTaskFemto::SetFemtoReaderAOD(AliFemtoEventReaderAODChain *aReader)\r
 {\r
-  printf("Selecting Femto reader for AOD\n");\r
+  AliInfo("Selecting Femto reader for AOD\n");\r
+  fReader = aReader;\r
+}\r
+void AliAnalysisTaskFemto::SetFemtoReaderStandard(AliFemtoEventReaderStandard *aReader)\r
+{\r
+  AliInfo("Selecting Standard all-purpose Femto reader\n");\r
   fReader = aReader;\r
 }\r
 //________________________________________________________________________\r
 void AliAnalysisTaskFemto::SetFemtoManager(AliFemtoManager *aManager)\r
 {\r
   fManager = aManager;\r
-  printf("Got reader %p\n", (void *) aManager->EventReader());\r
+  AliInfo(Form("Got reader %p\n", (void *) aManager->EventReader()));\r
   AliFemtoEventReaderESDChain     *tReaderESDChain     = dynamic_cast<AliFemtoEventReaderESDChain *> (aManager->EventReader());\r
   AliFemtoEventReaderESDChainKine *tReaderESDChainKine = dynamic_cast<AliFemtoEventReaderESDChainKine *> (aManager->EventReader());\r
   AliFemtoEventReaderAODChain     *tReaderAODChain     = dynamic_cast<AliFemtoEventReaderAODChain *> (aManager->EventReader());\r
+  AliFemtoEventReaderStandard     *tReaderStandard     = dynamic_cast<AliFemtoEventReaderStandard *> (aManager->EventReader());\r
 \r
-  if ((!tReaderESDChain) && (!tReaderESDChainKine) && (!tReaderAODChain)) {\r
-    printf("No AliFemto event reader created. Will not run femto analysis.\n");\r
+  if ((!tReaderESDChain) && (!tReaderESDChainKine) && (!tReaderAODChain) && (!tReaderStandard)) {\r
+    AliWarning("No AliFemto event reader created. Will not run femto analysis.\n");\r
     return;\r
   }\r
   if (tReaderESDChain) SetFemtoReaderESD(tReaderESDChain);\r
   if (tReaderESDChainKine) SetFemtoReaderESDKine(tReaderESDChainKine);\r
   if (tReaderAODChain) SetFemtoReaderAOD(tReaderAODChain);\r
+  if (tReaderStandard) SetFemtoReaderStandard(tReaderStandard);\r
 }\r
 \r