def encode_csv(self, dt, ss_code, ss_config, blank=0, bin_size=0): """ Encode into CSV format. :param dt: Datetime object. :param ss_code: Subsystem code. :param ss_config: Subsystem Configuration :param blank: Blank or first bin position in meters. :param bin_size: Bin size in meters. :return: List of CSV lines. """ str_result = [] # Create the CSV strings str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_FIRST_PING_TIME, ss_code, ss_config, 0, 0, blank, bin_size, self.FirstPingTime)) str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_LAST_PING_TIME, ss_code, ss_config, 0, 0, blank, bin_size, self.LastPingTime)) str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_HEADING, ss_code, ss_config, 0, 0, blank, bin_size, self.Heading)) str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_PITCH, ss_code, ss_config, 0, 0, blank, bin_size, self.Pitch)) str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_ROLL, ss_code, ss_config, 0, 0, blank, bin_size, self.Roll)) str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_WATER_TEMP, ss_code, ss_config, 0, 0, blank, bin_size, self.WaterTemp)) str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_SYS_TEMP, ss_code, ss_config, 0, 0, blank, bin_size, self.SystemTemp)) str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_PRESSURE, ss_code, ss_config, 0, 0, blank, bin_size, self.Pressure)) str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_XDCR_DEPTH, ss_code, ss_config, 0, 0, blank, bin_size, self.TransducerDepth)) str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_SOS, ss_code, ss_config, 0, 0, blank, bin_size, self.SpeedOfSound)) return str_result
def get_csv_data(self, data, awc_key, data_type, last_time): """ Append the data to the CSV file. Ex: ["datetime", "data_type", "ss_code", "ss_config", "bin_num", "beam_num", "blank", "bin_size", "value"] 2019/02/23 15:23:22.56, EARTH_VEL, 4, 1, 2, 2, 7.5, 1.245 :param data: Data for all beams. :param awc_key: Key used to give the file an identifier for the subsystem and config. :param data_type: Data type to place into the csv line. :param last_time: Last time in the average. :return: """ # Get the parameters for the data blank = self.awc_dict[awc_key].blank bin_size = self.awc_dict[awc_key].bin_size ss_code = self.awc_dict[awc_key].ss_code ss_config = self.awc_dict[awc_key].ss_config # Use the current time as a backup #dt_time = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S:%f') dt_time = datetime.datetime.now() if last_time: dt_time = last_time # Get the data bin_num = 1 beam_num = 0 row_data = [] # Go through each bin and add a line to the csv file for bin_data in data: if type(bin_data) == list: beam_num = 0 for beam_data in bin_data: val = beam_data row_data.append([ (Ensemble.gen_csv_line(dt_time, data_type, ss_code, ss_config, bin_num, beam_num, blank, bin_size, val)) ]) beam_num += 1 else: row_data.append([ (Ensemble.gen_csv_line(dt_time, data_type, ss_code, ss_config, bin_num, beam_num, blank, bin_size, bin_data)) ]) # Increment the bin number bin_num += 1 return row_data
def generate_csv_data_no_avg(self, ens): """ Generate the CSV and Dataframe data from the ensemble. This is only called if the user is not averaging the data. :param ens: Ensemble data :return: """ csv_rows = [] dt = datetime.datetime.now() ss_code = 0 ss_config = 0 blank = 0.0 bin_size = 0.0 if ens.IsEnsembleData: dt = ens.EnsembleData.datetime() ss_code = ens.EnsembleData.SysFirmwareSubsystemCode ss_config = ens.EnsembleData.SubsystemConfig if ens.IsAncillaryData: blank = ens.AncillaryData.FirstBinRange bin_size = ens.AncillaryData.BinSize pressure = ens.AncillaryData.Pressure xdcr_depth = ens.AncillaryData.TransducerDepth # Pressure csv_rows.append([ Ensemble.gen_csv_line(dt, Ensemble.CSV_PRESSURE, ss_code, ss_config, 0, 0, blank, bin_size, pressure) ]) # Transducer Depth csv_rows.append([ Ensemble.gen_csv_line(dt, Ensemble.CSV_XDCR_DEPTH, ss_code, ss_config, 0, 0, blank, bin_size, xdcr_depth) ]) if ens.IsRangeTracking: for beam_num in range(len(ens.RangeTracking.Range)): # Range Tracking csv_rows.append([ Ensemble.gen_csv_line(dt, Ensemble.CSV_RT_RANGE, ss_code, ss_config, 0, beam_num, blank, bin_size, ens.RangeTracking.Range[beam_num]) ]) if ens.IsEarthVelocity: csv_rows += (ens.EarthVelocity.encode_csv(dt, ss_code, ss_config, blank, bin_size)) return csv_rows
def encode_csv(self, dt, ss_code, ss_config, blank=0, bin_size=0): """ Encode into CSV format. :param dt: Datetime object. :param ss_code: Subsystem code. :param ss_config: Subsystem Configuration :param blank: Blank or first bin position in meters. :param bin_size: Bin size in meters. :return: List of CSV lines. """ str_result = [] # Create the CSV strings for beams in range(len(self.Range)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_RT_RANGE, ss_code, ss_config, 0, beams, blank, bin_size, self.Range[beams])) for beams in range(len(self.Pings)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_RT_PINGS, ss_code, ss_config, 0, beams, blank, bin_size, self.Pings[beams])) for beams in range(len(self.BeamVelocity)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_RT_BEAM_VEL, ss_code, ss_config, 0, beams, blank, bin_size, self.BeamVelocity[beams])) for beams in range(len(self.InstrumentVelocity)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_RT_INSTR_VEL, ss_code, ss_config, 0, beams, blank, bin_size, self.InstrumentVelocity[beams])) for beams in range(len(self.EarthVelocity)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_RT_EARTH_VEL, ss_code, ss_config, 0, beams, blank, bin_size, self.EarthVelocity[beams])) return str_result
def encode_csv(self, dt, ss_code, ss_config, blank, bin_size): """ Encode into CSV format. :param dt: Datetime object. :param ss_code: Subsystem code. :param ss_config: Subsystem Configuration :param blank: Blank or first bin position in meters. :param bin_size: Bin size in meters. :return: List of CSV lines. """ str_result = [] for beam in range(self.element_multiplier): for bin_num in range(self.num_elements): # Get the value val = self.Velocities[bin_num][beam] # Create the CSV string str_result.append([ Ensemble.gen_csv_line(dt, Ensemble.CSV_EARTH_VEL, ss_code, ss_config, bin_num, beam, blank, bin_size, val) ]) # Generate Magnitude and Direction CSV for bin_num in range(self.num_elements): mag = self.Magnitude[bin_num] dir = self.Direction[bin_num] str_result.append([ Ensemble.gen_csv_line(dt, Ensemble.CSV_MAG, ss_code, ss_config, bin_num, 0, blank, bin_size, mag) ]) str_result.append([ Ensemble.gen_csv_line(dt, Ensemble.CSV_DIR, ss_code, ss_config, bin_num, 0, blank, bin_size, dir) ]) return str_result
def encode_csv(self, dt, ss_code, ss_config, blank=0, bin_size=0): """ Encode into CSV format. :param dt: Datetime object. :param ss_code: Subsystem code. :param ss_config: Subsystem Configuration :param blank: Blank or first bin position in meters. :param bin_size: Bin size in meters. :return: List of CSV lines. """ str_result = [] # Create the CSV strings str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_STATUS, ss_code, ss_config, 0, 0, blank, bin_size, self.Status)) return str_result
def encode_csv(self, dt, ss_code, ss_config, blank, bin_size): """ Encode into CSV format. :param dt: Datetime object. :param ss_code: Subsystem code. :param ss_config: Subsystem Configuration :param blank: Blank or first bin position in meters. :param bin_size: Bin size in meters. :return: List of CSV lines. """ str_result = [] for beam in range(self.element_multiplier): for bin_num in range(self.num_elements): # Get the value val = self.Velocities[bin_num][beam] # Create the CSV string str_result.append(Ensemble.gen_csv_line(dt, Ensemble.CSV_BEAM_VEL, ss_code, ss_config, bin_num, beam, blank, bin_size, val)) return str_result
def encode_csv(self, dt, ss_code, ss_config, blank=0, bin_size=0): """ Encode into CSV format. :param dt: Datetime object. :param ss_code: Subsystem code. :param ss_config: Subsystem Configuration :param blank: Blank or first bin position in meters. :param bin_size: Bin size in meters. :return: List of CSV lines. """ str_result = [] # Create the CSV strings str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_HEADING, ss_code, ss_config, 0, 0, blank, bin_size, self.Heading)) str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_PITCH, ss_code, ss_config, 0, 0, blank, bin_size, self.Pitch)) str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_ROLL, ss_code, ss_config, 0, 0, blank, bin_size, self.Roll)) str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_PRESSURE, ss_code, ss_config, 0, 0, blank, bin_size, self.Pressure)) str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_XDCR_DEPTH, ss_code, ss_config, 0, 0, blank, bin_size, self.TransducerDepth)) str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_STATUS, ss_code, ss_config, 0, 0, blank, bin_size, self.Status)) for beams in range(len(self.Range)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_RANGE, ss_code, ss_config, 0, beams, blank, bin_size, self.Range[beams])) for beams in range(len(self.BeamVelocity)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_BEAM_VEL, ss_code, ss_config, 0, beams, blank, bin_size, self.BeamVelocity[beams])) for beams in range(len(self.BeamGood)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_BEAM_GOOD, ss_code, ss_config, 0, beams, blank, bin_size, self.BeamGood[beams])) for beams in range(len(self.InstrumentVelocity)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_INSTR_VEL, ss_code, ss_config, 0, beams, blank, bin_size, self.InstrumentVelocity[beams])) for beams in range(len(self.InstrumentGood)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_INSTR_GOOD, ss_code, ss_config, 0, beams, blank, bin_size, self.InstrumentGood[beams])) for beams in range(len(self.EarthVelocity)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_EARTH_VEL, ss_code, ss_config, 0, beams, blank, bin_size, self.EarthVelocity[beams])) for beams in range(len(self.EarthGood)): str_result.append( Ensemble.gen_csv_line(dt, Ensemble.CSV_BT_EARTH_GOOD, ss_code, ss_config, 0, beams, blank, bin_size, self.EarthGood[beams])) return str_result