diff --git a/.gitattributes b/.gitattributes index 6784302f8ebf0a1210567b9360e952cc296f2939..45952126d823ff4e38c47b754150fc326da07e26 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 0000000000000000000000000000000000000000..7ccd237825e0ad2757534e8056048d00cc1476c8 --- /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 0000000000000000000000000000000000000000..06f18cde1dbfd6912ef7d927c4d35d25c7137a62 --- /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 0000000000000000000000000000000000000000..0c90906f8fc3d20bb97fdebf006c10880d186ba6 --- /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 0000000000000000000000000000000000000000..504b96da37b35fd4285eaa0e610eb024a66cf76d --- /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 0000000000000000000000000000000000000000..22a51496e01d48927071bcc3317a7f7aaf172bae --- /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 0000000000000000000000000000000000000000..0a70cf401e7826994d680b0c5772f3735cef2705 --- /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 0000000000000000000000000000000000000000..34909d9e69b15ce11d096de9ca4d915561b983e5 --- /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 0000000000000000000000000000000000000000..29c5840a10588884a1c710d9944d867a4c91f6cd --- /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 0000000000000000000000000000000000000000..3248db69013fe71de1d8e240c86941cea0f3a6a7 --- /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 0000000000000000000000000000000000000000..f77f940f443cb2814f228414ca9fa6493ca409d4 --- /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 0000000000000000000000000000000000000000..3ad1c1d94ea04c8c1218401bf30387d5ea986254 --- /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 0000000000000000000000000000000000000000..d7bfaa6044524da906059d2037719370d14fe10a --- /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 0000000000000000000000000000000000000000..20d1a8269a693034956005370237ad3f165fb065 --- /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 0000000000000000000000000000000000000000..1420a20b7ba5e3d440f33dae679073424e0f2300 --- /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 0000000000000000000000000000000000000000..59e32a2451f9bbb5ee3b57021d2a0ac503cd84ed --- /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