ROOT logo
#ifndef ALITRDPADPLANE_H
#define ALITRDPADPLANE_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

////////////////////////////////////////////////////////////////////////////
//                                                                        //
//  TRD pad plane class                                                   //
//                                                                        //
//  Contains the information on ideal pad positions, pad dimensions,      //
//  tilting angle, etc.                                                   //
//  It also provides methods to identify the current pad number from      //
//  local tracking coordinates.                                           //
//                                                                        //
////////////////////////////////////////////////////////////////////////////

#include <TObject.h>

//_____________________________________________________________________________
class AliTRDpadPlane : public TObject {

 public:

  AliTRDpadPlane();
  AliTRDpadPlane(Int_t layer, Int_t stack);
  virtual           ~AliTRDpadPlane();
  virtual void       Copy(TObject &p) const;

  void     SetLayer(Int_t l)                   { fLayer          = l; };
  void     SetStack(Int_t s)                   { fStack          = s; };
  void     SetRowSpacing(Double_t s)           { fRowSpacing     = s; };
  void     SetColSpacing(Double_t s)           { fColSpacing     = s; };
  void     SetLengthRim(Double_t l)            { fLengthRim      = l; };
  void     SetWidthRim(Double_t w)             { fWidthRim       = w; };
  void     SetNcols(Int_t n)                   { fNcols          = n;
                                                 if (fPadCol) delete[] fPadCol;
                                                 fPadCol         = new Double_t[fNcols]; };
  void     SetNrows(Int_t n)                   { fNrows          = n;
                                                 if (fPadRow) delete[] fPadRow;
                                                 fPadRow         = new Double_t[fNrows]; };
  void     SetPadCol(Int_t ic, Double_t c)     { if (ic < fNcols) fPadCol[ic] = c;       };
  void     SetPadRow(Int_t ir, Double_t r)     { if (ir < fNrows) fPadRow[ir] = r;       };
  void     SetLength(Double_t l)               { fLength          = l; };
  void     SetWidth(Double_t w)                { fWidth           = w; };
  void     SetLengthOPad(Double_t l)           { fLengthOPad      = l; };
  void     SetWidthOPad(Double_t w)            { fWidthOPad       = w; };
  void     SetLengthIPad(Double_t l)           { fLengthIPad      = l; };
  void     SetWidthIPad(Double_t w)            { fWidthIPad       = w; };
  void     SetPadRowSMOffset(Double_t o)       { fPadRowSMOffset  = o; };
  void     SetAnodeWireOffset(Float_t o)       { fAnodeWireOffset = o; };
  void     SetTiltingAngle(Double_t t);

  Int_t    GetPadRowNumber(Double_t z) const;
  Int_t    GetPadRowNumberROC(Double_t z) const;
  Int_t    GetPadColNumber(Double_t rphi) const;

  Double_t GetTiltOffset(Double_t rowOffset) const 
                                             { return fTiltingTan * (rowOffset - 0.5*fLengthIPad); };

  Double_t GetPadRowOffset(Int_t row, Double_t z) const
                                             { if ((row < 0) || (row >= fNrows))
                                                 return -1.0;
                                                else 
                                                 return fPadRow[row] + fPadRowSMOffset - z;        };
  Double_t GetPadRowOffsetROC(Int_t row, Double_t z) const
                                             { if ((row < 0) || (row >= fNrows))
                                                 return -1.0;
                                               else 
                                                 return fPadRow[row] - z;    };

  Double_t GetPadColOffset(Int_t col, Double_t rphi) const
                                             { if ((col < 0) || (col >= fNcols))
                                                 return -1.0;
                                               else
                                                 return rphi - fPadCol[col]; };

  Double_t GetTiltingAngle() const           { return fTiltingAngle;    };

  Int_t    GetNrows() const                  { return fNrows;           };
  Int_t    GetNcols() const                  { return fNcols;           };

  Double_t GetRow0() const                   { return fPadRow[0] + fPadRowSMOffset;    };
  Double_t GetRow0ROC() const                { return fPadRow[0];       };
  Double_t GetCol0() const                   { return fPadCol[0];       };

  Double_t GetRowEnd() const                 { return fPadRow[fNrows-1] - fLengthOPad + fPadRowSMOffset; };
  Double_t GetRowEndROC() const              { return fPadRow[fNrows-1] - fLengthOPad; };
  Double_t GetColEnd() const                 { return fPadCol[fNcols-1] + fWidthOPad;  };

  Double_t GetRowPos(Int_t row) const        { return fPadRow[row] + fPadRowSMOffset;  };
  Double_t GetRowPosROC(Int_t row) const     { return fPadRow[row];     };
  Double_t GetColPos(Int_t col) const        { return fPadCol[col];     };
  
