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