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.4 2005/09/19 19:01:09 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 class AliMpMotifPosition;
40 class AliMpMotifSpecial;
42 class AliMpPCB : public TObject
49 typedef UInt_t Size_t;
53 /** Ctor. The sizes are given in mm.
54 enveloppe is due to the fact that not all PCBs are "full" of pads,
55 e.g. the rounded or short ones miss some pads, but the enveloppe
56 is a virtual size that should be constant across the slats,
58 It's a usefull notion to compute e.g. slat center in a uniform way,
59 considering that a slat is N PCBs, of the same "virtual" size, that of
62 AliMpPCB(const char* id, Double_t padSizeX, Double_t padSizeY,
63 Double_t enveloppeSizeX, Double_t enveloppeSizeY);
65 AliMpPCB(const char* id, AliMpMotifSpecial* ms);
67 AliMpPCB(const AliMpPCB&);
68 AliMpPCB& operator=(const AliMpPCB&);
72 TObject* Clone(const char* newname="") const;
74 /** Duplicate this PCB. The copy has the manuids of its motifs changed
75 according to the manuid vector, and its x-offset according to ix
78 AliMpPCB* Clone(const TArrayI& manuids,
79 Int_t ixOffset, Double_t xOffset) const;
81 void Copy(TObject&) const;
83 /** Add a motif to this PCB. (ix,iy) are the coordinates of one corner
84 of the motif, in pad-units. Which corner depends on the sign(s) of (ix,iy):
85 (ix>0,iy>0) : bottom-left corner
86 (ix<0,iy>0) : bottom-right corner
87 (ix<0,iy<0) : top-right corner
88 (ix>0,iy<0) : top-left corner.
90 void Add(AliMpMotifType* motifType, Int_t ix, Int_t iy);
92 void Print(Option_t* option = "") const;
94 Double_t ActiveDX() const;
95 Double_t ActiveDY() const;
103 Double_t Xmin() const;
104 Double_t Xmax() const;
106 Double_t ActiveXmin() const;
107 Double_t ActiveXmax() const;
109 Double_t Ymin() const;
110 Double_t Ymax() const;
112 Double_t PadSizeX() const;
113 Double_t PadSizeY() const;
115 /** Returns the i-th motifPosition of this PCB.
118 AliMpMotifPosition* GetMotifPosition(Size_t i) const;
120 /// Returns the motifPosition which contains the pad at (ix,iy).
121 AliMpMotifPosition* FindMotifPosition(Int_t ix, Int_t iy) const;
123 /// Returns the motifPosition which contains the pad at (x,y).
124 AliMpMotifPosition* FindMotifPosition(Double_t x, Double_t y) const;
126 /// The number of motifs, aka manus.
127 Size_t GetSize() const;
129 Int_t GetNofPadsX() const;
130 Int_t GetNofPadsY() const;
138 const char* GetID() const;
144 Double_t fEnveloppeSizeX;
145 Double_t fEnveloppeSizeY;
147 Double_t fActiveXmin;
148 Double_t fActiveXmax;
156 std::vector<AliMpMotifPosition*> fMotifs;
159 ClassDef(AliMpPCB,1) // A PCB for Stations 3,4,5