ROOT logo
#ifndef ALIITSSIMULATIONSSD_H
#define ALIITSSIMULATIONSSD_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice     */

/* $Id$ */

/////////////////////////////////////////////////////////////
// Simulation class for SSD                                //
/////////////////////////////////////////////////////////////

#include "AliITSsimulation.h"
#include "AliITSsegmentationSSD.h" // function used in inline functions

class AliITSMapA2;
class AliITSpList;
class AliITSTableSSD;
//class AliITSdcsSSD;
class AliITSsegmentationSSD;
class AliITSCalibrationSSD;
class TF1;

class AliITSsimulationSSD: public AliITSsimulation {

 public:
    AliITSsimulationSSD(); // Default constructor
    AliITSsimulationSSD(const AliITSsimulationSSD &source); // copy constructor
    // operator =
    AliITSsimulationSSD& operator=(const AliITSsimulationSSD &source);
    //    virtual AliITSsimulation& operator=(const AliITSsimulation &source);
    //Standard Constructor
    AliITSsimulationSSD(AliITSDetTypeSim* dettyp);
    //Destructor
    virtual ~AliITSsimulationSSD();
    // Get a pointer to the segmentation object
    virtual AliITSsegmentation* GetSegmentationModel(Int_t /*dt*/){return fDetType->GetSegmentationModel(2);}
    // set pointer to segmentation objec
    virtual void SetSegmentationModel(Int_t /*dt*/, AliITSsegmentation *seg){fDetType->SetSegmentationModel(2,seg);}
    // Initilize variables for this simulation
    void Init();
    // Initilize variables for this simulation
    //void Init(AliITSsegmentationSSD *seg,AliITSCalibrationSSD *resp);
    // Create maps to build the lists of tracks for each summable digit
    void InitSimulationModule(Int_t module,Int_t events);
    // Digitize module from the sum of summable digits.
    void FinishSDigitiseModule();
    //Digitizes all of the hits in a module
    void DigitiseModule(AliITSmodule *mod,Int_t dummy0,Int_t dummy1);
    // Computes the Summable Digits
    void SDigitiseModule(AliITSmodule *mod,Int_t module,Int_t dummy);
    // Computes the Charge on each Strip/ Analog/summable digits
    void HitsToAnalogDigits(AliITSmodule *mod,AliITSpList *pList);
    //Computes the signal from one hit
    void HitToDigit(Int_t module,Double_t x0,Double_t y0,Double_t z0, 
		    Double_t x,Double_t y,Double_t z,Double_t de,
		    AliITSTableSSD *tav);
    //returns a pointer to the SSD segmentation.
    /*AliITSsegmentationSSD *GetSegmentation() {
	return (AliITSsegmentationSSD*) fSegmentation;}
    */
    //Returns the ionization energy for Si in GeV.
    Double_t GetIonizeE() const {return fIonE;}
    //Sets the ionization energy for Si in GeV.
    void SetIonizeE(Double_t e=3.62E-09){fIonE = e;}
    //Returns the Diffusion constant h in cm**2/sec
    Double_t GetDiffConst(Int_t i) const {return fDifConst[i];}
    //Sets the Diffusion constant h in cm**2/sec
    void SetDiffConst(Double_t h=11.0,Double_t e=30.0)
	{fDifConst[0] = h;fDifConst[1]=e;}
    //Returns the Drift velocity for the side i
    Double_t GetDriftVelocity(Int_t i) const {return fDriftVel[i];}
    //Sets the Drift velocity for the P and N sides
    void SetDriftVelocity(Double_t v0=0.86E+06,Double_t v1=2.28E+06)
	{fDriftVel[0] = v0;fDriftVel[1] = v1;}


    //  Decide whether to use or not the Lorentz drift 
    void SetLorentzDrift(Bool_t b=kFALSE)
      {fLorentz=b; if(fLorentz) SetTanLorAngle();};
    // Set the Lorentz angles
    Bool_t SetTanLorAngle();
    // Getter for the Lorentz angles
    Double_t GetTanLorAngleP() const {return fTanLorAngP;};
    Double_t GetTanLorAngleN() const {return fTanLorAngN;};
    //


    // Standard ascii class print function
    void Print(ostream *os);
    // Standard ascii class read function
    void Read(istream *is);
    virtual void Print(Option_t *option="") const {TObject::Print(option);}
    virtual Int_t Read(const char *name) {return TObject::Read(name);}
    // Data members
 protected:

    //    AliITSdcsSSD *fDCS;   // Class containing detector controle paramters

