]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/AliComparisonTask.cxx
Adding abstract class for comparison components
[u/mrichter/AliRoot.git] / PWG1 / AliComparisonTask.cxx
index 1d329f34695332bc63bd32318d664b61aabb1aaf..4f06836aec587fbb8195cd71d8b36a58811e7732 100644 (file)
@@ -2,10 +2,10 @@
 // Implementation of the AliComparisonTask class. It compares properties of the \r
 // reconstructed and MC particle tracks under several conditions. \r
 // As the input it requires the TTree with AliRecInfo and AliMCInfo branches. \r
-// The comparison output histograms are stored \r
-// in the comparison objects: AliComparisonRes, AliComparisonEff, \r
-// AliComparisonDEdx and AliComparisonDCA. Each of these objects also contains \r
-// selection cuts which were used during filling the histograms.\r
+// \r
+// The comparison output objects deriving from AliComparisonObject \r
+// (e.g. AliComparisonRes, AliComparisonEff, AliComparisonDEdxA, AliComparisonDCA ...) \r
+// are stored in the Output.root file.\r
 // \r
 // Author: J.Otwinowski 04/02/2008 \r
 //------------------------------------------------------------------------------\r
@@ -36,6 +36,7 @@
 #include "AliComparisonEff.h"\r
 #include "AliComparisonDEdx.h"\r
 #include "AliComparisonDCA.h"\r
+#include "AliComparisonObject.h"\r
 #include "AliComparisonTask.h"\r
 \r
 using namespace std;\r
@@ -50,14 +51,11 @@ AliComparisonTask::AliComparisonTask(const char *name)
   , fTree(0)\r
   , fInfoMC(0)\r
   , fInfoRC(0)\r
-  , fCompRes(0)\r
-  , fCompEff(0)\r
-  , fCompDEdx(0)\r
-  , fCompDCA(0)\r
   , fOutput(0)\r
   , fMagField(0)\r
   , fMagFMap(0)\r
