def adjust_sensitivity(irrad, current_sen, new_sen):
try:
return new_sen * (irrad/ current_sen)
except TypeError as type_error:
for arg_value in [current_sen, new_sen]:
if not bw.utils.utils.is_float_or_int(arg_value):
raise TypeError("argument '" + str(arg_value) + "' is not of data type number")
if not bw.utils.utils.is_float_or_int(irrad):
if type(irrad) == pd.DataFrame and (irrad.dtypes == object)[0]:
raise TypeError('some values in the DataFrame are not of data type number')
elif type(irrad) == pd.Series and (irrad.dtypes == object):
raise TypeError('some values in the Series are not of data type number')
raise TypeError('irrad argument is not of data type number')
raise type_error
except Exception as error:
raise error
def apply_sol_sensitivity_adj(data,
meas_station_obj,
inplace = False):
data = data.copy(deep=True) if inplace is False else data
sol_in_dataset = False
df = pd.DataFrame(data) if type(data) == pd.Series else data
for meas_sensor_config in meas_station_obj.measurements.properties:
if meas_sensor_config['measurement_type_id'] in ['global_horizontal_irradiance',
'global_horizontal_irradiance',
'global_tilted_irradiance',
'albedo']:
if meas_sensor_config['name'] in df.columns:
sol_in_dataset = True
if 'calibration.sensitivity' not in meas_sensor_config:
meas_sensor_config['calibration.sensitivity'] = None
none_variables = merlin.transform._extract_none_dict_variables_from_list(meas_sensor_config, ['logger_measurement_config.sensitivity',
'calibration.sensitivity'])
if meas_sensor_config['date_to'] is None:
date_to_txt = 'the end of dataset'
else:
date_to_txt = meas_sensor_config['date_to']
if none_variables:
print("{} has {} value set as None. Sensitivity adjustment can't be applied "
"from {} to {}.".format(bold(meas_sensor_config['name']), bold(', '.join(none_variables)),
bold(meas_sensor_config['date_from']),
bold(date_to_txt)))
elif float(meas_sensor_config['logger_measurement_config.sensitivity']) != float(meas_sensor_config['calibration.sensitivity']):
try:
df[meas_sensor_config['name']][meas_sensor_config['date_from']:meas_sensor_config['date_to']] = \
adjust_sensitivity(df[meas_sensor_config['name']][
meas_sensor_config['date_from']:meas_sensor_config['date_to']],
current_sen=float(meas_sensor_config['logger_measurement_config.sensitivity']),
new_sen=float(meas_sensor_config['calibration.sensitivity']))
print('{} has sensitivity adjustment applied from {} to {}.'
.format(bold(meas_sensor_config['name']), bold(meas_sensor_config['date_from']),
bold(date_to_txt)))
except TypeError:
print('{} has TypeError with logger or calibration sensitivity values. Skipping.'
.format(bold(meas_sensor_config['name'])))
except Exception as error_msg:
print(error_msg)
else:
print('{} logger sensitivity is equal to calibration sensitivity from '
'{} to {}.'.format(bold(meas_sensor_config['name']),
bold(meas_sensor_config['date_from']),
bold(date_to_txt)))
else:
print('{} is not found in data.'.format(bold(meas_sensor_config['name'])))
if sol_in_dataset is False:
print('No solar measurements found in the configurations.')
# if a Series is sent, send back a Series
if type(data) == pd.Series:
df = df[df.columns[0]]
return df
Is your feature request related to a problem? Please describe.
Brightwind library doesn't have a function for adjusting irradiance data when the logger sensitivity value is different than the calibration sensitivity.
Describe the solution you'd like
It would be good to add a function similar to
apply_wspd_slope_offset_adjthat can be used for adjusting irradiance data when the logger sensitivity value is different than the calibration sensitivity.Example code