e0d47c25 |
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 | |
f162af62 |
6 | /* $Id$ */ |
e0d47c25 |
7 | |
023b669c |
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 | //////////////////////////////////////////////////////////////////////////// |
e0d47c25 |
18 | |
19 | #include <TObject.h> |
20 | |
e0d47c25 |
21 | //_____________________________________________________________________________ |
22 | class AliTRDpadPlane : public TObject { |
23 | |
24 | public: |
25 | |
26 | AliTRDpadPlane(); |
053767a4 |
27 | AliTRDpadPlane(Int_t layer, Int_t stack); |
e0d47c25 |
28 | AliTRDpadPlane(const AliTRDpadPlane &p); |
29 | virtual ~AliTRDpadPlane(); |
30 | AliTRDpadPlane &operator=(const AliTRDpadPlane &p); |
31 | virtual void Copy(TObject &p) const; |
32 | |
053767a4 |
33 | void SetLayer(Int_t l) { fLayer = l; }; |
34 | void SetStack(Int_t s) { fStack = s; }; |
f162af62 |
35 | void SetRowSpacing(Double_t s) { fRowSpacing = s; }; |
36 | void SetColSpacing(Double_t s) { fColSpacing = s; }; |
37 | void SetLengthRim(Double_t l) { fLengthRim = l; }; |
38 | void SetWidthRim(Double_t w) { fWidthRim = w; }; |
39 | void SetNcols(Int_t n) { fNcols = n; |
40 | if (fPadCol) delete[] fPadCol; |
41 | fPadCol = new Double_t[fNcols]; }; |
42 | void SetNrows(Int_t n) { fNrows = n; |
43 | if (fPadRow) delete[] fPadRow; |
44 | fPadRow = new Double_t[fNrows]; }; |
45 | void SetPadCol(Int_t ic, Double_t c) { if (ic < fNcols) fPadCol[ic] = c; }; |
46 | void SetPadRow(Int_t ir, Double_t r) { if (ir < fNrows) fPadRow[ir] = r; }; |
47 | void SetLength(Double_t l) { fLength = l; }; |
48 | void SetWidth(Double_t w) { fWidth = w; }; |
49 | void SetLengthOPad(Double_t l) { fLengthOPad = l; }; |
50 | void SetWidthOPad(Double_t w) { fWidthOPad = w; }; |
51 | void SetLengthIPad(Double_t l) { fLengthIPad = l; }; |
52 | void SetWidthIPad(Double_t w) { fWidthIPad = w; }; |
f162af62 |
53 | void SetPadRowSMOffset(Double_t o) { fPadRowSMOffset = o; }; |
f18d4f83 |
54 | void SetTiltingAngle(Double_t t); |
f162af62 |
55 | |
98ce8151 |
56 | Int_t GetPadRowNumber(Double_t z) const; |
4329977a |
57 | Int_t GetPadRowNumberROC(Double_t z) const; |
58 | Int_t GetPadColNumber(Double_t rphi) const; |
59 | |
6d17a2b7 |
60 | Double_t GetTiltOffset(Double_t rowOffset) const |
61 | { return fTiltingTan * (rowOffset - 0.5*fLengthIPad); }; |
4329977a |
62 | |
98ce8151 |
63 | Double_t GetPadRowOffset(Int_t row, Double_t z) const |
a5cadd36 |
64 | { if ((row < 0) || (row >= fNrows)) |
65 | return -1.0; |
023b669c |
66 | else |
4329977a |
67 | return fPadRow[row] + fPadRowSMOffset - z; }; |
68 | Double_t GetPadRowOffsetROC(Int_t row, Double_t z) const |
69 | { if ((row < 0) || (row >= fNrows)) |
70 | return -1.0; |
71 | else |
a5cadd36 |
72 | return fPadRow[row] - z; }; |
73 | |
98ce8151 |
74 | Double_t GetPadColOffset(Int_t col, Double_t rphi) const |
a5cadd36 |
75 | { if ((col < 0) || (col >= fNcols)) |
76 | return -1.0; |
77 | else |
023b669c |
78 | return rphi - fPadCol[col]; }; |
a5cadd36 |
79 | |
80 | Double_t GetTiltingAngle() const { return fTiltingAngle; }; |
81 | |
82 | Int_t GetNrows() const { return fNrows; }; |
83 | Int_t GetNcols() const { return fNcols; }; |
84 | |
4329977a |
85 | Double_t GetRow0() const { return fPadRow[0] + fPadRowSMOffset; }; |
86 | Double_t GetRow0ROC() const { return fPadRow[0]; }; |
a5cadd36 |
87 | Double_t GetCol0() const { return fPadCol[0]; }; |
88 | |
4329977a |
89 | Double_t GetRowEnd() const { return fPadRow[fNrows-1] - fLengthOPad + fPadRowSMOffset; }; |
90 | Double_t GetRowEndROC() const { return fPadRow[fNrows-1] - fLengthOPad; }; |
023b669c |
91 | Double_t GetColEnd() const { return fPadCol[fNcols-1] + fWidthOPad; }; |
a5cadd36 |
92 | |
4329977a |
93 | Double_t GetRowPos(Int_t row) const { return fPadRow[row] + fPadRowSMOffset; }; |
94 | Double_t GetRowPosROC(Int_t row) const { return fPadRow[row]; }; |
3becff3c |
95 | Double_t GetColPos(Int_t col) const { return fPadCol[col]; }; |
e0d47c25 |
96 | |
3becff3c |
97 | Double_t GetRowSize(Int_t row) const { if ((row == 0) || (row == fNrows-1)) |
a5cadd36 |
98 | return fLengthOPad; |
99 | else |
100 | return fLengthIPad; }; |
3becff3c |
101 | Double_t GetColSize(Int_t col) const { if ((col == 0) || (col == fNcols-1)) |
a5cadd36 |
102 | return fWidthOPad; |
103 | else |
af26ce80 |
104 | return fWidthIPad; }; |
f162af62 |
105 | |
3becff3c |
106 | Double_t GetLengthRim() const { return fLengthRim; }; |
f162af62 |
107 | Double_t GetWidthRim() const { return fWidthRim; }; |
a5cadd36 |
108 | |
f162af62 |
109 | Double_t GetRowSpacing() const { return fRowSpacing; }; |
110 | Double_t GetColSpacing() const { return fColSpacing; }; |
e0d47c25 |
111 | |
f162af62 |
112 | Double_t GetLengthOPad() const { return fLengthOPad; }; |
113 | Double_t GetLengthIPad() const { return fLengthIPad; }; |
114 | |
115 | Double_t GetWidthOPad() const { return fWidthOPad; }; |
116 | Double_t GetWidthIPad() const { return fWidthIPad; }; |
117 | |
118 | protected: |
e0d47c25 |
119 | |
053767a4 |
120 | Int_t fLayer; // Layer number |
121 | Int_t fStack; // Stack number |
e0d47c25 |
122 | |
123 | Double_t fLength; // Length of pad plane in z-direction (row) |
124 | Double_t fWidth; // Width of pad plane in rphi-direction (col) |
125 | |
126 | Double_t fLengthRim; // Length of the rim in z-direction (row) |
127 | Double_t fWidthRim; // Width of the rim in rphi-direction (col) |
128 | |
129 | Double_t fLengthOPad; // Length of an outer pad in z-direction (row) |
130 | Double_t fWidthOPad; // Width of an outer pad in rphi-direction (col) |
131 | |
132 | Double_t fLengthIPad; // Length of an inner pad in z-direction (row) |
133 | Double_t fWidthIPad; // Width of an inner pad in rphi-direction (col) |
134 | |
135 | Double_t fRowSpacing; // Spacing between the pad rows |
136 | Double_t fColSpacing; // Spacing between the pad columns |
137 | |
138 | Int_t fNrows; // Number of rows |
139 | Int_t fNcols; // Number of columns |
140 | |
141 | Double_t fTiltingAngle; // Pad tilting angle |
4ffb371b |
142 | Double_t fTiltingTan; // Tangens of pad tilting angle |
e0d47c25 |
143 | |
f162af62 |
144 | Double_t *fPadRow; // Pad border positions in row direction |
145 | Double_t *fPadCol; // Pad border positions in column direction |
e0d47c25 |
146 | |
4329977a |
147 | Double_t fPadRowSMOffset; // To be added to translate local ROC system to local SM system |
148 | |
053767a4 |
149 | ClassDef(AliTRDpadPlane,5) // TRD ROC pad plane |
e0d47c25 |
150 | |
151 | }; |
152 | |
153 | #endif |