]>
Commit | Line | Data |
---|---|---|
1 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
2 | * See cxx source for full Copyright notice */ | |
3 | ||
4 | // $Id$ | |
5 | // $MpId: AliMpPCB.h,v 1.9 2006/05/24 13:58:24 ivana Exp $ | |
6 | ||
7 | /// \ingroup slat | |
8 | /// \class AliMpPCB | |
9 | /// \brief A PCB for station 3,4 or 5 | |
10 | /// | |
11 | // Author: Laurent Aphecetche | |
12 | ||
13 | #ifndef ALIMPPCB_H | |
14 | #define ALIMPPCB_H | |
15 | ||
16 | #ifndef ROOT_TObject | |
17 | # include "TObject.h" | |
18 | #endif | |
19 | ||
20 | #ifndef ROOT_TString | |
21 | # include "TString.h" | |
22 | #endif | |
23 | ||
24 | # ifndef ROOT_TArraI | |
25 | # include "TArrayI.h" | |
26 | # endif | |
27 | ||
28 | #include "AliMpContainers.h" | |
29 | ||
30 | #ifdef WITH_ROOT | |
31 | # ifndef ROOT_TObjArray | |
32 | # include "TObjArray.h" | |
33 | # endif | |
34 | #else | |
35 | # include <vector> | |
36 | #endif | |
37 | ||
38 | #ifndef ALI_MP_VPAD_ITERATOR_H | |
39 | # include "AliMpVPadIterator.h" | |
40 | #endif | |
41 | ||
42 | #ifndef ALI_MP_AREA_H | |
43 | # include "AliMpArea.h" | |
44 | #endif | |
45 | ||
46 | class AliMpSlatMotifMap; | |
47 | class AliMpMotifPosition; | |
48 | class AliMpMotifType; | |
49 | class AliMpMotifSpecial; | |
50 | ||
51 | class AliMpPCB : public TObject | |
52 | { | |
53 | public: | |
54 | ||
55 | AliMpPCB(); | |
56 | /** Ctor. The sizes are given in mm. | |
57 | See full doc for the meaning of enveloppe parameters. | |
58 | */ | |
59 | AliMpPCB(AliMpSlatMotifMap* motifMap, | |
60 | const char* id, Double_t padSizeX, Double_t padSizeY, | |
61 | Double_t enveloppeSizeX, Double_t enveloppeSizeY); | |
62 | ||
63 | AliMpPCB(const char* id, AliMpMotifSpecial* ms); | |
64 | ||
65 | AliMpPCB(const AliMpPCB& o); | |
66 | AliMpPCB& operator=(const AliMpPCB& o); | |
67 | ||
68 | virtual ~AliMpPCB(); | |
69 | ||
70 | TObject* Clone(const char* newname="") const; | |
71 | ||
72 | /** Duplicate this PCB. The copy has the manuids of its motifs changed | |
73 | according to the manuid vector, and its x-offset according to ix | |
74 | and x. | |
75 | */ | |
76 | AliMpPCB* Clone(const TArrayI& manuids, | |
77 | Int_t ixOffset, Double_t xOffset) const; | |
78 | ||
79 | void Copy(TObject& o) const; | |
80 | ||
81 | /** Add a motif to this PCB. (ix,iy) are the coordinates of one corner | |
82 | of the motif, in pad-units. Which corner depends on the sign(s) of (ix,iy): | |
83 | (ix>0,iy>0) : bottom-left corner | |
84 | (ix<0,iy>0) : bottom-right corner | |
85 | (ix<0,iy<0) : top-right corner | |
86 | (ix>0,iy<0) : top-left corner. | |
87 | */ | |
88 | void Add(AliMpMotifType* motifType, Int_t ix, Int_t iy); | |
89 | ||
90 | AliMpArea Area() const; | |
91 | ||
92 | void Print(Option_t* option = "") const; | |
93 | ||
94 | Bool_t HasMotifPositionID(Int_t manuId) const; | |
95 | ||
96 | Double_t ActiveDX() const; | |
97 | Double_t ActiveDY() const; | |
98 | ||
99 | Double_t DX() const; | |
100 | Double_t DY() const; | |
101 | ||
102 | Double_t X() const; | |
103 | Double_t Y() const; | |
104 | ||
105 | Double_t Xmin() const; | |
106 | Double_t Xmax() const; | |
107 | ||
108 | Double_t ActiveXmin() const; | |
109 | Double_t ActiveXmax() const; | |
110 | ||
111 | Double_t Ymin() const; | |
112 | Double_t Ymax() const; | |
113 | ||
114 | Double_t PadSizeX() const; | |
115 | Double_t PadSizeY() const; | |
116 | ||
117 | /** Returns the i-th motifPosition of this PCB. | |
118 | i : [0..GetSize()-1] | |
119 | */ | |
120 | AliMpMotifPosition* GetMotifPosition(Int_t i) const; | |
121 | ||
122 | /// Returns the motifPosition which contains the pad at (ix,iy). | |
123 | AliMpMotifPosition* FindMotifPosition(Int_t ix, Int_t iy) const; | |
124 | ||
125 | /// Returns the motifPosition which contains the pad at (x,y). | |
126 | AliMpMotifPosition* FindMotifPosition(Double_t x, Double_t y) const; | |
127 | ||
128 | /// The number of motifs, aka manus. | |
129 | Int_t GetSize() const; | |
130 | ||
131 | Int_t GetNofPadsX() const; | |
132 | Int_t GetNofPadsY() const; | |
133 | ||
134 | Int_t Ixmin() const; | |
135 | Int_t Ixmax() const; | |
136 | ||
137 | Int_t Iymin() const; | |
138 | Int_t Iymax() const; | |
139 | ||
140 | const char* GetID() const; | |
141 | ||
142 | /// Return the number of pads in this PCB | |
143 | Int_t NofPads() const { return fNofPads; } | |
144 | ||
145 | /// Return the motif map | |
146 | AliMpSlatMotifMap* MotifMap() const { return fMotifMap; } | |
147 | ||
148 | void Save() const; | |
149 | ||
150 | private: | |
151 | TString fId; ///< PCB name | |
152 | Double_t fPadSizeX; ///< x-size of this PCB's pads (cm) | |
153 | Double_t fPadSizeY; ///< y-size of this PCB's pads (cm) | |
154 | Double_t fEnveloppeSizeX; ///< max x-size of this PCB (cm) | |
155 | Double_t fEnveloppeSizeY; ///< max y-size of this PCB (cm) | |
156 | Double_t fXoffset; ///< x-offset = x of first pad of this PCB (cm) | |
157 | Double_t fActiveXmin; ///< min x of an actual pad in this PCB (cm) | |
158 | Double_t fActiveXmax; ///< max x of an actual pad in this PCB (cm) | |
159 | Int_t fIxmin; ///< min pad index in x | |
160 | Int_t fIxmax; ///< max pad index in x | |
161 | Int_t fIymin; ///< min pad index in y | |
162 | Int_t fIymax; ///< max pad index in y | |
163 | #ifdef WITH_ROOT | |
164 | TObjArray fMotifPositions; ///< array of motifs | |
165 | #else | |
166 | std::vector<AliMpMotifPosition*> fMotifPositions; ///< array of motif positions | |
167 | #endif | |
168 | Int_t fNofPads; ///< number of pads in this PCB | |
169 | AliMpSlatMotifMap* fMotifMap; ///< to keep track of things to avoid duplications of motif and motiftypes, and get proper deletion | |
170 | ||
171 | ClassDef(AliMpPCB,3) // A PCB for Stations 3,4,5 | |
172 | }; | |
173 | ||
174 | #endif |