ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  Describes a pad plane of a TRD ROC                                       //
//                                                                           //
//  Contains the information on pad postions, pad dimensions,                //
//  tilting angle, etc.                                                      //
//  It also provides methods to identify the current pad number from         //
//  global coordinates.                                                      //
//  The numbering and coordinates should follow the official convention      //
//  (see David Emschermanns note on TRD convention                           //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <TMath.h>

#include "AliTRDpadPlane.h"

ClassImp(AliTRDpadPlane)

//_____________________________________________________________________________
AliTRDpadPlane::AliTRDpadPlane()
  :TObject()
  ,fLayer(0)
  ,fStack(0)
  ,fLength(0)
  ,fWidth(0)
  ,fLengthRim(0)
  ,fWidthRim(0)
  ,fLengthOPad(0)
  ,fWidthOPad(0)
  ,fLengthIPad(0)
  ,fWidthIPad(0)
  ,fRowSpacing(0)
  ,fColSpacing(0)
  ,fNrows(0)
  ,fNcols(0)
  ,fTiltingAngle(0)
  ,fTiltingTan(0)
  ,fPadRow(0)
  ,fPadCol(0)
  ,fPadRowSMOffset(0)
  ,fAnodeWireOffset(0)
{
  //
  // Default constructor
  //

}

//_____________________________________________________________________________
AliTRDpadPlane::AliTRDpadPlane(Int_t layer, Int_t stack)
  :TObject()
  ,fLayer(layer)
  ,fStack(stack)
  ,fLength(0)
  ,fWidth(0)
  ,fLengthRim(0)
  ,fWidthRim(0)
  ,fLengthOPad(0)
  ,fWidthOPad(0)
  ,fLengthIPad(0)
  ,fWidthIPad(0)
  ,fRowSpacing(0)
  ,fColSpacing(0)
  ,fNrows(0)
  ,fNcols(0)
  ,fTiltingAngle(0)
  ,fTiltingTan(0)
  ,fPadRow(0)
  ,fPadCol(0)
  ,fPadRowSMOffset(0)
  ,fAnodeWireOffset(0)
{
  //
  // Constructor
  //

}

//_____________________________________________________________________________
AliTRDpadPlane::~AliTRDpadPlane()
{
  //
  // AliTRDpadPlane destructor
  //

  if (fPadRow) {
    delete [] fPadRow;
    fPadRow = 0;
  }

  if (fPadCol) {
    delete [] fPadCol;
    fPadCol = 0;
  }

}

//_____________________________________________________________________________
void AliTRDpadPlane::Copy(TObject &p) const
{
  //
  // Copy function
  //

  Int_t iBin = 0;

  ((AliTRDpadPlane &) p).fLayer           = fLayer;
  ((AliTRDpadPlane &) p).fStack           = fStack;

  ((AliTRDpadPlane &) p).fLength          = fLength;
  ((AliTRDpadPlane &) p).fWidth           = fWidth;
  ((AliTRDpadPlane &) p).fLengthRim       = fLengthRim;
  ((AliTRDpadPlane &) p).fWidthRim        = fWidthRim;
  ((AliTRDpadPlane &) p).fLengthOPad      = fLengthOPad;
  ((AliTRDpadPlane &) p).fWidthOPad       = fWidthOPad;
  ((AliTRDpadPlane &) p).fLengthIPad      = fLengthIPad;
  ((AliTRDpadPlane &) p).fWidthIPad       = fWidthIPad;

  ((AliTRDpadPlane &) p).fRowSpacing      = fRowSpacing;
  ((AliTRDpadPlane &) p).fColSpacing      = fColSpacing;

  ((AliTRDpadPlane &) p).fNrows           = fNrows;
  ((AliTRDpadPlane &) p).fNcols           = fNcols;

  ((AliTRDpadPlane &) p).fTiltingAngle    = fTiltingAngle;
  ((AliTRDpadPlane &) p).fTiltingTan      = fTiltingTan;

  ((AliTRDpadPlane &) p).fPadRowSMOffset  = fPadRowSMOffset;
  ((AliTRDpadPlane &) p).fAnodeWireOffset = fAnodeWireOffset;

  if (((AliTRDpadPlane &) p).fPadRow) {
    delete [] ((AliTRDpadPlane &) p).fPadRow;
  }
  ((AliTRDpadPlane &) p).fPadRow = new Double_t[fNrows];
  for (iBin = 0; iBin < fNrows; iBin++) {
    ((AliTRDpadPlane &) p).fPadRow[iBin] = fPadRow[iBin];
  }                                                                             

  if (((AliTRDpadPlane &) p).fPadCol) {
    delete [] ((AliTRDpadPlane &) p).fPadCol;
  }
  ((AliTRDpadPlane &) p).fPadCol = new Double_t[fNrows];
  for (iBin = 0; iBin < fNrows; iBin++) {
    ((AliTRDpadPlane &) p).fPadCol[iBin] = fPadCol[iBin];
  }                                                                             

  TObject::Copy(p);

}

