Line data Source code
1 : //# FlagAgentAntennaIntegrations.h: This file contains the interface definition of the FlagAgentAntennaIntegrations class. 2 : //# 3 : //# CASA - Common Astronomy Software Applications (http://casa.nrao.edu/) 4 : //# Copyright (C) Associated Universities, Inc. Washington DC, USA 2017, All rights reserved. 5 : //# Copyright (C) European Southern Observatory, 2017, All rights reserved. 6 : //# 7 : //# This library is free software; you can redistribute it and/or 8 : //# modify it under the terms of the GNU Lesser General Public 9 : //# License as published by the Free software Foundation; either 10 : //# version 2.1 of the License, or (at your option) any later version. 11 : //# 12 : //# This library is distributed in the hope that it will be useful, 13 : //# but WITHOUT ANY WARRANTY, without even the implied warranty of 14 : //# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 : //# Lesser General Public License for more details. 16 : //# 17 : //# You should have received a copy of the GNU Lesser General Public 18 : //# License along with this library; if not, write to the Free Software 19 : //# Foundation, Inc., 59 Temple Place, Suite 330, Boston, 20 : //# MA 02111-1307 USA 21 : //# $Id: $ 22 : 23 : #ifndef FlagAgentAntennaIntegrations_H_ 24 : #define FlagAgentAntennaIntegrations_H_ 25 : 26 : #include <flagging/Flagging/FlagAgentBase.h> 27 : #include <unordered_map> 28 : 29 : namespace casa { //# NAMESPACE CASA - BEGIN 30 : 31 : /** 32 : * <summary> 33 : * A flag agent that implements the 'antint' flagdata mode. 34 : * </summary> 35 : * 36 : * Uses the FlagAgentBase::ROWS_PREPROCESS_BUFFER iteration approach. 37 : * 38 : * The pre-processing in preProcessBuffer() checks what channels are 39 : * flagged for every baseline and saves in a data structure what times 40 : * should be flagged. 41 : * Then computeRowFlags() flags/returns true for all the rows with 42 : * times/integrations that should be flagged. Following the 'antint' 43 : * approach. 44 : * 45 : * This implementation uses as reference the task 'antintflag' 46 : * (https://doi.org/10.5281/zenodo.163546, 47 : * https://github.com/chrishales/antintflag) 48 : */ 49 : class FlagAgentAntennaIntegrations : public FlagAgentBase { 50 : 51 : public: 52 : 53 : FlagAgentAntennaIntegrations(FlagDataHandler *dh, casacore::Record config, casacore::Bool writePrivateFlagCube = false, casacore::Bool flag = true); 54 : 55 20 : ~FlagAgentAntennaIntegrations() = default; 56 : 57 : private: 58 : 59 : void setAgentParameters(casacore::Record config, 60 : casacore::Vector<casacore::String> *antennaNames); 61 : 62 : // To use iteration approach FlagAgentBase::ROWS_PREPROCESS_BUFFER 63 : void preProcessBuffer(const vi::VisBuffer2 &visBuffer); 64 : 65 : // Compute flags afor a given mapped visibility point 66 : bool computeRowFlags(const vi::VisBuffer2 &visBuffer, FlagMapper &flags, casacore::uInt row); 67 : 68 : typedef std::unordered_map<casacore::Double, bool> FlaggedTimesMap; 69 : 70 : typedef std::vector<std::vector<bool>> TableFlagPerBaselinePerChannel; 71 : 72 : void doPreProcessingTimePoint(FlaggedTimesMap &flaggedTimes, 73 : casacore::Double rowTime, 74 : TableFlagPerBaselinePerChannel &flagPerBaselinePerChannel); 75 : 76 : void doPreProcessingTimePointMultiChannel(FlaggedTimesMap &flaggedTimes, 77 : casacore::Double rowTime, 78 : const TableFlagPerBaselinePerChannel &flagPerBaselinePerChannel); 79 : 80 : void doPreProcessingTimePointSingleChannel(FlaggedTimesMap &flaggedTimes, 81 : casacore::Double rowTime, 82 : const TableFlagPerBaselinePerChannel &flagPerBaselinePerChannel); 83 : 84 : void checkAnyPolarizationFlagged(const casacore::Cube<casacore::Bool> &polChanRowFlags, 85 : TableFlagPerBaselinePerChannel &flagPerBaselinePerChannel, 86 : casacore::uInt row, casacore::uInt baselineIdx); 87 : 88 : 89 : casacore::uInt 90 : findAntennaID(const casacore::String &name, 91 : const casacore::Vector<casacore::String> *antennaNames); 92 : 93 : // Time points that should be flagged 94 : FlaggedTimesMap doFlagTime_p; 95 : 96 : // The antenna of interest. Pairs with this one are checked against the flag-threshold 97 : casacore::Int antIdx_p; 98 : // what fraction of channels need to be flagged to consider a 99 : // polarization product flagged 100 : casacore::Double minChanThreshold_p = 0.6; 101 : // verbosity 102 : bool verbose_p = false; 103 : }; 104 : 105 : 106 : } //# NAMESPACE CASA - END 107 : 108 : #endif /* FlagAgentAntennaIntegrations_H_ */