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