Source code for exorad.exorad

import logging
import os
import pathlib
import shutil

import matplotlib.pyplot as plt

import exorad.__version__ as version
import exorad.tasks as tasks
from exorad.log import addLogFile
from exorad.log import setLogLevel
from exorad.output.hdf5 import HDF5Output
from exorad.utils.plotter import Plotter

logger = logging.getLogger("exorad")

preparePayload = tasks.PreparePayload()
mergeChannelsOutput = tasks.MergeChannelsOutput()
loadTargetList = tasks.LoadTargetList()
loadSource = tasks.LoadSource()
observeTarget = tasks.ObserveTarget()
observeTargetList = tasks.ObserveTargetlist()


[docs] def efficiency_plot(channels, output_dir=None): table = mergeChannelsOutput(channels=channels) plotter = Plotter(channels=channels, input_table=table) plotter.plot_efficiency() if output_dir is None: plt.show() else: plotter.save_fig( os.path.join(output_dir, "efficiency.png"), efficiency=True ) logger.info("efficiency plot saved in output directory") plt.close()
[docs] def standard_pipeline( options, target_list, output=None, plot=False, full_contrib=False, n_thread=1, debug=False, log=False, replace=True, ): from exorad.utils.ascii_art import ascii_art logger.info(ascii_art) logger.info("code version {}".format(version.__version__)) if debug: setLogLevel(logging.DEBUG) if isinstance(log, str): addLogFile(fname=log) elif log: addLogFile() if output is not None: if replace: if os.path.exists(output): os.remove(output) out_dir = pathlib.Path(output).parent.absolute() if not os.path.exists(out_dir): os.makedirs(out_dir) logger.info("output directory created") logger.info("output directory set as {}".format(out_dir)) try: shutil.copy(options, out_dir) except shutil.SameFileError: pass try: shutil.copy(target_list, out_dir) except shutil.SameFileError: pass else: out_dir = None # step 1 load payload payload, channels, (wl_min, wl_max) = preparePayload( payload_file=options, output=output ) if full_contrib: from astropy.table import hstack for ch in channels: channels[ch].table = hstack( [ channels[ch].table, channels[ch].built_instr["optical_path"]["signal_table"], ] ) channels[ch].table.remove_column("instrument_signal") # step 1b plot payload efficiency if plot: efficiency_plot(channels=channels, output_dir=out_dir) # step 2 load targetlist targets = loadTargetList(target_list=target_list) # step 3 observe targetlist targets = observeTargetList( targets=targets.target, payload=payload, channels=channels, wl_range=(wl_min, wl_max), plot=plot, out_dir=out_dir, n_thread=n_thread, debug=debug, ) # step 4 save to output if output is not None: for target in targets: with HDF5Output(output, append=True) as out: targets[target].write(out)
[docs] def main(): import argparse parser = argparse.ArgumentParser(description="ExoRad {}".format(version)) parser.add_argument( "-p", "--payload", dest="opt", type=str, required=True, help="Input payload description file to pass", ) parser.add_argument( "-t", "--targetList", dest="targetList", type=str, required=True, help="Input target list file to pass", ) parser.add_argument( "-o", "--output", dest="output", type=str, required=False, default=None, help="Output file", ) parser.add_argument( "-c", "--full_contrib", dest="contrib", default=False, required=False, help="produce full contribution output", action="store_true", ) parser.add_argument( "-n", "--nThreads", dest="numberOfThreads", default=1, type=int, required=False, help="number of threads for parallel processing", ) parser.add_argument( "-d", "--debug", dest="debug", default=False, required=False, help="log output on screen", action="store_true", ) parser.add_argument( "-l", "--log", dest="log", default=False, required=False, help="log output on file", action="store_true", ) parser.add_argument( "-P", "--plot", dest="plot", default=False, required=False, help="save target plots", action="store_true", ) args = parser.parse_args() standard_pipeline( options=args.opt, target_list=args.targetList, output=args.output, plot=args.plot, full_contrib=args.contrib, debug=args.debug, n_thread=args.numberOfThreads, log=args.log, )