]>
Commit | Line | Data |
---|---|---|
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 | //*-- Author: Gines Martinez & Yves Schutz (SUBATECH) | |
21 | //*-- Compleetely redesigned by Dmitri Peressounko (SUBATECH & RRC KI) March 2001 | |
22 | ///////////////////////////////////////////////////////////////////////////////////// | |
23 | // Wrapping class for reconstruction. Allows to produce reconstruction from | |
24 | // different steps: from previously produced hits,sdigits, etc. Each new reconstruction | |
25 | // flow (e.g. digits, made from them RecPoints, subsequently made TrackSegments, | |
26 | // subsequently made RecParticles) are distinguished by the title of created branches. One can | |
27 | // use this title as a comment, see use case below. | |
28 | // Thanks to getters, one can set | |
29 | // parameters to reconstruction briks. The full set of parameters is saved in the | |
30 | // corresponding branch: e.g. parameters of clusterizer are stored in branch | |
31 | // TreeR::AliPHOSClusterizer with the same title as the branch containing the RecPoints. // TTree does not support overwriting, therefore one can not produce several | |
32 | // branches with the same names and titles - use different titles. | |
33 | // | |
34 | // Use case: | |
35 | // | |
36 | // root [0] AliPHOSReconstructioner * r = new AliPHOSReconstructioner("galice.root") | |
37 | // // Set the header file | |
38 | // root [1] r->ExecuteTask() | |
39 | // // Make full chain of reconstruction | |
40 | // | |
41 | // // One can specify the title for each branch | |
42 | // root [2] r->SetBranchFileName("RecPoints","RecPoints1") ; | |
43 | // | |
44 | // // One can change parameters of reconstruction algorithms | |
45 | // root [3] r->GetClusterizer()->SetEmcLocalMaxCut(0.02) | |
46 | // | |
47 | // // One can specify the starting point of the reconstruction and title of all | |
48 | // // branches produced in this pass | |
49 | // root [4] r->StartFrom("AliPHOSClusterizer","Local max cut 0.02") | |
50 | // // means that will use already generated Digits and produce only RecPoints, | |
51 | // // TS and RecParticles | |
52 | // | |
53 | // // And finally one can call ExecuteTask() with the following options | |
54 | // root [5] r->ExecuteTask("debug all timing") | |
55 | // // deb - prints the numbers of RecPoints, TrackSegments, RecParticles | |
56 | // // deb all - prints in addition list of RecPoints, TrackSegments, RecParticles | |
57 | // // timing - prints benchmarking results | |
58 | /////////////////////////////////////////////////////////////////////////////////////////////////// | |
59 | ||
60 | // --- ROOT system --- | |
61 | ||
62 | // --- Standard library --- | |
63 | ||
64 | // --- AliRoot header files --- | |
65 | #include "AliESD.h" | |
66 | #include "AliESDCaloTrack.h" | |
67 | #include "AliPHOSReconstructioner.h" | |
68 | #include "AliPHOSClusterizerv1.h" | |
69 | #include "AliPHOSTrackSegmentMakerv1.h" | |
70 | #include "AliPHOSPIDv1.h" | |
71 | #include "AliPHOSGetter.h" | |
72 | ||
73 | ||
74 | ClassImp(AliPHOSReconstructioner) | |
75 | ||
76 | //____________________________________________________________________________ | |
77 | AliPHOSReconstructioner::AliPHOSReconstructioner():TTask("AliPHOSReconstructioner","") | |
78 | { | |
79 | // ctor | |
80 | fClusterizer = 0 ; | |
81 | fTSMaker = 0 ; | |
82 | fPID = 0 ; | |
83 | ||
84 | fIsInitialized = kFALSE ; | |
85 | ||
86 | } | |
87 | ||
88 | //____________________________________________________________________________ | |
89 | AliPHOSReconstructioner::AliPHOSReconstructioner(const char* evFoldName,const char * branchName): | |
90 | TTask("AliPHOSReconstructioner",evFoldName) | |
91 | { | |
92 | // ctor | |
93 | ||
94 | AliPHOSGetter::Instance(evFoldName) ; | |
95 | ||
96 | fRecPointBranch=branchName ; | |
97 | Info("ctor", "Creating Clusterizer") ; | |
98 | fClusterizer = new AliPHOSClusterizerv1(evFoldName, GetTitle()); | |
99 | Add(fClusterizer); | |
100 | ||
101 | fTSBranch=branchName ; | |
102 | Info("ctor", "Creating Track Segment Maker") ; | |
103 | fTSMaker = new AliPHOSTrackSegmentMakerv1(evFoldName, GetTitle()); | |
104 | Add(fTSMaker) ; | |
105 | ||
106 | fRecPartBranch=branchName ; | |
107 | Info("ctor", "Creating PID") ; | |
108 | fPID = new AliPHOSPIDv1(evFoldName, GetTitle()); | |
109 | Add(fPID); | |
110 | ||
111 | fIsInitialized = kTRUE ; | |
112 | } | |
113 | //____________________________________________________________________________ | |
114 | void AliPHOSReconstructioner::Exec(Option_t *opt) | |
115 | { | |
116 | //check, if the names of branches, which should be made coincide with already | |
117 | //existing | |
118 | if (!opt) | |
119 | return ; | |
120 | if(!fIsInitialized) | |
121 | Init() ; | |
122 | } | |
123 | //____________________________________________________________________________ | |
124 | void AliPHOSReconstructioner:: Clusters2Tracks(Int_t ievent, AliESD *event) | |
125 | { | |
126 | // Convert PHOS reconstructed particles into ESD object for event# ievent. | |
127 | // ESD object is returned as an argument event | |
128 | ||
129 | if(!fIsInitialized) Init() ; | |
130 | ||
131 | fClusterizer->SetEventRange(ievent,ievent); | |
132 | fClusterizer->ExecuteTask(); | |
133 | ||
134 | fTSMaker ->SetEventRange(ievent,ievent); | |
135 | fTSMaker ->ExecuteTask(); | |
136 | ||
137 | fPID ->SetEventRange(ievent,ievent); | |
138 | fPID ->ExecuteTask(); | |
139 | ||
140 | AliPHOSGetter *gime = AliPHOSGetter::Instance(); | |
141 | TClonesArray *recParticles = gime->RecParticles(); | |
142 | Int_t nOfRecParticles = recParticles->GetEntries(); | |
143 | for (Int_t recpart=0; recpart<nOfRecParticles; recpart++) { | |
144 | AliESDCaloTrack *ct = new AliESDCaloTrack((AliPHOSRecParticle*)recParticles->At(recpart)); | |
145 | event->AddCaloTrack(ct); | |
146 | } | |
147 | ||
148 | } | |
149 | //____________________________________________________________________________ | |
150 | void AliPHOSReconstructioner::Init() | |
151 | { | |
152 | // initiliaze Reconstructioner if necessary: we can not do this in default constructor | |
153 | ||
154 | if(!fIsInitialized){ | |
155 | ||
156 | fRecPointBranch="Default" ; | |
157 | fClusterizer = new AliPHOSClusterizerv1(GetTitle(),fRecPointBranch.Data()); | |
158 | Add(fClusterizer) ; | |
159 | ||
160 | fTSBranch="Default" ; | |
161 | fTSMaker = new AliPHOSTrackSegmentMakerv1(GetTitle(),fTSBranch.Data()); | |
162 | Add(fTSMaker) ; | |
163 | ||
164 | ||
165 | fRecPartBranch="Default"; | |
166 | fPID = new AliPHOSPIDv1(GetTitle(),fRecPartBranch.Data()) ; | |
167 | Add(fPID) ; | |
168 | ||
169 | fIsInitialized = kTRUE ; | |
170 | ||
171 | } | |
172 | } | |
173 | //____________________________________________________________________________ | |
174 | AliPHOSReconstructioner::~AliPHOSReconstructioner() | |
175 | { | |
176 | // Delete data members if any | |
177 | } | |
178 | ||
179 | void AliPHOSReconstructioner::Print()const { | |
180 | // Print reconstructioner data | |
181 | ||
182 | TString message ; | |
183 | message = "-----------------AliPHOSReconstructioner---------------\n" ; | |
184 | message += " Reconstruction of the header file %s\n" ; | |
185 | message += " with the following modules:\n" ; | |
186 | ||
187 | if(fClusterizer->IsActive()){ | |
188 | message += " (+) %s to branch %s\n" ; | |
189 | } | |
190 | ||
191 | if(fTSMaker->IsActive()){ | |
192 | message += " (+) %s to branch %s\n" ; | |
193 | } | |
194 | ||
195 | if(fPID->IsActive()){ | |
196 | message += " (+) %s to branch %s\n" ; | |
197 | } | |
198 | Info("Print", message.Data(), | |
199 | GetTitle(), | |
200 | fClusterizer->GetName(), fRecPointBranch.Data(), | |
201 | fTSMaker->GetName(), fTSBranch.Data() , | |
202 | fPID->GetName(), fRecPartBranch.Data() ) ; | |
203 | } |