Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)