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