//_____________________________________________________________________________
void AliTRDpadPlane::SetTiltingAngle(Double_t t)
{
  //
  // Set the tilting angle of the pads
  //
 
  fTiltingAngle = t; 
  fTiltingTan   = TMath::Tan(TMath::Pi()/180.0 * fTiltingAngle); 

}

//_____________________________________________________________________________
Int_t AliTRDpadPlane::GetPadRowNumber(Double_t z) const
{
  //
  // Finds the pad row number for a given z-position in local supermodule system
  //

  Int_t row    = 0;
  Int_t nabove = 0;
  Int_t nbelow = 0;
  Int_t middle = 0;

  if ((z > GetRow0()  ) || 
      (z < GetRowEnd())) {

    row = -1;

  }
  else {

    nabove = fNrows + 1;
    nbelow = 0;
    while (nabove - nbelow > 1) {
      middle = (nabove + nbelow) / 2;
      if (z == (fPadRow[middle-1] + fPadRowSMOffset)) {
        row    = middle;
      }
      if (z  > (fPadRow[middle-1] + fPadRowSMOffset)) {
        nabove = middle;
      }
      else {
        nbelow = middle;
      }
    }
    row = nbelow - 1;

  }

  return row;

}

//_____________________________________________________________________________
Int_t AliTRDpadPlane::GetPadRowNumberROC(Double_t z) const
{
  //
  // Finds the pad row number for a given z-position in local ROC system
  //

  Int_t row    = 0;
  Int_t nabove = 0;
  Int_t nbelow = 0;
  Int_t middle = 0;

  if ((z > GetRow0ROC()  ) || 
      (z < GetRowEndROC())) {

    row = -1;

  }
  else {

    nabove = fNrows + 1;
    nbelow = 0;
    while (nabove - nbelow > 1) {
      middle = (nabove + nbelow) / 2;
      if (z == fPadRow[middle-1]) {
        row    = middle;
      }
      if (z  > fPadRow[middle-1]) {
        nabove = middle;
      }
      else {
        nbelow = middle;
      }
    }
    row = nbelow - 1;

  }

  return row;

}

