def calc_conifer_credits(project, current_site_scale, current_facres): ''' calculates credits resulting from local-scale uplift only (excluding any site-scale uplift) to reflect uplift from conifer and anthro removal. :param project: an instance of the CreditData class. :param current_site_scale: the scored current site scale dataframe :param current_facres: the current_facres report to compare conifer for the purpose of calculating credits. ''' desktop_results = project.desktop_results projected_ls = project.projected_ls # Create current functional acre report conifer_facres = calc.calc_facres(desktop_results, current_site_scale, projected_ls) # Caculate credits for uplift from conifer removal conifer_credits = calc.calc_credits(project, desktop_results, current_facres, conifer_facres) return conifer_credits
def calc_scenario_credits(scenarios, project, current_facres): ''' calculate functional acres report for each scenario and compares to current functional acres report to calculate credits. :param scenarios: nested dict of scenarios and levels of effort, generated by run_base_scenarios() :param project: an instance of the CreditData class. :param current_facres: the current_facres report to compare scenarios for the purpose of calculating credits. ''' desktop_results = project.desktop_results site_scale_values = project.site_scale_values projected_ls = project.projected_ls credit_reports = {} for scenario_name, scenario_results in scenarios.items(): for effort, projected_values in scenario_results.items(): # Project site-scale values projected_site_scale = calc.project_site_scale( projected_values, site_scale_values) # Score projected site-scale values projected_scores = calc.score_site_scale(project, projected_site_scale) # Create projected functional acre report projected_facres = calc.calc_facres(desktop_results, projected_scores, projected_ls) # Calculate projected credits projected_credits = calc.calc_credits(project, desktop_results, current_facres, projected_facres) # Append scenario name and dataframe to credit_reports dictionary credit_reports[scenario_name + '_' + effort] = projected_credits return credit_reports
def run_scenario_report(project, save_interims=False): ''' returns dataframe with saleable credits per scenario. :param project: an instance of the CreditData class. :param save_interims: if True, the full credit report for each scenario and for the conifer scenario is saved as a csv.''' # read from database site_scale_values = project.site_scale_values current_ls = project.current_ls desktop_results = project.desktop_results # set index of site_scale values for use in run_scenario site_scale_values_indexed = site_scale_values.set_index('map_unit_id') # Get current facres report to streamline comparison with scenarios # Score current site-scale values current_site_scale = calc.score_site_scale(project, site_scale_values) # Create current functional acre report current_facres = calc.calc_facres(desktop_results, current_site_scale, current_ls) # Run scenarios scenarios = run_base_scenarios(site_scale_values_indexed) # Calculate credits for each scenario credit_reports = calc_scenario_credits(scenarios, project, current_facres) # Compile saleable_credits for each scenario into a single dataframe list_of_credit_reports = list( credit_reports.items()) # make list to maintain order first_scenario, first_scenario_report = list_of_credit_reports[0] scenario_report = first_scenario_report[[ 'map_unit_id', 'map_unit_name', 'meadow', 'map_unit_area', 'saleable_credits' ]].copy() scenario_report.rename(columns={'saleable_credits': first_scenario}, inplace=True) for name, data in list_of_credit_reports[1:]: data.rename(columns={'saleable_credits': name}, inplace=True) scenario_report = pd.merge(scenario_report, data[['map_unit_id', name]], how='outer', on='map_unit_id', suffixes=(False, False)) # Calculate credits from conifer alone conifer_credits = calc_conifer_credits(project, current_site_scale, current_facres) # Append to scenario report conifer_report = conifer_credits[['map_unit_id', 'saleable_credits']].copy() conifer_report.rename(columns={'saleable_credits': 'conifer'}, inplace=True) scenario_report = pd.merge(scenario_report, conifer_report, how='outer', on='map_unit_id', suffixes=(False, False)) if save_interims: # Save outputs for name, data in credit_reports.items(): save_name = name + '.csv' calc.save_output(workspace, data, save_name) # Save outputs calc.save_output(workspace, conifer_credits, 'conifer_credits.csv') return scenario_report