1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////////////////
20 // Describes a pad plane of a TRD ROC //
22 // Contains the information on pad postions, pad dimensions, //
23 // tilting angle, etc. //
24 // It also provides methods to identify the current pad number from //
25 // global coordinates. //
26 // The numbering and coordinates should follow the official convention //
27 // (see David Emschermanns note on TRD convention //
29 ///////////////////////////////////////////////////////////////////////////////
33 #include "AliTRDpadPlane.h"
35 ClassImp(AliTRDpadPlane)
37 //_____________________________________________________________________________
38 AliTRDpadPlane::AliTRDpadPlane()
62 // Default constructor
67 //_____________________________________________________________________________
68 AliTRDpadPlane::AliTRDpadPlane(Int_t layer, Int_t stack)
97 //_____________________________________________________________________________
98 AliTRDpadPlane::~AliTRDpadPlane()
101 // AliTRDpadPlane destructor
116 //_____________________________________________________________________________
117 void AliTRDpadPlane::Copy(TObject &p) const
125 ((AliTRDpadPlane &) p).fLayer = fLayer;
126 ((AliTRDpadPlane &) p).fStack = fStack;
128 ((AliTRDpadPlane &) p).fLength = fLength;
129 ((AliTRDpadPlane &) p).fWidth = fWidth;
130 ((AliTRDpadPlane &) p).fLengthRim = fLengthRim;
131 ((AliTRDpadPlane &) p).fWidthRim = fWidthRim;
132 ((AliTRDpadPlane &) p).fLengthOPad = fLengthOPad;
133 ((AliTRDpadPlane &) p).fWidthOPad = fWidthOPad;
134 ((AliTRDpadPlane &) p).fLengthIPad = fLengthIPad;
135 ((AliTRDpadPlane &) p).fWidthIPad = fWidthIPad;
137 ((AliTRDpadPlane &) p).fRowSpacing = fRowSpacing;
138 ((AliTRDpadPlane &) p).fColSpacing = fColSpacing;
140 ((AliTRDpadPlane &) p).fNrows = fNrows;
141 ((AliTRDpadPlane &) p).fNcols = fNcols;
143 ((AliTRDpadPlane &) p).fTiltingAngle = fTiltingAngle;
144 ((AliTRDpadPlane &) p).fTiltingTan = fTiltingTan;
146 ((AliTRDpadPlane &) p).fPadRowSMOffset = fPadRowSMOffset;
147 ((AliTRDpadPlane &) p).fAnodeWireOffset = fAnodeWireOffset;
149 if (((AliTRDpadPlane &) p).fPadRow) {
150 delete [] ((AliTRDpadPlane &) p).fPadRow;
152 ((AliTRDpadPlane &) p).fPadRow = new Double_t[fNrows];
153 for (iBin = 0; iBin < fNrows; iBin++) {
154 ((AliTRDpadPlane &) p).fPadRow[iBin] = fPadRow[iBin];
157 if (((AliTRDpadPlane &) p).fPadCol) {
158 delete [] ((AliTRDpadPlane &) p).fPadCol;
160 ((AliTRDpadPlane &) p).fPadCol = new Double_t[fNrows];
161 for (iBin = 0; iBin < fNrows; iBin++) {
162 ((AliTRDpadPlane &) p).fPadCol[iBin] = fPadCol[iBin];
169 //_____________________________________________________________________________
170 void AliTRDpadPlane::SetTiltingAngle(Double_t t)
173 // Set the tilting angle of the pads
177 fTiltingTan = TMath::Tan(TMath::Pi()/180.0 * fTiltingAngle);
181 //_____________________________________________________________________________
182 Int_t AliTRDpadPlane::GetPadRowNumber(Double_t z) const
185 // Finds the pad row number for a given z-position in local supermodule system
193 if ((z > GetRow0() ) ||
203 while (nabove - nbelow > 1) {
204 middle = (nabove + nbelow) / 2;
205 if (z == (fPadRow[middle-1] + fPadRowSMOffset)) {
208 if (z > (fPadRow[middle-1] + fPadRowSMOffset)) {
223 //_____________________________________________________________________________
224 Int_t AliTRDpadPlane::GetPadRowNumberROC(Double_t z) const
227 // Finds the pad row number for a given z-position in local ROC system
235 if ((z > GetRow0ROC() ) ||
236 (z < GetRowEndROC())) {
245 while (nabove - nbelow > 1) {
246 middle = (nabove + nbelow) / 2;
247 if (z == fPadRow[middle-1]) {
250 if (z > fPadRow[middle-1]) {
265 //_____________________________________________________________________________
266 Int_t AliTRDpadPlane::GetPadColNumber(Double_t rphi) const
269 // Finds the pad column number for a given rphi-position
277 if ((rphi < GetCol0() ) ||
278 (rphi > GetColEnd())) {
287 while (nabove - nbelow > 1) {
288 middle = (nabove + nbelow) / 2;
289 if (rphi == fPadCol[middle]) {
292 if (rphi > fPadCol[middle]) {