Timing
Definition
Steps
if np.isnan(flow_matrix[:, column_number]).sum() > max_nan_allowed_per_year or np.count_nonzero(flow_matrix[:, column_number]==0) > max_zero_allowed_per_year: continuefilter_data = gaussian_filter1d(flow_data, window_sigma)mean_flow = np.nanmean(filter_data) maxarray, minarray = peakdet(filter_data, mean_flow * peak_sensitivity) for counter, flow_index in enumerate(reversed(maxarray)): if int(flow_index[0]) < max_peak_flow_date and (flow_index[1] - min_flow) / flow_range > peak_filter_percentage: max_flow_index = int(flow_index[0]) breakx_axis_window = list(range(max_flow_index - search_window_left, max_flow_index + search_window_right)) flow_data_window = gaussian_filter1d(flow_data[max_flow_index - search_window_left : max_flow_index + search_window_right], fit_sigma)spl = ip.UnivariateSpline(x_axis_window, flow_data_window, k=3, s=3) spl_first_deriv = spl.derivative(1) index_zeros = crossings_nonzero_all(spl_first_deriv(x_axis_window))for i in reversed(new_index): threshold = max(spl_first_deriv(x_axis_window)) max_flow_window = max(spl(x_axis_window)) min_flow_window = min(spl(x_axis_window)) range_window = max_flow_window - min_flow_window if summer_timings[column_number] is not None and i < summer_timings[column_number] and i > timing_cutoff and spl(i) - spl(i-1) > threshold * current_sensitivity * 1 and spl(i-1) - spl(i-2) > threshold * current_sensitivity * 2 and spl(i-2) - spl(i-3) > threshold * current_sensitivity * 3 and spl(i-3) - spl(i-4) > threshold * current_sensitivity * 4 and (spl(i) - min_flow_window) / range_window > min_percentage_of_max_flow: timings[-1] = i; break;if len(flow_data[timings[-1] - 4 : timings[-1] + 7]) > 10: max_flow_window_new = max(flow_data[timings[-1] - 4 : timings[-1] + 7]) new_timings = find_index(flow_data[timings[-1] - 4 : timings[-1] + 7], max_flow_window_new) timings[-1] = timings[-1] - 4 + new_timings + lag_time magnitudes[-1] = max_flow_window_new
Last updated