2 * This file is part of the GROMACS molecular simulation package.
4 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5 * Copyright (c) 2001-2004, The GROMACS development team.
6 * Copyright (c) 2013,2014, by the GROMACS development team, led by
7 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
8 * and including many others, as listed in the AUTHORS file in the
9 * top-level source directory and at http://www.gromacs.org.
11 * GROMACS is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public License
13 * as published by the Free Software Foundation; either version 2.1
14 * of the License, or (at your option) any later version.
16 * GROMACS is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with GROMACS; if not, see
23 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
24 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 * If you want to redistribute modifications to GROMACS, please
27 * consider that scientific software is very special. Version
28 * control is crucial - bugs must be traceable. We will be happy to
29 * consider code for inclusion in the official distribution, but
30 * derived work must not be called official GROMACS. Details are found
31 * in the README & COPYING files - if they are missing, get the
32 * official version at http://www.gromacs.org.
34 * To help us fund GROMACS development, we humbly ask that you cite
35 * the research papers on the package. Check out http://www.gromacs.org.
38 #ifndef GMX_FILEIO_MATIO_H
39 #define GMX_FILEIO_MATIO_H
43 #include "../legacyheaders/types/rgb.h"
44 #include "../utility/basedefinitions.h"
45 #include "../utility/real.h"
52 char c1; /* should all be non-zero (and printable and not '"') */
54 * should all be zero (single char color names: smaller xpm's)
55 * or should all be non-zero (double char color names: more colors)
59 typedef short t_matelmt;
62 t_xpmelmt code; /* see comment for t_xpmelmt */
67 #define MAT_SPATIAL_X (1<<0)
68 #define MAT_SPATIAL_Y (1<<1)
69 /* Defines if x and y are spatial dimensions,
70 * when not, there are n axis ticks at the middle of the elements,
71 * when set, there are n+1 axis ticks at the edges of the elements.
75 unsigned int flags; /* The possible flags are defined above */
90 * legend label for the continuous legend
91 * label_x label for the x-axis
92 * label_y label for the y-axis
93 * nx, ny size of the matrix
94 * axis_x[] the x-ticklabels
95 * axis_y[] the y-ticklables
96 * *matrix[] element x,y is matrix[x][y]
97 * nmap number of color levels for the output(?)
100 gmx_bool matelmt_cmp(t_xpmelmt e1, t_xpmelmt e2);
102 t_matelmt searchcmap(int n, t_mapping map[], t_xpmelmt c);
103 /* Seach in the map for code 'c' and return entry number.
104 * return -1 if not found
107 int getcmap(FILE *in, const char *fn, t_mapping **map);
108 /* Read the mapping table from in, return number of entries */
110 int readcmap(const char *fn, t_mapping **map);
111 /* Read the mapping table from fn, return number of entries */
113 void printcmap(FILE *out, int n, t_mapping map[]);
114 /* print mapping table to out */
116 void writecmap(const char *fn, int n, t_mapping map[]);
117 /* print mapping table to fn */
119 int read_xpm_matrix(const char *fnm, t_matrix **mat);
120 /* Reads a number of matrices from .xpm file fnm and returns this number */
122 real **matrix2real(t_matrix *in, real **out);
123 /* Converts an matrix in a t_matrix struct to a matrix of reals
124 * When mat==NULL memory will be allocated
125 * Returns NULL when something went wrong
128 void write_xpm_m(FILE *out, t_matrix m);
129 /* Writes a t_matrix struct to .xpm file */
131 void write_xpm3(FILE *out, unsigned int flags,
132 const char *title, const char *legend,
133 const char *label_x, const char *label_y,
134 int n_x, int n_y, real axis_x[], real axis_y[],
135 real *mat[], real lo, real mid, real hi,
136 t_rgb rlo, t_rgb rmid, t_rgb rhi, int *nlevels);
138 * Writes a colormap varying as rlo -> rmid -> rhi.
140 void write_xpm_split(FILE *out, unsigned int flags,
141 const char *title, const char *legend,
142 const char *label_x, const char *label_y,
143 int n_x, int n_y, real axis_x[], real axis_y[],
145 real lo_top, real hi_top, int *nlevel_top,
146 t_rgb rlo_top, t_rgb rhi_top,
147 real lo_bot, real hi_bot, int *nlevel_bot,
148 gmx_bool bDiscreteColor,
149 t_rgb rlo_bot, t_rgb rhi_bot);
151 * Writes a colormap with separate above and below diagonal colormaps.
152 * If bDiscrete then a colormap with 16 fixed colors is used, first of
156 void write_xpm(FILE *out, unsigned int flags,
157 const char *title, const char *legend,
158 const char *label_x, const char *label_y,
159 int n_x, int n_y, real t_x[], real t_y[],
160 real *mat[], real lo, real hi,
161 t_rgb rlo, t_rgb rhi, int *nlevels);
163 * flags flags, defined types/matrix.h
166 * Defines if x and y are spatial dimensions,
167 * when not, there are n axis ticks at the middle of the elements,
168 * when set, there are n+1 axis ticks at the edges of the elements.
170 * legend label for the continuous legend
171 * label_x label for the x-axis
172 * label_y label for the y-axis
173 * n_x, n_y size of the matrix
174 * axis_x[] the x-ticklabels (n_x or n_x+1)
175 * axis_y[] the y-ticklables (n_y or n_y+1)
176 * *mat[] element x,y is mat[x][y]
177 * lo output lower than lo is set to lo
178 * hi output higher than hi is set to hi
179 * rlo rgb value for level lo
180 * rhi rgb value for level hi
181 * nlevels number of color levels for the output
184 real **mk_matrix(int nx, int ny, gmx_bool b1D);
186 void done_matrix(int nx, real ***m);
192 #endif /* GMX_FILEIO_MATIO_H */