suboptimumg.loganalysis.macros#
High-level convenience macros that chain multiple loganalysis steps.
- suboptimumg.loganalysis.macros.derive_quantities(df)[source]#
Compute all standard derived quantities.
TODO: Wire up the full set of derived.py calls.
- Parameters:
df (DataFrame)
- Return type:
DataFrame
- suboptimumg.loganalysis.macros.fft_group(df, partial_path, log_y=False, stacked=False, **kwargs)[source]#
Plot FFT for all columns matching partial_path.*.
Default is linear y-axis and overlaid traces.
- Parameters:
df (pd.DataFrame)
partial_path (str)
log_y (bool)
stacked (bool)
- Return type:
go.Figure
- suboptimumg.loganalysis.macros.filter_speeds(df, zscore_window=8.0, zscore_thresh=2.5, lowpass_hz=3.0)[source]#
Z-score + lowpass pipeline for wheel speed signals.
Z-score filter the four raw wheelspeed sensors.
Recompute groundSpeed from the cleaned front wheelspeeds.
Lowpass all wheelspeeds, motor wheelSpeed, and groundSpeed.
- Parameters:
df (DataFrame)
zscore_window (float)
zscore_thresh (float)
lowpass_hz (float)
- Return type:
DataFrame
- suboptimumg.loganalysis.macros.intake_vd_starter_kit(analyzer, deduplicate=True, resample_method='linear')[source]#
Load the standard vehicle-dynamics variable set into a DataFrame.
Wraps
perda_to_dataframewith the default VD variable list and ZOH deduplication on VectorNav position and velocity channels.pcm.vnav.gpsFixis always resampled with zero-order hold (it is a discrete state, not a continuous signal — linear interpolation between0and3would produce nonsensical fractional fix values that defeat downstream gpsFix-based masking).Sentinel
0.0samples inposLla.latitude/.longitude(VectorNav’s “no INS solution” marker) are stripped from the sourceDataInstancebefore resampling so dedup + linear interpolation don’t smear them into ramps across no-fix gaps.- Parameters:
analyzer (Analyzer)
deduplicate (bool)
resample_method (str | dict[str, str])
- Return type:
pd.DataFrame
- suboptimumg.loganalysis.macros.lowpass_group(df, partial_path, cutoff_hz, **kwargs)[source]#
Lowpass filter all columns matching partial_path.*.
- Parameters:
df (DataFrame)
partial_path (str)
cutoff_hz (float)
- Return type:
DataFrame
- suboptimumg.loganalysis.macros.plot_group(df, partial_path, stacked=False, **kwargs)[source]#
Plot all columns matching partial_path.*.
Default is overlaid traces on a single axis.
- Parameters:
df (pd.DataFrame)
partial_path (str)
stacked (bool)
- Return type:
go.Figure
- suboptimumg.loganalysis.macros.preprocess_gps(df)[source]#
Resolve GPS columns, clean/project, and compute elapsed distance.
- Parameters:
df (DataFrame)
- Return type:
DataFrame
- suboptimumg.loganalysis.macros.preprocess_speeds(df, patch_ned=True, car_yaml='parameters/car.yaml')[source]#
NED velocity patch, wheelspeed unit conversion, motor correction, ground speed.
- Parameters:
df (DataFrame)
patch_ned (bool)
car_yaml (str)
- Return type:
DataFrame
- suboptimumg.loganalysis.macros.simulate_on_track(lap_df, track, car_yaml='../parameters/car.yaml', velocity_col='groundSpeed')[source]#
Load a car, simulate on a Track, and return a QSS DataFrame.
- Parameters:
lap_df (DataFrame) – The trimmed single-lap DataFrame used to build the track.
track (Track) – A QSS-compatible Track (from
build_qss_track()).car_yaml (str) – Path to the car YAML config file.
velocity_col (str) – Column to read IRL initial speed from.
- Returns:
sim is the
CustomRuninstance (carries push/coast results). qss_df is a distance-indexed DataFrame withqss.*columns.- Return type:
(sim, qss_df)