]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSsimulationSSD.h
Changed AddSDigits to Module to return a Bool_t. True if there was a non noise
[u/mrichter/AliRoot.git] / ITS / AliITSsimulationSSD.h
index 8241c9562a36924563958751de048f88f3da0b3b..336838ce34ad27fd2293223ca288cda0e06454af 100644 (file)
 #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$ */
 
-#include <TArrayF.h>
-
-#include "AliITSdcsSSD.h"
-//#include "AliITSdictSSD.h"
 #include "AliITSsimulation.h"
-#include "AliITSsegmentationSSD.h"
-
+#include "AliITSsegmentationSSD.h" // function used in inline functions
 
 class AliITSMapA2;
-//class AliITSdictSSD;
+class AliITSpList;
+class AliITSTableSSD;
 class AliITSdcsSSD;
+class AliITSsegmentationSSD;
+class AliITSresponseSSD;
 
 class AliITSsimulationSSD: public AliITSsimulation {
 
-public:
+ public:
+    AliITSsimulationSSD(); // Default constructor
+    AliITSsimulationSSD(const AliITSsimulationSSD &source); // copy constructor
+    // operator =
+    AliITSsimulationSSD& operator=(const AliITSsimulationSSD &source);
+    //Standard Constructor
+    AliITSsimulationSSD(AliITSsegmentation *seg,AliITSresponse *resp);
+    //Destructor
+    virtual ~AliITSsimulationSSD();
+    // Initilize variables for this simulation
+    void Init(AliITSsegmentationSSD *seg,AliITSresponseSSD *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;}
+    // Standard ascii class print function
+    void Print(ostream *os);
+    // Standard ascii class read function
+    void Read(istream *is);
 
-  AliITSsimulationSSD() {}
-  AliITSsimulationSSD(AliITSsimulationSSD &source); // copy constructor
-  AliITSsimulationSSD& operator=(AliITSsimulationSSD &source); // operator =
-  AliITSsimulationSSD(AliITSsegmentation *seg, AliITSresponse *resp);
-  virtual ~AliITSsimulationSSD();
-    
-  void DigitiseModule(AliITSmodule *mod, Int_t mod, Int_t dummy);  
-  //void HitToDigit(Double_t x0, Double_t y0, Double_t z0, 
-  void HitToDigit(Int_t module, Double_t x0, Double_t y0, Double_t z0, //b.b. 
-                 Double_t x, Double_t y, Double_t z, Double_t de,
-                 Int_t *indexRange, Bool_t first);            
-  Int_t NumOfSteps(Double_t x, Double_t y, Double_t z,
-                  Double_t  & dex,Double_t & dey,Double_t & dez);
-  void GetList(Int_t track, Float_t **pList, Int_t *IndexRange);
-  void ChargeToSignal(Float_t **pList);
-  
-  //TArrayF* GetSignalP() {return fP;}
-  //TArrayF* GetSignalN() {return fN;}
-  
-  AliITSsegmentationSSD *GetSegmentation() {return (AliITSsegmentationSSD*)fSegmentation;}
+ private:
+    // 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(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);
+    // 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() {return GetSegmentation()->Npx();}
+    // returns, from the segmentation, the strip pitch
+    Float_t GetStripPitch() {return GetSegmentation()->Dpx(0);}
 
+    // Data members
  protected:
-  
-  void  IntegrateGaussian(Int_t k, Double_t par, Double_t av, Double_t sigma, 
-                         Double_t inf, Double_t sup,
-                         Int_t *indexRange, Bool_t first);
-  void  ApplyNoise();
-  void  ApplyCoupling();
-  //  void  ApplyThreshold();
-  //void  ApplyDAQ();
-  
-  Float_t  F(Float_t av, Float_t x, Float_t s); 
-  //  Float_t  Get2Strip(Int_t flag, Int_t istrip, Float_t x, Float_t z);
-  
-  // Data members 
-  
- protected:
-  
-  AliITSdcsSSD    *fDCS;
-  Int_t   fNstrips;
-  Float_t fPitch;
-  //TArrayF *fN;         // for signal N side
-  //TArrayF *fP;         // for signal P side
-  //AliITSdictSSD *fTracksP;  //!
-  //AliITSdictSSD *fTracksN;  //! 
-  
-  //______________________________________________________________
-  //  
-  // Parameters for simulation
-  //______________________________________________________________
-  Int_t    fSteps;                //Number of steps 
-  
- private:
+    AliITSdcsSSD *fDCS;   // Class containing detector controle paramters
 
-  AliITSMapA2  *fMapA2;        // MapA2
-  
-  ClassDef(AliITSsimulationSSD,1)
-    
-    };
+ private:
+    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
+//    Int_t       fModule;      //! Current module number
+//    Int_t       fEvent;       //! Current Event number
+//    AliITSpList *fpList;      //! Array of s digits.
 
+    ClassDef(AliITSsimulationSSD,2) // 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