]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/AliComparisonTask.cxx
Update of the alignment-data fileting macro including a fix for the access to the...
[u/mrichter/AliRoot.git] / PWG1 / AliComparisonTask.cxx
index 1d329f34695332bc63bd32318d664b61aabb1aaf..eb3bb4381b840b376684aa10f41b7ab3ab28d2d7 100644 (file)
@@ -1,11 +1,28 @@
+/**************************************************************************\r
+* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
+*                                                                        *\r
+* Author: The ALICE Off-line Project.                                    *\r
+* Contributors are mentioned in the code where appropriate.              *\r
+*                                                                        *\r
+* Permission to use, copy, modify and distribute this software and its   *\r
+* documentation strictly for non-commercial purposes is hereby granted   *\r
+* without fee, provided that the above copyright notice appears in all   *\r
+* copies and that both the copyright notice and this permission notice   *\r
+* appear in the supporting documentation. The authors make no claims     *\r
+* about the suitability of this software for any purpose. It is          *\r
+* provided "as is" without express or implied warranty.                  *\r
+**************************************************************************/\r
+\r
 //------------------------------------------------------------------------------\r
 // 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
+// As the input it requires the tree with AliRecInfo and AliMCInfo branches. Such\r
+// tree can be prepared in advance by runing AliGenInfoMaker and then AliRecInfoMaker\r
+// (details in description of these classes).\r
+//\r
+// The comparison output objects deriving from AliComparisonObject \r
+// (e.g. AliComparisonRes, AliComparisonEff, AliComparisonDEdxA, AliComparisonDCA ...) \r
+// are stored in the output file (details in description of these classes).\r
 // \r
 // Author: J.Otwinowski 04/02/2008 \r
 //------------------------------------------------------------------------------\r
@@ -24,7 +41,7 @@
 #include "AliESDEvent.h"\r
 #include "AliESDInputHandler.h"\r
 #include "AliESDVertex.h"\r
-#include "AliMagFMaps.h"\r
+#include "AliMagF.h"\r
 #include "AliTracker.h"\r
 #include "AliGeomManager.h"\r
 \r
 #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
 \r
 ClassImp(AliComparisonTask)\r
 \r
-Int_t AliComparisonTask::evtNumber = 0;\r
+Int_t AliComparisonTask::fEvtNumber = 0;\r
 \r
 //_____________________________________________________________________________\r
 AliComparisonTask::AliComparisonTask(const char *name) \r
@@ -50,14 +68,9 @@ 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
+  , fPitList(0)\r
+  , fCompList(0)\r
 {\r
   // Constructor\r
 \r
@@ -65,18 +78,15 @@ AliComparisonTask::AliComparisonTask(const char *name)
   DefineInput(0, TChain::Class());\r
   DefineOutput(0, TList::Class());\r
 \r
-  // 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
 AliComparisonTask::~AliComparisonTask()\r
 {\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
@@ -98,13 +108,21 @@ void AliComparisonTask::ConnectInputData(Option_t *)
   } else {\r
       Printf("ERROR: Could not get MC and RC branches");\r
   }\r
-  \r
-  // set mag. field map \r
-  fMagFMap = new AliMagFMaps("Maps","Maps", 2, 1., 10., fMagField);\r
-  AliTracker::SetFieldMap(fMagFMap,kFALSE);\r
+}\r
 \r
-  // set geommetry\r
-  AliGeomManager::LoadGeometry(fGeom);\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
+  // add object to the list\r
+  fCompList->AddLast(pObj);\r
+       \r
+return kTRUE;\r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -113,29 +131,28 @@ void AliComparisonTask::CreateOutputObjects()
   // Create histograms\r
   // Called once\r
 \r
+  // create output list\r
   fOutput = new TList;\r
   fOutput->SetOwner();\r
+  fPitList = 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
-\r
-  if(fCompDEdx) fOutput->Add(fCompDEdx);\r
-  else \r
-    Printf("WARNING: AliComparisonDEdx is not added to the output");\r
+  AliComparisonObject *pObj=0;\r
+  Int_t count=0;\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,25 +173,27 @@ 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
   }\r
 \r
   // Process comparison\r
-  Bool_t status = ReadEntry(evtNumber);\r
+  Bool_t status = ReadEntry(fEvtNumber);\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
+    fPitList->Reset();\r
+    while(( pObj = (AliComparisonObject *)fPitList->Next()) != NULL) {\r
+       pObj->Exec(fInfoMC,fInfoRC);\r
+    }\r
   }\r
 \r
-  if( !( evtNumber % 10000) ) { \r
-    cout << evtNumber << endl;\r
+  if( !( fEvtNumber % 10000) ) { \r
+    cout << fEvtNumber << endl;\r
   }\r
-  evtNumber++;\r
+  fEvtNumber++;\r
 \r
   // Post output data.\r
   PostData(0, fOutput);\r
@@ -183,42 +202,12 @@ void AliComparisonTask::Exec(Option_t *)
 //_____________________________________________________________________________\r
 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
+  // Called one at the end \r
+  \r
+  // check output data\r
   fOutput = dynamic_cast<TList*> (GetOutputData(0));\r
   if (!fOutput) {\r
-    Printf("ERROR: fOutput not available");\r
-    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
+    Printf("ERROR: AliComparisonTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." );\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