Source code for pybtls.output.Read.fatigue_events

import pandas as pd
from pathlib import Path

__all__ = ["read_FE"]


[docs] def read_FE(file_path: Path, no_lines: int = None, start_line: int = 1) -> pd.DataFrame: """ Read the fatigue events data from pybtls results.\n This output file does not have a header. Parameters ---------- file_path : Path\n The path to the fatigue events data file.\n no_lines : int, optional\n The number of data lines to read from the file.\n If not specified, all lines will be read.\n start_line : int, optional\n Default is 1. \n The line to start reading data from. Returns ------- pd.DataFrame\n The fatigue events data. """ # Read data data_rows = [] with open(file_path, "r") as file: for _ in range(max(0, 2 * (start_line - 1))): next(file) # Skip the specified number of lines i = 0 for line in file: split_line_1 = line.strip().split() # Split by spaces or tabs split_line_2 = next(file).strip().split() # Split by spaces or tabs no_effects = int((len(split_line_1) - 1) / 2) ordered_line = [split_line_1[0], split_line_2[0]] # Event Time, No. Trucks for j in range(no_effects): ordered_line.append(split_line_1[2 * j + 1]) # Time Max ordered_line.append(split_line_1[2 * j + 2]) # Max ordered_line.append(split_line_2[2 * j + 1]) # Time Min ordered_line.append(split_line_2[2 * j + 2]) # Min data_rows.append(ordered_line) i += 1 if no_lines is not None and i >= no_lines: break # Convert to DataFrame return_data = pd.DataFrame(data_rows) # Set column ids column_ids = ["Event Time", "No. Trucks"] for i in range(no_effects): time_max_id = f"Effect {i + 1} Time Max" max_id = f"Effect {i + 1} Max" time_min_id = f"Effect {i + 1} Time Min" min_id = f"Effect {i + 1} Min" column_ids.extend([time_max_id, max_id, time_min_id, min_id]) return_data.columns = column_ids # Convert data types return_data = return_data.astype(float) return_data["No. Trucks"] = return_data["No. Trucks"].astype(int) return return_data