ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtFilterFFT.h
Go to the documentation of this file.
1 #ifndef ATFFTFILTER_H
2 #define ATFFTFILTER_H
3 
4 #include "AtFilter.h"
5 
6 #include <Rtypes.h>
7 #include <TVirtualFFT.h> // Annoyingly required for ROOT to generate a dictionary (even without IO)
8 
9 #include <map>
10 #include <memory>
11 #include <vector>
12 
13 class AtPad;
14 class AtPadFFT;
15 class AtRawEvent;
16 struct AtPadReference;
17 
33 class AtFilterFFT : public AtFilter {
34 
35  // Forward declares and alias declerations
36 public:
37  struct AtFreqRange {
38  Int_t fBeginFreq;
39  Double_t fBeginFact;
40 
41  Int_t fEndFreq;
42  Double_t fEndFact;
43  friend bool operator<(const AtFreqRange &lhs, const AtFreqRange &rhs);
44  };
45  using FreqRanges = std::vector<AtFreqRange>;
46 
47 protected:
49  std::map<Int_t, Double_t> fFactors;
50 
51  std::unique_ptr<TVirtualFFT> fFFT{nullptr};
52  std::unique_ptr<TVirtualFFT> fFFTbackward{nullptr};
53 
54  Bool_t fSaveTransform{false};
55  Bool_t fSubtractBackground{true};
56 
58  // AtRawEvent *fFilteredEvent{nullptr};
59  static constexpr Int_t fTransformSize = 512;
60 
61 public:
62  AtFilterFFT() = default;
63  ~AtFilterFFT() = default;
64 
65  bool AddFreqRange(AtFreqRange range); // Range is inclusive
66  void SetSaveTransform(bool saveTransform) { fSaveTransform = saveTransform; }
67  void SetSubtractBackground(bool subtractBackground) { fSubtractBackground = subtractBackground; }
68 
69  bool GetSaveTransform() { return fSaveTransform; }
71 
72  const FreqRanges &GetFreqRanges() { return fFreqRanges; }
73  void DumpFactors();
74 
75  void Init() override;
76  void InitEvent(AtRawEvent *event = nullptr) override;
77  void Filter(AtPad *pad, AtPadReference *padReference) override;
78  bool IsGoodEvent() override { return true; }
79  void SetLowPass(int order, int cuttoff);
80 
81 protected:
82  virtual std::unique_ptr<AtPadFFT> applyFrequencyCutsAndSetInverseFFT();
83 
84 private:
85  bool isValidFreqRange(const AtFreqRange &range);
86  bool doesFreqRangeOverlap(const AtFreqRange &range);
87  double getFilterKernel(int freq, int fFilterOrder, int fCutoffFreq);
88 };
89 
90 #endif //#ifndef ATFFTFILTER_H
AtFilterFFT::fFreqRanges
FreqRanges fFreqRanges
Definition: AtFilterFFT.h:48
AtFilterFFT::SetSaveTransform
void SetSaveTransform(bool saveTransform)
Definition: AtFilterFFT.h:66
AtFilterFFT::AtFreqRange::fEndFact
Double_t fEndFact
Definition: AtFilterFFT.h:42
AtFilterFFT::DumpFactors
void DumpFactors()
Definition: AtFilterFFT.cxx:179
AtFilterFFT::fSubtractBackground
Bool_t fSubtractBackground
Definition: AtFilterFFT.h:55
AtFilterFFT::FreqRanges
std::vector< AtFreqRange > FreqRanges
Definition: AtFilterFFT.h:45
AtFilterFFT::fFFTbackward
std::unique_ptr< TVirtualFFT > fFFTbackward
Definition: AtFilterFFT.h:52
AtFilterFFT::AtFreqRange::fBeginFreq
Int_t fBeginFreq
Definition: AtFilterFFT.h:38
AtFilterFFT::fTransformSize
static constexpr Int_t fTransformSize
Definition: AtFilterFFT.h:59
AtRawEvent
Definition: AtRawEvent.h:34
AtFilterFFT::~AtFilterFFT
~AtFilterFFT()=default
AtFilter
Definition: AtFilter.h:13
AtFilterFFT
Definition: AtFilterFFT.h:33
AtFilterFFT::Filter
void Filter(AtPad *pad, AtPadReference *padReference) override
Definition: AtFilterFFT.cxx:81
AtFilterFFT::InitEvent
void InitEvent(AtRawEvent *event=nullptr) override
Called once for each event at the start of the Exec phase.
Definition: AtFilterFFT.cxx:69
AtFilterFFT::AtFreqRange::fBeginFact
Double_t fBeginFact
Definition: AtFilterFFT.h:39
AtFilterFFT::GetFreqRanges
const FreqRanges & GetFreqRanges()
Definition: AtFilterFFT.h:72
AtFilterFFT::AtFreqRange::fEndFreq
Int_t fEndFreq
Definition: AtFilterFFT.h:41
AtFilterFFT::AtFreqRange
Definition: AtFilterFFT.h:37
AtPadFFT
Definition: AtPadFFT.h:19
AtFilter.h
AtFilterFFT::AddFreqRange
bool AddFreqRange(AtFreqRange range)
Definition: AtFilterFFT.cxx:39
AtFilterFFT::applyFrequencyCutsAndSetInverseFFT
virtual std::unique_ptr< AtPadFFT > applyFrequencyCutsAndSetInverseFFT()
Definition: AtFilterFFT.cxx:157
AtFilterFFT::GetSaveTransform
bool GetSaveTransform()
Definition: AtFilterFFT.h:69
AtFilterFFT::Init
void Init() override
Called at the init stage of the AtFilterTask.
Definition: AtFilterFFT.cxx:56
AtFilterFFT::fFactors
std::map< Int_t, Double_t > fFactors
Definition: AtFilterFFT.h:49
AtFilterFFT::SetLowPass
void SetLowPass(int order, int cuttoff)
Definition: AtFilterFFT.cxx:18
AtFilterFFT::fFFT
std::unique_ptr< TVirtualFFT > fFFT
Definition: AtFilterFFT.h:51
AtPad
Container class for AtPadBase objects.
Definition: AtPad.h:38
AtFilterFFT::AtFreqRange::operator<
friend bool operator<(const AtFreqRange &lhs, const AtFreqRange &rhs)
Definition: AtFilterFFT.cxx:174
AtFilterFFT::SetSubtractBackground
void SetSubtractBackground(bool subtractBackground)
Definition: AtFilterFFT.h:67
AtPadReference
Definition: AtPadReference.h:20
AtFilterFFT::IsGoodEvent
bool IsGoodEvent() override
Called at the end of an event. Returns if filtering was successful.
Definition: AtFilterFFT.h:78
AtFilterFFT::GetSubtractBackground
bool GetSubtractBackground()
Definition: AtFilterFFT.h:70
AtFilterFFT::fSaveTransform
Bool_t fSaveTransform
Definition: AtFilterFFT.h:54
AtFilterFFT::fInputEvent
AtRawEvent * fInputEvent
Definition: AtFilterFFT.h:57
AtFilterFFT::AtFilterFFT
AtFilterFFT()=default