]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONGeometrySVMap.cxx
Removing meaningelss const (warnings on alpha, sun, and with icc)
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometrySVMap.cxx
CommitLineData
89cc3034 1// $Id$
2//
3// Class AliMUONGeometrySVMap
4// ------------------------------------
5// As the detection element frame is different from the
6// frame of the sensitive volume(s) defined in Geant,
7// the sensitive volumes have to be mapped to the detection
8// elements. In the map, fSVMap, the sensitive voolumes are specified
9// by the full path in the volume hierarchy, defined as:
10// /volname.copyNo/volName.copyNo1/...
11//
12// The array of global positions of sensitive volumes fSVPositions
13// is included to make easier the verification of the assignements
14// in the fSVMap.
15//
16// Author: Ivana Hrivnacova, IPN Orsay
17
18#include <Riostream.h>
19#include <TGeoMatrix.h>
20#include <TObjString.h>
21
22#include "AliMUONGeometrySVMap.h"
8c343c7c 23#include "AliLog.h"
89cc3034 24
25ClassImp(AliMUONGeometrySVMap)
26
27//
28// Class AliMUONStringIntMap
29//
30
31//______________________________________________________________________________
32AliMUONStringIntMap::AliMUONStringIntMap()
33 : TObject(),
34 fNofItems(0),
35 fFirstArray(100),
36 fSecondArray(100)
37{
38// Standard constructor
39
40 fFirstArray.SetOwner(true);
41}
42
43//______________________________________________________________________________
44AliMUONStringIntMap::AliMUONStringIntMap(const AliMUONStringIntMap& rhs)
45 : TObject(rhs)
46{
8c343c7c 47 AliFatal("Copy constructor is not implemented.");
89cc3034 48}
49
50//______________________________________________________________________________
51AliMUONStringIntMap&
52AliMUONStringIntMap::operator = (const AliMUONStringIntMap& rhs)
53{
54 // check assignement to self
55 if (this == &rhs) return *this;
56
8c343c7c 57 AliFatal("Assignment operator is not implemented.");
89cc3034 58
59 return *this;
60}
61
62//______________________________________________________________________________
63AliMUONStringIntMap::~AliMUONStringIntMap()
64{
65// Destructor
66
67 fFirstArray.Delete();
68}
69
70
71//______________________________________________________________________________
72Bool_t AliMUONStringIntMap::Add(const TString& first, Int_t second)
73{
74// Add map element if first not yet present
75// ---
76
77 Int_t second2 = Get(first);
78 if ( second2 > 0 ) {
8c343c7c 79 AliError(Form("%s is already present in the map", first.Data()));
89cc3034 80 return false;
81 }
82
83 // Resize TArrayI if needed
84 if (fSecondArray.GetSize() == fNofItems) fSecondArray.Set(2*fNofItems);
85
86 fFirstArray.Add(new TObjString(first));
87 fSecondArray.AddAt(second, fNofItems);
88 fNofItems++;
89
90 return true;
91}
92
93//______________________________________________________________________________
94Int_t AliMUONStringIntMap::Get(const TString& first) const
95{
96// Find the element with specified key (first)
97// ---
98
99 for (Int_t i=0; i<fNofItems; i++) {
100 if ( ((TObjString*)fFirstArray.At(i))->GetString() == first )
101 return fSecondArray.At(i);
102 }
103
104 return 0;
105}
106
107//______________________________________________________________________________
108Int_t AliMUONStringIntMap::GetNofItems() const
109{
110// Returns the number of elements
111// ---
112
113 return fNofItems;
114}
115
116//______________________________________________________________________________
117void AliMUONStringIntMap::Clear()
118{
119// Deletes the elements
120// ---
121
122 cout << "######### clearing map " << endl;
123
124 fNofItems = 0;
125 fFirstArray.Delete();
126 fSecondArray.Reset();
127
128 cout << "######### clearing map done " << endl;
129}
130
131//______________________________________________________________________________
132void AliMUONStringIntMap::Print(const char* /*option*/) const
133{
134// Prints the map elements
135
136 for (Int_t i=0; i<fNofItems; i++) {
137 cout << setw(4)
138 << i << " "
139 << ((TObjString*)fFirstArray.At(i))->GetString()
140 << " "
141 << setw(5)
142 << fSecondArray.At(i)
143 << endl;
144 }
145}
146
147//______________________________________________________________________________
148void AliMUONStringIntMap::Print(const TString& key, ofstream& out) const
149{
150// Prints the map elements
151
152 for (Int_t i=0; i<fNofItems; i++) {
153 out << key << " "
154 << ((TObjString*)fFirstArray.At(i))->GetString()
155 << " "
156 << setw(5)
157 << fSecondArray.At(i)
158 << endl;
159 }
160}
161
162
163//
164// Class AliMUONGeometrySVMap
165//
166
167//______________________________________________________________________________
168AliMUONGeometrySVMap::AliMUONGeometrySVMap(Int_t initSize)
169 : TObject(),
170 fSVMap(),
171 fSVPositions(initSize)
172{
173// Standard constructor
174
175 fSVPositions.SetOwner(true);
176}
177
178//______________________________________________________________________________
179AliMUONGeometrySVMap::AliMUONGeometrySVMap()
180 : TObject(),
181 fSVMap(),
182 fSVPositions()
183{
184// Default constructor
185}
186
187//______________________________________________________________________________
188AliMUONGeometrySVMap::AliMUONGeometrySVMap(const AliMUONGeometrySVMap& rhs)
189 : TObject(rhs)
190{
8c343c7c 191 AliFatal("Copy constructor is not implemented.");
89cc3034 192}
193
194//______________________________________________________________________________
195AliMUONGeometrySVMap::~AliMUONGeometrySVMap() {
196//
197 fSVPositions.Delete();
198}
199
200//______________________________________________________________________________
201AliMUONGeometrySVMap&
202AliMUONGeometrySVMap::operator = (const AliMUONGeometrySVMap& rhs)
203{
204 // check assignement to self
205 if (this == &rhs) return *this;
206
8c343c7c 207 AliFatal("Assignment operator is not implemented.");
89cc3034 208
209 return *this;
210}
211
212//
213// private methods
214//
215
216//______________________________________________________________________________
217const TGeoCombiTrans*
218AliMUONGeometrySVMap::FindByName(const TString& name) const
219{
220// Finds TGeoCombiTrans in the array of positions by name
221// ---
222
223 for (Int_t i=0; i<fSVPositions.GetEntriesFast(); i++) {
224 TGeoCombiTrans* transform = (TGeoCombiTrans*) fSVPositions.At(i);
225 if ( transform && TString(transform->GetTitle()) == name )
226 return transform;
227 }
228
229 return 0;
230}
231
232
233//
234// public methods
235//
236
237//______________________________________________________________________________
238void AliMUONGeometrySVMap::Add(const TString& volumePath,
239 Int_t detElemId)
240{
241// Add the specified sensitive volume path and the detElemId
242// to the map
243// ---
244
245 fSVMap.Add(volumePath, detElemId);
246}
247
248//______________________________________________________________________________
249void AliMUONGeometrySVMap::AddPosition(const TString& volumePath,
250 const TGeoTranslation& globalPosition)
251{
252// Add global position for the sensitive volume specified by volumePath
253// in the array of transformations if this volumePath is not yet present.
254// ---
255
256 TGeoTranslation* newTransform = new TGeoTranslation(globalPosition);
257 Int_t detElemId = fSVMap.Get(volumePath);
258
259 TString detElemIdString("");
260 detElemIdString += detElemId;
261
262 newTransform->SetName(detElemIdString);
263 newTransform->SetTitle(volumePath);
264
265 // cout << ".. adding " << volumePath << " " << detElemId << endl;
266
267 // Add to the map
268 if ( !FindByName(volumePath )) {
269
270 newTransform->SetUniqueID(detElemId);
271 // Set detector element id as unique id
272
273 fSVPositions.Add(newTransform);
274 }
275}
276
277//______________________________________________________________________________
278void AliMUONGeometrySVMap::Clear()
279{
280// Clears the sensitive volumes map
281
282 fSVMap.Clear();
283}
284
285//______________________________________________________________________________
286void AliMUONGeometrySVMap::ClearPositions()
287{
288// Clears the array of transformations
289
290 fSVPositions.Delete();
291}
292
293//______________________________________________________________________________
294void AliMUONGeometrySVMap::SortPositions()
295{
296// Sort the array of positions by names.
297// ---
298
299 fSVPositions.Sort(fSVPositions.GetEntriesFast());
300}
301
302//______________________________________________________________________________
303void AliMUONGeometrySVMap::Print(const char* option) const
304{
305// Prints the map of sensitive volumes and detector elements
306// ---
307
308 fSVMap.Print(option);
309}
310
311//______________________________________________________________________________
312void AliMUONGeometrySVMap::PrintPositions() const
313{
314// Prints the sensitive volumes global positions
315// ---
316
317 for (Int_t i=0; i<fSVPositions.GetEntriesFast(); i++) {
318
319 TGeoTranslation* matrix = (TGeoTranslation*)fSVPositions.At(i);
320
321 cout << "DetElemId: " << matrix->GetUniqueID();
322 cout << " name: " << matrix->GetTitle() << endl;
323
324 const double* translation = matrix->GetTranslation();
325 cout << " translation: "
e516b01d 326#if defined (__DECCXX)
327 << translation[0] << ", "
328 << translation[1] << ", "
329 << translation[2] << endl;
330#else
89cc3034 331 << std::fixed
332 << std::setw(7) << std::setprecision(4) << translation[0] << ", "
333 << std::setw(7) << std::setprecision(4) << translation[1] << ", "
334 << std::setw(7) << std::setprecision(4) << translation[2] << endl;
e516b01d 335#endif
89cc3034 336 }
337}
338
339//______________________________________________________________________________
340void AliMUONGeometrySVMap::WriteMap(ofstream& out) const
341{
342// Prints the map of sensitive volumes and detector elements
343// into specified stream
344// ---
345
346 fSVMap.Print("SV", out);
347}
348
349//______________________________________________________________________________
350Int_t AliMUONGeometrySVMap::GetDetElemId(const TString& volumePath) const
351{
352// Returns detection element Id for the sensitive volume specified by path
353// ---
354
355 return fSVMap.Get(volumePath);
356}