1 //------------------------------------------------------------------------------
\r
2 // Implementation of the AliComparisonTask class. It compares properties of the
\r
3 // reconstructed and MC particle tracks under several conditions.
\r
4 // As the input it requires the TTree with AliRecInfo and AliMCInfo branches.
\r
5 // The comparison output histograms are stored
\r
6 // in the comparison objects: AliComparisonRes, AliComparisonEff,
\r
7 // AliComparisonDEdx and AliComparisonDCA. Each of these objects also contains
\r
8 // selection cuts which were used during filling the histograms.
\r
10 // Author: J.Otwinowski 04/02/2008
\r
11 //------------------------------------------------------------------------------
\r
18 #include "TCanvas.h"
\r
22 #include "AliAnalysisTask.h"
\r
23 #include "AliAnalysisManager.h"
\r
24 #include "AliESDEvent.h"
\r
25 #include "AliESDInputHandler.h"
\r
26 #include "AliESDVertex.h"
\r
27 #include "AliMagFMaps.h"
\r
28 #include "AliTracker.h"
\r
29 #include "AliGeomManager.h"
\r
31 #include "AliMCInfo.h"
\r
32 #include "AliESDRecInfo.h"
\r
33 #include "AliMCInfoCuts.h"
\r
34 #include "AliRecInfoCuts.h"
\r
35 #include "AliComparisonRes.h"
\r
36 #include "AliComparisonEff.h"
\r
37 #include "AliComparisonDEdx.h"
\r
38 #include "AliComparisonDCA.h"
\r
39 #include "AliComparisonTask.h"
\r
41 using namespace std;
\r
43 ClassImp(AliComparisonTask)
\r
45 Int_t AliComparisonTask::evtNumber = 0;
\r
47 //_____________________________________________________________________________
\r
48 AliComparisonTask::AliComparisonTask(const char *name)
\r
49 : AliAnalysisTask(name, "")
\r
64 // Define input and output slots here
\r
65 DefineInput(0, TChain::Class());
\r
66 DefineOutput(0, TList::Class());
\r
68 // set default mag. field
\r
71 // set default geometry
\r
75 //_____________________________________________________________________________
\r
76 AliComparisonTask::~AliComparisonTask()
\r
78 if(fOutput) delete fOutput; fOutput =0;
\r
79 if(fMagFMap) delete fMagFMap; fMagFMap =0;
\r
82 //_____________________________________________________________________________
\r
83 void AliComparisonTask::ConnectInputData(Option_t *)
\r
85 // Connect input data
\r
88 fTree = dynamic_cast<TTree*> (GetInputData(0));
\r
90 Printf("ERROR: Could not read chain from input slot 0");
\r
92 fTree->SetBranchStatus("*",1);
\r
95 if(fTree->GetBranch("MC") && fTree->GetBranch("RC")) {
\r
96 fTree->GetBranch("MC")->SetAddress(&fInfoMC);
\r
97 fTree->GetBranch("RC")->SetAddress(&fInfoRC);
\r
99 Printf("ERROR: Could not get MC and RC branches");
\r
102 // set mag. field map
\r
103 fMagFMap = new AliMagFMaps("Maps","Maps", 2, 1., 10., fMagField);
\r
104 AliTracker::SetFieldMap(fMagFMap,kFALSE);
\r
107 AliGeomManager::LoadGeometry(fGeom);
\r
110 //_____________________________________________________________________________
\r
111 void AliComparisonTask::CreateOutputObjects()
\r
113 // Create histograms
\r
116 fOutput = new TList;
\r
117 fOutput->SetOwner();
\r
119 if(fCompRes) fOutput->Add(fCompRes);
\r
121 Printf("WARNING: AliComparisonRes is not added to the output");
\r
123 if(fCompEff) fOutput->Add(fCompEff);
\r
125 Printf("WARNING: AliComparisonEff is not added to the output");
\r
127 if(fCompDEdx) fOutput->Add(fCompDEdx);
\r
129 Printf("WARNING: AliComparisonDEdx is not added to the output");
\r
131 if(fCompDCA) fOutput->Add(fCompDCA);
\r
133 Printf("WARNING: AliComparisonDCA is not added to the output");
\r
136 //_____________________________________________________________________________
\r
137 Bool_t AliComparisonTask::ReadEntry(Int_t evt)
\r
139 Long64_t centry = fTree->LoadTree(evt);
\r
140 if(centry < 0) return kFALSE;
\r
142 if(fTree->GetBranch("MC") && fTree->GetBranch("RC")) {
\r
143 fTree->GetBranch("MC")->SetAddress(&fInfoMC);
\r
144 fTree->GetBranch("RC")->SetAddress(&fInfoRC);
\r
146 Printf("ERROR: Could not get MC and RC branches");
\r
149 fTree->GetEntry(evt);
\r
153 //_____________________________________________________________________________
\r
154 void AliComparisonTask::Exec(Option_t *)
\r
157 // Called for each event
\r
159 if (!fInfoMC && !fInfoRC) {
\r
160 Printf("ERROR: fInfoMC && fInfoRC not available");
\r
164 // Process comparison
\r
165 Bool_t status = ReadEntry(evtNumber);
\r
166 if(status == kTRUE)
\r
168 if(fCompRes) fCompRes->Exec(fInfoMC,fInfoRC);
\r
169 if(fCompEff) fCompEff->Exec(fInfoMC,fInfoRC);
\r
170 if(fCompDEdx) fCompDEdx->Exec(fInfoMC,fInfoRC);
\r
171 if(fCompDCA) fCompDCA->Exec(fInfoMC,fInfoRC);
\r
174 if( !( evtNumber % 10000) ) {
\r
175 cout << evtNumber << endl;
\r
179 // Post output data.
\r
180 PostData(0, fOutput);
\r
183 //_____________________________________________________________________________
\r
184 void AliComparisonTask::Terminate(Option_t *)
\r
186 // Called once at the end of the event loop
\r
187 cout << "Terminate " << endl;
\r
189 TFile *out = new TFile("Output.root","RECREATE");
\r
192 fOutput = dynamic_cast<TList*> (GetOutputData(0));
\r
194 Printf("ERROR: fOutput not available");
\r
198 fCompRes = dynamic_cast<AliComparisonRes*> (fOutput->FindObject("AliComparisonRes"));
\r
200 Printf("WARNING: AliComparisonRes not available");
\r
204 fCompEff = dynamic_cast<AliComparisonEff*> (fOutput->FindObject("AliComparisonEff"));
\r
206 Printf("WARNING: AliComparisonEff not available");
\r
210 fCompDEdx = dynamic_cast<AliComparisonDEdx*> (fOutput->FindObject("AliComparisonDEdx"));
\r
212 Printf("WARNING: AliComparisonDEdx not available");
\r
216 fCompDCA = dynamic_cast<AliComparisonDCA*> (fOutput->FindObject("AliComparisonDCA"));
\r
218 Printf("WARNING: AliComparisonDCA not available");
\r