diff --git a/wetb/prepost/h2_vs_hs2.py b/wetb/prepost/h2_vs_hs2.py index 384174fab0787faa4af4c7083a2b2e93840cb95b..8db023d5be593aef3564f3d3806206e23647d389 100644 --- a/wetb/prepost/h2_vs_hs2.py +++ b/wetb/prepost/h2_vs_hs2.py @@ -311,10 +311,10 @@ class Sims(object): mt['[hawc2]'] = False mt['[output]'] = False mt['[copyback_files]'] = ['./*.ind', './*.pwr', './*.log', - './*.cmb', './*.bea'] + './*.cmb', './*.bea', './*.amp'] mt['[copyback_frename]'] = [mt['[res_dir]'], mt['[res_dir]'], mt['[log_dir]'], mt['[res_dir]'], - mt['[res_dir]']] + mt['[res_dir]'], mt['[res_dir]']] if mt['[hs2_bladedeform_switch]']: mt['[hs2_bladedeform]'] = 'bladedeform' else: diff --git a/wetb/prepost/hawcstab2.py b/wetb/prepost/hawcstab2.py index 8b261eec57ea9a514594a26621da2442b640eec8..ec1c7020e1ec19c6284df9b0e192472b769e6df5 100644 --- a/wetb/prepost/hawcstab2.py +++ b/wetb/prepost/hawcstab2.py @@ -28,6 +28,8 @@ class dummy(object): def __init__(self, name='dummy'): self.__name__ = name +regex_units = re.compile('(\\[.*?\\])') + def ReadFileHAWCStab2Header(fname): """ @@ -35,38 +37,31 @@ def ReadFileHAWCStab2Header(fname): includes the column number and units between square brackets. """ - 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 - units = regex.findall(''.join(df.columns)) - df.columns = [k[:-2].replace('#', '').strip() for k in df.columns] - return df, units - - def _oldformat(fname): - df = pd.read_fwf(fname, header=0, widths=[14]*13) - # find all units - units = regex.findall(''.join(df.columns)) - df.columns = [k.replace('#', '').strip() for k in df.columns] + def _read(fname, header=0, widths=[20]*15, skipfooter=0): + df = pd.read_fwf(fname, header=header, widths=widths, + skipfooter=skipfooter) + units = regex_units.findall(''.join(df.columns)) return df, units with open(fname) as f: line = f.readline() + # when gradients are included in the output if len(line) > 800: - return _withgradients(fname) - if len(line) > 200: - return _newformat(fname) + df, units = _read(fname, header=1, widths=[30]*27) + # column name has the name, unit and column number in it... + df.columns = [k[:-2].replace('#', '').strip() for k in df.columns] + return df, units + elif len(line) > 200: + df, units = _read(fname, header=0, widths=[20]*15) + # column name has the name, unit and column number in it... + df.columns = [k[:-2].replace('#', '').strip() for k in df.columns] + return df, units + # older versions of HS2 seem to have two columns less else: - return _oldformat(fname) + df, units = _read(fname, header=0, widths=[14]*13) + df.columns = [k.replace('#', '').strip() for k in df.columns] + return df, units class InductionResults(object): @@ -158,6 +153,32 @@ class results(object): self.ind = InductionResults() self.ind.read(fname) + def load_amp(self, fname): + + with open(fname) as f: + line = f.readline() + + width = 14 + nrcols = int((len(line)-1)/width) + # first columns has one extra character + # col nr1: rotor speed, col nr2: radius + widths = [width+1] + [width]*(nrcols-1) + # last line is empty + df = pd.read_fwf(fname, header=2, widths=widths, skipfooter=1) + units = regex_units.findall(''.join(df.columns)) + # no column number in the column name + # since U_x, u_y, phase and theta will be repeated as many times as + # there are modes, add the mode number in the column name + columns = [k.replace('#', '').strip() for k in df.columns] + nrmodes = int((len(columns) - 2 )/6) + for k in range(nrmodes): + for i in range(6): + j = 2+k*6+i + columns[j] = columns[j].split('.')[0] + ' nr%i' % (k+1) + df.columns = columns + + return df, units + def load_operation(self, fname): operation = np.loadtxt(fname, skiprows=1)