Skip to content

Commit

Permalink
Merge pull request #38 from lofar-astron/fix-add-lofar-utils
Browse files Browse the repository at this point in the history
Fix add lofar utils
  • Loading branch information
maaijke authored Aug 10, 2021
2 parents f579024 + 1ce9095 commit af20e64
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 83 deletions.
48 changes: 0 additions & 48 deletions RMextract/LOFAR_TOOLS/createRMParmdb

This file was deleted.

42 changes: 42 additions & 0 deletions RMextract/LOFAR_TOOLS/createRMParmdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import lofar.parmdb as parmdb
import pyrap.tables as tab
import numpy as np
import argparse


def createRMParmdb(MS,parmdbname,create=True,patchname='',
Expand Down Expand Up @@ -47,3 +48,44 @@ def createRMParmdb(MS,parmdbname,create=True,patchname='',
valuename = "RotationMeasure:%s"%(st)
myParmdb.deleteValues(valuename)
myParmdb.addValues(valuename,myValue)

def main():
descriptiontext = "Create a parmDB with the Ionospheric RM predicted from data in IONEX files.\n" + \
"Default is to create a parmDB that is compatible with the \"rotationmeasure\" " + \
"correction in NDPPP ApplyCal.\n"
parser = argparse.ArgumentParser(description=descriptiontext)

parser.add_argument('MS',help='Measurement-Set for which the parmDB is to be created.')
parser.add_argument('-o','--out', help='name of the parmdb',dest="parmdbName",default='RMParmdb');
parser.add_argument('-p','--patch',dest="patch",default="",type=str,
help='If given: create parameter-names that include a patch-name as needed for BBS. '
'The default is to create parameter-names without a patch-name as they are needed for '
'the "rotationmeasure" correction in NDPPP ApplyCal.')
#parser.add_argument('-s','--sky', help='name of the skymodel, if no source/patch name is given first will be selected. If you do not set the skymodel, the phasecenter of the MS will be assumed as your direction. If option --use_phase_center is used the direction in the sky model are ignored. However, it could still be useful to automatically select a patch name, which is needed for direction dependent parmareters.',dest="sky")
#parser.add_argument('-f','--use_phase_center', help='force using of phase center of MS, even if skymodel is supplied',action='store_true',dest="usePhaseCenter");
parser.add_argument('--IONprefix', help='prefix of IONEX files, either CODG or ROBR',dest="prefix",default='codg');
parser.add_argument('--IONserver', help='server of IONEX files',dest="server",default='ftp://cddis.gsfc.nasa.gov/gnss/products/ionex/')
parser.add_argument('--IONpath', help='location of IONEX files',dest="ionexPath",default='./')
parser.add_argument('--all','-a', help='calculate RM per station (default calculates only for CS002LBA)',action='store_true',dest="allStations")
parser.add_argument('-t','--timestep', help='timestep in seconds. for values <=0 (default) the timegrid of the MS is used ',dest="timestep",type=float,default=900.)
parser.add_argument('-e','--smart_interpol', help='float parameter describing how much of earth rotation is taken in to account in interpolation of the IONEX files. 1.0 means time interpolation assumes ionosphere rotates in opposite direction of the Earth. 0.0 (default) means no rotation applied',dest="earth_rot",type=float,default=0)
parser.add_argument('-r','--overwrite',help='overwrite existing parmdb',action='store_true',dest="overwrite")

args = parser.parse_args()

stat_names=None
if args.allStations:
stat_names='all'
if not args.overwrite and not os.path.isdir(args.parmdbName):
args.overwrite=True

createRMParmdb(args.MS,
parmdbname=args.parmdbName,
create=args.overwrite,
patchname=args.patch,
server=args.server,
prefix=args.prefix,
ionexPath=args.ionexPath,
earth_rot=args.earth_rot,
timestep=args.timestep,
stat_names=stat_names)
11 changes: 4 additions & 7 deletions RMextract/LOFAR_TOOLS/createRMh5parm.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Extract RM values for a LOFAR observation. Fill h5parm
Expand All @@ -19,6 +16,7 @@
import numpy as np
import sys
import logging
import argparse


def makesolset(MS, data, solset_name):
Expand All @@ -43,7 +41,7 @@ def makesolset(MS, data, solset_name):
sourceTable.append([('pointing',pointing)])


def main(MSfiles, h5parmdb, solset_name = "sol000",all_stations=True,timestepRM=300,
def createRMh5parm(MSfiles, h5parmdb, solset_name = "sol000",all_stations=True,timestepRM=300,
ionex_server="ftp://ftp.aiub.unibe.ch/CODE/",
ionex_prefix='CODG',ionexPath="./",earth_rot=0,proxyServer=None,proxyPort=None,proxyType=None,proxyUser=None,proxyPass=None):
'''Add rotation measure to existing h5parmdb
Expand Down Expand Up @@ -206,8 +204,7 @@ def main(MSfiles, h5parmdb, solset_name = "sol000",all_stations=True,timestepRM=


########################################################################
if __name__ == '__main__':
import argparse
def main():
parser = argparse.ArgumentParser(description='Adds CommonRotationAngle to an H5parm from RMextract.')

parser.add_argument('MSfiles', type=str, nargs='+',
Expand Down Expand Up @@ -250,7 +247,7 @@ def main(MSfiles, h5parmdb, solset_name = "sol000",all_stations=True,timestepRM=
MS = args.MSfiles
h5parmdb = args.h5parm
logging.info("Working on: %s %s" % (MS, h5parmdb))
main(MS, h5parmdb, ionex_server=args.server, ionex_prefix=args.prefix,
createRMh5parm(MS, h5parmdb, ionex_server=args.server, ionex_prefix=args.prefix,
ionexPath=args.ionexpath, solset_name=args.solsetName,
all_stations=args.allStations, timestepRM=args.timestep,
earth_rot=args.earth_rot, proxyServer=args.proxyserver, proxyPort=args.proxyport,
Expand Down
29 changes: 11 additions & 18 deletions RMextract/LOFAR_TOOLS/download_IONEX.py
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,27 +1,23 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import RMextract.getIONEX as ionex
from RMextract import PosTools
import numpy as np
import logging
import argparse
parser = argparse.ArgumentParser(description='Downloads relevant IONEX files for a given MS')

parser.add_argument('MSfiles', type=str,
help='MS for which the parmdb should be created.')
parser.add_argument('--server', type=str, default='ftp://ftp.aiub.unibe.ch/CODE/',
help='URL of the server to use. (default: ftp://ftp.aiub.unibe.ch/CODE/)')
parser.add_argument('--prefix', type=str, default='CODG',
help='Prefix of the IONEX files. (default: \"CODG\")')
parser.add_argument('--ionexpath', '--path', type=str, default='IONEXdata/',
help='Directory where to store the IONEX files. (default: \"IONEXdata/\")')

def main():
parser = argparse.ArgumentParser(description='Downloads relevant IONEX files for a given MS')
parser.add_argument('MSfiles', type=str,
help='MS for which the parmdb should be created.')
parser.add_argument('--server', type=str, default='ftp://ftp.aiub.unibe.ch/CODE/',
help='URL of the server to use. (default: ftp://ftp.aiub.unibe.ch/CODE/)')
parser.add_argument('--prefix', type=str, default='CODG',
help='Prefix of the IONEX files. (default: \"CODG\")')
parser.add_argument('--ionexpath', '--path', type=str, default='IONEXdata/',
help='Directory where to store the IONEX files. (default: \"IONEXdata/\")')
args = parser.parse_args()



def main(argv):
args = parser.parse_args(argv)
MS=args.MSfiles
server=args.server
prefix=args.prefix
Expand Down Expand Up @@ -56,6 +52,3 @@ def main(argv):

return True


if __name__ == '__main__':
main(sys.argv[1:])
34 changes: 24 additions & 10 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import os
import sys
import warnings
from setuptools import find_packages
import numpy
from numpy.distutils.core import setup, Extension
Expand All @@ -13,9 +15,8 @@ def read(rel_path):
return fp.read()


packages = find_packages(exclude=["RMextract.LOFAR_TOOLS"])
packages = find_packages() # exclude=["RMextract.LOFAR_TOOLS"])
ext_modules = []
scripts = []

ext_modules.append(
Extension(
Expand Down Expand Up @@ -67,17 +68,19 @@ def read(rel_path):
)
)

if "RMextract.LOFAR_TOOLS" in packages:
scripts.extend(
[
os.path.join("RMextract", "LOFAR_TOOLS", f)
for f in ("createRMParmdb", "createRMh5parm.py", "download_IONEX.py")
]
# For backward compatibility for those who (still) use `python setup.py` to
# install the optional LOFAR utilities.
if "--add-lofar-utils" in sys.argv:
packages.append("RMextract.LOFAR_TOOLS")
sys.argv.remove("--add-lofar-utils")
warnings.warn(
"Use of 'python setup.py install --add-lofar-utils' is deprecated. "
"Use 'pip install RMextract[lofar-utils]' instead."
)

setup(
name="RMextract",
version="0.4.2",
version="0.4.3",
url="https://github.com/lofar-astron/RMextract",
project_urls={"Source": "https://github.com/lofar-astron/RMextract"},
author="Maaijke Mevius",
Expand All @@ -100,6 +103,18 @@ def read(rel_path):
ext_modules=ext_modules,
packages=packages,
install_requires=["numpy", "scipy", "astropy", "python-casacore"],
extras_require={
# Note that "lofar-utils" also depends on the python bindings to the LOFAR ParmDB.
# Since these have never been published on PyPI, we cannot specify this dependency.
"lofar-utils": ["losoto"]
},
entry_points={
"console_scripts": [
"createRMParmdb = RMextract.LOFAR_TOOLS.createRMParmdb:main [lofar-utils]",
"createRMh5parm.py = RMextract.LOFAR_TOOLS.createRMh5parm:main [lofar-utils]",
"download_IONEX.py = RMextract.LOFAR_TOOLS.download_IONEX:main [lofar-utils]",
]
},
package_data={
"RMextract.EMM": ["*.COF"],
# Add *.pyf files. These files are _not_ treated as source files by Numpy's setup(),
Expand All @@ -109,5 +124,4 @@ def read(rel_path):
"RMextract.pyiri": ["iri.pyf", "*.dat", "*.asc"],
"RMextract.pyiriplas": ["iriplas.pyf", "*.dat", "*.asc", "kp*", "*.ASC"],
},
scripts=scripts,
)

0 comments on commit af20e64

Please sign in to comment.