Defines | Functions | Variables

marxf.cpp File Reference

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "marcmd.h"
#include "esd.h"
#include "marglobals.h"
#include "mararrays.h"
#include "config.h"
#include "version.h"
#include <mar345_header.h>
#include <mar300_header.h>
#include <nb_header.h>
#include "marxf.h"
Include dependency graph for marxf.cpp:

Go to the source code of this file.

Defines

#define NB_SIZE   1024
#define BOXSIZE   100
#define BOX_OFF   100
#define ltell(a)   lseek( a, 0, SEEK_CUR )
#define min0(a, b)   if ( b < a ) a = b
#define max0(a, b)   if ( b > a ) a = b

Functions

int put_pck (unsigned short int *, int, int, int)
void swaplong (char *, int)
void swapshort (char *, int)
int Putmar345Header (int, MAR345_HEADER)
int Putmar300Header (int, int, MAR300_HEADER)
MAR345_HEADER Getmar345Header (FILE *)
MARNB_HEADER GetmarNBHeader (FILE *)
int PutCIFHeader (char *, char *)
int PutCIFData (char *, char *, char, unsigned int *)
int GetCIFData (char *, char *, FILE *, unsigned int *)
void mar3452CIFHeader (char *, char *, MAR345_HEADER)
float GetResol (float, float, float)
void rotate_i4 (unsigned int *, int)
void rotate_i4_anti (unsigned int *, int)

Variables

MAR345_HEADER h345
char large_mem = 1
char scan_in_progress = 0
char xf_in_progress = 0
char op_in_progress = 0
char last_image [128] = { ""}
char is_data = 0
int last_total = 0
int bytes2xfer
static int n1 = 0
static int n2 = 0
static int adcavg1
static int adcavg2
static int adcavg11
static int adcavg21
static int xf_histo [65600]
static int hist_begin
static int hist_end
static int hist_max
static int add_A
static int add_B
int valmax
int valmin
int sp_pixels
int xf_pixels
int maximum_pixels
int maximum_block
int maximum_bytes
int data_offset
int current_pixel
int xform_status
int Imax
float AvgI
float SigI
static char adc_channel = 0
static unsigned short i2_record [MAX_SIZE]
static STRONG strong_rec [MAX_SIZE/2]
static FILE * fpnb = NULL
static int fdspiral = -1
static int iindex = 0
static int i_x0 = 0
static int j_y0 = 0
static int max_spiral_int = 0
static int spiral_offset = 0
static int ac_size = 0
static int i_rec = 1
static int xf_rec = 0
static int ns_rec = 0
static int fdxf = 0
static int swap_nb = 0
static char start_with_A = 1
static int spiral_size
static int total_pixels
static int last_block
static int last_pixel
static int istrong
static int nskip
static int poff
static int nb_index
static int lin_dxy [8]
static int saturation
static char spiral_only
static float fract_intens
static MAR300_HEADER h300
static MARNB_HEADER nb
static signed char x_rec [NB_SIZE]
static signed char y_rec [NB_SIZE]
static unsigned char nb_rec [NB_SIZE]
static unsigned short px_rec [9 *NB_SIZE]
static unsigned char bit [8] = { 1, 2, 4, 8, 16, 32, 64, 128 }
int adc1
int adc2
int stat_blocks_sent
int com_scanmode
char input_skip_op
char skip_op
char keep_image
char do_xform
int fdnb
int stat_scan_add
int edit_output
int nstrong
int nsat
CONFIG cfg

Define Documentation

#define BOX_OFF   100

Definition at line 45 of file marxf.cpp.

Referenced by MarXF::output_image().

#define BOXSIZE   100

Definition at line 44 of file marxf.cpp.

Referenced by MarXF::output_image().

#define ltell (   a)    lseek( a, 0, SEEK_CUR )

Definition at line 47 of file marxf.cpp.

Referenced by MarXF::output_image(), and MarXF::Transform().

#define max0 (   a,
 
)    if ( b > a ) a = b

Definition at line 49 of file marxf.cpp.

Referenced by MarXF::HistoMinMax(), MarXF::output_image(), and MarXF::Transform().

#define min0 (   a,
 
)    if ( b < a ) a = b

Definition at line 48 of file marxf.cpp.

Referenced by MarXF::output_image().

#define NB_SIZE   1024

Definition at line 43 of file marxf.cpp.

Referenced by MarXF::Transform().


Function Documentation

int GetCIFData ( char *  ,
char *  ,
FILE *  ,
unsigned int *   
)

Definition at line 1880 of file marcif.c.

References CIF_HEADER::array_id, cbf_failnez, cbf_find_category(), cbf_find_column(), cbf_find_row(), cbf_free_handle(), cbf_get_integerarray(), cbf_get_integerarrayparameters(), cbf_rewind_datablock(), cif_compression, cif_element_signed, cif_element_size, cif_element_unsigned, cif_error, cif_id, cif_maxelement, cif_minelement, cif_nelements, cif_read, printe, and verbose.

{
        cif_read = 0;
        cbf_failnez (cbf_rewind_datablock(cif))
        cbf_failnez (cbf_find_category          (cif, "array_data"))
        if ( cif_error ) {
                printe("Cannot find category: array_data");
                goto CIF_END;
        }
        cbf_failnez (cbf_find_column            (cif, "array_id"))
        cbf_failnez (cbf_find_row               (cif, hcif.array_id))
        cbf_failnez (cbf_find_column            (cif, "data"))
        cbf_failnez (cbf_get_integerarrayparameters(
                                cif,
                                &cif_compression,
                                &cif_id,
                                &cif_element_size,
                                &cif_element_signed,
                                &cif_element_unsigned,
                                &cif_nelements,
                                &cif_minelement,
                                &cif_maxelement))
        if ( cif_error ) { 
                printe("Cannot get data array parameters");
                goto CIF_END;
        }

        cbf_failnez (cbf_get_integerarray (
                        cif, 
                        &cif_id, 
                        (void *)i4_img,
                        cif_element_size,
                        cif_element_signed,
                        cif_nelements,
                        &cif_read))
        if ( cif_error ) { 
                printe("Cannot read data array");
                goto CIF_END;
        }

CIF_END:
        if ( verbose > 1 ) {
                printf("\n");
                printf("         Identifier   :\t %11d\n",cif_id);
                printf("         Compression  :\t %11d\n",cif_compression);
                printf("         Elements:    :\t %11d\n",cif_nelements);
                printf("         Min. element :\t %11d\n",cif_minelement);
                printf("         Max. element :\t %11d\n",cif_maxelement);
                printf("         Element size :\t %11d\n",cif_element_size);
                printf("         Signed       :\t %11d\n",cif_element_signed);
                printf("         Unsigned     :\t %11d\n",cif_element_unsigned);
                printf("         Elements read:\t %11d\n",cif_read);
        }

        /* Free the cbf */
        cbf_failnez (cbf_free_handle (cif))

        /* Input file has been closed my cbf_free_handle! */
        fp = NULL;

        return cif_read;
}
MAR345_HEADER Getmar345Header ( FILE *  )

Definition at line 57 of file mar345_header.c.

References MAR345_HEADER::adc_A, MAR345_HEADER::adc_B, MAR345_HEADER::add_A, MAR345_HEADER::add_B, buf, MAR345_HEADER::byteorder, MAR345_HEADER::chi, MAR345_HEADER::date, MAR345_HEADER::dist, MAR345_HEADER::doseavg, MAR345_HEADER::dosebeg, MAR345_HEADER::doseend, MAR345_HEADER::dosemax, MAR345_HEADER::dosemin, MAR345_HEADER::dosen, MAR345_HEADER::dosesig, MAR345_HEADER::filter, FLOAT, MAR345_HEADER::format, MAR345_HEADER::gain, MAR345_HEADER::gap, MAR345_HEADER::high, MAR345_HEADER::histbeg, MAR345_HEADER::histend, MAR345_HEADER::histmax, i, InputType(), INTEGER, j, MAR345_HEADER::kV, MAR345_HEADER::mA, MAR345_HEADER::mode, MAR345_HEADER::multiplier, N_GAPS, MAR345_HEADER::omebeg, MAR345_HEADER::omeend, MAR345_HEADER::omeosc, MAR345_HEADER::phibeg, MAR345_HEADER::phiend, MAR345_HEADER::phiosc, MAR345_HEADER::pixel_height, MAR345_HEADER::pixel_length, MAR345_HEADER::pixels, MAR345_HEADER::polar, MAR345_HEADER::program, MAR345_HEADER::remark, RemoveBlanks(), MAR345_HEADER::resol, MAR345_HEADER::roff, MAR345_HEADER::scanner, Setmar345Header(), MAR345_HEADER::size, MAR345_HEADER::slitx, MAR345_HEADER::slity, MAR345_HEADER::source, str, STRING, MAR345_HEADER::theta, MAR345_HEADER::time, MAR345_HEADER::toff, MAR345_HEADER::valavg, MAR345_HEADER::valmax, MAR345_HEADER::valmin, MAR345_HEADER::valsig, MAR345_HEADER::version, MAR345_HEADER::wave, WrongType(), MAR345_HEADER::xcen, and MAR345_HEADER::ycen.

