Line data Source code
1 : #ifndef ALIITSSEGMENTATIONSDD_H
2 : #define ALIITSSEGMENTATIONSDD_H
3 :
4 :
5 : #include "AliITSsegmentation.h"
6 :
7 : //////////////////////////////////////////////////////
8 : // Segmentation class for SDD //
9 : // //
10 : //////////////////////////////////////////////////////
11 : class AliITSsegmentationSDD :
12 : public AliITSsegmentation {
13 : public:
14 :
15 :
16 : AliITSsegmentationSDD(Option_t *opt="");
17 : AliITSsegmentationSDD(const AliITSsegmentationSDD &source);
18 : AliITSsegmentationSDD& operator=(const AliITSsegmentationSDD &source);
19 1074 : virtual ~AliITSsegmentationSDD(){}
20 :
21 : // Set Detector Segmentation Parameters
22 : //
23 : // get the drift speed used for this segmentation
24 0 : virtual Float_t GetDriftSpeed()const{return fDriftSpeed;}
25 : // Set the drift speed needed for this segmentation
26 : virtual void SetDriftSpeed(Float_t ds){
27 344 : fDriftSpeed = ds;
28 172 : fSetDriftSpeed=kTRUE;
29 172 : }
30 : // Cell size dz*dx
31 : virtual void SetPadSize(Float_t pitch, Float_t clock)
32 372 : {fPitch=pitch;fTimeStep=1000./clock;}
33 :
34 : // Maximum number of cells along the two coordinates z,x (anodes,samples)
35 : virtual void SetNPads(Int_t p1, Int_t p2)
36 372 : {fNanodes=2*p1;fNsamples=p2;}
37 : // Returns the maximum number of cells (digits) posible
38 0 : virtual Int_t GetNPads() const {return fNanodes*fNsamples;}
39 :
40 : // Transform from real local to cell coordinates
41 : virtual void GetPadIxz(Float_t x ,Float_t z ,Int_t &ix,Int_t &iz) const;
42 : // Transform from cell to real local coordinates
43 : virtual void GetPadCxz(Int_t ix,Int_t iz,Float_t &x ,Float_t &z ) const;
44 :
45 : // Get anode and time bucket as floats - numbering from 0
46 : virtual void GetPadTxz(Float_t &x ,Float_t &z) const;
47 : // Transformation from Geant cm detector center local coordinates
48 : // to detector segmentation/cell coordiantes starting from (0,0).
49 : virtual Bool_t LocalToDet(Float_t x,Float_t z,Int_t &ix,Int_t &iz) const;
50 : // Transformation from detector segmentation/cell coordiantes starting
51 : // from (0,0) to Geant cm detector center local coordinates.
52 : virtual void DetToLocal(Int_t ix,Int_t iz,Float_t &x,Float_t &z) const;
53 : //
54 : virtual Float_t GetAnodeFromLocal(Float_t x,Float_t z) const;
55 : virtual Int_t GetSideFromLocalX(Float_t xloc) const {
56 11981 : if(xloc>0) return 0; // left side (channel 0) positive xloc
57 2248 : else return 1; // right side (channel 1) negative xloc
58 4743 : }
59 : virtual Float_t GetLocalZFromAnode(Int_t nAnode) const;
60 : virtual Float_t GetLocalZFromAnode(Float_t zAnode) const;
61 : virtual Float_t GetDriftTimeFromTb(Int_t tb) const {
62 0 : Float_t xtb=(Float_t)tb+0.5;
63 0 : return GetDriftTimeFromTb(xtb);
64 : }
65 : virtual Float_t GetDriftTimeFromTb(Float_t xtb) const {
66 460 : return xtb*fTimeStep;
67 : }
68 : virtual Int_t GetNumberOfChips() const {
69 0 : return fgkNchipsPerHybrid;
70 : }
71 : virtual Int_t GetMaximumChipIndex() const{
72 1040 : return fgkNchipsPerHybrid*2-1;
73 : }
74 : virtual Int_t GetChipFromLocal(Float_t xloc, Float_t zloc) const;
75 : virtual Int_t GetChipsInLocalWindow(Int_t* array, Float_t zmin, Float_t zmax, Float_t xmin, Float_t xmax) const;
76 :
77 :
78 : virtual Int_t GetChipFromChannel(Int_t ix, Int_t iz) const;
79 :
80 : // Initialisation
81 : virtual void Init();
82 :
83 : //
84 : // Get member data
85 : //
86 : // Cell size in x
87 198 : virtual Float_t Dpx(Int_t) const {return fTimeStep;}
88 : // Cell size in z
89 212 : virtual Float_t Dpz(Int_t) const {return fPitch;}
90 :
91 : // Maximum number of samples in x
92 14 : virtual Int_t Npx() const {return fNsamples;}
93 : // Maximum number of anodes in z
94 1058 : virtual Int_t Npz() const {return fNanodes;}
95 : // Maximum number of anodes in z
96 1040 : virtual Int_t NpzHalf() const {return fNanodes/2;}
97 :
98 : //
99 : // Get next neighbours
100 : virtual void Neighbours(Int_t iX,Int_t iZ,Int_t* Nlist,Int_t Xlist[10],
101 : Int_t Zlist[10]) const;
102 :
103 : // Current integration limits
104 0 : virtual void IntegrationLimits(Float_t&,Float_t&,Float_t&,Float_t&) {}
105 : // Print Parameters
106 : virtual void Print(Option_t *opt="") const;
107 : // Print default parameters (static const data members, if any)
108 : virtual void PrintDefaultParameters() const;
109 :
110 0 : static Int_t GetNAnodesPerHybrid() { return fgkHalfNanodesDefault;}
111 : protected:
112 :
113 : virtual void Copy(TObject &obj) const;
114 :
115 : Int_t fNsamples; // Number of time samples in x
116 : Int_t fNanodes; // Summed # of anodes in the two det halves (z)
117 : Float_t fPitch; // Anode pitch - microns
118 : Float_t fTimeStep; // Sampling time - ns
119 : Float_t fDriftSpeed; // Drift speed
120 : Bool_t fSetDriftSpeed; // flag for usage of drift speed
121 : static const Float_t fgkDxDefault; // Default value for fDx
122 : static const Float_t fgkDzDefault; // Default value for fDz
123 : static const Float_t fgkDyDefault; // Default value for fDy
124 : static const Float_t fgkPitchDefault; //Default value for fPitch
125 : static const Float_t fgkClockDefault; //Default value for the clock freq.
126 : static const Int_t fgkHalfNanodesDefault; //Default value for fNanodes/2
127 : static const Int_t fgkNsamplesDefault; //Default value for fNsamples
128 : static const Int_t fgkNchipsPerHybrid; //number of chips per hybrid
129 : static const Int_t fgkNanodesPerChip; //number of chips per hybrid
130 : static const Float_t fgkCm2Micron; // conversion from cm to micron
131 : static const Float_t fgkMicron2Cm; // conversion from micron to cm
132 118 : ClassDef(AliITSsegmentationSDD,6) // SDD segmentation
133 : };
134 :
135 : #endif
|