From c911b62fe82d8f43c6fe8dee7969fc5ce03d2a2f Mon Sep 17 00:00:00 2001 From: Ger van Diepen <diepen@astron.nl> Date: Wed, 26 Mar 2008 12:22:04 +0000 Subject: [PATCH] bug 1172: First version --- .gitattributes | 2 + CEP/BB/MWImager/Makefile.am | 3 + CEP/BB/MWImager/bootstrap | 3 + CEP/BB/MWImager/configure.in | 66 ++++++++ .../MWImager/include/MWImager/ConvertParset.h | 43 +++++ CEP/BB/MWImager/include/MWImager/Makefile.am | 4 + CEP/BB/MWImager/include/Makefile.am | 3 + CEP/BB/MWImager/src/ConvertParset.cc | 154 ++++++++++++++++++ CEP/BB/MWImager/src/Makefile.am | 21 +++ CEP/BB/MWImager/src/convertimagerparset.cc | 42 +++++ CEP/BB/MWImager/src/mwimager | 15 ++ CEP/BB/MWImager/test/Makefile.am | 8 + CEP/BB/MWImager/test/tconvertimagerparset.in | 30 ++++ CEP/BB/MWImager/test/tconvertimagerparset.run | 4 + CEP/BB/MWImager/test/tconvertimagerparset.sh | 2 + .../MWImager/test/tconvertimagerparset.stdout | 39 +++++ 16 files changed, 439 insertions(+) create mode 100644 CEP/BB/MWImager/Makefile.am create mode 100755 CEP/BB/MWImager/bootstrap create mode 100644 CEP/BB/MWImager/configure.in create mode 100644 CEP/BB/MWImager/include/MWImager/ConvertParset.h create mode 100644 CEP/BB/MWImager/include/MWImager/Makefile.am create mode 100644 CEP/BB/MWImager/include/Makefile.am create mode 100644 CEP/BB/MWImager/src/ConvertParset.cc create mode 100644 CEP/BB/MWImager/src/Makefile.am create mode 100644 CEP/BB/MWImager/src/convertimagerparset.cc create mode 100755 CEP/BB/MWImager/src/mwimager create mode 100644 CEP/BB/MWImager/test/Makefile.am create mode 100644 CEP/BB/MWImager/test/tconvertimagerparset.in create mode 100755 CEP/BB/MWImager/test/tconvertimagerparset.run create mode 100755 CEP/BB/MWImager/test/tconvertimagerparset.sh create mode 100644 CEP/BB/MWImager/test/tconvertimagerparset.stdout diff --git a/.gitattributes b/.gitattributes index 6784302f8eb..45952126d82 100644 --- a/.gitattributes +++ b/.gitattributes @@ -72,6 +72,8 @@ CEP/BB/BBSKernel/test/tParmMerge.in_mep2/table.f0 -text svneol=unset#unset CEP/BB/BBSKernel/test/tParmMerge.in_mep2/table.f0i -text svneol=unset#unset CEP/BB/BBSKernel/test/tParmMerge.in_mep2/table.lock -text svneol=unset#unset CEP/BB/BB_GUI/make_jar.sh -text svneol=native#application/octet-stream +CEP/BB/MWImager/bootstrap -text +CEP/BB/MWImager/src/mwimager -text CEP/BB/SourceDB/bootstrap -text CEP/CPA/PSS3/CAL/src/TEST.MEP/InitialValues/table.dat -text svneol=unset#unset CEP/CPA/PSS3/CAL/src/TEST.MEP/InitialValues/table.f0 -text svneol=unset#unset diff --git a/CEP/BB/MWImager/Makefile.am b/CEP/BB/MWImager/Makefile.am new file mode 100644 index 00000000000..7ccd237825e --- /dev/null +++ b/CEP/BB/MWImager/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = include src test + +include $(top_srcdir)/Makefile.common diff --git a/CEP/BB/MWImager/bootstrap b/CEP/BB/MWImager/bootstrap new file mode 100755 index 00000000000..06f18cde1db --- /dev/null +++ b/CEP/BB/MWImager/bootstrap @@ -0,0 +1,3 @@ +#!/bin/sh + +../../../autoconf_share/bootstrap ../../../autoconf_share diff --git a/CEP/BB/MWImager/configure.in b/CEP/BB/MWImager/configure.in new file mode 100644 index 00000000000..0c90906f8fc --- /dev/null +++ b/CEP/BB/MWImager/configure.in @@ -0,0 +1,66 @@ +dnl +dnl Process this file with autoconf to produce a configure script. +dnl +AC_INIT() +dnl AC_CONFIG_AUX_DIR(config) +dnl AM_CONFIG_HEADER(config/config.h) +AM_CONFIG_HEADER(config.h) +AM_INIT_AUTOMAKE(MWImager, 0.1, no-define) + +dnl Initialize for LOFAR (may set compilers) +lofar_INIT + +dnl Checks for programs. +AC_PROG_AWK +AC_PROG_YACC +AC_PROG_CC +AC_PROG_CXX +AM_PROG_LEX +AC_PROG_INSTALL +AC_PROG_LN_S +AC_DISABLE_SHARED +AC_PROG_LIBTOOL + +dnl Checks for libraries. + +dnl dnl Replace `main' with a function in -lfl: +dnl AC_CHECK_LIB(fl, main) +dnl dnl Replace `main' with a function in -lcosev_r: +dnl AC_CHECK_LIB(cosev_r, main) +dnl dnl Replace `main' with a function in -lcosnm_r: +dnl AC_CHECK_LIB(cosnm_r, main) +dnl dnl Replace `main' with a function in -lorb_r: +dnl AC_CHECK_LIB(orb_r, main) +dnl dnl Replace `main' with a function in -lpthread: +dnl AC_CHECK_LIB(pthread, main) +dnl dnl Replace `main' with a function in -lvport_r: +dnl AC_CHECK_LIB(vport_r, main) + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS(unistd.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T + +dnl Checks for library functions. +AC_FUNC_VPRINTF + +dnl +dnl Check for LOFAR specific things +dnl +lofar_GENERAL +lofar_INTERNAL(LCS/Common,Common,,1,Common/LofarTypedefs.h,,) +lofar_INTERNAL(LCS/ACC/APS,APS,,1,APS/ParameterSet.h,,) + +dnl +dnl Output Makefiles +dnl +AC_OUTPUT( +include/Makefile +include/MWImager/Makefile +src/Makefile +test/Makefile +Makefile +) diff --git a/CEP/BB/MWImager/include/MWImager/ConvertParset.h b/CEP/BB/MWImager/include/MWImager/ConvertParset.h new file mode 100644 index 00000000000..504b96da37b --- /dev/null +++ b/CEP/BB/MWImager/include/MWImager/ConvertParset.h @@ -0,0 +1,43 @@ +//# ConvertParset.h: Convert a ParSet file from SAS to cimager format +//# +//# Copyright (C) 2008 +//# ASTRON (Netherlands Foundation for Research in Astronomy) +//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl +//# +//# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//# +//# $Id$ + +#include <APS/ParameterSet.h> + +namespace LOFAR { + + class MWImager + { + public: + // Convert the input parset file (in SAS format) to the output parset + // (in cimager format). + // The output parset is written if the output name is not empty. + static ACC::APS::ParameterSet convertParset (const std::string& nameIn, + const std::string& nameOut); + + // Convert the input parset (in SAS format) to the output parset + // (in cimager format). + // The output parset is written if the output name is not empty. + static ACC::APS::ParameterSet convertParset (const ACC::APS::ParameterSet&, + const std::string& nameOut); + }; + +} //# namespace LOFAR diff --git a/CEP/BB/MWImager/include/MWImager/Makefile.am b/CEP/BB/MWImager/include/MWImager/Makefile.am new file mode 100644 index 00000000000..22a51496e01 --- /dev/null +++ b/CEP/BB/MWImager/include/MWImager/Makefile.am @@ -0,0 +1,4 @@ +pkginclude_HEADERS = Package__Version.h \ + ConvertParset.h + +include $(top_srcdir)/Makefile.common diff --git a/CEP/BB/MWImager/include/Makefile.am b/CEP/BB/MWImager/include/Makefile.am new file mode 100644 index 00000000000..0a70cf401e7 --- /dev/null +++ b/CEP/BB/MWImager/include/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = MWImager + +include $(top_srcdir)/Makefile.common diff --git a/CEP/BB/MWImager/src/ConvertParset.cc b/CEP/BB/MWImager/src/ConvertParset.cc new file mode 100644 index 00000000000..34909d9e69b --- /dev/null +++ b/CEP/BB/MWImager/src/ConvertParset.cc @@ -0,0 +1,154 @@ +//# ConvertParset.cc: Convert a ParSet file from SAS to cimager format +//# +//# Copyright (C) 2008 +//# ASTRON (Netherlands Foundation for Research in Astronomy) +//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl +//# +//# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//# +//# $Id$ + +#include <lofar_config.h> +#include <MWImager/ConvertParset.h> +#include <Common/StringUtil.h> +#include <Common/StreamUtil.h> +#include <sstream> +#include <iostream> + +using namespace std; + +namespace LOFAR { + + ACC::APS::ParameterSet MWImager::convertParset (const string& nameIn, + const string& nameOut) + { + return convertParset (ACC::APS::ParameterSet(nameIn), nameOut); + } + + ACC::APS::ParameterSet MWImager::convertParset (const ACC::APS::ParameterSet& in, + const string& nameOut) + { + ACC::APS::ParameterSet out; + string outname; + { + string datacolumn = in.getString ("datacolumn"); + string dataset = in.getString ("dataset"); + string minUV = in.getString ("minUV"); + string ncycles = in.getString ("ncycles"); + string restore = in.getString ("restore"); + vector<double> restoreBeam = in.getDoubleVector ("restore_beam"); + out.add ("Cimager.dataset", dataset); + out.add ("Cimager.datacolumn", datacolumn); + out.add ("Cimager.MinUV", minUV); + out.add ("Cimager.ncycles", ncycles); + out.add ("Cimager.restore", restore); + vector<string> restoreBeamStr (restoreBeam.size()); + for (unsigned i=0; i<restoreBeam.size(); ++i) { + ostringstream os; + os << restoreBeam[i]; + restoreBeamStr[i] = os.str() + "deg"; + } + ostringstream osvec; + osvec << restoreBeamStr; + out.add ("Cimager.restore.beam", osvec.str()); + // The output name is the MS name minus the possibly trailing .MS. + outname = dataset; + string::size_type pos = outname.rfind (".MS"); + if (pos != string::npos) { + outname.erase (pos); + } + } + { + ACC::APS::ParameterSet grin = in.makeSubset ("Gridder."); + string cutoff = grin.getString ("cutoff"); + string nfacets = grin.getString ("nfacets"); + string nwplanes = grin.getString ("nwplanes"); + string oversample = grin.getString ("oversample"); + string wmax = grin.getString ("wmax"); + string maxsupport = grin.getString ("maxsupport"); + string type = grin.getString ("type"); + string name = "Cimager.gridder." + type; + out.add ("Cimager.gridder", type); + out.add (name + ".wmax", wmax); + out.add (name + ".nwplanes", nwplanes); + out.add (name + ".oversample", oversample); + out.add (name + ".cutoff", cutoff); + out.add (name + ".maxsupport", maxsupport); + } + { + ACC::APS::ParameterSet soin = in.makeSubset ("Solver."); + string algorithm = soin.getString ("algorithm"); + string gain = soin.getString ("gain"); + string niter = soin.getString ("niter"); + string type = soin.getString ("type"); + string verbose = soin.getString ("verbose"); + string scales = soin.getString ("scales"); + out.add ("Cimager.solver", type); + out.add ("Cimager.solver.Clean.algorithm", algorithm); + out.add ("Cimager.solver.Clean.niter", niter); + out.add ("Cimager.solver.Clean.gain", gain); + out.add ("Cimager.solver.Clean.verbose", verbose); + out.add ("Cimager.solver.Clean.scales", scales); + outname += '_' + type; + } + { + ACC::APS::ParameterSet imin = in.makeSubset ("Images."); + string angle1 = imin.getString ("angle1"); + string angle2 = imin.getString ("angle2"); + string dirType = imin.getString ("directionType"); + string nchan = imin.getString ("nchan"); + string shape = imin.getString ("shape"); + string frequency = imin.getString ("frequency"); + vector<string> stokes = imin.getStringVector ("stokes"); + vector<int32> cellSize = imin.getInt32Vector ("cellSize"); + vector<string> cellSizeVec (cellSize.size()); + for (unsigned i=0; i<cellSize.size(); ++i) { + ostringstream os; + os << cellSize[i] << "arcsec"; + cellSizeVec[i] = os.str(); + } + ostringstream cellSizeStr; + cellSizeStr << cellSizeVec; + vector<string> names(stokes.size()); + for (unsigned i=0; i<stokes.size(); ++i) { + stokes[i] = toLower(stokes[i]); + names[i] = "image." + stokes[i] + '.' + outname; + } + ostringstream namesStr; + namesStr << names; + out.add ("Cimager.Images.Names", namesStr.str()); + vector<string> dirVec(3); + dirVec[0] = angle1; + dirVec[1] = angle2; + dirVec[2] = dirType; + ostringstream dirVecStr; + dirVecStr << dirVec; + for (unsigned i=0; i<stokes.size(); ++i) { + string name = "Cimager.Images.image." + stokes[i] + '.' + outname + '.'; + out.add (name+"shape", shape); + out.add (name+"cellsize", cellSizeStr.str()); + out.add (name+"frequency", frequency); + out.add (name+"nchan", nchan); + out.add (name+"direction", dirVecStr.str()); + } + } + // Write into a parset file if output name is given. + if (! nameOut.empty()) { + out.writeFile (nameOut); + } + return out; + } + +} //# namespace LOFAR diff --git a/CEP/BB/MWImager/src/Makefile.am b/CEP/BB/MWImager/src/Makefile.am new file mode 100644 index 00000000000..29c5840a105 --- /dev/null +++ b/CEP/BB/MWImager/src/Makefile.am @@ -0,0 +1,21 @@ +lib_LTLIBRARIES = libmwimager.la + +libmwimager_la_SOURCES = Package__Version.cc \ + ConvertParset.cc + +bin_PROGRAMS = versionmwimager \ + convertimagerparset + +convertimagerparset_SOURCES = convertimagerparset.cc +convertimagerparset_LDADD = libmwimager.la +convertimagerparset_DEPENDENCIES = libmwimager.la $(LOFAR_DEPEND) + +versionmwimager_SOURCES = versionmwimager.cc +versionmwimager_LDADD = libmwimager.la +versionmwimager_DEPENDENCIES = libmwimager.la $(LOFAR_DEPEND) + +scriptdir = $(bindir) +dist_script_SCRIPTS = mwimager + +include $(top_srcdir)/Makefile.common + diff --git a/CEP/BB/MWImager/src/convertimagerparset.cc b/CEP/BB/MWImager/src/convertimagerparset.cc new file mode 100644 index 00000000000..3248db69013 --- /dev/null +++ b/CEP/BB/MWImager/src/convertimagerparset.cc @@ -0,0 +1,42 @@ +//# convertimagerparset.cc: Convert a ParSet file from SAS to cimager format +//# +//# Copyright (C) 2008 +//# ASTRON (Netherlands Foundation for Research in Astronomy) +//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl +//# +//# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//# +//# $Id$ + +#include <lofar_config.h> +#include <MWImager/ConvertParset.h> +#include <iostream> + +using namespace std; +using namespace LOFAR; + +int main (int argc, const char* argv[]) +{ + if (argc < 3) { + cerr << "Run as: convertimagerparset namein nameout" << endl; + } + try { + MWImager::convertParset (argv[1], argv[2]); + } catch (std::exception& x) { + cerr << string("Unexpected exception: ") + x.what() << endl; + return 1; + } + return 0; +} diff --git a/CEP/BB/MWImager/src/mwimager b/CEP/BB/MWImager/src/mwimager new file mode 100755 index 00000000000..f77f940f443 --- /dev/null +++ b/CEP/BB/MWImager/src/mwimager @@ -0,0 +1,15 @@ +#!/bin/sh + +if test $# != 1; then + echo "run as: mwimager parset-file" + exit 1 +fi + +# Convert parset file from SAS format to cimager format. +convertimagerparset $1 $1.cvt + +# Run the imager. +~/askapsoft/Code/Components/Synthesis/synthesis/trunk/apps/cimager.sh -inputs $1.cvt + +# Convert to FITS. +## image2fits diff --git a/CEP/BB/MWImager/test/Makefile.am b/CEP/BB/MWImager/test/Makefile.am new file mode 100644 index 00000000000..3ad1c1d94ea --- /dev/null +++ b/CEP/BB/MWImager/test/Makefile.am @@ -0,0 +1,8 @@ +CHECKTOOLPROGS = tconvertimagerparset + +TESTS = tconvertimagerparset.sh + +EXTRA_DIST = tconvertimagerparset.in tconvertimagerparset.stdout + +include $(top_srcdir)/Makefile.common + diff --git a/CEP/BB/MWImager/test/tconvertimagerparset.in b/CEP/BB/MWImager/test/tconvertimagerparset.in new file mode 100644 index 00000000000..d7bfaa60445 --- /dev/null +++ b/CEP/BB/MWImager/test/tconvertimagerparset.in @@ -0,0 +1,30 @@ +Images.stokes = [I,Q,U,V] +Images.shape = [20,48, 2048] +Images.cellSize = [240, 240] +Images.frequency = [12345678, 12345679] +Images.nchan = 1 +Images.angle1 = 230.35 +Images.angle2 = -10,345 +Images.directionType = J2000 + +Solver.type = Dirty +Solver.algorithm = MultiScale +Solver.niter = 10 +Solver.gain = 1.0 +Solver.verbose = True +Solver.scales = [0, 3] + +Gridder.type = WProject +Gridder.wmax = 75 +Gridder.nwplanes = 201 +Gridder.oversample = 2 +Gridder.maxsupport = 1024 +Gridder.cutoff = 0.001 +Gridder.nfacets = 1 + +dataset = abc/def.MS +datacolumn = CORRECTED_DATA +minUV = 1.0 +ncycles = 0 +restore = False +restore_beam = [1, 1, 0] diff --git a/CEP/BB/MWImager/test/tconvertimagerparset.run b/CEP/BB/MWImager/test/tconvertimagerparset.run new file mode 100755 index 00000000000..20d1a8269a6 --- /dev/null +++ b/CEP/BB/MWImager/test/tconvertimagerparset.run @@ -0,0 +1,4 @@ +#!/bin/sh + +../src/convertimagerparset tconvertimagerparset.in tconvertimagerparset_tmp.dat +cat tconvertimagerparset_tmp.dat diff --git a/CEP/BB/MWImager/test/tconvertimagerparset.sh b/CEP/BB/MWImager/test/tconvertimagerparset.sh new file mode 100755 index 00000000000..1420a20b7ba --- /dev/null +++ b/CEP/BB/MWImager/test/tconvertimagerparset.sh @@ -0,0 +1,2 @@ +#!/bin/sh +$lofar_sharedir/runtest.sh tconvertimagerparset > tconvertimagerparset.log 2>&1 diff --git a/CEP/BB/MWImager/test/tconvertimagerparset.stdout b/CEP/BB/MWImager/test/tconvertimagerparset.stdout new file mode 100644 index 00000000000..59e32a2451f --- /dev/null +++ b/CEP/BB/MWImager/test/tconvertimagerparset.stdout @@ -0,0 +1,39 @@ +Cimager.Images.Names=[image.i.abc/def_Dirty,image.q.abc/def_Dirty,image.u.abc/def_Dirty,image.v.abc/def_Dirty] +Cimager.Images.image.i.abc/def_Dirty.cellsize=[240arcsec,240arcsec] +Cimager.Images.image.i.abc/def_Dirty.direction=[230.35,-10,345,J2000] +Cimager.Images.image.i.abc/def_Dirty.frequency=[12345678, 12345679] +Cimager.Images.image.i.abc/def_Dirty.nchan=1 +Cimager.Images.image.i.abc/def_Dirty.shape=[20,48, 2048] +Cimager.Images.image.q.abc/def_Dirty.cellsize=[240arcsec,240arcsec] +Cimager.Images.image.q.abc/def_Dirty.direction=[230.35,-10,345,J2000] +Cimager.Images.image.q.abc/def_Dirty.frequency=[12345678, 12345679] +Cimager.Images.image.q.abc/def_Dirty.nchan=1 +Cimager.Images.image.q.abc/def_Dirty.shape=[20,48, 2048] +Cimager.Images.image.u.abc/def_Dirty.cellsize=[240arcsec,240arcsec] +Cimager.Images.image.u.abc/def_Dirty.direction=[230.35,-10,345,J2000] +Cimager.Images.image.u.abc/def_Dirty.frequency=[12345678, 12345679] +Cimager.Images.image.u.abc/def_Dirty.nchan=1 +Cimager.Images.image.u.abc/def_Dirty.shape=[20,48, 2048] +Cimager.Images.image.v.abc/def_Dirty.cellsize=[240arcsec,240arcsec] +Cimager.Images.image.v.abc/def_Dirty.direction=[230.35,-10,345,J2000] +Cimager.Images.image.v.abc/def_Dirty.frequency=[12345678, 12345679] +Cimager.Images.image.v.abc/def_Dirty.nchan=1 +Cimager.Images.image.v.abc/def_Dirty.shape=[20,48, 2048] +Cimager.MinUV=1.0 +Cimager.datacolumn=CORRECTED_DATA +Cimager.dataset=abc/def.MS +Cimager.gridder=WProject +Cimager.gridder.WProject.cutoff=0.001 +Cimager.gridder.WProject.maxsupport=1024 +Cimager.gridder.WProject.nwplanes=201 +Cimager.gridder.WProject.oversample=2 +Cimager.gridder.WProject.wmax=75 +Cimager.ncycles=0 +Cimager.restore=False +Cimager.restore.beam=[1deg,1deg,0deg] +Cimager.solver=Dirty +Cimager.solver.Clean.algorithm=MultiScale +Cimager.solver.Clean.gain=1.0 +Cimager.solver.Clean.niter=10 +Cimager.solver.Clean.scales=[0, 3] +Cimager.solver.Clean.verbose=True -- GitLab