{
MAR345_HEADER   h;
int             i,j, ntok=0,fpos=0;
int             ngaps = 0;
char            str[64], buf[128], *key, *token[20];
int             head[32];


        /*
         * Set defaults
         */

        h = Setmar345Header();

        if( fp == NULL ) return( h ); 

        fseek( fp, 0, SEEK_SET );

        if ( fread( head, sizeof(int), 32, fp ) < 32) {
                return( h );
        }

        /* First 32 longs contain: */
        h.byteorder     = (int  )head[ 0];
        h.size          = (short)head[ 1];
        h.high          = (int  )head[ 2];
        h.format        = (char )head[ 3];
        h.mode          = (char )head[ 4];
        h.pixels        = (int  )head[ 5];
        h.pixel_length  = (float)head[ 6];
        h.pixel_height  = (float)head[ 7];
        h.wave          = (float)head[ 9]/1000000.;
        h.dist          = (float)head[ 8]/1000.;
        h.phibeg        = (float)head[10]/1000.;
        h.phiend        = (float)head[11]/1000.;
        h.omebeg        = (float)head[12]/1000.;
        h.omeend        = (float)head[13]/1000.;
        h.chi           = (float)head[14]/1000.;
        h.theta         = (float)head[15]/1000.;

        /* First ASCII line (bytes 128 to 192 contains: mar research */
        /* Ignore it...                                              */

        fpos = fseek( fp, 192, SEEK_SET );

        /*
         * Read input lines
         */

        while( fgets(buf,64,fp)!= NULL){

                /* Always add 64 bytes to current filemarker after 1 read */
                fpos += 64;
                fseek( fp, fpos, SEEK_SET );

                /* Keyword: END OF HEADER*/
                if(strstr(buf,"END OF HEADER") ) 
                        break;
                else if ( strstr( buf, "SKIP" ) ) continue;

                if ( strlen(buf) < 2 ) continue;

                /* Scip comment lines */
                if( buf[0] == '#' || buf[0]=='!' ) continue;

                /* Tokenize input string */
                /* ntok  = number of items on input line - 1 (key) */
                ntok = -1;      

                for(i=0;i<64;i++) {
                        /* Convert TAB to SPACE */
                        if( buf[i] == '\t') buf[i] = ' ';
                        if( buf[i] == '\f') buf[i] = ' '; 
                        if( buf[i] == '\n') buf[i] = '\0'; 
                        if( buf[i] == '\r') buf[i] = '\0'; 
                        if( buf[i] == '\0') break;
                }

                for(i=0;i<strlen(buf);i++) {
                        if( buf[i] == ' ' ) continue;
                        ntok++; 
                        for (j=i;j<strlen(buf);j++) 
                                if( buf[j] == ' ') break;
                        i=j;
                }
                if (strlen(buf) < 3 ) continue; 

                key = strtok( buf, " ");

                /* Convert keyword to uppercase */
                for ( i=0; i<strlen(key); i++ )
                        if ( isalnum( key[i] ) ) key[i] = toupper( key[i] );

                for(i=0;i<ntok;i++) {
                        token[i] = strtok( NULL, " ");
                        strcpy( str, token[i] );

                        for ( j=0; j<strlen( str ); j++ )
                                if ( isalnum( str[j] ) && !strstr(key,"PROG") ) str[j] = toupper( str[j] );
                        strcpy( token[i] , str );
                        RemoveBlanks( token[i] );
                }

                /* Keyword: PROGRAM */
                if(!strncmp(key,"PROG",4) && ntok >= 2 ) {
                        strcpy( h.program, token[0] );
                        strcpy( h.version, token[2] );
                }

                /* Keyword: OFFSET */
                else if(!strncmp(key,"OFFS",4) && ntok >= 1 ) {
                        for ( i=0; i<ntok; i++ ) {
                            if ( strstr( token[i], "ROF" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.roff = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "TOF" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.toff = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            /* Compatibility with previous versions for GAP entries: */
                            else if ( strstr( token[i], "GAP" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.gap[1]  = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                        }
                }
                /* Keyword: GAP */
                else if(!strncmp(key,"GAPS",4) && ntok >= 1 ) {
                        for ( i=0; i<ntok; i++ ) {
                                if ( InputType( token[i] ) == INTEGER ) {
                                        if ( ngaps < N_GAPS ) 
                                                h.gap[ngaps++]  = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                        }
                }

                /* Keyword: ADC */
                else if(!strncmp(key,"ADC",3) && ntok >= 1 ) {
                        for ( i=0; i<ntok; i++ ) {
                            if ( strstr( token[i], "A" ) && strlen( token[i] ) == 1 ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.adc_A = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                            else if ( strstr( token[i], "B" ) && strlen( token[i] ) == 1 ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.adc_B = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                            else if ( strstr( token[i], "ADD_A" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.add_A = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                            else if ( strstr( token[i], "ADD_B" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.add_B = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                        }
                }

                /* Keyword: MULTIPLIER */
                else if(!strncmp(key,"MULT",4) && ntok >= 0 )
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.multiplier = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                /* Keyword: GAIN */
                else if(!strncmp(key,"GAIN",4) && ntok >= 0 )
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.gain = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                /* Keyword: COUNTS */
                else if(!strncmp(key,"COUN",4) && ntok >= 1 )
                        for(i=0;i<ntok;i++) {
                            if ( strstr( token[i], "STA" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.dosebeg = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "END" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.doseend = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "MIN" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.dosemin = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "MAX" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.dosemax = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "AVE" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.doseavg = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "SIG" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.dosesig = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "NME" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.dosen = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                        }

                /* Keyword: MODE */
                else if( !strncmp(key,"MODE",4) && ntok >= 0 ) 
                        if ( strstr( token[0], "TIME" ) )
                                h.mode  = 1;
                        else if ( strstr( token[0], "DOSE" ) )
                                h.mode  = 0;
                        else
                                WrongType( STRING, key, token[0] );

                /* Keyword: DISTANCE */
                else if(!strncmp(key,"DIST",4) && ntok >= 0 )
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.dist = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                /* Keyword: PIXELSIZE */
                else if(!strncmp(key,"PIXE",4) && ntok >= 0 ) {
                        for(i=0;i<ntok;i++) {
                            if ( strstr( token[i], "LEN" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.pixel_length = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "HEI" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.pixel_height= atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                        }
                }


                /* Keyword: SCANNER */
                else if(!strncmp(key,"SCAN",4) && ntok >= 0 )
                        if ( InputType( token[0] ) == INTEGER ) 
                                h.scanner = atoi( token[0] );
                        else
                                WrongType( INTEGER, key, token[0] );

                /* Keyword: HIGH */
                else if(!strncmp(key,"HIGH",4) && ntok >= 0 )
                        if ( InputType( token[0] ) == INTEGER ) 
                                h.high    = atoi( token[0] );
                        else
                                WrongType( INTEGER, key, token[0] );

                /* Keyword: DATE */
                else if(!strncmp(key,"DATE",4) && ntok >= 0 ) {
                        for ( i=0; i<strlen( buf ); i++ ) 
                                if ( buf[i] == ' ' ) break;
                        for ( j=i; j<strlen( buf ); j++ ) 
                                if ( buf[j] != ' ' ) break;
                        strcpy( h.date, buf+j );
                }

                /* Keyword: REMARK */
                else if(!strncmp(key,"REMA",4) && ntok >= 0 ) {
                        for ( i=0; i<strlen( buf ); i++ ) 
                                if ( buf[i] == ' ' ) break;
                        for ( j=i; j<strlen( buf ); j++ ) 
                                if ( buf[j] != ' ' ) break;
                        strcpy( h.remark, buf+j );
                }

                /* Keyword: FORMAT */
                else if(!strncmp(key,"FORM",4) && ntok >= 1 )  {
                        if ( InputType( token[0] ) == INTEGER ) 
                                h.size = atoi( token[0] );
                        else
                                WrongType( INTEGER, key, token[0] );
                        for ( i=1; i<ntok; i++ ) {
                                if ( strstr( token[i], "PCK" ) ) 
                                        h.format = 1;
                                else if ( strstr( token[i], "IMA" ) ) 
                                        h.format = 0;
                                else if ( strstr( token[i], "SPI" ) )
                                        h.format = 2;
                                else {
                                        if ( InputType( token[i] ) == INTEGER ) 
                                                h.pixels = atoi( token[i] );
                                        else
                                                WrongType( INTEGER, key, token[i] );
                                }
                        }
                }

                /* Keyword: LAMBDA or WAVELENGTH */
                else if( (!strncmp(key,"LAMB",4) || !strncmp(key,"WAVE",4) ) && ntok >= 0 ) 
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.wave = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );
                

                /* Keyword: MONOCHROMATOR */
                else if( !strncmp(key,"MONO",4) && ntok >=0 ) { 
                    for ( i=0; i<ntok; i++ ) {
                         if ( strstr( token[i], "POLA" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.polar = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                        }
                        else {
                                strcat( h.filter, token[i] );
                        }
                    }
                }


                /* Keyword: PHI */
                else if(!strncmp(key,"PHI",3) && ntok >= 1 )
                        for(i=0;i<ntok;i++) {
                            if ( strstr( token[i], "STA" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.phibeg = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "END" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.phiend = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "OSC" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.phiosc = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                        }

                /* Keyword: OMEGA */
                else if(!strncmp(key,"OMEG",4) && ntok >= 1 )
                        for(i=0;i<ntok;i++) {
                            if ( strstr( token[i], "STA" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.omebeg = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "END" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.omeend = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "OSC" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.omeosc = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                        }

                /* Keyword: TWOTHETA */
                else if( !strncmp(key,"TWOT",4) && ntok >= 0 ) 
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.theta = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                /* Keyword: CHI */
                else if( !strncmp(key,"CHI",3) && ntok >= 0 ) 
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.chi   = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                /* Keyword: RESOLUTION */
                else if( !strncmp(key,"RESO",4) && ntok >= 0 ) 
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.resol = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                /* Keyword: TIME */
                else if( !strncmp(key,"TIME",4) && ntok >= 0 ) 
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.time  = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                /* Keyword: CENTER */
                else if( !strncmp(key,"CENT",4) && ntok >= 1 ) {
                        for(i=0;i<ntok;i++) {
                            if ( strstr( token[i], "X" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.xcen = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "Y" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.ycen = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                        }
                }
                
                /* Keyword: COLLIMATOR, SLITS */
                else if( ( !strncmp(key,"COLL",4) || !strncmp(key,"SLIT",4) )&& ntok >= 1 ) {
                        for(i=0;i<ntok;i++) {
                            if ( strstr( token[i], "WID" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.slitx= atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "HEI" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.slity = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                        }
                }
                
                /* Keyword: GENERATOR */
                else if( !strncmp(key,"GENE",4) && ntok >= 0 ) {
                    for(i=0;i<ntok;i++) {
                        if ( strstr( token[i], "MA" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.mA = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                        }
                        else if ( strstr( token[i], "KV" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.kV = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                        }
                        else
                                strcat( h.source, token[i] );
                    }
                }

                /* Keyword: INTENSITY */
                else if( !strncmp(key,"INTE",4) && ntok >= 0 ) {
                    for(i=0;i<ntok;i++) {
                        if ( strstr( token[i], "MIN" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.valmin = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                        }
                        else if ( strstr( token[i], "MAX" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.valmax = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                        }
                        else if ( strstr( token[i], "AVE" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.valavg = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                        }
                        else if ( strstr( token[i], "SIG" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.valsig = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                        }
                    }
                }
                
                /* Keyword: HISTOGRAM */
                else if( !strncmp(key,"HIST",4) && ntok >= 0 ) {
                    for(i=0;i<ntok;i++) {
                        if ( strstr( token[i], "STA" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.histbeg = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                        }
                        else if ( strstr( token[i], "END" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.histend = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                        }
                        else if ( strstr( token[i], "MAX" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.histmax = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                        }
                    }
                }
                
        } /* End of while loop */

        /*
         * End of input lines (while loop)
         */

        return( h );

}
MARNB_HEADER GetmarNBHeader ( FILE *  fp)

Definition at line 49 of file nb_header.c.

References buf, MARNB_HEADER::byteorder, MARNB_HEADER::cutoff, MARNB_HEADER::date, FLOAT, MARNB_HEADER::fpos, MARNB_HEADER::gain, i, InputType(), INTEGER, j, MAX_NBMODE, MARNB_HEADER::mode, MARNB_HEADER::nbs, MARNB_HEADER::phioff, MARNB_HEADER::pixel_height, MARNB_HEADER::pixel_length, MARNB_HEADER::pixels, MARNB_HEADER::program, RemoveBlanks(), MARNB_HEADER::roff, MARNB_HEADER::scale, MARNB_HEADER::scanner, SetmarNBHeader(), MARNB_HEADER::size, MARNB_HEADER::skip, str, MARNB_HEADER::subpixels, MARNB_HEADER::tot_pixels, MARNB_HEADER::version, WrongType(), MARNB_HEADER::x, and MARNB_HEADER::y.

Referenced by MarXF::mar_start_scan_readout().

{
MARNB_HEADER    h;
int             i,j, itmp, size,fpos, ntok=0;
char            str[64], buf[128], *key, *token[20];

        /*
         * Set defaults
         */

        h = SetmarNBHeader();


        if( fp == NULL ) return( h );

        fseek( fp, 0, SEEK_SET );

        if ( fread( &h.byteorder, sizeof(int), 1, fp ) < 1 ) {
                return( h );
        }
        fgets( buf, 60, fp );
        fpos = 64;

        /* First ASCII line (bytes 128 to 192 contains: mar research */
        /* Ignore it...                                              */

        fseek( fp, 192, SEEK_SET );
        fpos = 192;

        /*
         * Read input lines
         */

        while( fgets(buf,64,fp)!= NULL){

                /* Always add 64 bytes to current filemarker after 1 read */
                fpos += 64;
                fseek( fp, fpos, SEEK_SET );

                /* Keyword: END OF HEADER*/
                if(strstr(buf,"END OF HEADER") ) 
                        break;
                else if(strstr(buf,"REMARK") ) 
                        continue;
/*
*/

                if ( strlen(buf) < 2 ) continue;

                /* Scip comment lines */
                if( buf[0] == '#' || buf[0]=='!' ) continue;

                /* Tokenize input string */
                /* ntok  = number of items on input line - 1 (key) */
                ntok = -1;      

                for(i=0;i<64;i++) {
                        /* Convert TAB to SPACE */
                        if( buf[i] == '\t') buf[i] = ' ';
                        if( buf[i] == '\f') buf[i] = ' '; 
                        if( buf[i] == '\n') buf[i] = '\0'; 
                        if( buf[i] == '\r') buf[i] = '\0'; 
                        if( buf[i] == '\0') break;
                }

                for(i=0;i<strlen(buf);i++) {
                        if( buf[i] == ' ' ) continue;
                        ntok++; 
                        for (j=i;j<strlen(buf);j++) 
                                if( buf[j] == ' ') break;
                        i=j;
                }
                if (strlen(buf) < 3 ) continue; 

                key = strtok( buf, " ");

                /* Convert keyword to uppercase */
                for ( i=0; i<strlen(key); i++ )
                        if ( isalnum( key[i] ) ) key[i] = toupper( key[i] );

                for(i=0;i<ntok;i++) {
                        token[i] = strtok( NULL, " ");
                        strcpy( str, token[i] );

                        for ( j=0; j<strlen( str ); j++ )
                                if ( isalnum( str[j] ) ) str[j] = toupper( str[j] );
                        strcpy( token[i] , str );
                        RemoveBlanks( token[i] );
                }

                /* Keyword: PROGRAM */
                if(!strncmp(key,"PROG",4) && ntok >= 2 ) {
                        strcpy( h.program, token[0] );
                        strcpy( h.version, token[2] );
                }

                /* Keyword: SCALE */
                else if(!strncmp(key,"SCAL",4) && ntok >= 0 )
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.scale = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                /* Keyword: PHIOFF */
                else if(!strncmp(key,"PHI",3) && ntok >= 0 )
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.phioff = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                /* Keyword: CUTOFF */
                else if(!strncmp(key,"CUT",3) && ntok >= 0 )
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.cutoff = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                /* Keyword: GAIN */
                else if(!strncmp(key,"GAIN",4) && ntok >= 0 )
                        if ( InputType( token[0] ) >= INTEGER ) 
                                h.gain = atof( token[0] );
                        else
                                WrongType( FLOAT, key, token[0] );

                else if(!strncmp(key,"PIXE",4) && ntok >= 0 ) {
                        for(i=0;i<ntok;i++) {
                            if ( strstr( token[i], "LEN" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.pixel_length = atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "HEI" ) ) {
                                i++;
                                if ( InputType( token[i] ) >= INTEGER ) {
                                        h.pixel_height= atof( token[i] );
                                }
                                else
                                        WrongType( FLOAT, key, token[i] );
                            }
                            else if ( strstr( token[i], "SUB" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.subpixels = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                        }
                }


                /* Keyword: SCANNER */
                else if(!strncmp(key,"SCAN",4) && ntok >= 0 )
                        if ( InputType( token[0] ) == INTEGER ) 
                                h.scanner = atoi( token[0] );
                        else
                                WrongType( INTEGER, key, token[0] );

                /* Keyword: DATE */
                else if(!strncmp(key,"DATE",4) && ntok >= 0 ) {
                        for ( i=0; i<strlen( buf ); i++ ) 
                                if ( buf[i] == ' ' ) break;
                        for ( j=i; j<strlen( buf ); j++ ) 
                                if ( buf[j] != ' ' ) break;
                        strcpy( h.date, buf+j );
                }

                /* Keyword: MODE   */
                else if(!strncmp(key,"MODE",4) && ntok >= 0 ) {
                    if ( InputType( token[0] ) != INTEGER ) 
                        WrongType( INTEGER, key, token[0] );
                    else {
                        size = atoi( token[0] );

                        for ( j=0, i=0; i<MAX_NBMODE; i++ ) {
                                if ( h.size[i] == 0 && h.mode <= MAX_NBMODE ) {
                                        h.size[h.mode] = size;
                                        j = h.mode;
                                        h.mode++;
                                        break;
                                }
                                else if ( h.size[i] == size ) {
                                        j = i;
                                        break;
                                }
                        }

                        for ( i=1; i<ntok; i++ ) {
                                if ( strstr( token[i], "POS" ) ) {
                                        i++;
                                        if ( InputType( token[i] ) == INTEGER ) 
                                                h.fpos[j] = atoi( token[i] );
                                        else
                                                WrongType( INTEGER, key, token[i] );
                                }
                                else if ( strstr( token[i], "PIX" ) ) {
                                        i++;
                                        if ( InputType( token[i] ) == INTEGER ) 
                                                h.pixels[j] = atoi( token[i] );
                                        else
                                                WrongType( INTEGER, key, token[i] );
                                }
                                else if ( strstr( token[i], "X" ) ) {
                                        i++;
                                        if ( InputType( token[i] ) == INTEGER ) 
                                                h.x[j] = atoi( token[i] );
                                        else
                                                WrongType( INTEGER, key, token[i] );
                                }
                                else if ( strstr( token[i], "Y" ) ) {
                                        i++;
                                        if ( InputType( token[i] ) == INTEGER ) 
                                                h.y[j] = atoi( token[i] );
                                        else
                                                WrongType( INTEGER, key, token[i] );
                                }
                                else if ( strstr( token[i], "SK" ) ) {
                                        i++;
                                        if ( InputType( token[i] ) == INTEGER ) 
                                                h.skip[j] = atoi( token[i] );
                                        else
                                                WrongType( INTEGER, key, token[i] );
                                }
                                else if ( strstr( token[i], "RO" ) ) {
                                        i++;
                                        if ( InputType( token[i] ) == INTEGER ) 
                                                h.roff[j] = atoi( token[i] );
                                        else
                                                WrongType( INTEGER, key, token[i] );
                                }
                         }
                    }
                }

                /* Keyword: NUMBER */
                else if(!strncmp(key,"NUMB",3) && ntok >= 1 ) {
                        for(i=0;i<ntok;i++) {
                            if ( strstr( token[i], "PIX" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.tot_pixels = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                            else if ( strstr( token[i], "NEI" ) ) {
                                i++;
                                if ( InputType( token[i] ) == INTEGER ) {
                                        h.nbs = atoi( token[i] );
                                }
                                else
                                        WrongType( INTEGER, key, token[i] );
                            }
                        }

                }
                
        } /* End of while loop */

        /*
         * End of input lines (while loop)
         */

        fseek( fp, 4096, SEEK_SET );

        return( h );

}
float GetResol ( float  radius,
float  distance,
float  wave 
)

Definition at line 37 of file utils.c.

Referenced by MarXF::get_header_values().

{
float   res;

        if ( distance < 1.0 ) return 0.0;

        res = atan( radius/distance);   /* Two theta !!! */

        if ( res < 0.0001 ) return 0.0;

        res = wave/(2.0*sin(res/2.0)); 
        
        return( res );
}
void mar3452CIFHeader ( char *  ,
char *  ,
MAR345_HEADER   
)

Definition at line 1613 of file marcif.c.

References MAR345_HEADER::adc_A, MAR345_HEADER::adc_B, MAR345_HEADER::add_A, MAR345_HEADER::add_B, AXIS_CHI, AXIS_DISTANCE, AXIS_OMEGA, AXIS_PHI, AXIS_THETA, MAR345_HEADER::chi, MAR345_HEADER::date, MAR345_HEADER::dist, MAR345_HEADER::doseavg, MAR345_HEADER::dosebeg, MAR345_HEADER::doseend, MAR345_HEADER::dosemax, MAR345_HEADER::dosemin, MAR345_HEADER::dosen, MAR345_HEADER::dosesig, MAR345_HEADER::filter, MAR345_HEADER::gain, MAR345_HEADER::gap, MAR345_HEADER::high, MAR345_HEADER::histbeg, MAR345_HEADER::histend, MAR345_HEADER::histmax, i, MAR345_HEADER::kV, MAR345_HEADER::mA, MAR345_HEADER::mode, MAR345_HEADER::multiplier, now, MAR345_HEADER::omebeg, MAR345_HEADER::omeend, MAR345_HEADER::omeosc, MAR345_HEADER::phibeg, MAR345_HEADER::phiend, MAR345_HEADER::phiosc, MAR345_HEADER::pixel_height, MAR345_HEADER::pixel_length, MAR345_HEADER::pixels, MAR345_HEADER::polar, MAR345_HEADER::roff, MAR345_HEADER::scanner, MAR345_HEADER::size, MAR345_HEADER::source, str, MAR345_HEADER::theta, MAR345_HEADER::time, MAR345_HEADER::toff, MAR345_HEADER::valavg, MAR345_HEADER::valmax, MAR345_HEADER::valmin, MAR345_HEADER::valsig, MAR345_HEADER::wave, MAR345_HEADER::xcen, and MAR345_HEADER::ycen.

Referenced by MarXF::output_image().

{
char    *c,str[64],num[16];
int     i;
float   pixelsize;
time_t  now;

        time( &now );

        /* Initialize CIF Header */
        memset( (char *)&hcif, 0, sizeof(CIF_HEADER) );

        pixelsize = h345.pixel_height;
        if ( pixelsize > 1.0 ) pixelsize /= 1000.;

        hcif.binary_id                                  = 1;

        strcpy(hcif.entry_id,                           "img1");
        strcpy(hcif.scan_id,                            "scan1");
        strcpy(hcif.array_id,                           "img1");
        strcpy(hcif.crystal_id,                         "xtal1");
        sprintf(str, "SN_%03d",h345.scanner);
        strcpy(hcif.element_id,                         str);
        strcpy(hcif.mar_id,                             str);
        strcpy(hcif.diffrn_id,                          "diffrn1");
        strcpy(hcif.data_id,                            "data1");
        strcpy(hcif.detector_id,                        "mar345");
        strcpy(hcif.frame_id,                           "frm1");

        sprintf(str, "%s",(char *)ctime( &now ) );
        str[ strlen( str ) -1 ] = '\0';
        if ( strlen( h345.date ) > 5 ) 
        strcpy(hcif.audit.creation_date,                h345.date);
        else
        strcpy(hcif.audit.creation_date,                str);
        
        sprintf(str, "Created by %s",                   prg);
        strcpy(hcif.audit.creation_method,              str);

        strcpy(hcif.diffrn_radiation.detector,          "Image Plate");
        strcpy(hcif.diffrn_radiation.collimation,       "double slits");
        strcpy(hcif.diffrn_radiation.monochromator,     h345.filter);
        hcif.diffrn_radiation_wavelength.polarisn_ratio = h345.polar;
        hcif.diffrn_radiation_wavelength.polarisn_norm  = 0.0;
        hcif.diffrn_radiation_wavelength.wavelength     = h345.wave;
        hcif.diffrn_radiation_wavelength.wavelength_wt  = 1.0;

        if ( strlen( h345.source ) )    
        strcpy(hcif.diffrn_source.source,               h345.source);
        else
        strcpy(hcif.diffrn_source.source,               "unknown");
        strcpy(hcif.diffrn_source.type,                 "unknown");
        hcif.diffrn_source.current                      = h345.mA;
        hcif.diffrn_source.voltage                      = h345.kV;
        hcif.diffrn_source.power                        = h345.kV*h345.mA;

        strcpy(hcif.array_structure.compression_type,   "x-CBF_PACKED");
        strcpy(hcif.array_structure.encoding_type,      "unsigned 32-bit integer");
        strcpy(hcif.array_structure.byte_order,         "little_endian");

        hcif.array_structure_list[0].dimension          = h345.size;
        hcif.array_structure_list[1].dimension          = h345.size;
        hcif.array_structure_list[0].index              = 1;
        hcif.array_structure_list[1].index              = 2;
        hcif.array_structure_list[0].precedence         = 2;
        hcif.array_structure_list[1].precedence         = 1;
        strcpy(hcif.array_structure_list[0].direction,  "increasing");
        strcpy(hcif.array_structure_list[1].direction,  "increasing");

        hcif.array_element_size.pixelsize[0]            = pixelsize/1000.;
        hcif.array_element_size.pixelsize[1]            = pixelsize/1000.;
        hcif.array_element_size.index[0]                = 1;
        hcif.array_element_size.index[1]                = 2;

        hcif.array_intensities.gain                     = h345.gain;
        hcif.array_intensities.overload                 = 250000;
        hcif.array_intensities.undefined_value          = 999999;
        strcpy(hcif.array_intensities.linearity,        "linear");
        hcif.array_intensities.offset                   = 0;
        hcif.array_intensities.scaling                  = h345.multiplier;

        strcpy(hcif.axis[AXIS_PHI].id,                  "phi" );
        strcpy(hcif.axis[AXIS_PHI].type,                "rotation" );
        strcpy(hcif.axis[AXIS_PHI].equipment,           "detector" );
        strcpy(hcif.axis[AXIS_PHI].depends_on,          "." );
        hcif.axis[AXIS_PHI].vector[0]                   = 1.0;
        hcif.axis[AXIS_PHI].vector[1]                   = 0.0;
        hcif.axis[AXIS_PHI].vector[2]                   = 0.0;

        strcpy(hcif.axis[AXIS_OMEGA].id,                "omega" );
        strcpy(hcif.axis[AXIS_OMEGA].type,              "rotation" );
        strcpy(hcif.axis[AXIS_OMEGA].equipment,         "detector" );
        strcpy(hcif.axis[AXIS_OMEGA].depends_on,        "." );
        hcif.axis[AXIS_OMEGA].vector[0]                 = 0.0;
        hcif.axis[AXIS_OMEGA].vector[1]                 = 1.0;
        hcif.axis[AXIS_OMEGA].vector[2]                 = 0.0;

        strcpy(hcif.axis[AXIS_CHI].id,                  "chi" );
        strcpy(hcif.axis[AXIS_CHI].type,                "rotation" );
        strcpy(hcif.axis[AXIS_CHI].equipment,           "detector" );
        strcpy(hcif.axis[AXIS_CHI].depends_on,          "." );
        hcif.axis[AXIS_CHI].vector[0]                   = 0.0;
        hcif.axis[AXIS_CHI].vector[1]                   = 0.0;
        hcif.axis[AXIS_CHI].vector[2]                   = 1.0;

        strcpy(hcif.axis[AXIS_THETA].id,                "twotheta" );
        strcpy(hcif.axis[AXIS_THETA].type,              "rotation" );
        strcpy(hcif.axis[AXIS_THETA].equipment,         "detector" );
        strcpy(hcif.axis[AXIS_THETA].depends_on,        "." );
        hcif.axis[AXIS_THETA].vector[0]                 = 1.0;
        hcif.axis[AXIS_THETA].vector[1]                 = 0.0;
        hcif.axis[AXIS_THETA].vector[2]                 = 0.0;

        strcpy(hcif.axis[AXIS_DISTANCE].id,             "distance" );
        strcpy(hcif.axis[AXIS_DISTANCE].type,           "translation" );
        strcpy(hcif.axis[AXIS_DISTANCE].equipment,      "detector" );
        strcpy(hcif.axis[AXIS_DISTANCE].depends_on,     "." );
        hcif.axis[AXIS_DISTANCE].vector[0]              = 0.0;
        hcif.axis[AXIS_DISTANCE].vector[1]              = 0.0;
        hcif.axis[AXIS_DISTANCE].vector[2]              = -1.0;

        strcpy(hcif.diffrn_detector.detector,           "Image Plate" );
        strcpy(hcif.diffrn_detector.type,               "mar345 IP system" );

        hcif.diffrn_detector_element.center_x           = h345.xcen*pixelsize;
        hcif.diffrn_detector_element.center_y           = h345.ycen*pixelsize;

        /* marresearch extensions */
        if ( h345.mode == 0 )
                strcpy(hcif.diffrn_detector_mar_exposure.type,  "dose");
        else
                strcpy(hcif.diffrn_detector_mar_exposure.type,  "time");
        hcif.diffrn_detector_mar_exposure.time                          = h345.time;
        hcif.diffrn_detector_mar_exposure.dose                          = h345.doseavg;

        for (i=0; i<=AXIS_DISTANCE; i++ ) {
                hcif.diffrn_detector_mar_axis[i].angle_start    = 
                hcif.diffrn_detector_mar_axis[i].angle_end      = 
                hcif.diffrn_detector_mar_axis[i].angle_increment= 
                hcif.diffrn_detector_mar_axis[i].displacement   = 0.0; 
        }

        hcif.diffrn_detector_mar_axis[AXIS_PHI].angle_start             = h345.phibeg;
        hcif.diffrn_detector_mar_axis[AXIS_PHI].angle_end               = h345.phiend;
        hcif.diffrn_detector_mar_axis[AXIS_OMEGA].angle_start           = h345.omebeg;
        hcif.diffrn_detector_mar_axis[AXIS_OMEGA].angle_end             = h345.omeend;
        hcif.diffrn_detector_mar_axis[AXIS_CHI].angle_start             = h345.chi;
        hcif.diffrn_detector_mar_axis[AXIS_CHI].angle_end               = h345.chi;
        hcif.diffrn_detector_mar_axis[AXIS_THETA].angle_end             = h345.theta;
        hcif.diffrn_detector_mar_axis[AXIS_THETA].angle_start           = h345.theta;
        hcif.diffrn_detector_mar_axis[AXIS_OMEGA].oscillations          = h345.omeosc;
        hcif.diffrn_detector_mar_axis[AXIS_PHI  ].oscillations          = h345.phiosc;

        hcif.diffrn_detector_mar_axis[AXIS_DISTANCE].angle_start        = 0.0;
        hcif.diffrn_detector_mar_axis[AXIS_DISTANCE].angle_end          = 0.0;
        hcif.diffrn_detector_mar_axis[AXIS_DISTANCE].displacement       = h345.dist;

        for (i=0; i<=AXIS_DISTANCE; i++ ) {
                strcpy( hcif.diffrn_detector_mar_axis[i].axis_id,       hcif.axis[i].id);
                hcif.diffrn_detector_mar_axis[i].angle_increment        = hcif.diffrn_detector_mar_axis[i].angle_end -
                                                                          hcif.diffrn_detector_mar_axis[i].angle_start;\
        }

        hcif.diffrn_detector_mar_exposure_dose.start                    = h345.dosebeg;
        hcif.diffrn_detector_mar_exposure_dose.end                      = h345.doseend;
        hcif.diffrn_detector_mar_exposure_dose.min                      = h345.dosemin;
        hcif.diffrn_detector_mar_exposure_dose.max                      = h345.dosemax;
        hcif.diffrn_detector_mar_exposure_dose.avg                      = h345.doseavg;
        hcif.diffrn_detector_mar_exposure_dose.esd                      = h345.dosesig;
        hcif.diffrn_detector_mar_exposure_dose.measurements             = h345.dosen;

        hcif.diffrn_detector_mar_adc.channel_a                          = h345.adc_A;
        hcif.diffrn_detector_mar_adc.channel_b                          = h345.adc_B;
        hcif.diffrn_detector_mar_adc.add_channel_a                      = h345.add_A;
        hcif.diffrn_detector_mar_adc.add_channel_b                      = h345.add_B;
        hcif.diffrn_detector_mar_adc.gain                               = h345.gain;
        hcif.diffrn_detector_mar_adc.multiplier                         = h345.multiplier;
        if ( h345.pixel_height == 100.f || h345.pixel_height == 0.1f )
                hcif.diffrn_detector_mar_adc.oversampling               = 1;
        else
                hcif.diffrn_detector_mar_adc.oversampling               = 2;

        hcif.diffrn_detector_mar_scan.scanmode                          = h345.size;
        hcif.diffrn_detector_mar_scan.number_of_pixels                  = h345.pixels;
        hcif.diffrn_detector_mar_scan.number_of_pixels_larger_16_bit    = h345.high;
        hcif.diffrn_detector_mar_scan.radial_offset                     = h345.roff;
        hcif.diffrn_detector_mar_scan.tangential_offset                 = h345.toff;
        hcif.diffrn_detector_mar_scan.pixel_height                      = h345.pixel_height;
        hcif.diffrn_detector_mar_scan.pixel_length                      = h345.pixel_length;

        hcif.diffrn_detector_mar_data.intensity_min                     = h345.valmin;
        hcif.diffrn_detector_mar_data.intensity_max                     = h345.valmax;
        hcif.diffrn_detector_mar_data.intensity_avg                     = h345.valavg;
        hcif.diffrn_detector_mar_data.intensity_esd                     = h345.valsig;
        hcif.diffrn_detector_mar_data.histogram_start                   = h345.histbeg;
        hcif.diffrn_detector_mar_data.histogram_end                     = h345.histend;
        hcif.diffrn_detector_mar_data.histogram_max                     = h345.histmax;

        for ( i=0; i<8; i++ )
                hcif.diffrn_detector_mar_gaps.gap[i]                    = h345.gap[i];

        /* From the entire file name path, cut off directory */
        c = strrchr( f, '/' );
        if ( c == NULL ) 
                c = f;
        else    
                c++;

        /* From the remaining filename root + extension, cut off extension */
        strcpy( str, c);
        c = strrchr ( str, '.' );
        if ( c!=NULL ) {
                i=strlen( c );
                str[ strlen(str) - i ] = '\0';
        }
        strcpy( hcif.diffrn_scan.frame_id_start,        str);
        strcpy( hcif.diffrn_scan.frame_id_end,          str);

        for (i=strlen(str)-1;i>=0; i--) {
                if ( str[i] == '_' ) {
                        str[i] = '\0';
                        break;
                }
        }
        strcpy(hcif.crystal_id,                         str);
        hcif.diffrn_scan.frames                         = 1;

        strcpy(hcif.diffrn_measurement.device,          "oscillation camera");
        strcpy(hcif.diffrn_measurement.device_type,     "mar detector");
        strcpy(hcif.diffrn_measurement.method,          "phi scan");
        hcif.diffrn_measurement.sample_detector_distance = h345.dist;
        hcif.diffrn_measurement.number_of_axes          = 1;

        strcpy(hcif.diffrn_scan_axis[AXIS_PHI].axis_id, "phi" );
        hcif.diffrn_scan_axis[AXIS_PHI].angle_start     = h345.phibeg;
        hcif.diffrn_scan_axis[AXIS_PHI].angle_range     = h345.phiend-h345.phibeg;
        hcif.diffrn_scan_axis[AXIS_PHI].angle_increment = h345.phiend-h345.phibeg;

        strcpy(hcif.diffrn_scan_axis[AXIS_OMEGA].axis_id,"omega" );
        hcif.diffrn_scan_axis[AXIS_OMEGA].angle_start   = h345.omebeg;
        hcif.diffrn_scan_axis[AXIS_OMEGA].angle_range   = h345.omeend-h345.omebeg;
        hcif.diffrn_scan_axis[AXIS_OMEGA].angle_increment= h345.omeend-h345.omebeg;

        strcpy(hcif.diffrn_scan_frame_axis[AXIS_PHI].axis_id,   "phi" );
        hcif.diffrn_scan_frame_axis[AXIS_PHI].angle             = h345.phiend;
        hcif.diffrn_scan_frame_axis[AXIS_PHI].displacement      = 0.0;

        strcpy(hcif.diffrn_scan_frame_axis[AXIS_OMEGA].axis_id, "omega" );
        hcif.diffrn_scan_frame_axis[AXIS_OMEGA].angle           = h345.omeend;
        hcif.diffrn_scan_frame_axis[AXIS_OMEGA].displacement    = 0.0;

        strcpy(hcif.diffrn_scan_frame_axis[AXIS_CHI].axis_id,   "chi" );
        hcif.diffrn_scan_frame_axis[AXIS_CHI].angle             = h345.chi;
        hcif.diffrn_scan_frame_axis[AXIS_CHI].displacement      = 0.0;

        strcpy(hcif.diffrn_scan_frame_axis[AXIS_THETA].axis_id, "twotheta" );
        hcif.diffrn_scan_frame_axis[AXIS_THETA].angle           = h345.theta;
        hcif.diffrn_scan_frame_axis[AXIS_THETA].displacement    = 0.0;

        strcpy(hcif.diffrn_scan_frame_axis[AXIS_DISTANCE].axis_id,"distance" );
        hcif.diffrn_scan_frame_axis[AXIS_DISTANCE].angle        = 0.0;
        hcif.diffrn_scan_frame_axis[AXIS_DISTANCE].displacement = h345.dist;
}
int put_pck ( unsigned short int *  ,
int  ,
int  ,
int   
)

Referenced by MarXF::output_image().

int PutCIFData ( char *  ,
char *  ,
char  ,
unsigned int *   
)

Definition at line 1946 of file marcif.c.

References CIF_HEADER::array_structure_list, CIF_HEADER::binary_id, CBF, cbf_failnez, cbf_free_handle(), CBF_PACKED, cbf_set_integerarray(), cbf_write_file(), CIF, cif_compression, cif_element_signed, cif_element_size, cif_error, cif_id, cif_nelements, ARRAY_STRUCTURE_LIST::dimension, ENC_BASE64, ENC_CRTERM, ENC_LFTERM, ENC_NONE, MIME_HEADERS, MSG_DIGEST, and verbose.

Referenced by MarXF::output_image().

{
FILE    *fp             = NULL;
int     success         = 0;
int     mime            = MIME_HEADERS;
int     digest          = MSG_DIGEST;
int     encoding        = ENC_NONE;
int     bytedir         = 0;
int     cbforcif        = CBF;
int     term            = ENC_CRTERM | ENC_LFTERM;

        if ( op_cbf == 1 ) {
                cbforcif        = CBF;
                encoding        = ENC_NONE;
                term            = ENC_CRTERM | ENC_LFTERM;
        }
        else {
                cbforcif        = CIF;
                encoding        = ENC_BASE64;
                term            = ENC_LFTERM;
        }

        cif_compression         = CBF_PACKED;
        cif_id                  = hcif.binary_id;
        cif_element_size        = sizeof(int);
        cif_element_signed      = 0;
        cif_nelements           = hcif.array_structure_list[0].dimension *
                                  hcif.array_structure_list[1].dimension;

        /* Save the binary data */
        cbf_failnez (cbf_set_integerarray (
                        cif, 
                        cif_compression, 
                        cif_id, 
                        (void *)i4_img,
                        cif_element_size,
                        cif_element_signed,
                        cif_nelements))

        fp = fopen (op, "w+b");
        if ( fp == NULL ) return 0;

        cbf_failnez (cbf_write_file (
                        cif, 
                        fp,
                        1,
                        cbforcif,
                        mime | digest,
                        encoding | bytedir | term))
        if ( !cif_error ) success = 1;

        /* Free the cbf */
        cbf_failnez (cbf_free_handle (cif))

        if ( verbose > 1 ) {
                printf("\n");
                printf("%s: CIF-Header values:\n",prg);
                printf("         Pixels       :\t %d x %d\n",hcif.array_structure_list[0].dimension,hcif.array_structure_list[1].dimension);
                printf("         Identifier   :\t %11d\n",cif_id);
                printf("         Compression  :\t %11d\n",cif_compression);
                printf("         Elements:    :\t %11d\n",cif_nelements);
                printf("         Element size :\t %11d\n",cif_element_size);
                printf("         Signed       :\t %11d\n",cif_element_signed);
        }


        return success;
}
int PutCIFHeader ( char *  ,
char *   
)

Definition at line 960 of file marcif.c.

References MARIP_ADC::add_channel_a, MARIP_ADC::add_channel_b, DIFFRN_SCAN_FRAME_AXIS::angle, MARIP_AXIS::angle_end, DIFFRN_SCAN_AXIS::angle_increment, MARIP_AXIS::angle_increment, DIFFRN_SCAN_AXIS::angle_start, MARIP_AXIS::angle_start, CIF_HEADER::array_element_size, CIF_HEADER::array_id, CIF_HEADER::array_intensities, CIF_HEADER::array_structure_list, CIF_HEADER::audit, MARIP_EXPOSURE_DOSE::avg, AXIS_DISTANCE, DIFFRN_SCAN_FRAME_AXIS::axis_id, DIFFRN_SCAN_AXIS::axis_id, MARIP_AXIS::axis_id, AXIS_PHI, CIF_HEADER::binary_id, cbf_failnez, cbf_force_new_category(), cbf_make_handle(), cbf_new_column(), cbf_new_datablock(), cbf_new_row(), cbf_next_row(), cbf_rewind_row(), cbf_set_doublevalue(), cbf_set_integervalue(), cbf_set_value(), DIFFRN_DETECTOR_ELEMENT::center_x, DIFFRN_DETECTOR_ELEMENT::center_y, MARIP_ADC::channel_a, MARIP_ADC::channel_b, DIFFRN_RADIATION::collimation, AUDIT::creation_date, AUDIT::creation_method, CIF_HEADER::crystal_id, DIFFRN_SOURCE::current, DIFFRN_DETECTOR::detector, DIFFRN_RADIATION::detector, CIF_HEADER::detector_id, DIFFRN_MEASUREMENT::device, DIFFRN_MEASUREMENT::device_type, CIF_HEADER::diffrn_detector, CIF_HEADER::diffrn_detector_element, CIF_HEADER::diffrn_detector_mar_adc, CIF_HEADER::diffrn_detector_mar_axis, CIF_HEADER::diffrn_detector_mar_data, CIF_HEADER::diffrn_detector_mar_exposure, CIF_HEADER::diffrn_detector_mar_exposure_dose, CIF_HEADER::diffrn_detector_mar_gaps, CIF_HEADER::diffrn_detector_mar_scan, CIF_HEADER::diffrn_id, CIF_HEADER::diffrn_measurement, CIF_HEADER::diffrn_radiation, CIF_HEADER::diffrn_radiation_wavelength, CIF_HEADER::diffrn_scan, CIF_HEADER::diffrn_scan_axis, CIF_HEADER::diffrn_scan_frame_axis, CIF_HEADER::diffrn_source, ARRAY_STRUCTURE_LIST::dimension, ARRAY_STRUCTURE_LIST::direction, DIFFRN_SCAN_FRAME_AXIS::displacement, MARIP_AXIS::displacement, MARIP_EXPOSURE::dose, CIF_HEADER::element_id, MARIP_EXPOSURE_DOSE::end, MARIP_EXPOSURE_DOSE::esd, CIF_HEADER::frame_id, DIFFRN_SCAN::frame_id_end, DIFFRN_SCAN::frame_id_start, DIFFRN_SCAN::frames, ARRAY_INTENSITIES::gain, MARIP_ADC::gain, MARIP_GAPS::gap, MARIP_DATA::histogram_end, MARIP_DATA::histogram_max, MARIP_DATA::histogram_start, i, ARRAY_ELEMENT_SIZE::index, ARRAY_STRUCTURE_LIST::index, MARIP_DATA::intensity_avg, MARIP_DATA::intensity_esd, MARIP_DATA::intensity_max, MARIP_DATA::intensity_min, ARRAY_INTENSITIES::linearity, CIF_HEADER::mar_id, MARIP_EXPOSURE_DOSE::max, MARIP_EXPOSURE_DOSE::measurements, DIFFRN_MEASUREMENT::method, MARIP_EXPOSURE_DOSE::min, DIFFRN_RADIATION::monochromator, MARIP_ADC::multiplier, MARIP_SCAN::number_of_pixels, MARIP_SCAN::number_of_pixels_larger_16_bit, MARIP_AXIS::oscillations, ARRAY_INTENSITIES::overload, MARIP_ADC::oversampling, MARIP_SCAN::pixel_height, MARIP_SCAN::pixel_length, ARRAY_ELEMENT_SIZE::pixelsize, DIFFRN_RADIATION_WAVELENGTH::polarisn_norm, DIFFRN_RADIATION_WAVELENGTH::polarisn_ratio, ARRAY_STRUCTURE_LIST::precedence, PRINT_AXIS, PRINT_CHEMICAL, MARIP_SCAN::radial_offset, DIFFRN_MEASUREMENT::sample_detector_distance, ARRAY_INTENSITIES::scaling, CIF_HEADER::scan_id, MARIP_SCAN::scanmode, DIFFRN_SOURCE::source, MARIP_EXPOSURE_DOSE::start, MARIP_SCAN::tangential_offset, MARIP_EXPOSURE::time, MARIP_EXPOSURE::type, DIFFRN_DETECTOR::type, DIFFRN_SOURCE::type, ARRAY_INTENSITIES::undefined_value, DIFFRN_SOURCE::voltage, DIFFRN_RADIATION_WAVELENGTH::wavelength, and DIFFRN_RADIATION_WAVELENGTH::wavelength_wt.

Referenced by MarXF::output_image().

{
const char      *sval;
float           fval;
double          dval;
int             ival;
int             i;


        cbf_failnez (cbf_make_handle (&cif))
        
        /* Make a new data block */
        cbf_failnez (cbf_new_datablock (cif, "image_1"))

        /********************************************************************
         * AUDIT
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "audit"))
        cbf_failnez (cbf_new_column   (cif, "creation_date"))
        cbf_failnez (cbf_set_value    (cif, hcif.audit.creation_date))
        cbf_failnez (cbf_new_column   (cif, "creation_method"))
        cbf_failnez (cbf_set_value    (cif, hcif.audit.creation_method))

        /********************************************************************
         * ENTRY, EXPTL_CRYSTAL & CHEMICAL
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "entry_id"))
        cbf_failnez (cbf_new_column   (cif, "id"))
        cbf_failnez (cbf_set_value    (cif, "img1"))

        cbf_failnez (cbf_force_new_category (cif, "exptl_crystal"))
        cbf_failnez (cbf_new_column   (cif, "id"))
        cbf_failnez (cbf_set_value    (cif, hcif.crystal_id))

        if ( PRINT_CHEMICAL ) {
                cbf_failnez (cbf_force_new_category (cif, "chemical"))
                cbf_failnez (cbf_new_column   (cif, "entry_id"))
                cbf_failnez (cbf_set_value    (cif, "img1"))
        }

        /********************************************************************
         * DIFFRN
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn"))
        cbf_failnez (cbf_new_column   (cif, "id"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_id ))
        cbf_failnez (cbf_new_column   (cif, "crystal_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.crystal_id))

        /********************************************************************
         * DIFFRN_SOURCE
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_source"))
        cbf_failnez (cbf_new_column   (cif, "diffrn_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_id ))
        cbf_failnez (cbf_new_column   (cif, "source"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_source.source))
        cbf_failnez (cbf_new_column   (cif, "type"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_source.type))
        cbf_failnez (cbf_new_column   (cif, "current"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.1f", hcif.diffrn_source.current))
        cbf_failnez (cbf_new_column   (cif, "voltage"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.1f", hcif.diffrn_source.voltage))

        /********************************************************************
         * DIFFRN_MEASUREMENT
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_measurement"))
        cbf_failnez (cbf_new_column   (cif, "diffrn_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_id ))
        cbf_failnez (cbf_new_column   (cif, "method"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_measurement.method))
        cbf_failnez (cbf_new_column   (cif, "device"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_measurement.device))
        cbf_failnez (cbf_new_column   (cif, "device_type"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_measurement.device_type))
        cbf_failnez (cbf_new_column   (cif, "sample_detector_distance"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.6f", hcif.diffrn_measurement.sample_detector_distance))

        /********************************************************************
         * DIFFRN_RADIATION
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_radiation"))
        cbf_failnez (cbf_new_column   (cif, "diffrn_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_id ))
        cbf_failnez (cbf_new_column   (cif, "detector"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_radiation.detector))
        cbf_failnez (cbf_new_column   (cif, "collimation"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_radiation.collimation))
        cbf_failnez (cbf_new_column   (cif, "monochromator"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_radiation.monochromator))

        /********************************************************************
         * DIFFRN_RADIATION_WAVELENGTH
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_radiation_wavelength"))
        cbf_failnez (cbf_new_column   (cif, "id"))
        cbf_failnez (cbf_set_value    (cif, "WL1"))
        cbf_failnez (cbf_new_column   (cif, "wavelength"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.6f", hcif.diffrn_radiation_wavelength.wavelength))
        cbf_failnez (cbf_new_column   (cif, "wavelength_wt"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_radiation_wavelength.wavelength_wt))
        cbf_failnez (cbf_new_column   (cif, "polarisn_ratio"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_radiation_wavelength.polarisn_ratio))
        cbf_failnez (cbf_new_column   (cif, "polarisn_norm"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_radiation_wavelength.polarisn_norm))


        /********************************************************************
         * DIFFRN_DETECTOR 
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_detector"))
        cbf_failnez (cbf_new_column   (cif, "id"))
        cbf_failnez (cbf_set_value    (cif, hcif.detector_id ))
        cbf_failnez (cbf_new_column   (cif, "diffrn_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_id ))
        cbf_failnez (cbf_new_column   (cif, "detector"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_detector.detector))
        cbf_failnez (cbf_new_column   (cif, "type"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_detector.type))

        /********************************************************************
         * DIFFRN_DETECTOR_ELEMENT
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_element"))
        cbf_failnez (cbf_new_column   (cif, "id"))
        cbf_failnez (cbf_set_value    (cif, hcif.element_id ))
        cbf_failnez (cbf_new_column   (cif, "detector_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.detector_id ))
        cbf_failnez (cbf_new_column   (cif, "center[1]"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_element.center_x))
        cbf_failnez (cbf_new_column   (cif, "center[2]"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_element.center_y))

        /********************************************************************
         * MARIP
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar"))
        cbf_failnez (cbf_new_column   (cif, "id"))
        cbf_failnez (cbf_set_value    (cif, hcif.mar_id ))
        cbf_failnez (cbf_new_column   (cif, "detector_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.detector_id ))

        /********************************************************************
         * MARIP_ADC
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_adc"))
        cbf_failnez (cbf_new_column   (cif, "mar_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.mar_id ))
        cbf_failnez (cbf_new_column   (cif, "channel_a"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_adc.channel_a))
        cbf_failnez (cbf_new_column   (cif, "channel_b"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_adc.channel_b))
        cbf_failnez (cbf_new_column   (cif, "add_channel_a"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_adc.add_channel_a))
        cbf_failnez (cbf_new_column   (cif, "add_channel_b"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_adc.add_channel_b))
        cbf_failnez (cbf_new_column   (cif, "oversampling"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_adc.oversampling))
        cbf_failnez (cbf_new_column   (cif, "multiplier"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_adc.multiplier))
        cbf_failnez (cbf_new_column   (cif, "gain"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_adc.gain))

        /********************************************************************
         * MARIP_GAPS
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_gaps"))
        cbf_failnez (cbf_new_column   (cif, "mar_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.mar_id ))
        cbf_failnez (cbf_new_column   (cif, "gap[1]"))
        cbf_failnez (cbf_set_integervalue    (cif, hcif.diffrn_detector_mar_gaps.gap[0]))
        cbf_failnez (cbf_new_column   (cif, "gap[2]"))
        cbf_failnez (cbf_set_integervalue    (cif, hcif.diffrn_detector_mar_gaps.gap[1]))
        cbf_failnez (cbf_new_column   (cif, "gap[3]"))
        cbf_failnez (cbf_set_integervalue    (cif, hcif.diffrn_detector_mar_gaps.gap[2]))
        cbf_failnez (cbf_new_column   (cif, "gap[4]"))
        cbf_failnez (cbf_set_integervalue    (cif, hcif.diffrn_detector_mar_gaps.gap[3]))
        cbf_failnez (cbf_new_column   (cif, "gap[5]"))
        cbf_failnez (cbf_set_integervalue    (cif, hcif.diffrn_detector_mar_gaps.gap[4]))
        cbf_failnez (cbf_new_column   (cif, "gap[6]"))
        cbf_failnez (cbf_set_integervalue    (cif, hcif.diffrn_detector_mar_gaps.gap[5]))
        cbf_failnez (cbf_new_column   (cif, "gap[7]"))
        cbf_failnez (cbf_set_integervalue    (cif, hcif.diffrn_detector_mar_gaps.gap[6]))
        cbf_failnez (cbf_new_column   (cif, "gap[8]"))
        cbf_failnez (cbf_set_integervalue    (cif, hcif.diffrn_detector_mar_gaps.gap[7]))

        /********************************************************************
         * MARIP_SCAN
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_scan"))
        cbf_failnez (cbf_new_column   (cif, "mar_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.mar_id ))
        cbf_failnez (cbf_new_column   (cif, "scanmode"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_scan.scanmode))
        cbf_failnez (cbf_new_column   (cif, "number_of_pixels"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_scan.number_of_pixels))
        cbf_failnez (cbf_new_column   (cif, "number_of_pixels_larger_16_bit"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_scan.number_of_pixels_larger_16_bit))
        cbf_failnez (cbf_new_column   (cif, "radial_offset"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_scan.radial_offset))
        cbf_failnez (cbf_new_column   (cif, "tangential_offset"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_scan.tangential_offset))
        cbf_failnez (cbf_new_column   (cif, "pixel_height"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_scan.pixel_height))
        cbf_failnez (cbf_new_column   (cif, "pixel_length"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_scan.pixel_length))

        /********************************************************************
         * MARIP_EXPOSURE
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_exposure"))
        cbf_failnez (cbf_new_column   (cif, "mar_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.mar_id ))
        cbf_failnez (cbf_new_column   (cif, "type"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_detector_mar_exposure.type))
        cbf_failnez (cbf_new_column   (cif, "time"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure.time))
        cbf_failnez (cbf_new_column   (cif, "dose"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure.dose))

        /********************************************************************
         * MARIP_EXPOSURE_DOSE
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_exposure_dose"))
        cbf_failnez (cbf_new_column   (cif, "mar_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.mar_id ))
        cbf_failnez (cbf_new_column   (cif, "dose"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure.dose))
        cbf_failnez (cbf_new_column   (cif, "avg"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.avg))
        cbf_failnez (cbf_new_column   (cif, "esd"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.esd))
        cbf_failnez (cbf_new_column   (cif, "min"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.min))
        cbf_failnez (cbf_new_column   (cif, "max"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.max))
        cbf_failnez (cbf_new_column   (cif, "start"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.start))
        cbf_failnez (cbf_new_column   (cif, "end"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.end))
        cbf_failnez (cbf_new_column   (cif, "measurements"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_exposure_dose.measurements))

        /********************************************************************
         * MARIP_DATA
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_data"))
        cbf_failnez (cbf_new_column   (cif, "mar_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.mar_id ))
        cbf_failnez (cbf_new_column   (cif, "intensity_avg"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_data.intensity_avg))
        cbf_failnez (cbf_new_column   (cif, "intensity_esd"))
        cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_data.intensity_esd))
        cbf_failnez (cbf_new_column   (cif, "intensity_min"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_data.intensity_min))
        cbf_failnez (cbf_new_column   (cif, "intensity_max"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_data.intensity_max))
        cbf_failnez (cbf_new_column   (cif, "histogram_start"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_data.histogram_start))
        cbf_failnez (cbf_new_column   (cif, "histogram_end"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_data.histogram_end))
        cbf_failnez (cbf_new_column   (cif, "histogram_max"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_data.histogram_max))

        /********************************************************************
         * MARIP_AXIS
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_axis"))
        cbf_failnez (cbf_new_column   (cif, "mar_id"))

        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_value    (cif, hcif.mar_id ))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_new_row      (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "axis_id"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_value    (cif, hcif.diffrn_detector_mar_axis[i].axis_id))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "angle_start"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_axis[i].angle_start))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "angle_end"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_axis[i].angle_end))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "angle_increment"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_axis[i].angle_increment))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "oscillations"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_axis[i].oscillations))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "displacement"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_axis[i].displacement))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        /********************************************************************
         * DIFFRN_FRAME_DATA
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_frame_data"))
        cbf_failnez (cbf_new_column   (cif, "id"))
        cbf_failnez (cbf_set_value    (cif, hcif.frame_id ))
        cbf_failnez (cbf_new_column   (cif, "detector_element_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.element_id ))
        cbf_failnez (cbf_new_column   (cif, "array_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.array_id ))
        cbf_failnez (cbf_new_column   (cif, "binary_id"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.binary_id))

        /********************************************************************
         * DIFFRN_SCAN
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_scan"))
        cbf_failnez (cbf_new_column   (cif, "scan_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.scan_id ))
        cbf_failnez (cbf_new_column   (cif, "frame_id_start"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_scan.frame_id_start))
        cbf_failnez (cbf_new_column   (cif, "frame_id_end"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_scan.frame_id_end))
        cbf_failnez (cbf_new_column   (cif, "frames"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_scan.frames))

        /********************************************************************
         * AXIS
         ********************************************************************/

        if ( !PRINT_AXIS ) goto CIF_DIFFRN_SCAN_AXIS;

        cbf_failnez (cbf_force_new_category (cif, "axis"))

        cbf_failnez (cbf_new_column   (cif, "id"))
        cbf_failnez (cbf_set_value    (cif, "phi" ))
        cbf_failnez (cbf_new_row      (cif))
        cbf_failnez (cbf_set_value    (cif, "chi" ))
        cbf_failnez (cbf_new_row      (cif))
        cbf_failnez (cbf_set_value    (cif, "omega" ))
        cbf_failnez (cbf_new_row      (cif))
        cbf_failnez (cbf_set_value    (cif, "twotheta" ))
        cbf_failnez (cbf_new_row      (cif))
        cbf_failnez (cbf_set_value    (cif, "distance" ))

        cbf_failnez (cbf_new_column   (cif, "type"))
        cbf_failnez (cbf_rewind_row   (cif))
        cbf_failnez (cbf_set_value    (cif, "rotation" ))
        cbf_failnez (cbf_next_row     (cif))
        cbf_failnez (cbf_set_value    (cif, "rotation" ))
        cbf_failnez (cbf_next_row     (cif))
        cbf_failnez (cbf_set_value    (cif, "rotation" ))
        cbf_failnez (cbf_next_row     (cif))
        cbf_failnez (cbf_set_value    (cif, "rotation" ))
        cbf_failnez (cbf_next_row     (cif))
        cbf_failnez (cbf_set_value    (cif, "translation" ))

        cbf_failnez (cbf_new_column   (cif, "equipment"))
        cbf_failnez (cbf_rewind_row   (cif))
        cbf_failnez (cbf_set_value    (cif, "detector" ))
        cbf_failnez (cbf_next_row     (cif))
        cbf_failnez (cbf_set_value    (cif, "detector" ))
        cbf_failnez (cbf_next_row     (cif))
        cbf_failnez (cbf_set_value    (cif, "detector" ))
        cbf_failnez (cbf_next_row     (cif))
        cbf_failnez (cbf_set_value    (cif, "detector" ))
        cbf_failnez (cbf_next_row     (cif))
        cbf_failnez (cbf_set_value    (cif, "detector" ))

        cbf_failnez (cbf_new_column   (cif, "vector[1]"))
        cbf_failnez (cbf_rewind_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 1.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 1.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))

        cbf_failnez (cbf_new_column   (cif, "vector[2]"))
        cbf_failnez (cbf_rewind_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 1.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))

        cbf_failnez (cbf_new_column   (cif, "vector[3]"))
        cbf_failnez (cbf_rewind_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 1.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
        cbf_failnez (cbf_next_row   (cif))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", -1.0))

        cbf_failnez (cbf_new_column   (cif, "offset[1]"))
        cbf_failnez (cbf_rewind_row   (cif))
        for (i=0;i<=AXIS_DISTANCE;i++) {
                cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row   (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "offset[2]"))
        cbf_failnez (cbf_rewind_row   (cif))
        for (i=0;i<=AXIS_DISTANCE;i++) {
                cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row   (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "offset[3]"))
        cbf_failnez (cbf_rewind_row   (cif))
        for (i=0;i<=AXIS_DISTANCE;i++) {
                cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row   (cif))
        }

        /********************************************************************
         * DIFFRN_SCAN_AXIS
         ********************************************************************/
CIF_DIFFRN_SCAN_AXIS:
        cbf_failnez (cbf_force_new_category (cif, "diffrn_scan_axis"))
        cbf_failnez (cbf_new_column   (cif, "scan_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.scan_id ))
        cbf_failnez (cbf_new_column   (cif, "axis_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.diffrn_scan_axis[AXIS_PHI].axis_id))
        cbf_failnez (cbf_new_column   (cif, "angle_start"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_scan_axis[AXIS_PHI].angle_start))
        cbf_failnez (cbf_new_column   (cif, "angle_increment"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_scan_axis[AXIS_PHI].angle_increment))

        /********************************************************************
         * DIFFRN_SCAN_FRAME
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_scan_frame"))
        cbf_failnez (cbf_new_column   (cif, "scan_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.scan_id ))
        cbf_failnez (cbf_new_column   (cif, "frame_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.frame_id ))

        /********************************************************************
         * DIFFRN_SCAN_FRAME_AXIS
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "diffrn_scan_frame_axis"))

        cbf_failnez (cbf_new_column   (cif, "frame_id"))
        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_value    (cif, hcif.frame_id ))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_new_row      (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "axis_id"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_value    (cif, hcif.diffrn_scan_frame_axis[i].axis_id))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "angle"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_scan_frame_axis[i].angle))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "displacement"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<=AXIS_DISTANCE; i++ ) {
                cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_scan_frame_axis[i].displacement))
                if ( i==AXIS_DISTANCE ) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        /********************************************************************
         * ARRAY_STRUCTURE
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "array_structure"))
        cbf_failnez (cbf_new_column   (cif, "array_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.array_id ))

        /********************************************************************
         * ARRAY_INTENSITIES
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "array_intensities"))
        cbf_failnez (cbf_new_column   (cif, "array_id"))
        cbf_failnez (cbf_set_value    (cif, hcif.array_id ))
        cbf_failnez (cbf_new_column   (cif, "binary_id"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.binary_id))
        cbf_failnez (cbf_new_column   (cif, "linearity"))
        cbf_failnez (cbf_set_value    (cif, hcif.array_intensities.linearity))
        cbf_failnez (cbf_new_column   (cif, "undefined_value"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", hcif.array_intensities.undefined_value))
        cbf_failnez (cbf_new_column   (cif, "overload"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.0f", hcif.array_intensities.overload))
        cbf_failnez (cbf_new_column   (cif, "scaling"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.array_intensities.scaling))
        cbf_failnez (cbf_new_column   (cif, "gain"))
        cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.array_intensities.gain))

        /********************************************************************
         * ARRAY_STRUCTURE_LIST
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "array_structure_list"))

        cbf_failnez (cbf_new_column   (cif, "array_id"))
        for ( i=0; i<2; i++ ) {
                cbf_failnez (cbf_set_value    (cif, hcif.array_id ))
                if ( i==1) break;
                cbf_failnez (cbf_new_row      (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "index"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<2; i++ ) {
                cbf_failnez (cbf_set_integervalue (cif, hcif.array_structure_list[i].index))
                if ( i==1) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "dimension"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<2; i++ ) {
                cbf_failnez (cbf_set_integervalue (cif, hcif.array_structure_list[i].dimension))
                if ( i==1) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "precedence"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<2; i++ ) {
                cbf_failnez (cbf_set_integervalue (cif, hcif.array_structure_list[i].precedence))
                if ( i==1) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "direction"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<2; i++ ) {
                cbf_failnez (cbf_set_value (cif, hcif.array_structure_list[i].direction))
                if ( i==1) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        /********************************************************************
         * ARRAY_ELEMENT_SIZE
         ********************************************************************/

        cbf_failnez (cbf_force_new_category (cif, "array_element_size"))

        cbf_failnez (cbf_new_column   (cif, "array_id"))
        for ( i=0; i<2; i++ ) {
                cbf_failnez (cbf_set_value    (cif, hcif.array_id ))
                if ( i==1) break;
                cbf_failnez (cbf_new_row      (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "index"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<2; i++ ) {
                cbf_failnez (cbf_set_integervalue (cif, hcif.array_element_size.index[i]))
                if ( i==1) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        cbf_failnez (cbf_new_column   (cif, "size"))
        cbf_failnez (cbf_rewind_row   (cif))
        for ( i=0; i<2; i++ ) {
                cbf_failnez (cbf_set_doublevalue (cif, "%1.4e", hcif.array_element_size.pixelsize[i]))
                if ( i==1) break;
                cbf_failnez (cbf_next_row     (cif))
        }

        /********************************************************************
         * ARRAY_DATA
         ********************************************************************/

        cbf_failnez (cbf_force_new_category     (cif, "array_data"))
        cbf_failnez (cbf_new_column       (cif, "array_id"))
        cbf_failnez (cbf_set_value        (cif, "image_1"))
        cbf_failnez (cbf_new_column       (cif, "binary_id"))
        cbf_failnez (cbf_set_integervalue (cif, hcif.binary_id))
        cbf_failnez (cbf_new_column       (cif, "data"))

        return 1;
}
int Putmar300Header ( int  ,
int  ,
MAR300_HEADER   
)

Definition at line 212 of file mar300_header.c.

References MAR300_HEADER::centre_x, MAR300_HEADER::centre_y, MAR300_HEADER::counts_end, MAR300_HEADER::counts_start, MAR300_HEADER::date, MAR300_HEADER::distance, MAR300_HEADER::exptime_sec, MAR300_HEADER::exptime_units, MAR300_HEADER::high_pixels, MAR300_HEADER::high_records, i, MAR300_HEADER::lambda, MAR300_HEADER::lrecl, MAR300_HEADER::max_rec, MAR300_HEADER::multiplier, now, MAR300_HEADER::omega, MAR300_HEADER::p_l, MAR300_HEADER::p_r, MAR300_HEADER::p_x, MAR300_HEADER::p_y, MAR300_HEADER::phi_end, MAR300_HEADER::phi_start, MAR300_HEADER::pixels_x, MAR300_HEADER::pixels_y, MAR300_HEADER::prog_time, MAR300_HEADER::r_max, MAR300_HEADER::r_min, and str.

Referenced by MarXF::output_header().

{
int             i;
int             io=0;
char            c=' ',str[32];
time_t          now;


        if ( fd < 0 )return(0);

        /*
         * Rewind file
         */

         i = lseek( fd, 0, SEEK_SET );

        if ( strlen( h.date ) < 5 ) {
                time( &now );
                
                sprintf( str,"%s", (char *)ctime( &now ) );
                for ( i=24; i<32; i++ ) 
                        str[i]='\0';
                strncpy( h.date, str, 24 );
        }

        /*
         * Write image header (10xint+15*float+date)
         */
        io  = write( fd, &h, sizeof( h ) ); 

        /*
         * New header additions, all items are 16 byte strings.
         * 1.) MARCONTROL + Version no.
         * 2.) Scanner serial no.
         * 3.) Computer architecture
         * 4.) Sum of xray units
         * 5-...) Repeat normal header (i.e. 10 ints and 15 floats).
         */

        str[15] = '\0';
        sprintf( str, "MARCONTROL 1.0  ");
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16d", serial);
        io  += write( fd, str, 16 ); 
#if ( LINUX || linux )
        sprintf( str, "LINUX          " );
#elif ( __sgi )
        sprintf( str, "SGI            " );
#elif ( __osf__ )
        sprintf( str, "DEC UNIX       " );
#elif ( __hpux  )
        sprintf( str, "HPUX           " );
#elif ( __ALPHA )
        sprintf( str, "ALPHA          " );
#else
        sprintf( str, "UNKNOWN        " );
#endif
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", (float)h.exptime_units );
        io  += write( fd, str, 16 ); 

        str[16] = '\0';
        /* 10 x integer as string */
        sprintf( str, "%16d",   h.pixels_x                     );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16d",   h.pixels_y                     );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16d",   h.lrecl                      );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16d",   h.max_rec                    );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16d",   h.high_pixels                );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16d",   h.high_records               );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16d",   h.counts_start               );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16d",   h.counts_end                 );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16d",   h.exptime_sec                );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16d",   h.exptime_units              );
        io  += write( fd, str, 16 ); 

        /* 15 x integer as string */
        sprintf( str, "%16.3f", h.prog_time                  );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.r_max                      );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.r_min                      );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.p_r                        );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.p_l                        );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.p_x                        );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.p_y                        );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.centre_x                   );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.centre_y                   );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.lambda                     );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.distance                   );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.phi_start                  );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.phi_end                    );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.omega                      );
        io  += write( fd, str, 16 ); 
        sprintf( str, "%16.3f", h.multiplier                 );
        io  += write( fd, str, 16 ); 

        /*
         * Fill remaining bytes of record with blanks
         */
FILL:
        while ( lseek( fd, 0, SEEK_CUR ) < (2*h.pixels_x) ) 
                if ( write( fd, &c, 1) < 1 )
                        break;
                else
                        io++;

        if ( io < 2*h.pixels_x ) 
                return 0;

        return 1;
}
int Putmar345Header ( int  ,
MAR345_HEADER   
)

Definition at line 747 of file mar345_header.c.

References MAR345_HEADER::adc_A, MAR345_HEADER::adc_B, MAR345_HEADER::add_A, MAR345_HEADER::add_B, MAR345_HEADER::byteorder, MAR345_HEADER::chi, MAR345_HEADER::date, MAR345_HEADER::dist, MAR345_HEADER::doseavg, MAR345_HEADER::dosebeg, MAR345_HEADER::doseend, MAR345_HEADER::dosemax, MAR345_HEADER::dosemin, MAR345_HEADER::dosen, MAR345_HEADER::dosesig, MAR345_HEADER::filter, MAR345_HEADER::format, MAR345_HEADER::gain, MAR345_HEADER::gap, MAR345_HEADER::high, MAR345_HEADER::histbeg, MAR345_HEADER::histend, MAR345_HEADER::histmax, i, MAR345_HEADER::kV, MAR345_HEADER::mA, MAR345_HEADER::mode, MAR345_HEADER::multiplier, now, MAR345_HEADER::omebeg, MAR345_HEADER::omeend, MAR345_HEADER::omeosc, MAR345_HEADER::phibeg, MAR345_HEADER::phiend, MAR345_HEADER::phiosc, MAR345_HEADER::pixel_height, MAR345_HEADER::pixel_length, MAR345_HEADER::pixels, MAR345_HEADER::polar, MAR345_HEADER::program, MAR345_HEADER::remark, MAR345_HEADER::resol, MAR345_HEADER::roff, MAR345_HEADER::scanner, MAR345_HEADER::size, MAR345_HEADER::slitx, MAR345_HEADER::slity, MAR345_HEADER::source, str, MAR345_HEADER::theta, MAR345_HEADER::time, MAR345_HEADER::toff, MAR345_HEADER::valavg, MAR345_HEADER::valmax, MAR345_HEADER::valmin, MAR345_HEADER::valsig, MAR345_HEADER::version, MAR345_HEADER::wave, MAR345_HEADER::xcen, and MAR345_HEADER::ycen.

Referenced by MarXF::output_header().

{
int             i,k=0;
int             io;
int             head[32];
int             byte_order=1234;
time_t          now;
char            c=' ', str[128];
char            *mode[2]  ={"DOSE","TIME"};
char            *format[3]={"IMAGE","PCK","SPIRAL"};
char            *source[3]={"SEALED TUBE","ROTATING ANODE","SYNCHROTRON"};
char            *filter[3]={"GRAPHITE",   "MIRRORS"       ,"FILTER"     };

        if ( fd < 0 )return(0);

        h.byteorder = 1234;

        time( &now);    
        sprintf( str, "%s", (char *)ctime( &now ));
        memcpy( h.date, str, 24 );

        lseek( fd, 0, SEEK_SET );

        /* Make some necessary checks */
        if ( h.mode   > 1 ) h.mode = 1;
        if ( h.format > 2 ) h.format = 1;

        /* First 32 longs contain: */
        memset( head, 0, 32*sizeof(int) );

        head[ 0]        = (int)( h.byteorder );
        head[ 1]        = (int)( h.size );
        head[ 2]        = (int)( h.high );
        head[ 3]        = (int)( h.format );
        head[ 4]        = (int)( h.mode );
        head[ 5]        = (int)( h.pixels );
        head[ 6]        = (int)( h.pixel_length );
        head[ 7]        = (int)( h.pixel_height );
        head[ 8]        = (int)( h.wave   * 1000000. );
        head[ 9]        = (int)( h.dist   * 1000. );
        head[10]        = (int)( h.phibeg * 1000. );
        head[11]        = (int)( h.phiend * 1000. );
        head[12]        = (int)( h.omebeg * 1000. );
        head[13]        = (int)( h.omeend * 1000. );
        head[14]        = (int)( h.chi    * 1000. );
        head[15]        = (int)( h.theta  * 1000. );


        /* First 4 bytes: integer with 1234 */
        io = write( fd, head, 32*sizeof(int) );

        sprintf( str, "mar research"); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64); k++;

        sprintf( str, "PROGRAM        %s Version %s",h.program,h.version); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64); k++;

        sprintf( str, "DATE           %s",h.date); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "SCANNER        %d\n",h.scanner); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "FORMAT         %d  %s %d\n",h.size,format[(int)h.format],h.pixels); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "HIGH           %d\n",h.high); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "PIXEL          LENGTH %1.0f  HEIGHT %1.0f\n",h.pixel_length,h.pixel_height); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "OFFSET         ROFF %1.0f  TOFF %1.0f\n",h.roff,h.toff); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "GAPS           %d %d %d %d %d %d %d %d\n",
                h.gap[0],h.gap[1],h.gap[2],h.gap[3],h.gap[4],h.gap[5],h.gap[6],h.gap[7]);
        
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        if ( h.adc_A >= 0 ) {
                sprintf( str, "ADC            A %d  B %d  ADD_A %d  ADD_B %d\n",h.adc_A,h.adc_B,h.add_A,h.add_B); 
                for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
                io += write( fd, str, 64 ); k++;
        }

        sprintf( str, "MULTIPLIER     %1.3f\n",h.multiplier); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "GAIN           %1.3f\n",h.gain); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "WAVELENGTH     %1.5f\n",h.wave); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "DISTANCE       %1.3f\n",h.dist); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "RESOLUTION     %1.3f\n",h.resol); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "PHI            START %1.3f  END %1.3f  OSC %d\n",h.phibeg,h.phiend,h.phiosc); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "OMEGA          START %1.3f  END %1.3f  OSC %d\n",h.omebeg,h.omeend,h.omeosc); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "CHI            %1.3f\n",h.chi); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "TWOTHETA       %1.3f\n",h.theta); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "CENTER         X %1.3f  Y %1.3f\n",h.xcen,h.ycen); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "MODE           %s\n",mode[(int)h.mode]); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "TIME           %1.2f\n",h.time); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "COUNTS         START %1.2f END %1.2f  NMEAS %d\n",h.dosebeg,h.doseend,h.dosen); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "COUNTS         MIN %1.2f  MAX %1.2f\n",h.dosemin,h.dosemax); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "COUNTS         AVE %1.2f  SIG %1.2f\n",h.doseavg,h.dosesig); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "INTENSITY      MIN %d  MAX %d  AVE %1.1f  SIG %1.2f\n",h.valmin,h.valmax,h.valavg,h.valsig); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "HISTOGRAM      START %d  END %d  MAX %d\n",h.histbeg,h.histend,h.histmax); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "GENERATOR      %s  kV %1.1f  mA %1.1f\n",h.source,h.kV, h.mA); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "MONOCHROMATOR  %s  POLAR %1.3f\n",h.filter,h.polar); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "COLLIMATOR     WIDTH %1.2f  HEIGHT %1.2f\n",h.slitx,h.slity); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "REMARK         %s\n",h.remark); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        sprintf( str, "END OF HEADER\n"); 
        for ( i=strlen(str); i<63; i++ ) str[i]=' '; str[63]='\n';
        io += write( fd, str, 64 ); k++;

        /*
         * Fill rest of header (4096 bytes) with blanks:
         */
        k = 4096;
        while ( lseek( fd, 0, SEEK_CUR ) < k ) {
                i = write( fd, &c, 1 ); 
                if ( i < 1 ) break;
                io += i;
        }

        if ( io < k ) {
                fprintf( stderr, "ERROR: only %d out of %d bytes written into image header!!!\n",io,k);
                return 0;
        }

        return 1;

}
void rotate_i4 ( unsigned int *  data,
int  nx 
)

Definition at line 176 of file misc.c.

References i, and j.

Referenced by MarXF::output_image().

{
  register unsigned int         *ptr1, *ptr2, *ptr3, *ptr4, temp;
  register int          i, j;
  int                   nx2 = (nx+1)/2;

  for ( i=nx/2; i--; ) {

    /* Set pointer addresses */

    j    = nx2 - 1;
    ptr1 = data + nx*i        + j;              /* 1. Quadrant */
    ptr2 = data + nx*j        + nx-1-i; /* 2. Quadrant */
    ptr3 = data + nx*(nx-1-i) + nx-1-j; /* 4. Quadrant */
    ptr4 = data + nx*(nx-1-j) + i;              /* 3. Quadrant */

    for ( j = nx2; j--; ) {

      /* Restack: clockwise rotation by 90.0 */
      temp  = *ptr4;
      *ptr4 = *ptr3;
      *ptr3 = *ptr2;
      *ptr2 = *ptr1;
      *ptr1 = temp;

      /* Increase pointer */
      ptr1 --;
      ptr2 -= nx;
      ptr3 ++;
      ptr4 += nx;
    }
  }
}
void rotate_i4_anti ( unsigned int *  data,
int  nx 
)

Definition at line 44 of file misc.c.

References i, and j.

Referenced by MarXF::output_image().

