]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - MUON/mapping/AliMpDEManager.cxx
Replacement of AliMpIntPair object with algoritmic
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpDEManager.cxx
... / ...
CommitLineData
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// $MpId: AliMpDEManager.cxx,v 1.4 2006/05/24 13:58:34 ivana Exp $
18// Category: management
19
20//-----------------------------------------------------------------------------
21// Class AliMpDEManager
22// --------------------
23// The manager class for definition of detection element types
24// Authors: Ivana Hrivnacova, IPN Orsay
25// Laurent Aphecetche, SUBATECH Nantes
26//-----------------------------------------------------------------------------
27
28#include "AliMpDEManager.h"
29#include "AliMpDEStore.h"
30#include "AliMpDetElement.h"
31#include "AliMpConstants.h"
32#include "AliMpCathodType.h"
33#include "AliMpEncodePair.h"
34
35#include "AliLog.h"
36
37#include <Riostream.h>
38#include <TClass.h>
39
40/// \cond CLASSIMP
41ClassImp(AliMpDEManager)
42/// \endcond
43
44const Int_t AliMpDEManager::fgkCoefficient = 100;
45TArrayI AliMpDEManager::fgNofDEPerChamber;
46
47//______________________________________________________________________________
48
49AliMpDEManager::~AliMpDEManager()
50{
51/// Destructor
52}
53
54//
55// static private methods
56//
57
58//______________________________________________________________________________
59AliMpDetElement* AliMpDEManager::GetDetElement(Int_t detElemId, Bool_t warn)
60{
61/// Return det element for given detElemId
62
63 return AliMpDEStore::Instance()->GetDetElement(detElemId, warn);
64}
65
66//______________________________________________________________________________
67AliMpDetElement* AliMpDEManager::GetDetElement(const TString& deName, Bool_t warn)
68{
69/// Return det element for given deName
70
71 return AliMpDEStore::Instance()->GetDetElement(deName, warn);
72}
73
74//
75// static public methods
76//
77
78//______________________________________________________________________________
79Bool_t AliMpDEManager::IsValidDetElemId(Int_t detElemId, Bool_t warn)
80{
81/// Return true if detElemId is valid
82/// (is present in the DE map)
83
84 if ( GetDetElement(detElemId, warn) ) return true;
85
86 return false;
87}
88
89//______________________________________________________________________________
90Bool_t AliMpDEManager::IsValidChamberId(Int_t chamberId, Bool_t warn)
91{
92/// Return true if chamberId is valid
93
94 if ( chamberId >= 0 && chamberId < AliMpConstants::NofChambers() )
95 return true;
96
97 if (warn)
98 AliErrorClassStream() << "Wrong chamber Id " << chamberId << endl;
99
100 return false;
101}
102
103//______________________________________________________________________________
104Bool_t AliMpDEManager::IsValidGeomModuleId(Int_t moduleId, Bool_t warn)
105{
106/// Return true if moduleId is valid
107
108 if ( moduleId >= 0 && moduleId < AliMpConstants::NofGeomModules() )
109 return true;
110
111 if (warn)
112 AliErrorClassStream() << "Wrong module Id " << moduleId << endl;
113
114 return false;
115}
116
117//______________________________________________________________________________
118Int_t AliMpDEManager::GetChamberId(Int_t detElemId, Bool_t warn)
119{
120/// Return chamber Id for given detElemId
121
122 if ( ! IsValidDetElemId(detElemId, warn) ) return -1;
123
124 return detElemId/fgkCoefficient - 1;
125}
126
127//______________________________________________________________________________
128Int_t AliMpDEManager::GetGeomModuleId(Int_t detElemId, Bool_t warn)
129{
130/// <pre>
131/// Get module Id from detection element Id
132/// !!! moduleId != chamberId
133/// Station 1: Chamber: 1 Module: 0 Det elements: 100-103
134/// Chamber: 2 Module: 1 Det elements: 200-203
135/// Station 2: Chamber: 3 Module: 2 Det elements: 300-303
136/// Chamber: 4 Module: 3 Det elements: 400-403
137/// Station 3: Chamber: 5 Module: 4 Det elements: 500-504, 514-517
138/// Module: 5 Det elements: 505-513,
139/// Chamber: 6 Module: 6 Det elements: 600-604, 614-617
140/// Module: 7 Det elements: 605-613
141/// Station 4: Chamber: 7 Module: 8 Det elements: 700-706, 720-725
142/// Module: 9 Det elements: 707-719
143/// Chamber: 8 Module: 10 Det elements: 800-806, 820-825
144/// Module: 11 Det elements: 807-819
145/// Station 5: Chamber: 9 Module: 12 Det elements: 900-906, 920-925
146/// Module: 13 Det elements: 907-919
147/// Chamber: 10 Module: 14 Det elements: 1000-1006,1020-1025
148/// Module: 15 Det elements: 1007-1019
149/// Station 6: Chamber: 11 Module: 16 Det elements: 1100-1117
150/// Chamber: 12 Module: 17 Det elements: 1200-1217
151/// Station 7: Chamber: 13 Module: 18 Det elements: 1300-1317
152/// Chamber: 14 Module: 19 Det elements: 1400-1417
153/// </pre>
154
155 if ( ! IsValidDetElemId(detElemId, warn) ) return -1;
156
157 return detElemId/fgkCoefficient
158 + ((detElemId >= 505 && detElemId <= 513) || detElemId >= 600 )
159 + ((detElemId >= 605 && detElemId <= 613) || detElemId >= 700 )
160 + ((detElemId >= 707 && detElemId <= 719) || detElemId >= 800 )
161 + ((detElemId >= 807 && detElemId <= 819) || detElemId >= 900 )
162 + ((detElemId >= 907 && detElemId <= 919) || detElemId >= 1000 )
163 + ((detElemId >= 1007 && detElemId <= 1019) || detElemId >= 1100 ) - 1;
164}
165
166//______________________________________________________________________________
167AliMp::PlaneType AliMpDEManager::GetPlaneType(Int_t detElemId, AliMp::CathodType cath)
168{
169/// Return plane type \n
170/// Failure causes Fatal error - as AliMp::PlaneType has no possibility
171/// to return undefined value
172
173 if ( ! IsValidDetElemId(detElemId, true) ) {
174 AliFatalClass("Cannot return AliMp::PlaneType value.");
175 return AliMp::kBendingPlane;
176 }
177
178 return GetDetElement(detElemId)->GetPlaneType(cath);
179}
180
181//______________________________________________________________________________
182AliMp::StationType AliMpDEManager::GetStationType(Int_t detElemId)
183{
184/// Return station type \n
185/// Failure causes Fatal error - as AliMp::StationType has no possibility
186/// to return undefined value
187
188 if ( ! IsValidDetElemId(detElemId, true) ) {
189 AliFatalClass("Cannot return AliMp::StationType value.");
190 return AliMp::kStation12;
191 }
192
193 return GetDetElement(detElemId)->GetStationType();
194}
195
196//______________________________________________________________________________
197AliMq::Station12Type AliMpDEManager::GetStation12Type(Int_t detElemId)
198{
199/// Return station12 type \n
200/// Failure causes Fatal error - as AliMp::StationNumber has no possibility
201/// to return undefined value
202
203 if ( ! IsValidDetElemId(detElemId, true) ) {
204 AliFatalClass("Cannot return AliMp::Station12Type value.");
205 return AliMq::kNotSt12;
206 }
207
208 return GetDetElement(detElemId)->GetStation12Type();
209}
210
211//______________________________________________________________________________
212AliMp::CathodType
213AliMpDEManager::GetCathod(Int_t detElemId, AliMp::PlaneType planeType)
214{
215/// Return cathod number for given detElemId and planeType
216
217 if ( ! IsValidDetElemId(detElemId, true) ) {
218 AliFatalClass("Cannot return AliMp::CathodType value.");
219 return AliMp::kCath0;
220 }
221
222 return GetDetElement(detElemId)->GetCathodType(planeType);
223}
224
225//______________________________________________________________________________
226Int_t AliMpDEManager::GetNofDEInChamber(Int_t chamberId, Bool_t warn)
227{
228/// Return the number of detection elements in the chamber with the given
229/// chamberId
230
231 if ( ! IsValidChamberId(chamberId,warn) ) return 0;
232
233 // Fill array if it is empty
234 if ( ! fgNofDEPerChamber.GetSize() ) {
235 fgNofDEPerChamber.Set(AliMpConstants::NofChambers());
236 AliMpDEIterator it;
237 for ( Int_t i=0; i<AliMpConstants::NofChambers(); i++ ) {
238 Int_t counter = 0;
239 for ( it.First(i); ! it.IsDone(); it.Next() ) ++counter;
240 fgNofDEPerChamber[i] = counter;
241 }
242 }
243
244 return fgNofDEPerChamber[chamberId];
245
246}
247
248//______________________________________________________________________________
249MpPair_t AliMpDEManager::GetDetElemIdRange(Int_t chamberId)
250{
251/// Return the detection element Id range for given chamberId
252/// es encoded pair
253
254 if ( ! IsValidChamberId(chamberId) ) return 0;
255
256 return AliMp::Pair(
257 (chamberId+1)*fgkCoefficient,
258 (chamberId+1)*fgkCoefficient + GetNofDEInChamber(chamberId) - 1);
259
260}
261