Add 2024 ATB Update Pipeline - #14
Yunzhi-Chen wants to merge 86 commits into
Conversation
Update Links
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…l/ReEDS_Input_Processing into yc/natural_gas_update
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…config.json" This reverts commit 92f0e8b.
…ession/README.md Co-authored-by: Wesley Cole <49044852+wesleyjcole@users.noreply.github.com>
Update AEO preprocessing to pull from AEO2026
This reverts commit c43c67f.
…om AEO directly" This reverts commit 0e86670.
Add natural gas price regression pipeline
Remove highprice and lowprice since AEO 2026 does not have the two scenarios
Update natural gas regression parameters with AEO 2026 data
Fix formatting issues in README.md
bsergi
left a comment
There was a problem hiding this comment.
Thanks Yunzhi for all the hard work on this.
Based on the outputs it seems to work, but my biggest concern is that it is very complex and would be difficult for anyone else to use. A few suggestions:
- Put non-user facing helper scripts in a sub-folder (or if they are few enough, move the user-facing ones up to the root director)
- Simplify some of the input files with lots of columns or text
- Organize the root directory folders (e.g., have one inputs folder with subfolders for historical data or other categories).
- Add more comments to the code to explain what is going on, including function docstrings
- Try to reduce the length of the code
- Consider break up config file into more manageable chunks, with instructions about what settings need to be re-evaluated with a new run.
| @@ -0,0 +1,34 @@ | |||
| { | |||
There was a problem hiding this comment.
Why is this file indented like this? It seems like all the lines could be moved 2 tabs to the left.
There was a problem hiding this comment.
Same comment for the other json files in this folder.
| index; used for wind-ons and upv FOM, whose surveys report a partial-scope | ||
| level but a usable trend. |
There was a problem hiding this comment.
The phrase "whose surveys report a partial-scope level but a usable trend" doesn't make sense to me.
| investment before its own `firstyear`, so the value only needs to be far | ||
| above any real cost (ReEDS's own files use 9999, which is below Vogtle). | ||
| - `atb`, `manual`, `broadcast`: archived ATB estimates, the ReEDS ATB 2024 | ||
| baseline, or the first projection value held flat. |
There was a problem hiding this comment.
By baseline do you mean moderate? And I think it would be better call the broadcast option "backfill".
| `indexed` for O&M), hold the first ATB projection value flat otherwise | ||
| (`broadcast`), and write the ReEDS placeholder before a technology's first | ||
| buildable year (`unavailable`). Archived ATB estimates (`atb`) and the ReEDS | ||
| ATB 2024 baseline (`manual`) remain selectable per metric in `config.yaml`. |
There was a problem hiding this comment.
baseline or moderate? and should it be stuck to 2024 or alter with the ATB being processed? I'm not sure about calling this 'manual' either as that doesn't help understand what is being done.
|
|
||
| The default projection start follows `atb.year - 2`; individual series retain | ||
| their actual start year. Financial cases can be changed in config without | ||
| editing `settings.yaml`. To match `yc/25ATB`, use: |
There was a problem hiding this comment.
should the README be hardcoded with a reference to a branch?
| @@ -0,0 +1,468 @@ | |||
| # yaml-language-server: $schema=./config.schema.json | |||
There was a problem hiding this comment.
I think it would be good to have the config be focused on fields the user is expected to update, with other files provided entries that aren't expected to change. I can't quite tell what in here falls in that category but given how long it is I worry that users won't know what needs to be updated.
| unit: USD/kW | ||
| capacity_basis: AC | ||
| statistic: project | ||
| geography: United States |
| avail_params = atb_data.loc[(atb_data.Technology == tech) | ||
| & (atb_data.Scenario.isin(scenarios)), "Parameter" | ||
| ].unique() | ||
| if args.debug: |
There was a problem hiding this comment.
Is this still relevant or a holdover from earlier code?
|
|
||
| return output.sort_index() | ||
|
|
||
| def add_beccs_techs(tech, settings, df, techcol='i'): |
There was a problem hiding this comment.
We'll probably need to debug this one when testing ATB 2025 for BECCS
| keys = keys if isinstance(keys, tuple) else (keys,) | ||
| labels = dict(zip(['Scenario', *ids], keys)) | ||
| boundary = settings['atb_series_start'][tech].get(keys, smoothing['projection_start_year']) | ||
| series = labels.get(identity, '*') if tech != 'wind-ons' else '*' |
There was a problem hiding this comment.
What's going on here? Why is this specific to wind-ons ?
Summary
Adds a workflow that converts corrected ATB 2024 data into ReEDS-compatible inputs. It downloads, formats, plots, and validates ATB data, fills historical years from an explicitly configured source, optionally smooths future years, and produces before/after plots for review.
Structure
How to run
run_pipeline.pyruns offline against the committed history and never rewrites it. Use--only formatto generate CSVs without plots.To rebuild history from original sources:
python scripts/historical_data_scraper.py # --no-download to rebuild from cacheVerification
With smoothing disabled and all metrics set to
manual, the workflow reproduces the inputs ReEDS uses today. Of 32 files: 21 exact, 8 differing only by floating-point noise (≤1e-9 relative), 3 offshore files differing by up to 0.018% in the CF multiplier, consistent with a different ATB 2024 release than the pinned v3.0.0.Sanity-check plots — smoothing off, manual history, vs current ReEDS:
sanity_check_2024.zip
New ATB 2024 plots for future years:
New ATB 2024 plots and the components:
New ATB 2024 vs current ReEDS 2024:
sanity_check_2024.zip
Scope and open questions
LLM usage
LLM tools assisted with implementation, documentation, debugging, and validation. Outputs were reviewed and tested against the current ReEDS inputs.