{
  register unsigned int *ptr1, *ptr2, *ptr3, *ptr4, temp;
  register int            i, j;
  int                     nx2 = (nx+1)/2;

  for ( i=nx/2; i--; ) {

    /* Set pointer addresses */

    j    = nx2 - 1;
    ptr1 = data + nx*i        + j;          /* 1. Quadrant */
    ptr2 = data + nx*j        + nx-1-i;     /* 2. Quadrant */
    ptr3 = data + nx*(nx-1-i) + nx-1-j;     /* 4. Quadrant */
    ptr4 = data + nx*(nx-1-j) + i;          /* 3. Quadrant */

    for ( j = nx2; j--; ) {

      /* Restack: anticlockwise rotation by 90.0 */
      temp  = *ptr1;
      *ptr1 = *ptr2;
      *ptr2 = *ptr3;
      *ptr3 = *ptr4;
      *ptr4 = temp;

      /* Increase pointer */
      ptr1 --;
      ptr2 -= nx;
      ptr3 ++;
      ptr4 += nx;
    }
  }
}
void swaplong ( char *  ,
int   
)

Definition at line 129 of file utils.c.

References i.

{
        register int i, t1, t2, t3, t4;

        for(i=nbytes/4;i--;) {
                t1 = data[i*4+3];
                t2 = data[i*4+2];
                t3 = data[i*4+1];
                t4 = data[i*4+0];
                data[i*4+0] = t1;
                data[i*4+1] = t2;
                data[i*4+2] = t3;
                data[i*4+3] = t4;
        }
}
void swapshort ( char *  ,
int   
)

