]>
Commit | Line | Data |
---|---|---|
451f5018 | 1 | #ifndef ALIITSUSIMULATIONPIX_H |
2 | #define ALIITSUSIMULATIONPIX_H | |
3 | ||
4 | /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | //////////////////////////////////////////////////////////// | |
8 | // Simulation class for upgrade pixels // | |
9 | //////////////////////////////////////////////////////////// | |
10 | ||
4fa9d550 | 11 | #include <TObjArray.h> |
451f5018 | 12 | #include "AliITSUSimulation.h" |
13 | #include "AliITSUSegmentationPix.h" | |
14 | ||
15 | class TH1F; | |
16 | class AliITSUModule; | |
17 | class AliITSUSimuParam; | |
29ad4146 | 18 | class AliITSUParamList; |
19 | class TH2; | |
451f5018 | 20 | |
21 | //------------------------------------------------------------------- | |
22 | ||
23 | class AliITSUSimulationPix : public AliITSUSimulation { | |
24 | public: | |
c92b1537 | 25 | enum {kCellX1,kCellX2,kCellZ1,kCellZ2,kCellYDepth,kNDtSpread}; // data used for ch. spread integral calc. |
26 | // | |
27 | // charge spread functions defined | |
69e0f089 | 28 | enum {kSpreadFunGauss2D, // single gaussian in 2D, SpreadFunGauss2D |
29 | kSpreadFunDoubleGauss2D, // double gaussian in 2D, SpreadFunDoubleGauss2D | |
29ad4146 | 30 | kSpreadFunHisto, // use 2D histo from the object stored in fResponseParam |
c92b1537 | 31 | kNSpreadFuns |
32 | }; | |
29ad4146 | 33 | // These are enums for interpretation of the entries in the AliITSUParamList*fResponseParam : |
34 | // object to holding the sensor-specific response data | |
35 | // fist kParamStart entries of spread fun params are reserved for common parameters | |
36 | enum {kChargeSpreadType, // charge spread function type, one of kNSpreadFuns types | |
37 | kSpreadFunParamNXoffs, // number of pixels to consider +- from injection point (in X) | |
c92b1537 | 38 | kSpreadFunParamNZoffs, // number of pixels to consider +- from injection point (in Z) |
29ad4146 | 39 | kSpreadFunMinSteps, // the single hit charge is divided into kSpreadFunMinSteps (minimum is 3) |
40 | kReadOutSchemeType, // readout type strobe, rolling shutter etc | |
0ebc85cf | 41 | kReadOutCycleLength, // full readout cycle window |
29ad4146 | 42 | kSpreadFunGlobalQScale, // Global charge scaling factor to match tes beam results to simu (Geant3) |
43 | kPixSNDisrcCut, // S/N cut applied at discrimination level | |
44 | kPixMinElToAdd, // Min number of electrons to add to sdig | |
45 | kPixNoiseIsOn, // Turn Pixel Noise on | |
46 | kPixNoiseInAllMod, // To apply pixel noise in all modules, if not only on ones where there is a hit | |
47 | kPixNoiseMPV, // Pixel noise MPV | |
48 | kPixNoiseSigma, // Pixel noise sigma | |
49 | kPixFakeRate, // Pixel fake rate | |
50 | // | |
51 | kNReservedParams=20, // some reserved slots | |
52 | kParamStart = kNReservedParams // user parameters must start from this slot | |
c92b1537 | 53 | }; |
0ebc85cf | 54 | // |
55 | // defined readout types: | |
56 | enum {kReadOutStrobe, // hits in static time window fReadOutCycleLength wrt offset fReadOOutCycleOffset (global for sensor) are seen | |
29ad4146 | 57 | kReadOutRollingShutter, // hits in rolling (row-wise) window are seen (see IsHitInReadOutWindowRollingShutter) |
0ebc85cf | 58 | kNReadOutTypes}; |
69e0f089 | 59 | // elements of the SpreadFunGauss2D parameterization (offsetted by kParamStart) |
60 | enum {kG1MeanX=kParamStart,kG1SigX,kG1MeanZ,kG1SigZ,kNG1Par}; | |
61 | // elements of the SpreadFunDoubleGauss2D parameterization (offsetted by kParamStart) | |
62 | enum {kG2MeanX0=kParamStart,kG2SigX0,kG2MeanZ0,kG2SigZ0,kG2MeanX1,kG2SigX1,kG2MeanZ1,kG2SigZ1,kG2ScaleG2,kNG2Par}; | |
c92b1537 | 63 | // |
451f5018 | 64 | AliITSUSimulationPix(); |
65 | AliITSUSimulationPix(AliITSUSimuParam* sim,AliITSUSensMap* map); | |
66 | virtual ~AliITSUSimulationPix(); | |
67 | AliITSUSimulationPix(const AliITSUSimulationPix &source); | |
68 | AliITSUSimulationPix& operator=(const AliITSUSimulationPix &s); | |
69 | void Init(); | |
70 | // | |
71 | void FinishSDigitiseModule(); | |
c92b1537 | 72 | void DigitiseModule(); |
451f5018 | 73 | // |
c92b1537 | 74 | void SDigitiseModule(); |
451f5018 | 75 | void WriteSDigits(); |
c92b1537 | 76 | void Hits2SDigits(); |
77 | void Hits2SDigitsFast(); | |
451f5018 | 78 | void AddNoisyPixels(); |
79 | void RemoveDeadPixels(); | |
80 | void FrompListToDigits(); | |
81 | Int_t CreateNoisyDigits(Int_t minID,Int_t maxID,double probNoisy, double noise, double base); | |
82 | Bool_t SetTanLorAngle(Double_t WeightHole=1.0); | |
83 | Double_t GetTanLorAngle() const {return fTanLorAng;}; | |
84 | // | |
85 | // For backwards compatibility | |
86 | void SDigitsToDigits(){ FinishSDigitiseModule();} | |
87 | ||
0ebc85cf | 88 | virtual void GenerateReadOutCycleOffset(); |
c92b1537 | 89 | // |
90 | Double_t SpreadFunDoubleGauss2D(const Double_t *dtIn); | |
91 | Double_t SpreadFunGauss2D(const Double_t *dtIn); | |
29ad4146 | 92 | Double_t SpreadFrom2DHisto(const Double_t *dtIn); |
c92b1537 | 93 | // |
29ad4146 | 94 | virtual void SetResponseParam(AliITSUParamList* resp); |
451f5018 | 95 | // |
0ebc85cf | 96 | Bool_t IsHitInReadOutWindow(Int_t row, Int_t col, Double_t hitTime); |
29ad4146 | 97 | Bool_t IsHitInReadOutWindowRollingShutter(Int_t row, Int_t col, Double_t hitTime); |
98 | // | |
99 | void CalcDiodeShiftInPixel(Int_t xlin, Int_t zcol, Float_t &x, Float_t &z); | |
0ebc85cf | 100 | // |
451f5018 | 101 | private: |
c92b1537 | 102 | void SpreadCharge2D(Double_t x0,Double_t z0, Double_t dy, Int_t ix0,Int_t iz0, |
103 | Double_t el, Int_t tID, Int_t hID); | |
451f5018 | 104 | // |
105 | void SetCoupling(AliITSUSDigit* old,Int_t ntrack,Int_t idhit); // "New" coupling routine Tiziano Virgili | |
106 | void SetCouplingOld(AliITSUSDigit* old,Int_t ntrack,Int_t idhit); // "Old" coupling routine Rocco Caliandro | |
107 | // | |
108 | protected: | |
0ebc85cf | 109 | Double_t fTanLorAng; //! Tangent of the Lorentz Angle (weighted average for hole and electrons) |
110 | Double_t fReadOutCycleLength; // readout cycle lenght in s | |
111 | Double_t fReadOutCycleOffset; // The phase of the RO with respect to the trigger | |
29ad4146 | 112 | Double_t fGlobalChargeScale; // Charge scaling to match Geant and Test beam |
c92b1537 | 113 | // |
29ad4146 | 114 | TH2* fSpread2DHisto; //! optional 2D histo for charge spread parameterization |
c92b1537 | 115 | Double_t (AliITSUSimulationPix::*fSpreadFun)(const Double_t *dtIn); //! pointer on current spread function |
0ebc85cf | 116 | Bool_t (AliITSUSimulationPix::*fROTimeFun)(Int_t row,Int_t col, Double_t hitTime); //! pointer on current R/O time check function |
c92b1537 | 117 | |
451f5018 | 118 | ClassDef(AliITSUSimulationPix,1) // Simulation of pixel clusters |
119 | }; | |
120 | #endif |