121a60bd |
1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
3 | * * |
4 | * Author: The ALICE Off-line Project. * |
5 | * Contributors are mentioned in the code where appropriate. * |
6 | * * |
7 | * Permission to use, copy, modify and distribute this software and its * |
8 | * documentation strictly for non-commercial purposes is hereby granted * |
9 | * without fee, provided that the above copyright notice appears in all * |
10 | * copies and that both the copyright notice and this permission notice * |
11 | * appear in the supporting documentation. The authors make no claims * |
12 | * about the suitability of this software for any purpose. It is * |
13 | * provided "as is" without express or implied warranty. * |
14 | **************************************************************************/ |
15 | |
16 | /* $Id$ */ |
17 | |
18 | /////////////////////////////////////////////////////////////////////////////// |
19 | // // |
20 | // class for ITS reconstruction // |
21 | // // |
22 | /////////////////////////////////////////////////////////////////////////////// |
23 | |
e62c1aea |
24 | #include "Riostream.h" |
121a60bd |
25 | #include "AliITSReconstructor.h" |
00a7cc50 |
26 | #include "AliRun.h" |
121a60bd |
27 | #include "AliRunLoader.h" |
113c12f1 |
28 | #include "AliRawReader.h" |
00a7cc50 |
29 | #include "AliITSDetTypeRec.h" |
7d62fb64 |
30 | #include "AliITSLoader.h" |
e43c066c |
31 | #include "AliITStrackerMI.h" |
c0342e67 |
32 | #include "AliITStrackerV2.h" |
121a60bd |
33 | #include "AliITStrackerSA.h" |
34 | #include "AliITSVertexerIons.h" |
35 | #include "AliITSVertexerFast.h" |
36 | #include "AliITSVertexerPPZ.h" |
37 | #include "AliITSVertexerZ.h" |
38 | #include "AliESD.h" |
39 | #include "AliITSpidESD.h" |
e62c1aea |
40 | #include "AliITSpidESD1.h" |
41 | #include "AliITSpidESD2.h" |
023ae34b |
42 | #include "AliITSInitGeometry.h" |
121a60bd |
43 | |
44 | ClassImp(AliITSReconstructor) |
45 | |
e62c1aea |
46 | //___________________________________________________________________________ |
94631b2f |
47 | AliITSReconstructor::AliITSReconstructor() : AliReconstructor(), |
48 | fItsPID(0) |
49 | { |
e62c1aea |
50 | // Default constructor |
e62c1aea |
51 | } |
52 | //___________________________________________________________________________ |
53 | AliITSReconstructor::~AliITSReconstructor(){ |
54 | // destructor |
55 | delete fItsPID; |
56 | } |
57 | //______________________________________________________________________ |
94631b2f |
58 | AliITSReconstructor::AliITSReconstructor(const AliITSReconstructor &ob) :AliReconstructor(ob), |
59 | fItsPID(ob.fItsPID) |
60 | { |
e62c1aea |
61 | // Copy constructor |
e62c1aea |
62 | } |
63 | |
64 | //______________________________________________________________________ |
94631b2f |
65 | AliITSReconstructor& AliITSReconstructor::operator=(const AliITSReconstructor& ob ){ |
e62c1aea |
66 | // Assignment operator |
94631b2f |
67 | this->~AliITSReconstructor(); |
68 | new(this) AliITSReconstructor(ob); |
e62c1aea |
69 | return *this; |
70 | } |
023ae34b |
71 | //______________________________________________________________________ |
94631b2f |
72 | void AliITSReconstructor::Init(AliRunLoader *runLoader) const{ |
023ae34b |
73 | // Initalize this constructor bet getting/creating the objects |
74 | // nesseary for a proper ITS reconstruction. |
75 | // Inputs: |
76 | // AliRunLoader *runLoader Pointer to the run loader to allow |
77 | // the getting of files/folders data |
78 | // needed to do reconstruction |
79 | // Output: |
80 | // none. |
81 | // Return: |
82 | // none. |
00a7cc50 |
83 | |
108bd0fe |
84 | AliITSInitGeometry initgeom; |
85 | AliITSgeom *geom = initgeom.CreateAliITSgeom(); |
86 | AliInfo(Form("Geometry name: %s",(initgeom.GetGeometryName()).Data())); |
023ae34b |
87 | AliITSLoader* loader = static_cast<AliITSLoader*> |
88 | (runLoader->GetLoader("ITSLoader")); |
89 | if (!loader) { |
90 | Error("Init", "ITS loader not found"); |
91 | return; |
92 | } |
93 | loader->SetITSgeom(geom); |
94 | return; |
95 | } |
121a60bd |
96 | //_____________________________________________________________________________ |
97 | void AliITSReconstructor::Reconstruct(AliRunLoader* runLoader) const |
98 | { |
99 | // reconstruct clusters |
100 | |
7d62fb64 |
101 | |
8e50d897 |
102 | AliITSLoader* loader = static_cast<AliITSLoader*>(runLoader->GetLoader("ITSLoader")); |
121a60bd |
103 | if (!loader) { |
104 | Error("Reconstruct", "ITS loader not found"); |
105 | return; |
106 | } |
8e50d897 |
107 | AliITSDetTypeRec* rec = new AliITSDetTypeRec(loader); |
00a7cc50 |
108 | rec->SetDefaults(); |
109 | |
121a60bd |
110 | loader->LoadRecPoints("recreate"); |
111 | loader->LoadDigits("read"); |
112 | runLoader->LoadKinematics(); |
00a7cc50 |
113 | TString option = GetOption(); |
114 | Bool_t clusfinder=kTRUE; // Default: V2 cluster finder |
115 | if(option.Contains("OrigCF"))clusfinder=kFALSE; |
121a60bd |
116 | |
121a60bd |
117 | Int_t nEvents = runLoader->GetNumberOfEvents(); |
118 | |
119 | for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) { |
120 | runLoader->GetEvent(iEvent); |
00a7cc50 |
121 | if(loader->TreeR()==0x0) loader->MakeTree("R"); |
122 | rec->MakeBranch("R"); |
123 | rec->SetTreeAddress(); |
124 | rec->DigitsToRecPoints(iEvent,0,"All",clusfinder); |
121a60bd |
125 | } |
126 | |
127 | loader->UnloadRecPoints(); |
128 | loader->UnloadDigits(); |
129 | runLoader->UnloadKinematics(); |
130 | } |
131 | |
00a7cc50 |
132 | //_________________________________________________________________ |
133 | void AliITSReconstructor::Reconstruct(AliRunLoader* runLoader, |
134 | AliRawReader* rawReader) const |
113c12f1 |
135 | { |
00a7cc50 |
136 | // reconstruct clusters |
113c12f1 |
137 | |
00a7cc50 |
138 | |
8e50d897 |
139 | AliITSLoader* loader = static_cast<AliITSLoader*>(runLoader->GetLoader("ITSLoader")); |
113c12f1 |
140 | if (!loader) { |
141 | Error("Reconstruct", "ITS loader not found"); |
142 | return; |
143 | } |
00a7cc50 |
144 | |
8e50d897 |
145 | AliITSDetTypeRec* rec = new AliITSDetTypeRec(loader); |
00a7cc50 |
146 | rec->SetDefaults(); |
147 | rec->SetDefaultClusterFindersV2(kTRUE); |
113c12f1 |
148 | |
00a7cc50 |
149 | loader->LoadRecPoints("recreate"); |
113c12f1 |
150 | |
151 | Int_t iEvent = 0; |
113c12f1 |
152 | |
00a7cc50 |
153 | while(rawReader->NextEvent()) { |
154 | runLoader->GetEvent(iEvent++); |
155 | if(loader->TreeR()==0x0) loader->MakeTree("R"); |
156 | rec->DigitsToRecPoints(rawReader); |
113c12f1 |
157 | } |
158 | |
159 | loader->UnloadRecPoints(); |
160 | } |
161 | |
121a60bd |
162 | //_____________________________________________________________________________ |
e62c1aea |
163 | AliTracker* AliITSReconstructor::CreateTracker(AliRunLoader* runLoader)const |
121a60bd |
164 | { |
165 | // create a ITS tracker |
166 | |
7d62fb64 |
167 | |
e43c066c |
168 | TString selectedTracker = GetOption(); |
e62c1aea |
169 | AliTracker* tracker; |
170 | if (selectedTracker.Contains("MI")) { |
e341247d |
171 | tracker = new AliITStrackerMI(0); |
c0342e67 |
172 | } |
173 | else if (selectedTracker.Contains("V2")) { |
174 | tracker = new AliITStrackerV2(0); |
e62c1aea |
175 | } |
176 | else { |
cc088660 |
177 | tracker = new AliITStrackerSA(0); // inherits from AliITStrackerMI |
1966f03c |
178 | AliITStrackerSA *sat=(AliITStrackerSA*)tracker; |
179 | if(selectedTracker.Contains("onlyITS"))sat->SetSAFlag(kTRUE); |
180 | if(sat->GetSAFlag())AliDebug(1,"Tracking Performed in ITS only\n"); |
e62c1aea |
181 | } |
7d62fb64 |
182 | |
e62c1aea |
183 | TString selectedPIDmethod = GetOption(); |
184 | AliITSLoader *loader = (AliITSLoader*)runLoader->GetLoader("ITSLoader"); |
185 | if (!loader) { |
186 | Error("CreateTracker", "ITS loader not found"); |
187 | } |
188 | if(selectedPIDmethod.Contains("LandauFitPID")){ |
189 | loader->AdoptITSpid(new AliITSpidESD2((AliITStrackerMI*)tracker,loader)); |
190 | } |
191 | else{ |
192 | Double_t parITS[] = {34., 0.15, 10.}; |
193 | loader->AdoptITSpid(new AliITSpidESD1(parITS)); |
194 | } |
195 | return tracker; |
7d62fb64 |
196 | |
121a60bd |
197 | } |
198 | |
199 | //_____________________________________________________________________________ |
200 | AliVertexer* AliITSReconstructor::CreateVertexer(AliRunLoader* /*runLoader*/) const |
201 | { |
202 | // create a ITS vertexer |
203 | |
f4d5a8d1 |
204 | TString selectedVertexer = GetOption(); |
121a60bd |
205 | if(selectedVertexer.Contains("ions") || selectedVertexer.Contains("IONS")){ |
206 | Info("CreateVertexer","a AliITSVertexerIons object has been selected\n"); |
207 | return new AliITSVertexerIons("null"); |
208 | } |
209 | if(selectedVertexer.Contains("smear") || selectedVertexer.Contains("SMEAR")){ |
210 | Double_t smear[3]={0.005,0.005,0.01}; |
211 | Info("CreateVertexer","a AliITSVertexerFast object has been selected\n"); |
212 | return new AliITSVertexerFast(smear); |
213 | } |
214 | if(selectedVertexer.Contains("ppz") || selectedVertexer.Contains("PPZ")){ |
215 | Info("CreateVertexer","a AliITSVertexerPPZ object has been selected\n"); |
216 | return new AliITSVertexerPPZ("null"); |
217 | } |
218 | // by default an AliITSVertexerZ object is instatiated |
219 | Info("CreateVertexer","a AliITSVertexerZ object has been selected\n"); |
220 | return new AliITSVertexerZ("null"); |
221 | } |
222 | |
223 | //_____________________________________________________________________________ |
e62c1aea |
224 | void AliITSReconstructor::FillESD(AliRunLoader* runLoader, |
121a60bd |
225 | AliESD* esd) const |
226 | { |
e62c1aea |
227 | // make PID, find V0s and cascade |
228 | AliITSLoader *loader = (AliITSLoader*)runLoader->GetLoader("ITSLoader"); |
229 | AliITSpidESD *pidESD = 0; |
230 | TString selectedPIDmethod = GetOption(); |
231 | if(selectedPIDmethod.Contains("LandauFitPID")){ |
149c4c59 |
232 | Info("FillESD","ITS LandauFitPID option has been selected\n"); |
e62c1aea |
233 | pidESD=loader->GetITSpid(); |
234 | } |
235 | else{ |
149c4c59 |
236 | Info("FillESD","ITS default PID\n"); |
e62c1aea |
237 | pidESD=loader->GetITSpid(); |
238 | } |
239 | if(pidESD!=0){ |
240 | pidESD->MakePID(esd); |
241 | } |
242 | else { |
243 | Error("FillESD","!! cannot do the PID !!\n"); |
244 | } |
121a60bd |
245 | } |
246 | |
247 | |
248 | //_____________________________________________________________________________ |
249 | AliITSgeom* AliITSReconstructor::GetITSgeom(AliRunLoader* runLoader) const |
250 | { |
251 | // get the ITS geometry |
252 | |
253 | if (!runLoader->GetAliRun()) runLoader->LoadgAlice(); |
254 | if (!runLoader->GetAliRun()) { |
255 | Error("GetITSgeom", "couldn't get AliRun object"); |
256 | return NULL; |
257 | } |
8e50d897 |
258 | AliITSLoader *loader = (AliITSLoader*)runLoader->GetLoader("ITSLoader"); |
259 | AliITSgeom* geom = (AliITSgeom*)loader->GetITSgeom(); |
7d62fb64 |
260 | if(!geom){ |
261 | Error("GetITSgeom","no ITS geometry available"); |
121a60bd |
262 | return NULL; |
263 | } |
7d62fb64 |
264 | |
265 | return geom; |
121a60bd |
266 | } |