Add the array of crates Id
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpDDL.cxx
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: AliMpDDL.cxx,v 1.4 2006/05/24 13:58:34 ivana Exp $
18 // Category: management
19 //
20 // Class AliMpDDL
21 // --------------------
22 // The class defines electronics properties of DDL
23 // Authors: Ivana Hrivnacova, IPN Orsay
24 //          Christian Finck, SUBATECH Nantes
25
26 #include "AliMpDDL.h"
27 #include "AliMpDEManager.h"
28 #include "AliMpDetElement.h"
29
30 #include "AliLog.h"
31
32 #include <Riostream.h>
33
34
35 /// \cond CLASSIMP
36 ClassImp(AliMpDDL)
37 /// \endcond
38
39 //______________________________________________________________________________
40 AliMpDDL::AliMpDDL(Int_t id)
41   : TObject(),
42     fId(id),
43     fDEIds(),
44     fBusPatchIds(),
45     fTriggerCrateIds(false)
46
47 {
48 /// Standard constructor
49 }
50
51 //______________________________________________________________________________
52 AliMpDDL::AliMpDDL(TRootIOCtor* /*ioCtor*/)
53   : TObject(),
54     fId(0),
55     fDEIds(),
56     fBusPatchIds(),
57     fTriggerCrateIds()
58 {
59 /// Root IO constructor
60 }
61
62 //______________________________________________________________________________
63 AliMpDDL::~AliMpDDL()
64 {
65 /// Destructor
66 }
67
68 //
69 // private methods
70 //
71
72 //______________________________________________________________________________
73 void AliMpDDL::FillBusPatchIds()
74 {
75 /// Fill array with bus patch Ids
76
77   for ( Int_t i=0; i<GetNofDEs(); i++ ) {
78     AliMpDetElement* detElement 
79       = AliMpDEManager::GetDetElement(GetDEId(i));
80     
81     for ( Int_t j=0; j<detElement->GetNofBusPatches(); j++ )
82       fBusPatchIds.Add(detElement->GetBusPatchId(j));
83   }
84 }      
85
86 //
87 // public methods
88 //
89
90 //______________________________________________________________________________
91 Bool_t AliMpDDL::AddDE(Int_t detElemId)
92 {
93 /// Add detection element with given detElemId.
94 /// Return true if the detection element was added
95
96   if ( ! AliMpDEManager::IsValidDetElemId(detElemId) ) return false;
97  
98   if ( HasDEId(detElemId) ) {
99     AliWarningStream() 
100       << "Detection element Id = " << detElemId << " already present."
101       << endl;
102     return false;
103   }    
104
105   AliDebugStream(3) << "Adding detElemId " << detElemId << endl;
106
107   fDEIds.Add(detElemId);
108   return true;
109 }   
110
111 //______________________________________________________________________________
112 Bool_t AliMpDDL::AddTriggerCrate(Int_t crateId)
113 {
114 /// Add trigger crate with given crateId.
115 /// Return true if the trigger crate was added
116
117   if ( HasTriggerCrateId(crateId) ) {
118     AliWarningStream() 
119         << "Trigger crate Id = " << crateId << " already present."
120         << endl;
121     return false;
122   }    
123   
124   fTriggerCrateIds.Add(crateId);
125
126   return true;
127 }      
128
129 //______________________________________________________________________________
130 Int_t AliMpDDL::GetNofDEs() const
131 {  
132 /// Return the number of detection elements connected to this DDL
133
134   return fDEIds.GetSize(); 
135 }
136
137 //______________________________________________________________________________
138 Int_t  AliMpDDL::GetDEId(Int_t index) const
139 {  
140 /// Return the detection element by index (in loop)
141
142   return fDEIds.GetValue(index); 
143 }
144
145 //______________________________________________________________________________
146 Bool_t  AliMpDDL::HasDEId(Int_t detElemId) const
147 {  
148 /// Return true if the detection element Id is present
149
150   return fDEIds.HasValue(detElemId);; 
151 }
152
153 //______________________________________________________________________________
154 Int_t AliMpDDL::GetNofBusPatches() const
155 {  
156 /// Return the number of detection elements connected to this DDL
157
158   return fBusPatchIds.GetSize(); 
159 }
160
161 //______________________________________________________________________________
162 Int_t  AliMpDDL::GetBusPatchId(Int_t index) const
163 {  
164 /// Return the detection element by index (in loop)
165
166   return fBusPatchIds.GetValue(index); 
167 }
168
169 //______________________________________________________________________________
170 Bool_t  AliMpDDL::HasBusPatchId(Int_t busPatchId) const
171 {  
172 /// Return true if the detection element Id is present
173
174   return fBusPatchIds.HasValue(busPatchId);; 
175 }
176
177 //______________________________________________________________________________
178 Int_t AliMpDDL::GetNofTriggerCrates() const
179 {  
180 /// Return the number of trigger crate connected to this DDL
181
182   return fTriggerCrateIds.GetSize(); 
183 }
184
185 //______________________________________________________________________________
186 Int_t  AliMpDDL::GetTriggerCrateId(Int_t index) const
187 {  
188 /// Return the trigger crate by index (in loop)
189
190   return fTriggerCrateIds.GetValue(index); 
191 }
192
193 //______________________________________________________________________________
194 Bool_t  AliMpDDL::HasTriggerCrateId(Int_t triggerCrateId) const
195 {  
196 /// Return true if the trigger crate Id is present
197
198   return fTriggerCrateIds.HasValue(triggerCrateId);
199 }
200
201 //____________________________________________________________________
202 Int_t AliMpDDL::GetMaxDsp() const
203 {
204 /// calculates the number of DSP 
205
206   Int_t iBusPerBlk = fBusPatchIds.GetSize()/2; //per block
207
208   Int_t iDspMax =  iBusPerBlk/5; //number max of DSP per block
209   if (iBusPerBlk % 5 != 0)
210     iDspMax += 1;
211
212   return iDspMax;
213 }
214
215 //____________________________________________________________________
216 void AliMpDDL::GetBusPerDsp(Int_t* iBusPerDSP) 
217 const
218 {
219 /// calculates buspatch per block
220
221   Int_t iBusPerBlk = fBusPatchIds.GetSize()/2; //per block
222
223   for (Int_t i = 0; i < GetMaxDsp(); i++) {
224     if ((iBusPerBlk -= 5) > 0) 
225       iBusPerDSP[i] = 5;
226     else 
227       iBusPerDSP[i] = iBusPerBlk + 5;
228   }
229 }
230