def _main_func(self, path2edifile): """ test function should be successful with a default path2edifile :return: """ edifile_name = os.path.basename(path2edifile) tmpdir = edifile_name[:-4] + "_dir" # remove the trailing .edi tmp_save_path = os.path.join(self._output_dir, tmpdir) ufun.clean_recreate(tmp_save_path) # create data file ocd = mtoc1d.Data() # create an object and assign values to arguments ocd.write_data_file( edi_file=path2edifile, mode='det', # mode, can be te, tm, det (for res/phase) or tez, tmz, zdet for real/imag impedance tensor values save_path=tmp_save_path, res_errorfloor=5, # percent error floor phase_errorfloor=1, # error floor in degrees z_errorfloor=2.5, remove_outofquadrant=True) # create model file ocm = mtoc1d.Model( n_layers=100, # number of layers target_depth=10000, # target depth in metres, before padding z1_layer=10 # first layer thickness in metres ) ocm.write_model_file(save_path=tmp_save_path) # create startup file ocs = mtoc1d.Startup( data_fn=ocd. data_fn, # basename of data file *default* is Occam1DDataFile model_fn=ocm. model_fn, # basename for model file *default* is Model1D max_iter=200, # maximum number of iterations to run target_rms=0.0) ocs.write_startup_file() return tmp_save_path
# edi path and file name edipath = r'/home/workshop/MT/Occam1d/edi' edifilename = '07E1_AMT.edi' # create data file ocd = mtoc1d.Data() #create an object and assign values to arguments ocd.write_data_file( edi_file=op.join(edipath, edifilename), mode='det', # det mode save_path=savepath, res_errorfloor=5, # error floor in percentage phase_errorfloor=1, # error floor in degrees remove_outofquadrant=True) # create model file ocm = mtoc1d.Model( n_layers=100, # number of layers target_depth=4000, # target depth in metres, before padding bottom_layer=10000, z1_layer=10 # first layer thickness in metres ) ocm.write_model_file(save_path=savepath) # create startup file ocs = mtoc1d.Startup( data_fn=ocd.data_fn, # basename of data file *default* is Occam1DDataFile model_fn=ocm.model_fn, # basename for model file *default* is Model1D max_iter=200, # maximum number of iterations to run target_rms=0.0) ocs.write_startup_file()
# --> write occam1d data file ocd = occam1d.Data() ocd.save_path = os.path.join(save_dir, mt_obj.station) ocd.write_data_file(rp_tuple=rp_tup, mode="det", res_err=10, phase_err=2.5) data_tm_fn = ocd.data_fn # --> write occam1d model file ocm = occam1d.Model() ocm.save_path = ocd.save_path ocm.write_model_file(model_depth=mdm.grid_z[1:]) # --> write occam1d startup file ocs = occam1d.Startup() ocs.data_fn = data_tm_fn ocs.model_fn = ocm.model_fn ocs.save_path = ocd.save_path ocs.max_iter = iter_num + 1 ocs.write_startup_file() # --> run occam1d occam1d.Run(ocs.startup_fn, occam_path=opath, mode="Det") try: iter_fn = os.path.join(ocd.save_path, "Det_{0}.iter".format(iter_num)) resp_fn = os.path.join(ocd.save_path, "Det_{0}.resp".format(iter_num)) ocm.read_iter_file(iter_fn)
n_sample = 50000 #number of sample for training #----------------------------------------------------------------------------------------------------------------------- savepath = os.path.join(current_path, fold_train) if True: #create the training dataset for cnn model if not os.path.exists(savepath): os.mkdir(savepath) savepath_m = os.path.join(savepath,'mask') #save model if not os.path.exists(savepath_m): os.mkdir(savepath_m) savepath_d = os.path.join(savepath,'data') #save app-resisitivity if not os.path.exists(savepath_d): os.mkdir(savepath_d) ocd = occam1d.Data() ocd.write_data_file(edi_file=edi_file, mode='det',save_path=savepath, res_errorfloor=4,phase_errorfloor=2, remove_outofquadrant=True) ocm = occam1d.Model(n_layers=n_layers, target_depth=50000,bottom_layer=100000,z1_layer=20) ocm.write_model_file(save_path=savepath) ocs = occam1d.Startup(data_fn=ocd.data_fn,model_fn=ocm.model_fn,max_iter=1,target_rms=0.0) for i in range(0,n_sample): #generate resistivity model and forward res_i = un.res_generator_0(ocm.num_params) save_startup_fn = f'OccamStartup1D_{i}' save_appres_fn = f'occam1D_{i}' ocs.write_startup_file_Jon(save_path=savepath, save_fn=save_startup_fn, res_i=res_i) subprocess.Popen([occam1d_path, '-F', save_startup_fn, save_appres_fn], cwd=savepath).wait() shutil.move(os.path.join(savepath,save_startup_fn), os.path.join(savepath_m,save_startup_fn)) shutil.move(os.path.join(savepath,save_appres_fn+'_0.resp'), os.path.join(savepath_d,save_appres_fn+'_0.resp')) print(f'Done: {n_sample} samples have been generated!')
def apply(self): """ Apply. Returns ------- None. """ parm = {} parm['tdepth'] = tonumber(self.targetdepth.text()) parm['nlayers'] = tonumber(self.nlayers.text()) parm['blayer'] = tonumber(self.bottomlayer.text()) parm['alayer'] = tonumber(self.airlayer.text()) parm['z1layer'] = tonumber(self.z1layer.text()) parm['miter'] = tonumber(self.maxiter.text()) parm['trms'] = tonumber(self.targetrms.text()) parm['rerr'] = tonumber(self.errres.text(), 'data') parm['perr'] = tonumber(self.errphase.text(), 'data') parm['perrflr'] = tonumber(self.errfloorphase.text()) parm['rerrflr'] = tonumber(self.errfloorres.text()) if -999 in parm.values(): return mode = self.combomode.currentText() i = self.combobox1.currentText() edi_file = self.data[i].fn save_path = edi_file[:-4] + '-' + mode if os.path.exists(save_path): r = glob.glob(save_path + r'\*') for i in r: os.remove(i) else: os.makedirs(save_path) d1 = occam1d.Data() d1.write_data_file(edi_file=edi_file, mode=mode, save_path=save_path, res_err=parm['rerr'], phase_err=parm['perr'], res_errorfloor=parm['rerrflr'], phase_errorfloor=parm['perrflr'], remove_outofquadrant=True) m1 = occam1d.Model(target_depth=parm['tdepth'], n_layers=parm['nlayers'], bottom_layer=parm['blayer'], z1_layer=parm['z1layer'], air_layer_height=parm['alayer']) m1.write_model_file(save_path=d1.save_path) s1 = occam1d.Startup(data_fn=d1.data_fn, model_fn=m1.model_fn, max_iter=parm['miter'], target_rms=parm['trms']) s1.write_startup_file() self.mmc.figure.clear() self.mmc.figure.set_facecolor('r') self.mmc.figure.suptitle('Busy, please wait...', fontsize=14, y=0.5) # ax = self.mmc.figure.gca() # ax.text(0.5, 0.5, 'Busy, please wait...') self.mmc.figure.canvas.draw() QtWidgets.QApplication.processEvents() occam_path = os.path.dirname(__file__)[:-2] + r'\bin\occam1d.exe' occam1d.Run(s1.startup_fn, occam_path, mode='TE') self.mmc.figure.set_facecolor('w') allfiles = glob.glob(save_path + r'\*.resp') self.hs_profnum.setMaximum(len(allfiles)) self.hs_profnum.setMinimum(1) self.change_band()
def modelling(datadir): """ modelling """ edi_file = os.path.join(datadir, r"synth02.edi") save_path = os.path.join(datadir, 'TM') allfiles = glob.glob(save_path + '\\*.*') for i in allfiles: os.remove(i) try: os.remove(save_path + '\\Model1D') os.remove(save_path + '\\OccamStartup1D') except: pass d1 = occam1d.Data() d1.write_data_file(edi_file=edi_file, mode='TE', save_path=save_path, res_err='data', phase_err='data', res_errorfloor=4., phase_errorfloor=2., remove_outofquadrant=True) m1 = occam1d.Model(target_depth=40000, n_layers=100, bottom_layer=100000, z1_layer=10) m1.write_model_file(save_path=d1.save_path) #--> make a startup file s1 = occam1d.Startup(data_fn=d1.data_fn, model_fn=m1.model_fn, max_iter=200, target_rms=1.0) s1.write_startup_file() #--> run occam1d from python occam_path = r"C:\Work\Programming\pygmi\pygmi\bin\occam1d.exe" occam1d.Run(s1.startup_fn, occam_path, mode='TM') #--plot the L2 curve # l2 = occam1d.PlotL2(d1.save_path, m1.model_fn, # fig_dpi=100, # fig_size=(2,2) # ) #--> see that iteration 7 is the optimum model to plot iterfn = os.path.join(save_path, 'TM_005.iter') respfn = os.path.join(save_path, 'TM_005.resp') p1 = occam1d.Plot1DResponse( data_te_fn=d1.data_fn, model_fn=m1.model_fn, iter_te_fn=iterfn, resp_te_fn=respfn, # depth_limits=(0,20), fig_dpi=100, fig_size=(2, 2)) oc1m = occam1d.Model(model_fn=m1.model_fn) allfiles = glob.glob(save_path + '\*.iter') roughness = [] rms = [] for iterfn in allfiles: oc1m.read_iter_file(iterfn) roughness.append(float(oc1m.itdict['Roughness Value'])) rms.append(float(oc1m.itdict['Misfit Value'])) roughness.pop(0) rms.pop(0) plt.plot(roughness, rms) plt.xlabel('Roughness') plt.ylabel('RMS') plt.show() plt.plot(rms) plt.xlabel('Iteration') plt.ylabel('RMS') plt.show() iterfn = os.path.join(save_path, 'TM_005.iter') respfn = os.path.join(save_path, 'TM_005.resp') oc1m.read_iter_file(iterfn) oc1d = occam1d.Data(data_fn=d1.data_fn) oc1d.read_resp_file(respfn) depths = [] res = [] for i, val in enumerate(oc1m.model_res[:, 1]): if i == 0: continue if i > 1: depths.append(-oc1m.model_depth[i - 1]) res.append(val) depths.append(-oc1m.model_depth[i]) res.append(val) plt.plot(res, depths) plt.xlabel('Res') plt.ylabel('Depth') plt.show() plt.plot(1 / oc1d.freq, oc1d.data['resxy'][0], 'bs') plt.plot(1 / oc1d.freq, oc1d.data['resxy'][2], 'r') plt.xscale('log') plt.yscale('log') plt.grid(True) plt.show() plt.plot(1 / oc1d.freq, oc1d.data['phasexy'][0], 'bs') plt.plot(1 / oc1d.freq, oc1d.data['phasexy'][2], 'r') plt.xscale('log') plt.yscale('log') plt.grid(True) plt.show() breakpoint()