]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSsegmentationSSD.h
Update and patch for reading AliITSgeom from the file
[u/mrichter/AliRoot.git] / ITS / AliITSsegmentationSSD.h
1 #ifndef ALIITSSEGMENTATIONSSD_H
2 #define ALIITSSEGMENTATIONSSD_H
3
4 #include "AliITSsegmentation.h"
5
6 // segmentation for SSD
7
8 class AliITSsegmentationSSD :
9 public AliITSsegmentation {
10  public:
11
12     AliITSsegmentationSSD();
13     AliITSsegmentationSSD(AliITSgeom *gm);
14     AliITSsegmentationSSD(AliITSsegmentationSSD &source);
15     virtual ~AliITSsegmentationSSD(){}
16     AliITSsegmentationSSD& operator=(AliITSsegmentationSSD &source);
17
18
19     // Detector size: x,z,y 
20     virtual void    SetDetSize(Float_t p1=72960.,Float_t p2=40000.,
21                                Float_t p3= 300.) 
22                         {fDx=p1; fDz=p2; fDy=p3;}
23
24     // Strip size  
25     virtual void    SetPadSize(Float_t pitch=95.,Float_t d=1.0)
26         {fPitch=pitch;d=1.;}
27
28     // Maximum number of strips along the two coordinates  
29     virtual void    SetNPads(Int_t p1=768,Int_t d=1){fNstrips=p1;d=1;}
30     // Returns the maximum number of cells (digits) posible
31     virtual Int_t   GetNPads(){return 2*fNstrips;}
32
33
34     // Set stereo angles Pside-Nside 
35     virtual void    SetAngles(Float_t pa=0.0175, Float_t na=0.0175) 
36                          {fStereoPl5=pa; fStereoNl5=na;
37                          fStereoPl6=na; fStereoNl6=pa;}
38
39     virtual void    SetAnglesLay5(Float_t pa=0.0075, Float_t na=0.0275) 
40                          {fStereoPl5=pa; fStereoNl5=na;}
41
42     virtual void    SetAnglesLay6(Float_t pa=0.0275, Float_t na=0.0075) 
43                          {fStereoPl6=pa; fStereoNl6=na;}
44
45     // Set stereo angles Pside-Nside 
46     // Transform from real coordinates to strips
47     virtual void    GetPadIxz(Float_t x ,Float_t z ,Int_t   &iP,Int_t  &iN);
48     // Transform from strips to real coordinates
49     virtual void    GetPadCxz(Int_t iP, Int_t iN, Float_t &x , Float_t &z);
50     virtual void    GetPadTxz(Float_t &x , Float_t &z);
51
52     // Transform from real global to local coordinates
53     virtual void    GetLocal(Int_t,Float_t *,Float_t *) {}
54     // Transform from real local to global coordinates
55     virtual void    GetGlobal(Int_t,Float_t *,Float_t *) {}
56     // Transformation from Geant cm detector center local coordinates
57     // to detector P and N side strip numbers..
58     virtual void    LocalToDet(Float_t x,Float_t z,Int_t &iP,Int_t &iN);
59     // Transformation from detector segmentation/cell coordiantes starting
60     // from 0. iPN=0 for P side and 1 for N side strip. Returned is z=0.0
61     // and the corresponding x value..
62     virtual void    DetToLocal(Int_t ix,Int_t iPN,Float_t &x,Float_t &z);
63     // Given one P side strip and one N side strip, Returns kTRUE if they
64     // cross each other and the location of the two crossing strips and
65     // their correxlation matrix c[2][2].
66     virtual Bool_t  GetCrossing(Int_t iP,Int_t iN,Float_t &x,Float_t &z,
67                                 Float_t c[2][2]);
68
69     virtual void Init();
70
71     // Detector type geometry
72     virtual AliITSgeom* Geometry() {return 0;}
73     // Detector length
74     virtual Float_t Dx() {return fDx;}
75     // Detector width
76     virtual Float_t Dz() {return fDz;}
77     // Detector thickness
78     virtual Float_t Dy() {return fDy;}
79     // Strip size in x
80     virtual Float_t Dpx(Int_t) {return fPitch;}
81     // Strip size in z 
82     virtual Float_t Dpz(Int_t) {return fDz;}
83     // Maximum number of Strips in x
84     virtual Int_t    Npx() {return fNstrips;}
85     // Maximum number of Strips in z
86     virtual Int_t    Npz(){return 1;}
87
88     // Angles : Pside stereo angle-Nside stereo angle
89      virtual void Angles(Float_t &aP,Float_t &aN);
90      virtual void SetLayer(Int_t l);
91      virtual Int_t GetLayer() const {return fLayer;}
92
93   protected:
94
95   Int_t      fNstrips;       // Number of strips in x 
96   Float_t    fStereoP;       // Stereo angle for Pside (rad)
97   Float_t    fStereoN;       // Stereo angle for Nside (rad)
98   Float_t    fPitch;         // Pitch of the strips
99   Float_t    fDz;            // Full width of the detector (z axis)- microns
100   Float_t    fDx;            // Full length of the detector (x axis)- microns
101   Float_t    fDy;            // Full thickness of the detector (y axis) -um 
102   
103   Float_t    fStereoPl5;       // Stereo angle for Pside
104   Float_t    fStereoNl5;       // Stereo angle for Nside
105   Float_t    fStereoPl6;       // Stereo angle for Pside
106   Float_t    fStereoNl6;       // Stereo angle for Nside
107   Int_t      fLayer;
108
109   AliITSgeom *fGeom;         //! pointer to the geometry class
110   TF1*       fCorr;          // correction function
111   
112   ClassDef(AliITSsegmentationSSD,1) //Segmentation class for SSD 
113 };
114
115 #endif