diff --git a/wetb/prepost/hawcstab2.py b/wetb/prepost/hawcstab2.py index 1129dc7e0daf1299454975527580ef9ac5e0f3be..8b261eec57ea9a514594a26621da2442b640eec8 100644 --- a/wetb/prepost/hawcstab2.py +++ b/wetb/prepost/hawcstab2.py @@ -29,7 +29,7 @@ class dummy(object): self.__name__ = name -def ReadFileHAWCStab2Header(fname, widths): +def ReadFileHAWCStab2Header(fname): """ Read a file with a weird HAWCStab2 header that starts with a #, and includes the column number and units between square brackets. @@ -37,6 +37,13 @@ def ReadFileHAWCStab2Header(fname, widths): regex = re.compile('(\\[.*?\\])') + def _withgradients(fname): + df = pd.read_fwf(fname, header=1, widths=[30]*27) + # find all units + units = regex.findall(''.join(df.columns)) + df.columns = [k[:-2].replace('#', '').strip() for k in df.columns] + return df, units + def _newformat(fname): df = pd.read_fwf(fname, header=0, widths=[20]*15) # find all units @@ -54,6 +61,8 @@ def ReadFileHAWCStab2Header(fname, widths): with open(fname) as f: line = f.readline() + if len(line) > 800: + return _withgradients(fname) if len(line) > 200: return _newformat(fname) else: @@ -99,7 +108,7 @@ class results(object): return res def load_pwr_df(self, fname): - return ReadFileHAWCStab2Header(fname, [20]*15) + return ReadFileHAWCStab2Header(fname) def load_cmb(self, fname): cmb = np.loadtxt(fname) @@ -341,12 +350,42 @@ class ReadControlTuning(object): else: self.parse_line(line, controller) - # set some parameters to zero for the linear case + # set some parameters to zero for the linear case, or when aerodynamic + # gain scheduling is not used if not hasattr(self.pi_pitch_reg3, 'K2'): setattr(self.pi_pitch_reg3, 'K2', 0.0) + if not hasattr(self.aero_damp, 'Kp2'): + setattr(self.aero_damp, 'Kp2', 0.0) + if not hasattr(self.aero_damp, 'Ko1'): + setattr(self.aero_damp, 'Ko1', 0.0) if not hasattr(self.aero_damp, 'Ko2'): setattr(self.aero_damp, 'Ko2', 0.0) + def parameters2tags(self): + """Convert the tuning parameters into a dictionary whos keys are + compatible with tag names in a HAWC2 master file. + """ + + tune_tags = {} + + tune_tags['[pi_gen_reg1.K]'] = self.pi_gen_reg1.K + + tune_tags['[pi_gen_reg2.I]'] = self.pi_gen_reg2.I + tune_tags['[pi_gen_reg2.Kp]'] = self.pi_gen_reg2.Kp + tune_tags['[pi_gen_reg2.Ki]'] = self.pi_gen_reg2.Ki + tune_tags['[pi_gen_reg2.Kd]'] = 0.0 + + tune_tags['[pi_pitch_reg3.Kp]'] = self.pi_pitch_reg3.Kp + tune_tags['[pi_pitch_reg3.Ki]'] = self.pi_pitch_reg3.Ki + tune_tags['[pi_pitch_reg3.K1]'] = self.pi_pitch_reg3.K1 + tune_tags['[pi_pitch_reg3.K2]'] = self.pi_pitch_reg3.K2 + + tune_tags['[aero_damp.Kp2]'] = self.aero_damp.Kp2 + tune_tags['[aero_damp.Ko1]'] = self.aero_damp.Ko1 + tune_tags['[aero_damp.Ko2]'] = self.aero_damp.Ko2 + + return tune_tags + if __name__ == '__main__':