Variable Documentation

int ac_size = 0 [static]
int adc1

Definition at line 54 of file marhw.cpp.

Referenced by MarXF::get_header_values(), MarXF::PrintStats(), and MarXF::Transform().

int adc2

Definition at line 55 of file marhw.cpp.

Referenced by MarXF::get_header_values(), MarXF::PrintStats(), and MarXF::Transform().

char adc_channel = 0 [static]

Definition at line 84 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

int adcavg1

Definition at line 65 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

int adcavg11

Definition at line 65 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

int adcavg2

Definition at line 65 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout().

int adcavg21

Definition at line 65 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout().

int add_A [static]
int add_B
float AvgI

Definition at line 79 of file marxf.cpp.

Referenced by MarXF::get_header_values(), MarXF::output_image(), and MarXF::PrintResults().

unsigned char bit[8] = { 1, 2, 4, 8, 16, 32, 64, 128 } [static]

Definition at line 63 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarNet::net_data().

Definition at line 74 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout().

char do_xform
int fdnb
int fdspiral = -1 [static]
int fdxf = 0 [static]
FILE* fpnb = NULL [static]

Definition at line 87 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

float fract_intens [static]

Definition at line 113 of file marxf.cpp.

Referenced by MarXF::ImageArray(), and MarXF::Transform().

