-//------------------------------------------------------------------------------
-// Implementation of the AliComparisonTask class. It compares properties of the
-// reconstructed and MC particle tracks under several conditions.
-// As the input it requires the TTree with AliRecInfo and AliMCInfo branches.
-// The comparison output histograms are stored
-// in the comparison objects: AliComparisonRes, AliComparisonEff,
-// AliComparisonDEdx and AliComparisonDCA. Each of these objects also contains
-// selection cuts which were used during filling the histograms.
-//
-// Author: J.Otwinowski 04/02/2008
-//------------------------------------------------------------------------------
-
-#include "iostream"
-
-#include "TChain.h"
-#include "TTree.h"
-#include "TH1F.h"
-#include "TCanvas.h"
-#include "TList.h"
-#include "TFile.h"
-
-#include "AliAnalysisTask.h"
-#include "AliAnalysisManager.h"
-#include "AliESDEvent.h"
-#include "AliESDInputHandler.h"
-#include "AliESDVertex.h"
-#include "AliMagFMaps.h"
-#include "AliTracker.h"
-#include "AliGeomManager.h"
-
-#include "AliMCInfo.h"
-#include "AliESDRecInfo.h"
-#include "AliMCInfoCuts.h"
-#include "AliRecInfoCuts.h"
-#include "AliComparisonRes.h"
-#include "AliComparisonEff.h"
-#include "AliComparisonDEdx.h"
-#include "AliComparisonDCA.h"
-#include "AliComparisonTask.h"
-
-using namespace std;
-
-ClassImp(AliComparisonTask)
-
-Int_t AliComparisonTask::evtNumber = 0;
-
-//_____________________________________________________________________________
-AliComparisonTask::AliComparisonTask(const char *name)
- : AliAnalysisTask(name, "")
- , fTree(0)
- , fInfoMC(0)
- , fInfoRC(0)
- , fCompRes(0)
- , fCompEff(0)
- , fCompDEdx(0)
- , fCompDCA(0)
- , fOutput(0)
- , fMagField(0)
- , fMagFMap(0)
- , fGeom(0)
-{
- // Constructor
-
- // Define input and output slots here
- DefineInput(0, TChain::Class());
- DefineOutput(0, TList::Class());
-
- // set default mag. field
- SetMagField();
-
- // set default geometry
- SetGeometry();
-}
-
-//_____________________________________________________________________________
-AliComparisonTask::~AliComparisonTask()
-{
- if(fOutput) delete fOutput; fOutput =0;
- if(fMagFMap) delete fMagFMap; fMagFMap =0;
-}
-
-//_____________________________________________________________________________
-void AliComparisonTask::ConnectInputData(Option_t *)
-{
- // Connect input data
- // Called once
-
- fTree = dynamic_cast<TTree*> (GetInputData(0));
- if (!fTree) {
- Printf("ERROR: Could not read chain from input slot 0");
- } else {
- fTree->SetBranchStatus("*",1);
- }
-
- if(fTree->GetBranch("MC") && fTree->GetBranch("RC")) {
- fTree->GetBranch("MC")->SetAddress(&fInfoMC);
- fTree->GetBranch("RC")->SetAddress(&fInfoRC);
- } else {
- Printf("ERROR: Could not get MC and RC branches");
- }
-
- // set mag. field map
- fMagFMap = new AliMagFMaps("Maps","Maps", 2, 1., 10., fMagField);
- AliTracker::SetFieldMap(fMagFMap,kFALSE);
-
- // set geommetry
- AliGeomManager::LoadGeometry(fGeom);
-}
-
-//_____________________________________________________________________________
-void AliComparisonTask::CreateOutputObjects()
-{
- // Create histograms
- // Called once
- fOutput = new TList;
- fOutput->SetOwner();
-
- if(fCompRes) fOutput->Add(fCompRes);
- else
- Printf("WARNING: AliComparisonRes is not added to the output");
-
- if(fCompEff) fOutput->Add(fCompEff);
- else
- Printf("WARNING: AliComparisonEff is not added to the output");
-
- if(fCompDEdx) fOutput->Add(fCompDEdx);
- else
- Printf("WARNING: AliComparisonDEdx is not added to the output");
-
- if(fCompDCA) fOutput->Add(fCompDCA);
- else
- Printf("WARNING: AliComparisonDCA is not added to the output");
-}
-
-//_____________________________________________________________________________
-Bool_t AliComparisonTask::ReadEntry(Int_t evt)
-{
- Long64_t centry = fTree->LoadTree(evt);
- if(centry < 0) return kFALSE;
-
- if(fTree->GetBranch("MC") && fTree->GetBranch("RC")) {
- fTree->GetBranch("MC")->SetAddress(&fInfoMC);
- fTree->GetBranch("RC")->SetAddress(&fInfoRC);
- } else {
- Printf("ERROR: Could not get MC and RC branches");
- return kFALSE;
- }
- fTree->GetEntry(evt);
-
-return kTRUE;
-}
-//_____________________________________________________________________________
-void AliComparisonTask::Exec(Option_t *)
-{
- // Main loop
- // Called for each event
-
- if (!fInfoMC && !fInfoRC) {
- Printf("ERROR: fInfoMC && fInfoRC not available");
- return;
- }
-
- // Process comparison
- Bool_t status = ReadEntry(evtNumber);
- if(status == kTRUE)
- {
- if(fCompRes) fCompRes->Exec(fInfoMC,fInfoRC);
- if(fCompEff) fCompEff->Exec(fInfoMC,fInfoRC);
- if(fCompDEdx) fCompDEdx->Exec(fInfoMC,fInfoRC);
- if(fCompDCA) fCompDCA->Exec(fInfoMC,fInfoRC);
- }
-
- if( !( evtNumber % 10000) ) {
- cout << evtNumber << endl;
- }
- evtNumber++;
-
- // Post output data.
- PostData(0, fOutput);
-}
-
-//_____________________________________________________________________________
-void AliComparisonTask::Terminate(Option_t *)
-{
- // Called once at the end of the event loop
- cout << "Terminate " << endl;
-
- TFile *out = new TFile("Output.root","RECREATE");
- out->cd();
-
- fOutput = dynamic_cast<TList*> (GetOutputData(0));
- if (!fOutput) {
- Printf("ERROR: fOutput not available");
- return;
- }
-
- fCompRes = dynamic_cast<AliComparisonRes*> (fOutput->FindObject("AliComparisonRes"));
- if (!fCompRes) {
- Printf("WARNING: AliComparisonRes not available");
- return;
- }
-
- fCompEff = dynamic_cast<AliComparisonEff*> (fOutput->FindObject("AliComparisonEff"));
- if (!fCompEff) {
- Printf("WARNING: AliComparisonEff not available");
- return;
- }
-
- fCompDEdx = dynamic_cast<AliComparisonDEdx*> (fOutput->FindObject("AliComparisonDEdx"));
- if (!fCompDEdx) {
- Printf("WARNING: AliComparisonDEdx not available");
- return;
- }
-
- fCompDCA = dynamic_cast<AliComparisonDCA*> (fOutput->FindObject("AliComparisonDCA"));
- if (!fCompDCA) {
- Printf("WARNING: AliComparisonDCA not available");
- return;
- }
-
- fOutput->Write();
- out->Close();
-}
+/**************************************************************************\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 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
+\r
+#include "iostream"\r
+\r
+#include "TChain.h"\r
+#include "TTree.h"\r
+#include "TH1F.h"\r
+#include "TCanvas.h"\r
+#include "TList.h"\r
+#include "TFile.h"\r
+\r
+#include "AliAnalysisTask.h"\r
+#include "AliAnalysisManager.h"\r
+#include "AliESDEvent.h"\r
+#include "AliESDInputHandler.h"\r
+#include "AliESDVertex.h"\r
+#include "AliMagFMaps.h"\r
+#include "AliTracker.h"\r
+#include "AliGeomManager.h"\r
+\r
+#include "AliMCInfo.h"\r
+#include "AliESDRecInfo.h"\r
+#include "AliMCInfoCuts.h"\r
+#include "AliRecInfoCuts.h"\r
+#include "AliComparisonRes.h"\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::fEvtNumber = 0;\r
+\r
+//_____________________________________________________________________________\r
+AliComparisonTask::AliComparisonTask(const char *name) \r
+ : AliAnalysisTask(name, "")\r
+ , fTree(0)\r
+ , fInfoMC(0)\r
+ , fInfoRC(0)\r
+ , fOutput(0)\r
+ , fPitList(0)\r
+ , fCompList(0)\r
+{\r
+ // Constructor\r
+\r
+ // Define input and output slots here\r
+ DefineInput(0, TChain::Class());\r
+ DefineOutput(0, TList::Class());\r
+\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(fCompList) delete fCompList; fCompList =0; \r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliComparisonTask::ConnectInputData(Option_t *) \r
+{\r
+ // Connect input data \r
+ // Called once\r
+\r
+ fTree = dynamic_cast<TTree*> (GetInputData(0));\r
+ if (!fTree) {\r
+ Printf("ERROR: Could not read chain from input slot 0");\r
+ } else {\r
+ fTree->SetBranchStatus("*",1);\r
+ }\r
+\r
+ if(fTree->GetBranch("MC") && fTree->GetBranch("RC")) {\r
+ fTree->GetBranch("MC")->SetAddress(&fInfoMC);\r
+ fTree->GetBranch("RC")->SetAddress(&fInfoRC);\r
+ } else {\r
+ Printf("ERROR: Could not get MC and RC branches");\r
+ }\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
+ // add object to the list\r
+ fCompList->AddLast(pObj);\r
+ \r
+return kTRUE;\r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliComparisonTask::CreateOutputObjects()\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
+ AliComparisonObject *pObj=0;\r
+ Int_t count=0;\r
+\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
+ if(fTree->GetBranch("MC") && fTree->GetBranch("RC")) {\r
+ fTree->GetBranch("MC")->SetAddress(&fInfoMC);\r
+ fTree->GetBranch("RC")->SetAddress(&fInfoRC);\r
+ } else {\r
+ Printf("ERROR: Could not get MC and RC branches");\r
+ return kFALSE;\r
+ }\r
+ fTree->GetEntry(evt);\r
+\r
+return kTRUE;\r
+}\r
+//_____________________________________________________________________________\r
+void AliComparisonTask::Exec(Option_t *) \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(fEvtNumber);\r
+ if(status == kTRUE) \r
+ {\r
+ fPitList->Reset();\r
+ while(( pObj = (AliComparisonObject *)fPitList->Next()) != NULL) {\r
+ pObj->Exec(fInfoMC,fInfoRC);\r
+ }\r
+ }\r
+\r
+ if( !( fEvtNumber % 10000) ) { \r
+ cout << fEvtNumber << endl;\r
+ }\r
+ fEvtNumber++;\r
+\r
+ // Post output data.\r
+ PostData(0, fOutput);\r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliComparisonTask::Terminate(Option_t *) \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: AliComparisonTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." );\r
+ return;\r
+ }\r
+}\r