Source code for pybtls.output.read.time_history
import pandas as pd
from pathlib import Path
from collections import defaultdict
__all__ = ["read_TH"]
[docs]
def read_TH(file_path: Path, no_lines: int = None, start_line: int = 1) -> pd.DataFrame:
    """
    Read the time history data from pybtls results.\n
    Warning: This could blow up the computer memory.\n
    Do set a no_lines to partially read the data.\n
    This output file has a header.
    Parameters
    ----------
    file_path : Path\n
        The path to the time history 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 time history data.
    """
    # Read data
    return_data = pd.read_csv(
        file_path,
        sep="[\s\t]+",
        header=None,
        skiprows=max(1, start_line),
        nrows=no_lines,
        engine="python",
    )
    no_effects = len(return_data.columns) - 2
    # Set column ids
    column_ids = ["Time", "No. Trucks"] + [f"Effect {i + 1}" for i in range(no_effects)]
    return_data.columns = column_ids
    # # Fill the data (if use, remove the corresponding part in plot/time_history.py)
    # time_step = return_data["Time"].iloc[1] - return_data["Time"].iloc[0]
    # column_names = return_data.columns.tolist()[2:]
    # data_time = []
    # data_no_trucks = []
    # data_val = defaultdict(list)
    # for i in range(len(return_data["Time"]) - 1):
    #     data_time.append(return_data["Time"].iloc[i])
    #     data_no_trucks.append(return_data["No. Trucks"].iloc[i])
    #     for name in column_names:
    #         data_val[name].append(return_data[name].iloc[i])
    #     time_diff = return_data["Time"].iloc[i + 1] - return_data["Time"].iloc[i]
    #     if (time_diff - time_step) > 1e-6:
    #         data_time.append(return_data["Time"].iloc[i] + time_step)
    #         data_no_trucks.append(0)
    #         for name in column_names:
    #             data_val[name].append(0.0)
    # data_time.append(return_data["Time"].iloc[-1])
    # data_no_trucks.append(return_data["No. Trucks"].iloc[-1])
    # for name in column_names:
    #     data_val[name].append(return_data[name].iloc[-1])
    # return_data["Time"] = pd.Series(data_time)
    # return_data["No. Trucks"] = pd.Series(data_no_trucks)
    # for name in column_names:
    #     return_data[name] = pd.Series(data_val[name])
    return return_data