//_____________________________________________________________________________
Int_t AliTRDpadPlane::GetPadColNumber(Double_t rphi) const
{
  //
  // Finds the pad column number for a given rphi-position
  //

  Int_t col    = 0;
  Int_t nabove = 0;
  Int_t nbelow = 0;
  Int_t middle = 0;

  if ((rphi < GetCol0()  ) || 
      (rphi > GetColEnd())) {

    col = -1;

  }
  else {

    nabove = fNcols;
    nbelow = 0;
    while (nabove - nbelow > 1) {
      middle = (nabove + nbelow) / 2;
      if (rphi == fPadCol[middle]) {
        col    = middle;
      }
      if (rphi  > fPadCol[middle]) {
        nbelow = middle;
      }
      else {
        nabove = middle;
      }
    }
    col = nbelow;

  }

  return col;

}
 AliTRDpadPlane.cxx:1
 AliTRDpadPlane.cxx:2
 AliTRDpadPlane.cxx:3
 AliTRDpadPlane.cxx:4
 AliTRDpadPlane.cxx:5
 AliTRDpadPlane.cxx:6
 AliTRDpadPlane.cxx:7
 AliTRDpadPlane.cxx:8
 AliTRDpadPlane.cxx:9
 AliTRDpadPlane.cxx:10
 AliTRDpadPlane.cxx:11
 AliTRDpadPlane.cxx:12
 AliTRDpadPlane.cxx:13
 AliTRDpadPlane.cxx:14
 AliTRDpadPlane.cxx:15
 AliTRDpadPlane.cxx:16
 AliTRDpadPlane.cxx:17
 AliTRDpadPlane.cxx:18
 AliTRDpadPlane.cxx:19
 AliTRDpadPlane.cxx:20
 AliTRDpadPlane.cxx:21
 AliTRDpadPlane.cxx:22
 AliTRDpadPlane.cxx:23
 AliTRDpadPlane.cxx:24
 AliTRDpadPlane.cxx:25
 AliTRDpadPlane.cxx:26
 AliTRDpadPlane.cxx:27
 AliTRDpadPlane.cxx:28
 AliTRDpadPlane.cxx:29
 AliTRDpadPlane.cxx:30
 AliTRDpadPlane.cxx:31
 AliTRDpadPlane.cxx:32
 AliTRDpadPlane.cxx:33
 AliTRDpadPlane.cxx:34
 AliTRDpadPlane.cxx:35
 AliTRDpadPlane.cxx:36
 AliTRDpadPlane.cxx:37
 AliTRDpadPlane.cxx:38
 AliTRDpadPlane.cxx:39
 AliTRDpadPlane.cxx:40
 AliTRDpadPlane.cxx:41
 AliTRDpadPlane.cxx:42
 AliTRDpadPlane.cxx:43
 AliTRDpadPlane.cxx:44
 AliTRDpadPlane.cxx:45
 AliTRDpadPlane.cxx:46
 AliTRDpadPlane.cxx:47
 AliTRDpadPlane.cxx:48
 AliTRDpadPlane.cxx:49
 AliTRDpadPlane.cxx:50
 AliTRDpadPlane.cxx:51
 AliTRDpadPlane.cxx:52
 AliTRDpadPlane.cxx:53
 AliTRDpadPlane.cxx:54
 AliTRDpadPlane.cxx:55
 AliTRDpadPlane.cxx:56
 AliTRDpadPlane.cxx:57
 AliTRDpadPlane.cxx:58
 AliTRDpadPlane.cxx:59
 AliTRDpadPlane.cxx:60
 AliTRDpadPlane.cxx:61
 AliTRDpadPlane.cxx:62
 AliTRDpadPlane.cxx:63
 AliTRDpadPlane.cxx:64
 AliTRDpadPlane.cxx:65
 AliTRDpadPlane.cxx:66
 AliTRDpadPlane.cxx:67
 AliTRDpadPlane.cxx:68
 AliTRDpadPlane.cxx:69
 AliTRDpadPlane.cxx:70
 AliTRDpadPlane.cxx:71
 AliTRDpadPlane.cxx:72
 AliTRDpadPlane.cxx:73
 AliTRDpadPlane.cxx:74
 AliTRDpadPlane.cxx:75
 AliTRDpadPlane.cxx:76
 AliTRDpadPlane.cxx:77
 AliTRDpadPlane.cxx:78
 AliTRDpadPlane.cxx:79
 AliTRDpadPlane.cxx:80
 AliTRDpadPlane.cxx:81
 AliTRDpadPlane.cxx:82
 AliTRDpadPlane.cxx:83
 AliTRDpadPlane.cxx:84
 AliTRDpadPlane.cxx:85
 AliTRDpadPlane.cxx:86
 AliTRDpadPlane.cxx:87
 AliTRDpadPlane.cxx:88
 AliTRDpadPlane.cxx:89
 AliTRDpadPlane.cxx:90
 AliTRDpadPlane.cxx:91
 AliTRDpadPlane.cxx:92
 AliTRDpadPlane.cxx:93
 AliTRDpadPlane.cxx:94
 AliTRDpadPlane.cxx:95
 AliTRDpadPlane.cxx:96
 AliTRDpadPlane.cxx:97
 AliTRDpadPlane.cxx:98
 AliTRDpadPlane.cxx:99
 AliTRDpadPlane.cxx:100
 AliTRDpadPlane.cxx:101
 AliTRDpadPlane.cxx:102
 AliTRDpadPlane.cxx:103
 AliTRDpadPlane.cxx:104
 AliTRDpadPlane.cxx:105
 AliTRDpadPlane.cxx:106
 AliTRDpadPlane.cxx:107
 AliTRDpadPlane.cxx:108
 AliTRDpadPlane.cxx:109
 AliTRDpadPlane.cxx:110
 AliTRDpadPlane.cxx:111
 AliTRDpadPlane.cxx:112
 AliTRDpadPlane.cxx:113
 AliTRDpadPlane.cxx:114
 AliTRDpadPlane.cxx:115
 AliTRDpadPlane.cxx:116
 AliTRDpadPlane.cxx:117
 AliTRDpadPlane.cxx:118
 AliTRDpadPlane.cxx:119
 AliTRDpadPlane.cxx:120
 AliTRDpadPlane.cxx:121
 AliTRDpadPlane.cxx:122
 AliTRDpadPlane.cxx:123
 AliTRDpadPlane.cxx:124
 AliTRDpadPlane.cxx:125
 AliTRDpadPlane.cxx:126
 AliTRDpadPlane.cxx:127
 AliTRDpadPlane.cxx:128
 AliTRDpadPlane.cxx:129
 AliTRDpadPlane.cxx:130
 AliTRDpadPlane.cxx:131
 AliTRDpadPlane.cxx:132
 AliTRDpadPlane.cxx:133
 AliTRDpadPlane.cxx:134
 AliTRDpadPlane.cxx:135
 AliTRDpadPlane.cxx:136
 AliTRDpadPlane.cxx:137
 AliTRDpadPlane.cxx:138
 AliTRDpadPlane.cxx:139
 AliTRDpadPlane.cxx:140
 AliTRDpadPlane.cxx:141
 AliTRDpadPlane.cxx:142
 AliTRDpadPlane.cxx:143
 AliTRDpadPlane.cxx:144
 AliTRDpadPlane.cxx:145
 AliTRDpadPlane.cxx:146
 AliTRDpadPlane.cxx:147
 AliTRDpadPlane.cxx:148
 AliTRDpadPlane.cxx:149
 AliTRDpadPlane.cxx:150
 AliTRDpadPlane.cxx:151
 AliTRDpadPlane.cxx:152
 AliTRDpadPlane.cxx:153
 AliTRDpadPlane.cxx:154
 AliTRDpadPlane.cxx:155
 AliTRDpadPlane.cxx:156
 AliTRDpadPlane.cxx:157
 AliTRDpadPlane.cxx:158
 AliTRDpadPlane.cxx:159
 AliTRDpadPlane.cxx:160
 AliTRDpadPlane.cxx:161
 AliTRDpadPlane.cxx:162
 AliTRDpadPlane.cxx:163
 AliTRDpadPlane.cxx:164
 AliTRDpadPlane.cxx:165
 AliTRDpadPlane.cxx:166
 AliTRDpadPlane.cxx:167
 AliTRDpadPlane.cxx:168
 AliTRDpadPlane.cxx:169
 AliTRDpadPlane.cxx:170
 AliTRDpadPlane.cxx:171
 AliTRDpadPlane.cxx:172
 AliTRDpadPlane.cxx:173
 AliTRDpadPlane.cxx:174
 AliTRDpadPlane.cxx:175
 AliTRDpadPlane.cxx:176
 AliTRDpadPlane.cxx:177
 AliTRDpadPlane.cxx:178
 AliTRDpadPlane.cxx:179
 AliTRDpadPlane.cxx:180
 AliTRDpadPlane.cxx:181
 AliTRDpadPlane.cxx:182
 AliTRDpadPlane.cxx:183
 AliTRDpadPlane.cxx:184
 AliTRDpadPlane.cxx:185
 AliTRDpadPlane.cxx:186
 AliTRDpadPlane.cxx:187
 AliTRDpadPlane.cxx:188
 AliTRDpadPlane.cxx:189
 AliTRDpadPlane.cxx:190
 AliTRDpadPlane.cxx:191
 AliTRDpadPlane.cxx:192
 AliTRDpadPlane.cxx:193
 AliTRDpadPlane.cxx:194
 AliTRDpadPlane.cxx:195
 AliTRDpadPlane.cxx:196
 AliTRDpadPlane.cxx:197
 AliTRDpadPlane.cxx:198
 AliTRDpadPlane.cxx:199
 AliTRDpadPlane.cxx:200
 AliTRDpadPlane.cxx:201
 AliTRDpadPlane.cxx:202
 AliTRDpadPlane.cxx:203
 AliTRDpadPlane.cxx:204
 AliTRDpadPlane.cxx:205
 AliTRDpadPlane.cxx:206
 AliTRDpadPlane.cxx:207
 AliTRDpadPlane.cxx:208
 AliTRDpadPlane.cxx:209
 AliTRDpadPlane.cxx:210
 AliTRDpadPlane.cxx:211
 AliTRDpadPlane.cxx:212
 AliTRDpadPlane.cxx:213
 AliTRDpadPlane.cxx:214
 AliTRDpadPlane.cxx:215
 AliTRDpadPlane.cxx:216
 AliTRDpadPlane.cxx:217
 AliTRDpadPlane.cxx:218
 AliTRDpadPlane.cxx:219
 AliTRDpadPlane.cxx:220
 AliTRDpadPlane.cxx:221
 AliTRDpadPlane.cxx:222
 AliTRDpadPlane.cxx:223
 AliTRDpadPlane.cxx:224
 AliTRDpadPlane.cxx:225
 AliTRDpadPlane.cxx:226
 AliTRDpadPlane.cxx:227
 AliTRDpadPlane.cxx:228
 AliTRDpadPlane.cxx:229
 AliTRDpadPlane.cxx:230
 AliTRDpadPlane.cxx:231
 AliTRDpadPlane.cxx:232
 AliTRDpadPlane.cxx:233
 AliTRDpadPlane.cxx:234
 AliTRDpadPlane.cxx:235
 AliTRDpadPlane.cxx:236
 AliTRDpadPlane.cxx:237
 AliTRDpadPlane.cxx:238
 AliTRDpadPlane.cxx:239
 AliTRDpadPlane.cxx:240
 AliTRDpadPlane.cxx:241
 AliTRDpadPlane.cxx:242
 AliTRDpadPlane.cxx:243
 AliTRDpadPlane.cxx:244
 AliTRDpadPlane.cxx:245
 AliTRDpadPlane.cxx:246
 AliTRDpadPlane.cxx:247
 AliTRDpadPlane.cxx:248
 AliTRDpadPlane.cxx:249
 AliTRDpadPlane.cxx:250
 AliTRDpadPlane.cxx:251
 AliTRDpadPlane.cxx:252
 AliTRDpadPlane.cxx:253
 AliTRDpadPlane.cxx:254
 AliTRDpadPlane.cxx:255
 AliTRDpadPlane.cxx:256
 AliTRDpadPlane.cxx:257
 AliTRDpadPlane.cxx:258
 AliTRDpadPlane.cxx:259
 AliTRDpadPlane.cxx:260
 AliTRDpadPlane.cxx:261
 AliTRDpadPlane.cxx:262
 AliTRDpadPlane.cxx:263
 AliTRDpadPlane.cxx:264
 AliTRDpadPlane.cxx:265
 AliTRDpadPlane.cxx:266
 AliTRDpadPlane.cxx:267
 AliTRDpadPlane.cxx:268
 AliTRDpadPlane.cxx:269
 AliTRDpadPlane.cxx:270
 AliTRDpadPlane.cxx:271
 AliTRDpadPlane.cxx:272
 AliTRDpadPlane.cxx:273
 AliTRDpadPlane.cxx:274
 AliTRDpadPlane.cxx:275
 AliTRDpadPlane.cxx:276
 AliTRDpadPlane.cxx:277
 AliTRDpadPlane.cxx:278
 AliTRDpadPlane.cxx:279
 AliTRDpadPlane.cxx:280
 AliTRDpadPlane.cxx:281
 AliTRDpadPlane.cxx:282
 AliTRDpadPlane.cxx:283
 AliTRDpadPlane.cxx:284
 AliTRDpadPlane.cxx:285
 AliTRDpadPlane.cxx:286
 AliTRDpadPlane.cxx:287
 AliTRDpadPlane.cxx:288
 AliTRDpadPlane.cxx:289
 AliTRDpadPlane.cxx:290
 AliTRDpadPlane.cxx:291
 AliTRDpadPlane.cxx:292
 AliTRDpadPlane.cxx:293
 AliTRDpadPlane.cxx:294
 AliTRDpadPlane.cxx:295
 AliTRDpadPlane.cxx:296
 AliTRDpadPlane.cxx:297
 AliTRDpadPlane.cxx:298
 AliTRDpadPlane.cxx:299
 AliTRDpadPlane.cxx:300
 AliTRDpadPlane.cxx:301
 AliTRDpadPlane.cxx:302
 AliTRDpadPlane.cxx:303
 AliTRDpadPlane.cxx:304
 AliTRDpadPlane.cxx:305