def activeCells(self): if getattr(self, '_activeCells', None) is None: if getattr(self, 'topofile', None) is not None: topo = np.genfromtxt(self.basePath + self.topofile, skip_header=1) # Find the active cells active = Utils.surface2ind_topo(self.mesh, topo, 'N') elif isinstance(self._staticInput, float): active = self.m0 != self._staticInput else: # Read from file active cells with 0:air, 1:dynamic, -1 static active = self.activeModel != 0 inds = np.asarray( [inds for inds, elem in enumerate(active, 1) if elem], dtype=int) - 1 self._activeCells = inds # Reduce m0 to active space if len(self.m0) > len(self._activeCells): self._m0 = self.m0[self._activeCells] return self._activeCells
def activeCells(self): if getattr(self, '_activeCells', None) is None: if getattr(self, 'topofile', None) is not None: topo = np.genfromtxt(self.basePath + self.topofile, skip_header=1) # Find the active cells active = Utils.surface2ind_topo(self.mesh, topo, 'N') elif isinstance(self._staticInput, float): active = self.m0 != self._staticInput else: # Read from file active cells with 0:air, 1:dynamic, -1 static active = self.activeModel != 0 inds = np.asarray([inds for inds, elem in enumerate(active, 1) if elem], dtype=int) - 1 self._activeCells = inds # Reduce m0 to active space self._m0 = self.m0[self._activeCells] return self._activeCells
def readUBC_DC2DLoc(fileName): from SimPEG import np """ Read UBC GIF 2D observation file and generate arrays for tx-rx location Input: :param fileName, path to the UBC GIF 2D model file Output: :param rx, tx :return Created on Thu Nov 12 13:14:10 2015 @author: dominiquef """ # Open fileand skip header... assume that we know the mesh already #============================================================================== # fopen = open(fileName,'r') # lines = fopen.readlines() # fopen.close() #============================================================================== # Load file obsfile = np.genfromtxt(fileName,delimiter=' \n',dtype=np.str,comments='!') # Check first line and figure out if 2D or 3D file format line = np.array(obsfile[0].split(),dtype=float) tx_A = [] tx_B = [] rx_M = [] rx_N = [] d = [] wd = [] for ii in range(obsfile.shape[0]): # If len==3, then simple format where tx-rx is listed on each line if len(line) == 4: temp = np.fromstring(obsfile[ii], dtype=float,sep=' ') tx_A = np.hstack((tx_A,temp[0])) tx_B = np.hstack((tx_B,temp[1])) rx_M = np.hstack((rx_M,temp[2])) rx_N = np.hstack((rx_N,temp[3])) rx = np.transpose(np.array((rx_M,rx_N))) tx = np.transpose(np.array((tx_A,tx_B))) return tx, rx, d, wd
def readUBC_DC2DModel(fileName): from SimPEG import np, mkvc """ Read UBC GIF 2DTensor model and generate 2D Tensor model in simpeg Input: :param fileName, path to the UBC GIF 2D model file Output: :param SimPEG TensorMesh 2D object :return Created on Thu Nov 12 13:14:10 2015 @author: dominiquef """ # Open fileand skip header... assume that we know the mesh already obsfile = np.genfromtxt(fileName,delimiter=' \n',dtype=np.str,comments='!') dim = np.array(obsfile[0].split(),dtype=float) temp = np.array(obsfile[1].split(),dtype=float) if len(temp) > 1: model = np.zeros(dim) for ii in range(len(obsfile)-1): mm = np.array(obsfile[ii+1].split(),dtype=float) model[:,ii] = mm model = model[:,::-1] else: if len(obsfile[1:])==1: mm = np.array(obsfile[1:].split(),dtype=float) else: mm = np.array(obsfile[1:],dtype=float) # Permute the second dimension to flip the order model = mm.reshape(dim[1],dim[0]) model = model[::-1,:] model = np.transpose(model, (1, 0)) model = mkvc(model) return model
def activeCells(self): if getattr(self, '_activeCells', None) is None: if self.topofile == 'null': self._activeCells = np.arange(mesh.nC) else: topo = np.genfromtxt(self.basePath + self.topofile, skip_header=1) # Find the active cells active = Utils.surface2ind_topo(self.mesh,topo,'N') inds = np.asarray([inds for inds, elem in enumerate(active, 1) if elem], dtype = int) - 1 self._activeCells = inds return self._activeCells
def magnetizationModel(self): """ magnetization vector """ if self.magfile == 'DEFAULT': return Magnetics.dipazm_2_xyz(np.ones(self.nC) * self.survey.srcField.param[1], np.ones(self.nC) * self.survey.srcField.param[2]) else: raise NotImplementedError("this will require you to read in a three column vector model") self._mref = Utils.meshutils.readUBCTensorModel(self.basePath + self._mrefInput, self.mesh) return np.genfromtxt(self.magfile,delimiter=' \n',dtype=np.str,comments='!')
def readUBC_DC2DModel(fileName): """ Read UBC GIF 2DTensor model and generate 2D Tensor model in simpeg Input: :param fileName, path to the UBC GIF 2D model file Output: :param SimPEG TensorMesh 2D object :return Created on Thu Nov 12 13:14:10 2015 @author: dominiquef """ from SimPEG import np, mkvc # Open fileand skip header... assume that we know the mesh already obsfile = np.genfromtxt(fileName,delimiter=' \n',dtype=np.str,comments='!') dim = np.array(obsfile[0].split(),dtype=float) temp = np.array(obsfile[1].split(),dtype=float) if len(temp) > 1: model = np.zeros(dim) for ii in range(len(obsfile)-1): mm = np.array(obsfile[ii+1].split(),dtype=float) model[:,ii] = mm model = model[:,::-1] else: if len(obsfile[1:])==1: mm = np.array(obsfile[1:].split(),dtype=float) else: mm = np.array(obsfile[1:],dtype=float) # Permute the second dimension to flip the order model = mm.reshape(dim[1],dim[0]) model = model[::-1,:] model = np.transpose(model, (1, 0)) model = mkvc(model) return model
def readUBC_DC2Dobs(fileName): """ ------- NEEDS TO BE UPDATED ------ Read UBC GIF 2D observation file and generate arrays for tx-rx location Input: :param fileName, path to the UBC GIF 2D model file Output: :param rx, tx :return Created on Thu Nov 12 13:14:10 2015 @author: dominiquef """ from SimPEG import np # Load file obsfile = np.genfromtxt(fileName,delimiter=' \n',dtype=np.str,comments='!') # Check first line and figure out if 2D or 3D file format line = np.array(obsfile[0].split(),dtype=float) tx_A = [] tx_B = [] rx_M = [] rx_N = [] d = [] wd = [] for ii in range(obsfile.shape[0]): # If len==3, then simple format where tx-rx is listed on each line if len(line) == 4: temp = np.fromstring(obsfile[ii], dtype=float,sep=' ') tx_A = np.hstack((tx_A,temp[0])) tx_B = np.hstack((tx_B,temp[1])) rx_M = np.hstack((rx_M,temp[2])) rx_N = np.hstack((rx_N,temp[3])) rx = np.transpose(np.array((rx_M,rx_N))) tx = np.transpose(np.array((tx_A,tx_B))) return tx, rx, d, wd
[mshfile, obsfile, modfile, magfile, topofile] = PF.BaseMag.read_MAGfwr_inp(inpfile) # Load mesh file mesh = Utils.meshutils.readUBCTensorMesh(mshfile) # Load model file model = Utils.meshutils.readUBCTensorModel(modfile, mesh) # Load in topofile or create flat surface if topofile == 'null': actv = np.ones(mesh.nC) else: topo = np.genfromtxt(topofile, skip_header=1) actv = PF.Magnetics.getActiveTopo(mesh, topo, 'N') Utils.writeUBCTensorModel('nullcell.dat', mesh, actv) # Load in observation file [B, M, dobs] = PF.BaseMag.readUBCmagObs(obsfile) rxLoc = dobs[:, 0:3] #rxLoc[:,2] += 5 # Temporary change for test ndata = rxLoc.shape[0] # Load GOCAD surf tsfile = 'SphereA.ts' [vrtx, trgl] = PF.BaseMag.read_GOCAD_ts(tsfile)
def readUBC_DC3Dobs(fileName): from SimPEG import np """ Read UBC GIF DCIP 3D observation file and generate arrays for tx-rx location Input: :param fileName, path to the UBC GIF 3D obs file Output: :param rx, tx, d, wd :return Created on Mon December 7th, 2015 @author: dominiquef """ # Load file obsfile = np.genfromtxt(fileName,delimiter=' \n',dtype=np.str,comments='!') # Pre-allocate Tx = [] Rx = [] d = [] wd = [] # Countdown for number of obs/tx count = 0 for ii in range(obsfile.shape[0]): if not obsfile[ii]: continue # First line is transmitter with number of receivers if count==0: temp = (np.fromstring(obsfile[ii], dtype=float,sep=' ').T) count = int(temp[-1]) temp = np.reshape(temp[0:-1],[2,3]).T Tx.append(temp) rx = [] continue temp = np.fromstring(obsfile[ii], dtype=float,sep=' ') rx.append(temp) count = count -1 # Reach the end of if count == 0: temp = np.asarray(rx) Rx.append(temp[:,0:6]) # Check for data + uncertainties if temp.shape[1]==8: d.append(temp[:,6]) wd.append(temp[:,7]) # Check for data only elif temp.shape[1]==7: d.append(temp[:,6]) return Tx, Rx, d, wd
#from readUBC_DC2DMesh import readUBC_DC2DMesh #from readUBC_DC2DModel import readUBC_DC2DModel #from readUBC_DC2DLoc import readUBC_DC2DLoc #from convertObs_DC3D_to_2D import convertObs_DC3D_to_2D #from readUBC_DC3Dobs import readUBC_DC3Dobs #%% home_dir = 'C:\\Users\\dominiquef.MIRAGEOSCIENCE\\ownCloud\\Research\\MtIsa\\Data' #msh_file = 'Mesh_2D.msh' #mod_file = 'Model_2D.con' DCobs_file = 'data_Z.txt' IPobs_file = 'ip3d_all_QC.ip' topo_file = 'MIM_SRTM_Local.topo' dsep = '\\' topo = np.genfromtxt(home_dir + dsep + topo_file, skip_header=1) Ftopo = NearestNDInterpolator(topo[:, :2], topo[:, 2]) # Forward solver # Number of padding cells to remove from plotting padc = 15 # Plotting parameters xmin, xmax = 10500, 13000 zmin, zmax = -600, 600 vmin, vmax = 0, 75 z = np.linspace(zmin, zmax, 4) x = np.asarray([11000, 11750, 12500]) #%% load obs file 3D
def readUBC_DC3Dobs(fileName): """ Read UBC GIF DCIP 3D observation file and generate arrays for tx-rx location Input: :param fileName, path to the UBC GIF 3D obs file Output: :param rx, tx, d, wd :return Created on Mon December 7th, 2015 @author: dominiquef """ # Load file obsfile = np.genfromtxt(fileName,delimiter=' \n',dtype=np.str,comments='!') # Pre-allocate srcLists = [] Rx = [] d = [] wd = [] zflag = True # Flag for z value provided # Countdown for number of obs/tx count = 0 for ii in range(obsfile.shape[0]): if not obsfile[ii]: continue # First line is transmitter with number of receivers if count==0: temp = (np.fromstring(obsfile[ii], dtype=float,sep=' ').T) count = int(temp[-1]) # Check if z value is provided, if False -> nan if len(temp)==5: tx = np.r_[temp[0:2],np.nan,temp[0:2],np.nan] zflag = False else: tx = temp[:-1] rx = [] continue temp = np.fromstring(obsfile[ii], dtype=float,sep=' ') if zflag: rx.append(temp[:-2]) # Check if there is data with the location if len(temp)==8: d.append(temp[-2]) wd.append(temp[-1]) else: rx.append(np.r_[temp[0:2],np.nan,temp[0:2],np.nan] ) # Check if there is data with the location if len(temp)==6: d.append(temp[-2]) wd.append(temp[-1]) count = count -1 # Reach the end of transmitter block if count == 0: rx = np.asarray(rx) Rx = DC.RxDipole(rx[:,:3],rx[:,3:]) srcLists.append( DC.SrcDipole( [Rx], tx[:3],tx[3:]) ) # Create survey class survey = DC.SurveyDC(srcLists) survey.dobs = np.asarray(d) survey.std = np.asarray(wd) return {'DCsurvey':survey}
def readUBC_DC2Dpre(fileName): """ Read UBC GIF DCIP 2D observation file and generate arrays for tx-rx location Input: :param fileName, path to the UBC GIF 3D obs file Output: DCsurvey :return Created on Mon March 9th, 2016 << Doug's 70th Birthday !! >> @author: dominiquef """ # Load file obsfile = np.genfromtxt(fileName,delimiter=' \n',dtype=np.str,comments='!') # Pre-allocate srcLists = [] Rx = [] d = [] zflag = True # Flag for z value provided for ii in range(obsfile.shape[0]): if not obsfile[ii]: continue # First line is transmitter with number of receivers temp = (np.fromstring(obsfile[ii], dtype=float,sep=' ').T) # Check if z value is provided, if False -> nan if len(temp)==5: tx = np.r_[temp[0],np.nan,np.nan,temp[1],np.nan,np.nan] zflag = False else: tx = np.r_[temp[0],np.nan,temp[1],temp[2],np.nan,temp[3]] if zflag: rx = np.c_[temp[4],np.nan,temp[5],temp[6],np.nan,temp[7]] else: rx = np.c_[temp[2],np.nan,np.nan,temp[3],np.nan,np.nan] # Check if there is data with the location d.append(temp[-1]) Rx = DC.RxDipole(rx[:,:3],rx[:,3:]) srcLists.append( DC.SrcDipole( [Rx], tx[:3],tx[3:]) ) # Create survey class survey = DC.SurveyDC(srcLists) survey.dobs = np.asarray(d) return {'DCsurvey':survey}
def readUBC_DC3Dobs(fileName, rtype = 'DC'): """ Read UBC GIF IP 3D observation file and generate survey :param string fileName:, path to the UBC GIF 3D obs file :rtype: Survey :return: DCIPsurvey """ zflag = True # Flag for z value provided # Load file if rtype == 'IP': obsfile = np.genfromtxt(fileName,delimiter=' \n',dtype=np.str,comments='IPTYPE') elif rtype == 'DC': obsfile = np.genfromtxt(fileName,delimiter=' \n',dtype=np.str,comments='!') else: print "rtype must be 'DC'(default) | 'IP'" # Pre-allocate srcLists = [] Rx = [] d = [] wd = [] # Countdown for number of obs/tx count = 0 for ii in range(obsfile.shape[0]): # Skip if blank line if not obsfile[ii]: continue # First line or end of a transmitter block, read transmitter info if count==0: # Read the line temp = (np.fromstring(obsfile[ii], dtype=float, sep=' ').T) count = int(temp[-1]) # Check if z value is provided, if False -> nan if len(temp)==5: tx = np.r_[temp[0:2],np.nan,temp[2:4],np.nan] zflag = False # Pass on the flag to the receiver loc else: tx = temp[:-1] rx = [] continue temp = np.fromstring(obsfile[ii], dtype=float,sep=' ') # Get the string # Filter out negative IP # if temp[-2] < 0: # count = count -1 # print "Negative!" # # else: # If the Z-location is provided, otherwise put nan if zflag: rx.append(temp[:-2]) # Check if there is data with the location if len(temp)==8: d.append(temp[-2]) wd.append(temp[-1]) else: rx.append(np.r_[temp[0:2],np.nan,temp[2:4],np.nan] ) # Check if there is data with the location if len(temp)==6: d.append(temp[-2]) wd.append(temp[-1]) count = count -1 # Reach the end of transmitter block, append the src, rx and continue if count == 0: rx = np.asarray(rx) Rx = DC.RxDipole(rx[:,:3],rx[:,3:]) srcLists.append( DC.SrcDipole( [Rx], tx[:3],tx[3:]) ) # Create survey class survey = DC.SurveyDC(srcLists) survey.dobs = np.asarray(d) survey.std = np.asarray(wd) return {'DCsurvey':survey}