Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

https://doi.org/10.5281/zenodo.13205851
01 April 2025, 04:01:45 UTC
  • Code
  • Branches (0)
  • Releases (1)
  • Visits
    • Branches
    • Releases
      • 1
      • 1
    • 9d7f3a0
    • /
    • mcsc-impact-climate-Green_Trucking_Analysis-006fd2d
    • /
    • README.md
    Raw File Download

    To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
    Select below a type of object currently browsed in order to display its associated SWHID and permalink.

    • content
    • directory
    • snapshot
    • release
    origin badgecontent badge Iframe embedding
    swh:1:cnt:5fa3010dbd2b3f319e87342ffeafca59909a7d95
    origin badgedirectory badge Iframe embedding
    swh:1:dir:ece7ce65c6912da63b7b2f9e2adf2160481ea7f1
    origin badgesnapshot badge
    swh:1:snp:3043ef9cfe680d1e2c641d6629b9f0aca9a247d0
    origin badgerelease badge
    swh:1:rel:4d932594df9e962cc92f8ae95ba3782ea2273ada

    This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
    Select below a type of object currently browsed in order to generate citations for them.

    • content
    • directory
    • snapshot
    • release
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    README.md
    # Calibration and regional analysis of Green group trucking model
    
    ## Summary
    
    This code updates the electricity costing and EV truck emissions+TCS analyses developed by the Green group with operating parameters obtained from PepsiCo's Tesla Semi pilot in California using data published [here](https://runonless.com/run-on-less-electric-depot-reports/) by NACFE from their 2023 Run On Less pilot. The code used to obtain the operating parameters for the Tesla semi can be found in [this repo](https://github.com/mcsc-impact-climate/PepsiCo_NACFE_Analysis).
    
    Please see [these slides](https://docs.google.com/presentation/d/1l4Rhx-8UHH76ify1ockwKjT68-v6luahxVGwR-wyRJk/edit?usp=sharing) for a summary of methodology and results obtained with this code. 
    
    ## Install dependencies
    
    To install python3 dependencies needed to run the code:
    
    ```bash
    pip install -r requirements.txt
    ```
    
    ## Install input data files
    
    ```bash
    cd data
    
    # Monthly seasonally adjusted consumer price index, obtained from https://fred.stlouisfed.org/series/CPIAUCSL on May 5, 2024
    wget "https://fred.stlouisfed.org/graph/fredgraph.csv?bgcolor=%23e1e9f0&chart_type=line&drp=0&fo=open%20sans&graph_bgcolor=%23ffffff&height=450&mode=fred&recession_bars=on&txtcolor=%23444444&ts=12&tts=12&width=1318&nt=0&thu=0&trc=0&show_legend=yes&show_axis_titles=yes&show_tooltip=yes&id=CPIAUCSL&scale=left&cosd=1947-01-01&coed=2024-03-01&line_color=%234572a7&link_values=false&line_style=solid&mark_type=none&mw=3&lw=2&ost=-99999&oet=99999&mma=0&fml=a&fq=Monthly&fam=avg&fgst=lin&fgsnd=2020-02-01&line_index=1&transformation=lin&vintage_date=2024-05-05&revision_date=2024-05-05&nd=1947-01-01" -O CPIAUCSL.csv
    
    # Historical diesel prices, from https://www.eia.gov/petroleum/gasdiesel/
    wget https://www.eia.gov/petroleum/gasdiesel/xls/psw18vwall.xls
    
    cd ..
    ```
    
    ## Check impact of neglecting road grade with uncalibrated model
    Run [`road_grade_comparison.py`](./source/road_grade_comparison.py) to check the impact of neglecting road grade on results obtained with the original uncalibrated model:
    
    ```bash
    python source/road_grade_comparison.py 
    ```
    
    This will produce `plots/results_comparison_costing.png` and `plots/results_comparison_emissions.png` that compare the original model results with vs. without road grade information. 
    
    ## Check nominal payload distribution and impact of varying model parameters
    
    The code in [`semi_parameter_scans.py`](./source/semi_parameter_scans.py) first evaluates and plots the distribution of best-fitting payloads for the truck model with drag coefficient and frontal area set to the Tesla Semi values of 0.22 and 10.7 m^2. For a single drivecycle (pepsi 1 truck, drivecycle 2), it then performs scans over various model parameters one at a time, evaluating the best-fitting payload at each scan value. The code takes ~15 minutes to run in full (you can comment out unneeded sections to shorten the run time). 
    
    To run:
    
    ```bash
    python source/semi_parameter_scans.py
    ```
    
    This will produce the following:
    * `plots/Evaluated_GVW_Distribution.png`: Box plot showing the distribution of gross vehicle weights (GVWs) corresponding to the fitted payloads for each truck with the scan parameters set to their default values
    * `plots/matching_gvw_vs_max_motor_power.png`: Variation of best-fitting GVW for drivecycle 2 of pepsi 1 truck, with the max motor power allowed to vary. Max motor power is set to the Semi value of 942900 W for subsequent plots.
    * `plots/matching_gvw_vs_combined_eff.png`: Variation of best-fitting GVW for drivecycle 2 of pepsi 1 truck, with the combined powertrain efficiency allowed to vary.
    * `plots/matching_gvw_vs_battery_energy_density.png`: Variation of best-fitting GVW for drivecycle 2 of pepsi 1 truck, with the battery energy density allowed to vary.
    * `plots/matching_gvw_vs_battery_roundtrip_efficiency.png`: Variation of best-fitting GVW for drivecycle 2 of pepsi 1 truck, with the rountrip battery efficiency allowed to vary.
    * `plots/matching_gvw_vs_resistance_coef.png`: Variation of best-fitting GVW for drivecycle 2 of pepsi 1 truck, with the coefficient of rolling resistance allowed to vary.
    
    You can also check out sample payload fits in `plots/truck_model_results_vs_payload_*_drivecycle_*.png`
    
    ## Scan full GVW distributions over combined powertrain efficiency
    
    The code in [`semi_combined_efficiency_scans_full.py`](source/semi_combined_efficiency_scans_full.py) performs a scan over combined powertrain efficiencies, evaluating the fitted GVW over all 20 Tesla Semi drivecycles. By default the rolling resistance is set to 0.0044 for the scan, but it can be modified on [this line](source/semi_combined_efficiency_scans_full.py#L55). The code takes ~10 minutes to run.
    
    To run:
    
    ```bash
    python source/semi_combined_efficiency_scans_full.py
    ```
    
    You can then produce box plots of the resulting GW distributions as a function of combined efficiency by running [`plot_combined_efficiency_scans_full.py`](source/plot_combined_efficiency_scans_full.py):
    
    ```bash
    python source/plot_combined_efficiency_scans_full.py
    ```
    
    The resulting plot can be found in `plots/gvw_dist_vs_combined_eff.png`.
    
    ## Evaluate straight line approximation of fuel economy as a function of payload
    
    Using the Tesla Semi parameters established from the above analysis, the scripts [`evaluate_payload_vs_mileage.py`](source/evaluate_payload_vs_mileage.py) and [`make_payload_vs_mileage_function.py`](source/make_payload_vs_mileage_function.py) use the Green group's model to evaluate the best-fitting payload for each EV drivecycle, then perform a linear fit of fuel economy vs. payload to approximate a linear functional relationship between these two parameters. The code takes ~1 minute to run.
    
    To run:
    
    ```bash
    # Evaluate the best-fitting payload for each EV drivecycle
    python source/evaluate_payload_vs_mileage.py
    
    # Evaluate coefficients for the approximate linear relationship between payload and fuel economy (gal/mile) if the drivecycles were performed by a comparable diesel truck
    python source/evaluate_payload_vs_mileage_diesel.py
    
    # Evaluate the best fit relationships for fuel economy vs. payload
    python source/make_payload_vs_mileage_function.py
    python source/make_payload_vs_mileage_function_diesel.py
    ```
    
    This will produce visualizations of the fits in `plots/payload_vs_mileage_function.png` and `plots/payload_vs_mileage_function_diesel.png`, along with csv files containing the best-fit linear parameters in `tables/payload_vs_mileage_best_fit_params.csv'` and `tables/payload_vs_mileage_linear_coefs_diesel.csv`.
    
    
    ## Lifecycle costing and emissions
    
    ### Evaluate average state diesel prices
    
    Average diesel prices are evaluated for each state using the prior 5 years of historical diesel prices, adjusted by the consumer price index to account for inflation.
    
    To run:
    
    ```bash
    python source/get_diesel_prices_by_state.py
    ```
    
    This will produce an output csv file `tables/average_diesel_price_by_state.csv`.
    
    ### Validation plots
    
    Lifecycle costing and emissions is performed using the tools contained in [`costing_tools.py`](./costing_tools.py), [`emissions_tools.py`](./emissions_tools.py), and [`tco_emissions_tools.py`](./tco_emissions_tools.py). 
    
    Run [`validate_costing_and_emissions_tools.py`](./source/validate_costing_and_emissions_tools.py) to produce validation plots for the costing and emissions code:
    
    ```bash
    python source/validate_costing_and_emissions_tools.py
    ```
    
    This will produce the following plots:
    
    * `plots/VMT_distribution_average_*.png`: Distribution of VMT (annual vehicle miles traeled) with the average VMT specified [here](./source/validate_costing_and_emissions_tools.py#L85).
    * `plots/payload_distribution_average_*lb.png`: Payload distribution, with the average payload specified [here](./source/validate_costing_and_emissions_tools.py#L81).
    * `plots/electricity_unit_price.png`: Electricity unit cost for each year of the truck's life, broken down into its components.
    * `plots/lifecycle_emissions_validation.png`: Validation plot showing the components of evaluated lifecycle emissions for the sample inputs defined in the main() function.
    * `plots/lifecycle_costs_validation.png`: Same validation plot as above, but for lifecycle costs.
    * `plots/grid_emission_intensity_projection_CAMX.png`: Comparison of grid emission intensity for the WECC California balancing authority compared with the average US EIA projection.
    
    ### Evaluating regional costs and emissions
    
    The script [`evaluate_regional_costs_and_emissions.py`](./source/evaluate_regional_costs_and_emissions.py) uses emissions and costing code to evaluate:
    
    * Lifecycle emissions for each US grid balancing authority, based on the authority's reported grid CO2e intensity. 
    * Lifecycle costs for each US state, based on the state's commercial electricity price and average demand charge.
    
    The code reads in geojson files containing the boundaries of these balancing authorities and states, along with data on the associated CO2e intensity, electricity price and demand charge. 
    
    To download the input geojsons into the [`geojsons`](./geojsons) dir:
    
    ```bash
    # From the top level of the repo:
    cd geojsons
    wget https://mcsc-datahub-files.s3.us-west-2.amazonaws.com/geojsons_simplified/egrid2020_subregions_merged.geojson
    wget https://mcsc-datahub-files.s3.us-west-2.amazonaws.com/geojsons_simplified/demand_charges_by_state.geojson 
    wget https://mcsc-datahub-files.s3.us-west-2.amazonaws.com/geojsons_simplified/electricity_rates_by_state_merged.geojson 
    wget https://mcsc-datahub-files.s3.us-west-2.amazonaws.com/geojsons_simplified/diesel_price_by_state.geojson
    cd ..
    ```
    
    To run the code:
    
    ```bash
    python source/evaluate_regional_costs_and_emissions.py
    ```
    
    This will produce two new files in the `geojsons` dir called `geojsons/costs_per_mile.geojson` and `geojsons/emissions_per_mile.geojson`, which contain the evaluated regional lifecycle costs and emissions per mile. It will also produce the following validation plots:
    * `plots/emissions_per_mile.png`: Emissions per mile, broken down into its components, for a few sample balancing authorities
    * `plots/costs_per_mile.png`: Same as above, but costs per mile for a few sample states.
    
    

    back to top

    Software Heritage — Copyright (C) 2015–2025, The Software Heritage developers. License: GNU AGPLv3+.
    The source code of Software Heritage itself is available on our development forge.
    The source code files archived by Software Heritage are available under their own copyright and licenses.
    Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API