Skip to content
Snippets Groups Projects
Commit 738a8ba8 authored by Jameson Rollins's avatar Jameson Rollins
Browse files

cli: cleanup range calculation argument handling

fix broken parsing (don't calculate range by default) and fix docs
parent ea837c3f
No related branches found
No related tags found
No related merge requests found
......@@ -74,6 +74,9 @@ Trace HDF5 files can also be plotted directly:
$ python3 -m gwinc aLIGO.hdf5
```
The `--range` option can be used to include the values of various
inspiral ranges for the overall noise in the output.
IFO parameters can be manipulated from the command line with the
`--ifo` option:
```shell
......
......@@ -50,17 +50,16 @@ the noise traces and IFO parameters will be saved to an HDF5 file.
If the --range option is specified and the inspiral_range package is
available, various BNS (m1=m2=1.4 M_solar) range figures of merit will
be calculated for the resultant spectrum. The default waveform
parameters can be overriden with the --waveform-parameter/-wp option
(--range implied if specified) e.g.:
parameters can be overriden with the --waveform-parameter/-wp option:
gwinc -wp m1=20 -wp m2=20 ...
gwinc -r -wp m1=20 -wp m2=20 ...
See the inspiral_range package documentation for details.
"""
IFO = 'aLIGO'
FREQ = '5:3000:6000'
RANGE_PARAMS = ['m1=1.4', 'm2=1.4']
RANGE_PARAMS = dict(m1=1.4, m2=1.4)
DATA_SAVE_FORMATS = ['.hdf5', '.h5']
parser = argparse.ArgumentParser(
......@@ -82,11 +81,11 @@ parser.add_argument(
help="plot title")
parser.add_argument(
'--range', '-r', action='store_true',
help="specify inspiral_range parameters, or 'none' to not calculate range")
help="calculate inspiral ranges [m1=m2=1.4]")
parser.add_argument(
'--waveform-parameter', '-wp', metavar='PARAM=VAL[,...]', default=RANGE_PARAMS,
'--waveform-parameter', '-wp', metavar='PARAM=VAL', default=[],
action='append',
help="specify inspiral_range parameters, or 'none' to not calculate range")
help="specify inspiral range parameters (may be specified multiple times)")
group = parser.add_mutually_exclusive_group()
group.add_argument(
'--interactive', '-i', action='store_true',
......@@ -207,35 +206,30 @@ def main():
logger.warning("no display, plotting disabled.")
args.plot = False
if args.waveform_parameter:
args.range = True
if args.range:
try:
import inspiral_range
logger_ir = logging.getLogger('inspiral_range')
logger_ir.setLevel(logger.getEffectiveLevel())
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter('%(name)s: %(message)s'))
logger_ir.addHandler(handler)
except ModuleNotFoundError:
logger.warning("WARNING: inspiral_range package not available, figure of merit will not be calculated.")
args.range = False
if args.range:
range_params = {}
for param in args.waveform_parameter:
if not param:
continue
except ImportError as e:
parser.exit(5, f"ImportError: {e}\n")
logger_ir = logging.getLogger('inspiral_range')
logger_ir.setLevel(logger.getEffectiveLevel())
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter('%(name)s: %(message)s'))
logger_ir.addHandler(handler)
for paramval in args.waveform_parameter:
try:
p, v = param.split('=')
if not v:
param, val = paramval.split('=')
if not val:
raise ValueError
except ValueError:
parser.error("Improper range parameter specification.")
parser.error(f"Improper range parameter specification: {paramval}")
try:
v = float(v)
val = float(val)
except ValueError:
pass
range_params[p] = v
RANGE_PARAMS[param] = val
##########
# main calculations
......@@ -251,7 +245,7 @@ def main():
if args.range:
logger.info("calculating inspiral ranges...")
metrics, H = inspiral_range.all_ranges(freq, trace.psd, **range_params)
metrics, H = inspiral_range.all_ranges(freq, trace.psd, **RANGE_PARAMS)
print(f"{H.params['approximant']} {H.params['m1']}/{H.params['m2']} M_solar:")
for metric, (value, unit) in metrics.items():
if unit is None:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment