Sort all includes in src/gromacs
[alexxy/gromacs.git] / src / gromacs / fileio / matio.h
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
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.
10  *
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.
15  *
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.
20  *
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.
25  *
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.
33  *
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.
36  */
37
38 #ifndef GMX_FILEIO_MATIO_H
39 #define GMX_FILEIO_MATIO_H
40
41 #include <stdio.h>
42
43 #include "gromacs/legacyheaders/types/rgb.h"
44 #include "gromacs/utility/basedefinitions.h"
45 #include "gromacs/utility/real.h"
46
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50
51 typedef struct {
52     char c1; /* should all be non-zero (and printable and not '"') */
53     char c2; /*
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)
56               */
57 } t_xpmelmt;
58
59 typedef short t_matelmt;
60
61 typedef struct {
62     t_xpmelmt   code; /* see comment for t_xpmelmt */
63     const char *desc;
64     t_rgb       rgb;
65 } t_mapping;
66
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.
72  */
73
74 typedef struct {
75     unsigned int flags; /* The possible flags are defined above */
76     int          nx, ny;
77     int          y0;
78     char         title[256];
79     char         legend[256];
80     char         label_x[256];
81     char         label_y[256];
82     gmx_bool     bDiscrete;
83     real        *axis_x;
84     real        *axis_y;
85     t_matelmt  **matrix;
86     int          nmap;
87     t_mapping   *map;
88 } t_matrix;
89 /* title      matrix title
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(?)
98  */
99
100 gmx_bool matelmt_cmp(t_xpmelmt e1, t_xpmelmt e2);
101
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
105  */
106
107 int getcmap(FILE *in, const char *fn, t_mapping **map);
108 /* Read the mapping table from in, return number of entries */
109
110 int readcmap(const char *fn, t_mapping **map);
111 /* Read the mapping table from fn, return number of entries */
112
113 void printcmap(FILE *out, int n, t_mapping map[]);
114 /* print mapping table to out */
115
116 void writecmap(const char *fn, int n, t_mapping map[]);
117 /* print mapping table to fn */
118
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 */
121
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
126  */
127
128 void write_xpm_m(FILE *out, t_matrix m);
129 /* Writes a t_matrix struct to .xpm file */
130
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);
137 /* See write_xpm.
138  * Writes a colormap varying as rlo -> rmid -> rhi.
139  */
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[],
144                      real *mat[],
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);
150 /* See write_xpm.
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
153  * which is white.
154  */
155
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);
162 /* out        xpm file
163  * flags      flags, defined types/matrix.h
164  *            MAT_SPATIAL_X
165  *            MAT_SPATIAL_Y
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.
169  * title      matrix title
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
182  */
183
184 real **mk_matrix(int nx, int ny, gmx_bool b1D);
185
186 void done_matrix(int nx, real ***m);
187
188 #ifdef __cplusplus
189 }
190 #endif
191
192 #endif  /* GMX_FILEIO_MATIO_H */