From 0d9bf723e2f0318c7ffa80f0f053b712eff5ce14 Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Fri, 19 Jun 2020 21:01:08 -0400 Subject: [PATCH 1/3] Add a test passing a matrix as grid --- src/testapi_matrix_as_grid.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/testapi_matrix_as_grid.c diff --git a/src/testapi_matrix_as_grid.c b/src/testapi_matrix_as_grid.c new file mode 100644 index 00000000000..7332131a879 --- /dev/null +++ b/src/testapi_matrix_as_grid.c @@ -0,0 +1,35 @@ +#include "gmt_dev.h" + +int main () { + unsigned int mode = GMT_SESSION_EXTERNAL; + struct GMT_MATRIX *M_p = NULL, *M_g = NULL; + char input_p[GMT_VF_LEN] = {""}, input_g[GMT_VF_LEN] = {""}; + char args_p[128] = {""}, args_g[128]= {""}; + struct GMTAPI_CTRL *API = NULL; + + double inc[2] = {1.0, 1.0}; + double coord[9] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9}; + + API = GMT_Create_Session ("test", 2U, mode, NULL); + + /* pass matrix as gridline-registered grid */ + double range_g[4] = {0.0, 2.0, 0.0, 2.0}; + if ((M_g = GMT_Create_Data (API, GMT_IS_GRID|GMT_VIA_MATRIX, GMT_IS_SURFACE, GMT_CONTAINER_ONLY, NULL, range_g, inc, GMT_GRID_NODE_REG, 0, NULL)) == NULL) return (EXIT_FAILURE); + GMT_Put_Matrix (API, M_g, GMT_DOUBLE, 0, coord); + GMT_Open_VirtualFile (API, GMT_IS_GRID|GMT_VIA_MATRIX, GMT_IS_SURFACE, GMT_IN|GMT_IS_REFERENCE, M_g, input_g); + sprintf (args_g, "%s -R-1/3/-1/3 -JX6c -Baf -BWSen+tGridline -K > test_matrix.ps", input_g); + GMT_Call_Module (API, "grdimage", GMT_MODULE_CMD, args_g); + GMT_Close_VirtualFile (API, input_g); + + /* pass matrix as pixel-registered grid */ + double range_p[4] = {-0.5, 2.5, -0.5, 2.5}; + if ((M_p = GMT_Create_Data (API, GMT_IS_GRID|GMT_VIA_MATRIX, GMT_IS_SURFACE, GMT_CONTAINER_ONLY, NULL, range_p, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) return (EXIT_FAILURE); + GMT_Put_Matrix (API, M_p, GMT_DOUBLE, 0, coord); + GMT_Open_VirtualFile (API, GMT_IS_GRID|GMT_VIA_MATRIX, GMT_IS_SURFACE, GMT_IN|GMT_IS_REFERENCE, M_p, input_p); + sprintf (args_p, "%s -R-1/3/-1/3 -JX6c -Baf -BWSen+tPixel -O -X8c >> test_matrix.ps", input_p); + GMT_Call_Module (API, "grdimage", GMT_MODULE_CMD, args_p); + GMT_Close_VirtualFile (API, input_p); + + if (GMT_Destroy_Session (API)) return EXIT_FAILURE; + exit (0); +} From cd0a002bee22311397f84fb0b6d4977d8f2c212a Mon Sep 17 00:00:00 2001 From: Paul Wessel Date: Fri, 19 Jun 2020 19:27:43 -1000 Subject: [PATCH 2/3] Fix issues. --- src/gmt_api.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gmt_api.c b/src/gmt_api.c index 1dc901e8e1b..12f42136889 100644 --- a/src/gmt_api.c +++ b/src/gmt_api.c @@ -1984,7 +1984,6 @@ GMT_LOCAL int gmtapi_init_matrix (struct GMTAPI_CTRL *API, uint64_t dim[], doubl /* If range = inc = NULL then add dimensioning is set via dim: ncols, nrow, nlayers, type. * else, ncols,nrows is set via range and inc and registration. dim, if not null, sets dim[2] = nlayers [1] and dim[3] = type [double] */ - double off = 0.5 * registration; int error; unsigned int dims = (M->n_layers > 1) ? 3 : 2; size_t size = 0; @@ -1999,8 +1998,8 @@ GMT_LOCAL int gmtapi_init_matrix (struct GMTAPI_CTRL *API, uint64_t dim[], doubl if (!inc || (inc[GMT_X] == 0.0 && inc[GMT_Y] == 0.0)) return (GMT_VALUE_NOT_SET); gmt_M_memcpy (M->range, range, 2 * dims, double); gmt_M_memcpy (M->inc, inc, dims, double); - M->n_rows = gmt_M_get_n (API->GMT, range[YLO], range[YHI], inc[GMT_Y], off); - M->n_columns = gmt_M_get_n (API->GMT, range[XLO], range[XHI], inc[GMT_X], off); + M->n_rows = gmt_M_get_n (API->GMT, range[YLO], range[YHI], inc[GMT_Y], registration); + M->n_columns = gmt_M_get_n (API->GMT, range[XLO], range[XHI], inc[GMT_X], registration); M->dim = (M->shape == GMT_IS_ROW_FORMAT) ? M->n_columns : M->n_rows; /* Matrix layout order */ } return (GMT_NOERROR); @@ -2016,11 +2015,12 @@ GMT_LOCAL int gmtapi_init_matrix (struct GMTAPI_CTRL *API, uint64_t dim[], doubl if (!inc || (inc[GMT_X] == 0.0 && inc[GMT_Y] == 0.0)) return (GMT_VALUE_NOT_SET); gmt_M_memcpy (M->range, range, 2 * dims, double); gmt_M_memcpy (M->inc, inc, dims, double); - M->n_rows = gmt_M_get_n (API->GMT, range[YLO], range[YHI], inc[GMT_Y], off); - M->n_columns = gmt_M_get_n (API->GMT, range[XLO], range[XHI], inc[GMT_X], off); + M->n_rows = gmt_M_get_n (API->GMT, range[YLO], range[YHI], inc[GMT_Y], registration); + M->n_columns = gmt_M_get_n (API->GMT, range[XLO], range[XHI], inc[GMT_X], registration); } M->type = (dim == NULL) ? GMT_DOUBLE : dim[3]; /* Use selected data type for export or default to double */ M->dim = (M->shape == GMT_IS_ROW_FORMAT) ? M->n_columns : M->n_rows; + M->registration = registration; size = M->n_rows * M->n_columns * ((size_t)M->n_layers); /* Size in bytes of the initial matrix allocation */ if ((mode & GMT_CONTAINER_ONLY) == 0) { /* Must allocate data memory */ struct GMT_MATRIX_HIDDEN *MH = gmt_get_M_hidden (M); @@ -2042,7 +2042,7 @@ GMT_LOCAL uint64_t gmtapi_vector_nrows (uint64_t dim[], double *range, double *i if (dim && dim[GMTAPI_DIM_ROW]) return dim[GMTAPI_DIM_ROW]; /* Gave the dimension directly */ if (dir == GMT_IN && (!inc || inc[GMT_X] == 0.0)) return ((uint64_t)GMT_NOTSET); if (dir == GMT_IN && (!range || (range[XLO] == 0.0 && range[XHI] == 0.0))) return ((uint64_t)GMT_NOTSET); - if (range && inc) return (gmt_M_get_n (API->GMT, range[XLO], range[XHI], inc[GMT_X], 0.5 * registration)); + if (range && inc) return (gmt_M_get_n (API->GMT, range[XLO], range[XHI], inc[GMT_X], registration)); return (0); /* When dir == GMT_OUT */ } From 1374a611af4c6844ae1f427d8728afe5c066ab43 Mon Sep 17 00:00:00 2001 From: Paul Wessel Date: Fri, 19 Jun 2020 21:49:59 -1000 Subject: [PATCH 3/3] Add test and comments --- src/testapi_matrix_as_grid.c | 10 ++++++++-- test/api/api_matrix_as_grid.ps | Bin 0 -> 27438 bytes test/api/apigrdpix.sh | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 test/api/api_matrix_as_grid.ps create mode 100755 test/api/apigrdpix.sh diff --git a/src/testapi_matrix_as_grid.c b/src/testapi_matrix_as_grid.c index 7332131a879..2eed6b762d1 100644 --- a/src/testapi_matrix_as_grid.c +++ b/src/testapi_matrix_as_grid.c @@ -1,5 +1,11 @@ #include "gmt_dev.h" +/* Test passing a gridline and pixel-registered matrix as grids to grdimage. + * the two plots should be identical. This tests was made to demonstrate a + * bug in the API that was fixed in https://github.com/GenericMappingTools/gmt/pull/3503. + * The problem was an error in gmt_M_get_n and failure to set M->registration for matrices. + */ + int main () { unsigned int mode = GMT_SESSION_EXTERNAL; struct GMT_MATRIX *M_p = NULL, *M_g = NULL; @@ -17,7 +23,7 @@ int main () { if ((M_g = GMT_Create_Data (API, GMT_IS_GRID|GMT_VIA_MATRIX, GMT_IS_SURFACE, GMT_CONTAINER_ONLY, NULL, range_g, inc, GMT_GRID_NODE_REG, 0, NULL)) == NULL) return (EXIT_FAILURE); GMT_Put_Matrix (API, M_g, GMT_DOUBLE, 0, coord); GMT_Open_VirtualFile (API, GMT_IS_GRID|GMT_VIA_MATRIX, GMT_IS_SURFACE, GMT_IN|GMT_IS_REFERENCE, M_g, input_g); - sprintf (args_g, "%s -R-1/3/-1/3 -JX6c -Baf -BWSen+tGridline -K > test_matrix.ps", input_g); + sprintf (args_g, "%s -R-1/3/-1/3 -JX6c -Baf -BWSen+tGridline -K -P > api_matrix_as_grid.ps", input_g); GMT_Call_Module (API, "grdimage", GMT_MODULE_CMD, args_g); GMT_Close_VirtualFile (API, input_g); @@ -26,7 +32,7 @@ int main () { if ((M_p = GMT_Create_Data (API, GMT_IS_GRID|GMT_VIA_MATRIX, GMT_IS_SURFACE, GMT_CONTAINER_ONLY, NULL, range_p, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) return (EXIT_FAILURE); GMT_Put_Matrix (API, M_p, GMT_DOUBLE, 0, coord); GMT_Open_VirtualFile (API, GMT_IS_GRID|GMT_VIA_MATRIX, GMT_IS_SURFACE, GMT_IN|GMT_IS_REFERENCE, M_p, input_p); - sprintf (args_p, "%s -R-1/3/-1/3 -JX6c -Baf -BWSen+tPixel -O -X8c >> test_matrix.ps", input_p); + sprintf (args_p, "%s -R-1/3/-1/3 -JX6c -Baf -BWSen+tPixel -O -X8c >> api_matrix_as_grid.ps", input_p); GMT_Call_Module (API, "grdimage", GMT_MODULE_CMD, args_p); GMT_Close_VirtualFile (API, input_p); diff --git a/test/api/api_matrix_as_grid.ps b/test/api/api_matrix_as_grid.ps new file mode 100644 index 0000000000000000000000000000000000000000..423919092b3ab62289e0b5fbb68488b7d14bbc86 GIT binary patch literal 27438 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 F{|D|bR=@xN literal 0 HcmV?d00001 diff --git a/test/api/apigrdpix.sh b/test/api/apigrdpix.sh new file mode 100755 index 00000000000..591fdbe7aad --- /dev/null +++ b/test/api/apigrdpix.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# +# Test the C API for passing matrices to grdimage as grids +ps=api_matrix_as_grid.ps +testapi_matrix_as_grid