def set_real_data_survey(self): """ Model of conductivity field. Constant backgorund with one more conductive and one less conductive cylinder (full 2D case). :return: None """ file_in = os.path.join(src_dir, '..', '..','data', 'ert_mereni', 'komora_1','lhp.2dm') raw_df = pd.read_csv(file_in, skiprows=18, header=None, sep='\t') # remove last empty column raw_df = raw_df.dropna(axis=1) # name columns raw_df.columns = ['ca', 'cb', 'pa', 'pb', 'array', 'I', 'V', 'EP', 'AppRes', 'std'] # remove wrong readings raw_df = raw_df.drop(raw_df[raw_df['V'] < 0].index) raw_df['std'] = raw_df['std'] * 0.01 /10 # input error is in percent # I [mA], V [mV] measured_df = raw_df.iloc[:, [0,1,2,3,5,6,7,9]] print(measured_df.iloc[:,0]) raw_df['idx'] = raw_df['ca']*100 + raw_df['cb'] def od(a, b): return 1.0 / (raw_df[b] - raw_df[a]) raw_df['k'] = 1.0 / (od('ca', 'pa') - od('pa', 'cb') - od('ca', 'pb') + od('pb', 'cb')) raw_df['res'] = 2* np.pi * raw_df['k'] * raw_df['V'] / raw_df['I'] /raw_df['AppRes'] eps = 0.005 # rounding error of input data I = raw_df['I'] V = raw_df['V'] raw_df['round_rel_err'] = np.abs(2 * (V + I) * eps / ( I**2 - eps**2) * I / V ) #raw_df['res_min'] = 2 * np.pi * raw_df['k'] * (raw_df['V'] - 0.01) / (raw_df['I'] + 0.01) /raw_df['AppRes'] #raw_df['res_max'] = 2 * np.pi * raw_df['k'] * (raw_df['V'] + 0.01) / (raw_df['I'] - 0.01) /raw_df['AppRes'] #raw_df['app_to_res'] = raw_df['AppRes'] / raw_df['res'] # math up to +- 0.5 percent # TODO: ? meaning of std and EP # TODO: compute and use error of V / I (normalizing to I=1) from known 0.01 precision of the given values print(raw_df.iloc[127, :]) raw_df.plot(y=['round_rel_err', 'std']) #plt.show() xlim = self.xyzlim[0] n_points = max( [np.max(raw_df['ca']), np.max(raw_df['cb']), np.max(raw_df['pa']), np.max(raw_df['pb']) ] ) + 1 print(n_points) self.probe_points = inv.PointSet.line([xlim[0], 0], [xlim[1], 0], n_points) #self.survey = survey_factory.compose_1d_survey(self.probe_points, survey_factory.schlumberger_full(n_points)) self.survey = inv.Survey(self.probe_points) self.survey.read_scheme(raw_df, ['ca', 'cb', 'pa', 'pb']) self.survey.read_data(raw_df, ['res', 'round_rel_err'])
def setup_measurement(self): # Manual setup of Dipole-Dipole Survey n_points = 20 self.probe_points = inv.PointSet.line([-15, 0], [15, 0], n_points) #self.survey = survey_factory.compose_1d_survey(self.probe_points, survey_factory.schlumberger_full(n_points)) self.survey = inv.Survey(self.probe_points) #self.survey.schlumberger_inv_scheme() #self.survey.full_per_cable() self.survey.marching_cc_pair()