Esempio n. 1
0
def pickle_warnings(regions, date_from, date_to, pickle_file_name):
    '''All forecasted warnings and problems are selected from regObs or the avalanche api.
    Dangers and problems are connected and neatly pickel'd for later use.

    :param regions:            list [int] RegionID as given in regObs [101-199]
    :param date_from:          string as 'yyyy-mm-dd'
    :param date_to:            string as 'yyyy-mm-dd'
    :param pickle_file_name:   filename including directory as string
    :return:
    '''

    warnings = []

    for r in regions:

        # get all warning and problems for this region and then loop though them joining them where dates match.
        region_warnings = gfa.get_warnings(r, date_from, date_to)
        name = gro.get_forecast_region_name(r)
        problems = gro.get_problems_from_AvalancheWarnProblemV(r, date_from, date_to)

        print 'runmatrix.py -> pickle_warnings: {0} problems found for {1}'.format(len(problems), name)

        for i in range(0, len(region_warnings), 1):
            for j in range(0, len(problems), 1):
                if region_warnings[i].date == problems[j].date:
                    region_warnings[i].add_problem(problems[j])

        warnings += region_warnings

    # make sure all problems are ordered from lowest id (main problem) to largest.
    for w in warnings:
        w.avalanche_problems = sorted(w.avalanche_problems, key=lambda AvalancheProblem: AvalancheProblem.order)

    mp.pickle_anything(warnings, pickle_file_name)
def make_plots_for_region(region_id, problems, dangers, aval_indexes, start_date, end_date):
    """
    This method prepares data for plotting and calls on the plot methods. Pure administration.

    :param region_id:       [int]   Forecast region ID as given in ForecastRegionKDV
    :param start_date:      [string]
    :param end_date:        [string]

    :return:
    """

    region_name = gro.get_forecast_region_name(region_id)

    causes = []  # list of dates and causes
    for p in problems:
        causes.append(AvalanceCause(p.cause_tid, p.date, p.source))

    danger_levels = []
    for d in dangers:
        if d.nick != "drift@svv" and d.danger_level > 0:  # for these plots elrapp wil make noise.
            danger_levels.append(DangerLevel(d.danger_level, d.date, d.source, d))

    # Only data with danger levels are plotted
    if len(danger_levels) is not 0:

        # Danger level histograms
        plot_danger_levels(region_name, start_date, end_date, danger_levels, aval_indexes)

        # Cause horizontal line plots
        if end_date > dt.date(2014, 11, 01) and start_date > dt.date(
            2014, 11, 01
        ):  # Early years dont have this avalanche problem
            plot_causes(region_name, start_date, end_date, causes)

    return
def make_plots_for_region(region_id, problems, dangers, start_date, end_date):
    """
    This method prepares data for plotting and calls on the plot methods. Pure administration.

    :param region_id:       [int]   Forecast region ID as given in ForecastRegionKDV
    :param start_date:      [string]
    :param end_date:        [string]

    :return:
    """

    region_name = gro.get_forecast_region_name(region_id)

    danger_levels = []
    causes = []          # list of dates and causes

    for p in problems:
        causes.append( AvalanceCause(p.cause_tid, p.date, p.source) )

    for d in dangers:
        if d.nick != 'drift@svv' and d.danger_level > 0:
            danger_levels.append( DangerLevel(d.danger_level, d.date, d.source))

    # No data, no plot
    if len(danger_levels) is not 0:
        plot_danger_levels(region_name, start_date, end_date, danger_levels)
        if end_date > dt.date(2014, 11, 01) and start_date > dt.date(2014, 11, 01): # Early years dont have this avalanche problem
            plot_causes(region_name, start_date, end_date, causes)
Esempio n. 4
0
def pickle_warnings(regions, date_from, date_to, pickle_file_name):
    """
    All warnings and problems are selected from regObs or the avalanche api and neatly pickel'd for later use.
    This method also gets all warnings in english for the english main message.

    :param regions:            list []
    :param date_from:          string as 'yyyy-mm-dd'
    :param date_to:            string as 'yyyy-mm-dd'
    :param pickle_file_name:   filename including directory as string

    :return:
    """

    warnings = []

    # get all warning and problems for this region and then loop though them joining them on date
    for r in regions:
        warnings_no = gfa.get_warnings(r, date_from, date_to)
        warnings_en = gfa.get_warnings(r, date_from, date_to, lang_key=2)
        name = gro.get_forecast_region_name(r)
        problems = gro.get_problems_from_AvalancheWarnProblemV(name, r, date_from, date_to)

        print "{0} problems found for {1}".format(len(problems), name)

        # loop trough all the norwegian forecasts
        for i in range(0, len(warnings_no), 1):

            # add problems with same dates
            for j in range(0, len(problems), 1):

                if warnings_no[i].date == problems[j].date:
                    warnings_no[i].add_problem(problems[j])

            # add english main message with same dates
            for k in range(0, len(warnings_en), 1):

                if warnings_no[i].date == warnings_en[k].date:
                    warnings_no[i].set_main_message_en(warnings_en[k].main_message_en)
                    continue

        warnings = warnings + warnings_no

    mp.pickle_anything(warnings, pickle_file_name)