-  , fGeom(0)\r
+  , pitList(0)\r
+  , fCompList(0)\r
 {\r
   // Constructor\r
 \r
@@ -68,8 +66,8 @@ AliComparisonTask::AliComparisonTask(const char *name)
   // set default mag. field\r
   SetMagField();\r
   \r
-  // set default geometry\r
-  SetGeometry();\r
+  // create the list for comparison objects\r
+  fCompList = new TList;\r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -77,6 +75,7 @@ AliComparisonTask::~AliComparisonTask()
 {\r
   if(fOutput)   delete fOutput;  fOutput =0; \r
   if(fMagFMap)  delete fMagFMap;  fMagFMap =0; \r
+  if(fCompList)   delete fCompList;  fCompList =0; \r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -102,9 +101,21 @@ void AliComparisonTask::ConnectInputData(Option_t *)
   // set mag. field map \r
   fMagFMap = new AliMagFMaps("Maps","Maps", 2, 1., 10., fMagField);\r
   AliTracker::SetFieldMap(fMagFMap,kFALSE);\r
+}\r
+\r
+//_____________________________________________________________________________\r
+Bool_t AliComparisonTask::AddComparisonObject(AliComparisonObject *pObj) \r
+{\r
+  // add comparison object to the list\r
+  if(pObj == 0) {\r
+      Printf("ERROR: Could not add comparison object");\r
+         return kFALSE;\r
+  }\r
 \r
-  // set geommetry\r
-  AliGeomManager::LoadGeometry(fGeom);\r
+  // add object to the list\r
+  fCompList->AddLast(pObj);\r
+       \r
+return kTRUE;\r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -113,29 +124,28 @@ void AliComparisonTask::CreateOutputObjects()
   // Create histograms\r
   // Called once\r
 \r
+  // create output list\r
   fOutput = new TList;\r
   fOutput->SetOwner();\r
+  pitList = fOutput->MakeIterator();\r
 \r
-  if(fCompRes) fOutput->Add(fCompRes);\r
-  else \r
-     Printf("WARNING: AliComparisonRes is not added to the output");\r
-\r
-  if(fCompEff) fOutput->Add(fCompEff);\r
-  else \r
-    Printf("WARNING: AliComparisonEff is not added to the output");\r
+  AliComparisonObject *pObj=0;\r
+  Int_t count=0;\r
 \r
-  if(fCompDEdx) fOutput->Add(fCompDEdx);\r
-  else \r
-    Printf("WARNING: AliComparisonDEdx is not added to the output");\r
-\r
-  if(fCompDCA) fOutput->Add(fCompDCA);\r
-  else \r
-     Printf("WARNING: AliComparisonDCA is not added to the output");\r
+  // add comparison objects to the output\r
+  TIterator *pitCompList = fCompList->MakeIterator();\r
+  pitCompList->Reset();\r
+  while(( pObj = (AliComparisonObject *)pitCompList->Next()) != NULL) {\r
+    fOutput->Add(pObj);\r
+       count++;\r
+  }\r
+  Printf("CreateOutputObjects(): Number of output comparison objects: %d \n", count);\r
 }\r
 \r
 //_____________________________________________________________________________\r
 Bool_t AliComparisonTask::ReadEntry(Int_t evt) \r
 {\r
+// Read entry from the tree\r
   Long64_t centry = fTree->LoadTree(evt);\r
   if(centry < 0) return kFALSE;\r
 \r
@@ -156,6 +166,8 @@ void AliComparisonTask::Exec(Option_t *)
   // Main loop\r
   // Called for each event\r
 \r
+  AliComparisonObject *pObj=0;\r
+\r
   if (!fInfoMC && !fInfoRC) {\r
     Printf("ERROR: fInfoMC && fInfoRC not available");\r
     return;\r
@@ -165,10 +177,10 @@ void AliComparisonTask::Exec(Option_t *)
   Bool_t status = ReadEntry(evtNumber);\r
   if(status == kTRUE) \r
   {\r
-     if(fCompRes)  fCompRes->Exec(fInfoMC,fInfoRC);\r
-     if(fCompEff)  fCompEff->Exec(fInfoMC,fInfoRC);\r
-     if(fCompDEdx) fCompDEdx->Exec(fInfoMC,fInfoRC);\r
-     if(fCompDCA)  fCompDCA->Exec(fInfoMC,fInfoRC);\r
+    pitList->Reset();\r
+    while(( pObj = (AliComparisonObject *)pitList->Next()) != NULL) {\r
+       pObj->Exec(fInfoMC,fInfoRC);\r
+    }\r
   }\r
 \r
   if( !( evtNumber % 10000) ) { \r
@@ -184,8 +196,6 @@ void AliComparisonTask::Exec(Option_t *)
 void AliComparisonTask::Terminate(Option_t *) \r
 {\r
   // Called once at the end of the event loop\r
-  cout << "Terminate " << endl;\r
-\r
   TFile *out = new TFile("Output.root","RECREATE");\r
   out->cd();\r
 \r
@@ -195,30 +205,6 @@ void AliComparisonTask::Terminate(Option_t *)
     return;\r
   }\r
 \r
-  fCompRes = dynamic_cast<AliComparisonRes*> (fOutput->FindObject("AliComparisonRes"));\r
-  if (!fCompRes) {\r
-    Printf("WARNING: AliComparisonRes not available");\r
-    return;\r
-  }\r
-\r
-  fCompEff = dynamic_cast<AliComparisonEff*> (fOutput->FindObject("AliComparisonEff"));\r
-  if (!fCompEff) {\r
-    Printf("WARNING: AliComparisonEff not available");\r
-    return;\r
-  }\r
-   \r
-  fCompDEdx = dynamic_cast<AliComparisonDEdx*> (fOutput->FindObject("AliComparisonDEdx"));\r
-  if (!fCompDEdx) {\r
-    Printf("WARNING: AliComparisonDEdx not available");\r
-    return;\r
-  }\r
-\r
-  fCompDCA = dynamic_cast<AliComparisonDCA*> (fOutput->FindObject("AliComparisonDCA"));\r
-  if (!fCompDCA) {\r
-    Printf("WARNING: AliComparisonDCA not available");\r
-    return;\r
-  }\r
-\r
   fOutput->Write();\r
   out->Close();\r
 }\r