]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/mapping/AliMpTrigger.cxx
Fixing a backward compatibility issue
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpTrigger.cxx
CommitLineData
c667f499 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 purpeateose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
15
16// $Id$
13985652 17// $MpId: AliMpTrigger.cxx,v 1.4 2006/05/24 13:58:52 ivana Exp $
c667f499 18
19#include "AliMpTrigger.h"
1508d0f7 20#include "AliMpSlatSegmentation.h"
fc0b707c 21#include "AliMpConstants.h"
c667f499 22#include "AliLog.h"
23#include "AliMpSlat.h"
24
25#include "Riostream.h"
26#include "TArrayI.h"
27#include "TObjArray.h"
28
3d1463c8 29//-----------------------------------------------------------------------------
85fec35d 30/// \class AliMpTrigger
31///
32/// A trigger 'slat' object.
33/// It is to be viewed as a superposition of
34/// virtual layers of AliMpSlat objects. The need for more than one layer
35/// arise from the fact that a given local board deals with strips
36/// located in different detelem. So a given strip (pad) can have several
37/// "locations".
38///
39/// \author Laurent Aphecetche
3d1463c8 40//-----------------------------------------------------------------------------
85fec35d 41
13985652 42/// \cond CLASSIMP
c667f499 43ClassImp(AliMpTrigger)
13985652 44/// \endcond
c667f499 45
46namespace
47{
48 Bool_t IsEqual(Double_t a, Double_t b, Double_t precision)
49{
50 if (b)
51 {
52 Double_t diff = TMath::Abs(b-a)/TMath::Abs(b);
53 if ( diff < precision )
54 {
55 return kTRUE;
56 }
57 }
58 else
59 {
60 if ( !a ) return kTRUE;
61 }
62 return kFALSE;
63}
64}
65
66//_____________________________________________________________________________
67AliMpTrigger::AliMpTrigger()
1657f946 68: TObject(),
69 fId(""),
cddd101e 70 fPlaneType(AliMp::kNonBendingPlane),
1657f946 71 fSlats(0),
1508d0f7 72 fSlatSegmentations(0),
1657f946 73 fMaxNofPadsY(0),
74 fDX(0),
75 fDY(0)
c667f499 76{
71a2d3aa 77 /// default ctor
1508d0f7 78
79 AliDebugStream(1) << "this = " << this << endl;
fc0b707c 80
81 fSlats.SetOwner(kFALSE);
82 fSlatSegmentations.SetOwner(kTRUE);
c667f499 83}
84
85//_____________________________________________________________________________
cddd101e 86AliMpTrigger::AliMpTrigger(const char* slatType, AliMp::PlaneType bendingOrNot)
1657f946 87 : TObject(),
88 fId(slatType),
89 fPlaneType(bendingOrNot),
90 fSlats(0),
1508d0f7 91 fSlatSegmentations(0),
1657f946 92 fMaxNofPadsY(0),
93 fDX(0),
94 fDY(0)
c667f499 95{
71a2d3aa 96 /// normal ctor
1508d0f7 97
98 AliDebugStream(1) << "this = " << this << endl;
fc0b707c 99
100 fSlats.SetOwner(kFALSE);
101 fSlatSegmentations.SetOwner(kTRUE);
c667f499 102}
103
104//_____________________________________________________________________________
105AliMpTrigger::~AliMpTrigger()
106{
71a2d3aa 107 /// dtor
1508d0f7 108 AliDebugStream(1) << "this = " << this << endl;
109
1508d0f7 110 fSlatSegmentations.Delete();
c667f499 111}
112
113//_____________________________________________________________________________
114Bool_t
115AliMpTrigger::AdoptLayer(AliMpSlat* slat)
116{
71a2d3aa 117 /// Adopt (i.e. we become owner of that pointer) a slat, as
118 /// a layer of this trigger slat.
85fec35d 119
1508d0f7 120 AliDebug(2,Form("%s is adopting %s ",
c667f499 121 GetID(),slat->GetID()));
122
123 // Check that we keep our size constant.
fc0b707c 124
c667f499 125 if ( GetSize() > 0 &&
fc0b707c 126 ( !::IsEqual(slat->DX(),fDX,AliMpConstants::LengthTolerance()) ||
127 !::IsEqual(slat->DY(),fDY,AliMpConstants::LengthTolerance()) )
c667f499 128 )
129 {
fc0b707c 130 AliError(Form("In %s trying to add a layer (%e,%e) (layer #%d) "
131 "of a different size than mine (%e,%e)",
132 GetID(),slat->DX(),slat->DY(),fSlats.GetEntries(),
c667f499 133 fDX,fDY));
134 return kFALSE;
135 }
136 fSlats.Add(slat);
fc0b707c 137 Bool_t owner(kTRUE);
138 // the slat segmentation will be the owner of the slat, and will delete
139 // it when it'll be deleted itself
140 fSlatSegmentations.Add(new AliMpSlatSegmentation(slat,owner));
1b36647b 141 fMaxNofPadsY = TMath::Max(slat->GetMaxNofPadsY(),fMaxNofPadsY);
142 fDX = TMath::Max(fDX,slat->DX());
143 fDY = TMath::Max(fDY,slat->DY());
c667f499 144 return kTRUE;
145}
146
147//_____________________________________________________________________________
148Double_t
149AliMpTrigger::DX() const
150{
71a2d3aa 151 /// Returns the half-size in X (cm)
c667f499 152 return fDX;
153}
154
155//_____________________________________________________________________________
156Double_t
157AliMpTrigger::DY() const
158{
71a2d3aa 159 /// Returns the half-size in Y (cm)
c667f499 160 return fDY;
161}
162
163//_____________________________________________________________________________
164void
165AliMpTrigger::GetAllLocalBoardNumbers(TArrayI& lbn) const
166{
71a2d3aa 167 /// Fills lbn with the local board numbers we're dealing with
c667f499 168 Int_t n(0);
169 for ( Int_t i = 0; i < GetSize(); ++i )
170 {
171 n += GetLayer(i)->GetNofElectronicCards();
172 }
173
174 lbn.Set(n);
175
176 Int_t index(0);
177
178 for ( Int_t i = 0; i < GetSize(); ++i )
179 {
180 TArrayI slbn;
c9da0af9 181 GetLayer(i)->GetAllMotifPositionsIDs(slbn);
c667f499 182 for ( Int_t j = 0; j < slbn.GetSize(); ++j )
183 {
184 lbn[index] = slbn[j];
185 ++index;
186 }
187 }
188}
189
190//_____________________________________________________________________________
191const char*
192AliMpTrigger::GetID() const
193{
71a2d3aa 194 /// returns the id of this slat
c667f499 195 return fId.Data();
196}
197
198//_____________________________________________________________________________
199const char*
200AliMpTrigger::GetName() const
201{
71a2d3aa 202 /// returns the name (=id+bending/non-bending) of this slat
c667f499 203 TString name(GetID());
cddd101e 204 if ( fPlaneType == AliMp::kBendingPlane )
c667f499 205 {
206 name += ".Bending";
207 }
cddd101e 208 else if ( fPlaneType == AliMp::kNonBendingPlane )
c667f499 209 {
210 name += ".NonBending";
211 }
212 else
213 {
214 name += ".Invalid";
215 }
216 return name.Data();
217}
218
219//_____________________________________________________________________________
220AliMpSlat*
221AliMpTrigger::GetLayer(int layer) const
222{
71a2d3aa 223 /// Returns a given layer
c667f499 224 if ( IsLayerValid(layer) )
225 {
226 return (AliMpSlat*)fSlats.At(layer);
227 }
228 return 0;
229}
230
231//_____________________________________________________________________________
1508d0f7 232AliMpVSegmentation*
233AliMpTrigger::GetLayerSegmentation(int layer) const
234{
71a2d3aa 235 /// Returns a given layer
1508d0f7 236 if ( IsLayerValid(layer) )
237 {
238 return (AliMpSlatSegmentation*)fSlatSegmentations.At(layer);
239 }
240 return 0;
241}
242
243//_____________________________________________________________________________
c667f499 244Int_t
245AliMpTrigger::GetNofPadsX() const
246{
71a2d3aa 247 /// Returns the number of pad in x direction
c667f499 248 if ( !GetSize() ) return -1;
249 if ( GetLayer(0) )
250 {
251 return GetLayer(0)->GetNofPadsX();
252 }
253 return -1;
254}
255
256//_____________________________________________________________________________
257Int_t
258AliMpTrigger::GetMaxNofPadsY() const
259{
71a2d3aa 260 /// Maximum number of pads in y direction
c667f499 261 return fMaxNofPadsY;
262}
263
264//_____________________________________________________________________________
265Int_t
266AliMpTrigger::GetSize() const
267{
71a2d3aa 268 /// Number of layers
c667f499 269 return fSlats.GetEntriesFast();
270}
271
272//_____________________________________________________________________________
273Bool_t
274AliMpTrigger::IsLayerValid(int layer) const
275{
71a2d3aa 276 /// Whether a given layer index is valid or not
c667f499 277 if ( layer >= 0 && layer < GetSize() )
278 {
279 return kTRUE;
280 }
281 return kFALSE;
282}
283
c9da0af9 284//_____________________________________________________________________________
cddd101e 285AliMp::PlaneType
c9da0af9 286AliMpTrigger::PlaneType() const
287{
71a2d3aa 288 /// Bending or not
c9da0af9 289 return fPlaneType;
290}
291
c667f499 292//_____________________________________________________________________________
293void
294AliMpTrigger::Print(Option_t* opt) const
295{
71a2d3aa 296 /// Dump on screen
c667f499 297 cout << "AliMpTrigger::" << GetID();
298 if ( GetSize() == 0 )
299 {
300 cout << " Empty";
301 }
302 else if ( GetSize() > 1 )
303 {
304 cout << " Number of layers : " << GetSize();
305 }
306 else
307 {
308 cout << " One layer";
309 }
310 cout << endl;
311 for ( Int_t i = 0; i < GetSize(); ++i )
312 {
313 cout << " ";
314 GetLayer(i)->Print(opt);
315 }
316}
317
318//_____________________________________________________________________________
319//_____________________________________________________________________________
320//_____________________________________________________________________________
321//_____________________________________________________________________________