Improved quitting Event Display with close button.
[u/mrichter/AliRoot.git] / TRD / AliTRDpadPlane.h
CommitLineData
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//_____________________________________________________________________________
22class AliTRDpadPlane : public TObject {
23
24 public:
25
26 AliTRDpadPlane();
053767a4 27 AliTRDpadPlane(Int_t layer, Int_t stack);
e0d47c25 28 virtual ~AliTRDpadPlane();
e0d47c25 29 virtual void Copy(TObject &p) const;
30
053767a4 31 void SetLayer(Int_t l) { fLayer = l; };
32 void SetStack(Int_t s) { fStack = s; };
f162af62 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; };
58897a75 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; };
f18d4f83 53 void SetTiltingAngle(Double_t t);
f162af62 54
98ce8151 55 Int_t GetPadRowNumber(Double_t z) const;
4329977a 56 Int_t GetPadRowNumberROC(Double_t z) const;
57 Int_t GetPadColNumber(Double_t rphi) const;
58
6d17a2b7 59 Double_t GetTiltOffset(Double_t rowOffset) const
60 { return fTiltingTan * (rowOffset - 0.5*fLengthIPad); };
4329977a 61
98ce8151 62 Double_t GetPadRowOffset(Int_t row, Double_t z) const
a5cadd36 63 { if ((row < 0) || (row >= fNrows))
64 return -1.0;
023b669c 65 else
4329977a 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
a5cadd36 71 return fPadRow[row] - z; };
72
98ce8151 73 Double_t GetPadColOffset(Int_t col, Double_t rphi) const
a5cadd36 74 { if ((col < 0) || (col >= fNcols))
75 return -1.0;
76 else
023b669c 77 return rphi - fPadCol[col]; };
a5cadd36 78
58897a75 79 Double_t GetTiltingAngle() const { return fTiltingAngle; };
a5cadd36 80
58897a75 81 Int_t GetNrows() const { return fNrows; };
82 Int_t GetNcols() const { return fNcols; };
a5cadd36 83
4329977a 84 Double_t GetRow0() const { return fPadRow[0] + fPadRowSMOffset; };
58897a75 85 Double_t GetRow0ROC() const { return fPadRow[0]; };
86 Double_t GetCol0() const { return fPadCol[0]; };
a5cadd36 87
4329977a 88 Double_t GetRowEnd() const { return fPadRow[fNrows-1] - fLengthOPad + fPadRowSMOffset; };
89 Double_t GetRowEndROC() const { return fPadRow[fNrows-1] - fLengthOPad; };
023b669c 90 Double_t GetColEnd() const { return fPadCol[fNcols-1] + fWidthOPad; };
a5cadd36 91
4329977a 92 Double_t GetRowPos(Int_t row) const { return fPadRow[row] + fPadRowSMOffset; };
58897a75 93 Double_t GetRowPosROC(Int_t row) const { return fPadRow[row]; };
94 Double_t GetColPos(Int_t col) const { return fPadCol[col]; };
e0d47c25 95
3becff3c 96 Double_t GetRowSize(Int_t row) const { if ((row == 0) || (row == fNrows-1))
a5cadd36 97 return fLengthOPad;
98 else
99 return fLengthIPad; };
3becff3c 100 Double_t GetColSize(Int_t col) const { if ((col == 0) || (col == fNcols-1))
a5cadd36 101 return fWidthOPad;
102 else
58897a75 103 return fWidthIPad; };
f162af62 104
58897a75 105 Double_t GetLengthRim() const { return fLengthRim; };
106 Double_t GetWidthRim() const { return fWidthRim; };
a5cadd36 107
58897a75 108 Double_t GetRowSpacing() const { return fRowSpacing; };
109 Double_t GetColSpacing() const { return fColSpacing; };
e0d47c25 110
58897a75 111 Double_t GetLengthOPad() const { return fLengthOPad; };
112 Double_t GetLengthIPad() const { return fLengthIPad; };
f162af62 113
58897a75 114 Double_t GetWidthOPad() const { return fWidthOPad; };
115 Double_t GetWidthIPad() const { return fWidthIPad; };
116
117 Double_t GetAnodeWireOffset() const { return fAnodeWireOffset; };
f162af62 118
119 protected:
e0d47c25 120
053767a4 121 Int_t fLayer; // Layer number
122 Int_t fStack; // Stack number
e0d47c25 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
4ffb371b 143 Double_t fTiltingTan; // Tangens of pad tilting angle
e0d47c25 144
f162af62 145 Double_t *fPadRow; // Pad border positions in row direction
146 Double_t *fPadCol; // Pad border positions in column direction
e0d47c25 147
4329977a 148 Double_t fPadRowSMOffset; // To be added to translate local ROC system to local SM system
149
58897a75 150 Double_t fAnodeWireOffset; // Distance of first anode wire from pad edge
151
3824585d 152 private:
153 AliTRDpadPlane(const AliTRDpadPlane &p);
154 AliTRDpadPlane &operator=(const AliTRDpadPlane &p);
155
58897a75 156 ClassDef(AliTRDpadPlane,6) // TRD ROC pad plane
e0d47c25 157
158};
159
160#endif