+/**************************************************************************\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
#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
, 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
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
} 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
// 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
// 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
//_____________________________________________________________________________\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