00001
00006 #ifndef CCP4_UMTZLIB_INC
00007 #define CCP4_UMTZLIB_INC
00008
00009 #include <math.h>
00010 #include "library.h"
00011
00012
00013
00014 #define MTZRECLEN 80
00015 #define MTZBATCHR (3*MTZRECLEN)
00016 #define MTZBATINT 29
00017 #define MTZBATFLT 156
00018 #define MTZBATLEN ( MTZBATCHR + 4*(MTZBATINT+MTZBATFLT) )
00019 #define MTZDATAOFF 20
00020
00021 typedef struct umtz_hdr_ {
00022 char data[MTZRECLEN];
00023 } umtz_hdr;
00024
00025 typedef struct umtz_bat_ {
00026 char cdata[3*MTZRECLEN];
00027 int idata[MTZBATINT];
00028 float fdata[MTZBATFLT];
00029 } umtz_bat;
00030
00031
00032
00033 typedef struct umtz_list_ {
00034 int size, capacity;
00035 void* data;
00036 } umtz_list;
00037
00038
00039
00040 typedef struct umtzfile_ {
00041 char filename[200], mode[4];
00042 int iunit, ncol, nrow;
00043 float mnf;
00044 umtz_list headers;
00045 umtz_list history;
00046 umtz_list batches;
00047 } umtzfile;
00048
00049
00050
00051
00052 umtzfile* umtz_open( const char* filename, const char* mode );
00053 void umtz_close( umtzfile* file );
00054
00055
00056
00057 int umtz_num_cols( const umtzfile* file );
00058 int umtz_num_rows( const umtzfile* file );
00059 int umtz_num_head( const umtzfile* file );
00060 int umtz_num_hist( const umtzfile* file );
00061 float umtz_mnf( const umtzfile* file );
00062 int umtz_ismnf( const umtzfile* file, float f );
00063
00064 umtz_hdr* umtz_first_head( const umtzfile* file );
00065 umtz_hdr* umtz_first_hist( const umtzfile* file );
00066 umtz_bat* umtz_first_bats( const umtzfile* file );
00067 umtz_hdr* umtz_last_head( const umtzfile* file );
00068 umtz_hdr* umtz_last_hist( const umtzfile* file );
00069 umtz_bat* umtz_last_bats( const umtzfile* file );
00070 int umtz_keymatch( const char* hdr, const char* key );
00071 void umtz_add_head( umtzfile* file, const char* hdr );
00072 void umtz_add_hist( umtzfile* file, const char* hdr );
00073 void umtz_add_bats( umtzfile* file, const char* cdata, const int* idata, const float* fdata );
00074
00075 void umtz_seek_row( const umtzfile* file, const int n );
00076 void umtz_get_row( const umtzfile* file, float* fdata );
00077 void umtz_add_row( umtzfile* file, const float* fdata );
00078
00079 void umtz_get_cell( const umtzfile* file, const int ixtl, float* cell );
00080 void umtz_cell_metric( const float* cell, float* metric );
00081
00082 int umtz_num_head_type( const umtzfile* file, char* head );
00083
00084
00085
00086 void umtz_make_rec( umtz_list* l, const int rec_len );
00087 void umtz_copy_pad( char* d, const char* s, const int rec_len );
00088 void umtz_rewrite_headers_ranges( umtzfile* file );
00089 void umtz_rewrite_headers_legacy( umtzfile* file );
00090
00091 #endif