X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSsegmentationSSD.cxx;h=a6d03d6e6fb6ceb9707b9b72044b68e6a0b474f6;hb=790a8a943dfd39ce2939493300fe69954712c249;hp=84f768e016afe3fd50dee3f888184a248faae384;hpb=66da768574d6095d9a76befcee8c6f1718236232;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSsegmentationSSD.cxx b/ITS/AliITSsegmentationSSD.cxx index 84f768e016a..a6d03d6e6fb 100644 --- a/ITS/AliITSsegmentationSSD.cxx +++ b/ITS/AliITSsegmentationSSD.cxx @@ -12,85 +12,111 @@ * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -Revision 1.13 2001/05/14 05:44:11 barbera -Version 1.11 reput in place to avoid problem with reconstruction -Revision 1.11 2001/05/03 16:12:37 nilsen -Fixed up LocalToDet, DetToLocal, GetCrossing, GetPadTxz to work with different -angles in layer 5 and 6. - -Revision 1.10 2001/05/01 22:42:22 nilsen -Update of SSD simulation and reconstruction code by Boris and Enrico. - -Revision 1.9 2001/04/27 14:16:50 nilsen -Remove dead and/or unused code and printout lines. i.e. cleaned it up a bit. - -*/ +/* $Id$ */ +#include #include -#include -#include #include "AliITSsegmentationSSD.h" -#include "AliITSgeom.h" + +////////////////////////////////////////////////////// +// Segmentation class for // +// silicon strips // +// // +////////////////////////////////////////////////////// +const Float_t AliITSsegmentationSSD::fgkDxDefault = 72960.; +const Float_t AliITSsegmentationSSD::fgkDzDefault = 40000.; +const Float_t AliITSsegmentationSSD::fgkDyDefault = 300.; +const Float_t AliITSsegmentationSSD::fgkPitchDefault = 95.; +const Int_t AliITSsegmentationSSD::fgkNstripsDefault = 768; ClassImp(AliITSsegmentationSSD) -AliITSsegmentationSSD::AliITSsegmentationSSD(){ +AliITSsegmentationSSD::AliITSsegmentationSSD(): AliITSsegmentation(), +fNstrips(0), +fStereoP(0), +fStereoN(0), +fPitch(0), +fStereoPl5(0), +fStereoNl5(0), +fStereoPl6(0), +fStereoNl6(0), +fLayer(0){ // default constructor - fGeom = 0; - fCorr = 0; - fLayer = 0; } //---------------------------------------------------------------------- -AliITSsegmentationSSD::AliITSsegmentationSSD(AliITSgeom *geom){ +AliITSsegmentationSSD::AliITSsegmentationSSD(AliITSgeom *geom): +fNstrips(0), +fStereoP(0), +fStereoN(0), +fPitch(0), +fStereoPl5(0), +fStereoNl5(0), +fStereoPl6(0), +fStereoNl6(0), +fLayer(0){ // constuctor fGeom = geom; fCorr = 0; - SetDetSize(); - SetPadSize(); - SetNPads(); + SetDetSize(fgkDxDefault,fgkDzDefault,fgkDyDefault); + SetPadSize(fgkPitchDefault,0.); + SetNPads(fgkNstripsDefault,0); SetAngles(); fLayer = 0; } + +//______________________________________________________________________ +void AliITSsegmentationSSD::Copy(TObject &obj) const { + // protected method. copy this to obj + AliITSsegmentation::Copy(obj); + ((AliITSsegmentationSSD& ) obj).Clear(); + ((AliITSsegmentationSSD& ) obj).fNstrips = fNstrips; + ((AliITSsegmentationSSD& ) obj).fStereoP = fStereoP; + ((AliITSsegmentationSSD& ) obj).fStereoN = fStereoN; + ((AliITSsegmentationSSD& ) obj).fStereoPl5 = fStereoPl5; + ((AliITSsegmentationSSD& ) obj).fStereoNl5 = fStereoNl5; + ((AliITSsegmentationSSD& ) obj).fStereoPl6 = fStereoPl6; + ((AliITSsegmentationSSD& ) obj).fStereoNl6 = fStereoNl6; + ((AliITSsegmentationSSD& ) obj).fLayer = fLayer; + ((AliITSsegmentationSSD& ) obj).fPitch = fPitch; + ((AliITSsegmentationSSD& ) obj).fLayer = fLayer; + +} + //______________________________________________________________________ AliITSsegmentationSSD& AliITSsegmentationSSD::operator=( - AliITSsegmentationSSD &source){ + const AliITSsegmentationSSD &source){ // Operator = - if(this==&source) return *this; - this->fNstrips = source.fNstrips; - this->fStereoP = source.fStereoP; - this->fStereoN = source.fStereoN; - this->fStereoPl5 = source.fStereoPl5; - this->fStereoNl5 = source.fStereoNl5; - this->fStereoPl6 = source.fStereoPl6; - this->fStereoNl6 = source.fStereoNl6; - this->fLayer = source.fLayer; - this->fPitch = source.fPitch; - this->fDz = source.fDz; - this->fDx = source.fDx; - this->fDy = source.fDy; - this->fLayer = source.fLayer; - this->fGeom = source.fGeom; // copy only the pointer - this->fCorr = new TF1(*(source.fCorr)); // make a proper copy - return *this; + if(this != &source){ + source.Copy(*this); + } + return *this; } //______________________________________________________________________ -AliITSsegmentationSSD::AliITSsegmentationSSD(AliITSsegmentationSSD &source){ +AliITSsegmentationSSD::AliITSsegmentationSSD(const AliITSsegmentationSSD &source): + AliITSsegmentation(source), +fNstrips(0), +fStereoP(0), +fStereoN(0), +fPitch(0), +fStereoPl5(0), +fStereoNl5(0), +fStereoPl6(0), +fStereoNl6(0), +fLayer(0){ // copy constructor - *this = source; + source.Copy(*this); } //---------------------------------------------------------------------- void AliITSsegmentationSSD::Init(){ // standard initalizer - SetPadSize(); - SetNPads(); + SetPadSize(fgkPitchDefault,0.); + SetNPads(fgkNstripsDefault,0); SetAngles(); } //---------------------------------------------------------------------- -void AliITSsegmentationSSD::Angles(Float_t &aP,Float_t &aN){ - +void AliITSsegmentationSSD::Angles(Float_t &aP,Float_t &aN) const{ + // P and N side stereo angles if (fLayer == 5){ aP = fStereoPl5; aN = fStereoNl5; @@ -102,12 +128,13 @@ void AliITSsegmentationSSD::Angles(Float_t &aP,Float_t &aN){ } //---------------------------------------------------------------------- void AliITSsegmentationSSD::SetLayer(Int_t l){ - + //set fLayer data member (only 5 or 6 are allowed) if (l==5) fLayer =5; if (l==6) fLayer =6; + if((l!=5) && (l!=6))Error("SetLayer","Layer can be 5 or 6, not %d",l); } //---------------------------------------------------------------------- -void AliITSsegmentationSSD::GetPadTxz(Float_t &x,Float_t &z){ +void AliITSsegmentationSSD::GetPadTxz(Float_t &x,Float_t &z) const{ // returns P and N sided strip numbers for a given location. // Transformation from microns detector center local coordinates // to detector P and N side strip numbers.. @@ -131,10 +158,10 @@ void AliITSsegmentationSSD::GetPadTxz(Float_t &x,Float_t &z){ |0/ // expects x, z in microns */ - Float_t StereoP, StereoN; - Angles(StereoP,StereoN); - Float_t tanP = TMath::Tan(StereoP); - Float_t tanN = TMath::Tan(-StereoN); + Float_t stereoP, stereoN; + Angles(stereoP,stereoN); + Float_t tanP = TMath::Tan(stereoP); + Float_t tanN = TMath::Tan(-stereoN); Float_t x1 = x; Float_t z1 = z; x1 += fDx/2; @@ -143,7 +170,7 @@ void AliITSsegmentationSSD::GetPadTxz(Float_t &x,Float_t &z){ z = (x1 - tanN*(z1 - fDz))/fPitch; } //---------------------------------------------------------------------- -void AliITSsegmentationSSD::GetPadIxz(Float_t x,Float_t z,Int_t &iP,Int_t &iN){ +void AliITSsegmentationSSD::GetPadIxz(Float_t x,Float_t z,Int_t &iP,Int_t &iN) const { // returns P and N sided strip numbers for a given location. /* _- Z + angle / ^ @@ -167,10 +194,10 @@ void AliITSsegmentationSSD::GetPadIxz(Float_t x,Float_t z,Int_t &iP,Int_t &iN){ // expects x, z in microns */ - Float_t StereoP, StereoN; - Angles(StereoP,StereoN); - Float_t tanP=TMath::Tan(StereoP); - Float_t tanN=TMath::Tan(StereoN); + Float_t stereoP, stereoN; + Angles(stereoP,stereoN); + Float_t tanP=TMath::Tan(stereoP); + Float_t tanN=TMath::Tan(stereoN); Float_t x1=x,z1=z; x1 += fDx/2; z1 += fDz/2; @@ -186,25 +213,25 @@ void AliITSsegmentationSSD::GetPadIxz(Float_t x,Float_t z,Int_t &iP,Int_t &iN){ } //------------------------------------------------------- -void AliITSsegmentationSSD::GetPadCxz(Int_t iP,Int_t iN,Float_t &x,Float_t &z){ +void AliITSsegmentationSSD::GetPadCxz(Int_t iP,Int_t iN,Float_t &x,Float_t &z) const { // actually this is the GetCrossing(Float_t &,Float_t &) // returns local x, z in microns ! - Float_t Dx = fDx; // detector size in x direction, microns - Float_t Dz = fDz; // detector size in z direction, microns + Float_t lDx = fDx; // detector size in x direction, microns + Float_t lDz = fDz; // detector size in z direction, microns Float_t xP; // x coordinate in the P side from the first P strip Float_t xN; // x coordinate in the N side from the first N strip - Float_t StereoP, StereoN; - Angles(StereoP,StereoN); - Float_t kP=TMath::Tan(StereoP); - Float_t kN=TMath::Tan(StereoN); + Float_t stereoP, stereoN; + Angles(stereoP,stereoN); + Float_t kP=TMath::Tan(stereoP); + Float_t kN=TMath::Tan(stereoN); xP=iP*fPitch; xN=iN*fPitch; - x = xP + kP*(Dz*kN-xP+xN)/(kP+kN); - z = (Dz*kN-xP+xN)/(kP+kN); - x -= Dx/2; - z -= Dz/2; + x = xP + kP*(lDz*kN-xP+xN)/(kP+kN); + z = (lDz*kN-xP+xN)/(kP+kN); + x -= lDx/2; + z -= lDz/2; //if(TMath::Abs(z) > Dz/2) cout<<"Warning, wrong z local ="<=fNstrips) iN=-1; // strip number must be in range. - return; + return kTRUE; } //---------------------------------------------------------------------- void AliITSsegmentationSSD::DetToLocal(Int_t ix,Int_t iPN, - Float_t &x,Float_t &z){ + Float_t &x,Float_t &z) const{ // Transformation from detector segmentation/cell coordiantes starting // from 0. iPN=0 for P side and 1 for N side strip. Returned is z=0.0 // and the corresponding x value.. @@ -281,8 +308,8 @@ void AliITSsegmentationSSD::DetToLocal(Int_t ix,Int_t iPN, const Double_t kconst = 1.0E-04; // convert microns to cm. Float_t flag=kconst*Dx(); // error value Double_t th=0.0,dx,dz,i,a,b=0.0,xb[4],zb[4]; - Float_t StereoP, StereoN; - Angles(StereoP,StereoN); + Float_t stereoP, stereoN; + Angles(stereoP,stereoN); z = 0.0; // Strip center in z. if(iPN<0 || iPN>1){// if error return full detector size in x. @@ -298,10 +325,10 @@ void AliITSsegmentationSSD::DetToLocal(Int_t ix,Int_t iPN, dz = 0.5*kconst*Dz(); // half distance in z in cm a = kconst*Dpx(ix)*(i+0.5)-dx; // Min x value. if(iPN==0){ //P-side angle defined backwards. - th = TMath::Tan(StereoP); + th = TMath::Tan(stereoP); b = dz*th; }else if(iPN==1){ // N-side - th = TMath::Tan(-StereoN); + th = TMath::Tan(-stereoN); b = -dz*th; } // end if // compute average/center position of the strip. @@ -351,11 +378,11 @@ Bool_t AliITSsegmentationSSD::GetCrossing(Int_t iP,Int_t iN, */ const Double_t kconst = 1.0E-04; // convert microns to cm. Double_t thp,thn,th,dx,dz,p,ip,in; - Float_t StereoP, StereoN; - Angles(StereoP,StereoN); + Float_t stereoP, stereoN; + Angles(stereoP,stereoN); - thp = TMath::Tan(StereoP); - thn = TMath::Tan(-StereoN); + thp = TMath::Tan(stereoP); + thn = TMath::Tan(-stereoN); th = thp-thn; if(th==0.0) { // parall strips then never cross. x = 0.0; @@ -382,3 +409,15 @@ Bool_t AliITSsegmentationSSD::GetCrossing(Int_t iP,Int_t iN, // cross. return kTRUE; } + +//---------------------------------------------------------------------- +void AliITSsegmentationSSD::PrintDefaultParameters() const { +// Print default values for parameters. +// Values specified as static const data members are shown + + cout<<"fgkDxDefault = "<