MAR300_HEADER h300 [static]

Definition at line 115 of file marxf.cpp.

Definition at line 54 of file marxf.cpp.

Referenced by CIF2mar345Header().

int hist_begin [static]

Definition at line 67 of file marxf.cpp.

Referenced by MarXF::get_header_values(), and MarXF::HistoMinMax().

int hist_end

Definition at line 67 of file marxf.cpp.

Referenced by MarXF::get_header_values(), and MarXF::HistoMinMax().

int hist_max

Definition at line 67 of file marxf.cpp.

Referenced by MarXF::get_header_values(), and MarXF::HistoMinMax().

unsigned short i2_record[MAX_SIZE] [static]

Definition at line 85 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout().

int i_rec = 1 [static]

Definition at line 96 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout().

int i_x0 = 0 [static]

Definition at line 91 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

int iindex = 0 [static]

Definition at line 90 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout().

int Imax

Definition at line 78 of file marxf.cpp.

Referenced by MarXF::get_header_values(), MarXF::output_image(), and MarXF::PrintResults().

Definition at line 53 of file scan345.cpp.

Referenced by MarXF::output_image(), MarXF::PrintResults(), and Scan345::scan345_main().

char is_data = 0

Definition at line 60 of file marxf.cpp.

int istrong [static]
int j_y0 = 0 [static]

