Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "res-wind-up"
version = "0.4.4"
version = "0.4.5"
authors = [
{ name = "Alex Clerc", email = "alex.clerc@res-group.com" }
]
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion wind_up/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from wind_up.constants import REANALYSIS_WD_COL
from wind_up.northing import add_wf_yawdir, apply_northing_corrections
from wind_up.optimize_northing import auto_northing_corrections
from wind_up.reanalysis_data import ReanalysisDataset, add_reanalysis_data
from wind_up.reanalysis_data import MastOrLiDARDataset, ReanalysisDataset, add_reanalysis_data
from wind_up.scada_funcs import filter_scada_df, get_raw_scada_and_cfg_from_file
from wind_up.scada_power_curve import calc_pc_and_rated_ws
from wind_up.smart_data import add_smart_lat_long_to_cfg
Expand Down Expand Up @@ -143,6 +143,7 @@ class AssessmentInputs:
cfg: WindUpConfig
plot_cfg: PlotConfig
pre_post_splitter: PrePostSplitter
mast_or_lidar_datasets: list[MastOrLiDARDataset] | None = None

@classmethod
def from_cfg(
Expand All @@ -155,6 +156,7 @@ def from_cfg(
toggle_df: pd.DataFrame | None = None,
reanalysis_datasets: list[ReanalysisDataset],
cache_dir: Path | None = None,
mast_or_lidar_datasets: list[MastOrLiDARDataset] | None = None,
) -> AssessmentInputs:
"""Construct instance of AssessmentInputs from configuration objects and data.

Expand Down Expand Up @@ -183,6 +185,7 @@ def from_cfg(
cfg=cfg,
plot_cfg=plot_cfg,
pre_post_splitter=pre_post_splitter,
mast_or_lidar_datasets=mast_or_lidar_datasets,
)


Expand Down
13 changes: 9 additions & 4 deletions wind_up/main_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import wind_up
from wind_up.circular_math import circ_diff
from wind_up.constants import (
PROJECTROOT_DIR,
RANDOM_SEED,
REANALYSIS_WD_COL,
REANALYSIS_WS_COL,
Expand Down Expand Up @@ -44,6 +43,7 @@

if TYPE_CHECKING:
from wind_up.models import PlotConfig, Turbine, WindUpConfig
from wind_up.reanalysis_data import MastOrLiDARDataset

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -183,6 +183,7 @@ def _get_ref_df(
test_wtg: Turbine,
toggle_df: pd.DataFrame | None = None,
keep_only_toggle_off: bool = True,
mast_or_lidar_datasets: list[MastOrLiDARDataset] | None = None,
) -> pd.DataFrame:
if ref_name in [x.name for x in cfg.asset.wtgs]:
ref_df = wf_df.loc[ref_name].copy()
Expand All @@ -201,9 +202,10 @@ def _get_ref_df(
original_wd_col = REANALYSIS_WD_COL
elif ref_name in [x.name for x in cfg.asset.masts_and_lidars]:
ref_obj = next(x for x in cfg.asset.masts_and_lidars if x.name == ref_name)
ref_df = pd.read_parquet(
PROJECTROOT_DIR / "input_data" / "masts_and_lidars" / cfg.asset.name / f"{ref_obj.data_file_name}",
)
if mast_or_lidar_datasets is None:
msg = f"No mast or lidar datasets provided for {ref_name}"
raise ValueError(msg)
ref_df = next(x for x in mast_or_lidar_datasets if x.id == ref_name).data
northing_df = wf_df.loc[cfg.test_wtgs[0].name, [REANALYSIS_WS_COL, REANALYSIS_WD_COL, WINDFARM_YAWDIR_COL]]
ref_df = ref_df.merge(northing_df, how="left", left_index=True, right_index=True)
original_ws_col = ref_obj.wind_speed_column
Expand Down Expand Up @@ -449,6 +451,7 @@ def _calc_test_ref_results(
plot_cfg: PlotConfig,
random_seed: int,
toggle_df: pd.DataFrame | None = None,
mast_or_lidar_datasets: list[MastOrLiDARDataset] | None = None,
) -> dict:
test_name = test_wtg.name
(plot_cfg.plots_dir / test_name / ref_name).mkdir(exist_ok=True, parents=True)
Expand Down Expand Up @@ -478,6 +481,7 @@ def _calc_test_ref_results(
test_wtg=test_wtg,
toggle_df=toggle_df,
keep_only_toggle_off=keep_only_toggle_off,
mast_or_lidar_datasets=mast_or_lidar_datasets,
)
if len(ref_df) == 0:
result_manager.warning(f"ref_df is empty for {ref_name}")
Expand Down Expand Up @@ -925,6 +929,7 @@ def run_wind_up_analysis(
cfg=cfg,
plot_cfg=plot_cfg,
random_seed=random_seed,
mast_or_lidar_datasets=inputs.mast_or_lidar_datasets,
)
test_ref_results = test_ref_results | test_results
logger.info(test_ref_results)
Expand Down
4 changes: 0 additions & 4 deletions wind_up/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,6 @@ class MastOrLidar(BaseModel):
name: str = Field(description="Object name", min_length=2)
latitude: float = Field(default=np.nan, ge=-90, le=90)
longitude: float = Field(default=np.nan, ge=-180, le=180)
data_file_name: str = Field(
min_length=2,
description="Name of data timeseries file",
)
wind_speed_column: str = Field(min_length=2, description="Name of wind speed column in data timeseries file")
wind_direction_column: str = Field(
min_length=2,
Expand Down
8 changes: 8 additions & 0 deletions wind_up/reanalysis_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,3 +222,11 @@ def add_reanalysis_data(
if plot_cfg is not None:
plot_wf_and_reanalysis_sample_timeseries(wf_df=wf_and_reanalysis_df, plot_cfg=plot_cfg)
return wf_and_reanalysis_df


@dataclass
class MastOrLiDARDataset:
"""Class to store mast or LiDAR data."""

id: str
data: pd.DataFrame