reVX.pras.rev_reeds_pras.PrasAggregation

class PrasAggregation(rev_sc, reeds_build, cf_fpath, pras_file, forecast_fpath=None, build_year=2050, res_class=None, tech_type=None, timezone='US/Central', dset_tag=None, max_workers=None)[source]

Bases: PlexosAggregation

Framework to aggregate reV gen profiles to PRAS zone power profiles and overwrite exisiting pras file with new generation profiles. This class takes as input rev supply curve table, and reeds buildout table (specifying which rev sc points were built and at what capacity). The class will build power profiles for each supply curve point and then aggregate the sc point profiles to the nearest neighbor pras zone. The corresponding zone power profiles in the pras output file will be overwritten with these new aggregated generation profiles.

Examples

>>> from reVX.pras.rev_reeds_pras import PrasAggregation
>>>
>>> rev_supply_curve_file = ...
>>> reeds_build_file = ...
>>> capacity_factor_file = ...
>>> pras_file = ...
>>>
>>> PrasAggregation.run(rev_supply_curve_file, reeds_build_file,
                        capacity_factor_file, pras_file, build_year=2047,
                        tech_type='upv')

This will replace all the pras generation profiles with upv tech in the file pras_file.pras.h5 with aggregated generation profiles from cf_path.h5

>>> reeds_build_files = [...]
>>> capacity_factor_files = [...]
>>> tech_types = ['upv', 'dupv', 'wind-ons', 'wind-ofs']
>>>
>>> PrasAggregation.run(rev_supply_curve_file, reeds_build_files,
                        capacity_factor_files, pras_file, build_year=2047,
                        tech_type=tech_types)

This will run the same routine but for each tech type in tech_types. The files in reeds_build_files and capacity_factor_files have to correspond to the tech type in the tech_types list.

Parameters:
  • rev_sc (str | pd.DataFrame) – reV supply curve results table including SC gid, latitude, longitude, res_gids, gid_counts. Or file path to reV supply curve table.

  • reeds_build (str | pd.DataFrame) – ReEDS buildout with rows for built capacity (MW) at each reV SC point. This should have columns: year, region, class, built_capacity, and sc_gid (corresponding to the reV supply curve point gid). Some cleaning of the column names will be performed for legacy tables but these are the column headers that are desired.

  • cf_fpath (str) – File path to .h5 capacity factor file (reV gen output) to get profiles from.

  • pras_file (str) – File path to existing hdf5 PRAS file (.pras or .h5 extension) which will be amended to include generation data from given resource data. This file must have a ‘generators’ group with ‘_core’ and ‘capacity’ datasets in this group.

  • forecast_fpath (str | None) – Forecasted capacity factor .h5 file path (reV results). If not None, the supply curve res_gids are mapped to sites in the cf_fpath, then the coordinates from cf_fpath are mapped to the nearest neighbor sites in the forecast_fpath, where the final generation profiles are retrieved from.

  • build_year (int, optional) – REEDS year of interest, by default 2050

  • res_class (int | None) – Optional resource class to use to filter supply curve points. For example, if res_class = 3 then only supply curve points with class 3 will be kept in the sc_build table. The corresponds to the ‘class’ column in the reeds_build file.

  • tech_type (str | None) – Pras files will have the tech type in the [‘generation/_core’][‘name’] entry, which is used to select the correct output index

  • timezone (str) – Timezone for output generation profiles. This is a string that will be passed to pytz.timezone() e.g. US/Pacific, US/Mountain, US/Central, US/Eastern, or UTC. For a list of all available timezones, see pytz.all_timezones

  • dset_tag (str) – Dataset tag to append to dataset names in cf profile file. e.g. If the cf profile file is a multi year file using dset_tag=”-2008” will enable us to select the corresponding datasets (cf_mean-2008, cf_profile-2008, etc)

  • max_workers (int | None) – Max workers for parallel profile aggregation. None uses all available workers. 1 will run in serial.