  Double_t GetRowSize(Int_t row) const       { if ((row == 0) || (row == fNrows-1))
                                                 return fLengthOPad;
                                               else
                                                 return fLengthIPad; };
  Double_t GetColSize(Int_t col) const       { if ((col == 0) || (col == fNcols-1))
                                                 return fWidthOPad;
                                               else
                                                 return fWidthIPad;     };

  Double_t GetLengthRim() const              { return fLengthRim;       };
  Double_t GetWidthRim() const               { return fWidthRim;        };

  Double_t GetRowSpacing() const             { return fRowSpacing;      };
  Double_t GetColSpacing() const             { return fColSpacing;      };

  Double_t GetLengthOPad() const             { return fLengthOPad;      };
  Double_t GetLengthIPad() const             { return fLengthIPad;      };

  Double_t GetWidthOPad() const              { return fWidthOPad;       };
  Double_t GetWidthIPad() const              { return fWidthIPad;       };

  Double_t GetAnodeWireOffset() const        { return fAnodeWireOffset; };

 protected:

  Int_t     fLayer;           //  Layer number
  Int_t     fStack;           //  Stack number

  Double_t  fLength;          //  Length of pad plane in z-direction (row)
  Double_t  fWidth;           //  Width of pad plane in rphi-direction (col)

  Double_t  fLengthRim;       //  Length of the rim in z-direction (row)
  Double_t  fWidthRim;        //  Width of the rim in rphi-direction (col)

  Double_t  fLengthOPad;      //  Length of an outer pad in z-direction (row)
  Double_t  fWidthOPad;       //  Width of an outer pad in rphi-direction (col)

  Double_t  fLengthIPad;      //  Length of an inner pad in z-direction (row)
  Double_t  fWidthIPad;       //  Width of an inner pad in rphi-direction (col)

  Double_t  fRowSpacing;      //  Spacing between the pad rows
  Double_t  fColSpacing;      //  Spacing between the pad columns

  Int_t     fNrows;           //  Number of rows
  Int_t     fNcols;           //  Number of columns

  Double_t  fTiltingAngle;    //  Pad tilting angle  
  Double_t  fTiltingTan;      //  Tangens of pad tilting angle

  Double_t *fPadRow;          //  Pad border positions in row direction
  Double_t *fPadCol;          //  Pad border positions in column direction

  Double_t  fPadRowSMOffset;  //  To be added to translate local ROC system to local SM system

  Double_t  fAnodeWireOffset; //  Distance of first anode wire from pad edge

 private:
  AliTRDpadPlane(const AliTRDpadPlane &p);
  AliTRDpadPlane    &operator=(const AliTRDpadPlane &p);

  ClassDef(AliTRDpadPlane,6)  //  TRD ROC pad plane

};

