]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSsegmentationSDD.h
Inheritance from TObject. Automatic streamers.
[u/mrichter/AliRoot.git] / ITS / AliITSsegmentationSDD.h
1 #ifndef ALIITSSEGMENTATIONSDD_H
2 #define ALIITSSEGMENTATIONSDD_H
3
4
5 #include "AliITSsegmentation.h"
6
7 // segmentation for SDD
8
9 class AliITSresponse;
10 class AliITSsegmentationSDD :
11 public AliITSsegmentation {
12  public:
13
14
15     AliITSsegmentationSDD();
16     AliITSsegmentationSDD(AliITSgeom *gm, AliITSresponse *resp);
17     virtual ~AliITSsegmentationSDD(){}
18
19     // Set Detector Segmentation Parameters
20     //
21     // Detector size : x,z,y
22     virtual  void   SetDetSize
23           (Float_t p1=35085., Float_t p2=75264., Float_t p3= 300.) 
24           {fDx=p1; fDz=p2; fDy=p3;}
25
26     // Cell size dz*dx  
27     virtual void    SetPadSize(Float_t pitch=294., Float_t clock=40.) 
28                          {fPitch=pitch;fTimeStep=1000./clock;}
29
30     // Maximum number of cells along the two coordinates z,x (anodes,samples) 
31     virtual void    SetNPads(Int_t p1=256, Int_t p2=256) 
32                          {fNanodes=2*p1;fNsamples=p2;}
33     // Returns the maximum number of cells (digits) posible
34     virtual Int_t   GetNPads(){return fNanodes*fNsamples;}
35
36     // Transform from real local to cell coordinates
37     virtual void    GetPadIxz(Float_t x ,Float_t z ,Int_t   &ix,Int_t   &iz);
38     // Transform from cell to real local coordinates
39     virtual void    GetPadCxz(Int_t   ix,Int_t   iz,Float_t &x ,Float_t &z );
40     // Transform from real global to local coordinates
41     virtual void    GetLocal(Int_t module,Float_t *g ,Float_t *l);
42     // Transform from real local to global coordinates
43     virtual void    GetGlobal(Int_t module,Float_t *l ,Float_t *g);
44     // Get anode and time bucket as floats - numbering from 0
45     virtual void    GetPadTxz(Float_t &x ,Float_t &z);
46     // Transformation from Geant cm detector center local coordinates
47     // to detector segmentation/cell coordiantes starting from (0,0).
48     virtual void    LocalToDet(Float_t x,Float_t z,Int_t &ix,Int_t &iz);
49     // Transformation from detector segmentation/cell coordiantes starting
50     // from (0,0) to Geant cm detector center local coordinates.
51     virtual void    DetToLocal(Int_t ix,Int_t iz,Float_t &x,Float_t &z);
52     //
53     // Initialisation
54     virtual void Init();
55     //
56     // Get member data
57     //
58     // Detector type geometry
59     AliITSgeom* Geometry() {return fGeom;}
60     // Detector length
61     virtual Float_t Dx() {return fDx;}
62     // Detector drift distance or detector active area half width
63     virtual Float_t Dz()  {return fDz;}  
64     // Detector thickness
65     virtual Float_t Dy() {return fDy;}
66     // Cell size in x
67     virtual Float_t Dpx(Int_t dummy) {return fTimeStep;}
68     // Cell size in z 
69     virtual Float_t Dpz(Int_t dummy) {return fPitch;} 
70
71     // Maximum number of samples in x
72     virtual Int_t    Npx() {return fNsamples;}
73     // Maximum number of anodes in z
74     virtual Int_t    Npz() {return fNanodes;}
75
76     //
77     // Get next neighbours 
78     virtual void Neighbours
79       (Int_t iX, Int_t iZ, Int_t* Nlist, Int_t Xlist[10], Int_t Zlist[10]);
80
81     // Set cell position
82     virtual void     SetPad(Int_t, Int_t) {}
83     // Set hit position
84     virtual void     SetHit(Float_t, Float_t) {}
85     
86     //
87     // Iterate over cells 
88     // Initialiser
89     virtual void  FirstPad
90           (Float_t xhit, Float_t zhit, Float_t dx, Float_t dz) {}
91     // Stepper
92     virtual void  NextPad() {}
93     // Condition
94     virtual Int_t MorePads() {return 0;}
95     //
96     // Current cell cursor during disintegration
97     // x-coordinate
98     virtual Int_t  Ix() {return 0;}
99     // z-coordinate
100     virtual Int_t  Iz() {return 0;}
101     //
102     // Signal Generation Condition during Stepping
103     virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z) {return 0;}
104     // Initialise signal generation at coord (x,y,z)
105     virtual void  SigGenInit(Float_t x, Float_t y, Float_t z) {}
106     // Current integration limits 
107     virtual void  IntegrationLimits
108     (Float_t& x1, Float_t& x2, Float_t& z1, Float_t& z2) {}
109     // Test points for auto calibration
110     virtual void GiveTestPoints(Int_t &n, Float_t *x, Float_t *z) {}
111     // Function for systematic corrections
112     // Set the correction function
113     virtual void SetCorrFunc(Int_t, TF1*) {}
114     // Get the correction Function
115     virtual TF1* CorrFunc(Int_t) {return 0;}
116     // Print Parameters
117     virtual void    Print(Option_t *opt="") const;
118             
119   private:
120
121     AliITSsegmentationSDD(AliITSsegmentationSDD &source);
122     AliITSsegmentationSDD& operator=(AliITSsegmentationSDD &source);
123
124   protected:
125
126     Int_t      fNsamples; // Number of time samples in x
127     Int_t      fNanodes;  // Summed # of anodes in the two det halves (z)
128     Float_t    fPitch;    // Anode pitch - microns
129     Float_t    fTimeStep; // Sampling time - ns
130     Float_t    fDx;       // Drift distance of the 1/2detector (x axis)-microns
131     Float_t    fDz;       // Length of half-detector (z axis) - microns
132     Float_t    fDy;       // Full thickness of the detector (y axis) - microns
133     Float_t    fDriftSpeed;  // Drift speed 
134
135     AliITSgeom *fGeom;         //! pointer to the geometry class
136     TF1*       fCorr;          // correction function
137
138     ClassDef(AliITSsegmentationSDD,2) // SDD segmentation
139 };
140
141 #endif