Definition at line 92 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

char keep_image
char large_mem = 1

Definition at line 55 of file marxf.cpp.

int last_block [static]

Definition at line 104 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

char last_image[128] = { ""}

Definition at line 59 of file marxf.cpp.

Referenced by MarXF::output_image().

int last_pixel [static]

Definition at line 105 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

int last_total = 0

Definition at line 62 of file marxf.cpp.

int lin_dxy[8] [static]

Definition at line 110 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

int max_spiral_int = 0 [static]

Definition at line 93 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

Definition at line 72 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

Definition at line 73 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarNet::net_data().

int n1 = 0 [static]

Definition at line 65 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

int n2 = 0

Definition at line 65 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout().

MARNB_HEADER nb [static]

Definition at line 116 of file marxf.cpp.

int nb_index [static]

Definition at line 109 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

unsigned char nb_rec[NB_SIZE] [static]

Definition at line 120 of file marxf.cpp.

Referenced by MarXF::ReadNB(), and MarXF::Transform().

int ns_rec = 0 [static]

Definition at line 98 of file marxf.cpp.

Referenced by MarXF::get_header_values(), and MarXF::output_image().

int nsat
int nskip [static]

Definition at line 107 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

int nstrong
char op_in_progress = 0

Definition at line 58 of file marxf.cpp.

