示例#1
0
def diagnose(station_ids=None, model_data_path=None):

    manager = Crcm5ModelDataManager(samples_folder_path=model_data_path,
                                    file_name_prefix="pm",
                                    all_files_in_samples_folder=True,
                                    need_cell_manager=True)

    nx, ny = manager.lons2D.shape

    rot_lat_lon = RotatedLatLon(lon1=-68, lat1=52, lon2=16.65, lat2=0.0)

    x00, y00 = rot_lat_lon.toProjectionXY(manager.lons2D[0, 0],
                                          manager.lats2D[0, 0])
    x10, y10 = rot_lat_lon.toProjectionXY(manager.lons2D[1, 0],
                                          manager.lats2D[1, 0])
    x01, y01 = rot_lat_lon.toProjectionXY(manager.lons2D[0, 1],
                                          manager.lats2D[0, 1])

    dx = x10 - x00
    dy = y01 - y00

    print("dx, dy = {0}, {1}".format(dx, dy))
    areas = rot_lat_lon.get_areas_of_gridcells(
        dx, dy, nx, ny, y00, 1)  #1 -since the index is starting from 1
    print(areas[0, 0])

    start_date = datetime(1986, 1, 1)
    end_date = datetime(1986, 12, 31)

    stations = cehq_station.read_station_data(selected_ids=station_ids,
                                              start_date=start_date,
                                              end_date=end_date)

    stations.sort(key=lambda x: x.latitude, reverse=True)

    for i, s in enumerate(stations):

        fig = plt.figure()
        #3 columns
        gs = GridSpec(5,
                      3,
                      hspace=0.2,
                      wspace=0.2,
                      right=0.98,
                      left=0.1,
                      top=0.98)

        model_ts = manager.get_streamflow_timeseries_for_station(
            s, start_date=start_date, end_date=end_date, nneighbours=9)

        print(model_ts.time[0], model_ts.time[-1])

        i_model0, j_model0 = model_ts.metadata["ix"], model_ts.metadata["jy"]
        mask = manager.get_mask_for_cells_upstream(i_model0, j_model0)

        #hydrographs
        ax = fig.add_subplot(gs[0, 0])
        plot_streamflows(ax, s, model_ts)

        #relative error
        ax = fig.add_subplot(gs[1, 0])
        plot_streamflow_re(ax, s, model_ts)

        #directions
        plot_directions_and_positions(fig.add_subplot(gs[:2, 1]),
                                      s,
                                      model_ts,
                                      manager,
                                      rot_lat_lon,
                                      mask=mask)

        #runoff
        ax = fig.add_subplot(gs[2, 0])
        plot_runoff(ax, manager, areas, model_ts, mask=mask)

        #runoff from gldas
        ax = fig.add_subplot(gs[2, 1])
        #plot_gldas_runoff(ax, manager, areas, model_ts, mask = mask)

        #temperature
        ax_temp = fig.add_subplot(gs[3, 0])
        ax_prec = fig.add_subplot(gs[4, 0])

        plot_total_precip_and_temp_re_1d(ax_prec,
                                         ax_temp,
                                         manager,
                                         rot_lat_lon,
                                         areas,
                                         model_ts,
                                         mask=mask)

        #swe timeseries
        ax = fig.add_subplot(gs[3, 1])
        plot_swe_timeseries(ax, manager, areas, model_ts, mask=mask)

        #print np.where(mask == 1)
        print("(i, j) = ({0}, {1})".format(model_ts.metadata["ix"],
                                           model_ts.metadata["jy"]))

        fig.savefig("diagnose_{0}_{1:.2f}deg.pdf".format(s.id, dx))