er  dev
ERNeuRadPixelSignal.h
1 // -------------------------------------------------------------------------
2 // ----- ERNeuRadPixelSignal header file -----
3 // ----- Created 02/03/15 by v. Schetinin -----
4 // -------------------------------------------------------------------------
5 
6 #ifndef ERNeuRadPixelSignal_H
7 #define ERNeuRadPixelSignal_H
8 
9 #include "TObject.h"
10 #include "TVector3.h"
11 #include "TArrayF.h"
12 #include "TArrayI.h"
13 
14 #include <map>
15 
16 #include "FairMultiLinkedData.h"
17 
18 #include "ERNeuRadPhotoElectron.h"
19 
20 class ERNeuRadPixelSignal : public FairMultiLinkedData {
21 
22 protected:
23 
24  Int_t fPixelNb;
25  Int_t fModuleNb;
26  Int_t fSide;
27  //Массив амплитуд фотоэлектронов сигнала
28  TArrayF fPEAmplitudes;
29  //Суммарная амплитуда фотоэлектронов сигнала
30  Double_t fPEAmplitudesSum;
31  //Массив времен прихоа на анод фотоэлектронов сигнала
32  TArrayF fPEAnodeTimes;
33  //Массив длин одноэлектронных сигналов
34  TArrayI fPETimes;
35  //Количество фотоэлектронов в сигнале
36  Int_t fPECount;
37 
38  Int_t fCurFPoint;
39 
40  Double_t fStartTime;
41  Double_t fFinishTime;
42 
43  //Используется для работы с общем сигналом. Так как была необходима адресная арифметика
44  Float_t* fResFunction;
45  //Хранит результирующий сигнал, как значения функции в узлах
46  TArrayF fResFunctionRoot;
47 
48  Double_t OnePEFunction(Double_t time, Double_t amplitude);
49  Int_t OnePETime(Double_t amplitude);
50 
51 public:
52  TArrayF& GetPEAmps() {return fPEAmplitudes;}
53  TArrayF& GetPETimes() {return fPEAnodeTimes;}
54  Int_t GetPECount() {return fPECount;}
55 
56  Double_t GetStartTime() const {return fStartTime;}
57  Double_t GetFinishTime() const {return fFinishTime;}
58  Float_t GetPEamp(Int_t i) const {return fPEAmplitudes[i];}
59  Float_t GetPEtime(Int_t i) const {return fPEAnodeTimes[i];}
60  Int_t GetPECount() const {return fPECount;}
61 
64 
66  ERNeuRadPixelSignal(Int_t iModule, Int_t iPixel, Int_t fpoints_count, Int_t side);
67 
68  virtual ~ERNeuRadPixelSignal();
69 
70  virtual void AddPhotoElectron(ERNeuRadPhotoElectron* fpoint);
71 
72  virtual void Generate();
73 
74  virtual bool Exist(){return fCurFPoint > 0;}
75 
76  TArrayF* ResultSignal() {return &fResFunctionRoot;}
77 
78  //пока заглушки
79  virtual std::vector<Double_t> Intersections(Double_t discriminatorThreshold);
80 
81  virtual Double_t MaxInteg(const Double_t window, const Double_t dt) {return -1.;}
82  virtual Double_t Integ(const Double_t start,const Double_t finish);
83  virtual Double_t FirstInteg(const Double_t window);
84  virtual Double_t FullInteg() {return Integ(fStartTime,fFinishTime);}
85  virtual Double_t Mean(const Double_t time) {return -1.;}
86 
87  virtual Double_t StartTime() const {return fStartTime;}
88  virtual Double_t FinishTime() const {return fFinishTime;}
89 
90  virtual Float_t ThresholdTime(Float_t peThreshold);
91 
92  virtual Double_t OnePEIntegral();
93 
94  virtual Int_t PECount() const {return fPECount;}
95 
96  Double_t dT() const {return cdT;}
97 
98  Int_t ModuleNb() const {return fModuleNb;}
99  Int_t PixelNb() const {return fPixelNb;}
100  Int_t Side() const {return fSide;}
101  Double_t AmplitudesSum() const {return fPEAmplitudesSum;}
102 
103  //constants
104  //Гранулирование сигнала по времени
105  static const Double_t cdT; // ns
106 
107  ClassDef(ERNeuRadPixelSignal,1)
108 };
109 
110 #endif // ERNeuRadPixelSignal_H