#endif
 AliTRDpadPlane.h:1
 AliTRDpadPlane.h:2
 AliTRDpadPlane.h:3
 AliTRDpadPlane.h:4
 AliTRDpadPlane.h:5
 AliTRDpadPlane.h:6
 AliTRDpadPlane.h:7
 AliTRDpadPlane.h:8
 AliTRDpadPlane.h:9
 AliTRDpadPlane.h:10
 AliTRDpadPlane.h:11
 AliTRDpadPlane.h:12
 AliTRDpadPlane.h:13
 AliTRDpadPlane.h:14
 AliTRDpadPlane.h:15
 AliTRDpadPlane.h:16
 AliTRDpadPlane.h:17
 AliTRDpadPlane.h:18
 AliTRDpadPlane.h:19
 AliTRDpadPlane.h:20
 AliTRDpadPlane.h:21
 AliTRDpadPlane.h:22
 AliTRDpadPlane.h:23
 AliTRDpadPlane.h:24
 AliTRDpadPlane.h:25
 AliTRDpadPlane.h:26
 AliTRDpadPlane.h:27
 AliTRDpadPlane.h:28
 AliTRDpadPlane.h:29
 AliTRDpadPlane.h:30
 AliTRDpadPlane.h:31
 AliTRDpadPlane.h:32
 AliTRDpadPlane.h:33
 AliTRDpadPlane.h:34
 AliTRDpadPlane.h:35
 AliTRDpadPlane.h:36
 AliTRDpadPlane.h:37
 AliTRDpadPlane.h:38
 AliTRDpadPlane.h:39
 AliTRDpadPlane.h:40
 AliTRDpadPlane.h:41
 AliTRDpadPlane.h:42
 AliTRDpadPlane.h:43
 AliTRDpadPlane.h:44
 AliTRDpadPlane.h:45
 AliTRDpadPlane.h:46
 AliTRDpadPlane.h:47
 AliTRDpadPlane.h:48
 AliTRDpadPlane.h:49
 AliTRDpadPlane.h:50
 AliTRDpadPlane.h:51
 AliTRDpadPlane.h:52
 AliTRDpadPlane.h:53
 AliTRDpadPlane.h:54
 AliTRDpadPlane.h:55
 AliTRDpadPlane.h:56
 AliTRDpadPlane.h:57
 AliTRDpadPlane.h:58
 AliTRDpadPlane.h:59
 AliTRDpadPlane.h:60
 AliTRDpadPlane.h:61
 AliTRDpadPlane.h:62
 AliTRDpadPlane.h:63
 AliTRDpadPlane.h:64
 AliTRDpadPlane.h:65
 AliTRDpadPlane.h:66
 AliTRDpadPlane.h:67
 AliTRDpadPlane.h:68
 AliTRDpadPlane.h:69
 AliTRDpadPlane.h:70
 AliTRDpadPlane.h:71
 AliTRDpadPlane.h:72
 AliTRDpadPlane.h:73
 AliTRDpadPlane.h:74
 AliTRDpadPlane.h:75
 AliTRDpadPlane.h:76
 AliTRDpadPlane.h:77
 AliTRDpadPlane.h:78
 AliTRDpadPlane.h:79
 AliTRDpadPlane.h:80
 AliTRDpadPlane.h:81
 AliTRDpadPlane.h:82
 AliTRDpadPlane.h:83
 AliTRDpadPlane.h:84
 AliTRDpadPlane.h:85
 AliTRDpadPlane.h:86
 AliTRDpadPlane.h:87
 AliTRDpadPlane.h:88
 AliTRDpadPlane.h:89
 AliTRDpadPlane.h:90
 AliTRDpadPlane.h:91
 AliTRDpadPlane.h:92
 AliTRDpadPlane.h:93
 AliTRDpadPlane.h:94
 AliTRDpadPlane.h:95
 AliTRDpadPlane.h:96
 AliTRDpadPlane.h:97
 AliTRDpadPlane.h:98
 AliTRDpadPlane.h:99
 AliTRDpadPlane.h:100
 AliTRDpadPlane.h:101
 AliTRDpadPlane.h:102
 AliTRDpadPlane.h:103
 AliTRDpadPlane.h:104
 AliTRDpadPlane.h:105
 AliTRDpadPlane.h:106
 AliTRDpadPlane.h:107
 AliTRDpadPlane.h:108
 AliTRDpadPlane.h:109
 AliTRDpadPlane.h:110
 AliTRDpadPlane.h:111
 AliTRDpadPlane.h:112
 AliTRDpadPlane.h:113
 AliTRDpadPlane.h:114
 AliTRDpadPlane.h:115
 AliTRDpadPlane.h:116
 AliTRDpadPlane.h:117
 AliTRDpadPlane.h:118
 AliTRDpadPlane.h:119
 AliTRDpadPlane.h:120
 AliTRDpadPlane.h:121
 AliTRDpadPlane.h:122
 AliTRDpadPlane.h:123
 AliTRDpadPlane.h:124
 AliTRDpadPlane.h:125
 AliTRDpadPlane.h:126
 AliTRDpadPlane.h:127
 AliTRDpadPlane.h:128
 AliTRDpadPlane.h:129
 AliTRDpadPlane.h:130
 AliTRDpadPlane.h:131
 AliTRDpadPlane.h:132
 AliTRDpadPlane.h:133
 AliTRDpadPlane.h:134
 AliTRDpadPlane.h:135
 AliTRDpadPlane.h:136
 AliTRDpadPlane.h:137
 AliTRDpadPlane.h:138
 AliTRDpadPlane.h:139
 AliTRDpadPlane.h:140
 AliTRDpadPlane.h:141
 AliTRDpadPlane.h:142
 AliTRDpadPlane.h:143
 AliTRDpadPlane.h:144
 AliTRDpadPlane.h:145
 AliTRDpadPlane.h:146
 AliTRDpadPlane.h:147
 AliTRDpadPlane.h:148
 AliTRDpadPlane.h:149
 AliTRDpadPlane.h:150
 AliTRDpadPlane.h:151
 AliTRDpadPlane.h:152
 AliTRDpadPlane.h:153
 AliTRDpadPlane.h:154
 AliTRDpadPlane.h:155
 AliTRDpadPlane.h:156
 AliTRDpadPlane.h:157
 AliTRDpadPlane.h:158
 AliTRDpadPlane.h:159
 AliTRDpadPlane.h:160