Methods

convert_bespoke_sc(df, gid_column)

Convert a bespoke supply curve table to reference resource gids (res_gids) based on the bespoke generation outputs that are on the supply curve grid not the resource grid

enforce_tech_constraint(meta)

Filter the pras generator meta for the requested technology type and class

export(time_index, profiles)

Export generation profiles to h5 and plexos-formatted csv

get_missing_zones()

Check for zones present in the pras output file which cannot be found in the supply curve zone list

get_pras_classes(pras_file, tech_type)

Get list of tech classes present in the pras file for the requested technology type

get_pras_meta(pras_file)

Get pras 'meta' which describes the tech type and class at each zone For upv and dupv regions are labeled p1, p2, etc.

get_unique_plant_names(table, name_col[, ...])

Get a list of ordered unique plant names

make_profiles()

Make a 2D array of aggregated plexos gen profiles.

qa(profiles)

Simple QA to check original mean/min/max capacity and the mean/min/max capacity for the updated generation profiles

run(rev_sc, reeds_build, cf_fpath, pras_file)

Run pras aggregation and output for the requested tech types.

tz_convert_profiles(profiles, timezone)

Convert profiles to local time and forward/back fill missing data.

Attributes

available_res_gids

Resource gids available in the cf file.

built_capacity

Get the built capacity for all zones found in the pras output file and the reeds build file.

complete_pras_meta

Get pras 'meta' without filtering for tech_type and class

forecast_map

An array mapping the reV "actuals" generation data to forecast data of a different resolution (if input).

found_build_zones

List of sc build zones found in the pras output file for the requested tech and class

found_pras_zones

List of pras zones found in the reeds build out for the requested tech and class

n_plexos_nodes

Get the number of unique plexos nodes in this buildout.

node_map

Nearest neighbor output mapping rev supply curve points to plants or plexos nodes.

plexos_meta

Get plexos node meta data for the nodes included in this problem.

pras_indices

Get the list of pras file indices for the pras zones available in the supply curve zone list.

pras_meta

Get pras 'meta' which describes the tech type and class at each zone

pras_names

Get the list of pras entry names for the pras zones available in the supply curve zone list.

pras_zones

Get list of all available zones in pras output file for the requested tech and class.

sc_build

Get the reV supply curve table reduced to just those points built by reeds including a built_capacity column in MW.

sc_build_indices

Get the list of profile indices corresponding to the sc_build_zones - used to write the new profiles to the pras output.

sc_build_zones

Get the labels for the zones in the zone_map.

sc_res_gids

List of unique resource GIDS in the REEDS build out.

time_index

Get the generation profile time index.

tz_alias

Get a short 3-char tz alias if the timezone is common in the US (pst, mst, cst, est)

zone_index_map

Get the map between zone index and zone label.

classmethod get_pras_meta(pras_file)[source]

Get pras ‘meta’ which describes the tech type and class at each zone For upv and dupv regions are labeled p1, p2, etc. For wind and csp regions are labeled s1, s2, etc.

Parameters:

pras_file (str) – Path to the pras file being overwritten with new generation profiles

Returns:

pd.DataFrame

classmethod get_pras_classes(pras_file, tech_type)[source]

Get list of tech classes present in the pras file for the requested technology type

Parameters:
  • pras_file (str) – Path to the pras file being overwritten with new generation profiles

  • tech_type (str) – Technology type for which profiles are being overwritten

Returns:

List

property zone_index_map

Get the map between zone index and zone label. i.e. zone_index=1, zone_label=p10

property sc_build_zones

Get the labels for the zones in the zone_map. For example, the zone_map might have an index of 1 for the region but this corresponds to the label of p10.

property complete_pras_meta

Get pras ‘meta’ without filtering for tech_type and class

Returns:

pd.DataFrame

property pras_meta

Get pras ‘meta’ which describes the tech type and class at each zone

Returns:

pd.DataFrame

property pras_zones

