Avoid warnings on non-ansi compiler HP-UX CC
[u/mrichter/AliRoot.git] / ITS / AliITSmoduleSSD.h
1 #ifndef ALIITSMODLUESSD_H
2 #define ALIITSMODLUESSD_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
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
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)
136     
137     // <------------------------------
138   
139     //______________________________________________________________
140     //  
141     // Parameters for simulation
142     //______________________________________________________________
143       
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; 
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