From 808e3015ad85bda974fb24db1ad9294705fe1bcb Mon Sep 17 00:00:00 2001 From: Adam Stewart Date: Fri, 28 Feb 2020 15:02:35 +1100 Subject: [PATCH] Module v1.1.0 (#108) * Major updates to find_sources.py, incl. adding ability to query multiple epochs * Query multiple epochs * Added EPOCH_INFO class * Added Query class * Added option to query all epochs * Added more logging * Added integrity check to existing files. (#104) Any existing files that fail the integrity check will be re-downloaded. Also changed README and option help text to be clear on this point. * PNG legend changes (#103) * PNG legend changes * Change selavy sources -> selavy components. * Only show selavy legend if selavy overlay is selected. * PEP8 * Dropbox: Added epoch filter and fixed field filter (#107) * Dropbox: Added epoch filter and fixed field filter * Added ability to filter by Epoch. * Fixed field filtering for + dec fields. * PEP8 * Removed not needed re.escape * Add lightcurves and capability to query multiple epochs * Add query.py for classes related to querying the survey data * Add utils.py for functions of general use (e.g. logging) * Add analysis.py for classes related to analysing the survey data * Add option to specify nice level of scripts * Cleaned up scripts, removing unnecessary imports * Version bump * Fix minor issues (#115) * Fixed noise map units * Fixed noise map units in analysis.py * Fixed catalog ordering for manual coordinate input * Updated missing RACS pointings where possible * Added fields query script (#116) * Added fields query script The field query script allows the user to get information on a specific VAST Pilot survey field(s) quickly. It will: * Print out observation information of the requested field (SBID, start date, end date, epochs etc.) * Can select to calculate the common psf of a field per epoch, or the largest beam. * Output can be saved. Addresses issue #86. * PEP8 and docstrings * More PEP8 * Added example to readme * Clarified saving in the readmes * Query islands (#117) * Initial island commit for testing * Fix self.args in Source class * Fix island columns typo * Updated build_lightcurves to handle islands. * The rms column in the islands is 'background_noise'. * It checks for 'component_id' in the find_sources.py output to judge whether it was run in island mode. * Fixed island detection in build_lightcurves. * Added yaxis-start flag to build_lightcurve * Fixed args and added 10% to y start 0 top * When yaxis-start 0 is selected the top is the max value + 10%. * Fixed args call to yaxis_start * Fixed df call in plot_lightcurves * Added linestyle="none" to non loop plot method In the previous commit I removed the for loop to do the plotting and instead used two filters on the dataframe. So now as a series is plotted the linestyle needs to be defined as none. * Fixed yaxis-start 0 upper plot range * Added new usage to readme, edited help statement * PEP8 fixes. * Updated checksums file To support epochs 5x, 6x, 7x, 10x and 11x. * Added logger output for failed Dropbox connection To give the user a bit more information on what could possibly be going wrong. * Dropbox README update Warning about a wrong password potentially locking a link. * Minor readme update. * Fixed common beam units --common-psf option was not printing out values in arcsec and degrees. Co-authored-by: Dougal Dobie --- BUILDLIGHTCURVES.md | 45 + FINDSOURCES.md | 3 +- PILOTFIELDSINFO.md | 94 + README.md | 11 +- VASTDROPBOX.md | 7 +- bin/build_lightcurves.py | 99 + bin/find_sources.py | 847 ++---- bin/get_vast_pilot_dbx.py | 53 +- bin/pilot_fields_info.py | 151 + requirements.txt | 2 + setup.py | 7 +- vasttools/__init__.py | 2 +- vasttools/analysis.py | 412 +++ vasttools/data/checksums.h5 | Bin 3469872 -> 4003640 bytes vasttools/data/racs_info.csv | 92 +- vasttools/data/vast_epoch05x_info.csv | 2917 ++++++++++++++++++ vasttools/data/vast_epoch06x_info.csv | 1765 +++++++++++ vasttools/data/vast_epoch07x_info.csv | 1189 ++++++++ vasttools/data/vast_epoch08_info.csv | 4033 +++++++++++++++++++++++++ vasttools/data/vast_epoch09_info.csv | 4033 +++++++++++++++++++++++++ vasttools/data/vast_epoch10x_info.csv | 469 +++ vasttools/data/vast_epoch11x_info.csv | 397 +++ vasttools/query.py | 903 ++++++ vasttools/source.py | 183 +- vasttools/survey.py | 63 +- vasttools/utils.py | 70 + 26 files changed, 17071 insertions(+), 776 deletions(-) create mode 100644 BUILDLIGHTCURVES.md create mode 100644 PILOTFIELDSINFO.md create mode 100755 bin/build_lightcurves.py create mode 100755 bin/pilot_fields_info.py create mode 100644 vasttools/analysis.py create mode 100644 vasttools/data/vast_epoch05x_info.csv create mode 100644 vasttools/data/vast_epoch06x_info.csv create mode 100644 vasttools/data/vast_epoch07x_info.csv create mode 100644 vasttools/data/vast_epoch08_info.csv create mode 100644 vasttools/data/vast_epoch09_info.csv create mode 100644 vasttools/data/vast_epoch10x_info.csv create mode 100644 vasttools/data/vast_epoch11x_info.csv create mode 100644 vasttools/query.py create mode 100644 vasttools/utils.py diff --git a/BUILDLIGHTCURVES.md b/BUILDLIGHTCURVES.md new file mode 100644 index 00000000..c45fc3d1 --- /dev/null +++ b/BUILDLIGHTCURVES.md @@ -0,0 +1,45 @@ +# build\_lightcurves.py + +This script allows you to quickly build lightcurves of sources you have extracted using `find_sources.py`. + +The script will output a csv file containing: +* The start and end datetimes of the observation +* Integrated flux density and associated uncertainty +* The image noise in the local region +* A flag stating whether the measurement is a detection or an upper limit. + +By default the script will also plot the lightcurve, although this can be disabled using the `--no-plotting` flag + +# Running the script +Prior to running this script you should query the survey data using `find_sources.py` with the `--vast-pilot` flag set to `all`. Then run `build_lightcurves.py FOLDER` where `FOLDER` is the output folder of the previous query. + +## Usage + +Most options should be self explanatory. The lightcurve plots and csv files are saved in the same directory as the input + +``` +usage: build_lightcurves.py [-h] [--no-plotting] [--quiet] [--debug] [--min-points MIN_POINTS] + [--min-detections MIN_DETECTIONS] [--mjd] [--grid] + [--yaxis-start {auto,0}] [--nice NICE] + folder + +positional arguments: + folder + +optional arguments: + -h, --help show this help message and exit + --no-plotting Write lightcurves to file without plotting (default: False) + --quiet Turn off non-essential terminal output. (default: False) + --debug Turn on debug output. (default: False) + --min-points MIN_POINTS + Minimum number of epochs a source must be covered by (default: 2) + --min-detections MIN_DETECTIONS + Minimum number of times a source must be detected (default: 1) + --mjd Plot lightcurve in MJD rather than datetime. (default: False) + --grid Turn on the 'grid' in the lightcurve plot. (default: False) + --yaxis-start {auto,0} + Define where the y axis on the lightcurve plot starts from. 'auto' will let + matplotlib decide the best range and '0' will start from 0. + (default: auto) + --nice NICE Set nice level. (default: 5) +``` diff --git a/FINDSOURCES.md b/FINDSOURCES.md index 81d4d7a5..299ca229 100644 --- a/FINDSOURCES.md +++ b/FINDSOURCES.md @@ -55,7 +55,7 @@ usage: find_sources.py [-h] [--vast-pilot {0,1,2,3x,4x}] [--imsize IMSIZE] [--ma [--png-zscale-contrast PNG_ZSCALE_CONTRAST] [--png-hide-beam] [--png-no-island-labels] [--png-no-colorbar] [--ann] [--reg] [--stokesv] [--quiet] [--crossmatch-only] [--selavy-simple] [--process-matches] [--debug] [--no-background-rms] [--find-fields] - [--clobber] + [--clobber] [--nice NICE] "HH:MM:SS [+/-]DD:MM:SS" OR input.csv positional arguments: @@ -115,6 +115,7 @@ optional arguments: --no-background-rms Do not estimate the background RMS around each source. (default: False) --find-fields Only return the associated field for each source. (default: False) --clobber Overwrite the output directory if it already exists. (default: False) + --nice NICE Set nice level. (default: 5) ``` ## Inputs diff --git a/PILOTFIELDSINFO.md b/PILOTFIELDSINFO.md new file mode 100644 index 00000000..8358af0e --- /dev/null +++ b/PILOTFIELDSINFO.md @@ -0,0 +1,94 @@ +# pilot\_fields\_info.py + +This script allows you to obtain basic information on fields in the VAST Pilot Survey. + +The script will print out a table containing the following information for a searched field(s): +* EPOCH +* FIELD_NAME +* SBID +* RA_HMS (Beam 0) +* DEC_DMS (Beam 0) +* DATEOBS +* DATEEND + +In addition you can request the script return the largest or calculated common psf of the field per epoch, as well as printing all the information of the individual ASKAP beams. + +# Running the script + +There are two methods in which to define the fields you wish to query: + +1. Command line: enter your field(s) as so: +``` +pilot_fields_info.py VAST_0532-50A VAST_1212+00A VAST_2257-06A +``` + +2. Or use an input csv file, which must have the column `field_name`: +``` +ra,dec,name,sbid,field_name +321.749583333333,-44.2686111111111,Q 2123-4429B,9673,VAST_2112-43A +348.945,-59.0544444444444,ESO 148-IG02,9673,VAST_2256-56A +``` +``` +pilot_fields_info.py my_fields.csv +``` + +If you wish to save the output then using the `--save` flag will write the results for each field to their own individual file in the current working directory. + +See the section below for details on the other options available when running. + +## Usage + +Most options should be self explanatory. The lightcurve plots and csv files are saved in the same directory as the input + +``` +usage: pilot_fields_info.py [-h] [--psf] [--common-psf] [--all-psf] [--save] [--quiet] [--debug] + [--nice NICE] + fields [fields ...] + +positional arguments: + fields Fields to query (or csv file containing fields). + +optional arguments: + -h, --help show this help message and exit + --psf Include the largest PSF of the 36 beams that make up the field. (default: False) + --common-psf Include the common PSF of the 36 beams that make up the field. (default: False) + --all-psf Include all the PSF information for the field. (default: False) + --save Save the resulting information. Files will be saved to the current working directory + in the form of 'VAST_XXXX+/-XXA_field_info.csv'." (default: False) + --quiet Turn off non-essential terminal output. (default: False) + --debug Turn on debug output. (default: False) + --nice NICE Set nice level. (default: 5) +``` + +## Example + +``` +❯ pilot_fields_info.py VAST_0532-50A VAST_1212+00A +[2020-02-27 16:00:18] - INFO - Will find information for the following fields: +[2020-02-27 16:00:18] - INFO - VAST_0532-50A +[2020-02-27 16:00:18] - INFO - VAST_1212+00A +[2020-02-27 16:00:18] - INFO - VAST_0532-50A information: +EPOCH FIELD_NAME SBID RA_HMS (Beam 0) DEC_DMS (Beam 0) DATEOBS DATEEND +------- ------------- ------ ----------------- ------------------ ----------------------- ----------------------- +01 VAST_0532-50A 9668 05:29:03.722 -49:34:04.84 2019-08-27 21:16:19.910 2019-08-27 21:28:26.499 +02 VAST_0532-50A 10343 05:29:03.722 -49:34:04.84 2019-10-30 15:26:18.379 2019-10-30 15:39:14.734 +03x VAST_0532-50A 10336 05:29:03.722 -49:34:04.84 2019-10-29 16:33:44.940 2019-10-29 16:46:11.436 +04x VAST_0532-50A 10901 05:29:03.722 -49:34:04.84 2019-12-19 15:49:51.855 2019-12-19 16:01:48.491 +05x VAST_0532-50A 11120 05:29:03.722 -49:34:04.84 2020-01-10 14:26:48.248 2020-01-10 14:38:44.884 +07x VAST_0532-50A 11341 05:29:03.722 -49:34:04.84 2020-01-16 14:00:36.072 2020-01-16 14:12:22.755 +08 VAST_0532-50A 11544 05:29:03.722 -49:34:04.84 2020-01-24 12:40:29.080 2020-01-24 12:52:25.716 +09 VAST_0532-50A 11568 05:29:03.722 -49:34:04.84 2020-01-25 12:36:34.625 2020-01-25 12:48:31.261 +10x VAST_0532-50A 11391 05:29:03.722 -49:34:04.84 2020-01-17 13:45:35.521 2020-01-17 13:57:32.157 +11x VAST_0532-50A 11463 05:29:03.722 -49:34:04.84 2020-01-18 13:46:39.665 2020-01-18 13:58:36.301 +[2020-02-27 16:00:18] - INFO - VAST_1212+00A information: +EPOCH FIELD_NAME SBID RA_HMS (Beam 0) DEC_DMS (Beam 0) DATEOBS DATEEND +------- ------------- ------ ----------------- ------------------ ----------------------- ----------------------- +01 VAST_1212+00A 9669 12:10:19.001 +00:31:29.93 2019-08-28 02:26:12.637 2019-08-28 02:38:19.226 +02 VAST_1212+00A 10380 12:10:19.001 +00:31:29.93 2019-10-31 22:14:59.611 2019-10-31 22:27:06.200 +05x VAST_1212+00A 11140 12:10:19.001 +00:31:29.93 2020-01-10 20:16:49.668 2020-01-10 20:28:36.351 +07x VAST_1212+00A 11357 12:10:19.001 +00:31:29.93 2020-01-16 19:45:28.941 2020-01-16 19:57:25.577 +08 VAST_1212+00A 11408 12:10:19.001 +00:31:29.93 2020-01-17 19:45:44.092 2020-01-17 19:57:40.728 +09 VAST_1212+00A 11480 12:10:19.001 +00:31:29.93 2020-01-18 19:41:49.637 2020-01-18 19:53:36.320 +[2020-02-27 16:00:18] - INFO - Processing took 0.0 minutes. + +``` diff --git a/README.md b/README.md index cb1b273a..6c1c325c 100644 --- a/README.md +++ b/README.md @@ -24,10 +24,14 @@ pip install -r requirements.txt ## Current Scripts As part of the installation the following scripts are made available in your path: -* **find\_sources.py** - A tool to swiftly search VAST Pilot data at chosen coordinates (also supports RACS if available). - - See [FINDSOURCES.md](FINDSOURCES.md) for full instructions. * **get\_vast\_pilot\_dbx.py** - A script to allow simpler downloading of the VAST Pilot survey from Dropbox. - See [VASTDROPBOX.md](VASTDROPBOX.md) for full instructions. +* **pilot\_fields\_info.py** - A script to get basic information of VAST Pilot survey fields. + - See [PILOTFIELDSINFO.md](PILOTFIELDSINFO.md) for full instructions. +* **find\_sources.py** - A tool to swiftly search VAST Pilot data at chosen coordinates (also supports RACS if available). + - See [FINDSOURCES.md](FINDSOURCES.md) for full instructions. +* **build\_lightcurves.py** - A script to allow easy creation of source lightcurves. + - See [BUILDLIGHTCURVES.md](BUILDLIGHTCURVES.md) for full instructions. ## Workflow Example @@ -35,4 +39,5 @@ This is an example of a basic workflow to query three sources of interest. The s 1. Determine which VAST Pilot fields contain the sources of interest. Do this using the `--find-fields ` mode in `find_sources.py` (see [FINDSOURCES.md](FINDSOURCES.md)). 2. Download the required fields by passing the above output to `get_vast_pilot_dbx.py` (see [VASTDROPBOX.md](VASTDROPBOX.md)). -3. Run `find_sources.py` for a second time, making sure to point to the newly downloaded data above, to gather information and cut outs of the sources and their crossmatches (see [FINDSOURCES.md](FINDSOURCES.md)). \ No newline at end of file +3. Run `find_sources.py` for a second time, making sure to point to the newly downloaded data above, to gather information and cut outs of the sources and their crossmatches (see [FINDSOURCES.md](FINDSOURCES.md)). +4. Run `build_lightcurves.py` on the output directory to create lightcurves of the sources (see [BUILDLIGHTCURVES.md](BUILDLIGHTCURVES.md)). diff --git a/VASTDROPBOX.md b/VASTDROPBOX.md index 6ffc176f..4690c43b 100644 --- a/VASTDROPBOX.md +++ b/VASTDROPBOX.md @@ -50,8 +50,9 @@ optional arguments: get the list of files from Dropbox. (default: None) --files-list FILES_LIST Input of files to fetch. (default: None) - --overwrite Overwrite any files that already exist in the output directory. (default: - False) + --overwrite Overwrite any files that already exist in the output directory. If overwrite is + not selected, integrity checking will still be performed on the existing files + and if the check fails, the file will be re-downloaded. (default: False) --debug Set logging level to debug. (default: False) --dropbox-config DROPBOX_CONFIG Dropbox config file to be read in containing the shared url, password and @@ -83,6 +84,8 @@ shared_url = ENTER_URL password = ENTER_PASSWORD access_token = ENTER_ACCESS_TOKEN ``` +**Double check that the password is correct before running!** Because of the many calls, a wrong password can lead to the link being locked for a period of time. + There is no need to put quotes around the strings. A template can be generated by using: ``` get_vast_pilot_dbx.py --write-template-dropbox-config diff --git a/bin/build_lightcurves.py b/bin/build_lightcurves.py new file mode 100755 index 00000000..6bac7531 --- /dev/null +++ b/bin/build_lightcurves.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python + +# Example command: + +# ./build_lightcurves.py outputfolder + +from vasttools.analysis import BuildLightcurves +from vasttools.utils import get_logger + +import argparse +import os + +import datetime + +runstart = datetime.datetime.now() + + +def parse_args(): + ''' + Parse arguments + + :returns: Argument namespace + :rtype: `argparse.Namespace` + ''' + + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + parser.add_argument( + 'folder', + type=str, + help='') + parser.add_argument( + '--no-plotting', + action="store_true", + help='Write lightcurves to file without plotting') + parser.add_argument( + '--quiet', + action="store_true", + help='Turn off non-essential terminal output.') + parser.add_argument( + '--debug', + action="store_true", + help='Turn on debug output.') + parser.add_argument( + '--min-points', + type=int, + help='Minimum number of epochs a source must be covered by', + default=2) + parser.add_argument( + '--min-detections', + type=int, + help='Minimum number of times a source must be detected', + default=1) + parser.add_argument( + '--mjd', + action="store_true", + help='Plot lightcurve in MJD rather than datetime.') + parser.add_argument( + '--grid', + action="store_true", + help="Turn on the 'grid' in the lightcurve plot.") + parser.add_argument( + '--yaxis-start', + type=str, + choices=["auto", "0"], + default="auto", + help=( + "Define where the y axis on the lightcurve plot starts from." + " 'auto' will let matplotlib decide the best range and '0' " + " will start from 0." + )) + parser.add_argument( + '--nice', + type=int, + help='Set nice level.', + default=5) + + args = parser.parse_args() + + return args + + +if __name__ == '__main__': + args = parse_args() + os.nice(args.nice) + + logfile = "build_lightcurves_{}.log".format( + runstart.strftime("%Y%m%d_%H:%M:%S")) + logger = get_logger(args.debug, args.quiet, logfile=logfile) + + query = BuildLightcurves(args) + query.run_query() + + runend = datetime.datetime.now() + runtime = runend - runstart + logger.info( + "Processing took {:.1f} minutes.".format( + runtime.seconds / 60.)) diff --git a/bin/find_sources.py b/bin/find_sources.py index 73c0f0de..51095457 100755 --- a/bin/find_sources.py +++ b/bin/find_sources.py @@ -7,660 +7,209 @@ from vasttools.survey import Fields, Image from vasttools.survey import RELEASED_EPOCHS from vasttools.source import Source +from vasttools.query import Query, EpochInfo +from vasttools.utils import get_logger import argparse -import sys -import numpy as np import os import datetime -import pandas as pd -import warnings -import shutil -import io -import socket - -import logging -import logging.handlers -import logging.config - -import matplotlib.pyplot as plt - -from astropy.coordinates import Angle -from astropy.coordinates import SkyCoord -from astropy import units as u -from astropy.nddata.utils import Cutout2D -from astropy.coordinates import SkyCoord -from astropy.io import fits -from astropy.wcs import WCS -from astropy.wcs.utils import skycoord_to_pixel -from astropy.utils.exceptions import AstropyWarning, AstropyDeprecationWarning - -from matplotlib.patches import Ellipse -from matplotlib.collections import PatchCollection -from astropy.visualization import ZScaleInterval, ImageNormalize -from astropy.visualization import PercentileInterval -from astropy.visualization import AsymmetricPercentileInterval -from astropy.visualization import LinearStretch -import matplotlib.axes as maxes -from mpl_toolkits.axes_grid1 import make_axes_locatable - -warnings.filterwarnings('ignore', category=AstropyWarning, append=True) -warnings.filterwarnings('ignore', - category=AstropyDeprecationWarning, append=True) - - -try: - import colorlog - use_colorlog = True -except ImportError: - use_colorlog = False - -# Force nice -os.nice(5) - -HOST = socket.gethostname() -HOST_ADA = 'ada.physics.usyd.edu.au' runstart = datetime.datetime.now() -parser = argparse.ArgumentParser( - formatter_class=argparse.ArgumentDefaultsHelpFormatter) - -parser.add_argument( - 'coords', - metavar="\"HH:MM:SS [+/-]DD:MM:SS\" OR input.csv", - type=str, - help=("Right Ascension and Declination in format " - "\"HH:MM:SS [+/-]DD:MM:SS\", in quotes. " - "E.g. \"12:00:00 -20:00:00\". Degrees is also acceptable, " - "e.g. \"12.123 -20.123\". Multiple coordinates are supported " - "by separating with a comma (no space) e.g. " - "\"12.231 -56.56,123.4 +21.3\"." - " Finally you can also enter coordinates using a .csv file." - " See example file for format.")) - -parser.add_argument( - '--vast-pilot', - choices=["0", ]+sorted(RELEASED_EPOCHS), - help=("Select the VAST Pilot Epoch to query. " - "Epoch 0 is RACS."), - default="1") -parser.add_argument( - '--imsize', - type=float, - help='Edge size of the postagestamp in arcmin', - default=30.) -parser.add_argument( - '--maxsep', - type=float, - help='Maximum separation of source from beam centre in degrees.', - default=1.0) -parser.add_argument( - '--out-folder', - type=str, - help='Name of the output directory to place all results in.', - default="find_sources_output_{}".format( - runstart.strftime("%Y%m%d_%H:%M:%S"))) -parser.add_argument( - '--source-names', - type=str, - help=("Only for use when entering coordaintes via the command line. " - "State the name of the source being searched. " - "Use quote marks for names that contain a space. " - "For multiple sources separate with a comma with no " - "space, e.g. \"SN 1994N,SN 2003D,SN 2019A\"."), - default="") -parser.add_argument( - '--crossmatch-radius', - type=float, - help='Crossmatch radius in arcseconds', - default=15.0) -parser.add_argument( - '--crossmatch-radius-overlay', - action="store_true", - help=('A circle is placed on all PNG and region/annotation' - ' files to represent the crossmatch radius.')) -parser.add_argument( - '--use-tiles', - action="store_true", - help='Use the individual tiles instead of combined mosaics.') -parser.add_argument( - '--base-folder', - type=str, - help='Path to base folder if using default directory structure') -parser.add_argument( - '--img-folder', - type=str, - help='Path to folder where images are stored') -parser.add_argument( - '--rms-folder', - type=str, - help='Path to folder where image RMS estimates are stored') -parser.add_argument( - '--cat-folder', - type=str, - help='Path to folder where selavy catalogues are stored') -parser.add_argument( - '--create-png', - action="store_true", - help='Create a png of the fits cutout.') -parser.add_argument( - '--png-selavy-overlay', - action="store_true", - help='Overlay selavy components onto the png image.') -parser.add_argument( - '--png-linear-percentile', - type=float, - default=99.9, - help='Choose the percentile level for the png normalisation.') -parser.add_argument( - '--png-use-zscale', - action="store_true", - help='Select ZScale normalisation (default is \'linear\').') -parser.add_argument( - '--png-zscale-contrast', - type=float, - default=0.1, - help='Select contrast to use for zscale.') -parser.add_argument( - '--png-hide-beam', - action="store_true", - help='Select to not show the image synthesised beam on the plot.') -parser.add_argument( - '--png-no-island-labels', - action="store_true", - help='Disable island lables on the png.') -parser.add_argument( - '--png-no-colorbar', - action="store_true", - help='Do not show the colorbar on the png.') -parser.add_argument( - '--ann', - action="store_true", - help='Create a kvis annotation file of the components.') -parser.add_argument( - '--reg', - action="store_true", - help='Create a DS9 region file of the components.') -parser.add_argument( - '--stokesv', - action="store_true", - help='Use Stokes V images and catalogues if available.') -parser.add_argument( - '--quiet', - action="store_true", - help='Turn off non-essential terminal output.') -parser.add_argument( - '--crossmatch-only', - action="store_true", - help='Only run crossmatch, do not generate any fits or png files.') -parser.add_argument( - '--selavy-simple', - action="store_true", - help='Only include flux density and uncertainty in returned table.') -parser.add_argument( - '--process-matches', - action="store_true", - help='Only produce data products for sources that have a selavy match.') -parser.add_argument( - '--debug', - action="store_true", - help='Turn on debug output.') -parser.add_argument( - '--no-background-rms', - action="store_true", - help='Do not estimate the background RMS around each source.') -parser.add_argument( - '--find-fields', - action="store_true", - help='Only return the associated field for each source.') -parser.add_argument( - '--clobber', - action="store_true", - help=("Overwrite the output directory if it already exists.")) - -args = parser.parse_args() - -logger = logging.getLogger() -s = logging.StreamHandler() -fh = logging.FileHandler( - "find_sources_{}.log".format( - runstart.strftime("%Y%m%d_%H:%M:%S"))) -fh.setLevel(logging.DEBUG) -logformat = '[%(asctime)s] - %(levelname)s - %(message)s' - -if use_colorlog: - formatter = colorlog.ColoredFormatter( - "%(log_color)s[%(asctime)s] - %(levelname)s - %(blue)s%(message)s", - datefmt="%Y-%m-%d %H:%M:%S", - reset=True, - log_colors={ - 'DEBUG': 'cyan', - 'INFO': 'green', - 'WARNING': 'yellow', - 'ERROR': 'red', - 'CRITICAL': 'red,bg_white', }, - secondary_log_colors={}, - style='%' - ) -else: - formatter = logging.Formatter(logformat, datefmt="%Y-%m-%d %H:%M:%S") - -s.setFormatter(formatter) -fh.setFormatter(formatter) - -if args.debug: - s.setLevel(logging.DEBUG) -else: - if args.quiet: - s.setLevel(logging.WARNING) - else: - s.setLevel(logging.INFO) - -logger.addHandler(s) -logger.addHandler(fh) -logger.setLevel(logging.DEBUG) - -# Sort out output directory -output_name = args.out_folder -if os.path.isdir(output_name): - if args.clobber: - logger.warning(("Directory {} already exists " - "but clobber selected. " - "Removing current directory." - ).format(output_name)) - shutil.rmtree(output_name) - else: - logger.critical( - ("Requested output directory '{}' already exists! " - "Will not overwrite.").format(output_name)) - logger.critical("Exiting.") - sys.exit() - -logger.info("Creating directory '{}'.".format(output_name)) -os.mkdir(output_name) - -if " " not in args.coords: - logger.info("Loading file {}".format(args.coords)) - # Give explicit check to file existence - user_file = os.path.abspath(args.coords) - if not os.path.isfile(user_file): - logger.critical("{} not found!".format(user_file)) - logger.critical("Exiting.") - sys.exit() - try: - catalog = pd.read_csv(user_file, comment="#") - catalog.columns = map(str.lower, catalog.columns) - if ("ra" not in catalog.columns) or ("dec" not in catalog.columns): - logger.critical("Cannot find one of 'ra' or 'dec' in input file.") - logger.critical("Please check column headers!") - sys.exit() - if "name" not in catalog.columns: - catalog["name"] = [ - "{}_{}".format( - i, j) for i, j in zip( - catalog['ra'], catalog['dec'])] - except Exception as e: - logger.critical("Pandas reading of {} failed!".format(args.coords)) - logger.critical("Check format!") - sys.exit() -else: - catalog_dict = {'ra': [], 'dec': []} - coords = args.coords.split(",") - for i in coords: - ra_str, dec_str = i.split(" ") - catalog_dict['ra'].append(ra_str) - catalog_dict['dec'].append(dec_str) - - if args.source_names != "": - source_names = args.source_names.split(",") - if len(source_names) != len(catalog_dict['ra']): - logger.critical( - "All sources must be named when using '--source-names'.") - logger.critical("Please check inputs.") - sys.exit() - else: - source_names = [ - "{}_{}".format( - i, j) for i, j in zip( - catalog_dict['ra'], catalog_dict['dec'])] - - catalog_dict['name'] = source_names - - catalog = pd.DataFrame.from_dict(catalog_dict) - -catalog['name'] = catalog['name'].astype(str) - -imsize = Angle(args.imsize, unit=u.arcmin) - -max_sep = args.maxsep - -if args.use_tiles: - outfile_prefix = "tile" -else: - outfile_prefix = "combined" - if args.stokesv: - outfile_prefix += "_stokesv" - -crossmatch_radius = Angle(args.crossmatch_radius, unit=u.arcsec) - -if args.stokesv and args.use_tiles: - logger.critical( - "Stokes V can only be used with combined mosaics at the moment.") - logger.critical("Run again but remove the option '--use-tiles'.") - sys.exit() - -racsv = False -if args.stokesv: - stokes_param = "V" -else: - stokes_param = "I" - -FIND_FIELDS = args.find_fields -if FIND_FIELDS: - logger.info("find-fields selected, only outputting field catalogue") - -BASE_FOLDER = args.base_folder - -pilot_epoch = args.vast_pilot -if pilot_epoch == "0": - survey = "racs" - if not BASE_FOLDER: - survey_folder = "RACS/release/racs_v3/" - else: - survey_folder = "racs_v3" - - if stokes_param == "V": - logger.critical( - "Stokes V is currently unavailable for RACS V3. Using V2 instead") - racsv = True -else: - survey = "vast_pilot" - epoch_str = "EPOCH{}".format(RELEASED_EPOCHS[pilot_epoch]) - if not BASE_FOLDER: - survey_folder = "PILOT/release/{}".format(epoch_str) - else: - survey_folder = epoch_str - -if not BASE_FOLDER: - if HOST != HOST_ADA: - logger.critical("Base folder must be specified if not running on ada") - sys.exit() - BASE_FOLDER = "/import/ada1/askap/" - -IMAGE_FOLDER = args.img_folder -if not IMAGE_FOLDER: - if args.use_tiles: - image_dir = "FLD_IMAGES/" - stokes_dir = "stokesI" - else: - image_dir = "COMBINED" - stokes_dir = "STOKES{}_IMAGES".format(stokes_param) - - IMAGE_FOLDER = os.path.join( - BASE_FOLDER, - survey_folder, - image_dir, - stokes_dir) - - if racsv: - IMAGE_FOLDER = ("/import/ada1/askap/RACS/aug2019_reprocessing/" - "COMBINED_MOSAICS/V_mosaic_1.0") - -if not os.path.isdir(IMAGE_FOLDER): - if not FIND_FIELDS: - logger.critical( - "{} does not exist. Only finding fields".format(IMAGE_FOLDER)) - FIND_FIELDS = True - - -SELAVY_FOLDER = args.cat_folder -if not SELAVY_FOLDER: - image_dir = "COMBINED" - selavy_dir = "STOKES{}_SELAVY".format(stokes_param) - - SELAVY_FOLDER = os.path.join( - BASE_FOLDER, - survey_folder, - image_dir, - selavy_dir) - if args.use_tiles: - SELAVY_FOLDER = ("/import/ada1/askap/RACS/aug2019_reprocessing/" - "SELAVY_OUTPUT/stokesI_cat/") - - if racsv: - SELAVY_FOLDER = ("/import/ada1/askap/RACS/aug2019_reprocessing/" - "COMBINED_MOSAICS/racs_catv") - -if not os.path.isdir(SELAVY_FOLDER): - if not FIND_FIELDS: - logger.critical( - "{} does not exist. Only finding fields".format(SELAVY_FOLDER)) - FIND_FIELDS = True - -RMS_FOLDER = args.rms_folder -if not RMS_FOLDER: - if args.use_tiles: - logger.warning( - "Background noise estimates are not supported for tiles.") - logger.warning("Estimating background from mosaics instead.") - image_dir = "COMBINED" - rms_dir = "STOKES{}_RMSMAPS".format(stokes_param) - - RMS_FOLDER = os.path.join( - BASE_FOLDER, - survey_folder, - image_dir, - rms_dir) - - if racsv: - RMS_FOLDER = ("/import/ada1/askap/RACS/aug2019_reprocessing/" - "COMBINED_MOSAICS/V_mosaic_1.0_BANE") - -if not os.path.isdir(RMS_FOLDER): - if not FIND_FIELDS: - logger.critical( - "{} does not exist. Only finding fields".format(RMS_FOLDER)) - FIND_FIELDS = True - -if catalog['ra'].dtype == np.float64: - hms = False - deg = True - -elif ":" in catalog['ra'].iloc[0]: - hms = True - deg = False -else: - deg = True - hms = False - -if hms: - src_coords = SkyCoord( - catalog['ra'], - catalog['dec'], - unit=( - u.hourangle, - u.deg)) -else: - src_coords = SkyCoord(catalog['ra'], catalog['dec'], unit=(u.deg, u.deg)) - -logger.info("Finding fields for {} sources...".format(len(src_coords))) -logger.debug("Using epoch {}".format(pilot_epoch)) -fields = Fields(pilot_epoch) -src_fields, coords_mask = fields.find(src_coords, max_sep, catalog) - -src_coords = src_coords[coords_mask] - -uniq_fields = src_fields['field_name'].unique().tolist() - -if len(uniq_fields) == 0: - logger.error("Source(s) not in Survey!") - sys.exit() - -if FIND_FIELDS: - if survey == "racs": - fields_cat_file = "{}_racs_fields.csv".format(output_name) - else: - fields_cat_file = "{}_VAST_{}_fields.csv".format( - output_name, pilot_epoch) - - fields_cat_file = os.path.join(output_name, fields_cat_file) - fields.write_fields_cat(fields_cat_file) - sys.exit() - -crossmatch_output_check = False - -logger.info("Performing crossmatching for sources, please wait...") - -for uf in uniq_fields: - logger.info("-----------------------------------------------------------") - - mask = src_fields["field_name"] == uf - srcs = src_fields[mask] - indexes = srcs.index - srcs = srcs.reset_index() - field_src_coords = src_coords[mask] - - if survey == "vast_pilot": - fieldname = "{}.{}.{}".format(uf, epoch_str, stokes_param) - else: - fieldname = uf - - image = Image(srcs["sbid"].iloc[0], fieldname, - IMAGE_FOLDER, RMS_FOLDER, pilot_epoch, tiles=args.use_tiles) - - if not args.no_background_rms: - image.get_rms_img() - - for i, row in srcs.iterrows(): - SBID = row['sbid'] - - number = row["original_index"] + 1 - - label = row["name"] - - logger.info("Searching for crossmatch to source {}".format(label)) - - outfile = "{}_{}_{}.fits".format( - label.replace(" ", "_"), fieldname, outfile_prefix) - outfile = os.path.join(output_name, outfile) - - src_coord = field_src_coords[i] - - source = Source( - fieldname, - src_coord, - SBID, - SELAVY_FOLDER, - vast_pilot=pilot_epoch, - tiles=args.use_tiles, - stokesv=args.stokesv) - - source.extract_source(crossmatch_radius, args.stokesv) - if not args.no_background_rms and not image.rms_fail: - source.get_background_rms(image.rms_data, image.rms_wcs) - - if args.process_matches and not source.has_match: - logger.info("Source does not have a selavy match, not " - "continuing processing") - continue - else: - if not args.crossmatch_only and not image.image_fail: - source.make_postagestamp( - image.data, - image.header, - image.wcs, - imsize, - outfile) - - # not ideal but line below has to be run after those above - if source.selavy_fail is False: - source.filter_selavy_components(imsize) - if args.ann: - source.write_ann( - outfile, - crossmatch_overlay=args.crossmatch_radius_overlay) - if args.reg: - source.write_reg( - outfile, - crossmatch_overlay=args.crossmatch_radius_overlay) - else: - logger.error( - "Selavy failed! No region or annotation files " - "will be made if requested.") - - if args.create_png: - if not args.crossmatch_only and not image.image_fail: - if survey == "racs": - png_title = "{} RACS {}".format( - label, - uf.split("_")[-1] - ) - else: - png_title = "{} VAST Pilot {} Epoch {}".format( - label, - uf.split("_")[-1], - pilot_epoch - ) - source.make_png( - args.png_selavy_overlay, - args.png_linear_percentile, - args.png_use_zscale, - args.png_zscale_contrast, - outfile, - image.beam, - no_islands=args.png_no_island_labels, - label=label, - no_colorbar=args.png_no_colorbar, - title=png_title, - crossmatch_overlay=args.crossmatch_radius_overlay, - hide_beam=args.png_hide_beam) - - if not crossmatch_output_check: - crossmatch_output = source.selavy_info - crossmatch_output.index = [indexes[i]] - crossmatch_output_check = True - else: - temp_crossmatch_output = source.selavy_info - temp_crossmatch_output.index = [indexes[i]] - buffer = io.StringIO() - crossmatch_output.info(buf=buffer) - df_info = buffer.getvalue() - logger.debug("Crossmatch df:\n{}".format(df_info)) - buffer = io.StringIO() - source.selavy_info.info(buf=buffer) - df_info = buffer.getvalue() - logger.debug("Selavy info df:\n{}".format(df_info)) - crossmatch_output = crossmatch_output.append( - source.selavy_info, sort=False) - logger.info( - "-----------------------------------------------------------") - -runend = datetime.datetime.now() -runtime = runend - runstart - -logger.info("-----------------------------------------------------------") -logger.info("Summary") -logger.info("-----------------------------------------------------------") -logger.info("Number of sources searched for: {}".format(len(catalog.index))) -logger.info("Number of sources in survey: {}".format(len(src_fields.index))) -logger.info("Number of sources with matches < {} arcsec: {}".format( - crossmatch_radius.arcsec, - len(crossmatch_output[~crossmatch_output["island_id"].isna()].index))) - -logger.info("Processing took {:.1f} minutes.".format(runtime.seconds / 60.)) - -# Create and write final crossmatch csv -if args.selavy_simple: - crossmatch_output = crossmatch_output.filter( - items=["flux_int", "rms_image", "BANE_rms"]) - crossmatch_output = crossmatch_output.rename( - columns={"flux_int": "S_int", "rms_image": "S_err"}) - -final = src_fields.join(crossmatch_output) -output_crossmatch_name = "{}_crossmatch.csv".format(output_name) -output_crossmatch_name = os.path.join(output_name, output_crossmatch_name) -final.to_csv(output_crossmatch_name, index=False) -logger.info("Written {}.".format(output_crossmatch_name)) -logger.info("All results in {}.".format(output_name)) +def parse_args(): + ''' + Parse arguments + + :returns: Argument namespace + :rtype: `argparse.Namespace` + ''' + + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + parser.add_argument( + 'coords', + metavar="\"HH:MM:SS [+/-]DD:MM:SS\" OR input.csv", + type=str, + help=("Right Ascension and Declination in format " + "\"HH:MM:SS [+/-]DD:MM:SS\", in quotes. " + "E.g. \"12:00:00 -20:00:00\". Degrees is also acceptable, " + "e.g. \"12.123 -20.123\". Multiple coordinates are supported " + "by separating with a comma (no space) e.g. " + "\"12.231 -56.56,123.4 +21.3\"." + " Finally you can also enter coordinates using a .csv file." + " See example file for format.")) + + parser.add_argument( + '--vast-pilot', + type=str, + help=("Select the VAST Pilot Epoch to query. Epoch 0 is RACS." + "All available epochs can be queried using " + "\"--vast-pilot=all\""), + default="1") + parser.add_argument( + '--imsize', + type=float, + help='Edge size of the postagestamp in arcmin', + default=30.) + parser.add_argument( + '--maxsep', + type=float, + help='Maximum separation of source from beam centre in degrees.', + default=1.0) + parser.add_argument( + '--out-folder', + type=str, + help='Name of the output directory to place all results in.', + default="find_sources_output_{}".format( + runstart.strftime("%Y%m%d_%H:%M:%S"))) + parser.add_argument( + '--source-names', + type=str, + help=("Only for use when entering coordaintes via the command line. " + "State the name of the source being searched. " + "Use quote marks for names that contain a space. " + "For multiple sources separate with a comma with no " + "space, e.g. \"SN 1994N,SN 2003D,SN 2019A\"."), + default="") + parser.add_argument( + '--crossmatch-radius', + type=float, + help='Crossmatch radius in arcseconds', + default=15.0) + parser.add_argument( + '--crossmatch-radius-overlay', + action="store_true", + help=('A circle is placed on all PNG and region/annotation' + ' files to represent the crossmatch radius.')) + parser.add_argument( + '--use-tiles', + action="store_true", + help='Use the individual tiles instead of combined mosaics.') + parser.add_argument( + '--islands', + action="store_true", + help='Search islands instead of components.') + parser.add_argument( + '--base-folder', + type=str, + help='Path to base folder if using default directory structure') + parser.add_argument( + '--img-folder', + type=str, + help='Path to folder where images are stored') + parser.add_argument( + '--rms-folder', + type=str, + help='Path to folder where image RMS estimates are stored') + parser.add_argument( + '--cat-folder', + type=str, + help='Path to folder where selavy catalogues are stored') + parser.add_argument( + '--create-png', + action="store_true", + help='Create a png of the fits cutout.') + parser.add_argument( + '--png-selavy-overlay', + action="store_true", + help='Overlay selavy components onto the png image.') + parser.add_argument( + '--png-linear-percentile', + type=float, + default=99.9, + help='Choose the percentile level for the png normalisation.') + parser.add_argument( + '--png-use-zscale', + action="store_true", + help='Select ZScale normalisation (default is \'linear\').') + parser.add_argument( + '--png-zscale-contrast', + type=float, + default=0.1, + help='Select contrast to use for zscale.') + parser.add_argument( + '--png-hide-beam', + action="store_true", + help='Select to not show the image synthesised beam on the plot.') + parser.add_argument( + '--png-no-island-labels', + action="store_true", + help='Disable island lables on the png.') + parser.add_argument( + '--png-no-colorbar', + action="store_true", + help='Do not show the colorbar on the png.') + parser.add_argument( + '--ann', + action="store_true", + help='Create a kvis annotation file of the components.') + parser.add_argument( + '--reg', + action="store_true", + help='Create a DS9 region file of the components.') + parser.add_argument( + '--stokesv', + action="store_true", + help='Use Stokes V images and catalogues if available.') + parser.add_argument( + '--quiet', + action="store_true", + help='Turn off non-essential terminal output.') + parser.add_argument( + '--crossmatch-only', + action="store_true", + help='Only run crossmatch, do not generate any fits or png files.') + parser.add_argument( + '--selavy-simple', + action="store_true", + help='Only include flux density and uncertainty in returned table.') + parser.add_argument( + '--process-matches', + action="store_true", + help='Only produce data products for sources with a selavy match.') + parser.add_argument( + '--debug', + action="store_true", + help='Turn on debug output.') + parser.add_argument( + '--no-background-rms', + action="store_true", + help='Do not estimate the background RMS around each source.') + parser.add_argument( + '--find-fields', + action="store_true", + help='Only return the associated field for each source.') + parser.add_argument( + '--clobber', + action="store_true", + help=("Overwrite the output directory if it already exists.")) + parser.add_argument( + '--nice', + type=int, + help='Set nice level.', + default=5) + + args = parser.parse_args() + + return args + + +if __name__ == '__main__': + args = parse_args() + os.nice(args.nice) + + logfile = "find_sources_{}.log".format( + runstart.strftime("%Y%m%d_%H:%M:%S")) + logger = get_logger(args.debug, args.quiet, logfile=logfile) + logger.debug("Available epochs: {}".format(sorted(RELEASED_EPOCHS.keys()))) + + query = Query(args) + query.run_query() + + runend = datetime.datetime.now() + runtime = runend - runstart + logger.info( + "Processing took {:.1f} minutes.".format( + runtime.seconds / 60.)) diff --git a/bin/get_vast_pilot_dbx.py b/bin/get_vast_pilot_dbx.py index 4b6a7dde..abd655ba 100755 --- a/bin/get_vast_pilot_dbx.py +++ b/bin/get_vast_pilot_dbx.py @@ -37,7 +37,8 @@ def filter_files_list( skip_rms_images=False, skip_all_images=False, combined_only=False, - tile_only=False): + tile_only=False, + selected_epochs=None): ''' Filters the file_list to fetch by the users request. @@ -74,6 +75,9 @@ def filter_files_list( :param tile_only: Filter to only tiles products, defaults to False :type tile_only: bool, optional + :param selected_epochs: Filter to only the epoch selected, + defaults to None + :type selected_epochs: str, optional :returns: filtered list of dropbox files :rtype: list ''' @@ -159,6 +163,29 @@ def filter_files_list( filter_df = filter_df[filter_df.file.str.contains("/TILES/")] filter_df.reset_index(drop=True, inplace=True) + if selected_epochs is not None: + logger.debug("Filtering epochs.") + pattern_strings = [] + for i in selected_epochs.split(","): + if i.startswith("0"): + i = i[1:] + if i not in RELEASED_EPOCHS: + logger.warning( + "Epoch '{}' is unknown or not released yet!" + " No files will be found for this selection." + ) + else: + epoch_dbx_format = "/EPOCH{}/".format( + RELEASED_EPOCHS[i]) + pattern_strings.append(epoch_dbx_format) + pattern = "|".join(pattern_strings) + logger.debug("Filtering to {} only.".format( + pattern + )) + filter_df = filter_df[filter_df.file.str.contains( + pattern)] + filter_df.reset_index(drop=True, inplace=True) + final_list = filter_df.file.tolist() return final_list @@ -217,7 +244,11 @@ def filter_files_list( parser.add_argument( '--overwrite', action="store_true", - help='Overwrite any files that already exist in the output directory.') + help=( + "Overwrite any files that already exist in the output directory." + " If overwrite is not selected, integrity checking will still be" + " performed on the existing files and if the check fails, the file" + " will be re-downloaded.")) parser.add_argument( '--debug', @@ -309,6 +340,13 @@ def filter_files_list( action="store_true", help="Only download the combined products.") +parser.add_argument( + '--epochs-only', + type=str, + help=("Only download files from the selected epochs." + " Enter as a list with no spaces, e.g. '1,2,4x'."), + default=None) + args = parser.parse_args() now = datetime.datetime.now() @@ -469,7 +507,8 @@ def filter_files_list( skip_rms_images=args.skip_rms_images, skip_all_images=args.skip_all_images, combined_only=args.combined_only, - tile_only=args.tile_only + tile_only=args.tile_only, + selected_epochs=args.epochs_only ) logger.info( @@ -493,7 +532,7 @@ def filter_files_list( logger.error( "Supplied file '{}' not found!".format(args.find_fields_input)) sys.exit() - fields_df = pd.read_csv(args.find_fields_input) + fields_df = pd.read_csv(args.find_fields_input, comment="#") fields_to_fetch = fields_df.field_name.unique() logger.info("Will download data products of the following fields:") for f in fields_to_fetch: @@ -529,7 +568,8 @@ def filter_files_list( skip_rms_images=args.skip_rms_images, skip_all_images=args.skip_all_images, combined_only=args.combined_only, - tile_only=args.tile_only + tile_only=args.tile_only, + selected_epochs=args.epochs_only ) dirs_to_create = np.unique( @@ -587,7 +627,8 @@ def filter_files_list( skip_rms_images=args.skip_rms_images, skip_all_images=args.skip_all_images, combined_only=args.combined_only, - tile_only=args.tile_only + tile_only=args.tile_only, + selected_epochs=args.epochs_only ) dirs_to_create = np.unique( diff --git a/bin/pilot_fields_info.py b/bin/pilot_fields_info.py new file mode 100755 index 00000000..779920c5 --- /dev/null +++ b/bin/pilot_fields_info.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python + +# Example command: + +# ./build_lightcurves.py outputfolder + +from vasttools.query import FieldQuery +from vasttools.utils import get_logger + +import argparse +import os +import pandas as pd +import datetime +import sys + +runstart = datetime.datetime.now() + + +def parse_args(): + ''' + Parse arguments + + :returns: Argument namespace + :rtype: `argparse.Namespace` + ''' + + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + parser.add_argument( + 'fields', + type=str, + nargs="+", + help='Fields to query (or csv file containing fields).') + parser.add_argument( + '--psf', + action="store_true", + help=( + 'Include the largest PSF of the 36' + ' beams that make up the field.' + )) + parser.add_argument( + '--common-psf', + action="store_true", + help=( + 'Include the common PSF of the 36' + ' beams that make up the field.' + )) + parser.add_argument( + '--all-psf', + action="store_true", + help='Include all the PSF information for the field.') + parser.add_argument( + '--save', + action="store_true", + help=( + "Save the resulting information." + " Files will be saved to the current working directory" + " in the form of 'VAST_XXXX+/-XXA_field_info.csv'." + )) + parser.add_argument( + '--quiet', + action="store_true", + help='Turn off non-essential terminal output.') + parser.add_argument( + '--debug', + action="store_true", + help='Turn on debug output.') + parser.add_argument( + '--nice', + type=int, + help='Set nice level.', + default=5) + + args = parser.parse_args() + + return args + + +def read_fields(fields_file): + fields = pd.read_csv(fields_file, comment='#') + try: + fields = fields.field_name.to_list() + except Exception as e: + logger.error("Could not find column 'field_name' in file.") + fields = [] + return fields + + +if __name__ == '__main__': + args = parse_args() + os.nice(args.nice) + + logfile = "pilot_fields_info_{}.log".format( + runstart.strftime("%Y%m%d_%H:%M:%S")) + logger = get_logger(args.debug, args.quiet, logfile=logfile) + + if len(args.fields) == 1: + file_name = args.fields[0] + if os.path.isfile(file_name): + logger.info("Input file detected - reading file...") + fields = read_fields(file_name) + if len(fields) == 0: + logger.error( + "Failed to read any fields from {}!".format( + file_name + ) + ) + sys.exit() + else: + fields = args.fields + else: + fields = args.fields + + if args.psf and args.common_psf: + logger.warning( + "Both '--psf' and '--common-psf' have been selected." + " Ignoring '--psf' and will display '--common-psf'." + ) + args.psf = False + + logger.info("Will find information for the following fields:") + [logger.info(i) for i in fields] + + for i, field in enumerate(fields): + query = FieldQuery(field) + if i == 0: + query.run_query( + largest_psf=args.psf, + common_psf=args.common_psf, + all_psf=args.all_psf, + save=args.save + ) + try: + pilot_info = query.pilot_info + except Exception as e: + continue + else: + query.run_query( + largest_psf=args.psf, + common_psf=args.common_psf, + all_psf=args.all_psf, + save=args.save, + _pilot_info=pilot_info + ) + + runend = datetime.datetime.now() + runtime = runend - runstart + logger.info( + "Processing took {:.1f} minutes.".format( + runtime.seconds / 60.)) diff --git a/requirements.txt b/requirements.txt index c1ab2232..51f0c0f0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,3 +7,5 @@ colorlog<=4.0.2 dropbox<=9.4.0 tables<=3.6.1 radio_beam>=0.3.1,<0.4 +tabulate>=0.8.6,<0.9 + diff --git a/setup.py b/setup.py index f8c28097..405b7653 100644 --- a/setup.py +++ b/setup.py @@ -20,11 +20,14 @@ "colorlog>=4.0.2,<5.0", "dropbox>=9.4.0,<9.5.0", "tables>=3.6.1,<3.7.0", - "radio_beam>=0.3.1,<0.4" + "radio_beam>=0.3.1,<0.4", + "tabulate>=0.8.6,<0.9" ], scripts=[ "bin/find_sources.py", - "bin/get_vast_pilot_dbx.py" + "bin/get_vast_pilot_dbx.py", + "bin/build_lightcurves.py", + "bin/pilot_fields_info.py" ], include_package_data=True ) diff --git a/vasttools/__init__.py b/vasttools/__init__.py index 13d3df8f..640d72a6 100644 --- a/vasttools/__init__.py +++ b/vasttools/__init__.py @@ -9,4 +9,4 @@ ''' __author__ = 'Dougal Dobie, Adam Stewart' -__version__ = "1.0.1" +__version__ = "1.1.0" diff --git a/vasttools/analysis.py b/vasttools/analysis.py new file mode 100644 index 00000000..2556201b --- /dev/null +++ b/vasttools/analysis.py @@ -0,0 +1,412 @@ +import sys +import numpy as np +import os +import glob +import datetime +import pandas as pd +import warnings + +import logging +import logging.handlers +import logging.config + +import matplotlib +import matplotlib.pyplot as plt + +from astropy.coordinates import Angle +from astropy.coordinates import SkyCoord +from astropy import units as u +from astropy.nddata.utils import Cutout2D +from astropy.coordinates import SkyCoord +from astropy.io import fits +from astropy.wcs import WCS +from astropy.time import Time +from astropy.timeseries import TimeSeries +from astropy.wcs.utils import skycoord_to_pixel +from astropy.utils.exceptions import AstropyWarning, AstropyDeprecationWarning + +from matplotlib.patches import Ellipse +from matplotlib.collections import PatchCollection +from astropy.visualization import ZScaleInterval, ImageNormalize +from astropy.visualization import PercentileInterval +from astropy.visualization import AsymmetricPercentileInterval +from astropy.visualization import LinearStretch +import matplotlib.axes as maxes +import matplotlib.dates as mdates +from mpl_toolkits.axes_grid1 import make_axes_locatable + +from pandas.plotting import register_matplotlib_converters +register_matplotlib_converters() + +matplotlib.pyplot.switch_backend('Agg') + + +class Lightcurve: + ''' + This is a class representation of the lightcurve of a source + + :param name: Name of the source + :type name: str + :param num_obs: Total number of observations + :type num_obs: int + ''' + + def __init__(self, name, num_obs, islands=False): + '''Constructor method + ''' + self.logger = logging.getLogger( + 'vasttools.build_lightcurves.Lightcurve') + self.name = name.strip() + self.islands = islands + self.observations = pd.DataFrame( + columns=[ + 'obs_start', + 'obs_end', + 'S_int', + 'S_err', + 'img_rms', + 'upper_lim'], + index=np.arange( + 0, + num_obs)) + + def add_observation(self, i, row): + ''' + Add a single observation to the lightcurve + + :param i: Observation number (i.e. the row in the observations table) + :type i: int + :param row: Row containing flux measurements, background estimates \ + and observation date + :type row: `pandas.core.series.Series` + ''' + S_int = row['flux_int'] + if self.islands: + S_err = row['background_noise'] + else: + S_err = row['rms_image'] + img_rms = row['SELAVY_rms'] + obs_start = pd.to_datetime(row['obs_date']) + obs_end = pd.to_datetime(row['date_end']) + + if np.isnan(S_int): + self.logger.debug("Observation is a non-detection") + upper_lim = True + else: + self.logger.debug("Observation is a detection") + upper_lim = False + + self.observations.iloc[i] = [ + obs_start, obs_end, S_int, S_err, img_rms, upper_lim] + + def _drop_empty(self): + ''' + Drop empty rows + ''' + + self.observations = self.observations.dropna(how='all') + + def _infer_objects(self): + ''' + Infer the dtype objects of the dataframe. + ''' + + self.observations = self.observations.infer_objects() + + def plot_lightcurve(self, sigma_thresh=5, savefile=None, figsize=(8, 4), + min_points=2, min_detections=1, mjd=False, + grid=False, yaxis_start="auto"): + ''' + Plot source lightcurves and save to file + + :param sigma_thresh: Threshold to use for upper limits, defaults to 5 + :type sigma_thresh: int or float + :param savefile: Filename to save plot, defaults to None + :type savefile: str + :param min_points: Minimum number of points for plotting, defaults to 2 + :type min_points: int, optional + :param min_detections: Minimum number of detections for plotting, \ + defaults to 1 + :type min_detections: int, optional + :param mjd: Plot x-axis in MJD rather than datetime, defaults to False + :type mjd: bool, optional + :param grid: Turn on matplotlib grid, defaults to False + :type grid: bool, optional + ''' + + num_obs = self.observations['obs_start'].count() + num_detections = (~self.observations['upper_lim']).sum() + + if num_obs < min_points: + self.logger.warning( + "Minimum number of data points ({}) not met" + " for {} ({}).".format(min_points, self.name, num_obs) + ) + self.logger.warning("Skipping plot.") + return False + + if num_detections < min_detections: + self.logger.warning( + "Minimum number of detections ({}) not met" + " for {} ({}).".format( + min_detections, self.name, num_detections + ) + ) + self.logger.warning("Skipping plot.") + return False + + plot_date = self.observations['obs_start'] + if mjd: + self.observations['plot_date'] = Time(plot_date.to_numpy()).mjd + else: + self.observations['plot_date'] = plot_date + + fig = plt.figure(figsize=figsize) + ax = fig.add_subplot(111) + plot_title = self.name + if self.islands: + plot_title += " (island)" + ax.set_title(plot_title) + + ax.set_ylabel('Flux Density (mJy)') + + self.logger.debug("Plotting upper limit") + upper_lims = self.observations[ + self.observations.upper_lim + ] + + ax.errorbar( + upper_lims['plot_date'], + sigma_thresh * + upper_lims['img_rms'], + yerr=upper_lims['img_rms'], + uplims=True, + lolims=False, + marker='_', + c='k', + linestyle="none") + + self.logger.debug("Plotting detection") + detections = self.observations[ + ~self.observations.upper_lim + ] + + ax.errorbar( + detections['plot_date'], + detections['S_int'], + yerr=detections['S_err'], + marker='o', + c='k', + linestyle="none") + + if yaxis_start == "0": + max_y = np.max( + detections["S_int"].tolist() + + (sigma_thresh * upper_lims["S_int"]).tolist() + ) + ax.set_ylim( + bottom=0, + top=max_y*1.1 + ) + + if mjd: + ax.set_xlabel('Date (MJD)') + else: + fig.autofmt_xdate() + ax.set_xlabel('Date') + + date_form = mdates.DateFormatter("%Y-%m-%d") + ax.xaxis.set_major_formatter(date_form) + ax.xaxis.set_major_locator(mdates.WeekdayLocator(interval=2)) + + plt.grid(grid) + plt.savefig(savefile) + plt.close() + + return True + + def write_lightcurve(self, savefile, min_points=2): + ''' + Output the lightcurve for processing with external scripts + + :param savefile: Output filename + :type savefile: str + :param min_points: Minimum number of points for plotting, defaults to 2 + :type min_points: int, optional + ''' + + num_obs = self.observations['obs_start'].count() + + if num_obs < min_points: + self.logger.warning( + "Minimum number of data points ({}) not met" + " for {} ({}).".format(min_points, self.name, num_obs) + ) + self.logger.warning("Skipping plot.") + return False + + self.observations.to_csv(savefile, index=False) + + return True + + +class BuildLightcurves: + ''' + This is a class representation of various information about a \ + series of lightcurves. + + :param args: Arguments namespace + :type args: `argparse.Namespace` + ''' + + def __init__(self, args): + '''Constructor method + ''' + + self.logger = logging.getLogger( + 'vasttools.build_lightcurves.BuildLightcurves') + self.args = args + + self.crossmatch_paths = self.build_paths() + + def create_lightcurves(self): + ''' + Create a lightcurve for each source by looping over all \ + observation files + + :return: Dictionary of lightcurve objects + :rtype: dict + ''' + + num_obs = len(self.crossmatch_paths) + self.logger.info( + "Creating lightcurves from {} observations".format(num_obs)) + + lightcurve_dict = {} + for i, path in enumerate(self.crossmatch_paths): + path = os.path.abspath(path) + + if not os.path.isfile(path): + self.logger.critical("{} not found!".format(path)) + sys.exit() + try: + source_list = pd.read_csv(path) + except Exception as e: + self.logger.critical( + "Pandas reading of {} failed!".format(path)) + self.logger.critical("Check format!") + continue + + if i == 0: + if "component_id" in source_list.columns: + self.logger.debug("Component mode.") + self.islands = False + else: + self.logger.debug("Island mode.") + self.islands = True + + for j, row in source_list.iterrows(): + name = row['name'] + if name not in lightcurve_dict.keys(): + lightcurve_dict[name] = Lightcurve( + name, num_obs, islands=self.islands + ) + self.logger.info("Building lightcurve for {}".format(name)) + + lightcurve_dict[name].add_observation(i, row) + + for name in lightcurve_dict.keys(): + lightcurve_dict[name]._drop_empty() + lightcurve_dict[name]._infer_objects() + + self.logger.info("Lightcurve creation complete") + + return lightcurve_dict + + def plot_lightcurves(self, lightcurve_dict, folder=''): + ''' + Plot a lightcurve for each source + + :param lightcurve_dict: + :type lightcurve_dict: dict + ''' + + min_points = self.args.min_points + min_detections = self.args.min_detections + + self.logger.debug( + "mjd: {}" + "; grid: {}".format(self.args.mjd, self.args.grid) + ) + + for name, lightcurve in lightcurve_dict.items(): + savefile = os.path.join(folder, name + '.png') + savefile = savefile.replace(' ', '_') + + success = lightcurve.plot_lightcurve( + savefile=savefile, + min_points=min_points, + min_detections=min_detections, + mjd=self.args.mjd, + grid=self.args.grid, + yaxis_start=self.args.yaxis_start + ) + if success: + self.logger.info( + "Wrote {} lightcurve plot to {}".format( + name, savefile)) + + def write_lightcurves(self, lightcurve_dict, folder=''): + ''' + Plot a lightcurve for each source + + :param lightcurve_dict: + :type lightcurve_dict: dict + ''' + + min_points = self.args.min_points + + for name, lightcurve in lightcurve_dict.items(): + savefile = os.path.join(folder, name + '_lightcurve.csv') + savefile = savefile.replace(' ', '_') + + success = lightcurve.write_lightcurve( + savefile, min_points=min_points + ) + if success: + self.logger.info( + "Wrote {} lightcurve to {}".format( + name, savefile)) + + def build_paths(self): + ''' + Build list of paths to crossmatch files + + :return: list of crossmatch paths + :rtype: list + ''' + + crossmatch_paths = sorted(glob.glob( + os.path.join( + self.args.folder, + '*crossmatch*.csv'))) + self.logger.info( + 'Getting lightcurve info from:\n{}'.format( + '\n'.join(crossmatch_paths))) + + return crossmatch_paths + + def run_query(self): + ''' + Run the query + ''' + + lightcurve_dict = self.create_lightcurves() + + self.logger.info("Writing lightcurves to file") + self.write_lightcurves(lightcurve_dict, folder=self.args.folder) + + if self.args.no_plotting: + self.logger.info("Not plotting lightcurves") + else: + self.plot_lightcurves(lightcurve_dict, folder=self.args.folder) diff --git a/vasttools/data/checksums.h5 b/vasttools/data/checksums.h5 index 63ce3bdaf03f1d17c017d101da3433cb8cc7cb6b..f1dd6621dddee2497deb479a10e28c45bc76e340 100644 GIT binary patch delta 306793 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⋘^kLCoN`;*!D1)57 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

O}kW76+Y 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 bbJU-k{h9V>#-C%$XTEv-8-M@c<7@tZ8I)I$ delta 1671 zcmYk+drVVT90zcE@1^DTc}t-Wps!o{E>NHp3aG^*D07JKm<eTmvkSG_j2!-5%{*-sf?Q$B9X@t zgtNBWsMJz;N=0`inRFtcJjIE;ZPzArXcIU{n?OjHgZDY%#PP}91xfK}`*R}9lZ|g- zXRTuo#TS_?Q3_Vj@h8NiYVJVzHPEJ)DZG zAUR63h!cO|1Bgpkd!TizMhbIc)FM>FRbLdt_dXMYyzy%5XLOK_dQ%Kc_Nm<{)UWkD9BN_*UkKuB{?Ha-1Plq&x@T^5`g36VY1f6-J zVHtFf(B9Y=si9!Mb`>xlZVXB~p#7X6f+o03niMcjY2?sa8qGkLNh5)>$5aA}3u&(w zf^Sr>=)I%Wf_Dxjfwgtf38?U{_P7R36FS+RNah!>wOQbNDU<+{#ub3BoXenw9$h1! z4#xjiG`icbJ2VFx=dvj}x};1-cqoE>twJ;$C5*5Dji(_c-Vve>OTZ#NxT^Y1WQf zPqIHQhC49^2aHD>7_^Ht46csEENwB^fvGe|(Z=@-H+^(aGux!1kih`$@3UqYe-snn zyTh(Rqank9A8jC${U1`*md?%4@GTzGdQYN+U%#UBfm!I_p~ZE{_^Wl(F#=Q{O1`3l z6@Mq^!qsiKCp#1Q5(J~kNj`LjG&WX73OHYGbVL0EN(A-QMgiU}ffVfu82`*Af|5vM z^Llx52@Id)C!w1m<7Ocgj+x#*Y7^)AGGHE)JapoyQMnqP{$zB)cp7eW=OCVwNtv#% zh@3JN(ycM=^ugY4Qx;4MNilfm2?S{BfN3A`)}94JrlJ6ZYh@I=PnwteW=bqH=fHTn zP~IboMf;1*KNLgbT5}eJ`lH1#>JrHyED`e1x!vXm5;_<+yZv8>%-#SrzA(FC$&xs{ zo=Pb1RpNomD2qQY5lf);=p8Ts&Li^^i3`0B!$R9WYGU81Notg~(6YIuwzdNtw+KnnYV7awgf%`apKs zW`na8wpggVCelLLBRPeZRN8LOql2ZhiS_|o*bn~eHcRhcHVVop`^8Aq9=*+iywUd4 zK4{CeJ3v>0kCS(ieg0}Xm@_-KZNR>J&CJ3t?F*sq3T;NMuk7E^a6HCQ3T0J{9tQr9 zNDp749A)sd$Ki$WDu)Cn=E-zWHklZUN>@6X-=TwzEpL9LXl%gor5}AnrPRl+&&hFl zJQ-Cr{>;a7c31g5>G-)TJJ8b^m$qy{LE*a#*7`TrHwPM<>Nlm<;>WtI z^uW4xuB_^8kH?)=