Source code for bca_tool_code.set_inputs
import pandas as pd
from time import time
from datetime import datetime
from bca_tool_code.set_paths import SetPaths
from bca_tool_code.general_input_modules.input_files import InputFiles
from bca_tool_code.general_input_modules.runtime_options import RuntimeOptions
from bca_tool_code.general_input_modules.general_inputs import GeneralInputs
from bca_tool_code.general_input_modules.deflators import Deflators
from bca_tool_code.general_input_modules.fuel_prices import FuelPrices
from bca_tool_code.general_input_modules.def_prices import DefPrices
from bca_tool_code.general_input_modules.markups import Markups
from bca_tool_code.general_input_modules.warranty import Warranty
from bca_tool_code.general_input_modules.warranty_extended import WarrantyExtended
from bca_tool_code.general_input_modules.warranty_base_costs import BaseWarrantyCosts
from bca_tool_code.general_input_modules.warranty_new_tech_adj_factor import WarrantyNewTechAdj
from bca_tool_code.general_input_modules.useful_life import UsefulLife
from bca_tool_code.general_input_modules.average_speed import AverageSpeed
# from bca_tool_code.general_input_modules.cost_factors import CostFactors
from bca_tool_code.general_input_modules.options import Options
from bca_tool_code.general_input_modules.moves_adjustments import MovesAdjustments
from bca_tool_code.general_modules.vehicle import Vehicle
from bca_tool_code.general_modules.fleet import Fleet
from bca_tool_code.general_modules.estimated_age_at_event import EstimatedAge
from bca_tool_code.general_modules.annual_summary import AnnualSummary
from bca_tool_code.general_input_modules.piece_costs import PieceCosts
from bca_tool_code.general_input_modules.tech_penetrations import TechPenetrations
from bca_tool_code.engine_input_modules.engine_learning_scalers import EngineLearningScalers
from bca_tool_code.operation_input_modules.def_doserates import DefDoseRates
from bca_tool_code.operation_input_modules.orvr_fuelchanges import OrvrFuelChanges
from bca_tool_code.operation_input_modules.repair_and_maintenance import RepairAndMaintenance
from bca_tool_code.operation_input_modules.repair_calc_attribute import RepairCalcAttribute
from bca_tool_code.operation_modules.repair_cost import EmissionRepairCost
from bca_tool_code.cost_calcs import CostCalcs
[docs]class SetInputs:
"""
The SetInputs class establishes the input files to use and other input settings set in the BCA_Inputs file and
needed within the tool.
"""
[docs] def __init__(self):
set_paths = SetPaths()
self.start_time = time()
self.start_time_readable = datetime.now().strftime('%Y%m%d-%H%M%S')
self.runtime_options = RuntimeOptions()
self.runtime_options.init_from_file(
set_paths.path_inputs / 'Runtime_Options.csv'
)
self.input_files = InputFiles()
self.input_files.init_from_file(
set_paths.path_inputs / 'Input_Files.csv'
)
# self.input_files.init_from_file(set_paths.path_inputs / 'TEST_Input_Files.csv')
self.general_inputs = GeneralInputs()
self.general_inputs.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('bca_inputs')
)
# determine what's being run
self.no_action_alt = pd.to_numeric(self.general_inputs.get_attribute_value('no_action_alt'))
self.project_name = self.general_inputs.get_attribute_value('project_name')
self.input_files_pathlist = self.input_files.input_files_pathlist
self.deflators = Deflators()
self.deflators.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('deflators'),
self.general_inputs
)
self.fuel_prices = FuelPrices()
self.fuel_prices.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('fuel_prices'),
self.general_inputs, self.deflators
)
self.def_prices = DefPrices()
self.def_prices.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('def_prices'),
self.general_inputs, self.deflators
)
if self.runtime_options.calc_cap_costs:
self.options = Options()
self.options.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('options')
)
self.techpens = TechPenetrations()
self.techpens.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('techpens'), 'engine_id',
)
self.moves_adj = MovesAdjustments()
self.moves_adj.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('moves_adjustments')
)
self.vehicle = Vehicle()
self.vehicle.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('fleet'),
self.options, adjustments=self.moves_adj
)
self.fleet = Fleet()
self.fleet.create_vehicles(self.no_action_alt, self.options)
self.engine_costs = PieceCosts()
self.engine_costs.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('engine_costs'),
'engine_id', self.general_inputs, self.deflators
)
try:
set_paths.path_inputs / self.input_files.get_filename('replacement_costs')
self.replacement_costs = PieceCosts()
self.replacement_costs.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('replacement_costs'),
'engine_id', self.general_inputs, self.deflators
)
except:
self.replacement_costs = None
self.engine_learning_scalers = EngineLearningScalers()
self.engine_learning_scalers.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('engine_learning_scalers')
)
self.markups = Markups()
self.markups.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('markups')
)
self.warranty = Warranty()
self.warranty.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('warranty')
)
self.warranty_extended = WarrantyExtended()
self.warranty_extended.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('warranty_extended')
)
self.warranty_base_costs = BaseWarrantyCosts()
self.warranty_base_costs.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('base_warranty_costs'),
self.general_inputs, self.deflators
)
try:
set_paths.path_inputs / self.input_files.get_filename('warranty_new_tech_adj_factor')
self.warranty_new_tech_adj = WarrantyNewTechAdj()
self.warranty_new_tech_adj.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('warranty_new_tech_adj_factor'),
)
except:
self.warranty_new_tech_adj = None
self.warranty_cost_approach = self.general_inputs.get_attribute_value('warranty_cost_approach')
self.useful_life = UsefulLife()
self.useful_life.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('useful_life')
)
self.average_speed = AverageSpeed()
self.average_speed.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('average_speed')
)
self.def_doserates = DefDoseRates()
self.def_doserates.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('def_doserates')
)
self.orvr_fuelchanges_cap = OrvrFuelChanges()
self.orvr_fuelchanges_cap.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('orvr_fuelchanges_cap')
)
self.repair_and_maintenance = RepairAndMaintenance()
self.repair_and_maintenance.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('repair_and_maintenance'),
self.general_inputs, self.deflators
)
self.repair_calc_attr = RepairCalcAttribute()
self.repair_calc_attr.init_from_file(
set_paths.path_inputs / self.input_files.get_filename('repair_calc_attribute')
)
self.emission_repair_cost = EmissionRepairCost()
self.estimated_age = EstimatedAge()
self.wtd_def_cpm_dict = dict()
self.wtd_repair_cpm_dict = dict()
self.wtd_cap_fuel_cpm_dict = dict()
self.annual_summary_cap = AnnualSummary()
if self.runtime_options.calc_cap_costs:
# calculate year-over-year engine sales
for vehicle in self.fleet.vehicles_age0:
self.fleet.engine_sales(vehicle)
# calculate year-over-year cumulative engine sales (for use in learning effects)
for vehicle in self.fleet.vehicles_age0:
for start_year in self.engine_costs.standardyear_ids:
self.fleet.cumulative_engine_sales(vehicle, start_year)
self.cost_calcs = CostCalcs()
self.end_time_inputs = time()
self.elapsed_time_inputs = self.end_time_inputs - self.start_time