58005f18 |
1 | #ifndef ALIITSMODLUESSD_H |
2 | #define ALIITSMODLUESSD_H |
3da30618 |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ |
5 | |
6 | /* $Id$ */ |
58005f18 |
7 | |
8 | #include "TObject.h" |
9 | #include "TArrayS.h" |
10 | #include "TClonesArray.h" |
11 | #include "TRandom.h" |
12 | //#include "AliConst.h" |
13 | #include "TMath.h" |
14 | |
15 | #include "AliITSdigitSSD.h" |
16 | #include "AliITS.h" |
17 | #include "AliITSmodule.h" |
18 | |
19 | |
20 | |
21 | //____________________________________________________________________ |
22 | // |
23 | // Class AliITSmoduleSSD |
24 | // describes one SSD module |
25 | // The main function of modules is to simulate DIGITS from |
26 | // GEANT HITS and produce POINTS from DIGITS |
27 | // |
28 | // This class keep track of Detector Control System parameters |
29 | // of one SSD module: invalid (dead) strips, gain, capacitive |
30 | // coupling. |
31 | // |
32 | // In this release it make only simulation, and is not completly |
33 | // tuned - up. Simulation will be improved after tests of SSD |
34 | // modules on SPS. Improved simulation and reconstruction will |
35 | // appear in next releas. |
36 | // |
37 | // created by: A.Boucham, W.Peryt, S.Radomski, P.Skowronski |
38 | // ver. 1.0 CERN, 16.09.1999 |
39 | // |
40 | //___________________________________________________________________ |
41 | // |
42 | |
43 | |
44 | |
45 | class AliITSmoduleSSD: public AliITSmodule { |
46 | |
47 | |
48 | public: |
49 | |
50 | //________________________________________________________________ |
51 | // |
52 | // Constructors and deconstructor |
53 | //________________________________________________________________ |
54 | // |
55 | |
56 | AliITSmoduleSSD(); |
57 | AliITSmoduleSSD(Int_t index); |
58 | ~AliITSmoduleSSD(); |
59 | |
60 | //________________________________________________________________ |
61 | // |
62 | // Data process methods |
63 | //________________________________________________________________ |
64 | // |
65 | |
66 | void AddDigit(Int_t, Int_t, Bool_t); |
67 | void HitToDigit(); // Process all hits in module |
68 | void HitToDigit(Int_t); // Proces one hit |
69 | void DigitToPoint() {}; // Not impemented yet |
70 | void HitToPoint() {}; // Not impemented y |
71 | |
72 | //________________________________________________________________ |
73 | // |
74 | //Invalid strips menagement methods |
75 | //________________________________________________________________ |
76 | // |
77 | |
78 | // Parameters for invalid strips MonteCarlo |
79 | // void SetInvalidParam(Float_t mean, Float_t sigma); |
80 | // void GetInvalParam(Float_t &mean, Float_t &sigma); |
81 | |
82 | // Methods for creating invalid strips |
83 | void SetInvalidMC(Float_t mean, Float_t sigma); |
84 | void SetInvalidMC(); |
85 | |
86 | // Testing if strip is valid |
87 | Bool_t IsValidN(Int_t strip); //True if strip work properly |
88 | Bool_t IsValidP(Int_t strip); |
89 | // TArrayI GetInvalidP(); //Array of invalid strips |
90 | // TArrayI GetInvalidN(); |
91 | // Int_t GetNInvalidP(); //Number of invalid srtips |
92 | // Int_t GrtNInvalidN(); |
93 | |
94 | // Creating invalid strips |
95 | void SetInvalidP(Int_t strip, Bool_t side); //Set invalid if true |
96 | // void SetInvalidN(Int_t strip, Bool_t side); |
97 | |
98 | |
99 | protected: |
100 | |
101 | //________________________________________________________________ |
102 | // |
103 | //Private methods for geometry |
104 | //________________________________________________________________ |
105 | // |
106 | |
107 | Int_t GetStripN(Float_t x, Float_t z); // Nearest strip number P-side |
108 | Int_t GetStripP(Float_t x, Float_t z); // Nearest strip number N-side |
109 | |
110 | Float_t Get2StripN(Float_t, Float_t); // Ditance do the nearest strip P |
111 | Float_t Get2StripP(Float_t, Float_t); // Ditance do the nearest strip N |
112 | |
113 | Bool_t GetCrossing(Float_t&, Float_t&); //x, y of strips crossing |
114 | |
115 | //________________________________________________________________ |
116 | // |
117 | //Private methods for simulation |
118 | //________________________________________________________________ |
119 | // |
120 | |
121 | void ApplyNoise(); |
122 | void ApplyCoupling(); |
123 | |
124 | Float_t F(Float_t x, Float_t s) {return (TMath::Erf(x*kPitch/s)+1) /2;} |
125 | |
126 | // Proceding part should be in SSDgeo -----> |
127 | |
128 | //Technical parameters of detector |
ad0e60d9 |
129 | static const Float_t kStereo ;// = 0.0175; //Stereo Angle 17.5 mrad |
130 | static const Float_t kTan ;// = 0.0175; |
131 | static const Int_t kNStrips ;// = 768; //Number of strips on each side |
132 | static const Float_t kPitch ;// = 0.095; //Distance strip - strip (mm) |
133 | static const Float_t kX ;// = 72.96; //X size (mm) |
134 | static const Float_t kY ;// = 0.3; //Y size (mm) |
135 | static const Float_t kZ ;// = 40; //Thickness (mm) |
58005f18 |
136 | |
137 | // <------------------------------ |
138 | |
139 | //______________________________________________________________ |
140 | // |
141 | // Parameters for simulation |
142 | //______________________________________________________________ |
143 | |
ad0e60d9 |
144 | static const Float_t kSigmaP ;// = 0.003; //Gaussian sigm |
145 | static const Float_t kSigmaN ;// = 0.002; |
146 | static const Int_t kSteps ;// = 10; //Number of steps |
147 | static const Int_t kTresholdP ;// = 1500; |
148 | static const Int_t kTresholdN ;// = 2500; |
58005f18 |
149 | |
150 | //________________________________________________________________ |
151 | // |
152 | // DCS Parameters |
153 | //________________________________________________________________ |
154 | // |
155 | |
156 | Float_t fSNRatioP; //Signal - Noise Ratio P-side |
157 | Float_t fSNRatioN; //Signal - Noise RatioNP-side |
158 | |
159 | Float_t fGainP; //Charge - ADC conversion parameter P |
160 | Float_t fGainN; //Charge - ADC conversi parameter N |
161 | |
162 | Int_t fNInvalidP; //Number of invalid strips P |
163 | TArrayS *fInvalidP; //Invalid strips P-side |
164 | Int_t fNInvalidN; //Number of invalid strips N |
165 | TArrayS *fInvalidN; //Invalid strips N-side |
166 | |
167 | |
168 | //________________________________________________________________ |
169 | // |
170 | // Capacitive coupling parameters |
171 | //________________________________________________________________ |
172 | // |
173 | |
174 | Float_t fCouplingPR; |
175 | Float_t fCouplingPL; |
176 | Float_t fCouplingNR; |
177 | Float_t fCouplingNL; |
178 | |
179 | //________________________________________________________________ |
180 | // |
181 | // Parameters for invalid strips simulatation |
182 | //________________________________________________________________ |
183 | |
184 | Float_t fNInvalid; //Meam number of invalid strips |
185 | Float_t fISigma; //RMS of invalid strips (Gaussian) |
186 | |
187 | //________________________________________________________________ |
188 | // |
189 | // temp for simulation |
190 | //________________________________________________________________ |
191 | // |
192 | |
193 | TArrayI *fN; // for signal |
194 | TArrayI *fP; |
195 | |
196 | TArrayI *fNtrack1; // for tracks, signal orgin N-side |
197 | TArrayI *fNtrack2; |
198 | TArrayI *fNtrack3; |
199 | |
200 | TArrayI *fPtrack1; // for tracks, signal orgin P-side |
201 | TArrayI *fPtrack2; |
202 | TArrayI *fPtrack3; |
203 | |
204 | public: |
205 | ClassDef(AliITSmoduleSSD, 1) |
206 | }; |
207 | |
208 | #endif |