]>
Commit | Line | Data |
---|---|---|
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 | ||
11 | #include <TObjArray.h> | |
12 | #include "AliITSUSimulation.h" | |
13 | #include "AliITSUSegmentationPix.h" | |
14 | ||
15 | class TH1F; | |
16 | class AliITSUModule; | |
17 | class AliITSUSimuParam; | |
18 | class AliITSUParamList; | |
19 | class TH2; | |
20 | ||
21 | //------------------------------------------------------------------- | |
22 | ||
23 | class AliITSUSimulationPix : public AliITSUSimulation { | |
24 | public: | |
25 | enum {kCellX1,kCellX2,kCellZ1,kCellZ2,kCellYDepth,kNDtSpread}; // data used for ch. spread integral calc. | |
26 | // | |
27 | // charge spread functions defined | |
28 | enum {kSpreadFunGauss2D, // single gaussian in 2D, SpreadFunGauss2D | |
29 | kSpreadFunDoubleGauss2D, // double gaussian in 2D, SpreadFunDoubleGauss2D | |
30 | kSpreadFunHisto, // use 2D histo from the object stored in fResponseParam | |
31 | kNSpreadFuns | |
32 | }; | |
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) | |
38 | kSpreadFunParamNZoffs, // number of pixels to consider +- from injection point (in Z) | |
39 | kSpreadFunMinSteps, // the single hit charge is divided into kSpreadFunMinSteps (minimum is 3) | |
40 | kReadOutSchemeType, // readout type strobe, rolling shutter etc | |
41 | kReadOutCycleLength, // full readout cycle window | |
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 | |
53 | }; | |
54 | // | |
55 | // defined readout types: | |
56 | enum {kReadOutStrobe, // hits in static time window fReadOutCycleLength wrt offset fReadOOutCycleOffset (global for sensor) are seen | |
57 | kReadOutRollingShutter, // hits in rolling (row-wise) window are seen (see IsHitInReadOutWindowRollingShutter) | |
58 | kNReadOutTypes}; | |
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}; | |
63 | // | |
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(); | |
72 | void DigitiseModule(); | |
73 | // | |
74 | void SDigitiseModule(); | |
75 | void WriteSDigits(); | |
76 | void Hits2SDigits(); | |
77 | void Hits2SDigitsFast(); | |
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 | ||
88 | virtual void GenerateReadOutCycleOffset(); | |
89 | // | |
90 | Double_t SpreadFunDoubleGauss2D(const Double_t *dtIn); | |
91 | Double_t SpreadFunGauss2D(const Double_t *dtIn); | |
92 | Double_t SpreadFrom2DHisto(const Double_t *dtIn); | |
93 | // | |
94 | virtual void SetResponseParam(AliITSUParamList* resp); | |
95 | // | |
96 | Bool_t IsHitInReadOutWindow(Int_t row, Int_t col, Double_t hitTime); | |
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); | |
100 | // | |
101 | private: | |
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); | |
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: | |
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 | |
112 | Double_t fGlobalChargeScale; // Charge scaling to match Geant and Test beam | |
113 | // | |
114 | TH2* fSpread2DHisto; //! optional 2D histo for charge spread parameterization | |
115 | Double_t (AliITSUSimulationPix::*fSpreadFun)(const Double_t *dtIn); //! pointer on current spread function | |
116 | Bool_t (AliITSUSimulationPix::*fROTimeFun)(Int_t row,Int_t col, Double_t hitTime); //! pointer on current R/O time check function | |
117 | ||
118 | ClassDef(AliITSUSimulationPix,1) // Simulation of pixel clusters | |
119 | }; | |
120 | #endif |