DP3
MadFlagger.h
Go to the documentation of this file.
1 // MadFlagger.h: DP3 step class to flag data based on median filtering
2 // Copyright (C) 2023 ASTRON (Netherlands Institute for Radio Astronomy)
3 // SPDX-License-Identifier: GPL-3.0-or-later
4 
8 
9 #ifndef DP3_STEPS_MADFLAGGER_H_
10 #define DP3_STEPS_MADFLAGGER_H_
11 
12 #include "InputStep.h"
13 
14 #include "base/DPBuffer.h"
15 #include "base/FlagCounter.h"
16 
17 namespace dp3 {
18 namespace common {
19 class ParameterSet;
20 }
21 
22 namespace steps {
25 
59 
60 class MadFlagger : public Step {
61  public:
64  MadFlagger(const common::ParameterSet&, const std::string& prefix);
65 
66  ~MadFlagger() override;
67 
68  common::Fields getRequiredFields() const override { return kDataField; }
69 
70  common::Fields getProvidedFields() const override { return kFlagsField; }
71 
74  bool process(std::unique_ptr<base::DPBuffer>) override;
75 
77  void finish() override;
78 
81  void updateInfo(const base::DPInfo&) override;
82 
84  void show(std::ostream&) const override;
85 
87  void showCounts(std::ostream&) const override;
88 
90  void showTimings(std::ostream&, double duration) const override;
91 
95  void flag(unsigned int index, const std::vector<unsigned int>& timeEntries);
96 
99  void computeFactors(const std::vector<unsigned int>& timeEntries,
100  unsigned int bl, int chan, int corr, int nchan, int ncorr,
101  float& Z1, float& Z2, std::vector<float>& tempBuffer,
102  common::NSTimer& moveTimer, common::NSTimer& medianTimer);
103 
105  void getExprValues(int maxNChan, int maxNTime);
106 
107  private:
108  void flagBaseline(const std::vector<int>& ant1, const std::vector<int>& ant2,
109  const std::vector<unsigned int>& timeEntries,
110  unsigned int ib, unsigned int ncorr, unsigned int nchan,
111  const float* bufDataPtr, bool* bufFlagPtr, float& Z1,
112  float& Z2, std::vector<float>& tempBuffer,
113  base::FlagCounter& counter, common::NSTimer& moveTimer,
114  common::NSTimer& medianTimer);
115 
116  protected:
117  std::string itsName;
118  std::string itsThresholdStr;
119  std::string itsFreqWindowStr;
120  std::string itsTimeWindowStr;
121  std::vector<float> itsThresholdArr;
122  std::vector<unsigned int>
124  std::vector<unsigned int>
127  unsigned int itsFreqWindow;
128  unsigned int itsTimeWindow;
129  unsigned int itsNTimes;
130  unsigned int itsNTimesDone;
131  std::vector<unsigned int> itsFlagCorr;
133  std::vector<int> itsAutoCorrIndex;
134  unsigned int itsNrAutoCorr;
135  double itsMinBLength;
136  double itsMaxBLength;
137  std::vector<double> itsBLengths;
138  std::vector<std::unique_ptr<base::DPBuffer>> itsBuffers;
139  std::vector<xt::xtensor<float, 3>> itsAmplitudes;
143  double itsMoveTime;
144  double itsMedianTime;
145 };
146 
147 } // namespace steps
148 } // namespace dp3
149 
150 #endif
Buffer holding the data of a timeslot/band.
Class to keep counts of nr of flagged points.
Abstract base class for a Step generating input.
General info about DP3 data processing attributes like averaging.
Definition: DPInfo.h:35
Class to keep counts of nr of flagged points.
Definition: FlagCounter.h:35
Definition: Fields.h:16
Implements a map of Key-Value pairs.
Definition: ParameterSet.h:31
DP3 step class to flag data based on Median Average Deviation (MAD) filtering.
Definition: MadFlagger.h:60
unsigned int itsFreqWindow
Definition: MadFlagger.h:127
std::string itsName
Definition: MadFlagger.h:117
void getExprValues(int maxNChan, int maxNTime)
Get the values of the expressions for each baseline.
std::string itsFreqWindowStr
Definition: MadFlagger.h:119
double itsMaxBLength
maximum baseline length
Definition: MadFlagger.h:136
std::vector< xt::xtensor< float, 3 > > itsAmplitudes
amplitudes of the data
Definition: MadFlagger.h:139
void showCounts(std::ostream &) const override
Show the flagger counts.
double itsMinBLength
minimum baseline length
Definition: MadFlagger.h:135
common::Fields getProvidedFields() const override
Definition: MadFlagger.h:70
void showTimings(std::ostream &, double duration) const override
Show the timings.
void computeFactors(const std::vector< unsigned int > &timeEntries, unsigned int bl, int chan, int corr, int nchan, int ncorr, float &Z1, float &Z2, std::vector< float > &tempBuffer, common::NSTimer &moveTimer, common::NSTimer &medianTimer)
MadFlagger(const common::ParameterSet &, const std::string &prefix)
std::vector< std::unique_ptr< base::DPBuffer > > itsBuffers
Definition: MadFlagger.h:138
std::vector< float > itsThresholdArr
threshold per baseline
Definition: MadFlagger.h:121
unsigned int itsTimeWindow
Definition: MadFlagger.h:128
void show(std::ostream &) const override
Show the step parameters.
std::string itsTimeWindowStr
Definition: MadFlagger.h:120
void updateInfo(const base::DPInfo &) override
double itsMoveTime
data move timer (sum all threads)
Definition: MadFlagger.h:143
std::vector< unsigned int > itsTimeWindowArr
time window size per baseline
Definition: MadFlagger.h:125
double itsMedianTime
median timer (sum of all threads)
Definition: MadFlagger.h:144
bool itsApplyAutoCorr
Definition: MadFlagger.h:132
void finish() override
Finish the processing of this step and subsequent steps.
unsigned int itsNTimesDone
Definition: MadFlagger.h:130
bool process(std::unique_ptr< base::DPBuffer >) override
base::FlagCounter itsFlagCounter
Definition: MadFlagger.h:140
float itsThreshold
Definition: MadFlagger.h:126
std::vector< unsigned int > itsFlagCorr
Definition: MadFlagger.h:131
common::NSTimer itsComputeTimer
move/median timer
Definition: MadFlagger.h:142
unsigned int itsNTimes
Definition: MadFlagger.h:129
common::Fields getRequiredFields() const override
Get the fields required by the current step.
Definition: MadFlagger.h:68
std::vector< int > itsAutoCorrIndex
baseline index of autocorrelations
Definition: MadFlagger.h:133
std::string itsThresholdStr
Definition: MadFlagger.h:118
common::NSTimer itsTimer
Definition: MadFlagger.h:141
unsigned int itsNrAutoCorr
Definition: MadFlagger.h:134
void flag(unsigned int index, const std::vector< unsigned int > &timeEntries)
std::vector< unsigned int > itsFreqWindowArr
freq window size per baseline
Definition: MadFlagger.h:123
std::vector< double > itsBLengths
length of each baseline
Definition: MadFlagger.h:137
Abstract base class for a DP3 step.
Definition: Step.h:52
static constexpr dp3::common::Fields kDataField
Definition: Step.h:60
static constexpr dp3::common::Fields kFlagsField
Definition: Step.h:62
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53