def plot_vtk_slice(vtk_slice,theta_range=[0,360],depth_range=[0,2885],**kwargs): #-------------------------------------------------------------------------------- ''' This will plot a cross section of a .vtk file. Open the .vtk file in paraview, choose a slice, and select 'File -> export data'. This will save the data as a .csv file, which can be plotted with this function. args-------------------------------------------------------------------------- vtk_slice: the .csv file theta_range: the range in degrees you wish to plot. dtype=tuple default=[0,360] (whole earth) depth_range: the range in depth you wish to plot. dtype=tuple default=[0,2885] (whole mantle) kwargs------------------------------------------------------------------------ cmap = colormap to use dtype=string default='BlueWhiiteOrangeRed' data_range = max and min values to use in colorbar. dtype=tuple default=[-1.0,1.0] csteps = number of divisions in colorbar dtype=int default=100 cmap_direction = forward or reverse colormap dtype=string default='i' fname = filename dtype=string default='slice.pdf' rotation = number of degrees to rotate figure dtype=float default=90.0 (i.e., rotate from lat coor to colat based coor) contour = True or False ''' #get kwargs------------------------------------------------------------------- cmap_dir = '/geo/home/romaguir/utils/colors/' cmap = kwargs.get('cmap','BlueWhiteOrangeRed') cmap = cmap_dir+cmap data_range = kwargs.get('data_range',[-0.25,0.25]) csteps = kwargs.get('csteps',100) cmap_direction=kwargs.get('cmap_direction','i') fname = kwargs.get('fname','slice.pdf') rotation=kwargs.get('rotation',90.0) contour=kwargs.get('contour',True) #read csv slice (output of paraview)------------------------------------------ f = pandas.read_csv(vtk_slice) p1 = f['Points:0'] p2 = f['Points:1'] p3 = f['Points:2'] dvp = f['dVp()'] #transform to polar, earth coordinates---------------------------------------- r,t = cart2polar(p1,p3) r *= 6371.0 t=np.degrees(t) print min(dvp),max(dvp) #setup GMT plot--------------------------------------------------------------- gmt = GMT(config={'BASEMAP_TYPE':'fancy', 'HEADER_FONT_SIZE':'14'}) region = '{}/{}/{}/{}'.format(theta_range[0],theta_range[1],6371.0-depth_range[1],6371.0-depth_range[0]) surf_region = '{}/{}/{}/{}'.format(theta_range[0]-2,theta_range[1]+2,6371.0-depth_range[1],6500.0-depth_range[0]) scale = 'P6i' #Polar, 8 inch radius cptfile = gmt.tempfilename() grdfile = gmt.tempfilename() #gmt.makecpt(C=cmap,T='{}/{}/{}'.format(data_range[0],data_range[1],csteps),Z=False,out_filename=cptfile,D=cmap_direction) gmt.makecpt(C=cmap,T='-0.25/0.25/0.025',A=100,out_filename=cptfile,D=True) gmt.surface(in_columns=[t+rotation,r,dvp],G=grdfile,I='0.5/25',T=0.0,R=surf_region,out_discard=True) ''' #plot the data---------------------------------------------------------------- gmt.psxy( R=region, J=scale, #B='a15f15:"":/200f200:""::."":WSne', B='a300f300', S='s0.20', #G='blue', C=cptfile, in_columns=[t+rotation,r,dvp] ) ''' #plot the data---------------------------------------------------------------- gmt.grdimage( grdfile, R=region, J=scale, B='a300f300', C=cptfile, E='i5' ) #contour the data------------------------------------------------------------- if contour == True: gmt.grdcontour( grdfile, R=region, J=scale, C=cptfile, W='1' ) #plot 660--------------------------------------------------------------------- d660 = np.loadtxt('/geo/home/romaguir/utils/660_polar.dat') print d660 gmt.psxy( R=region, J=scale, W='1', in_rows=[d660] ) gmt.save(fname)
def plot_vtk_slice(vtk_slice, theta_range=[0, 360], depth_range=[0, 2885], **kwargs): #-------------------------------------------------------------------------------- ''' This will plot a cross section of a .vtk file. Open the .vtk file in paraview, choose a slice, and select 'File -> export data'. This will save the data as a .csv file, which can be plotted with this function. args-------------------------------------------------------------------------- vtk_slice: the .csv file theta_range: the range in degrees you wish to plot. dtype=tuple default=[0,360] (whole earth) depth_range: the range in depth you wish to plot. dtype=tuple default=[0,2885] (whole mantle) kwargs------------------------------------------------------------------------ cmap = colormap to use dtype=string default='BlueWhiiteOrangeRed' data_range = max and min values to use in colorbar. dtype=tuple default=[-1.0,1.0] csteps = number of divisions in colorbar dtype=int default=100 cmap_direction = forward or reverse colormap dtype=string default='i' fname = filename dtype=string default='slice.pdf' rotation = number of degrees to rotate figure dtype=float default=90.0 (i.e., rotate from lat coor to colat based coor) contour = True or False ''' #get kwargs------------------------------------------------------------------- cmap_dir = '/geo/home/romaguir/utils/colors/' cmap = kwargs.get('cmap', 'BlueWhiteOrangeRed') cmap = cmap_dir + cmap data_range = kwargs.get('data_range', [-0.25, 0.25]) csteps = kwargs.get('csteps', 100) cmap_direction = kwargs.get('cmap_direction', 'i') fname = kwargs.get('fname', 'slice.pdf') rotation = kwargs.get('rotation', 90.0) contour = kwargs.get('contour', True) #read csv slice (output of paraview)------------------------------------------ f = pandas.read_csv(vtk_slice) p1 = f['Points:0'] p2 = f['Points:1'] p3 = f['Points:2'] dvp = f['dVp()'] #transform to polar, earth coordinates---------------------------------------- r, t = cart2polar(p1, p3) r *= 6371.0 t = np.degrees(t) print min(dvp), max(dvp) #setup GMT plot--------------------------------------------------------------- gmt = GMT(config={'BASEMAP_TYPE': 'fancy', 'HEADER_FONT_SIZE': '14'}) region = '{}/{}/{}/{}'.format(theta_range[0], theta_range[1], 6371.0 - depth_range[1], 6371.0 - depth_range[0]) surf_region = '{}/{}/{}/{}'.format(theta_range[0] - 2, theta_range[1] + 2, 6371.0 - depth_range[1], 6500.0 - depth_range[0]) scale = 'P6i' #Polar, 8 inch radius cptfile = gmt.tempfilename() grdfile = gmt.tempfilename() #gmt.makecpt(C=cmap,T='{}/{}/{}'.format(data_range[0],data_range[1],csteps),Z=False,out_filename=cptfile,D=cmap_direction) gmt.makecpt(C=cmap, T='-0.25/0.25/0.025', A=100, out_filename=cptfile, D=True) gmt.surface(in_columns=[t + rotation, r, dvp], G=grdfile, I='0.5/25', T=0.0, R=surf_region, out_discard=True) ''' #plot the data---------------------------------------------------------------- gmt.psxy( R=region, J=scale, #B='a15f15:"":/200f200:""::."":WSne', B='a300f300', S='s0.20', #G='blue', C=cptfile, in_columns=[t+rotation,r,dvp] ) ''' #plot the data---------------------------------------------------------------- gmt.grdimage(grdfile, R=region, J=scale, B='a300f300', C=cptfile, E='i5') #contour the data------------------------------------------------------------- if contour == True: gmt.grdcontour(grdfile, R=region, J=scale, C=cptfile, W='1') #plot 660--------------------------------------------------------------------- d660 = np.loadtxt('/geo/home/romaguir/utils/660_polar.dat') print d660 gmt.psxy(R=region, J=scale, W='1', in_rows=[d660]) gmt.save(fname)