ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtPulse.h
Go to the documentation of this file.
1 #ifndef ATPULSE_H
2 #define ATPULSE_H
3 
4 #include <Math/Point3D.h>
5 #include <Math/Point3Dfwd.h> // for XYZPoint
6 #include <Math/Vector3D.h>
7 #include <Math/Vector3Dfwd.h>
8 #include <TF1.h> //Needed for unique_ptr<TF1>
9 #include <TH1.h> //Needed for unique_ptr<TH1F>
10 
11 #include <functional> // for function
12 #include <memory> // for unique_ptr, shared_ptr
13 #include <set>
14 #include <type_traits> // for add_pointer_t
15 #include <vector> // for vector
16 class AtMap;
17 class AtSimulatedPoint;
18 class AtRawEvent;
19 class AtDigiPar;
20 class AtPad;
21 
22 class AtPulse {
23 protected:
24  using AtMapPtr = std::shared_ptr<AtMap>;
25  using ResponseFunctionType = std::add_pointer_t<double(double)>;
27  using ResponseFunc = std::function<double(int, double)>;
30  using SimPointPtr = std::unique_ptr<AtSimulatedPoint>;
31 
33 
34  int fEventID = 0;
35  double fGain = 0;
36  double fLowGainFactor = 0;
37  double fGETGain = 0;
38  double fPeakingTime = 0;
39  double fTBTime = 0;
40  int fNumTbs{512};
41  int fTBEntrance = 0;
42  int fTBPadPlane = 0;
43 
45  bool fUseFastGain = true;
46  double fNoiseSigma = 0;
47  bool fSaveCharge = true;
48  bool fDoConvolution{true}; //< Whether we should set the ADC by doing a convolution of the charge with the response
49 
50  std::vector<std::unique_ptr<TH1F>> fPadCharge;
51  std::set<int> fPadsWithCharge;
52 
53  std::unique_ptr<TF1> fGainFunc;
55 
56 public:
57  AtPulse(AtMapPtr map, ResponseFunc response = nullptr);
58  AtPulse(const AtPulse &);
59 
60  void SetParameters(const AtDigiPar *fPar);
61  AtMapPtr GetMap() { return fMap; }
62  void UseFastGain(bool val) { fUseFastGain = val; }
63  void SetNoiseSigma(double val) { fNoiseSigma = val; }
64  void SetSaveCharge(bool val) { fSaveCharge = val; }
65  void SetDoConvolution(bool val) { fDoConvolution = val; }
66 
67  AtRawEvent GenerateEvent(std::vector<SimPointPtr> &vec);
68  virtual AtRawEvent GenerateEvent(std::vector<AtSimulatedPoint *> &vec);
69 
70  virtual std::shared_ptr<AtPulse> Clone() const { return std::make_shared<AtPulse>(*this); }
71 
72 protected:
73  void Reset();
74  virtual bool AssignElectronsToPad(AtSimulatedPoint *point);
75  double GetGain(int padNum, int numElectrons);
77  void FillPad(AtPad &pad, TH1F &hist);
78  void ApplyNoise(AtPad &pad);
79 };
80 
81 #endif // ATPULSE_H
AtMap
Definition: AtMap.h:33
AtPulse::SetDoConvolution
void SetDoConvolution(bool val)
Definition: AtPulse.h:65
AtPulse::AssignElectronsToPad
virtual bool AssignElectronsToPad(AtSimulatedPoint *point)
Definition: AtPulse.cxx:182
AtPulse::fAvgGainDeviation
double fAvgGainDeviation
Definition: AtPulse.h:54
AtPulse::XYZVector
ROOT::Math::XYZVector XYZVector
Definition: AtPulse.h:28
AtPulse::GenerateEvent
AtRawEvent GenerateEvent(std::vector< SimPointPtr > &vec)
Definition: AtPulse.cxx:56
AtPulse::Reset
void Reset()
Definition: AtPulse.cxx:127
XYZVector
ROOT::Math::XYZVector XYZVector
Definition: AtFindVertex.h:20
AtPulse::fDoConvolution
bool fDoConvolution
Definition: AtPulse.h:48
AtPulse::fEventID
int fEventID
Definition: AtPulse.h:34
AtPulse::fPeakingTime
double fPeakingTime
GET Gain (ADC ch/electron).
Definition: AtPulse.h:38
AtPulse::fUseFastGain
bool fUseFastGain
Response function of the electronics.
Definition: AtPulse.h:45
AtPulse::ResponseFunc
std::function< double(int, double)> ResponseFunc
Function (or callable object) to use as the response function. Parameters are padNum and time (us)
Definition: AtPulse.h:27
AtRawEvent
Definition: AtRawEvent.h:34
AtPulse::fSaveCharge
bool fSaveCharge
Sigma of random gaussian noise to apply to trace.
Definition: AtPulse.h:47
XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtPatternCircle2D.h:18
AtSimulatedPoint
Definition: AtSimulatedPoint.h:16
AtPulse::SimPointPtr
std::unique_ptr< AtSimulatedPoint > SimPointPtr
Definition: AtPulse.h:30
AtPulse::SetParameters
void SetParameters(const AtDigiPar *fPar)
Definition: AtPulse.cxx:133
AtPulse::fNumTbs
int fNumTbs
Time bucket size in us.
Definition: AtPulse.h:40
AtPulse::AtMapPtr
std::shared_ptr< AtMap > AtMapPtr
Definition: AtPulse.h:24
AtPulse::fGETGain
double fGETGain
If pad is AtMap::kLowGain multiply gain by this factor.
Definition: AtPulse.h:37
AtPulse::fNoiseSigma
double fNoiseSigma
Definition: AtPulse.h:46
AtPulse::GetGain
double GetGain(int padNum, int numElectrons)
Definition: AtPulse.cxx:205
AtPulse::FillPad
void FillPad(AtPad &pad, TH1F &hist)
Definition: AtPulse.cxx:82
AtPulse::SetSaveCharge
void SetSaveCharge(bool val)
Definition: AtPulse.h:64
AtPulse::fPadsWithCharge
std::set< int > fPadsWithCharge
Definition: AtPulse.h:51
AtMapPtr
std::shared_ptr< AtMap > AtMapPtr
Definition: AtSpaceChargeTask.h:18
AtPulse::SetNoiseSigma
void SetNoiseSigma(double val)
Definition: AtPulse.h:63
AtDigiPar
Definition: AtDigiPar.h:14
AtPulse::fPadCharge
std::vector< std::unique_ptr< TH1F > > fPadCharge
Definition: AtPulse.h:50
AtPulse::fLowGainFactor
double fLowGainFactor
Micromegas gain.
Definition: AtPulse.h:36
AtPulse::fTBTime
double fTBTime
Electronic peaking time in us.
Definition: AtPulse.h:39
AtPulse::ResponseFunctionType
std::add_pointer_t< double(double)> ResponseFunctionType
Definition: AtPulse.h:25
AtPulse::Clone
virtual std::shared_ptr< AtPulse > Clone() const
Definition: AtPulse.h:70
AtPulse::GetMap
AtMapPtr GetMap()
Definition: AtPulse.h:61
AtPulse::AtPulse
AtPulse(AtMapPtr map, ResponseFunc response=nullptr)
Definition: AtPulse.cxx:27
AtPulse::fGainFunc
std::unique_ptr< TF1 > fGainFunc
Definition: AtPulse.h:53
AtPulse::XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtPulse.h:29
AtPulse::fTBPadPlane
int fTBPadPlane
Window location in timebuckets (from config)
Definition: AtPulse.h:42
AtPulse::ApplyNoise
void ApplyNoise(AtPad &pad)
Definition: AtPulse.cxx:118
AtPad
Container class for AtPadBase objects.
Definition: AtPad.h:38
AtPulse
Definition: AtPulse.h:22
AtPulse::fGain
double fGain
EventID.
Definition: AtPulse.h:35
AtPulse::fTBEntrance
int fTBEntrance
Number of time buckers.
Definition: AtPulse.h:41
AtPulse::UseFastGain
void UseFastGain(bool val)
Definition: AtPulse.h:62
AtPulse::fMap
AtMapPtr fMap
AtTPC map.
Definition: AtPulse.h:32
AtPulse::GenerateTraceFromElectrons
void GenerateTraceFromElectrons()
AtPulse::fResponse
ResponseFunc fResponse
Pad plane location in TBs (calculated from DriftVelocity, TBEntrance, ZPadPlane.
Definition: AtPulse.h:44