diff --git a/src/paveit/datamodels/data.py b/src/paveit/datamodels/data.py index fadea36..8ee302a 100644 --- a/src/paveit/datamodels/data.py +++ b/src/paveit/datamodels/data.py @@ -37,7 +37,6 @@ class DataSheartest(RawData): N = ListField(IntField()) s_vert_1 = ListField(FloatField()) s_vert_2 = ListField(FloatField()) - s_vert_sum = ListField(FloatField(), required=False) s_piston = ListField(FloatField(), required=False) s_hor_1 = ListField(FloatField(), required=False) s_hor_2 = ListField(FloatField(), required=False) diff --git a/src/paveit/labtest/base.py b/src/paveit/labtest/base.py index b2db518..1dc49a3 100644 --- a/src/paveit/labtest/base.py +++ b/src/paveit/labtest/base.py @@ -201,7 +201,7 @@ class DataSineLoad(): for col in [ 's_hor_sum', 's_hor_1', 's_hor_2', 's_vert_sum', 's_vert_1', - 's_vert_2' + 's_vert_2', 's_piston', 'extension', ]: if col in self.data.columns: self.data[col] = self.data[col].mul(self.unit_s) @@ -232,12 +232,16 @@ class DataSineLoad(): cols = self.data.columns if not 's_hor_sum' in cols: - self.data['s_hor_sum'] = self.data[['s_hor_1', - 's_hor_2']].sum(axis=1) + if ('s_hor_1' in self.data.columns) & ('s_hor_2' + in self.data.columns): + self.data['s_hor_sum'] = self.data[['s_hor_1', + 's_hor_2']].sum(axis=1) if not 's_vert_sum' in cols: - self.data['s_vert_sum'] = self.data[['s_vert_1', - 's_vert_2']].sum(axis=1) + if ('s_vert_1' in self.data.columns) & ('s_vert_2' + in self.data.columns): + self.data['s_vert_sum'] = self.data[['s_vert_1', + 's_vert_2']].sum(axis=1) def _post_opt_data(self): #set dtypes: diff --git a/src/paveit/labtest/sheartest.py b/src/paveit/labtest/sheartest.py index 4e2a4e2..039d889 100644 --- a/src/paveit/labtest/sheartest.py +++ b/src/paveit/labtest/sheartest.py @@ -79,11 +79,12 @@ class ShearTest(DataSineLoad): self.col_as_float = ['T', 'F', 's_piston', 's_hor_1', 's_hor_2'] self.val_col_names = [ - 'time', 'T', 'f', 'sigma_normal', 'extension', 'N', 'F', 's_hor_1', - 's_hor_2', 's_vert_1', 's_vert_2' + 'time', 'T', 'f', 'sigma_normal', 'extension', 'N', 'F', + 's_vert_1', 's_vert_2' ] - self.round_values = [('T', 1), ('sigma_normal', 1), ('f', 1)] + self.round_values = [('T', 1), ('sigma_normal', 1), ('f', 1), + ('extension', 6)] self.columns_analyse = [ 'F', 's_vert_sum', 's_vert_1', 's_vert_2', 's_hor_1', 's_hor_2', @@ -91,9 +92,7 @@ class ShearTest(DataSineLoad): ] # Header names after standardization; check if exists - self.val_header_names = [ - 'speciment_height', 'speciment_diameter', 'broken' - ] + self.val_header_names = ['speciment_diameter', 'broken'] self.number_of_load_cycles_for_analysis = 5 @@ -172,9 +171,8 @@ class ShearTestExtension(ShearTest): time=data.index, F=list(data['F']), N=list(data['N']), - s_vert_1=list(data['s_hor_1']), - s_vert_2=list(data['s_hor_2']), - s_vert_sum=list(data['s_hor_sum']), + s_vert_1=list(data['s_vert_1']), + s_vert_2=list(data['s_vert_2']), ) # add optional datas @@ -230,74 +228,77 @@ class ShearTestExtension(ShearTest): Calculate Results """ - self._logger.info('run _calc base') - print('run BASE') + self._logger.info('run _calc') self.fit = [] for idx_data, data in enumerate(self.data): - if data is None: continue + try: + if data is None: continue - data.index = data.index - data.index[0] + data.index = data.index - data.index[0] - res_temp = {} - res_temp['idx'] = idx_data + res_temp = {} + res_temp['idx'] = idx_data - # Fitting - freq = data['f'].mean() - sigma_normal = data['sigma_normal'].mean() - T = data['T'].mean() - extension = data['extension'].mean() + # Fitting + freq = data['f'].mean() + sigma_normal = data['sigma_normal'].mean() + T = data['T'].mean() + extension = data['extension'].mean() - x = data.index.values + x = data.index.values - for idxcol, col in enumerate(self.columns_analyse): + for idxcol, col in enumerate(self.columns_analyse): - if not col in data.columns: continue + if not col in data.columns: continue - y = data[col].values + y = data[col].values - res = fit_cos(x, y, freq=freq) + res = fit_cos(x, y, freq=freq) - for key, value in res.items(): - res_temp[f'fit_{col}_{key}'] = value + for key, value in res.items(): + res_temp[f'fit_{col}_{key}'] = value - res_temp[f'fit_{col}_max'] = max(y) - res_temp[f'fit_{col}_min'] = min(y) + res_temp[f'fit_{col}_max'] = max(y) + res_temp[f'fit_{col}_min'] = min(y) - # add more metadata - res_temp['f_set'] = freq - res_temp['sigma_normal'] = sigma_normal - res_temp['T_set'] = T - res_temp['extension'] = extension - res_temp['broken'] = self.metadata['broken'] + # add more metadata + res_temp['f_set'] = freq + res_temp['sigma_normal'] = sigma_normal + res_temp['T_set'] = T + res_temp['extension'] = extension + res_temp['broken'] = self.metadata['broken'] - res_temp['N_from'] = int(data['N'].min()) - res_temp['N_to'] = int(data['N'].max()) - res_temp['N_tot'] = int(self.max_N_in_data[idx_data]) + res_temp['N_from'] = int(data['N'].min()) + res_temp['N_to'] = int(data['N'].max()) + res_temp['N_tot'] = int(self.max_N_in_data[idx_data]) - res_temp['n_samples_per_cycle'] = int( - len(data) / (res_temp['N_to'] - res_temp['N_from'] + 1)) + res_temp['n_samples_per_cycle'] = int( + len(data) / (res_temp['N_to'] - res_temp['N_from'] + 1)) - ## Schersteifigkeit berechnen - deltaF = res_temp['fit_F_amp'] - deltaS = res_temp['fit_s_vert_sum_amp'] + ## Schersteifigkeit berechnen + deltaF = res_temp['fit_F_amp'] + deltaS = res_temp['fit_s_vert_sum_amp'] - A = np.pi * self.metadata['speciment_diameter']**2 / 4 - tau = deltaF / A - gamma = deltaS / self.gap_width + A = np.pi * self.metadata['speciment_diameter']**2 / 4 + tau = deltaF / A + gamma = deltaS / self.gap_width - res_temp['G'] = tau / gamma + res_temp['G'] = tau / gamma - #metadaten - #for c in ['T', 'extension', 'sigma_normal', 'f']: - # res_temp[c] = res_temp[c][0] + #metadaten + #for c in ['T', 'extension', 'sigma_normal', 'f']: + # res_temp[c] = res_temp[c][0] - self.fit.append(res_temp) + self.fit.append(res_temp) - if (self.debug) & (len(self.fit) > 5): - break + if (self.debug) & (len(self.fit) > 5): + break + + except Exception as e: + self._logger.critical(e, exc_info=True) self.fit = pd.DataFrame.from_records(self.fit) @@ -401,6 +402,52 @@ class ShearTestExtensionLaborHart(ShearTestExtension): self.data = data self.metadata.update(meta) + # log infos + self._logger.info(self.metadata) + self._logger.info(self.data.head()) + + +class ShearTestExtensionTUDresden(ShearTestExtension): + + def _define_units(self): + + self.unit_s = 1 / 1000. #mm + self.unit_F = 1.0 #N + self.unit_t = 1.0 #s + + def update_parameter(self): + + self.meta_names_of_parameter = { + 't': ['TIME'], + 'speciment_diameter': ['Diameter of specimen\r\n'], + } #list of names + + self.data_column_names = { + 'time': ['TIME'], + 'f': ['soll frequency'], + 'T': ['soll temperature'], + 'sigma_normal': ['soll sigma'], + 'extension': ['soll extension'], + 'F': ['vertical load from hydraulic pressure'], + 's_vert_1': ['Vertical position from LVDT 1'], + 's_vert_2': ['Vertical position from LVDT 2'], + 's_piston': ['vertical position from hydraulic pressure'], + 'N': ['Number of vertical cycles'], + } + + def _process_data(self): + + meta, data = read_geosys( + self.data, '015', metadata_ids=['001', '003', '005', '007', '009']) + + #convert sigma + f = 900.0 / 355.0 + data['soll sigma'] = data['soll sigma'].mul(f) + + #define in class + self.data = data.reset_index() + self.metadata.update(meta) + # log infos self._logger.info(self.metadata) self._logger.info(self.data.head()) \ No newline at end of file