]>
Commit | Line | Data |
---|---|---|
83974468 | 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 | // A singleton that retrieves objets from an array stored in a Tree on a disk file | |
20 | // 1. AliPHOSDigit from TreeD | |
21 | // | |
22 | //*-- Author: Yves Schutz (SUBATECH) | |
23 | ////////////////////////////////////////////////////////////////////////////// | |
24 | ||
25 | // --- ROOT system --- | |
26 | ||
27 | // --- Standard library --- | |
28 | ||
29 | // --- AliRoot header files --- | |
30 | ||
31 | #include "AliPHOSIndexToObject.h" | |
32 | ||
33 | ClassImp(AliPHOSIndexToObject) | |
34 | ||
35 | AliPHOSIndexToObject * AliPHOSIndexToObject::fObjGetter = 0 ; | |
36 | ||
37 | //____________________________________________________________________________ | |
38 | AliPHOSIndexToObject::AliPHOSIndexToObject(AliPHOS * det) | |
39 | { | |
40 | // ctor called once to initialize the detector in use | |
41 | ||
42 | fDetector = det ; | |
43 | } | |
44 | ||
45 | //____________________________________________________________________________ | |
46 | AliPHOSIndexToObject * AliPHOSIndexToObject::GetInstance() | |
47 | { | |
48 | // Returns the pointer of the unique instance already defined | |
49 | ||
50 | AliPHOSIndexToObject * rv = 0 ; | |
51 | if ( fObjGetter ) | |
52 | rv = fObjGetter ; | |
53 | else | |
54 | cout << "AliPHOSIndexToObject::GetInstance ERROR: not yet initialized" << endl ; | |
55 | ||
56 | return rv ; | |
57 | } | |
58 | ||
59 | //____________________________________________________________________________ | |
60 | AliPHOSIndexToObject * AliPHOSIndexToObject::GetInstance(AliPHOS * det) | |
61 | { | |
62 | // Creates and returns the pointer of the unique instance | |
63 | // Must be called only when the environment has changed (a new event for exemple) | |
64 | ||
65 | if ( fObjGetter ) // delete it if already exists | |
66 | delete fObjGetter ; | |
67 | ||
68 | fObjGetter = new AliPHOSIndexToObject(det) ; | |
69 | ||
70 | return fObjGetter ; | |
71 | ||
72 | } | |
73 | ||
74 | //____________________________________________________________________________ | |
75 | AliPHOSDigit * AliPHOSIndexToObject::GimeDigit(Int_t index) | |
76 | { | |
77 | // returns the object AliPHOSDigit stored at array position index in TreeD | |
78 | ||
79 | AliPHOSDigit * rv = 0 ; | |
80 | ||
81 | if ( index >= fDetector->Digits()->GetEntries() ) | |
82 | cout << "AliPHOSIndexToObject::GimeDigit: index " << index << " larger than available entries " | |
83 | << fDetector->Digits()->GetEntries() << endl ; | |
84 | else if ( index != -1) | |
85 | rv = (AliPHOSDigit *) (fDetector->Digits()->At(index) ) ; | |
86 | ||
87 | return rv ; | |
88 | ||
89 | } | |
90 | //____________________________________________________________________________ | |
91 | TParticle * AliPHOSIndexToObject::GimePrimaryParticle(Int_t index) | |
92 | { | |
93 | // returns the object TParticle stored at array position index in TreeK | |
94 | ||
95 | TParticle * rv = 0 ; | |
96 | ||
97 | if ( index >= gAlice->Particles()->GetEntries() ) | |
98 | cout << "AliPHOSIndexToObject::GimePrimaryParticles: index " << index << " larger than available entries " | |
99 | << gAlice->Particles()->GetEntries() << endl ; | |
100 | else | |
101 | rv = (TParticle *) (gAlice->Particles()->At(index) ) ; | |
102 | ||
103 | return rv ; | |
104 | ||
105 | } | |
106 | ||
107 | //____________________________________________________________________________ | |
108 | AliPHOSRecParticle * AliPHOSIndexToObject::GimeRecParticle(Int_t index) | |
109 | { | |
110 | // returns the object AliPHOSRecParticle stored at array position index in TreeR/PHOSRP | |
111 | // this one takes more work because the detetor object and the objects in TreeR are not saved at the same time | |
112 | // therefore the links are lost | |
113 | ||
114 | AliPHOSRecParticle * rv = 0 ; | |
115 | ||
116 | RecParticlesList * rplist = fDetector->RecParticles() ; | |
117 | ||
118 | Int_t rpentries = 0 ; | |
119 | ||
120 | if (rplist) | |
121 | rpentries = rplist->GetEntries() ; | |
122 | ||
123 | fReconstruct = gAlice->TreeR() ; | |
124 | ||
125 | if (!rpentries) { | |
126 | fReconstruct->SetBranchAddress( "PHOSRP", &rplist ) ; | |
127 | fReconstruct->GetEvent(0) ; | |
128 | rpentries = rplist->GetEntries() ; | |
129 | } | |
130 | ||
131 | if ( index >= rpentries ) // ERROR | |
132 | cout << "AliPHOSIndexToObject::GimeRecParticle: index " << index << " larger than available entries " | |
133 | << rpentries << endl ; | |
134 | else | |
135 | rv = (AliPHOSRecParticle *) (fDetector->RecParticles()->At(index) ) ; | |
136 | ||
137 | return rv ; | |
138 | ||
139 | } | |
140 | ||
141 | //____________________________________________________________________________ | |
142 | AliRecPoint * AliPHOSIndexToObject::GimeRecPoint(Int_t index, TString type) | |
143 | { | |
144 | // returns the object AliPHOSRecPoint stored at array position index in TreeR/PHOSEmcRP or TreeR/PHOSPpsdRP | |
145 | // this one takes more work because the detetor object and the objects in TreeR are not saved at the same time | |
146 | // therefore the links are lost | |
147 | ||
148 | AliPHOSRecPoint * rv = 0 ; | |
149 | ||
150 | RecPointsList * emclist = fDetector->EmcRecPoints() ; | |
151 | RecPointsList * ppsdlist = fDetector->PpsdRecPoints() ; | |
152 | ||
153 | Int_t emcentries = 0 ; | |
154 | Int_t ppsdentries = 0 ; | |
155 | ||
156 | if (emclist) | |
157 | emcentries = emclist->GetEntries() ; | |
158 | ||
159 | if (ppsdlist) | |
160 | ppsdentries= ppsdlist->GetEntries() ; | |
161 | ||
162 | fReconstruct = gAlice->TreeR() ; | |
163 | ||
164 | if (!emcentries || !ppsdentries) { | |
165 | fReconstruct->SetBranchAddress("PHOSEmcRP",&emclist); | |
166 | fReconstruct->SetBranchAddress("PHOSPpsdRP",&ppsdlist); | |
167 | fReconstruct->GetEvent(0) ; | |
168 | emcentries = emclist->GetEntries() ; | |
169 | ppsdentries= ppsdlist->GetEntries() ; | |
170 | } | |
171 | ||
172 | if ( type == "emc" ) { | |
173 | if ( index >= emcentries ) | |
174 | cout << "AliPHOSIndexToObject::GimeRecPoint emc: index " << index << " larger than available entries " | |
175 | << emcentries << endl ; | |
176 | else | |
177 | rv = (AliPHOSEmcRecPoint *) ( emclist->At(index) ) ; | |
178 | } | |
179 | else if ( type == "ppsd" ) { | |
180 | if ( index >= ppsdentries ) | |
181 | cout << "AliPHOSIndexToObject::GimeRecPoint ppsd: index " << index << " larger than available entries " | |
182 | << ppsdentries << endl ; | |
183 | else if (index != -1) | |
184 | rv = (AliPHOSPpsdRecPoint *) (ppsdlist->At(index) ) ; | |
185 | } else | |
186 | cout << "AliPHOSIndexToObject::GimeRecPoint: " << type << " is an unknown type " << endl | |
187 | << " valid types are : emc " << endl | |
188 | << " ppsd " << endl ; | |
189 | ||
190 | return rv ; | |
191 | ||
192 | } | |
193 | ||
194 | //____________________________________________________________________________ | |
195 | AliPHOSTrackSegment * AliPHOSIndexToObject::GimeTrackSegment(Int_t index) | |
196 | { | |
197 | // returns the object AliPHOSTrackSegment stored at array position index in TreeR/PHOSTS | |
198 | // this one takes more work because the detetor object and the objects in TreeR are not saved at the same time | |
199 | // therefore the links are lost | |
200 | ||
201 | AliPHOSTrackSegment * rv = 0 ; | |
202 | ||
203 | TrackSegmentsList * tslist = fDetector->TrackSegments() ; | |
204 | ||
205 | Int_t tsentries = 0 ; | |
206 | ||
207 | if (tslist) | |
208 | tsentries = tslist->GetEntries() ; | |
209 | ||
210 | fReconstruct = gAlice->TreeR() ; | |
211 | ||
212 | if (!tsentries) { | |
213 | fReconstruct->SetBranchAddress( "PHOSTS", &tslist ) ; | |
214 | fReconstruct->GetEvent(0) ; | |
215 | tsentries = tslist->GetEntries() ; | |
216 | } | |
217 | ||
218 | if ( index >= tsentries ) // ERROR | |
219 | cout << "AliPHOSIndexToObject::GimeTrackSegment: index " << index << " larger than available entries " | |
220 | << tsentries << endl ; | |
221 | else | |
222 | rv = (AliPHOSTrackSegment *) (fTrackSegmentsList->At(index) ) ; | |
223 | ||
224 | return rv ; | |
225 | ||
226 | } |