Referenced by MarXF::output_image(), and MarXF::Transform().

int poff [static]
unsigned short px_rec[9 *NB_SIZE] [static]

Definition at line 121 of file marxf.cpp.

Referenced by MarXF::ReadNB(), and MarXF::Transform().

int saturation [static]

Definition at line 111 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout().

char scan_in_progress = 0
float SigI

Definition at line 79 of file marxf.cpp.

Referenced by MarXF::get_header_values(), and MarXF::output_image().

char skip_op

Definition at line 48 of file marhw.cpp.

Referenced by MarHW::marTask(), MarXF::output_image(), and MarXF::PrintResults().

int sp_pixels

Definition at line 70 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), MarXF::ReadNB(), and MarXF::Transform().

int spiral_offset = 0 [static]

Definition at line 94 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

char spiral_only [static]
int spiral_size [static]

Definition at line 102 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

char start_with_A = 1 [static]

Definition at line 101 of file marxf.cpp.

Referenced by MarXF::get_header_values(), and MarXF::mar_start_scan_readout().

Definition at line 69 of file marhw.cpp.

Referenced by MarXF::mar_start_scan_readout(), MarNet::net_data(), and MarXF::Transform().

Definition at line 62 of file marhw.cpp.

Referenced by MarXF::mar_start_scan_readout(), MarHW::marTask(), and MarHW::StartScan().

STRONG strong_rec[MAX_SIZE/2] [static]

Definition at line 86 of file marxf.cpp.

int swap_nb = 0 [static]

Definition at line 100 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::ReadNB().

int total_pixels [static]

Definition at line 103 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), MarXF::output_image(), and MarXF::Transform().

int valmax

Definition at line 69 of file marxf.cpp.

int valmin
signed char x_rec[NB_SIZE] [static]

Definition at line 118 of file marxf.cpp.

Referenced by MarXF::ReadNB(), and MarXF::Transform().

int xf_histo[65600] [static]
char xf_in_progress = 0

Definition at line 57 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::output_image().

int xf_pixels

Definition at line 70 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::output_image().

int xf_rec = 0 [static]

Definition at line 97 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout().

Definition at line 76 of file marxf.cpp.

Referenced by MarXF::mar_start_scan_readout(), and MarXF::Transform().

signed char y_rec[NB_SIZE] [static]

Definition at line 119 of file marxf.cpp.

Referenced by MarXF::ReadNB(), and MarXF::Transform().