faf1328c37ca185edc9e084c0994538b0034b78c
[u/mrichter/AliRoot.git] / ITS / AliITSsimulationSSD.h
1 #ifndef ALIITSSIMULATIONSSD_H
2 #define ALIITSSIMULATIONSSD_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice     */
5 /* $Id$ */
6
7 #include "AliITSsimulation.h"
8
9 class AliITSMapA2;
10 class AliITSdcsSSD;
11 class AliITSsegmentationSSD;
12
13 class AliITSsimulationSSD: public AliITSsimulation {
14
15  public:
16     AliITSsimulationSSD(); // Default constructor
17     AliITSsimulationSSD(const AliITSsimulationSSD &source); // copy constructor
18     // operator =
19     AliITSsimulationSSD& operator=(const AliITSsimulationSSD &source);
20     //Standard Constructor
21     AliITSsimulationSSD(AliITSsegmentation *seg,AliITSresponse *resp);
22     //Destructor
23     virtual ~AliITSsimulationSSD();
24     //Digitizes all of the hits in a module
25     void DigitiseModule(AliITSmodule *mod,Int_t imod,Int_t dummy);
26     //Computes the signal from one hit
27     void HitToDigit(Int_t module,Double_t x0,Double_t y0,Double_t z0, 
28                     Double_t x,Double_t y,Double_t z,Double_t de,
29                     Int_t *indexRange,Bool_t first);
30     // returns the number of steps needed to proplerly distribute the charge
31     // in a step
32     Int_t NumOfSteps(Double_t x,Double_t y,Double_t z,
33                      Double_t  &dex,Double_t &dey,Double_t &dez);
34     void GetList(Int_t track,Float_t **pList,Int_t *IndexRange);
35     // sets thresholds and fills digits
36     void ChargeToSignal(Float_t **pList);
37     //returns a pointer to the SSD segmentation.
38     AliITSsegmentationSSD *GetSegmentation() {
39         return (AliITSsegmentationSSD*) fSegmentation;}
40     //Returns the ionization energy for Si in GeV.
41     Double_t GetIonizeE() const {return fIonE;}
42     //Sets the ionization energy for Si in GeV.
43     void SetIonizeE(Double_t e=3.62E-09){fIonE = e;}
44     //Returns the Diffusion constant h in cm**2/sec
45     Double_t GetDiffConst(Int_t i) const {return fDifConst[i];}
46     //Sets the Diffusion constant h in cm**2/sec
47     void SetDiffConst(Double_t h=11.0,Double_t e=30.0)
48         {fDifConst[0] = h;fDifConst[1]=e;}
49     //Returns the Drift velocity for the side i
50     Double_t GetDriftVelocity(Int_t i) const {return fDriftVel[i];}
51     //Sets the Drift velocity for the P and N sides
52     void SetDriftVelocity(Double_t v0=0.86E+06,Double_t v1=2.28E+06)
53         {fDriftVel[0] = v0;fDriftVel[1] = v1;}
54     // Standard ascii class print function
55     void Print(ostream *os);
56     // Standard ascii class read function
57     void Read(istream *is);
58
59  protected:
60     // Diffuses the charge onto neighboring strips.
61     void    IntegrateGaussian(Int_t k,Double_t par,Double_t av,Double_t sigma, 
62                               Double_t inf, Double_t sup,
63                               Int_t *indexRange, Bool_t first);
64     void    ApplyNoise(); // Applies noise to strips randomly
65     void    ApplyCoupling(); // Applies posible signal coupling between strips
66     Float_t F(Float_t av, Float_t x, Float_t s);
67
68     // Data members
69  protected:
70     AliITSdcsSSD *fDCS;   // Class containing detector controle paramters
71     Int_t        fNstrips;//! number of strips, gotten from segmentation
72     Float_t      fPitch;  //! strip pitch spacing gotten from segmentation
73
74  private:
75     AliITSMapA2 *fMapA2;      //! Map of ionization, used localy only
76     Double_t    fIonE;        // ionization energy of Si in GeV
77     Double_t    fDifConst[2]; // Diffusion constants [h,e] in cm**2/sec
78     Double_t    fDriftVel[2]; // Drift velocities [P,N sides] cm/sec
79
80     ClassDef(AliITSsimulationSSD,2) // SSD signal simulation class
81
82 };
83 // Input and output functions for standard C++ input/output.
84 ostream &operator<<(ostream &os,AliITSsimulationSSD &source);
85 istream &operator>>(istream &is,AliITSsimulationSSD &source);
86 #endif