Source code for pygmt.src.grdinfo

"""
grdinfo - Retrieve info about grid file.
"""
from pygmt.clib import Session
from pygmt.helpers import (
    GMTTempFile,
    build_arg_string,
    fmt_docstring,
    kwargs_to_strings,
    use_alias,
)


[docs] @fmt_docstring @use_alias( C="per_column", D="tiles", F="geographic", I="spacing", L="force_scan", M="minmax_pos", R="region", T="nearest_multiple", V="verbose", f="coltypes", ) @kwargs_to_strings(D="sequence", I="sequence", R="sequence") def grdinfo(grid, **kwargs): r""" Get information about a grid. Can read the grid from a file or given as an xarray.DataArray grid. Full option list at :gmt-docs:`grdinfo.html` {aliases} Parameters ---------- {grid} {region} per_column : str or bool **n**\|\ **t**. Format the report using tab-separated fields on a single line. The output is name *w e s n z0 z1 dx dy nx ny* [ *x0 y0 x1 y1* ] [ *med scale* ] [ *mean std rms* ] [ *n_nan* ] *registration gtype*. The data in brackets are outputted depending on the ``force_scan`` and ``minmax_pos`` parameters. Use **t** to place file name at the end of the output record or, **n** or ``True`` to only output numerical columns. The registration is either 0 (gridline) or 1 (pixel), while gtype is either 0 (Cartesian) or 1 (geographic). The default value is ``False``. This cannot be called if ``geographic`` is also set. tiles : str or list *xoff*\ [/*yoff*][**+i**]. Divide a single grid's domain (or the ``region`` domain, if no grid given) into tiles of size dx times dy (set via ``spacing``). You can specify overlap between tiles by appending *xoff*\ [/*yoff*]. If the single grid is given you may use the modifier **+i** to ignore tiles that have no data within each tile subregion. Default output is text region strings. Use ``per_column`` to instead report four columns with xmin xmax ymin ymax per tile, or use ``per_column="t"`` to also have the region string appended as trailing text. geographic : bool Report grid domain and x/y-increments in world mapping format. The default value is ``False``. This cannot be called if ``per_column`` is also set. spacing : str or list *dx*\ [/*dy*]\|\ **b**\|\ **i**\|\ **r**. Report the min/max of the region to the nearest multiple of dx and dy, and output this in the form w/e/s/n (unless ``per_column`` is set). To report the actual grid region, append **r**. For a grid produced by the img supplement (a Cartesian Mercator grid), the exact geographic region is given with **i** (if not found then we return the actual grid region instead). If no argument is given then we report the grid increment in the form *xinc*\ [/*yinc*]. If **b** is given we write each grid's bounding box polygon instead. Finally, if ``tiles`` is in effect then *dx* and *dy* are the dimensions of the desired tiles. force_scan : int or str **0**\|\ **1**\|\ **2**\|\ **p**\|\ **a**. - **0**: Report range of z after actually scanning the data, not just reporting what the header says. - **1**: Report median and L1 scale of z (L1 scale = 1.4826 * Median Absolute Deviation (MAD)). - **2**: Report mean, standard deviation, and root-mean-square (rms) of z. - **p**: Report mode (LMS) and LMS scale of z. - **a**: Include all of the above. minmax_pos : bool Include the x/y values at the location of the minimum and maximum z-values. nearest_multiple : str [*dz*]\ [**+a**\ [*alpha*]]\ [**+s**]. Determine minimum and maximum z-values. If *dz* is provided then we first round these values off to multiples of *dz*. To exclude the two tails of the distribution when determining the minimum and maximum you can add **+a** to set the *alpha* value (in percent): We then sort the grid, exclude the data in the 0.5*\ *alpha* and 100 - 0.5*\ *alpha* tails, and revise the minimum and maximum. To force a symmetrical range about zero, using minus/plus the maximum absolute value of the two extremes, append **+s**. We report the result via the text string *zmin/zmax* or *zmin/zmax/dz* (if *dz* was given) as expected by :func:`pygmt.makecpt`. {verbose} {coltypes} Returns ------- info : str A string with information about the grid. """ with GMTTempFile() as outfile: with Session() as lib: file_context = lib.virtualfile_from_data(check_kind="raster", data=grid) with file_context as infile: lib.call_module( module="grdinfo", args=build_arg_string(kwargs, infile=infile, outfile=outfile.name), ) result = outfile.read() return result