#include "AliITSsegmentation.h"
-// segmentation for SSD
+//////////////////////////////////////////////////////
+// Segmentation class for SSD //
+// //
+//////////////////////////////////////////////////////
+
+/* $Id$ */
class AliITSsegmentationSSD :
public AliITSsegmentation {
public:
- AliITSsegmentationSSD();
- AliITSsegmentationSSD(AliITSgeom *gm);
- AliITSsegmentationSSD(AliITSsegmentationSSD &source);
+ AliITSsegmentationSSD(Option_t *opt="");
+ AliITSsegmentationSSD(const AliITSsegmentationSSD &source);
virtual ~AliITSsegmentationSSD(){}
- AliITSsegmentationSSD& operator=(AliITSsegmentationSSD &source);
-
+ AliITSsegmentationSSD& operator=(const AliITSsegmentationSSD &source);
- // Detector size: x,z,y
- virtual void SetDetSize
- (Float_t p1=72960., Float_t p2=40000., Float_t p3= 300.)
- {fDx=p1; fDz=p2; fDy=p3;}
// Strip size
- virtual void SetPadSize(Float_t pitch=95., Float_t dummy=1.)
- {fPitch=pitch;}
+ virtual void SetPadSize(Float_t pitch,Float_t /* d */)
+ {fPitch=pitch;}
// Maximum number of strips along the two coordinates
- virtual void SetNPads(Int_t p1=768, Int_t dummy=1)
- {fNstrips=p1;}
+ virtual void SetNPads(Int_t p1,Int_t /* d */){fNstrips=p1;}
+ // Returns the maximum number of cells (digits) posible
+ virtual Int_t GetNPads() const {return 2*fNstrips;}
// Set stereo angles Pside-Nside
- virtual void SetAngles(Float_t pa=0.0175, Float_t na=0.0175)
+ virtual void SetAngles(Float_t pa=0.0075, Float_t na=0.0275)
{fStereoP=pa; fStereoN=na;}
+ // Set stereo angles Pside-Nside
// Transform from real coordinates to strips
- virtual void GetPadIxz
- (Float_t x ,Float_t z ,Int_t &iP,Int_t &iN);
+ virtual void GetPadIxz(Float_t x ,Float_t z ,Int_t &iP,Int_t &iN) const;
// Transform from strips to real coordinates
- virtual void GetPadCxz
- (Int_t iP, Int_t iN, Float_t &x , Float_t &z);
-
- // Transform from real global to local coordinates
- virtual void GetLocal(Int_t module,Float_t *g ,Float_t *l) {}
- // Transform from real local to global coordinates
- virtual void GetGlobal(Int_t module,Float_t *l ,Float_t *g) {}
+ void GetPadCxz(Float_t iP, Float_t iN, Float_t &x , Float_t &z) const;
+ virtual void GetPadCxz(Int_t iP, Int_t iN, Float_t &x , Float_t &z) const { GetPadCxz((Float_t) iP, (Float_t) iN, x, z); }
+ virtual void GetPadTxz(Float_t &x , Float_t &z) const;
+ // Transformation from Geant cm detector center local coordinates
+ // to detector P and N side strip numbers..
+ virtual Bool_t LocalToDet(Float_t x,Float_t z,Int_t &iP,Int_t &iN) 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..
+ virtual void DetToLocal(Int_t ix,Int_t iPN,Float_t &x,Float_t &z) const;
+
+ virtual Int_t GetNumberOfChips() const {
+ return fgkNchipsPerSide;
+ }
+ virtual Int_t GetMaximumChipIndex() const{
+ return fgkNchipsPerSide*2-1;
+ }
+ virtual Int_t GetChipFromLocal(Float_t xloc, Float_t zloc) const;
+ virtual Int_t GetChipFromChannel(Int_t ix, Int_t iz) const;
+ virtual Int_t GetChipsInLocalWindow(Int_t* array, Float_t zmin, Float_t zmax, Float_t xmin, Float_t xmax) const;
virtual void Init();
- // Detector type geometry
- virtual AliITSgeom* Geometry() {return 0;}
- // Detector length
- virtual Float_t Dx() {return fDx;}
- // Detector width
- virtual Float_t Dz() {return fDz;}
- // Detector thickness
- virtual Float_t Dy() {return fDy;}
// Strip size in x
- virtual Float_t Dpx(Int_t) {return fPitch;}
+ virtual Float_t Dpx(Int_t) const {return fPitch;}
// Strip size in z
- virtual Float_t Dpz(Int_t) {return fDz;}
+ virtual Float_t Dpz(Int_t) const {return fDz;}
// Maximum number of Strips in x
- virtual Int_t Npx() {return fNstrips;}
+ virtual Int_t Npx() const {return fNstrips;}
// Maximum number of Strips in z
- virtual Int_t Npz(){return 1;}
+ virtual Int_t Npz()const {return 1;}
// Angles : Pside stereo angle-Nside stereo angle
- virtual void Angles(Float_t &aP,Float_t &aN)
- {aP=fStereoP;aN=fStereoN;}
+ virtual void Angles(Float_t &aP,Float_t &aN) const;
+ virtual void SetLayer(Int_t l);
+ virtual Int_t GetLayer() const {return fLayer;}
+ // Print Default parameters
+ virtual void PrintDefaultParameters() const;
protected:
+ virtual void Copy(TObject &obj) const;
+
Int_t fNstrips; // Number of strips in x
- Float_t fStereoP; // Stereo angle for Pside
- Float_t fStereoN; // Stereo angle for Nside
+ Float_t fStereoP; // Stereo angle for Pside (rad)
+ Float_t fStereoN; // Stereo angle for Nside (rad)
Float_t fPitch; // Pitch of the strips
- Float_t fDz; // Full width of the detector (z axis)- microns
- Float_t fDx; // Full length of the detector (x axis)- microns
- Float_t fDy; // Full thickness of the detector (y axis) -um
-
- AliITSgeom *fGeom; //! pointer to the geometry class
- TF1* fCorr; // correction function
- ClassDef(AliITSsegmentationSSD,1) //Segmentation class for SSD
+ Int_t fLayer; //! layer number (5 or 6)
+ static const Float_t fgkDxDefault; // Default value for fDx
+ static const Float_t fgkDzDefault; // Default value for fDz
+ static const Float_t fgkDyDefault; // Default value for fDy
+ static const Float_t fgkPitchDefault; //Default value for fPitch
+ static const Int_t fgkNstripsDefault; //Default value for fNstrips
+ static const Int_t fgkNchipsPerSide; //number of chips per side
+ static const Int_t fgkNstripsPerChip; //number of strips per chip
+
+ ClassDef(AliITSsegmentationSSD,4) //Segmentation class for SSD
};
#endif