New ITS code for new structure and simulations.
[u/mrichter/AliRoot.git] / ITS / AliITSsegmentationSDD.h
1 #ifndef ALIITSSEGMENTATIONSDD_H
2 #define ALIITSSEGMENTATIONSDD_H
3
4
5 #include "AliITSsegmentation.h"
6 #include "AliITSresponse.h"
7
8 // segmentation for SDD
9
10 class AliITSsegmentationSDD :
11 public AliITSsegmentation {
12  public:
13
14
15     AliITSsegmentationSDD();
16     AliITSsegmentationSDD(AliITSgeom *gm, AliITSresponse *resp);
17     AliITSsegmentationSDD(AliITSsegmentationSDD &source);
18     virtual ~AliITSsegmentationSDD(){}
19     AliITSsegmentationSDD& operator=(AliITSsegmentationSDD &source);
20
21     // Set Detector Segmentation Parameters
22     //
23     // Detector size : x,z,y
24   virtual  void   SetDetSize
25           (Float_t p1=35000., Float_t p2=76800., Float_t p3= 300.) 
26           {fDx=p1; fDz=p2; fDy=p3;}
27
28     // Cell size dz*dx  
29     virtual void    SetCellSize(Float_t pitch=200., Float_t clock=40.) 
30                          {fPitch=pitch;fTimeStep=1000./clock;}
31
32     // Maximum number of cells along the two coordinates z,x (anodes,samples) 
33     virtual void    SetNCells(Int_t p1=384, Int_t p2=256) 
34                          {fNanodes=2*p1;fNsamples=p2;}
35
36     // Transform from real local to cell coordinates
37     virtual void    GetCellIxz(Float_t &x ,Float_t &z ,Int_t   &ix,Int_t   &iz);
38     // Transform from cell to real local coordinates
39     virtual void    GetCellCxz(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     //
45     // Initialisation
46     virtual void Init();
47     //
48     // Get member data
49     //
50     // Detector type geometry
51     virtual AliITSgeom* Geometry() {return fGeom;}
52     // Detector length
53     virtual Float_t Dx() {return fDx;}
54     // Detector width
55     virtual Float_t Dz()  {return fDz;}  
56     // Detector thickness
57     virtual Float_t Dy() {return fDy;}
58     // Cell size in x
59     virtual Float_t Dpx(Int_t dummy) {return fTimeStep;}
60     // Cell size in z 
61     virtual Float_t Dpz(Int_t dummy) {return fPitch;} 
62
63     // Maximum number of samples in x
64     virtual Int_t    Npx() {return fNsamples;}
65     // Maximum number of anodes in z
66     virtual Int_t    Npz() {return fNanodes;}
67
68     //
69     // Get next neighbours 
70     virtual void Neighbours
71       (Int_t iX, Int_t iZ, Int_t* Nlist, Int_t Xlist[10], Int_t Zlist[10]);
72
73     // Set cell position
74     virtual void     SetPad(Int_t, Int_t) {}
75     // Set hit position
76     virtual void     SetHit(Float_t, Float_t) {}
77     
78     //
79     // Iterate over cells 
80     // Initialiser
81     virtual void  FirstCell
82           (Float_t xhit, Float_t zhit, Float_t dx, Float_t dz) {}
83     // Stepper
84     virtual void  NextCell() {}
85     // Condition
86     virtual Int_t MoreCells() {return 0;}
87     //
88     // Current cell cursor during disintegration
89     // x-coordinate
90     virtual Int_t  Ix() {return 0;}
91     // z-coordinate
92     virtual Int_t  Iz() {return 0;}
93     //
94     // Signal Generation Condition during Stepping
95     virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z) {return 0;}
96     // Initialise signal generation at coord (x,y,z)
97     virtual void  SigGenInit(Float_t x, Float_t y, Float_t z) {}
98     // Current integration limits 
99     virtual void  IntegrationLimits
100     (Float_t& x1, Float_t& x2, Float_t& z1, Float_t& z2) {}
101     // Test points for auto calibration
102     virtual void GiveTestPoints(Int_t &n, Float_t *x, Float_t *z) {}
103     // Function for systematic corrections
104     // Set the correction function
105     virtual void SetCorrFunc(Int_t, TF1*) {}
106     // Get the correction Function
107     virtual TF1* CorrFunc(Int_t) {return 0;}
108             
109   protected:
110
111     Int_t      fNsamples;      // Number of time samples in x
112     Int_t      fNanodes;       // Summed # of anodes in the two det halves (z)
113     Float_t    fPitch;         // Anode pitch - microns
114     Float_t    fTimeStep;      // Sampling time - ns
115     Float_t    fDx   ;         // Full width of the detector (x axis) - microns
116     Float_t    fDz    ;        // Length of half-detector (z axis) - microns
117     Float_t    fDy;            // Full thickness of the detector (y axis)
118
119     AliITSgeom *fGeom;         // pointer to the geometry class
120     AliITSresponse *fResponse; // pointer to the response class
121    
122     TF1*       fCorr;          // correction function
123
124     ClassDef(AliITSsegmentationSDD,1) // SDD segmentation
125 };
126
127 #endif