//# tHanningSmooth.cc: Tests Hanning smoothing of spectral channels //# Copyright (C) 1995,1999,2000,2001 //# Associated Universities, Inc. Washington DC, USA. //# //# This program is free software; you can redistribute it and/or modify it //# under the terms of the GNU General Public License as published by the Free //# Software Foundation; either version 2 of the License, or (at your option) //# any later version. //# //# This program 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 General Public License for //# more details. //# //# You should have received a copy of the GNU General Public License along //# with this program; 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 #include #include #include #include #include #include #include #include using namespace std; using namespace casa; int main(int argc, char **argv) { std::string copy_input_ms; try { std::string source_input_ms; if (argc < 2) { String casadata = EnvironmentVariable::get("CASADATA"); if (casadata.empty()) { throw(AipsError("CASADATA env variable not defined and no file given in command line")); } source_input_ms = casadata + "/unittest/hanningsmooth/ngc5921_ut.ms"; } else { source_input_ms = argv[1]; } copy_input_ms = "ngc5921_ut.ms"; // Make a copy of the MS in the working directory // TODO: Use C++17 filesystem copy https://en.cppreference.com/w/cpp/filesystem/copy String cp_command = std::string("cp -RL ") + source_input_ms + " ."; auto cmd_ecode = system(cp_command.c_str()); if (!cmd_ecode) std::cerr << "Failed to copy " << copy_input_ms << " to current directory" < sort(4); sort[2] = MS::FIELD_ID; sort[3] = MS::ARRAY_ID; sort[1] = MS::DATA_DESC_ID; sort[0] = MS::TIME; Matrix allChannels; VisSet vs(ms,sort,allChannels, 0.0); VisIter& vi(vs.iter()); VisBuffer vb(vi); Int row, chn, pol; for (vi.originChunks();vi.moreChunks();vi.nextChunk()) { for (vi.origin();vi.more();vi++) { Cube& vc= vb.correctedVisCube(); Cube& fc= vb.flagCube(); Int nRow=vb.nRow(); Int nChan=vb.nChannel(); Int nPol=vi.visibilityShape()(0); Cube smoothedData(nPol,nChan,nRow); //smoothedData.reference(vb.correctedVisCube()); Cube newFlag(nPol,nChan,nRow); //newFlag.reference(vb.flagCube()); for (row=0; row