]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG1/AliGenInfoTask.cxx
Adding AliGenInfoTask (Marian)
[u/mrichter/AliRoot.git] / PWG1 / AliGenInfoTask.cxx
CommitLineData
5aaab52f 1//\r
2// This class is the task for connecting together \r
3// MC information and the RC information \r
4//\r
5// The task is a wrapper over two components\r
6// AliGenInfoMaker\r
7// AliESDRecInfoMaker.h\r
8\r
9// ROOT includes\r
10#include <TChain.h>\r
11#include <TMath.h>\r
12\r
13// ALIROOT includes\r
14#include <AliAnalysisManager.h>\r
15#include <AliESDInputHandler.h>\r
16#include "AliStack.h"\r
17#include "AliMCEvent.h"\r
18#include "AliMCEventHandler.h"\r
19\r
20#include <AliESD.h>\r
21#include "AliGenInfoTask.h"\r
22#include "AliGenInfoMaker.h"\r
23#include "AliHelix.h"\r
24\r
25// STL includes\r
26#include <iostream>\r
27\r
28using namespace std;\r
29\r
30ClassImp(AliGenInfoTask)\r
31\r
32//________________________________________________________________________\r
33AliGenInfoTask::AliGenInfoTask() : \r
34 AliAnalysisTask(), fGenMaker(0),\r
35 fESD(0), fESDfriend(0), fListOfHists(0)\r
36{\r
37 //\r
38 // Default constructor (should not be used)\r
39 //\r
40 fDebug = 0;\r
41 SetMaxTracks();\r
42}\r
43\r
44//________________________________________________________________________\r
45AliGenInfoTask::AliGenInfoTask(const char *name) : \r
46 AliAnalysisTask(name, "AliGenInfoTask"), \r
47 fGenMaker(0),\r
48 fESD(0), \r
49 fESDfriend(0), \r
50 fListOfHists(0)\r
51{\r
52 //\r
53 // Normal constructor\r
54 //\r
55 fGenMaker = new AliGenInfoMaker;\r
56 fGenMaker->SetIO();\r
57 // Input slot #0 works with a TChain\r
58 DefineInput(0, TChain::Class());\r
59 // Output slot #0 writes into a TList\r
60 DefineOutput(0, TList::Class());\r
61 \r
62 fDebug = 0;\r
63 SetMaxTracks();\r
64}\r
65\r
66//________________________________________________________________________\r
67void AliGenInfoTask::ConnectInputData(Option_t *) \r
68{\r
69 //\r
70 // Connect the input data\r
71 //\r
72 if(fDebug>3)\r
73 cout << "AnalysisTaskTPCCluster::ConnectInputData()" << endl;\r
74\r
75 AliESDInputHandler* esdH = (AliESDInputHandler*) \r
76 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());\r
77 fESD = esdH->GetEvent();\r
78\r
79 if(fESD==0) {\r
80 \r
81 cout << endl << "WARNING: NO ESD event found" << endl << endl;\r
82 } else {\r
83\r
84 fESDfriend = \r
85 (AliESDfriend*)fESD->FindListObject("AliESDfriend"); \r
86 \r
87 if(fESDfriend==0) {\r
88 \r
89 cout << endl << "WARNING: NO ESD friend found" << endl << endl;\r
90 }\r
91 }\r
92}\r
93\r
94//________________________________________________________________________\r
95void AliGenInfoTask::CreateOutputObjects() \r
96{\r
97 //\r
98 // Connect the output objects\r
99 //\r
100 if(fDebug>3)\r
101 cout << "AnalysisTaskTPCCluster::CreateOutputObjects()" << endl;\r
102 \r
103// OpenFile(0);\r
104// fListOfHists = new TList();\r
105 \r
106// hESDTracks = \r
107// new TH1F("hESDTracks", \r
108// "Number of ESD tracks per event; N ESD tracks; Counts", \r
109// TMath::Min(fMaxTracks, 100), 0, fMaxTracks);\r
110// fListOfHists->Add(hESDTracks);\r
111\r
112// hGoodTracks = \r
113// new TH1F("hGoodTracks", \r
114// "Number of Good tracks per event; N good tracks; Counts", \r
115// TMath::Min(fMaxTracks, 100), 0, fMaxTracks);\r
116// fListOfHists->Add(hGoodTracks);\r
117}\r
118\r
119\r
120//________________________________________________________________________\r
121void AliGenInfoTask::Exec(Option_t *) {\r
122 //\r
123 // Execute analysis for current event \r
124 // For the moment I require that mcTruth is there! I am afraid to\r
125 // get out of sync if it is missing for some events since I use the\r
126 // number of MC events for normalisation\r
127 //\r
128\r
129 if(fDebug>3)\r
130 cout << "AliGenInfoTask::Exec()" << endl;\r
131\r
132 if (fESD) {\r
133 AliHelix::SetBz(fESD->GetMagneticField());\r
134 }\r
135 \r
136 // Monte carlo info\r
137 AliMCEventHandler* mcinfo = (AliMCEventHandler*) (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); \r
138 // If MC has been connected \r
139 \r
140 if (!mcinfo){\r
141 cout << "Not MC info\n" << endl;\r
142 }\r
143 fGenMaker->ProcessEvent(mcinfo);\r
144\r
145\r
146\r
147 if(fESD==0 || fESDfriend==0) {\r
148 \r
149 cout << "AliGenInfoTask::Exec(): WARNING: fESD=" << fESD \r
150 << ", fESDfriend=" << fESDfriend << endl;\r
151 // Post final data. It will be written to a file with option "RECREATE"\r
152 PostData(0, fListOfHists);\r
153 return;\r
154 }\r
155 \r
156 fESD->SetESDfriend(fESDfriend);\r
157 const Int_t nESDTracks = fESD->GetNumberOfTracks();\r
158 \r
159 if(fDebug>0){\r
160 cout << " AliGenIfoTask::Exec() Number of ESD tracks: " << nESDTracks << endl;\r
161 }\r
162 if ( nESDTracks != fESDfriend->GetNumberOfTracks() ) {\r
163 AliWarning("Number of Tracks differs from Number of Friend-Tracks!");\r
164 printf("Number of tracks: %i, number of friend tracks: %i \n", nESDTracks, fESDfriend->GetNumberOfTracks());\r
165 return;\r
166 }\r
167// // Post final data. It will be written to a file with option "RECREATE"\r
168 PostData(0, fListOfHists);\r
169} \r
170\r
171//________________________________________________________________________\r
172Int_t AliGenInfoTask::FillTrackHistograms(Int_t nTracks, AliESDtrack* track, AliESDfriendTrack* friendTrack, AliTPCseed* seed) {\r
173 //\r
174 // This method should be overloaded and used to make cuts on tracks\r
175 // and fill histograms. \r
176 // return 0 if track was rejected, 1 if accepted\r
177 //\r
178\r
179 if(nTracks && track && friendTrack && seed)\r
180 return 1;\r
181 else\r
182 return 0;\r
183}\r
184\r
185//________________________________________________________________________\r
186void AliGenInfoTask::Terminate(Option_t *) {\r
187 //\r
188 // Terminate loop\r
189 //\r
190 if(fDebug>3)\r
191 printf("AliGenInfoTask: Terminate() \n"); \r
192 fGenMaker->CloseOutputFile();\r
193}\r