def main():
    usage = "Usage: %prog [options]\n"
    usage += "\tCreates an image of the 408 MHz sky (annoted with sources) that includes contours for the MWA primary beam\n"
    usage += "\tThe beam is monochromatic, and is the sum of the XX and YY beams\n"
    usage += "\tThe date/time (UT) and beamformer delays must be specified\n"
    usage += "\tBeamformer delays should be separated by commas\n"
    usage += "\tFrequency is in MHz, or a coarse channel number (can also be comma-separated list)\n"
    usage += "\tDefault is to plot centered on RA=0, but if -r/--racenter, will center on LST\n"
    usage += "\tContours will be plotted at %s of the peak\n" % contourlevels
    usage += "\tExample:\tpython primarybeammap.py -c 98 --beamformer=1,0,0,0,3,3,3,3,6,6,6,6,9,9,9,8 \n\n"

    parser = OptionParser(usage=usage)
    parser.add_option('-c',
                      '--channel',
                      dest='channel',
                      default=None,
                      help='Center channel(s) of observation')
    parser.add_option('-f',
                      '--frequency',
                      dest='frequency',
                      default=None,
                      help='Center frequency(s) of observation [MHz]')
    parser.add_option('-b',
                      '--beamformer',
                      dest='delays',
                      default="0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
                      help='16 beamformer delays separated by commas')
    parser.add_option('-D',
                      '--date',
                      dest='date',
                      default=None,
                      help='UT Date')
    parser.add_option('-t',
                      '--time',
                      dest='time',
                      default=None,
                      help='UT Time')
    parser.add_option('-g', '--gps', dest='gps', default=None, help='GPS time')
    parser.add_option(
        '-m',
        '--model',
        dest='model',
        default='analytic',
        help='beam model: analytic, advanced, full_EE, full_EE_AAVS05')
    parser.add_option(
        '-p',
        '--plottype',
        dest='plottype',
        default='beamsky',
        help='Type of plot: all, beam, sky, beamsky, beamsky_scaled')
    parser.add_option('--title', dest='title', default=None, help='Plot title')
    parser.add_option('-e',
                      '--ext',
                      dest='extension',
                      default='png',
                      help='Plot extension [default=%default]')
    parser.add_option('-r',
                      '--racenter',
                      action="store_true",
                      dest="center",
                      default=False,
                      help="Center on LST?")
    parser.add_option('-s',
                      '--sunline',
                      dest="sunline",
                      default="1",
                      choices=['0', '1'],
                      help="Plot sun [default=%default]")
    parser.add_option('--tle',
                      dest='tle',
                      default=None,
                      help='Satellite TLE file')
    parser.add_option('--duration',
                      dest='duration',
                      default=300,
                      type=int,
                      help='Duration for plotting satellite track')
    parser.add_option('--size',
                      dest='size',
                      default=1000,
                      type=int,
                      help='Resolution of created beam file')
    parser.add_option('--dir',
                      dest='dir',
                      default=None,
                      help='output directory')

    parser.add_option('-v',
                      '--verbose',
                      action="store_true",
                      dest="verbose",
                      default=False,
                      help="Increase verbosity of output")

    (options, args) = parser.parse_args()

    if options.dir is not None:
        mkdir_p(options.dir)

    if options.frequency is not None:
        if (',' in options.frequency):
            try:
                frequency = list(map(float, options.frequency.split(',')))
            except ValueError:
                logger.error("Could not parse frequency %s\n" %
                             options.frequency)
                sys.exit(1)
        else:
            try:
                frequency = float(options.frequency)
            except ValueError:
                logger.error("Could not parse frequency %s\n" %
                             options.frequency)
                sys.exit(1)
    else:
        frequency = options.frequency
    if options.channel is not None:
        if (',' in options.channel):
            try:
                channel = list(map(float, options.channel.split(',')))
            except ValueError:
                logger.error("Could not parse channel %s\n" % options.channel)
                sys.exit(1)
        else:
            try:
                channel = float(options.channel)
            except ValueError:
                logger.error("Could not parse channel %s\n" % options.channel)
                sys.exit(1)
    else:
        channel = options.channel

    if options.delays is not None:
        try:
            if (',' in options.delays):
                delays = list(map(int, options.delays.split(',')))
            else:
                delays = 16 * [int(options.delays)]
        except ValueError:
            logger.error("Could not parse beamformer delays %s\n" %
                         options.delays)
            sys.exit(1)
    else:
        delays = options.delays

    extension = options.extension
    plottype = options.plottype
    model = options.model
    if model not in [
            'analytic', 'advanced', 'full_EE', 'full_EE_AAVS05', '2016',
            '2015', '2014'
    ]:
        logger.error("Model %s not found\n" % model)
        sys.exit(1)
    if plottype not in ['all', 'beam', 'sky', 'beamsky', 'beamsky_scaled']:
        logger.error("Plot type %s not found\n" % plottype)
        sys.exit(1)
    gpsstring = options.gps
    gps = int(gpsstring)

    if (len(delays) < 16):
        logger.error("Must supply 1 or 16 delays\n")
        sys.exit(1)
    if (frequency is None):
        if (channel is not None):
            if (isinstance(channel, list)):
                frequency = list(
                    1.28 * numpy.array(channel)
                )  # multiplication by 1e6 is done later at line Convert to Hz
            else:
                frequency = 1.28 * channel  # multiplication by 1e6 is done later at line Convert to Hz
    if frequency is None:
        logger.error("Must supply frequency or channel\n")
        sys.exit(1)
    if (isinstance(frequency, int) or isinstance(frequency, float)):
        frequency = [frequency]
    frequency = numpy.array(frequency) * 1e6  # Convert to Hz

    for freq in frequency:
        print('frequency', freq)
        result = make_primarybeammap(gps,
                                     delays,
                                     freq,
                                     model=model,
                                     plottype=plottype,
                                     extension=extension,
                                     resolution=options.size,
                                     directory=options.dir)
        if (result is not None):
            print("Wrote %s" % result)
