]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSsegmentationSSD.h
cba17f53c680bbc421bf89354d471259c889678b
[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 /* $Id$ */
9
10 class AliITSsegmentationSSD :
11 public AliITSsegmentation {
12  public:
13
14     AliITSsegmentationSSD(Option_t *opt="");
15     AliITSsegmentationSSD(AliITSgeom *gm);
16     AliITSsegmentationSSD(const AliITSsegmentationSSD &source);
17     virtual ~AliITSsegmentationSSD(){}
18     AliITSsegmentationSSD& operator=(const AliITSsegmentationSSD &source);
19
20
21     // Strip size  
22     virtual void    SetPadSize(Float_t pitch,Float_t /* d */)
23         {fPitch=pitch;}
24
25     // Maximum number of strips along the two coordinates  
26     virtual void    SetNPads(Int_t p1,Int_t /* d */){fNstrips=p1;}
27     // Returns the maximum number of cells (digits) posible
28     virtual Int_t   GetNPads() const {return 2*fNstrips;}
29
30
31     // Set stereo angles Pside-Nside 
32     virtual void    SetAngles(Float_t pa=0.0175, Float_t na=0.0175) 
33                          {fStereoPl5=pa; fStereoNl5=na;
34                          fStereoPl6=na; fStereoNl6=pa;}
35
36     virtual void    SetAnglesLay5(Float_t pa=0.0075, Float_t na=0.0275) 
37                          {fStereoPl5=pa; fStereoNl5=na;}
38
39     virtual void    SetAnglesLay6(Float_t pa=0.0275, Float_t na=0.0075) 
40                          {fStereoPl6=pa; fStereoNl6=na;}
41
42     // Set stereo angles Pside-Nside 
43     // Transform from real coordinates to strips
44     virtual void    GetPadIxz(Float_t x ,Float_t z ,Int_t   &iP,Int_t  &iN) const;
45     // Transform from strips to real coordinates
46     virtual void    GetPadCxz(Int_t iP, Int_t iN, Float_t &x , Float_t &z) const;
47     virtual void    GetPadTxz(Float_t &x , Float_t &z) const;
48     // Transformation from Geant cm detector center local coordinates
49     // to detector P and N side strip numbers..
50     virtual Bool_t  LocalToDet(Float_t x,Float_t z,Int_t &iP,Int_t &iN) const;
51     // Transformation from detector segmentation/cell coordiantes starting
52     // from 0. iPN=0 for P side and 1 for N side strip. Returned is z=0.0
53     // and the corresponding x value..
54     virtual void    DetToLocal(Int_t ix,Int_t iPN,Float_t &x,Float_t &z) const;
55     // Given one P side strip and one N side strip, Returns kTRUE if they
56     // cross each other and the location of the two crossing strips and
57     // their correxlation matrix c[2][2].
58     virtual Bool_t  GetCrossing(Int_t iP,Int_t iN,Float_t &x,Float_t &z,
59                                 Float_t c[2][2]);
60
61
62     virtual Int_t    GetNumberOfChips() const {
63       return fgkNchipsPerSide;
64     }
65     virtual Int_t    GetChipFromLocal(Float_t xloc, Float_t zloc) const;
66     virtual Int_t    GetChipFromChannel(Int_t ix, Int_t iz) const;
67
68
69     virtual void Init();
70
71     // Strip size in x
72     virtual Float_t Dpx(Int_t) const {return fPitch;}
73     // Strip size in z 
74     virtual Float_t Dpz(Int_t) const {return fDz;}
75     // Maximum number of Strips in x
76     virtual Int_t    Npx() const {return fNstrips;}
77     // Maximum number of Strips in z
78     virtual Int_t    Npz()const {return 1;}
79
80     // Angles : Pside stereo angle-Nside stereo angle
81      virtual void Angles(Float_t &aP,Float_t &aN) const;
82      virtual void SetLayer(Int_t l);
83      virtual Int_t GetLayer() const {return fLayer;}
84     // Print Default parameters
85      virtual void PrintDefaultParameters() const;
86
87   protected:
88
89   virtual void Copy(TObject &obj) const; 
90
91   Int_t      fNstrips;       // Number of strips in x 
92   Float_t    fStereoP;       // Stereo angle for Pside (rad)
93   Float_t    fStereoN;       // Stereo angle for Nside (rad)
94   Float_t    fPitch;         // Pitch of the strips
95   
96   Float_t    fStereoPl5;       // Stereo angle for Pside
97   Float_t    fStereoNl5;       // Stereo angle for Nside
98   Float_t    fStereoPl6;       // Stereo angle for Pside
99   Float_t    fStereoNl6;       // Stereo angle for Nside
100   Int_t      fLayer;           //! layer number (5 or 6)
101   static const Float_t fgkDxDefault;  // Default value for fDx
102   static const Float_t fgkDzDefault;  // Default value for fDz
103   static const Float_t fgkDyDefault;  // Default value for fDy
104   static const Float_t fgkPitchDefault; //Default value for fPitch
105   static const Int_t fgkNstripsDefault; //Default value for fNstrips
106   static const Int_t fgkNchipsPerSide;    //number of chips per side
107   static const Int_t fgkNstripsPerChip;    //number of strips per chip
108
109   ClassDef(AliITSsegmentationSSD,3) //Segmentation class for SSD 
110 };
111
112 #endif