Esempio n. 1
0
def night_fractions(length=3660, supersize=False):
    """
    Find the fraction of fields that have a satellite in them
    """

    mjd_start = 59853.8

    mjd_end = mjd_start + length

    mjd_check = np.arange(mjd_start, mjd_end + 0.75, 0.75)

    alm = Almanac(mjd_start=mjd_start)

    sat_tles = starlink_constellation(supersize=supersize)
    constellation = Constellation(sat_tles)

    night_report = alm.get_sunset_info(mjd_start)
    current_night = night_report['night']

    result_fractions = []
    result_mjds = []
    for mjd in mjd_check:
        night_report = alm.get_sunset_info(mjd)
        if night_report['night'] != current_night:
            middle = (night_report['sun_n18_setting'] +
                      night_report['sun_n18_rising']) / 2.
            mjds = [
                night_report['sun_n12_setting'],
                (night_report['sun_n12_setting'] +
                 night_report['sun_n18_setting']) / 2.,
                night_report['sun_n18_setting'], middle - 1. / 24, middle,
                middle + 1. / 24, night_report['sun_n18_rising'],
                (night_report['sun_n12_rising'] +
                 night_report['sun_n18_rising']) / 2.,
                night_report['sun_n12_rising']
            ]
            result = [
                constellation.fields_hit(mjd_in_night, fraction=True)
                for mjd_in_night in mjds
            ]
            result.append(current_night)
            result_fractions.append(result)
            result_mjds.append(mjds)
            text = "\rnight = %i" % current_night
            sys.stdout.write(text)
            sys.stdout.flush

        current_night = night_report['night']
    return result_fractions, result_mjds
def check_pointings(night_max=366,
                    dbfile='twilight_neo_mod2_v1.5_10yrs.db',
                    outfile=None,
                    supersize=False,
                    fivek=False):
    """
    Check each pointing up to night
    """
    extra_fn = ''
    if supersize:
        extra_fn += 'supersize_'
    if fivek:
        extra_fn += 'fivek_'

    conn = sqlite3.connect(dbfile)
    df = pd.read_sql(
        'select observationId, altitude, azimuth, observationStartMJD, night from summaryallprops where night <= %i order by observationId and note="twilight_neo"'
        % night_max, conn)
    conn.close()

    nobs = np.size(df['altitude'])

    names = ['observationId', 'hit']
    types = [int, float]
    hit = np.zeros(nobs, dtype=list(zip(names, types)))

    hit['observationId'] = df['observationStartMJD'].values

    sat_tles = starlink_constellation(supersize=supersize, fivek=fivek)
    constellation = Constellation(sat_tles, tstep=0.1, exptime=1.)

    for i, obs in df.iterrows():
        try:
            hit['hit'][i] = constellation.check_pointing(
                obs['altitude'], obs['azimuth'], obs['observationStartMJD'])
        except ValueError:
            constellation.advance_epoch()
            hit['hit'][i] = constellation.check_pointing(
                obs['altitude'], obs['azimuth'], obs['observationStartMJD'])
        progress = i / nobs * 100
        text = "\rprogress = %.2f%%" % progress

        sys.stdout.write(text)
        sys.stdout.flush

    if outfile is None:
        outfile = 'hit_scale' + extra_fn + dbfile[:-3]
    np.save(outfile, hit)