]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/AliComparisonTask.cxx
The original random number routines are commented out, the ones in AliDpmJetRndm...
[u/mrichter/AliRoot.git] / PWG1 / AliComparisonTask.cxx
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 // \r
6 // The comparison output objects deriving from AliComparisonObject \r
7 // (e.g. AliComparisonRes, AliComparisonEff, AliComparisonDEdxA, AliComparisonDCA ...) \r
8 // are stored in the Output.root file.\r
9 // \r
10 // Author: J.Otwinowski 04/02/2008 \r
11 //------------------------------------------------------------------------------\r
12 \r
13 #include "iostream"\r
14 \r
15 #include "TChain.h"\r
16 #include "TTree.h"\r
17 #include "TH1F.h"\r
18 #include "TCanvas.h"\r
19 #include "TList.h"\r
20 #include "TFile.h"\r
21 \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
30 \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 "AliComparisonObject.h"\r
40 #include "AliComparisonTask.h"\r
41 \r
42 using namespace std;\r
43 \r
44 ClassImp(AliComparisonTask)\r
45 \r
46 Int_t AliComparisonTask::evtNumber = 0;\r
47 \r
48 //_____________________________________________________________________________\r
49 AliComparisonTask::AliComparisonTask(const char *name) \r
50   : AliAnalysisTask(name, "")\r
51   , fTree(0)\r
52   , fInfoMC(0)\r
53   , fInfoRC(0)\r
54   , fOutput(0)\r
55   , fMagField(0)\r
56   , fMagFMap(0)\r
57   , pitList(0)\r
58   , fCompList(0)\r
59 {\r
60   // Constructor\r
61 \r
62   // Define input and output slots here\r
63   DefineInput(0, TChain::Class());\r
64   DefineOutput(0, TList::Class());\r
65 \r
66   // set default mag. field\r
67   SetMagField();\r
68   \r
69   // create the list for comparison objects\r
70   fCompList = new TList;\r
71 }\r
72 \r
73 //_____________________________________________________________________________\r
74 AliComparisonTask::~AliComparisonTask()\r
75 {\r
76   if(fOutput)   delete fOutput;  fOutput =0; \r
77   if(fMagFMap)  delete fMagFMap;  fMagFMap =0; \r
78   if(fCompList)   delete fCompList;  fCompList =0; \r
79 }\r
80 \r
81 //_____________________________________________________________________________\r
82 void AliComparisonTask::ConnectInputData(Option_t *) \r
83 {\r
84   // Connect input data \r
85   // Called once\r
86 \r
87   fTree = dynamic_cast<TTree*> (GetInputData(0));\r
88   if (!fTree) {\r
89     Printf("ERROR: Could not read chain from input slot 0");\r
90   } else {\r
91     fTree->SetBranchStatus("*",1);\r
92   }\r
93 \r
94   if(fTree->GetBranch("MC") &&  fTree->GetBranch("RC")) {\r
95     fTree->GetBranch("MC")->SetAddress(&fInfoMC);\r
96     fTree->GetBranch("RC")->SetAddress(&fInfoRC);\r
97   } else {\r
98       Printf("ERROR: Could not get MC and RC branches");\r
99   }\r
100   \r
101   // set mag. field map \r
102   fMagFMap = new AliMagFMaps("Maps","Maps", 2, 1., 10., fMagField);\r
103   AliTracker::SetFieldMap(fMagFMap,kFALSE);\r
104 }\r
105 \r
106 //_____________________________________________________________________________\r
107 Bool_t AliComparisonTask::AddComparisonObject(AliComparisonObject *pObj) \r
108 {\r
109   // add comparison object to the list\r
110   if(pObj == 0) {\r
111       Printf("ERROR: Could not add comparison object");\r
112           return kFALSE;\r
113   }\r
114 \r
115   // add object to the list\r
116   fCompList->AddLast(pObj);\r
117        \r
118 return kTRUE;\r
119 }\r
120 \r
121 //_____________________________________________________________________________\r
122 void AliComparisonTask::CreateOutputObjects()\r
123 {\r
124   // Create histograms\r
125   // Called once\r
126 \r
127   // create output list\r
128   fOutput = new TList;\r
129   fOutput->SetOwner();\r
130   pitList = fOutput->MakeIterator();\r
131 \r
132   AliComparisonObject *pObj=0;\r
133   Int_t count=0;\r
134 \r
135   // add comparison objects to the output\r
136   TIterator *pitCompList = fCompList->MakeIterator();\r
137   pitCompList->Reset();\r
138   while(( pObj = (AliComparisonObject *)pitCompList->Next()) != NULL) {\r
139     fOutput->Add(pObj);\r
140         count++;\r
141   }\r
142   Printf("CreateOutputObjects(): Number of output comparison objects: %d \n", count);\r
143 }\r
144 \r
145 //_____________________________________________________________________________\r
146 Bool_t AliComparisonTask::ReadEntry(Int_t evt) \r
147 {\r
148 // Read entry from the tree\r
149   Long64_t centry = fTree->LoadTree(evt);\r
150   if(centry < 0) return kFALSE;\r
151 \r
152   if(fTree->GetBranch("MC") &&  fTree->GetBranch("RC")) {\r
153     fTree->GetBranch("MC")->SetAddress(&fInfoMC);\r
154     fTree->GetBranch("RC")->SetAddress(&fInfoRC);\r
155   } else {\r
156       Printf("ERROR: Could not get MC and RC branches");\r
157           return kFALSE;\r
158   }\r
159   fTree->GetEntry(evt);\r
160 \r
161 return kTRUE;\r
162 }\r
163 //_____________________________________________________________________________\r
164 void AliComparisonTask::Exec(Option_t *) \r
165 {\r
166   // Main loop\r
167   // Called for each event\r
168 \r
169   AliComparisonObject *pObj=0;\r
170 \r
171   if (!fInfoMC && !fInfoRC) {\r
172     Printf("ERROR: fInfoMC && fInfoRC not available");\r
173     return;\r
174   }\r
175 \r
176   // Process comparison\r
177   Bool_t status = ReadEntry(evtNumber);\r
178   if(status == kTRUE) \r
179   {\r
180     pitList->Reset();\r
181     while(( pObj = (AliComparisonObject *)pitList->Next()) != NULL) {\r
182        pObj->Exec(fInfoMC,fInfoRC);\r
183     }\r
184   }\r
185 \r
186   if( !( evtNumber % 10000) ) { \r
187     cout << evtNumber << endl;\r
188   }\r
189   evtNumber++;\r
190 \r
191   // Post output data.\r
192   PostData(0, fOutput);\r
193 }\r
194 \r
195 //_____________________________________________________________________________\r
196 void AliComparisonTask::Terminate(Option_t *) \r
197 {\r
198   // Called once at the end of the event loop\r
199   TFile *out = new TFile("Output.root","RECREATE");\r
200   out->cd();\r
201 \r
202   fOutput = dynamic_cast<TList*> (GetOutputData(0));\r
203   if (!fOutput) {\r
204     Printf("ERROR: fOutput not available");\r
205     return;\r
206   }\r
207 \r
208   fOutput->Write();\r
209   out->Close();\r
210 }\r