1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
17 // $MpId: AliMpDEManager.cxx,v 1.4 2006/05/24 13:58:34 ivana Exp $
18 // Category: management
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 //-----------------------------------------------------------------------------
28 #include "AliMpDEManager.h"
29 #include "AliMpDEStore.h"
30 #include "AliMpDetElement.h"
31 #include "AliMpConstants.h"
32 #include "AliMpCathodType.h"
33 #include "AliMpEncodePair.h"
37 #include <Riostream.h>
42 ClassImp(AliMpDEManager)
45 const Int_t AliMpDEManager::fgkCoefficient = 100;
48 // static private methods
50 //______________________________________________________________________________
51 TArrayI& AliMpDEManager::GetNofDEPerChamber()
53 /// number of detElemId per chamber
54 static TArrayI nofDEPerChamber;
55 return nofDEPerChamber;
59 // static public methods
62 //______________________________________________________________________________
63 AliMpDetElement* AliMpDEManager::GetDetElement(Int_t detElemId, Bool_t warn)
65 /// Return det element for given detElemId
67 return AliMpDEStore::Instance()->GetDetElement(detElemId, warn);
70 //______________________________________________________________________________
71 AliMpDetElement* AliMpDEManager::GetDetElement(const TString& deName, Bool_t warn)
73 /// Return det element for given deName
75 return AliMpDEStore::Instance()->GetDetElement(deName, warn);
79 // static public methods
82 //______________________________________________________________________________
83 Bool_t AliMpDEManager::IsValidDetElemId(Int_t detElemId, Bool_t warn)
85 /// Return true if detElemId is valid
86 /// (is present in the DE map)
88 if ( GetDetElement(detElemId, warn) ) return true;
93 //______________________________________________________________________________
94 Bool_t AliMpDEManager::IsValidChamberId(Int_t chamberId, Bool_t warn)
96 /// Return true if chamberId is valid
98 if ( chamberId >= 0 && chamberId < AliMpConstants::NofChambers() )
102 AliErrorClassStream() << "Wrong chamber Id " << chamberId << endl;
107 //______________________________________________________________________________
108 Bool_t AliMpDEManager::IsValidGeomModuleId(Int_t moduleId, Bool_t warn)
110 /// Return true if moduleId is valid
112 if ( moduleId >= 0 && moduleId < AliMpConstants::NofGeomModules() )
116 AliErrorClassStream() << "Wrong module Id " << moduleId << endl;
121 //______________________________________________________________________________
122 Int_t AliMpDEManager::GetChamberId(Int_t detElemId, Bool_t warn)
124 /// Return chamber Id for given detElemId
126 if ( ! IsValidDetElemId(detElemId, warn) ) return -1;
128 return detElemId/fgkCoefficient - 1;
131 //______________________________________________________________________________
132 Int_t AliMpDEManager::GetGeomModuleId(Int_t detElemId, Bool_t warn)
135 /// Get module Id from detection element Id
136 /// !!! moduleId != chamberId
137 /// Station 1: Chamber: 1 Module: 0 Det elements: 100-103
138 /// Chamber: 2 Module: 1 Det elements: 200-203
139 /// Station 2: Chamber: 3 Module: 2 Det elements: 300-303
140 /// Chamber: 4 Module: 3 Det elements: 400-403
141 /// Station 3: Chamber: 5 Module: 4 Det elements: 500-504, 514-517
142 /// Module: 5 Det elements: 505-513,
143 /// Chamber: 6 Module: 6 Det elements: 600-604, 614-617
144 /// Module: 7 Det elements: 605-613
145 /// Station 4: Chamber: 7 Module: 8 Det elements: 700-706, 720-725
146 /// Module: 9 Det elements: 707-719
147 /// Chamber: 8 Module: 10 Det elements: 800-806, 820-825
148 /// Module: 11 Det elements: 807-819
149 /// Station 5: Chamber: 9 Module: 12 Det elements: 900-906, 920-925
150 /// Module: 13 Det elements: 907-919
151 /// Chamber: 10 Module: 14 Det elements: 1000-1006,1020-1025
152 /// Module: 15 Det elements: 1007-1019
153 /// Station 6: Chamber: 11 Module: 16 Det elements: 1100-1117
154 /// Chamber: 12 Module: 17 Det elements: 1200-1217
155 /// Station 7: Chamber: 13 Module: 18 Det elements: 1300-1317
156 /// Chamber: 14 Module: 19 Det elements: 1400-1417
159 if ( ! IsValidDetElemId(detElemId, warn) ) return -1;
161 return detElemId/fgkCoefficient
162 + ((detElemId >= 505 && detElemId <= 513) || detElemId >= 600 )
163 + ((detElemId >= 605 && detElemId <= 613) || detElemId >= 700 )
164 + ((detElemId >= 707 && detElemId <= 719) || detElemId >= 800 )
165 + ((detElemId >= 807 && detElemId <= 819) || detElemId >= 900 )
166 + ((detElemId >= 907 && detElemId <= 919) || detElemId >= 1000 )
167 + ((detElemId >= 1007 && detElemId <= 1019) || detElemId >= 1100 ) - 1;
170 //______________________________________________________________________________
171 AliMp::PlaneType AliMpDEManager::GetPlaneType(Int_t detElemId, AliMp::CathodType cath)
173 /// Return plane type \n
174 /// Failure causes Fatal error - as AliMp::PlaneType has no possibility
175 /// to return undefined value
177 if ( ! IsValidDetElemId(detElemId, true) ) {
178 AliFatalClass("Cannot return AliMp::PlaneType value.");
179 return AliMp::kBendingPlane;
182 return GetDetElement(detElemId)->GetPlaneType(cath);
185 //______________________________________________________________________________
186 AliMp::StationType AliMpDEManager::GetStationType(Int_t detElemId)
188 /// Return station type \n
189 /// Failure causes Fatal error - as AliMp::StationType has no possibility
190 /// to return undefined value
192 if ( ! IsValidDetElemId(detElemId, true) ) {
193 AliFatalClass("Cannot return AliMp::StationType value.");
194 return AliMp::kStation12;
197 return GetDetElement(detElemId)->GetStationType();
200 //______________________________________________________________________________
201 AliMq::Station12Type AliMpDEManager::GetStation12Type(Int_t detElemId)
203 /// Return station12 type \n
204 /// Failure causes Fatal error - as AliMp::StationNumber has no possibility
205 /// to return undefined value
207 if ( ! IsValidDetElemId(detElemId, true) ) {
208 AliFatalClass("Cannot return AliMp::Station12Type value.");
209 return AliMq::kNotSt12;
212 return GetDetElement(detElemId)->GetStation12Type();
215 //______________________________________________________________________________
217 AliMpDEManager::GetCathod(Int_t detElemId, AliMp::PlaneType planeType)
219 /// Return cathod number for given detElemId and planeType
221 if ( ! IsValidDetElemId(detElemId, true) ) {
222 AliFatalClass("Cannot return AliMp::CathodType value.");
223 return AliMp::kCath0;
226 return GetDetElement(detElemId)->GetCathodType(planeType);
229 //______________________________________________________________________________
230 Int_t AliMpDEManager::GetNofDEInChamber(Int_t chamberId, Bool_t warn)
232 /// Return the number of detection elements in the chamber with the given
235 if ( ! IsValidChamberId(chamberId,warn) ) return 0;
237 // Fill array if it is empty
238 if ( ! GetNofDEPerChamber().GetSize() ) {
239 GetNofDEPerChamber().Set(AliMpConstants::NofChambers());
241 for ( Int_t i=0; i<AliMpConstants::NofChambers(); i++ ) {
243 for ( it.First(i); ! it.IsDone(); it.Next() ) ++counter;
244 GetNofDEPerChamber()[i] = counter;
248 return GetNofDEPerChamber()[chamberId];
252 //______________________________________________________________________________
253 MpPair_t AliMpDEManager::GetDetElemIdRange(Int_t chamberId)
255 /// Return the detection element Id range for given chamberId
258 if ( ! IsValidChamberId(chamberId) ) return 0;
261 (chamberId+1)*fgkCoefficient,
262 (chamberId+1)*fgkCoefficient + GetNofDEInChamber(chamberId) - 1);
270 //______________________________________________________________________________
271 AliMpDEManager::~AliMpDEManager()