 private:
    // Return the Response class
    //    AliITSCalibrationSSD* GetResp(){return (AliITSCalibrationSSD*)fResponse;}
    // Return the Segmentation class
    //AliITSsegmentationSSD* GetSeg(){
    //  return (AliITSsegmentationSSD*)fSegmentation;}
    // returns the number of steps needed to proplerly distribute the charge
    // in a step
    Int_t NumOfSteps(Double_t x,Double_t y,Double_t z,
		     Double_t  &dex,Double_t &dey,Double_t &dez);
    // Keepts track and orders tracks for a give strip.
    void GetList(Int_t trk,Int_t ht,Int_t mod,AliITSpList *pLt,
		 AliITSTableSSD *tav);
    // sets thresholds and fills digits
    void ChargeToSignal(Int_t module,const AliITSpList *pList);
    // Writes Summable Digits to a root file for later use.
    void WriteSDigits(AliITSpList *pList);
    // ReadSDigits and create Digits
    void SDigitToDigit(Int_t module,AliITSpList *pList);
    // Fills fMapA2 from pList AliITSpList
    void FillMapFrompList(AliITSpList *pList);
    // Diffuses the charge onto neighboring strips.
    void    IntegrateGaussian(Int_t k,Double_t par,Double_t av,Double_t sigma, 
			      Double_t inf, Double_t sup,
			      AliITSTableSSD *tav);
     // Applies noise to strips randomly
    void    ApplyNoise(AliITSpList *pList,Int_t mod);
     // Applies posible signal coupling between strips
    void    ApplyCoupling(AliITSpList *pList,Int_t mod);
    // Kill dead channels
    void ApplyDeadChannels(Int_t mod);
    // Computes the integral of a gaussian using Error Function
    Float_t F(Float_t av, Float_t x, Float_t s);
    // returns, from the segmentation, the number of stips
    Int_t GetNStrips() {AliITSsegmentationSSD* seg = (AliITSsegmentationSSD*)GetSegmentationModel(2);return seg->Npx();}
    // returns, from the segmentation, the strip pitch
    Float_t GetStripPitch() {AliITSsegmentationSSD* seg = (AliITSsegmentationSSD*)GetSegmentationModel(2);return seg->Dpx(0);}

    AliITSMapA2 *fMapA2;      //! Map of ionization, used localy only
    Double_t    fIonE;        // ionization energy of Si in GeV
    Double_t    fDifConst[2]; // Diffusion constants [h,e] in cm**2/sec
    Double_t    fDriftVel[2]; // Drift velocities [P,N sides] cm/sec

    TF1         *fTimeResponse; // signal time response function

   Bool_t        fLorentz;      // kTRUE if Lorentz drift has been allowed 
   Double_t      fTanLorAngP;    //! Tangent of the Lorentz Angle for holes 
   Double_t      fTanLorAngN;    //! Tangent of the Lorentz Angle for electrons