Get list of all available zones in pras output file for the requested tech and class. For upv and dupv regions are labeled p1, p2, etc. For wind and csp regions are labeled s1, s2, etc.

Returns:

List

property pras_indices

Get the list of pras file indices for the pras zones available in the supply curve zone list.

Returns:

np.ndarray

property pras_names

Get the list of pras entry names for the pras zones available in the supply curve zone list.

Returns:

np.ndarray

property found_pras_zones

List of pras zones found in the reeds build out for the requested tech and class

Returns:

np.ndarray

property found_build_zones

List of sc build zones found in the pras output file for the requested tech and class

Returns:

np.ndarray

property sc_build_indices

Get the list of profile indices corresponding to the sc_build_zones - used to write the new profiles to the pras output.

Returns:

List

property built_capacity

Get the built capacity for all zones found in the pras output file and the reeds build file.

Returns:

np.ndarray

enforce_tech_constraint(meta)[source]

Filter the pras generator meta for the requested technology type and class

Parameters:

meta (pd.DataFrame) – Full pras ‘meta’ without tech_type or class filtering

Returns:

pd.DataFrame – pras meta DataFrame filtered by tech_type and class

get_missing_zones()[source]

Check for zones present in the pras output file which cannot be found in the supply curve zone list

qa(profiles)[source]

Simple QA to check original mean/min/max capacity and the mean/min/max capacity for the updated generation profiles

Parameters:

profiles (np.ndarray) – Generation profile timeseries in MW at each plant / pras zone.

Returns:

new_cap (np.ndarray) – Array containing the updated generation profiles

export(time_index, profiles)[source]

Export generation profiles to h5 and plexos-formatted csv

Parameters:
  • time_index (pd.datetimeindex) – Time index for the profiles.

  • profiles (np.ndarray) – Generation profile timeseries in MW at each plant / pras zone.

classmethod run(rev_sc, reeds_build, cf_fpath, pras_file, forecast_fpath=None, build_year=2050, res_class=None, tech_type=None, timezone='US/Central', dset_tag=None, max_workers=None)[source]

Run pras aggregation and output for the requested tech types. This will aggregate the generation profiles over region specific supply curve points found in rev_sc, after filtering rev_sc for the requested tech type, and resource class. These aggregated generation profiles will then be written to the pras output file in the location corresponding to the region, tech type, and class.

rev_scstr | pd.DataFrame

reV supply curve results table including SC gid, latitude, longitude, res_gids, gid_counts. Or file path to reV supply curve table. If providing a list of tech types this also needs to be a list of the corresponding supply curve files.

reeds_buildstr | pd.DataFrame | list

ReEDS buildout with rows for built capacity (MW) at each reV SC point. This should have columns: reeds_year, built_capacity, and sc_gid (corresponding to the reV supply curve point gid). Some cleaning of the column names will be performed for legacy tables but these are the column headers that are desired. This input can also include “plexos_node_gid” which will explicitly assign a supply curve point buildout to a single pras zone. If included, all points must be assigned to pras zones. If providing a list of tech types this also needs to be a list of the corresponding reeds builout files for each tech type.

cf_fpathstr | list

File path to capacity factor file (reV gen output) to get profiles from. If providing a list of tech types this also needs to be a list of the corresponding capacity factor files.

pras_filestr

File path to existing PRAS file which will be amended to include generation data from given resource data.

forecast_fpathstr | None

Forecasted capacity factor .h5 file path (reV results). If not None, the supply curve res_gids are mapped to sites in the cf_fpath, then the coordinates from cf_fpath are mapped to the nearest neighbor sites in the forecast_fpath, where the final generation profiles are retrieved from.

build_yearint, optional

REEDS year of interest, by default 2050

res_classint | None

Optional resource class to use to filter supply curve points. For example, if res_class = 3 then only supply curve points with class 3 will be kept in the sc_build table. If None then the aggregation will be run for each class found in the pras output file