Ejemplo n.º 2
0
            # options.delays=[int(x) for x in options.delays.split(',')]
            print "delays from metafits file %s are %s" % (options.metafits,
                                                           options.delays)
        except Exception, e:
            logger.error('Unable to parse beamformer delays %s: %s' %
                         (options.delays, e))
            sys.exit(1)

    if options.delays is not None:
        try:
            if (',' in options.delays):
                delays = map(int, options.delays.split(','))
            else:
                delays = 16 * [int(options.delays)]
        except ValueError:
            logger.error("Could not parse beamformer delays %s\n" %
                         options.delays)
            sys.exit(1)
    else:
        delays = options.delays

    if options.gps != 0:
        try:
            gps = int(options.gps)
        except ValueError:
            logger.error('Invalid gps parameter %s, must be integer seconds' %
                         options.gps)
            sys.exit(1)
    else:
        if options.metafits is not None:
            logger.warning(
                "Will try to use first 10 digits of the metafits file name %s"
Ejemplo n.º 3
0
def main():
    usage = "Usage: %prog [options]\n"
    usage += "\tCalculates MWA sensitivity for given observing parameters\n"
    usage += "\tCreates an image of the 408 MHz sky (annoted with sources) that includes contours for the MWA primary beam\n"
    usage += "\tThe beam is monochromatic, and is the sum of the XX and YY beams\n"
    usage += "\tThe beamformer delays must be specified\n"
    usage += "\tBeamformer delays should be separated by commas\n"
    usage += "\tFrequency is in MHz, or a coarse channel number (can also be comma-separated list)\n"
    usage += "\tDefault is to plot centered on RA=0, but if -r/--racenter, will center on LST\n"
    usage += "\tContours will be plotted at %s of the peak\n" % contourlevels
    usage += "\tExample:\tpython ./mwa_sensitivity.py -c 145 --model 2016 --pointing_za_deg 5 --pointing_az_deg 0 --antnum=60 --inttime=120 --trcv_type=trcv_from_skymodel_with_err -p all --gridpoint=0\n\n"

    parser = OptionParser(usage=usage)
    #  parser.add_option('-d', '--datetimestring', dest="datetimestring", default=None,
    #                    help="Compute for <DATETIMESTRING> (YYYYMMDDhhmmss)",
    #                    metavar="DATETIMESTRING")
    parser.add_option('-c',
                      '--channel',
                      '--freq_cc',
                      dest='channel',
                      default=None,
                      help='Center channel(s) of observation')
    parser.add_option('-f',
                      '--frequency',
                      '--freq_mhz',
                      dest='frequency',
                      default=None,
                      help='Center frequency(s) of observation [MHz]')
    parser.add_option(
        '-b',
        '--beamformer',
        '--delays',
        dest='delays',
        default="0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
        # default zenith pointing
        help='16 beamformer delays separated by commas')
    parser.add_option('--metafits',
                      dest='metafits',
                      default=None,
                      help="FITS file to get delays from (can be metafits)")
    #  parser.add_option('-D', '--date', dest='date', default=None, help='UT Date')
    #  parser.add_option('-t', '--time', dest='time', default=None, help='UT Time')
    parser.add_option('-g',
                      '--gps',
                      '--obsid',
                      dest='gps',
                      default=0,
                      help='GPS time')
    parser.add_option(
        '-m',
        '--model',
        dest='model',
        default='analytic',
        help=
        'beam model: analytic (2014), advanced (2015), full_EE (2016), full_EE_AAVS05'
    )
    parser.add_option(
        '-p',
        '--plottype',
        dest='plottype',
        default='beamsky',
        help='Type of plot: all, beam, sky, beamsky, beamsky_scaled')
    parser.add_option('--title', dest='title', default=None, help='Plot title')
    parser.add_option('-e',
                      '--ext',
                      dest='extension',
                      default='png',
                      help='Plot extension [default=%default]')
    #    parser.add_option('-r','--racenter',action="store_true",dest="center",default=False,help="Center on LST?")
    parser.add_option('-n',
                      '--no_zenith_norm',
                      action="store_false",
                      dest="zenithnorm",
                      default=True,
                      help="Normalise to zenith (default True)")
    parser.add_option('--size',
                      dest='size',
                      default=1000,
                      type=int,
                      help='Resolution of created beam file')
    parser.add_option('--dir',
                      dest='dir',
                      default=None,
                      help='output directory')
    parser.add_option('--pointing_za_deg',
                      '--za',
                      dest='pointing_za_deg',
                      default=0.00,
                      help='Pointing za [deg]',
                      type=float)
    parser.add_option('--pointing_az_deg',
                      '--az',
                      dest='pointing_az_deg',
                      default=0.00,
                      help='Pointing az [deg]',
                      type=float)
    parser.add_option('--pointing_elev_deg',
                      '--elev',
                      dest='pointing_elev_deg',
                      default=90.00,
                      help='Pointing elevation [deg]',
                      type=float)
    parser.add_option('-r',
                      '--t_rcv',
                      dest='t_rcv',
                      default=0,
                      help='Receiver noise temperature',
                      type=float)
    parser.add_option('--gridpoint',
                      dest='gridpoint',
                      default=-1,
                      help='Gridpoint number',
                      type=int)

    # types :
    #   trcv_angelica_data_vs_time : Use T_rcv from lightcurve fits see RED curve in Ill.25 haslam_vs_angelica.odt for details
    #   trcv_angelica_data_vs_time_powerlawfit : Use T_rcv from lightcurve fit and fit of power law to T_rcv(freq) see RED curve in Ill.24 haslam_vs_angelica.odt for d
    #   trcv_haslam_data_vs_model  : Use T_rcv from data vs. model see GREEN in Ill.25 haslam_vs_angelica.odt for details
    #   trcv_from_skymodel_with_err : Use T_rcv as calculated with errors fitted with curve see eda_lightcurve_and_trcv.odt Ill. 13
    parser.add_option(
        '--trcv_type',
        dest='trcv_type',
        default='trcv_from_skymodel_with_err',
        help=
        "Source of T_rcv possible values = value, lightcurve201612 (default), lightcurve_20160703_cubic, lightcurve_20160703_polfit, budi, data_vs_model_201612, trcv_angelica_data_vs_time, trcv_angelica_data_vs_time_powerlawfit, trcv_from_skymodel_with_err"
    )
    #    parser.add_option('--trcv_type',dest='trcv_type',default='value',help="Source of T_rcv possible values = value, lightcurve201612 (default), lightcurve_20160703_cubic, lightcurve_20160703_polfit, budi, data_vs_model_201612, trcv_angelica_data_vs_time, trcv_angelica_data_vs_time_powerlawfit, trcv_from_skymodel_with_err")

    parser.add_option(
        '--db',
        action="store_true",
        dest="use_db",
        default=False,
        help="Use MWA database to get gridpoint of a given obsID ?")
    parser.add_option('--add_sources',
                      action="store_true",
                      dest="add_sources",
                      default=False,
                      help="Overplot sources on the beam image")
    parser.add_option('-x',
                      '--outsens_file',
                      dest='out_sensitivity_file',
                      default='eda_sensitivity',
                      help='Output filename for sensitivity')

    parser.add_option('-v',
                      '--verbose',
                      action="store_true",
                      dest="verbose",
                      default=False,
                      help="Increase verbosity of output")

    # parameters for sensitivity calculations :
    parser.add_option(
        '-i',
        '--inttime',
        dest='inttime',
        default=120,
        type=float,
        help='Integration time to calculate sensitivity for [default % sec]')
    parser.add_option(
        '--bandwidth',
        dest='bandwidth',
        default=1280000.00,
        type=float,
        help='Bandwidth to calculate sensitivity for [default % Hz]')
    parser.add_option('-a',
                      '--antnum',
                      dest='antnum',
                      default=128,
                      type=int,
                      help='Number of tiles [default %]')

    (options, args) = parser.parse_args()
    #  datetimestring = options.datetimestring

    if options.pointing_elev_deg != 90:
        options.pointing_za_deg = 90 - options.pointing_elev_deg

    if options.dir is not None:
        mkdir_p(options.dir)

    if options.frequency is not None:
        if (',' in options.frequency):
            try:
                frequency = map(float, options.frequency.split(','))
            except ValueError:
                logger.error("Could not parse frequency %s\n" %
                             options.frequency)
                sys.exit(1)
        else:
            try:
                frequency = float(options.frequency)
            except ValueError:
                logger.error("Could not parse frequency %s\n" %
                             options.frequency)
                sys.exit(1)
    else:
        frequency = options.frequency
    if options.channel is not None:
        if (',' in options.channel):
            try:
                channel = map(float, options.channel.split(','))
            except ValueError:
                logger.error("Could not parse channel %s\n" % options.channel)
                sys.exit(1)
        else:
            try:
                channel = float(options.channel)
            except ValueError:
                logger.error("Could not parse channel %s\n" % options.channel)
                sys.exit(1)
    else:
        channel = options.channel

    if options.metafits is not None:
        try:
            f = pyfits.open(options.metafits)
        except Exception, e:
            logger.error('Unable to open FITS file %s: %s' %
                         (options.metafits, e))
            sys.exit(1)
        if 'DELAYS' not in f[0].header.keys():
            logger.error('Cannot find DELAYS in %s' % options.metafits)
            sys.exit(1)
        options.delays = f[0].header['DELAYS']
        try:
            # options.delays=[int(x) for x in options.delays.split(',')]
            print "delays from metafits file %s are %s" % (options.metafits,
                                                           options.delays)
        except Exception, e:
            logger.error('Unable to parse beamformer delays %s: %s' %
                         (options.delays, e))
            sys.exit(1)
Ejemplo n.º 4
0
def main():
    usage = "Usage: %prog [options]\n"
    usage += "\tCalculates MWA sensitivity for given observing parameters\n"
    usage += "\tCreates an image of the 408 MHz sky (annoted with sources) that includes contours for the MWA primary beam\n"
    usage += "\tThe beam is monochromatic, and is the sum of the XX and YY beams\n"
    usage += "\tThe beamformer delays must be specified\n"
    usage += "\tBeamformer delays should be separated by commas\n"
    usage += "\tFrequency is in MHz, or a coarse channel number (can also be comma-separated list)\n"
    usage += "\tDefault is to plot centered on RA=0, but if -r/--racenter, will center on LST\n"
    usage += "\tContours will be plotted at %s of the peak\n" % contourlevels
    usage += "\tExample:\tpython ./mwa_sensitivity.py -c 145 --model 2016 --pointing_za_deg 5 --pointing_az_deg 0 --antnum=60 --inttime=120 --trcv_type=trcv_from_skymodel_with_err -p all --gridpoint=0\n\n"

    parser = OptionParser(usage=usage)
    #  parser.add_option('-d', '--datetimestring', dest="datetimestring", default=None,
    #                    help="Compute for <DATETIMESTRING> (YYYYMMDDhhmmss)",
    #                    metavar="DATETIMESTRING")
    parser.add_option('-c',
                      '--channel',
                      '--freq_cc',
                      dest='channel',
                      default=None,
                      help='Center channel(s) of observation')
    parser.add_option('-f',
                      '--frequency',
                      '--freq_mhz',
                      dest='frequency',
                      default=None,
                      help='Center frequency(s) of observation [MHz]')
    parser.add_option(
        '-b',
        '--beamformer',
        '--delays',
        dest='delays',
        default="0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
        # default zenith pointing
        help='16 beamformer delays separated by commas')
    parser.add_option('--metafits',
                      dest='metafits',
                      default=None,
                      help="FITS file to get delays from (can be metafits)")
    #  parser.add_option('-D', '--date', dest='date', default=None, help='UT Date')
    #  parser.add_option('-t', '--time', dest='time', default=None, help='UT Time')
    parser.add_option('-g',
                      '--gps',
                      '--obsid',
                      dest='gps',
                      default=0,
                      help='GPS time')
    parser.add_option(
        '-m',
        '--model',
        dest='model',
        default='analytic',
        help=
        'beam model: analytic (2014), advanced (2015), full_EE (2016), full_EE_AAVS05'
    )
    parser.add_option(
        '-p',
        '--plottype',
        dest='plottype',
        default='beamsky',
        help='Type of plot: all, beam, sky, beamsky, beamsky_scaled')
    parser.add_option('--title', dest='title', default=None, help='Plot title')
    parser.add_option('-e',
                      '--ext',
                      dest='extension',
                      default='png',
                      help='Plot extension [default=%default]')
    #    parser.add_option('-r','--racenter',action="store_true",dest="center",default=False,help="Center on LST?")
    parser.add_option('-n',
                      '--no_zenith_norm',
                      action="store_false",
                      dest="zenithnorm",
                      default=True,
                      help="Normalise to zenith (default True)")
    parser.add_option('--size',
                      dest='size',
                      default=1000,
                      type=int,
                      help='Resolution of created beam file')
    parser.add_option('--dir',
                      dest='dir',
                      default=None,
                      help='output directory')
    parser.add_option('--pointing_za_deg',
                      '--za',
                      dest='pointing_za_deg',
                      default=0.00,
                      help='Pointing za [deg]',
                      type=float)
    parser.add_option('--pointing_az_deg',
                      '--az',
                      dest='pointing_az_deg',
                      default=0.00,
                      help='Pointing az [deg]',
                      type=float)
    parser.add_option('--pointing_elev_deg',
                      '--elev',
                      dest='pointing_elev_deg',
                      default=90.00,
                      help='Pointing elevation [deg]',
                      type=float)
    parser.add_option('-r',
                      '--t_rcv',
                      dest='t_rcv',
                      default=0,
                      help='Receiver noise temperature',
                      type=float)
    parser.add_option('--gridpoint',
                      dest='gridpoint',
                      default=-1,
                      help='Gridpoint number',
                      type=int)

    # types :
    #   trcv_angelica_data_vs_time : Use T_rcv from lightcurve fits see RED curve in Ill.25 haslam_vs_angelica.odt for details
    #   trcv_angelica_data_vs_time_powerlawfit : Use T_rcv from lightcurve fit and fit of power law to T_rcv(freq) see RED curve in Ill.24 haslam_vs_angelica.odt for d
    #   trcv_haslam_data_vs_model  : Use T_rcv from data vs. model see GREEN in Ill.25 haslam_vs_angelica.odt for details
    #   trcv_from_skymodel_with_err : Use T_rcv as calculated with errors fitted with curve see eda_lightcurve_and_trcv.odt Ill. 13
    parser.add_option(
        '--trcv_type',
        dest='trcv_type',
        default='trcv_from_skymodel_with_err',
        help=
        "Source of T_rcv possible values = value, lightcurve201612 (default), lightcurve_20160703_cubic, lightcurve_20160703_polfit, budi, data_vs_model_201612, trcv_angelica_data_vs_time, trcv_angelica_data_vs_time_powerlawfit, trcv_from_skymodel_with_err"
    )
    #    parser.add_option('--trcv_type',dest='trcv_type',default='value',help="Source of T_rcv possible values = value, lightcurve201612 (default), lightcurve_20160703_cubic, lightcurve_20160703_polfit, budi, data_vs_model_201612, trcv_angelica_data_vs_time, trcv_angelica_data_vs_time_powerlawfit, trcv_from_skymodel_with_err")

    parser.add_option(
        '--db',
        action="store_true",
        dest="use_db",
        default=False,
        help="Use MWA database to get gridpoint of a given obsID ?")
    parser.add_option('--add_sources',
                      action="store_true",
                      dest="add_sources",
                      default=False,
                      help="Overplot sources on the beam image")
    parser.add_option('-x',
                      '--outsens_file',
                      dest='out_sensitivity_file',
                      default='eda_sensitivity',
                      help='Output filename for sensitivity')

    parser.add_option('-v',
                      '--verbose',
                      action="store_true",
                      dest="verbose",
                      default=False,
                      help="Increase verbosity of output")

    # parameters for sensitivity calculations :
    parser.add_option(
        '-i',
        '--inttime',
        dest='inttime',
        default=120,
        type=float,
        help='Integration time to calculate sensitivity for [default % sec]')
    parser.add_option(
        '--bandwidth',
        dest='bandwidth',
        default=1280000.00,
        type=float,
        help='Bandwidth to calculate sensitivity for [default % Hz]')
    parser.add_option('-a',
                      '--antnum',
                      dest='antnum',
                      default=128,
                      type=int,
                      help='Number of tiles [default %]')

    (options, args) = parser.parse_args()
    #  datetimestring = options.datetimestring

    if options.pointing_elev_deg != 90:
        options.pointing_za_deg = 90 - options.pointing_elev_deg

    if options.dir is not None:
        mkdir_p(options.dir)

    if options.frequency is not None:
        if (',' in options.frequency):
            try:
                frequency = list(map(float, options.frequency.split(',')))
            except ValueError:
                logger.error("Could not parse frequency %s\n" %
                             options.frequency)
                sys.exit(1)
        else:
            try:
                frequency = float(options.frequency)
            except ValueError:
                logger.error("Could not parse frequency %s\n" %
                             options.frequency)
                sys.exit(1)
    else:
        frequency = options.frequency
    if options.channel is not None:
        if (',' in options.channel):
            try:
                channel = list(map(float, options.channel.split(',')))
            except ValueError:
                logger.error("Could not parse channel %s\n" % options.channel)
                sys.exit(1)
        else:
            try:
                channel = float(options.channel)
            except ValueError:
                logger.error("Could not parse channel %s\n" % options.channel)
                sys.exit(1)
    else:
        channel = options.channel

    if options.metafits is not None:
        try:
            f = pyfits.open(options.metafits)
        except Exception as e:
            logger.error('Unable to open FITS file %s: %s' %
                         (options.metafits, e))
            sys.exit(1)
        if 'DELAYS' not in list(f[0].header.keys()):
            logger.error('Cannot find DELAYS in %s' % options.metafits)
            sys.exit(1)
        options.delays = f[0].header['DELAYS']
        try:
            # options.delays=[int(x) for x in options.delays.split(',')]
            print("delays from metafits file %s are %s" %
                  (options.metafits, options.delays))
        except Exception as e:
            logger.error('Unable to parse beamformer delays %s: %s' %
                         (options.delays, e))
            sys.exit(1)

    if options.delays is not None:
        try:
            if (',' in options.delays):
                delays = list(map(int, options.delays.split(',')))
            else:
                delays = 16 * [int(options.delays)]
        except ValueError:
            logger.error("Could not parse beamformer delays %s\n" %
                         options.delays)
            sys.exit(1)
    else:
        delays = options.delays

    if options.gps != 0:
        try:
            gps = int(options.gps)
        except ValueError:
            logger.error('Invalid gps parameter %s, must be integer seconds' %
                         options.gps)
            sys.exit(1)
    else:
        if options.metafits is not None:
            logger.warning(
                "Will try to use first 10 digits of the metafits file name %s"
                % options.metafits)
            try:
                gps = int(options.metafits[0:10])
            except ValueError:
                logger.error("Can't parse obsid from metafits file name: %s" %
                             options.metafits)
                sys.exit(1)
        else:
            logger.error(
                "gps seconds not passed as argument, and metafits file not specified, exiting."
            )
            sys.exit(1)

    extension = options.extension
    plottype = options.plottype
    model = options.model
    if model not in [
            'analytic', 'advanced', 'full_EE', 'full_EE_AAVS05', 'FEE',
            'Full_EE', '2016', '2015', '2014'
    ]:
        logger.error("Model %s not found\n" % model)
        sys.exit(1)
    if plottype not in [
            'all', 'beam', 'sky', 'beamsky', 'beamsky_scaled', 'None'
    ]:
        logger.error("Plot type %s not found\n" % plottype)
        sys.exit(1)

    print("########################################")
    print("PARAMETERS :")
    print("########################################")
    print("gridpoint  = %d" % (options.gridpoint))
    print("use db     = %s" % (options.use_db))
    print("T_rcv type = %s" % (options.trcv_type))
    print("########################################")

    #    if (datetimestring is None):
    #        if (datestring is not None and timestring is not None):
    #            datetimestring=datestring.replace('-','') + timestring.replace(':','')
    #    if gpsstring is not None:
    #        try:
    #            mjd,ut=ephem_utils.calcUTGPSseconds(int(gpsstring))
    #        except:
    #            logger.error('Cannot convert gpsstring %s to a date/time' % gpsstring)
    #            sys.exit(1)
    #        yr,mn,dy=ephem_utils.mjd_cal(mjd)
    #        datetimestring=('%04d%02d%02d' % (yr,mn,dy))+ ephem_utils.dec2sexstring(ut,digits=0,roundseconds=1).replace(':','')
    #    if (datetimestring is None):
    #        logger.error("Must supply a date/time\n")
    #        sys.exit(1)
    #    if len(datetimestring) != 14:
    #        logger.error('Format of date/time is YYYYMMDDhhmmss; %s is not valid\n' % datetimestring)
    #        sys.exit(1)

    gridpoint = -1
    if options.use_db:
        if options.gps > 0:
            print(
                "INFO : Reading information from MWA metadata web service ...")
            obs = metadata.get_observation(obsid=options.gps)
            delays = obs['rfstreams']['0']['delays']
            gridpoint = obs['metadata']['gridpoint_number']
    else:
        if options.gridpoint >= 0:
            gridpoint = options.gridpoint
            delays_xy = mwa_sweet_spots.get_delays(gridpoint)
            delays = delays_xy[0]
        print("Using of MWA database is not required")

    print("Pointing information for obsid=%d" % (int(options.gps)))
    print("gridpoint = %d" % (gridpoint))
    print("delays    = %s" % (delays))
    print("Pointing direction to source = (az,za) = (%.8f,%.8f) [deg]" %
          (options.pointing_az_deg, options.pointing_za_deg))
    print("T_rcv     = %.2f K" % (options.t_rcv))

    if (len(delays) < 16):
        logger.error("Must supply 1 or 16 delays\n")
        sys.exit(1)
    if (frequency is None):
        if (channel is not None):
            if (isinstance(channel, list)):
                frequency = list(
                    1.28 * np.array(channel)
                )  # multiplication by 1e6 is done later at line Convert to Hz
            else:
                frequency = 1.28 * channel  # multiplication by 1e6 is done later at line Convert to Hz
    if frequency is None:
        logger.error("Must supply frequency or channel\n")
        sys.exit(1)
    if (isinstance(frequency, int) or isinstance(frequency, float)):
        frequency = [frequency]
    frequency = np.array(frequency) * 1e6  # Convert to Hz

    outfile_sens_XX = options.out_sensitivity_file + "_XX.txt"
    outfile_sens_YY = options.out_sensitivity_file + "_YY.txt"
    f_out_XX = open(outfile_sens_XX, "w")
    f_out_YY = open(outfile_sens_YY, "w")

    # receiver temperature :
    T_rcv = options.t_rcv

    for freq in frequency:
        # ef calculate_sensitivity( freq, delays, trcv_type, T_rcv, size, dir, pointing_az_deg=0, pointing_za_deg=0, add_source=False, zenithnorm=True, antnum=128, inttime=120,  bandwidth=1280000 ) :
        # (T_sys_XX,sens_XX,sefd_XX,noise_XX,T_sys_YY,sens_YY,sefd_YY,noise_YY)
        freq_mhz = freq / 1e6
        (aeff_XX, T_sys_XX, sens_XX, sefd_XX, noise_XX, aeff_YY, T_sys_YY,
         sens_YY, sefd_YY, noise_YY) = calculate_sensitivity(
             freq,
             delays,
             gps,
             options.trcv_type,
             T_rcv,
             options.size,
             options.dir,
             model=model,
             plottype=plottype,
             extension=extension,
             pointing_az_deg=options.pointing_az_deg,
             pointing_za_deg=options.pointing_za_deg,
             add_sources=options.add_sources,
             zenithnorm=options.zenithnorm,
             antnum=options.antnum,
             inttime=options.inttime,
             bandwidth=options.bandwidth)

        out_line_XX = "%.8f %.8f %.2f %.8f %.8f\n" % (freq_mhz, sens_XX,
                                                      T_sys_XX, aeff_XX, T_rcv)
        out_line_YY = "%.8f %.8f %.2f %.8f %.8f\n" % (freq_mhz, sens_YY,
                                                      T_sys_YY, aeff_YY, T_rcv)
        f_out_XX.write(out_line_XX)
        f_out_YY.write(out_line_YY)

    f_out_XX.close()
    f_out_YY.close()