def __init__(self, file_path, n_headerlines=1, **kwargs):
     """
     Initialize a general csv object
     :param file_path: Path to a csv file
     :param n_headerlines: number of rows above the first row of data.
     :param kwargs: enter an identifying label followed by the index of each column to be read into the object
     :return:
     """
     with open(file_path) as file_var:
         # Iterate over each data type specified in kwargs
         # dialect = csv.Sniffer().sniff(file_var.read(2024), delimiters="\t,")
         for data_label in kwargs:
             dl = data_label.lower()
             file_var.seek(0)
             input_data = csv.reader(file_var, delimiter=',')
             for i in range(0, n_headerlines):
                 next(input_data)
             temp = []
             for row in input_data:
                 if row[kwargs[data_label]] == '':
                     temp.append(np.nan)
                     continue
                 if dl == 'date_time' or dl == 'date' or dl == 'time':
                     temp.append(
                         data_tools.str_to_datetime(
                             row[kwargs[data_label]]))
                 else:
                     try:
                         temp.append(float(row[kwargs[data_label]]))
                     except ValueError:
                         temp.append(row[kwargs[data_label]])
             setattr(self, data_label, np.array(temp))
    def __init__(self, file_path, disp=None, n_headerlines=1, **kwargs):
        """
            Initialize a VDR object
            :param file_path: Path to a vdr database exported to a csv
            :param disp: Displacment per revolution (cm^3)
            :param n_headerlines: number of rows above the first row of data.
            :param kwargs: enter an identifying label followed by the index of each column to be read into the object
            :return:
            """

        # The following set of data labels enforces consistent labeling for all VDR objects
        data_labs = [
            'rpm', 'speed', 'fuel', 'port_fuel', 'star_fuel', 'port_rpm',
            'star_rpm', 'port_rpm'
        ]
        data_labs.extend([
            'aux_rpm', 'aux_fuel', 'hyd', 'hyd_1', 'hyd_2', 'date_time',
            'date', 'time'
        ])
        data_labs.extend([
            'supply_temp', 'return_temp', 'port_supply_temp',
            'star_supply_temp', 'aux_supply_temp'
        ])
        data_labs.extend(
            ['port_return_temp', 'star_return_temp', 'aux_return_temp'])
        for data_label in kwargs:
            if data_label not in data_labs:
                raise ValueError(
                    'Data label ' + data_label +
                    ' is not a permissible label. Permissible labels are: ' +
                    ', '.join(data_labs))
        with open(file_path) as file_var:
            self.hyd_disp = disp
            # Iterate over each data type specified in kwargs
            # dialect = csv.Sniffer().sniff(file_var.read(2024), delimiters="\t,")
            for data_label in kwargs:
                file_var.seek(0)
                input_data = csv.reader(file_var, delimiter=',')
                for i in range(0, n_headerlines):
                    next(input_data)
                temp = []
                for row in input_data:
                    if row[kwargs[data_label]] == '':
                        temp.append(np.nan)
                        continue
                    if data_label == 'date_time':
                        temp.append(
                            data_tools.str_to_datetime(
                                row[kwargs[data_label]]))
                    else:
                        temp.append(float(row[kwargs[data_label]]))
                setattr(self, data_label.lower(), np.array(temp))
        if disp is not None:
            self.hyd_power = self.hyd * self.rpm * disp / 60 * 6894.76 * 1e-6 / 746
Exemplo n.º 3
0
 def __init__(self, file_path, n_eng=1, port=1, plot_eng=1, delimiter='\t'):
     """
     Input params:
         file_in     a raw data file to read
         n_eng       number of engines recorded in this file (must be either 1 or 2)
         port        position of the port engine data in the raw file (1 or 2)
     """
     if n_eng == 1:
         n_headerlines = 11
         self.prop_curve_dict = {'RPM': [], 'power': []}
     elif n_eng == 2:
         n_headerlines = 14
         self.prop_curve_dict = {
             'engines': {
                 'port': {
                     'RPM': [],
                     'power': []
                 },
                 'starboard': {
                     'RPM': [],
                     'power': []
                 }
             }
         }
     else:
         raise ValueError('n_eng must be 1 or 2')
     if port > n_eng:
         raise ValueError('port must be less than or equal to n_eng')
     self.plot_eng = plot_eng
     self.n_eng = n_eng
     file_var = open(file_path)
     input_data = csv.reader(file_var, delimiter=delimiter)
     n_timesteps = sum(1 for row in input_data) - n_headerlines
     file_var.seek(0)
     input_data = csv.reader(file_var, delimiter=delimiter)
     self.units = "Time: seconds, Torque: ft-lbs, Power: hp, RPM: RPM"
     self.time = np.zeros(n_timesteps)
     self.torque = np.zeros(n_timesteps)
     self.power = np.zeros(n_timesteps)
     self.rpm = np.zeros(n_timesteps)
     self.date_time = []
     if n_eng == 2:
         self.torque2 = np.zeros(n_timesteps)
         self.power2 = np.zeros(n_timesteps)
         self.rpm2 = np.zeros(n_timesteps)
     for row in input_data:
         try:
             if row[0][0:6] == 'Units:':
                 self.units = row[0][7:]
             elif row[0][0:24] == 'TorqueTrak 1 full scale:':
                 self.full_scale_torque = float(row[0][25:-6])
             elif analysis_functions.is_number(row[-1]):
                 data_num = input_data.line_num - n_headerlines - 1
                 self.date_time.append(data_tools.str_to_datetime(row[0]))
                 self.time[data_num] = float(row[1])
                 if port == 1:
                     self.torque[data_num] = float(row[2])
                     self.power[data_num] = float(row[3])
                     self.rpm[data_num] = float(row[4])
                     if n_eng == 2:
                         self.torque2[data_num] = float(row[5])
                         self.power2[data_num] = float(row[6])
                         self.rpm2[data_num] = float(row[7])
                 else:
                     self.torque[data_num] = float(row[5])
                     self.power[data_num] = float(row[6])
                     self.rpm[data_num] = float(row[7])
                     self.torque2[data_num] = float(row[2])
                     self.power2[data_num] = float(row[3])
                     self.rpm2[data_num] = float(row[4])
         except IndexError:
             continue
     file_var.close()