{"id":342291,"name":"OpenOA","description":"This library provides a framework for working with large time series data from wind plants, such as SCADA.","url":"https://github.com/natlabrockies/openoa","last_synced_at":"2026-04-07T04:30:15.299Z","repository":{"id":16689436,"uuid":"77166290","full_name":"NatLabRockies/OpenOA","owner":"NatLabRockies","description":"This library provides a framework for assessing wind plant performance using operational assessment (OA) methodologies that consume time series data from wind plants. The goal of the project is to provide an open source implementation of common data structures, analysis methods, and utility functions relevant to wind plant OA.","archived":false,"fork":false,"pushed_at":"2026-01-30T00:49:41.000Z","size":173821,"stargazers_count":237,"open_issues_count":14,"forks_count":110,"subscribers_count":25,"default_branch":"main","last_synced_at":"2026-03-31T01:03:24.140Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://openoa.readthedocs.io/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NatLabRockies.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"contributing.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-12-22T18:16:30.000Z","updated_at":"2026-03-27T20:06:02.000Z","dependencies_parsed_at":"2024-04-13T17:05:01.940Z","dependency_job_id":"9fac1d5a-7bee-4404-9002-2f86183b5e10","html_url":"https://github.com/NatLabRockies/OpenOA","commit_stats":{"total_commits":608,"total_committers":25,"mean_commits":24.32,"dds":0.6957236842105263,"last_synced_commit":"47ca939a632cd73264a0d5faa90dce6a530930ac"},"previous_names":["natlabrockies/openoa","nrel/openoa"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/NatLabRockies/OpenOA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NatLabRockies%2FOpenOA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NatLabRockies%2FOpenOA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NatLabRockies%2FOpenOA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NatLabRockies%2FOpenOA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NatLabRockies","download_url":"https://codeload.github.com/NatLabRockies/OpenOA/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NatLabRockies%2FOpenOA/sbom","scorecard":{"id":98288,"data":{"date":"2025-08-11","repo":{"name":"github.com/NREL/OpenOA","commit":"78ad64f1030250aee18b2db54ee3aa7f642ba775"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Security-Policy","score":4,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Warn: no linked content found","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Code-Review","score":4,"reason":"Found 10/22 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci-tests.yml:1","Warn: no topLevel permission defined: .github/workflows/pypi-publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/pypi-publish.yml:11"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-tests.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/NREL/OpenOA/ci-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-tests.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/NREL/OpenOA/ci-tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-tests.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/NREL/OpenOA/ci-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pypi-publish.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/NREL/OpenOA/pypi-publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pypi-publish.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/NREL/OpenOA/pypi-publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pypi-publish.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/NREL/OpenOA/pypi-publish.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci-tests.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/ci-tests.yml:34","Warn: pipCommand not pinned by hash: .github/workflows/pypi-publish.yml:24","Warn: pipCommand not pinned by hash: .github/workflows/pypi-publish.yml:25","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-15T09:34:10.072Z","repository_id":16689436,"created_at":"2025-08-15T09:34:10.072Z","updated_at":"2025-08-15T09:34:10.072Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31294356,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T01:43:37.129Z","status":"online","status_checked_at":"2026-04-02T02:00:08.535Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"NatLabRockies","name":"National Laboratory of the Rockies","uuid":"1906800","kind":"organization","description":"","email":null,"website":"http://www.nrel.gov","location":"Golden, CO","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1906800?v=4","repositories_count":599,"last_synced_at":"2026-01-22T09:57:55.744Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/NatLabRockies","funding_links":[],"total_stars":9633,"followers":1309,"following":0,"created_at":"2022-11-02T20:42:15.539Z","updated_at":"2026-01-22T09:57:55.745Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NatLabRockies","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NatLabRockies/repositories"},"packages":[],"commits":{"id":11615158,"full_name":"NatLabRockies/OpenOA","default_branch":"master","total_commits":619,"total_committers":26,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":23.807692307692307,"dds":0.7011308562197092,"past_year_total_commits":7,"past_year_total_committers":3,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":2.3333333333333335,"past_year_dds":0.2857142857142857,"last_synced_at":"2026-04-04T03:02:11.368Z","last_synced_commit":"35e8a52c4cd8f43223f8181153d4e3f083f090d2","created_at":"2026-01-22T21:01:07.536Z","updated_at":"2026-04-04T03:01:12.219Z","committers":[{"name":"Jordan Perr-Sauer","email":"jordan.perr-sauer@nrel.gov","login":"jordanperr","count":185},{"name":"Rob Hammond","email":"13874373+RHammond2","login":"RHammond2","count":146},{"name":"Nicola","email":"nicola.bodini@nrel.gov","login":"nbodini","count":118},{"name":"ejsimley","email":"eric.simley@nrel.gov","login":"ejsimley","count":32},{"name":"Mike Optis","email":"mike.optis@nrel.gov","login":null,"count":25},{"name":"Optis","email":"moptis@nrel.gov","login":null,"count":24},{"name":"Rob","email":"robert.hammond@nrel.gov","login":null,"count":17},{"name":"Nathan Agarwal","email":"nathan.agarwal@nrel.gov","login":"nateagarwal","count":17},{"name":"Charles Henderson","email":"charlie@cehenderson.com","login":"Var-Char","count":15},{"name":"sebastianpfaffel","email":"sebastian@pfaffel.eu","login":"sebastianpfaffel","count":5},{"name":"Lee, Joseph","email":"Joseph.Lee@nrel.gov","login":"joejoeyjoseph","count":5},{"name":"Charlie","email":"charlie.plumley@gmail.com","login":"charlie9578","count":4},{"name":"Abiodun Olaoye","email":"abbeylincon2007@yahoo.com","login":"abbey2017","count":4},{"name":"Jason Fields","email":"michael.fields@nrel.gov","login":"Dynorat","count":4},{"name":"Mike Optis","email":"moptis@el2.ib0.cm.hpc.nrel.gov","login":null,"count":4},{"name":"Mike Optis","email":"moptis@el3.ib0.cm.hpc.nrel.gov","login":null,"count":3},{"name":"Optis","email":"moptis@moptis-32012s.nrel.gov","login":null,"count":2},{"name":"Garrett Barter","email":"garrett.barter@nrel.gov","login":"gbarter","count":1},{"name":"Kristen Thyng","email":"kthyng@gmail.com","login":"kthyng","count":1},{"name":"Rafael M Mudafort","email":"rafmudaf@gmail.com","login":"rafmudaf","count":1},{"name":"Sebastian Pfaffel","email":"sebastian.pfaffel@iee.fraunhofer.de","login":null,"count":1},{"name":"Mike Optis","email":"moptis@ed1.ib0.cm.hpc.nrel.gov","login":null,"count":1},{"name":"Caleb","email":"Caleb.Phillips@nrel.gov","login":null,"count":1},{"name":"Will Hobbs","email":"45701090+williamhobbs","login":"williamhobbs","count":1},{"name":"moptis","email":"32751681+moptis","login":"moptis","count":1},{"name":"zheitkamp1","email":"53791791+zheitkamp1","login":"zheitkamp1","count":1}],"past_year_committers":[{"name":"Rob Hammond","email":"13874373+RHammond2","login":"RHammond2","count":5},{"name":"ejsimley","email":"40040961+ejsimley","login":"ejsimley","count":1},{"name":"Garrett Barter","email":"garrett.barter@nrel.gov","login":"gbarter","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/NatLabRockies%2FOpenOA/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-06T00:00:08.903Z","repositories_count":6211373,"commits_count":922180372,"contributors_count":35695556,"owners_count":1143952,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"NatLabRockies/OpenOA","html_url":"https://github.com/NatLabRockies/OpenOA","last_synced_at":"2026-03-29T00:00:37.471Z","status":"active","issues_count":3,"pull_requests_count":1,"avg_time_to_close_issue":2841959.0,"avg_time_to_close_pull_request":null,"issues_closed_count":1,"pull_requests_closed_count":0,"pull_request_authors_count":1,"issue_authors_count":2,"avg_comments_per_issue":1.0,"avg_comments_per_pull_request":1.0,"merged_pull_requests_count":0,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":3,"past_year_pull_requests_count":1,"past_year_avg_time_to_close_issue":2841959.0,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":1.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2026-01-26T21:00:08.576Z","updated_at":"2026-03-29T00:00:37.471Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/NatLabRockies%2FOpenOA","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/NatLabRockies%2FOpenOA/issues","issue_labels_count":{"question":1,"analysis-methods":1},"pull_request_labels_count":{"waiting for revisions":1},"issue_author_associations_count":{"NONE":3},"pull_request_author_associations_count":{"NONE":1},"issue_authors":{"hecv14":2,"bharathrajad":1},"pull_request_authors":{"govindjoshi9":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-02T00:00:07.988Z","repositories_count":14036822,"issues_count":34411009,"pull_requests_count":112524537,"authors_count":11216039,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"question":1,"analysis-methods":1},"past_year_pull_request_labels_count":{"waiting for revisions":1},"past_year_issue_author_associations_count":{"NONE":3},"past_year_pull_request_author_associations_count":{"NONE":1},"past_year_issue_authors":{"hecv14":2,"bharathrajad":1},"past_year_pull_request_authors":{"govindjoshi9":1},"maintainers":[],"active_maintainers":[]},"events":{"total":{"ReleaseEvent":1,"PullRequestEvent":3,"ForkEvent":8,"IssuesEvent":6,"WatchEvent":1,"IssueCommentEvent":1,"PushEvent":8},"last_year":{"ReleaseEvent":1,"PullRequestEvent":3,"ForkEvent":8,"IssuesEvent":6,"WatchEvent":1,"IssueCommentEvent":1,"PushEvent":8}},"keywords":[],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/ci-tests.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T20:30:44.598Z","updated_at":"2023-01-13T20:30:44.598Z","repository_link":"https://github.com/NatLabRockies/OpenOA/blob/main/.github/workflows/ci-tests.yml","dependencies":[{"id":6891369810,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6891369811,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6891369812,"package_name":"codecov/codecov-action","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2023-11-13T07:53:54.043Z","updated_at":"2023-11-13T07:53:54.043Z","repository_link":"https://github.com/NatLabRockies/OpenOA/blob/main/pyproject.toml","dependencies":[]},{"ecosystem":"actions","filepath":".github/workflows/pypi-publish.yml","sha":null,"kind":"manifest","created_at":"2024-04-13T17:04:52.783Z","updated_at":"2024-04-13T17:04:52.783Z","repository_link":"https://github.com/NatLabRockies/OpenOA/blob/main/.github/workflows/pypi-publish.yml","dependencies":[{"id":17399086893,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":17399086894,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":17399086895,"package_name":"pypa/gh-action-pypi-publish","ecosystem":"actions","requirements":"release/v1","direct":true,"kind":"composite","optional":false}]}],"score":8.783549477153265,"created_at":"2026-01-22T00:01:25.471Z","updated_at":"2026-04-07T04:30:15.300Z","avatar_url":"https://github.com/NatLabRockies.png","language":"Jupyter Notebook","category":"Renewable Energy","sub_category":"Wind Energy","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"\u003cimg src=\"https://github.com/NREL/OpenOA/blob/develop/Open%20OA%20Final%20Logos/Color/Open%20OA%20Color%20Transparent%20Background.png?raw=true\" alt=\"OpenOA\" width=\"300\"/\u003e\n\n-----\n\n[![Journal of Open Source Software Badge](https://joss.theoj.org/papers/d635ef3c3784d49f6e81e07a0b35ff6b/status.svg)](https://joss.theoj.org/papers/d635ef3c3784d49f6e81e07a0b35ff6b)\n[![PyPI version](https://badge.fury.io/py/openoa.svg)](https://badge.fury.io/py/openoa)\n[![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)\n[![Gitter Badge](https://badges.gitter.im/NREL_OpenOA/community.svg)](https://gitter.im/NREL_OpenOA/community?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge)\n[![Binder Badge](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/NREL/OpenOA/main?filepath=examples)\n\n[![Documentation Badge](https://readthedocs.org/projects/openoa/badge/?version=latest)](https://openoa.readthedocs.io)\n[![Code Coverage Badge](https://codecov.io/gh/NREL/OpenOA/branch/develop/graph/badge.svg)](https://codecov.io/gh/NREL/OpenOA)\n[![PyPI downloads](https://img.shields.io/pypi/dm/openoa)](https://pypi.org/project/WOMBAT/)\n\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\u0026logoColor=white)](https://github.com/pre-commit/pre-commit)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat\u0026labelColor=ef8336)](https://pycqa.github.io/isort/)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-15-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\n-----\n\n## Software Overview\n\n- Jump to [installation instructions](#installation-and-usage).\n- Demo the code by running the [example notebooks on Binder](https://mybinder.org/v2/gh/NREL/OpenOA/main?filepath=examples).\n- Read the [documentation](https://openoa.readthedocs.io/en/latest/).\n- Learn how to [contribute](contributing.md).\n\nOpenOA [^1] is a software framework written in Python for assessing wind plant performance using\noperational assessment (OA) methodologies that consume time series data from wind plants. The goal\nof the project is to provide an open source implementation of common data structures, analysis\nmethods, and utility functions relevant to wind plant OA, while providing a platform to collaborate\non new functionality.\n\nDevelopment of OpenOA was motivated by the Wind Plant Performance Prediction (WP3) Benchmark project\n[^2], led by the National Renewable Energy Laboratory (NREL), which focuses on quantifying and\nunderstanding differences between the expected and actual energy production of wind plants. To\nsupport the WP3 Benchmark project, OpenOA was initially developed to provide a baseline\nimplementation of a long-term operational annual energy production (AEP) estimation method. It has\nsince grown to incorporate several more OA analysis methods, lower-level utility functions, and a\nschema for time-series data from wind power plants.\n\n\u003e **Warning**\nWarning OpenOA is a research software library and is released under a BSD-3 license. Please refer\nto the accompanying [license file](LICENSE.txt) for the full terms. We encourage caution, use of\nbest practices, and engagement with subject matter experts when performing any data analysis.\n\n\n## Part of the WETO Stack\n\nOpenOA is primarily developed with the support of the U.S. Department of Energy and is part of the [WETO Software Stack](https://nrel.github.io/WETOStack). For more information and other integrated modeling software, see:\n\n- [Portfolio Overview](https://nrel.github.io/WETOStack/portfolio_analysis/overview.html)\n- [Entry Guide](https://nrel.github.io/WETOStack/_static/entry_guide/index.html)\n- [Controls and Analysis Workshop](https://nrel.github.io/WETOStack/workshops/user_workshops_2024.html#wind-farm-controls-and-analysis)\n\n\n### Included Analysis Methods\n\n| Name | Description | Citations |\n| --- | --- | --- |\n| `MonteCarloAEP` | This routine estimates the long-term annual energy production (AEP) of a wind power plant (typically over 10-20 years) based on operational data from a shorter period of record (e.g., 1-3 years), along with the uncertainty. | [^3], [^4] |\n| `TurbineLongTermGrossEnergy`| This routine estimates the long-term turbine ideal energy (TIE) of a wind plant, defined as the long-term AEP that would be generated by the wind plant if all turbines operated normally (i.e., no downtime, derating, or severe underperformance, but still subject to wake losses and moderate performance losses), along with the uncertainty. | [^5] |\n| `ElectricalLosses`| The ElectricalLosses routine estimates the average electrical losses at a wind plant, along with the uncertainty, by comparing the energy produced at the wind turbines to the energy delivered to the grid. | [^5] |\n| `EYAGapAnalysis`| This class is used to perform a gap analysis between the estimated AEP from a pre-construction energy yield estimate (EYA) and the actual AEP. The gap analysis compares different wind plant performance categories to help understand the sources of differences between EYA AEP estimates and actual AEP, specifically availability losses, electrical losses, and TIE. | [^5] |\n| `WakeLosses`| This routine estimates long-term internal wake losses experienced by a wind plant and for each individual turbine, along with the uncertainty. | [^6]. Based in part on approaches in [^7], [^8], [^9], [^10] |\n| `StaticYawMisalignment`| The StaticYawMisalignment routine estimates the static yaw misalignment for individual wind turbines as a function of wind speed by comparing the estimated wind vane angle at which power is maximized to the mean wind vane angle at which the turbines operate. The routine includes uncertainty quantification. **Warning: This method has not been validated using data from wind turbines with known static yaw misalignments and the results should be treated with caution.** | Based in part on approaches in [^11], [^12], [^13], [^14], [^15] |\n\n### PlantData Schema\n\nOpenOA contains a `PlantData` class, which is based on Pandas data frames and provides a\nstandardized base schema to combine raw data from wind turbines, meteorological (met) towers,\nrevenue meters, and reanalysis products, such as MERRA-2 or ERA5. Additionally, the `PlantData`\nclass can perform some basic validation for the data required to perform the operational analyses.\n\n### Utility Functions\n\nLower-level utility modules are provided in the utils subpackage.\nThey can also be used individually to support general wind plant data analysis activities.\nSome examples of utils modules include:\n\n- **Quality Assurance**: This module provides quality assurance methods for identifying potential\n  quality issues with SCADA data prior to importing it into a `PlantData` object.\n- **Filters**: This module provides functions for flagging operational data based on a range of\n  criteria (e.g., outlier detection).\n- **Power Curve**: The power curve module contains methods for fitting power curve models to SCADA data.\n- **Imputing**: This module provides methods for filling in missing data with imputed values.\n- **Met Data Processing**: This module contains methods for processing meteorological data, such as\n  computing air density and wind shear coefficients.\n- **Plotting**: This module contains convenient functions for creating plots, such as power curve\n  plots and maps showing the wind plant layout.\n\nFor further information about the features and citations, please see the\n[OpenOA documentation website](https://openoa.readthedocs.io/en/latest/).\n\n## How to cite OpenOA\n\n**To cite analysis methods or individual features:** Please cite the original authors of these\nmethods, as noted in the [documentation](#included-analysis-methods) and inline comments.\n\n**To cite the open-source software framework as a whole, or the OpenOA open source development\neffort more broadly,** please use citation [^1], which is provided below in BibTeX:\n\n```bibtex\n   @article{Perr-Sauer2021,\n      doi = {10.21105/joss.02171},\n      url = {https://doi.org/10.21105/joss.02171},\n      year = {2021},\n      publisher = {The Open Journal},\n      volume = {6},\n      number = {58},\n      pages = {2171},\n      author = {Jordan Perr-Sauer and Mike Optis and Jason M. Fields and Nicola Bodini and Joseph C.Y. Lee and Austin Todd and Eric Simley and Robert Hammond and Caleb Phillips and Monte Lunacek and Travis Kemper and Lindy Williams and Anna Craig and Nathan Agarwal and Shawn Sheng and John Meissner},\n      title = {OpenOA: An Open-Source Codebase For Operational Analysis of Wind Farms},\n      journal = {Journal of Open Source Software}\n   }\n```\n\n## Installation and Usage\n\n### Requirements\n\n- Python 3.9-3.12 with pip.\n\nWe strongly recommend using the Anaconda Python distribution and creating a new conda environment\nfor OpenOA. You can download Anaconda through\n[their website.](https://www.anaconda.com/products/individual)\n\n\u003e [!IMPORTANT]\n\u003e In 2020, Anaconda has changed the Terms of Service for its commercial distribution, and so it is\n\u003e recommended to use either [Miniforge Conda](https://github.com/conda-forge/miniforge), which\n\u003e uses a BSD-3 clause license, or\n\u003e [Miniconda](https://docs.anaconda.com/free/miniconda/index.html), the free tier of Anaconda,\n\u003e depending on your organization's considerations.\n\nAfter installing Anaconda (or alternative), create and activate a new conda environment with the\nname \"openoa-env\":\n\n```bash\nconda create --name openoa-env python=3.10\nconda activate openoa-env\n```\n\n### Installation\n\nClone the repository and install the library and its dependencies using pip:\n\n```bash\ngit clone https://github.com/NREL/OpenOA.git\ncd OpenOA\npip install .\n```\n\nYou should now be able to import OpenOA from the Python interpreter:\n\n```bash\npython\n\u003e\u003e\u003e import openoa\n\u003e\u003e\u003e openoa.__version__\n```\n\n#### Installation Options\n\nThere are a number of installation options that can be used, depending on the use case, which can be\ninstalled with the following pattern `pip install \"openoa[opt1,opt2]\"` (`pip install .[opt1,opt2]`\nis also allowed).\n\n- `develop`: for linting, automated formatting, and testing\n- `docs`: for building the documentation\n- `examples`: for the full Jupyter Lab suite (also contains `reanalysis` and `nrel-wind`)\n- `reanalysis`: for accessing and processing MERRA2 and ERA5 data\n- `nrel-wind`: for accessing the NREL WIND Toolkit\n- `all`: for the complete dependency stack\n\n#### Common Installation Issues\n\n- In Windows, you may get an error regarding geos_c.dll. To fix this, install Shapely using:\n\n```bash\nconda install Shapely\n```\n\n- In Windows, an `ImportError` regarding win32api can also occur. This can be resolved by fixing\n- the version of pywin32 as follows:\n\n```bash\npip install --upgrade pywin32==255\n```\n\n#### Example Notebooks and Data\n\nBe sure to install OpenOA using the `examples` modifier from [above](#installation-options). Such\nas: `pip install \".[examples]\"`\n\nThe example data will be automatically extracted as needed by the tests. To manually extract the\nexample data for use with the example notebooks, use the following command:\n\n```bash\nunzip examples/data/la_haute_borne.zip -d examples/data/la_haute_borne/\n```\n\nThe example notebooks are located in the `examples` directory. We suggest installing the Jupyter\nnotebook server to run the notebooks interactively. The notebooks can also be viewed statically on\n[Read The Docs](http://openoa.readthedocs.io/en/latest/examples).\n\n```bash\njupyter lab  # \"jupyter notebook\" is also ok if that's your preference\n```\n\nOpen the URL printed to your command prompt in your favorite browser. Once Jupyter is open, navigate\nto the \"examples\" directory in the file explorer and open an example notebook.\n\n### Development\n\nPlease see the developer section of the contributing guide [here](contributing.md), or on the\n[documentation site](https://openoa.readthedocs.io/en/latest/getting_started/contributing.html) for\ncomplete details.\n\nDevelopment dependencies are provided through the \"develop\" extra flag in setup.py. Here, we install\nOpenOA, with development dependencies, in editable mode, and activate the pre-commit workflow (note:\nthis second step must be done before committing any changes):\n\n```bash\ncd OpenOA\npip install -e \".[develop, docs, examples]\"\npre-commit install\n```\n\nOccasionally, you will need to update the dependencies in the pre-commit workflow, which will\nprovide an error when this needs to happen. When it does, this can normally be resolved with the\nbelow code, after which you can continue with your normal git workflow:\n\n```bash\npre-commit autoupdate\ngit add .pre-commit-config.yaml\n```\n\n#### Testing\nTests are written in the Python unittest or pytest framework and are run using pytest. There\nare two types of tests, unit tests (located in `test/unit`) run quickly and are automatically for\nevery pull request to the OpenOA repository. Regression tests (located at `test/regression`) provide\na comprehensive suite of scientific tests that may take a long time to run (up to 20 minutes on our\nmachines). These tests should be run locally before submitting a pull request, and are run weekly on\nthe develop and main branches.\n\nTo run all unit and regression tests:\n\n```bash\npytest\n```\n\nTo run unit tests only:\n\n```bash\npytest --unit\n```\n\nTo run all tests and generate a code coverage report\n\n```bash\npytest --cov=openoa\n```\n\n#### Documentation\n\nDocumentation is automatically built by, and visible through\n[Read The Docs](http://openoa.readthedocs.io/).\n\nYou can build the documentation with [sphinx](http://www.sphinx-doc.org/en/stable/), but will need\nto ensure [Pandoc is installed](https://pandoc.org/installing.html) on your computer first.\n\n```bash\ncd OpenOA\npip install -e \".[docs]\"\ncd sphinx\nmake html\n```\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.linkedin.com/in/rob-hammond-33583756/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/13874373?v=4?s=100\" width=\"100px;\" alt=\"Rob Hammond\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRob Hammond\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=RHammond2\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/commits?author=RHammond2\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/pulls?q=is%3Apr+reviewed-by%3ARHammond2\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#tutorial-RHammond2\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"#maintenance-RHammond2\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#ideas-RHammond2\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#fundingFinding-RHammond2\" title=\"Funding Finding\"\u003e🔍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/jordanperr\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/355615?v=4?s=100\" width=\"100px;\" alt=\"Jordan Perr-Sauer\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJordan Perr-Sauer\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=jordanperr\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/commits?author=jordanperr\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/pulls?q=is%3Apr+reviewed-by%3Ajordanperr\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#tutorial-jordanperr\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"#maintenance-jordanperr\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#ideas-jordanperr\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#fundingFinding-jordanperr\" title=\"Funding Finding\"\u003e🔍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ejsimley\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/40040961?v=4?s=100\" width=\"100px;\" alt=\"ejsimley\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eejsimley\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#projectManagement-ejsimley\" title=\"Project Management\"\u003e📆\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/commits?author=ejsimley\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#data-ejsimley\" title=\"Data\"\u003e🔣\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/commits?author=ejsimley\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/pulls?q=is%3Apr+reviewed-by%3Aejsimley\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#tutorial-ejsimley\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"#ideas-ejsimley\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#fundingFinding-ejsimley\" title=\"Funding Finding\"\u003e🔍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Dynorat\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4141650?v=4?s=100\" width=\"100px;\" alt=\"Jason Fields\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJason Fields\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#projectManagement-Dynorat\" title=\"Project Management\"\u003e📆\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/pulls?q=is%3Apr+reviewed-by%3ADynorat\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#business-Dynorat\" title=\"Business development\"\u003e💼\u003c/a\u003e \u003ca href=\"#design-Dynorat\" title=\"Design\"\u003e🎨\u003c/a\u003e \u003ca href=\"#fundingFinding-Dynorat\" title=\"Funding Finding\"\u003e🔍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/nbodini\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/55894604?v=4?s=100\" width=\"100px;\" alt=\"Nicola Bodini\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNicola Bodini\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=nbodini\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/pulls?q=is%3Apr+reviewed-by%3Anbodini\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#tutorial-nbodini\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"#ideas-nbodini\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/moptis\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/32751681?v=4?s=100\" width=\"100px;\" alt=\"moptis\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003emoptis\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=moptis\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#data-moptis\" title=\"Data\"\u003e🔣\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/commits?author=moptis\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/pulls?q=is%3Apr+reviewed-by%3Amoptis\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#tutorial-moptis\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"#ideas-moptis\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/joejoeyjoseph\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/22756182?v=4?s=100\" width=\"100px;\" alt=\"Joseph Lee\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJoseph Lee\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=joejoeyjoseph\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://charlie9578.github.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/14888896?v=4?s=100\" width=\"100px;\" alt=\"Charlie\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCharlie\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=charlie9578\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#data-charlie9578\" title=\"Data\"\u003e🔣\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/commits?author=charlie9578\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#tutorial-charlie9578\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"#ideas-charlie9578\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/zheitkamp1\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/53791791?v=4?s=100\" width=\"100px;\" alt=\"zheitkamp1\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ezheitkamp1\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=zheitkamp1\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/abbey2017\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/26353690?v=4?s=100\" width=\"100px;\" alt=\"Abiodun Timothy Olaoye\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAbiodun Timothy Olaoye\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=abbey2017\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://kristenthyng.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3487237?v=4?s=100\" width=\"100px;\" alt=\"Kristen Thyng\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKristen Thyng\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=kthyng\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.rafmudaf.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/13797903?v=4?s=100\" width=\"100px;\" alt=\"Rafael M Mudafort\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRafael M Mudafort\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=rafmudaf\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/sebastianpfaffel\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/22168894?v=4?s=100\" width=\"100px;\" alt=\"sebastianpfaffel\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003esebastianpfaffel\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=sebastianpfaffel\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/nateagarwal\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/51377789?v=4?s=100\" width=\"100px;\" alt=\"nateagarwal\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003enateagarwal\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=nateagarwal\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NREL/OpenOA/pulls?q=is%3Apr+reviewed-by%3Anateagarwal\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Var-Char\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/16821332?v=4?s=100\" width=\"100px;\" alt=\"Var-Char\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eVar-Char\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NREL/OpenOA/commits?author=Var-Char\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n  \u003ctfoot\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" size=\"13px\" colspan=\"7\"\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/all-contributors/all-contributors-cli/1b8533af435da9854653492b1327a23a4dbd0a10/assets/logo-small.svg\"\u003e\n          \u003ca href=\"https://all-contributors.js.org/docs/en/bot/usage\"\u003eAdd your contributions\u003c/a\u003e\n        \u003c/img\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tfoot\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n\n## References\n\n[^1]: Perr-Sauer, J., and Optis, M., Fields, J.M., Bodini, N., Lee, J.C.Y., Todd, A., Simley, E., Hammond, R., Phillips, C., Lunacek, M., Kemper, T., Williams, L., Craig, A., Agarwal, N., Sheng, S., and Meissner, J. OpenOA: An Open-Source Codebase For Operational Analysis of Wind Farms. *Journal of Open Source Software*, 6(58):2171 (2022). https://doi.org/10.21105/joss.02171.\n\n[^2]: Fields, M. J., Optis, M., Perr-Sauer, J., Todd, A., Lee, J. C. Y., Meissner, J., Simley, E., Bodini, N., Williams, L., Sheng, S., and Hammond, R.. Wind plant performance prediction benchmark phase 1 technical report, NREL/TP-5000-78715. Technical Report, National Renewable Energy Laboratory, Golden, CO (2021). https://doi.org/10.2172/1826665.\n\n[^3]: Bodini, N. \u0026 Optis, M. Operational-based annual energy production uncertainty: are its components actually uncorrelated? *Wind Energy Science* 5(4):1435–1448 (2020). https://doi.org/10.5194/wes-5-1435-2020.\n\n[^4]: Bodini, N., Optis, M., Perr-Sauer, J., Simley, E., and Fields, M. J. Lowering post-construction yield assessment uncertainty through better wind plant power curves. *Wind Energy*, 25(1):5–22 (2022). https://doi.org/10.1002/we.2645.\n\n[^5]: Todd, A. C., Optis, M., Bodini, N., Fields, M. J., Lee, J. C. Y., Simley, E., and Hammond, R. An independent analysis of bias sources and variability in wind plant pre‐construction energy yield estimation methods. *Wind Energy*, 25(10):1775-1790 (2022). https://doi.org/10.1002/we.2768.\n\n[^6]: Simley, E., Fields, M. J., Young, E., Allen, J., Hammond, R., Perr-Sauer, J., and Bodini, N. A comparison of preconstruction and operational wake loss estimates for land-based wind plants. *Wind Energy*, 28(11) (2025). https://doi.org/10.1002/we.70067.\n\n[^7]: Barthelmie, R. J. and Jensen, L. E. Evaluation of wind farm efficiency and wind turbine wakes at the Nysted offshore wind farm, *Wind Energy* 13(6):573–586 (2010). https://doi.org/10.1002/we.408.\n\n[^8]: Nygaard, N. G. Systematic quantification of wake model uncertainty. Proc. EWEA Offshore, Copenhagen, Denmark, March 10-12 (2015).\n\n[^9]: Walker, K., Adams, N., Gribben, B., Gellatly, B., Nygaard, N. G., Henderson, A., Marchante Jimémez, M., Schmidt, S. R., Rodriguez Ruiz, J., Paredes, D., Harrington, G., Connell, N., Peronne, O., Cordoba, M., Housley, P., Cussons, R., Håkansson, M., Knauer, A., and Maguire, E.: An evaluation of the predictive accuracy of wake effects models for offshore wind farms. *Wind Energy* 19(5):979–996 (2016). https://doi.org/10.1002/we.1871.\n\n[^10]: Kassebaum, J. Wake Validation Through SCADA Data Analysis. Proc. American Clean Power Resource \u0026 Project Energy Assessment Virtual Summit 2021 (2021).\n\n[^11]: Bao, Y., Yang, Q., Fu, L., Chen, Q., Cheng, C., and Sun, Y. Identification of Yaw Error Inherent Misalignment for Wind Turbine Based on SCADA Data: A Data Mining Approach. Proc. 12th Asian Control Conference (ASCC), Kitakyushu, Japan, June 9-12 (2019). 1095-1100.\n\n[^12]: Xue, J. and Wang, L. Online data-driven approach of yaw error estimation and correction of horizontal axis wind turbine. *IET J. Eng.* 2019(18):4937–4940 (2019). https://doi.org/10.1049/joe.2018.9293.\n\n[^13]: Astolfi, D., Castellani, F., and Terzi, L. An Operation Data-Based Method for the Diagnosis of Zero-Point Shift of Wind Turbines Yaw Angle. *J. Solar Energy Engineering* 142(2):024501 (2020). https://doi.org/10.1115/1.4045081.\n\n[^14]: Jing, B., Qian, Z., Pei, Y., Zhang, L., and Yang, T. Improving wind turbine efficiency through detection and calibration of yaw misalignment. *Renewable Energy* 160:1217-1227 (2020). https://doi.org/10.1016/j.renene.2020.07.063.\n\n[^15]: Gao, L. and Hong, J. Data-driven yaw misalignment correction for utility-scale wind turbines. *J. Renewable Sustainable Energy* 13(6):063302 (2021). https://doi.org/10.1063/5.0056671.\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.21105/joss.02171","https://doi.org/10.2172/1826665","https://doi.org/10.5194/wes-5-1435-2020","https://doi.org/10.1002/we.2645","https://doi.org/10.1002/we.2768","https://doi.org/10.1002/we.70067","https://doi.org/10.1002/we.408","https://doi.org/10.1002/we.1871","https://doi.org/10.1049/joe.2018.9293","https://doi.org/10.1115/1.4045081","https://doi.org/10.1016/j.renene.2020.07.063","https://doi.org/10.1063/5.0056671"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["wind-energy","wind-turbine","operations-maintenance","simpy","wind"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/342291","html_url":"https://ost.ecosyste.ms/projects/342291"}