//# RFAMedianClip.cc: this defines RFAMedianClip //# Copyright (C) 2000,2001,2002 //# Associated Universities, Inc. Washington DC, USA. //# //# This library is free software; you can redistribute it and/or modify it //# under the terms of the GNU Library General Public License as published by //# the Free Software Foundation; either version 2 of the License, or (at your //# option) any later version. //# //# This library is distributed in the hope that it will be useful, but WITHOUT //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public //# License for more details. //# //# You should have received a copy of the GNU Library General Public License //# along with this library; if not, write to the Free Software Foundation, //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. //# //# Correspondence concerning AIPS++ should be addressed as follows: //# Internet email: aips2-request@nrao.edu. //# Postal address: AIPS++ Project Office //# National Radio Astronomy Observatory //# 520 Edgemont Road //# Charlottesville, VA 22903-2475 USA //# //# $Id$ #include #include using namespace casacore; namespace casa { //# NAMESPACE CASA - BEGIN // ----------------------------------------------------------------------- // RFATimeMedian // Accumulator class for computing sliding median per channels over time. // Internally, we store a cubic TempLattice of ntime x nifr x nchan // medians. // ----------------------------------------------------------------------- RFATimeMedian::RFATimeMedian( RFChunkStats &ch,const RecordInterface &parm ) : RFADiffMapBase(ch,parm) { halfwin = (uInt)parm.asInt(RF_HW); msl = NULL; if( fieldType(parm,RF_DEBUG,TpArrayInt) ) { Vector dbg; parm.get(RF_DEBUG,dbg); if (dbg.nelements() != 2 && dbg.nelements() != 3) { os<<"\""<= halfwin ) { diff.advance(it-halfwin); flag_iter.advance(it-halfwin); } return RFA::CONT; } // ----------------------------------------------------------------------- // RFATimeMedian::iterRow // Processes one row of data for per-channel medians over time // ----------------------------------------------------------------------- RFA::IterMode RFATimeMedian::iterRow ( uInt irow ) { // start filling deviations when we get to time slot HW uInt iifr = chunk.ifrNum(irow); uInt it = chunk.iTime(); Bool fill = ( chunk.iTime() >= (Int)halfwin ); Bool rowfl = chunk.npass() ? flag.rowFlagged(iifr,it) : flag.rowPreFlagged(iifr,it); if( rowfl ) { // the whole row is flagged, so just advance all median sliders for( uInt i=0; i dbg; parm.get(RF_DEBUG,dbg); if (dbg.nelements() != 2 && dbg.nelements() != 3) { os<<"\""<=halfwin ) { Float d = msl.diff(fl); if( !fl ) setDiff(i-halfwin,iifr,d); } } // finish sliding the medians for remaining channels for( uInt i=num(CHAN)-halfwin; i