tech_typestr | list

Tech type for which to overwrite the generation profiles in the pras output file. Pras files will have the tech type in the [‘generation/_core’][‘name’] entry, which is used to select the correct output index

timezonestr

Timezone for output generation profiles. This is a string that will be passed to pytz.timezone() e.g. US/Pacific, US/Mountain, US/Central, US/Eastern, or UTC. For a list of all available timezones, see pytz.all_timezones

dset_tagstr

Dataset tag to append to dataset names in cf profile file. e.g. If the cf profile file is a multi year file using dset_tag=”-2008” will enable us to select the corresponding datasets (cf_mean-2008, cf_profile-2008, etc)

max_workersint | None

Max workers for parallel profile aggregation. None uses all available workers. 1 will run in serial.

property available_res_gids

Resource gids available in the cf file.

Returns:

res_gids (np.ndarray) – Array of resource GIDs available in the cf file.

static convert_bespoke_sc(df, gid_column)

Convert a bespoke supply curve table to reference resource gids (res_gids) based on the bespoke generation outputs that are on the supply curve grid not the resource grid

Parameters:
  • table (pd.DataFrame) – rev_sc and reeds_build inner joined on supply curve gid.

  • gid_column (str) – String to use for sc_gid.

Returns:

table (pd.DataFrame) – Modified so that the “res_gids” points to the supply curve gids in the bespoke file so that the resource generation profiles will be taken based on the bespoke indexing.

property forecast_map

An array mapping the reV “actuals” generation data to forecast data of a different resolution (if input). This is an (n, 1) array where n is the number of “actuals” generation data points. So self.forecast_map[9] yields the forecast index that corresponds to index 9 in the cf_fpath reV generation output.

Returns:

np.ndarray | None

static get_unique_plant_names(table, name_col, tech_tag=None)

Get a list of ordered unique plant names

Parameters:
  • table (pd.DataFrame) – Plexos / plant meta data table where every row is a plant

  • name_col (str) – Column label in table. Exception will be raised if not found.

  • tech_tag (str) – Technology tag to append to plant names like “pv” or “wind”

Returns:

names (list | None) – List of unique plant names

make_profiles()

Make a 2D array of aggregated plexos gen profiles.

Returns:

profiles (np.ndarray) – (t, n) array of Plexos node generation profiles where t is the timeseries length and n is the number of plexos nodes.

property n_plexos_nodes

Get the number of unique plexos nodes in this buildout.

Returns:

n (int) – Number of unique plexos nodes in this buildout

property node_map

Nearest neighbor output mapping rev supply curve points to plants or plexos nodes.

Returns:

np.ndarray

property plexos_meta

Get plexos node meta data for the nodes included in this problem.

Returns:

plexos_meta (pd.DataFrame) – Plexos meta dataframe reduced to the nodes in this problem.

property sc_build

Get the reV supply curve table reduced to just those points built by reeds including a built_capacity column in MW.

Returns:

pd.DataFrame

property sc_res_gids

List of unique resource GIDS in the REEDS build out.

Returns:

sc_res_gids (np.ndarray) – Array of resource GIDs associated with this REEDS buildout.

property time_index

Get the generation profile time index.

Returns:

time_index (pd.Datetimeindex) – Pandas datetime index sourced from the capacity factor data.

property tz_alias

Get a short 3-char tz alias if the timezone is common in the US (pst, mst, cst, est)

Returns:

str

static tz_convert_profiles(profiles, timezone)

Convert profiles to local time and forward/back fill missing data.

Parameters:
  • profiles (np.ndarray) – Profiles of shape (time, n_plants) in UTC

  • timezone (str) – Timezone for output generation profiles. This is a string that will be passed to pytz.timezone() e.g. US/Pacific, US/Mountain, US/Central, US/Eastern, or UTC. For a list of all available timezones, see pytz.all_timezones

Returns:

profiles (np.ndarray) – Profiles of shape (time, n_plants) in timezone