// 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
#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
, 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
// 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
{\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
// 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
// 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
// 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
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
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
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