Skip to content

Commit 2d1fbfb

Browse files
committed
Make available to plot against datetime of input data
1 parent d33407a commit 2d1fbfb

File tree

2 files changed

+31
-35
lines changed

2 files changed

+31
-35
lines changed

Irradiances_ratios/E_ratio_script.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from irradiance_ratios import LAMBDA0
1111

1212
import numpy as np
13+
import pandas as pd
1314

1415
from datetime import datetime
1516

@@ -26,9 +27,13 @@
2627
}
2728

2829
# what do we want to plot E_λ<λ₀/E against? (None = default behaviour)
29-
plot_keys = None
30+
plot_keys = "datetime"
3031

31-
bench = MR_E_ratio() # default values for a start
32+
bench = MR_E_ratio(
33+
datetimes=pd.date_range(
34+
"2023-11-27T00", "2023-11-28T00", freq=pd.Timedelta(minutes=1)
35+
)
36+
)
3237

3338
# %%
3439
# Test with monosi/polysi cutoff wavelength

Irradiances_ratios/spectrl2_E_ratio_bench.py

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
# Imports
99
from irradiance_ratios import E_lambda_over_E, LAMBDA0
10-
from tools import _get_optional_params, day_of_year
10+
from tools import day_of_year
1111

1212
from pvlib.spectrum import spectrl2
1313
from pvlib.irradiance import aoi
@@ -18,7 +18,6 @@
1818

1919
from itertools import product
2020
from functools import partial
21-
from warnings import warn
2221
from datetime import datetime
2322
from time import time
2423

@@ -29,36 +28,21 @@ class MR_E_ratio:
2928
of input data, generate spectrums and integrate them.
3029
"""
3130

32-
def __init__(self, cutoff_lambda: str | float = 0.0, **kwargs):
33-
"""
34-
Allow for initialization
35-
"""
36-
self.reset_simulation_state()
37-
params = _get_optional_params(self.init_values)
38-
self.init_values(
39-
cutoff_lambda=cutoff_lambda,
40-
**{
41-
param: (kwargs.pop(param, None))
42-
for param in params
43-
if kwargs.get(param) is not None
44-
},
45-
)
46-
if len(kwargs) > 0:
47-
warn(
48-
"Unused kwargs in bench!\n"
49-
+ "\n".join(f"\t{key}: {value}" for key, value in params)
50-
)
51-
52-
def init_values(
31+
def __init__(
5332
self,
54-
cutoff_lambda: str | float,
33+
cutoff_lambda: str | float = "monosi",
5534
n=20,
5635
location: Location = None,
57-
dates: pd.DatetimeIndex = None,
36+
datetimes: pd.DatetimeIndex = None,
5837
surface_tilt=31,
5938
surface_azimuth=180,
6039
ozone=0.31,
6140
):
41+
"""
42+
Create bench
43+
"""
44+
self.reset_simulation_state()
45+
6246
if isinstance(cutoff_lambda, float):
6347
self.cutoff_lambda = cutoff_lambda
6448
elif isinstance(cutoff_lambda, str):
@@ -84,8 +68,8 @@ def init_values(
8468
name="Madrid",
8569
)
8670

87-
if dates:
88-
self.datetimes = dates
71+
if datetimes is not None:
72+
self.datetimes = datetimes
8973
else:
9074
self.datetimes = pd.date_range(
9175
"2023-11-27T04",
@@ -249,8 +233,9 @@ def plot_results(
249233
plot_keys,
250234
} # cast to set
251235

252-
# variable guard: only allow valid keys, from self.input_keys & self.time_params
253-
allowed_keys = set(self.input_keys) | self.time_params.keys()
236+
# variable guard: only allow valid keys:
237+
# * self.input_keys & self.time_params
238+
allowed_keys = set(self.input_keys) | self.time_params.keys() | {"datetime"}
254239
invalid_keys = plot_keys - allowed_keys
255240
if invalid_keys == {}:
256241
raise ValueError(
@@ -270,6 +255,7 @@ def plot_results(
270255
axs = axs.flatten()
271256
else: # plt.Axes type
272257
axs = [axs] # to allow iteration of just that element
258+
axs = iter(axs)
273259

274260
fig.suptitle(
275261
r"$\frac{E_{λ<λ_0}}{E}$ as function of SPECTRL2 inputs"
@@ -281,11 +267,16 @@ def plot_results(
281267
n_inputs = len(self.input_keys)
282268

283269
# for each axes, plot a relationship
270+
# Case: time
271+
for ax, var_name in zip(axs, plot_keys.intersection({"datetime"})):
272+
ax.set_title(r"$\frac{E_{λ<λ_0}}{E}$ vs. " + var_name)
273+
x = self.datetimes if var_name == "datetime" else None
274+
for _, row in self.results.iloc[n_inputs:].iterrows():
275+
ax.scatter(x, row[n_inputs:])
276+
plot_keys.remove(var_name)
277+
284278
# Case: time-dependant variables in plot_keys
285-
for ax, var_name in zip(
286-
axs[::-1], # from last to first, so it doesn't clash with generator keys
287-
plot_keys.intersection(self.time_params.keys()),
288-
):
279+
for ax, var_name in zip(axs, plot_keys.intersection(self.time_params.keys())):
289280
ax.set_title(r"$\frac{E_{λ<λ_0}}{E}$ vs. " + var_name)
290281
x = self.time_params[var_name]
291282
for _, row in self.results.iloc[n_inputs:].iterrows():

0 commit comments

Comments
 (0)