]>
Commit | Line | Data |
---|---|---|
1 | #ifndef ALITRDPADPLANE_H | |
2 | #define ALITRDPADPLANE_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
8 | //////////////////////////////////////////////////////////////////////////// | |
9 | // // | |
10 | // TRD pad plane class // | |
11 | // // | |
12 | // Contains the information on ideal pad positions, pad dimensions, // | |
13 | // tilting angle, etc. // | |
14 | // It also provides methods to identify the current pad number from // | |
15 | // local tracking coordinates. // | |
16 | // // | |
17 | //////////////////////////////////////////////////////////////////////////// | |
18 | ||
19 | #include <TObject.h> | |
20 | ||
21 | //_____________________________________________________________________________ | |
22 | class AliTRDpadPlane : public TObject { | |
23 | ||
24 | public: | |
25 | ||
26 | AliTRDpadPlane(); | |
27 | AliTRDpadPlane(Int_t layer, Int_t stack); | |
28 | virtual ~AliTRDpadPlane(); | |
29 | virtual void Copy(TObject &p) const; | |
30 | ||
31 | void SetLayer(Int_t l) { fLayer = l; }; | |
32 | void SetStack(Int_t s) { fStack = s; }; | |
33 | void SetRowSpacing(Double_t s) { fRowSpacing = s; }; | |
34 | void SetColSpacing(Double_t s) { fColSpacing = s; }; | |
35 | void SetLengthRim(Double_t l) { fLengthRim = l; }; | |
36 | void SetWidthRim(Double_t w) { fWidthRim = w; }; | |
37 | void SetNcols(Int_t n) { fNcols = n; | |
38 | if (fPadCol) delete[] fPadCol; | |
39 | fPadCol = new Double_t[fNcols]; }; | |
40 | void SetNrows(Int_t n) { fNrows = n; | |
41 | if (fPadRow) delete[] fPadRow; | |
42 | fPadRow = new Double_t[fNrows]; }; | |
43 | void SetPadCol(Int_t ic, Double_t c) { if (ic < fNcols) fPadCol[ic] = c; }; | |
44 | void SetPadRow(Int_t ir, Double_t r) { if (ir < fNrows) fPadRow[ir] = r; }; | |
45 | void SetLength(Double_t l) { fLength = l; }; | |
46 | void SetWidth(Double_t w) { fWidth = w; }; | |
47 | void SetLengthOPad(Double_t l) { fLengthOPad = l; }; | |
48 | void SetWidthOPad(Double_t w) { fWidthOPad = w; }; | |
49 | void SetLengthIPad(Double_t l) { fLengthIPad = l; }; | |
50 | void SetWidthIPad(Double_t w) { fWidthIPad = w; }; | |
51 | void SetPadRowSMOffset(Double_t o) { fPadRowSMOffset = o; }; | |
52 | void SetAnodeWireOffset(Float_t o) { fAnodeWireOffset = o; }; | |
53 | void SetTiltingAngle(Double_t t); | |
54 | ||
55 | Int_t GetPadRowNumber(Double_t z) const; | |
56 | Int_t GetPadRowNumberROC(Double_t z) const; | |
57 | Int_t GetPadColNumber(Double_t rphi) const; | |
58 | ||
59 | Double_t GetTiltOffset(Double_t rowOffset) const | |
60 | { return fTiltingTan * (rowOffset - 0.5*fLengthIPad); }; | |
61 | ||
62 | Double_t GetPadRowOffset(Int_t row, Double_t z) const | |
63 | { if ((row < 0) || (row >= fNrows)) | |
64 | return -1.0; | |
65 | else | |
66 | return fPadRow[row] + fPadRowSMOffset - z; }; | |
67 | Double_t GetPadRowOffsetROC(Int_t row, Double_t z) const | |
68 | { if ((row < 0) || (row >= fNrows)) | |
69 | return -1.0; | |
70 | else | |
71 | return fPadRow[row] - z; }; | |
72 | ||
73 | Double_t GetPadColOffset(Int_t col, Double_t rphi) const | |
74 | { if ((col < 0) || (col >= fNcols)) | |
75 | return -1.0; | |
76 | else | |
77 | return rphi - fPadCol[col]; }; | |
78 | ||
79 | Double_t GetTiltingAngle() const { return fTiltingAngle; }; | |
80 | ||
81 | Int_t GetNrows() const { return fNrows; }; | |
82 | Int_t GetNcols() const { return fNcols; }; | |
83 | ||
84 | Double_t GetRow0() const { return fPadRow[0] + fPadRowSMOffset; }; | |
85 | Double_t GetRow0ROC() const { return fPadRow[0]; }; | |
86 | Double_t GetCol0() const { return fPadCol[0]; }; | |
87 | ||
88 | Double_t GetRowEnd() const { return fPadRow[fNrows-1] - fLengthOPad + fPadRowSMOffset; }; | |
89 | Double_t GetRowEndROC() const { return fPadRow[fNrows-1] - fLengthOPad; }; | |
90 | Double_t GetColEnd() const { return fPadCol[fNcols-1] + fWidthOPad; }; | |
91 | ||
92 | Double_t GetRowPos(Int_t row) const { return fPadRow[row] + fPadRowSMOffset; }; | |
93 | Double_t GetRowPosROC(Int_t row) const { return fPadRow[row]; }; | |
94 | Double_t GetColPos(Int_t col) const { return fPadCol[col]; }; | |
95 | ||
96 | Double_t GetRowSize(Int_t row) const { if ((row == 0) || (row == fNrows-1)) | |
97 | return fLengthOPad; | |
98 | else | |
99 | return fLengthIPad; }; | |
100 | Double_t GetColSize(Int_t col) const { if ((col == 0) || (col == fNcols-1)) | |
101 | return fWidthOPad; | |
102 | else | |
103 | return fWidthIPad; }; | |
104 | ||
105 | Double_t GetLengthRim() const { return fLengthRim; }; | |
106 | Double_t GetWidthRim() const { return fWidthRim; }; | |
107 | ||
108 | Double_t GetRowSpacing() const { return fRowSpacing; }; | |
109 | Double_t GetColSpacing() const { return fColSpacing; }; | |
110 | ||
111 | Double_t GetLengthOPad() const { return fLengthOPad; }; | |
112 | Double_t GetLengthIPad() const { return fLengthIPad; }; | |
113 | ||
114 | Double_t GetWidthOPad() const { return fWidthOPad; }; | |
115 | Double_t GetWidthIPad() const { return fWidthIPad; }; | |
116 | ||
117 | Double_t GetAnodeWireOffset() const { return fAnodeWireOffset; }; | |
118 | ||
119 | protected: | |
120 | ||
121 | Int_t fLayer; // Layer number | |
122 | Int_t fStack; // Stack number | |
123 | ||
124 | Double_t fLength; // Length of pad plane in z-direction (row) | |
125 | Double_t fWidth; // Width of pad plane in rphi-direction (col) | |
126 | ||
127 | Double_t fLengthRim; // Length of the rim in z-direction (row) | |
128 | Double_t fWidthRim; // Width of the rim in rphi-direction (col) | |
129 | ||
130 | Double_t fLengthOPad; // Length of an outer pad in z-direction (row) | |
131 | Double_t fWidthOPad; // Width of an outer pad in rphi-direction (col) | |
132 | ||
133 | Double_t fLengthIPad; // Length of an inner pad in z-direction (row) | |
134 | Double_t fWidthIPad; // Width of an inner pad in rphi-direction (col) | |
135 | ||
136 | Double_t fRowSpacing; // Spacing between the pad rows | |
137 | Double_t fColSpacing; // Spacing between the pad columns | |
138 | ||
139 | Int_t fNrows; // Number of rows | |
140 | Int_t fNcols; // Number of columns | |
141 | ||
142 | Double_t fTiltingAngle; // Pad tilting angle | |
143 | Double_t fTiltingTan; // Tangens of pad tilting angle | |
144 | ||
145 | Double_t *fPadRow; // Pad border positions in row direction | |
146 | Double_t *fPadCol; // Pad border positions in column direction | |
147 | ||
148 | Double_t fPadRowSMOffset; // To be added to translate local ROC system to local SM system | |
149 | ||
150 | Double_t fAnodeWireOffset; // Distance of first anode wire from pad edge | |
151 | ||
152 | private: | |
153 | AliTRDpadPlane(const AliTRDpadPlane &p); | |
154 | AliTRDpadPlane &operator=(const AliTRDpadPlane &p); | |
155 | ||
156 | ClassDef(AliTRDpadPlane,6) // TRD ROC pad plane | |
157 | ||
158 | }; | |
159 | ||
160 | #endif |