1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
5 // $MpId: AliMpPCB.h,v 1.9 2006/05/24 13:58:24 ivana Exp $
9 /// \brief A PCB for station 3,4 or 5
11 // Author: Laurent Aphecetche
28 #include "AliMpContainers.h"
31 # ifndef ROOT_TObjArray
32 # include "TObjArray.h"
38 #ifndef ALI_MP_VPAD_ITERATOR_H
39 # include "AliMpVPadIterator.h"
43 # include "AliMpArea.h"
46 class AliMpSlatMotifMap;
47 class AliMpMotifPosition;
49 class AliMpMotifSpecial;
51 class AliMpPCB : public TObject
56 /// Type def for the array size
59 /// Type def for the array size
60 typedef UInt_t Size_t;
64 /** Ctor. The sizes are given in mm.
65 See full doc for the meaning of enveloppe parameters.
67 AliMpPCB(AliMpSlatMotifMap* motifMap,
68 const char* id, Double_t padSizeX, Double_t padSizeY,
69 Double_t enveloppeSizeX, Double_t enveloppeSizeY);
71 AliMpPCB(const char* id, AliMpMotifSpecial* ms);
73 AliMpPCB(const AliMpPCB& o);
74 AliMpPCB& operator=(const AliMpPCB& o);
78 TObject* Clone(const char* newname="") const;
80 /** Duplicate this PCB. The copy has the manuids of its motifs changed
81 according to the manuid vector, and its x-offset according to ix
84 AliMpPCB* Clone(const TArrayI& manuids,
85 Int_t ixOffset, Double_t xOffset) const;
87 void Copy(TObject& o) const;
89 /** Add a motif to this PCB. (ix,iy) are the coordinates of one corner
90 of the motif, in pad-units. Which corner depends on the sign(s) of (ix,iy):
91 (ix>0,iy>0) : bottom-left corner
92 (ix<0,iy>0) : bottom-right corner
93 (ix<0,iy<0) : top-right corner
94 (ix>0,iy<0) : top-left corner.
96 void Add(AliMpMotifType* motifType, Int_t ix, Int_t iy);
98 AliMpArea Area() const;
100 void Print(Option_t* option = "") const;
102 Bool_t HasMotifPositionID(Int_t manuId) const;
104 Double_t ActiveDX() const;
105 Double_t ActiveDY() const;
113 Double_t Xmin() const;
114 Double_t Xmax() const;
116 Double_t ActiveXmin() const;
117 Double_t ActiveXmax() const;
119 Double_t Ymin() const;
120 Double_t Ymax() const;
122 Double_t PadSizeX() const;
123 Double_t PadSizeY() const;
125 /** Returns the i-th motifPosition of this PCB.
128 AliMpMotifPosition* GetMotifPosition(Size_t i) const;
130 /// Returns the motifPosition which contains the pad at (ix,iy).
131 AliMpMotifPosition* FindMotifPosition(Int_t ix, Int_t iy) const;
133 /// Returns the motifPosition which contains the pad at (x,y).
134 AliMpMotifPosition* FindMotifPosition(Double_t x, Double_t y) const;
136 /// The number of motifs, aka manus.
137 Size_t GetSize() const;
139 Int_t GetNofPadsX() const;
140 Int_t GetNofPadsY() const;
148 const char* GetID() const;
150 /// Return the number of pads in this PCB
151 Int_t NofPads() const { return fNofPads; }
153 /// Return the motif map
154 AliMpSlatMotifMap* MotifMap() const { return fMotifMap; }
159 TString fId; ///< PCB name
160 Double_t fPadSizeX; ///< x-size of this PCB's pads (cm)
161 Double_t fPadSizeY; ///< y-size of this PCB's pads (cm)
162 Double_t fEnveloppeSizeX; ///< max x-size of this PCB (cm)
163 Double_t fEnveloppeSizeY; ///< max y-size of this PCB (cm)
164 Double_t fXoffset; ///< x-offset = x of first pad of this PCB (cm)
165 Double_t fActiveXmin; ///< min x of an actual pad in this PCB (cm)
166 Double_t fActiveXmax; ///< max x of an actual pad in this PCB (cm)
167 Int_t fIxmin; ///< min pad index in x
168 Int_t fIxmax; ///< max pad index in x
169 Int_t fIymin; ///< min pad index in y
170 Int_t fIymax; ///< max pad index in y
172 TObjArray fMotifPositions; ///< array of motifs
174 std::vector<AliMpMotifPosition*> fMotifPositions; ///< array of motif positions
176 Int_t fNofPads; ///< number of pads in this PCB
177 AliMpSlatMotifMap* fMotifMap; ///< to keep track of things to avoid duplications of motif and motiftypes, and get proper deletion
179 ClassDef(AliMpPCB,3) // A PCB for Stations 3,4,5