Base Model für CITT erstellt, PTM Dortmund ergänzt, Tests hinzugefügt
This commit is contained in:
@@ -5,6 +5,7 @@ from csv import reader
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from paveit.labtest import DataSineLoad
|
||||
from torch import isin
|
||||
|
||||
|
||||
class CITTBase(DataSineLoad):
|
||||
@@ -15,9 +16,9 @@ class CITT_KIT(DataSineLoad):
|
||||
def _calc(self):
|
||||
return (self.df.mean().mean(), self.df.max().max())
|
||||
|
||||
def _bytes_to_df(self):
|
||||
def _process_data(self):
|
||||
logger.debug('convert bytes to pandas.DataFrame')
|
||||
|
||||
|
||||
self.data.seek(0)
|
||||
with io.TextIOWrapper(self.data, encoding='latin-1') as read_obj:
|
||||
csv_reader = reader(read_obj, delimiter=';')
|
||||
@@ -93,29 +94,50 @@ class CITT_KIT(DataSineLoad):
|
||||
#res = res.sort_values(['f', 'ZEIT'])
|
||||
|
||||
#define in class
|
||||
self.df = res.reset_index()
|
||||
|
||||
class CITT_PTMDortmund(DataSineLoad):
|
||||
def _calc(self):
|
||||
return (self.df.mean().mean(), self.df.max().max())
|
||||
self.data = res.reset_index()
|
||||
|
||||
def _bytes_to_df(self):
|
||||
class CITT_PTMDortmund(DataSineLoad):
|
||||
|
||||
def _define_units(self):
|
||||
|
||||
self.unit_s = 1 #mm
|
||||
self.unit_F = 1000. #N
|
||||
self.unit_t = 1. #s
|
||||
|
||||
def update_parameter(self):
|
||||
|
||||
self.meta_names_of_parameter = {'sigma': ['Max. Spannung', 'Max Stress'],
|
||||
'f': ['Frequenz', 'Frequency'],
|
||||
'T': ['Versuchstemperatur', 'Target Test Temperature'],
|
||||
'Nfrom': ['Erster Aufzeichnungslastwechsel', 'Start Cycle'],
|
||||
'Nto': ['Letzer Aufzeichnungslastwechsel', 'Last Cycle'],
|
||||
't': ['Zeitfolgen', 'Time Series'],
|
||||
'speciment_diameter': ['Durchmesser (mm)', 'Diameter (mm)'],
|
||||
'speciment_height': ['Länge (mm)', 'Length (mm)'],
|
||||
} #list of names
|
||||
|
||||
self.data_column_names = {
|
||||
'time': ['Time Series'],
|
||||
'F': ['Load Series'],
|
||||
's_hor_1': ['LVDT1 Series'],
|
||||
's_hor_2': ['LVDT2 Series'],
|
||||
}
|
||||
|
||||
def _process_data(self):
|
||||
res = []
|
||||
|
||||
|
||||
xl = pd.ExcelFile(self.data)
|
||||
num_sheets = len(xl.sheet_names)
|
||||
|
||||
print(num_sheets)
|
||||
|
||||
|
||||
diameter = []
|
||||
height = []
|
||||
|
||||
|
||||
|
||||
for sheetid in range(num_sheets):
|
||||
temp = pd.read_excel(self.data, sheetid, skiprows=97)
|
||||
temp = temp.drop(index=0)
|
||||
|
||||
#convert data to numerical data
|
||||
|
||||
#convert data to numerical data
|
||||
for col in temp.columns:
|
||||
temp[col] = pd.to_numeric(temp[col])
|
||||
|
||||
@@ -124,53 +146,118 @@ class CITT_PTMDortmund(DataSineLoad):
|
||||
|
||||
meta = pd.read_excel(self.data, sheetid,
|
||||
skiprows=1,
|
||||
nrows=90)
|
||||
nrows=80)
|
||||
|
||||
meta = meta[meta.columns[[0, 2]]]
|
||||
meta = meta.set_index(
|
||||
meta.columns[0]).to_dict()[meta.columns[1]]
|
||||
meta.columns[0])
|
||||
|
||||
temp['sigma'] = float(meta['Max. Spannung'])
|
||||
temp['T'] = float(meta['Versuchstemperatur'])
|
||||
freq = float(meta['Frequenz'])
|
||||
dt = 1 / freq
|
||||
temp['f'] = freq
|
||||
meta = meta.dropna(axis=0)
|
||||
meta = meta[meta.columns[0]]
|
||||
|
||||
meta = meta.to_dict()
|
||||
|
||||
#remove whitespace in dict keys:
|
||||
meta = {x.strip(): v for x, v in meta.items() if isinstance(x, str)}
|
||||
|
||||
Nfrom = int(meta['Erster Aufzeichnungslastwechsel'])
|
||||
Nto = int(meta['Letzer Aufzeichnungslastwechsel'])
|
||||
frequency_test = None
|
||||
# add metadata to dataframe
|
||||
for par in ['sigma', 'f', 'T']:
|
||||
names = self.meta_names_of_parameter[par]
|
||||
v = None
|
||||
for name in names:
|
||||
try:
|
||||
v = np.round(float(meta[name]),5)
|
||||
|
||||
if par == 'f':
|
||||
v = np.round(v,2)
|
||||
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
assert v is not None
|
||||
temp[par] = v
|
||||
|
||||
if par == 'f':
|
||||
frequency_test = v
|
||||
|
||||
# read additional parameters
|
||||
names = self.meta_names_of_parameter['Nfrom']
|
||||
for name in names:
|
||||
try:
|
||||
Nfrom = int(meta[name])
|
||||
break
|
||||
except:
|
||||
Nfrom = None
|
||||
assert Nfrom is not None
|
||||
|
||||
names = self.meta_names_of_parameter['Nto']
|
||||
for name in names:
|
||||
try:
|
||||
Nto = int(meta[name])
|
||||
break
|
||||
except:
|
||||
Nto = None
|
||||
assert Nto is not None
|
||||
|
||||
#add cycle number to dataframe
|
||||
time_idx = temp['Zeitfolgen'].values
|
||||
N = np.zeros_like(time_idx)
|
||||
self._logger.debug(len(N))
|
||||
|
||||
names = self.meta_names_of_parameter['t']
|
||||
for name in names:
|
||||
try:
|
||||
time_idx = temp[name].values
|
||||
break
|
||||
except:
|
||||
time_idx = None
|
||||
assert time_idx is not None
|
||||
|
||||
temp['N'] = 0
|
||||
|
||||
self._logger.info(f'cycles from {Nfrom} to {Nto}')
|
||||
|
||||
#BUG: Ist in Messdatei falsch definiert und wird von PTM angepasst. '''
|
||||
#for cycle in range(Nfrom, Nto+1):
|
||||
for cycle in range(10):
|
||||
|
||||
|
||||
dt = 1.0/frequency_test
|
||||
|
||||
tmax = dt
|
||||
max_timeindex = max(time_idx)
|
||||
|
||||
cycle = 0
|
||||
while tmax < max_timeindex:
|
||||
# time window
|
||||
tmin = (cycle) * dt
|
||||
tmin = (cycle) * dt
|
||||
tmax = (cycle + 1) * dt
|
||||
|
||||
#filter data
|
||||
idx = temp[(time_idx >= tmin)
|
||||
& (time_idx < tmax)].index
|
||||
|
||||
#FIX: siehe bug oben
|
||||
if any(idx)>=500:
|
||||
idx = idx[idx<500]
|
||||
|
||||
|
||||
#set cycle number
|
||||
N[idx] = cycle
|
||||
temp.loc[idx, 'N'] = cycle
|
||||
|
||||
cycle += 1
|
||||
|
||||
temp['N'] = N
|
||||
|
||||
# add diameter and height to list
|
||||
diameter.append(float(meta['Durchmesser (mm)']))
|
||||
height.append(float(meta['Länge (mm)']))
|
||||
|
||||
names = self.meta_names_of_parameter['speciment_diameter']
|
||||
for name in names:
|
||||
try:
|
||||
v = float(meta[name])
|
||||
break
|
||||
except:
|
||||
v = None
|
||||
assert v is not None
|
||||
diameter.append(v)
|
||||
|
||||
names = self.meta_names_of_parameter['speciment_height']
|
||||
for name in names:
|
||||
try:
|
||||
v = float(meta[name])
|
||||
break
|
||||
except:
|
||||
v = None
|
||||
assert v is not None
|
||||
height.append(v)
|
||||
|
||||
#append data to final dataframe
|
||||
res.append(temp)
|
||||
|
||||
@@ -178,15 +265,18 @@ class CITT_PTMDortmund(DataSineLoad):
|
||||
res = pd.concat(res)
|
||||
|
||||
# add data from speciment to metadata
|
||||
|
||||
#if not 'speciment_diameter' in self.metadata:
|
||||
# self.metadata['speciment_diameter'] = np.mean(diameter)
|
||||
#if not 'speciment_height' in self.metadata:
|
||||
# self.metadata['speciment_height'] = np.mean(height)
|
||||
|
||||
|
||||
if not 'diameter' in self.metadata:
|
||||
self.metadata['diameter'] = np.mean(diameter)
|
||||
if not 'height' in self.metadata:
|
||||
self.metadata['height'] = np.mean(height)
|
||||
|
||||
|
||||
#define in class
|
||||
self.df = res.reset_index()
|
||||
|
||||
self.data = res.reset_index()
|
||||
self.metadata.update(meta)
|
||||
|
||||
# log infos
|
||||
logger.debug(self.metadata)
|
||||
logger.debug(self.df.head())
|
||||
self._logger.debug(self.metadata)
|
||||
self._logger.debug(self.data.head())
|
||||
Reference in New Issue
Block a user