X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDpadPlane.cxx;h=beba8be59d8601d900a4cf0949aed633f7d31564;hb=64129b355d10efd75096de85219ac3997c7ca660;hp=b21b379742d13015266137ab23881f8b60420b1f;hpb=afb9f880312237d28a62d69aa7934a065018b502;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDpadPlane.cxx b/TRD/AliTRDpadPlane.cxx index b21b379742d..beba8be59d8 100644 --- a/TRD/AliTRDpadPlane.cxx +++ b/TRD/AliTRDpadPlane.cxx @@ -31,16 +31,14 @@ #include #include "AliTRDpadPlane.h" -#include "AliTRDgeometry.h" ClassImp(AliTRDpadPlane) //_____________________________________________________________________________ AliTRDpadPlane::AliTRDpadPlane() :TObject() - ,fGeo(0) - ,fPla(0) - ,fCha(0) + ,fLayer(0) + ,fStack(0) ,fLength(0) ,fWidth(0) ,fLengthRim(0) @@ -57,6 +55,8 @@ AliTRDpadPlane::AliTRDpadPlane() ,fTiltingTan(0) ,fPadRow(0) ,fPadCol(0) + ,fPadRowSMOffset(0) + ,fAnodeWireOffset(0) { // // Default constructor @@ -65,11 +65,10 @@ AliTRDpadPlane::AliTRDpadPlane() } //_____________________________________________________________________________ -AliTRDpadPlane::AliTRDpadPlane(Int_t p, Int_t c) +AliTRDpadPlane::AliTRDpadPlane(Int_t layer, Int_t stack) :TObject() - ,fGeo(0) - ,fPla(0) - ,fCha(0) + ,fLayer(layer) + ,fStack(stack) ,fLength(0) ,fWidth(0) ,fLengthRim(0) @@ -86,224 +85,20 @@ AliTRDpadPlane::AliTRDpadPlane(Int_t p, Int_t c) ,fTiltingTan(0) ,fPadRow(0) ,fPadCol(0) + ,fPadRowSMOffset(0) + ,fAnodeWireOffset(0) { // - // Constructor that initializes a given pad plane type + // Constructor // - fGeo = new AliTRDgeometry(); - - fPla = p; - fCha = c; - - fRowSpacing = 0.0; - fColSpacing = 0.0; - - fLengthRim = 1.0; - fWidthRim = 0.5; - - fNcols = 144; - - // - // The pad plane parameter - // - switch (p) { - case 0: - if (c == 2) { - // L0C0 type - fNrows = 12; - fLength = 108.0; - fWidth = 92.2; - fLengthOPad = 8.0; - fWidthOPad = 0.515; - fLengthIPad = 9.0; - fWidthIPad = 0.635; - fTiltingAngle = -2.0; - } - else { - // L0C1 type - fNrows = 16; - fLength = 122.0; - fWidth = 92.2; - fLengthOPad = 7.5; - fWidthOPad = 0.515; - fLengthIPad = 7.5; - fWidthIPad = 0.635; - fTiltingAngle = -2.0; - } - break; - case 1: - if (c == 2) { - // L1C0 type - fNrows = 12; - fLength = 108.0; - fWidth = 96.6; - fLengthOPad = 8.0; - fWidthOPad = 0.585; - fLengthIPad = 9.0; - fWidthIPad = 0.665; - fTiltingAngle = 2.0; - } - else { - // L1C1 type - fNrows = 16; - fLength = 122.0; - fWidth = 96.6; - fLengthOPad = 7.5; - fWidthOPad = 0.585; - fLengthIPad = 7.5; - fWidthIPad = 0.665; - fTiltingAngle = 2.0; - } - break; - case 2: - if (c == 2) { - // L2C0 type - fNrows = 12; - fLength = 108.0; - fWidth = 101.1; - fLengthOPad = 8.0; - fWidthOPad = 0.705; - fLengthIPad = 9.0; - fWidthIPad = 0.695; - fTiltingAngle = -2.0; - } - else { - // L2C1 type - fNrows = 16; - fLength = 129.0; - fWidth = 101.1; - fLengthOPad = 7.5; - fWidthOPad = 0.705; - fLengthIPad = 8.0; - fWidthIPad = 0.695; - fTiltingAngle = -2.0; - } - break; - case 3: - if (c == 2) { - // L3C0 type - fNrows = 12; - fLength = 108.0; - fWidth = 105.5; - fLengthOPad = 8.0; - fWidthOPad = 0.775; - fLengthIPad = 9.0; - fWidthIPad = 0.725; - fTiltingAngle = 2.0; - } - else { - // L3C1 type - fNrows = 16; - fLength = 136.0; - fWidth = 105.5; - fLengthOPad = 7.5; - fWidthOPad = 0.775; - fLengthIPad = 8.5; - fWidthIPad = 0.725; - fTiltingAngle = 2.0; - } - break; - case 4: - if (c == 2) { - // L4C0 type - fNrows = 12; - fLength = 108.0; - fWidth = 109.9; - fLengthOPad = 8.0; - fWidthOPad = 0.845; - fLengthIPad = 9.0; - fWidthIPad = 0.755; - fTiltingAngle = -2.0; - } - else { - // L4C1 type - fNrows = 16; - fLength = 143.0; - fWidth = 109.9; - fLengthOPad = 7.5; - fWidthOPad = 0.845; - fLengthIPad = 9.0; - fWidthIPad = 0.755; - fTiltingAngle = -2.0; - } - break; - case 5: - if (c == 2) { - // L5C0 type - fNrows = 12; - fLength = 108.0; - fWidth = 114.4; - fLengthOPad = 8.0; - fWidthOPad = 0.965; - fLengthIPad = 9.0; - fWidthIPad = 0.785; - fTiltingAngle = 2.0; - } - else { - // L5C1 type - fNrows = 16; - fLength = 145.0; - fWidth = 114.4; - fLengthOPad = 8.5; - fWidthOPad = 0.965; - fLengthIPad = 9.0; - fWidthIPad = 0.785; - fTiltingAngle = 2.0; - } - break; - }; - - // - // Store tilting angle as tangens - // - fTiltingTan = TMath::Tan(TMath::Pi()/180.0 * fTiltingAngle); - - // - // The positions of the borders of the pads - // - // Row direction - // - fPadRow = new Double_t[fNrows]; - Double_t row = fGeo->GetChamberLength(p,c) / 2.0 - - fGeo->RpadW() - - fLengthRim; - for (Int_t ir = 0; ir < fNrows; ir++) { - fPadRow[ir] = row; - row -= fRowSpacing; - if (ir == 0) { - row -= fLengthOPad; - } - else { - row -= fLengthIPad; - } - } - // - // Column direction - // - fPadCol = new Double_t[fNcols]; - Double_t col = fGeo->GetChamberWidth(p) / 2.0 - + fGeo->CroWid() - - fWidthRim; - for (Int_t ic = 0; ic < fNcols; ic++) { - fPadCol[ic] = col; - col -= fColSpacing; - if (ic == 0) { - col -= fWidthOPad; - } - else { - col -= fWidthIPad; - } - } - } //_____________________________________________________________________________ AliTRDpadPlane::AliTRDpadPlane(const AliTRDpadPlane &p) :TObject(p) - ,fGeo(0) - ,fPla(p.fPla) - ,fCha(p.fCha) + ,fLayer(p.fLayer) + ,fStack(p.fStack) ,fLength(p.fLength) ,fWidth(p.fWidth) ,fLengthRim(p.fLengthRim) @@ -320,6 +115,8 @@ AliTRDpadPlane::AliTRDpadPlane(const AliTRDpadPlane &p) ,fTiltingTan(p.fTiltingTan) ,fPadRow(0) ,fPadCol(0) + ,fPadRowSMOffset(p.fPadRowSMOffset) + ,fAnodeWireOffset(p.fAnodeWireOffset) { // // AliTRDpadPlane copy constructor @@ -327,20 +124,14 @@ AliTRDpadPlane::AliTRDpadPlane(const AliTRDpadPlane &p) Int_t iBin = 0; - if (((AliTRDpadPlane &) p).fPadRow) { - delete [] ((AliTRDpadPlane &) p).fPadRow; - } - ((AliTRDpadPlane &) p).fPadRow = new Double_t[fNrows]; + fPadRow = new Double_t[fNrows]; for (iBin = 0; iBin < fNrows; iBin++) { - ((AliTRDpadPlane &) p).fPadRow[iBin] = fPadRow[iBin]; + fPadRow[iBin] = ((AliTRDpadPlane &) p).fPadRow[iBin]; } - if (((AliTRDpadPlane &) p).fPadCol) { - delete [] ((AliTRDpadPlane &) p).fPadCol; - } - ((AliTRDpadPlane &) p).fPadCol = new Double_t[fNrows]; + fPadCol = new Double_t[fNrows]; for (iBin = 0; iBin < fNrows; iBin++) { - ((AliTRDpadPlane &) p).fPadCol[iBin] = fPadCol[iBin]; + fPadCol[iBin] = ((AliTRDpadPlane &) p).fPadCol[iBin]; } } @@ -352,11 +143,6 @@ AliTRDpadPlane::~AliTRDpadPlane() // AliTRDpadPlane destructor // - if (fGeo) { - delete fGeo; - fGeo = 0; - } - if (fPadRow) { delete [] fPadRow; fPadRow = 0; @@ -393,28 +179,29 @@ void AliTRDpadPlane::Copy(TObject &p) const Int_t iBin = 0; - ((AliTRDpadPlane &) p).fGeo = 0; + ((AliTRDpadPlane &) p).fLayer = fLayer; + ((AliTRDpadPlane &) p).fStack = fStack; - ((AliTRDpadPlane &) p).fPla = fPla; - ((AliTRDpadPlane &) p).fCha = fCha; + ((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).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).fRowSpacing = fRowSpacing; - ((AliTRDpadPlane &) p).fColSpacing = fColSpacing; + ((AliTRDpadPlane &) p).fNrows = fNrows; + ((AliTRDpadPlane &) p).fNcols = fNcols; - ((AliTRDpadPlane &) p).fNrows = fNrows; - ((AliTRDpadPlane &) p).fNcols = fNcols; + ((AliTRDpadPlane &) p).fTiltingAngle = fTiltingAngle; + ((AliTRDpadPlane &) p).fTiltingTan = fTiltingTan; - ((AliTRDpadPlane &) p).fTiltingAngle = fTiltingAngle; - ((AliTRDpadPlane &) p).fTiltingTan = fTiltingTan; + ((AliTRDpadPlane &) p).fPadRowSMOffset = fPadRowSMOffset; + ((AliTRDpadPlane &) p).fAnodeWireOffset = fAnodeWireOffset; if (((AliTRDpadPlane &) p).fPadRow) { delete [] ((AliTRDpadPlane &) p).fPadRow; @@ -436,11 +223,23 @@ void AliTRDpadPlane::Copy(TObject &p) const } +//_____________________________________________________________________________ +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 global z-position + // Finds the pad row number for a given z-position in local supermodule system // Int_t row = 0; @@ -453,6 +252,48 @@ Int_t AliTRDpadPlane::GetPadRowNumber(Double_t z) const 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 { @@ -482,7 +323,7 @@ Int_t AliTRDpadPlane::GetPadRowNumber(Double_t z) const Int_t AliTRDpadPlane::GetPadColNumber(Double_t rphi) const { // - // Finds the pad column number for a given global rphi-position + // Finds the pad column number for a given rphi-position // Int_t col = 0; @@ -490,29 +331,29 @@ Int_t AliTRDpadPlane::GetPadColNumber(Double_t rphi) const Int_t nbelow = 0; Int_t middle = 0; - if ((rphi > GetCol0() ) || - (rphi < GetColEnd())) { + if ((rphi < GetCol0() ) || + (rphi > GetColEnd())) { col = -1; } else { - nabove = fNcols + 1; + nabove = fNcols; nbelow = 0; while (nabove - nbelow > 1) { middle = (nabove + nbelow) / 2; - if (rphi == fPadCol[middle-1]) { + if (rphi == fPadCol[middle]) { col = middle; } - if (rphi > fPadCol[middle-1]) { - nabove = middle; + if (rphi > fPadCol[middle]) { + nbelow = middle; } else { - nbelow = middle; + nabove = middle; } } - col = nbelow - 1; + col = nbelow; }