    ClassDef(AliITSsimulationSSD,3) // SSD signal simulation class

};
// Input and output functions for standard C++ input/output.
ostream &operator<<(ostream &os,AliITSsimulationSSD &source);
istream &operator>>(istream &is,AliITSsimulationSSD &source);
#endif
 AliITSsimulationSSD.h:1
 AliITSsimulationSSD.h:2
 AliITSsimulationSSD.h:3
 AliITSsimulationSSD.h:4
 AliITSsimulationSSD.h:5
 AliITSsimulationSSD.h:6
 AliITSsimulationSSD.h:7
 AliITSsimulationSSD.h:8
 AliITSsimulationSSD.h:9
 AliITSsimulationSSD.h:10
 AliITSsimulationSSD.h:11
 AliITSsimulationSSD.h:12
 AliITSsimulationSSD.h:13
 AliITSsimulationSSD.h:14
 AliITSsimulationSSD.h:15
 AliITSsimulationSSD.h:16
 AliITSsimulationSSD.h:17
 AliITSsimulationSSD.h:18
 AliITSsimulationSSD.h:19
 AliITSsimulationSSD.h:20
 AliITSsimulationSSD.h:21
 AliITSsimulationSSD.h:22
 AliITSsimulationSSD.h:23
 AliITSsimulationSSD.h:24
 AliITSsimulationSSD.h:25
 AliITSsimulationSSD.h:26
 AliITSsimulationSSD.h:27
 AliITSsimulationSSD.h:28
 AliITSsimulationSSD.h:29
 AliITSsimulationSSD.h:30
 AliITSsimulationSSD.h:31
 AliITSsimulationSSD.h:32
 AliITSsimulationSSD.h:33
 AliITSsimulationSSD.h:34
 AliITSsimulationSSD.h:35
 AliITSsimulationSSD.h:36
 AliITSsimulationSSD.h:37
 AliITSsimulationSSD.h:38
 AliITSsimulationSSD.h:39
 AliITSsimulationSSD.h:40
 AliITSsimulationSSD.h:41
 AliITSsimulationSSD.h:42
 AliITSsimulationSSD.h:43
 AliITSsimulationSSD.h:44
 AliITSsimulationSSD.h:45
 AliITSsimulationSSD.h:46
 AliITSsimulationSSD.h:47
 AliITSsimulationSSD.h:48
 AliITSsimulationSSD.h:49
 AliITSsimulationSSD.h:50
 AliITSsimulationSSD.h:51
 AliITSsimulationSSD.h:52
 AliITSsimulationSSD.h:53
 AliITSsimulationSSD.h:54
 AliITSsimulationSSD.h:55
 AliITSsimulationSSD.h:56
 AliITSsimulationSSD.h:57
 AliITSsimulationSSD.h:58
 AliITSsimulationSSD.h:59
 AliITSsimulationSSD.h:60
 AliITSsimulationSSD.h:61
 AliITSsimulationSSD.h:62
 AliITSsimulationSSD.h:63
 AliITSsimulationSSD.h:64
 AliITSsimulationSSD.h:65
 AliITSsimulationSSD.h:66
 AliITSsimulationSSD.h:67
 AliITSsimulationSSD.h:68
 AliITSsimulationSSD.h:69
 AliITSsimulationSSD.h:70
 AliITSsimulationSSD.h:71
 AliITSsimulationSSD.h:72
 AliITSsimulationSSD.h:73
 AliITSsimulationSSD.h:74
 AliITSsimulationSSD.h:75
 AliITSsimulationSSD.h:76
 AliITSsimulationSSD.h:77
 AliITSsimulationSSD.h:78
 AliITSsimulationSSD.h:79
 AliITSsimulationSSD.h:80
 AliITSsimulationSSD.h:81
 AliITSsimulationSSD.h:82
 AliITSsimulationSSD.h:83
 AliITSsimulationSSD.h:84
 AliITSsimulationSSD.h:85
 AliITSsimulationSSD.h:86
 AliITSsimulationSSD.h:87
 AliITSsimulationSSD.h:88
 AliITSsimulationSSD.h:89
 AliITSsimulationSSD.h:90
 AliITSsimulationSSD.h:91
 AliITSsimulationSSD.h:92
 AliITSsimulationSSD.h:93
 AliITSsimulationSSD.h:94
 AliITSsimulationSSD.h:95
 AliITSsimulationSSD.h:96
 AliITSsimulationSSD.h:97
 AliITSsimulationSSD.h:98
 AliITSsimulationSSD.h:99
 AliITSsimulationSSD.h:100
 AliITSsimulationSSD.h:101
 AliITSsimulationSSD.h:102
 AliITSsimulationSSD.h:103
 AliITSsimulationSSD.h:104
 AliITSsimulationSSD.h:105
 AliITSsimulationSSD.h:106
 AliITSsimulationSSD.h:107
 AliITSsimulationSSD.h:108
 AliITSsimulationSSD.h:109
 AliITSsimulationSSD.h:110
 AliITSsimulationSSD.h:111
 AliITSsimulationSSD.h:112
 AliITSsimulationSSD.h:113
 AliITSsimulationSSD.h:114
 AliITSsimulationSSD.h:115
 AliITSsimulationSSD.h:116
 AliITSsimulationSSD.h:117
 AliITSsimulationSSD.h:118
 AliITSsimulationSSD.h:119
 AliITSsimulationSSD.h:120
 AliITSsimulationSSD.h:121
 AliITSsimulationSSD.h:122
 AliITSsimulationSSD.h:123
 AliITSsimulationSSD.h:124
 AliITSsimulationSSD.h:125
 AliITSsimulationSSD.h:126
 AliITSsimulationSSD.h:127
 AliITSsimulationSSD.h:128
 AliITSsimulationSSD.h:129
 AliITSsimulationSSD.h:130
 AliITSsimulationSSD.h:131
 AliITSsimulationSSD.h:132
 AliITSsimulationSSD.h:133
 AliITSsimulationSSD.h:134
 AliITSsimulationSSD.h:135
 AliITSsimulationSSD.h:136
 AliITSsimulationSSD.h:137
 AliITSsimulationSSD.h:138
 AliITSsimulationSSD.h:139
 AliITSsimulationSSD.h:140
 AliITSsimulationSSD.h:141
 AliITSsimulationSSD.h:142
 AliITSsimulationSSD.h:143
 AliITSsimulationSSD.h:144
 AliITSsimulationSSD.h:145
 AliITSsimulationSSD.h:146
 AliITSsimulationSSD.h:147
 AliITSsimulationSSD.h:148
 AliITSsimulationSSD.h:149
 AliITSsimulationSSD.h:150
 AliITSsimulationSSD.h:151
 AliITSsimulationSSD.h:152
 AliITSsimulationSSD.h:153
 AliITSsimulationSSD.h:154
 AliITSsimulationSSD.h:155