1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
|
/** \internal
* \file minc2_private.h
* \brief MINC 2.0 private constants, types, and functions.
*/
#ifndef MINC2_PRIVATE_H
#define MINC2_PRIVATE_H
#include "config.h"
#include <string.h>
#include "minc2_structs.h"
/** The root of all MINC 2.0 objects in the HDF5 hierarchy.
*/
#define MI_ROOT_PATH "/minc-2.0"
#define MI_ROOT_COMMENT "Root of the MINC 2.0 data hierarchy"
#define MI_DIMAGE_PATH "image"
#define MI_INFO_NAME "info"
#define MI_INFO_COMMENT "Group holding directly accessible attributes"
#define MI_DIMENSIONS_PATH "dimensions"
#define MI_DIMS_COMMENT "Group holding dimension variables"
/** The fixed path to the full-resolution image data.
*/
#define MI_IMAGE_PATH MI_ROOT_PATH "/" MI_DIMAGE_PATH
/** The fixed path to the full-resolution image data.
*/
#define MI_FULLIMAGE_PATH MI_IMAGE_PATH "/0"
/** The fixed path to the dimension
*/
#define MI_FULLDIMENSIONS_PATH MI_ROOT_PATH "/dimensions"
/** Size of a linear transform */
#define MI2_LIN_XFM_SIZE 4
/** Standard linear transform, a 4x4 matrix.
*/
typedef double mi_lin_xfm_t[MI2_LIN_XFM_SIZE][MI2_LIN_XFM_SIZE];
#ifdef _WIN32
typedef __int64 mi_i64_t;
#else //_WIN32
typedef long long mi_i64_t;
#endif //_WIN32
/** The fixed path to the dimension
*/
#define MI_FULLDIMENSIONS_PATH MI_ROOT_PATH "/dimensions"
/** \internal
* Volume properties
*/
struct mivolprops {
miboolean_t enable_flag; /* enable multi-res */
int depth; /* multi-res depth */
micompression_t compression_type;
int zlib_level;
int edge_count; /* how many chunks */
int *edge_lengths; /* size of each chunk */
int max_lengths;
misize_t record_length;
char *record_name;
int template_flag;
int checksum; /*FLETCHER32 checksum is enabled*/
};
/** \internal
* Dimension handle
*/
struct midimension {
midimattr_t attr; /* Dimension attributes */
midimclass_t dim_class; /* Dimension class */
double direction_cosines[3]; /* Direction cosines */
miflipping_t flipping_order;
char *name; /* Dimension name */
double *offsets; /* Offsets (if irregular) */
double step; /* Step size */
misize_t length; /* Length */
double start; /* Start value */
char *units; /* Units string */
double width; /* Sample width (if regular) */
double *widths; /* Widths (if irregular) */
char *comments; /* Comment string */
mihandle_t volume_handle; /* Handle of associated volume */
short world_index; /* -1, MI2_X, MI2_Y, or MI2_Z */
midimalign_t align; /* MI_DIMALIGN_CENTRE, MI_DIMALIGN_START */
};
/** \internal
* Volume handle
*/
struct mivolume {
hid_t hdf_id;
miboolean_t has_slice_scaling;
int number_of_dims;
midimhandle_t *dim_handles; /* file order of dimensions */
int *dim_indices; /* apparent order of dimensions */
mitype_t volume_type;
miclass_t volume_class;
mivolumeprops_t create_props;
double valid_min; /* Volume-wide valid min */
double valid_max; /* Volume-wide valid max */
mi_lin_xfm_t v2w_transform; /* Voxel-to-world transform */
mi_lin_xfm_t w2v_transform; /* World-to-voxel transform (inverse) */
int selected_resolution; /* The current resolution (0-N) */
int mode; /* Open mode */
hid_t ftype_id; /* File type ID of image. */
hid_t mtype_id; /* Memory type ID of image. */
hid_t plist_id; /* Image property list */
hid_t image_id; /* Dataset for image */
hid_t imax_id; /* Dataset for image-max */
hid_t imin_id; /* Dataset for image-min */
double scale_min; /* Global minimum */
double scale_max; /* Global maximum */
miboolean_t is_dirty; /* TRUE if data has been modified. */
};
/**
* \internal
* "semi-private" functions.
****************************************************************************/
/* From m2util.c */
hid_t midescend_path(hid_t file_id, const char *path);
hid_t mitype_to_hdftype(mitype_t, int);
int mitype_len ( mitype_t mitype );
const char * mitype_sign ( mitype_t mitype );
int mitype_to_nctype(mitype_t, int *is_signed);
int miget_attribute(mihandle_t volume, const char *varpath,
const char *attname, mitype_t data_type,
size_t maxvals, void *values);
int miset_attr_at_loc(hid_t hdf_loc, const char *attname,
mitype_t data_type,
size_t maxvals, const void *values);
int miset_attribute(mihandle_t volume, const char *varpath,
const char *attname, mitype_t data_type,
size_t maxvals, const void *values);
/*void mifind_spatial_dims(int mincid, int space_to_dim[], int dim_to_space[]);*/
void miget_voxel_to_world(mihandle_t volume, mi_lin_xfm_t voxel_to_world);
void minormalize_vector(double vector[MI2_3D]);
void mitransform_coord(double out_coord[],
mi_lin_xfm_t transform,
const double in_coord[]);
int miinvert_transform(mi_lin_xfm_t transform, mi_lin_xfm_t inverse);
void miinit(void);
void miinit_enum(hid_t);
int miget_scalar(hid_t loc_id, hid_t type_id, const char *path,
void *data);
int minc_create_thumbnail(mihandle_t volume, int grp);
int minc_update_thumbnail(mihandle_t volume, hid_t loc_id, int igrp, int ogrp);
int minc_update_thumbnails(mihandle_t volume);
int scaled_maximal_pivoting_gaussian_elimination(int n,
int row[],
double **a,
int n_values,
double **solution );
int scaled_maximal_pivoting_gaussian_elimination_real(int n,
double **coefs,
int n_values,
double **values );
double *alloc1d(int);
double **alloc2d(int, int);
void free2d(int, double **);
/* m2util : creation of minc2 comformant datasets*/
int create_dataset(hid_t hdf_file, const char *path);
int create_standard_dataset(hid_t hdf_file, const char *path);
int add_minimal_minc_attributes(hid_t hdf_file, hid_t dset_id);
int add_standard_minc_attributes(hid_t hdf_file, hid_t dset_id);
/* From hyper.c */
int mitranslate_hyperslab_origin(mihandle_t volume,
const misize_t* start,
const misize_t* count,
hsize_t* hdf_start,
hsize_t* hdf_count,
int* dir);
/* From volume.c */
void misave_valid_range(mihandle_t volume);
/* From valid.c*/
void miinit_default_range(mitype_t mitype, double *valid_max, double *valid_min);
#ifndef HAVE_RINT
double rint(double v);
#endif
#if defined(_MSC_VER) && _MSC_VER < 1900
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#endif
#ifdef _MSC_VER
#define strcasecmp _stricmp
#define strncasecmp _strnicmp
#endif
#endif /*MINC2_PRIVATE_H*/
|