ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtPSADeconv.h
Go to the documentation of this file.
1 #ifndef ATPSADECONV_H
2 #define ATPSADECONV_H
3 
4 #include "AtPSA.h"
5 #include "AtPad.h"
6 #include "AtRawEvent.h"
7 
8 #include <TVirtualFFT.h> // for TVirtualFFT
9 
10 #include <cmath>
11 #include <functional>
12 #include <memory> // for unique_ptr, make_unique
13 #include <string> // for string
14 #include <utility>
15 #include <vector>
16 
17 class AtPadFFT;
18 
38 class AtPSADeconv : public virtual AtPSA {
39 
40 protected:
41  using ResponseFunc = std::function<double(int, double)>;
42 
58 
59  std::unique_ptr<TVirtualFFT> fFFT{nullptr};
60  std::unique_ptr<TVirtualFFT> fFFTbackward{nullptr};
61 
62  int fFilterOrder{0}; //< Half the filter order
63  int fCutoffFreq{-1}; //< Cutoff frequency squared
64  bool fUseSimulatedCharge{false}; //< If true will attempt to use simulated charge instead of deconv.
65 
66 public:
67  AtPSADeconv();
68  AtPSADeconv(AtPSADeconv &&obj) = default;
69  AtPSADeconv &operator=(AtPSADeconv &&obj) = default;
70  AtPSADeconv(const AtPSADeconv &obj);
71  ~AtPSADeconv() = default;
72 
73  virtual std::unique_ptr<AtPSA> Clone() override { return std::make_unique<AtPSADeconv>(*this); }
74  virtual HitVector AnalyzePad(AtPad *pad) override;
75 
76  void SetFilterOrder(int order);
77  void SetCutoffFreq(int freq);
78  void SetUseSimCharge(bool val) { fUseSimulatedCharge = val; }
79 
80  int GetFilterOrder() { return fFilterOrder * 2; }
81  int GetCutoffFreq() { return sqrt(fCutoffFreq); }
82 
87  void SetResponse(AtRawEvent response) { fEventResponse = std::move(response); }
93  void SetResponse(ResponseFunc response) { fResponse = response; }
94 
95  AtPad &GetResponse(int padNum);
96  const AtPadFFT &GetResponseFFT(int padNum);
97  const AtPadFFT &GetResponseFilter(int padNum);
98 
99 protected:
101  struct ZHitData {
102  double z;
103  double zVar;
104  double q;
105  double qVar;
106  };
107 
109  using HitData = std::vector<ZHitData>;
110 
111  AtPad *createResponsePad(int padNum);
112 
116  virtual HitVector chargeToHits(AtPad &charge, std::string qName);
117 
123  virtual HitData getZandQ(const AtPad::trace &charge);
124  virtual double getZhitVariance(double zLoc, double zLocVar) const override;
125 
126  void initFFTs();
127  void initFilter();
128  void updateFilter(const AtPadFFT &fft, AtPadFFT *filter);
129  double getFilterKernel(int freq);
130 
133 };
134 
135 #endif //#ifndef ATPSADECONV_H
AtPad.h
AtPSADeconv::ZHitData
Struct for storing Z and Q hit data used by getZandQ function.
Definition: AtPSADeconv.h:101
AtRawEvent.h
AtPSADeconv::initFilter
void initFilter()
Update all "filter" augments in fEventResponse with the new parameters.
Definition: AtPSADeconv.cxx:165
AtPSADeconv::SetCutoffFreq
void SetCutoffFreq(int freq)
Definition: AtPSADeconv.cxx:48
AtPSADeconv::chargeToHits
virtual HitVector chargeToHits(AtPad &charge, std::string qName)
Definition: AtPSADeconv.cxx:235
AtPSADeconv::AnalyzePad
virtual HitVector AnalyzePad(AtPad *pad) override
Definition: AtPSADeconv.cxx:216
AtPSADeconv::fEventResponse
AtRawEvent fEventResponse
Definition: AtPSADeconv.h:52
AtPSADeconv::ZHitData::z
double z
Definition: AtPSADeconv.h:102
AtPSADeconv::fFFT
std::unique_ptr< TVirtualFFT > fFFT
Definition: AtPSADeconv.h:59
AtPSADeconv::updateFilter
void updateFilter(const AtPadFFT &fft, AtPadFFT *filter)
Definition: AtPSADeconv.cxx:122
AtPSADeconv::getZandQ
virtual HitData getZandQ(const AtPad::trace &charge)
Definition: AtPSADeconv.cxx:263
AtPSADeconv::operator=
AtPSADeconv & operator=(AtPSADeconv &&obj)=default
AtPSADeconv::getZhitVariance
virtual double getZhitVariance(double zLoc, double zLocVar) const override
Definition: AtPSADeconv.cxx:285
AtPad::trace
std::array< Double_t, 512 > trace
Definition: AtPad.h:41
AtPSA::HitVector
std::vector< std::unique_ptr< AtHit > > HitVector
Definition: AtPSA.h:50
AtPSADeconv::fFilterOrder
int fFilterOrder
Definition: AtPSADeconv.h:62
AtRawEvent
Definition: AtRawEvent.h:34
AtPSADeconv::GetResponse
AtPad & GetResponse(int padNum)
Get the AtPad describing the response of the electronics.
Definition: AtPSADeconv.cxx:70
AtPSADeconv::fFFTbackward
std::unique_ptr< TVirtualFFT > fFFTbackward
Definition: AtPSADeconv.h:60
AtPSADeconv::initFFTs
void initFFTs()
Definition: AtPSADeconv.cxx:54
AtPSADeconv::GetResponseFFT
const AtPadFFT & GetResponseFFT(int padNum)
Get the fourier transform describing the response of the electronics.
Definition: AtPSADeconv.cxx:86
AtPSADeconv::SetFilterOrder
void SetFilterOrder(int order)
Definition: AtPSADeconv.cxx:40
AtPSADeconv::AtPSADeconv
AtPSADeconv()
Definition: AtPSADeconv.cxx:28
AtPSADeconv::SetResponse
void SetResponse(ResponseFunc response)
Definition: AtPSADeconv.h:93
AtPSADeconv::ZHitData::zVar
double zVar
Definition: AtPSADeconv.h:103
AtPSADeconv::getFilterKernel
double getFilterKernel(int freq)
Definition: AtPSADeconv.cxx:155
AtPSADeconv::GetResponseFilter
const AtPadFFT & GetResponseFilter(int padNum)
Get the filter in fourier space describing the response of the electronics.
Definition: AtPSADeconv.cxx:109
AtPSADeconv::GetFilterOrder
int GetFilterOrder()
Definition: AtPSADeconv.h:80
AtPSADeconv::fUseSimulatedCharge
bool fUseSimulatedCharge
Definition: AtPSADeconv.h:64
AtPadFFT
Definition: AtPadFFT.h:19
AtPSADeconv::createResponsePad
AtPad * createResponsePad(int padNum)
Definition: AtPSADeconv.cxx:135
AtPSADeconv
Abstract base class for getting current through deconvolution.
Definition: AtPSADeconv.h:38
AtPSADeconv::ResponseFunc
std::function< double(int, double)> ResponseFunc
Definition: AtPSADeconv.h:41
AtPSADeconv::fResponse
ResponseFunc fResponse
Definition: AtPSADeconv.h:57
AtPSADeconv::HitData
std::vector< ZHitData > HitData
Data structure for Z loc (TB), Z variance (TB), Charge (arb), Charge variance (arb)
Definition: AtPSADeconv.h:109
AtPSADeconv::fCutoffFreq
int fCutoffFreq
Definition: AtPSADeconv.h:63
AtPSADeconv::ZHitData::q
double q
Definition: AtPSADeconv.h:104
AtPSADeconv::Clone
virtual std::unique_ptr< AtPSA > Clone() override
Definition: AtPSADeconv.h:73
AtPSADeconv::AtPSADeconv
AtPSADeconv(AtPSADeconv &&obj)=default
AtPSADeconv::GetCutoffFreq
int GetCutoffFreq()
Definition: AtPSADeconv.h:81
AtPSA.h
AtPad
Container class for AtPadBase objects.
Definition: AtPad.h:38
AtPSA
Definition: AtPSA.h:27
AtPSADeconv::AnalyzeFFTpad
HitVector AnalyzeFFTpad(AtPad &pad)
Assumes that the pad has it's fourier transform information filled.
Definition: AtPSADeconv.cxx:176
AtPSADeconv::ZHitData::qVar
double qVar
Definition: AtPSADeconv.h:105
AtPSADeconv::SetUseSimCharge
void SetUseSimCharge(bool val)
Definition: AtPSADeconv.h:78
AtPSADeconv::SetResponse
void SetResponse(AtRawEvent response)
Definition: AtPSADeconv.h:87
AtPSADeconv::~AtPSADeconv
~AtPSADeconv()=default