#include <stdio.h>#include <string.h>#include <ctype.h>#include <math.h>#include <stdlib.h>#include <time.h>#include "mar345_header.h"
Go to the source code of this file.
Defines | |
| #define | STRING 0 |
| #define | INTEGER 1 |
| #define | FLOAT 2 |
Functions | |
| int | InputType () |
| void | WrongType () |
| void | RemoveBlanks () |
| MAR345_HEADER | Getmar345Header (FILE *) |
| MAR345_HEADER | Setmar345Header (void) |
| int | Putmar345Header (int, MAR345_HEADER) |
| #define FLOAT 2 |
Definition at line 37 of file mar345_header.c.
Referenced by Getmar345Header().
| #define INTEGER 1 |
Definition at line 36 of file mar345_header.c.
Referenced by Getmar345Header().
| #define STRING 0 |
Definition at line 35 of file mar345_header.c.
Referenced by Getmar345Header().
| MAR345_HEADER Getmar345Header | ( | FILE * | fp | ) |
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 );
}
| int InputType | ( | ) |
Referenced by GetConfig(), Getmar345Header(), and GetmarNBHeader().
| int Putmar345Header | ( | int | fd, |
| MAR345_HEADER | h | ||
| ) |
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 RemoveBlanks | ( | ) |
| MAR345_HEADER Setmar345Header | ( | void | ) |
Definition at line 677 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, 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::remark, MAR345_HEADER::roff, MAR345_HEADER::scanner, MAR345_HEADER::size, MAR345_HEADER::slitx, MAR345_HEADER::slity, MAR345_HEADER::source, 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 Getmar345Header().
{
MAR345_HEADER h;
int i;
h.byteorder = 1234;
h.wave = 1.541789;
h.polar = 0.0;
h.pixel_length = 150.0;
h.pixel_height = 150.0;
h.scanner = 1;
h.format = 1;
h.high = 0;
h.size = 0;
h.dist = 70.0;
h.multiplier = 1.0;
h.mode = 1;
h.time = 0.0;
h.dosebeg = 0.0;
h.doseend = 0.0;
h.dosemin = 0.0;
h.dosemax = 0.0;
h.doseavg = 0.0;
h.dosesig = 0.0;
h.dosen = 0;
h.phibeg = 0.0;
h.phiend = 0.0;
h.omebeg = 0.0;
h.omeend = 0.0;
h.phiosc = 0;
h.omeosc = 0;
h.theta = 0.0;
h.chi = 0.0;
h.gain = 1.0;
h.xcen = 600.;
h.ycen = 600.;
h.kV = 40.0;
h.mA = 50.0;
h.valmin = 0;
h.valmax = 0;
h.valavg = 0.0;
h.valsig = 0.0;
h.histbeg = 0;
h.histend = 0;
h.histmax = 0;
h.roff = 0.0;
h.toff = 0.0;
h.slitx = 0.3;
h.slity = 0.3;
h.pixels = 0;
h.adc_A = -1;
h.adc_B = -1;
h.add_A = 0;
h.add_B = 0;
h.date[0] = '\0';
h.remark[0] = '\0';
strcpy( h.source, "" );
strcpy( h.filter, "" );
for ( i=0; i<N_GAPS; i++ )
h.gap[i] = 0;
return( h );
}
| void WrongType | ( | ) |
Referenced by GetConfig(), Getmar345Header(), and GetmarNBHeader().
1.7.3