1 //------------------------------------------------------------------------------
2 // Implementation of the AliComparisonTask class. It compares properties of the
3 // reconstructed and MC particle tracks under several conditions.
4 // As the input it requires the TTree with AliRecInfo and AliMCInfo branches.
5 // The comparison output histograms are stored
6 // in the comparison objects: AliComparisonRes, AliComparisonEff,
7 // AliComparisonDEdx and AliComparisonDCA. Each of these objects also contains
8 // selection cuts which were used during filling the histograms.
10 // Author: J.Otwinowski 04/02/2008
11 //------------------------------------------------------------------------------
22 #include "AliAnalysisTask.h"
23 #include "AliAnalysisManager.h"
24 #include "AliESDEvent.h"
25 #include "AliESDInputHandler.h"
26 #include "AliESDVertex.h"
27 #include "AliMagFMaps.h"
28 #include "AliTracker.h"
29 #include "AliGeomManager.h"
31 #include "AliMCInfo.h"
32 #include "AliESDRecInfo.h"
33 #include "AliMCInfoCuts.h"
34 #include "AliRecInfoCuts.h"
35 #include "AliComparisonRes.h"
36 #include "AliComparisonEff.h"
37 #include "AliComparisonDEdx.h"
38 #include "AliComparisonDCA.h"
39 #include "AliComparisonTask.h"
43 ClassImp(AliComparisonTask)
45 Int_t AliComparisonTask::evtNumber = 0;
47 //_____________________________________________________________________________
48 AliComparisonTask::AliComparisonTask(const char *name)
49 : AliAnalysisTask(name, "")
64 // Define input and output slots here
65 DefineInput(0, TChain::Class());
66 DefineOutput(0, TList::Class());
68 // set default mag. field
71 // set default geometry
75 //_____________________________________________________________________________
76 AliComparisonTask::~AliComparisonTask()
78 if(fOutput) delete fOutput; fOutput =0;
79 if(fMagFMap) delete fMagFMap; fMagFMap =0;
82 //_____________________________________________________________________________
83 void AliComparisonTask::ConnectInputData(Option_t *)
88 fTree = dynamic_cast<TTree*> (GetInputData(0));
90 Printf("ERROR: Could not read chain from input slot 0");
92 fTree->SetBranchStatus("*",1);
95 if(fTree->GetBranch("MC") && fTree->GetBranch("RC")) {
96 fTree->GetBranch("MC")->SetAddress(&fInfoMC);
97 fTree->GetBranch("RC")->SetAddress(&fInfoRC);
99 Printf("ERROR: Could not get MC and RC branches");
102 // set mag. field map
103 fMagFMap = new AliMagFMaps("Maps","Maps", 2, 1., 10., fMagField);
104 AliTracker::SetFieldMap(fMagFMap,kFALSE);
107 AliGeomManager::LoadGeometry(fGeom);
110 //_____________________________________________________________________________
111 void AliComparisonTask::CreateOutputObjects()
118 if(fCompRes) fOutput->Add(fCompRes);
120 Printf("WARNING: AliComparisonRes is not added to the output");
122 if(fCompEff) fOutput->Add(fCompEff);
124 Printf("WARNING: AliComparisonEff is not added to the output");
126 if(fCompDEdx) fOutput->Add(fCompDEdx);
128 Printf("WARNING: AliComparisonDEdx is not added to the output");
130 if(fCompDCA) fOutput->Add(fCompDCA);
132 Printf("WARNING: AliComparisonDCA is not added to the output");
135 //_____________________________________________________________________________
136 Bool_t AliComparisonTask::ReadEntry(Int_t evt)
138 Long64_t centry = fTree->LoadTree(evt);
139 if(centry < 0) return kFALSE;
141 if(fTree->GetBranch("MC") && fTree->GetBranch("RC")) {
142 fTree->GetBranch("MC")->SetAddress(&fInfoMC);
143 fTree->GetBranch("RC")->SetAddress(&fInfoRC);
145 Printf("ERROR: Could not get MC and RC branches");
148 fTree->GetEntry(evt);
152 //_____________________________________________________________________________
153 void AliComparisonTask::Exec(Option_t *)
156 // Called for each event
158 if (!fInfoMC && !fInfoRC) {
159 Printf("ERROR: fInfoMC && fInfoRC not available");
163 // Process comparison
164 Bool_t status = ReadEntry(evtNumber);
167 if(fCompRes) fCompRes->Exec(fInfoMC,fInfoRC);
168 if(fCompEff) fCompEff->Exec(fInfoMC,fInfoRC);
169 if(fCompDEdx) fCompDEdx->Exec(fInfoMC,fInfoRC);
170 if(fCompDCA) fCompDCA->Exec(fInfoMC,fInfoRC);
173 if( !( evtNumber % 10000) ) {
174 cout << evtNumber << endl;
179 PostData(0, fOutput);
182 //_____________________________________________________________________________
183 void AliComparisonTask::Terminate(Option_t *)
185 // Called once at the end of the event loop
186 cout << "Terminate " << endl;
188 TFile *out = new TFile("Output.root","RECREATE");
191 fOutput = dynamic_cast<TList*> (GetOutputData(0));
193 Printf("ERROR: fOutput not available");
197 fCompRes = dynamic_cast<AliComparisonRes*> (fOutput->FindObject("AliComparisonRes"));
199 Printf("WARNING: AliComparisonRes not available");
203 fCompEff = dynamic_cast<AliComparisonEff*> (fOutput->FindObject("AliComparisonEff"));
205 Printf("WARNING: AliComparisonEff not available");
209 fCompDEdx = dynamic_cast<AliComparisonDEdx*> (fOutput->FindObject("AliComparisonDEdx"));
211 Printf("WARNING: AliComparisonDEdx not available");
215 fCompDCA = dynamic_cast<AliComparisonDCA*> (fOutput->FindObject("AliComparisonDCA"));
217 Printf("WARNING: AliComparisonDCA not available");