00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <stdio.h>
00018 #include <string.h>
00019 #include <stdlib.h>
00020 #include <unistd.h>
00021 #include <ctype.h>
00022 #include <sys/types.h>
00023 #include <sys/stat.h>
00024 #include <math.h>
00025
00026
00027
00028
00029
00030 #include "marcif_header.h"
00031 #include "mar345_header.h"
00032
00033 #include <cbf.h>
00034 #include <img.h>
00035
00036 #define printe(x) printf("%s: %s: %s\n",prg,f,x)
00037 #undef cbf_failnez
00038 #define cbf_failnez(x) \
00039 { int err; \
00040 cif_error = 0; \
00041 err = (x); \
00042 if (err) { \
00043 if ( verbose > 1 ) \
00044 fprintf(stdout,"CBFlib error %d\n",err); \
00045 cif_error=err; \
00046 } \
00047 }
00048
00049
00050
00051
00052
00053
00054 extern int verbose;
00055
00056
00057
00058
00059 static char PRINT_AXIS = 0;
00060 static char PRINT_CHEMICAL = 0;
00061
00062 static int cif_error = 0;
00063 static CIF_HEADER hcif;
00064
00065 cbf_handle cif = NULL;
00066 static size_t cif_read = 0;
00067 static int cif_id = 0;
00068 static int cif_element_signed = 0;
00069 static int cif_element_unsigned = 0;
00070 static int cif_minelement = 0;
00071 static int cif_maxelement = 0;
00072 static unsigned int cif_compression = 0;
00073 static size_t cif_nelements = 0;
00074 static size_t cif_element_size = 0;
00075
00076
00077
00078
00079
00080
00081
00082
00083 int GetCIFHeader (char *, char *, FILE *);
00084 int GetCIFData (char *, char *, FILE *, unsigned int *);
00085 int PutCIFData (char *, char *, char , unsigned int *);
00086 int PutCIFHeader (char *, char *);
00087 MAR345_HEADER CIF2mar345Header(char *);
00088 void mar3452CIFHeader(char *, char *, MAR345_HEADER );
00089
00090
00091
00092
00093 int GetCIFHeader( char *prg, char *f, FILE *fp)
00094 {
00095 const char *sval;
00096 float fval;
00097 double dval;
00098 int ival;
00099 int i;
00100 char str[64];
00101 char *axis_name[] = {"phi", "omega",
00102 "chi", "2-theta",
00103 "distance", "z-axis",
00104 "slit_1_hor", "slit_1_ver",
00105 "slit_2_hor", "slit_2_ver",
00106 "trans_hor", "trans_ver",
00107 "rot_hor", "rot_ver",
00108 "beamstop" };
00109 char axis[16] = {""};
00110
00111 rewind( fp );
00112
00113
00114 memset( (char *)&hcif, 0, sizeof(CIF_HEADER) );
00115
00116 cbf_failnez (cbf_make_handle (&cif))
00117 if ( cif_error ) {
00118 printe("Cannot create handle for CIF input");
00119 return 0;
00120 }
00121 cbf_failnez (cbf_read_file (cif, fp, MSG_DIGEST))
00122 cbf_failnez (cbf_rewind_datablock (cif))
00123
00124
00125
00126
00127 cbf_failnez (cbf_find_category (cif, "diffrn_detector_mar"))
00128 if ( cif_error ) {
00129 printe("Cannot find category: diffrn_detector_mar");
00130 goto CIF_MARIP_GAPS;
00131 }
00132 cbf_failnez (cbf_find_column (cif, "id"))
00133 if ( !cif_error ) {
00134 cbf_failnez (cbf_get_value (cif, &sval))
00135 strcpy( hcif.mar_id, sval);
00136 }
00137
00138
00139
00140
00141 CIF_MARIP_GAPS:
00142 cbf_failnez (cbf_rewind_datablock (cif))
00143 cbf_failnez (cbf_find_category (cif, "diffrn_detector_mar_gaps"))
00144 if ( !cif_error ) {
00145 for (i=0;i<8;i++) {
00146 sprintf(str, "gap[%d]",i+1);
00147 cbf_failnez (cbf_find_column (cif, str))
00148 if ( !cif_error ) {
00149 cbf_failnez (cbf_get_integervalue (cif, &ival))
00150 hcif.diffrn_detector_mar_gaps.gap[i] = ival;
00151 }
00152 cbf_failnez (cbf_rewind_row (cif))
00153 }
00154 }
00155
00156
00157
00158
00159 CIF_MARIP_EXPOSURE:
00160 cbf_failnez (cbf_rewind_datablock (cif))
00161 cbf_failnez (cbf_find_category (cif, "diffrn_detector_mar_exposure"))
00162 if ( cif_error ) goto CIF_MARIP_AXIS;
00163
00164 cbf_failnez (cbf_find_column (cif, "type"))
00165 if ( !cif_error ) {
00166 cbf_failnez (cbf_get_value (cif, &sval))
00167 strcpy( hcif.diffrn_detector_mar_exposure.type, sval);
00168 }
00169
00170 cbf_failnez (cbf_rewind_row (cif))
00171 cbf_failnez (cbf_find_column (cif, "time"))
00172 if ( !cif_error ) {
00173 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00174 hcif.diffrn_detector_mar_exposure.time = (float)dval;
00175 }
00176
00177 cbf_failnez (cbf_rewind_row (cif))
00178 cbf_failnez (cbf_find_column (cif, "dose"))
00179 if ( !cif_error ) {
00180 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00181 hcif.diffrn_detector_mar_exposure.dose = (float)dval;
00182 }
00183
00184
00185
00186
00187 CIF_MARIP_AXIS:
00188 cbf_failnez (cbf_rewind_datablock (cif))
00189 cbf_failnez (cbf_find_category (cif, "diffrn_detector_mar_axis"))
00190 if ( cif_error ) goto CIF_MARIP_EXPOSURE_DOSE;
00191
00192 cbf_failnez (cbf_find_column (cif, "mar_id"))
00193 if ( !cif_error ) {
00194 cbf_failnez (cbf_get_value (cif, &sval))
00195 strcpy( hcif.mar_id, sval);
00196 }
00197
00198 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
00199 while (cbf_find_nextrow (cif, hcif.mar_id) == 0) {
00200 cbf_failnez (cbf_find_column (cif, "axis_id"))
00201 if ( cif_error ) break;
00202 cbf_failnez (cbf_get_value (cif, &sval))
00203 strcpy( axis, axis_name[i] );
00204 if ( !strcmp( sval, axis ) ) {
00205 cbf_failnez (cbf_find_column (cif, "angle_start"))
00206 if ( !cif_error ) {
00207 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00208 hcif.diffrn_detector_mar_axis[i].angle_start=(float)dval;
00209 }
00210 cbf_failnez (cbf_find_column (cif, "angle_end"))
00211 if ( !cif_error ) {
00212 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00213 hcif.diffrn_detector_mar_axis[i].angle_end=(float)dval;
00214 }
00215 cbf_failnez (cbf_find_column (cif, "angle_increment"))
00216 if ( !cif_error ) {
00217 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00218 hcif.diffrn_detector_mar_axis[i].angle_increment=(float)dval;
00219 }
00220 cbf_failnez (cbf_find_column (cif, "oscillations"))
00221 if ( !cif_error ) {
00222 cbf_failnez (cbf_get_integervalue (cif, &ival))
00223 hcif.diffrn_detector_mar_axis[i].oscillations = ival;
00224 }
00225 cbf_failnez (cbf_find_column (cif, "displacement"))
00226 if ( !cif_error ) {
00227 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00228 hcif.diffrn_detector_mar_axis[i].displacement=(float)dval;
00229 }
00230 }
00231 cbf_failnez (cbf_find_column (cif, "mar_id"))
00232 }
00233 cbf_failnez (cbf_rewind_row (cif))
00234 }
00235
00236
00237
00238
00239
00240 CIF_MARIP_EXPOSURE_DOSE:
00241 cbf_failnez (cbf_rewind_datablock (cif))
00242 cbf_failnez (cbf_find_category (cif, "diffrn_detector_mar_exposure_dose"))
00243 if ( cif_error ) goto CIF_MARIP_SCAN;
00244 cbf_failnez (cbf_find_column (cif, "start"))
00245 if ( !cif_error ) {
00246 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00247 hcif.diffrn_detector_mar_exposure_dose.start = (float)dval;
00248 }
00249
00250 cbf_failnez (cbf_rewind_row (cif))
00251 cbf_failnez (cbf_find_column (cif, "end"))
00252 if ( !cif_error ) {
00253 cbf_failnez (cbf_get_doublevalue(cif, &dval))
00254 hcif.diffrn_detector_mar_exposure_dose.end = (float)dval;
00255 }
00256
00257 cbf_failnez (cbf_rewind_row (cif))
00258 cbf_failnez (cbf_find_column (cif, "min"))
00259 if ( !cif_error ) {
00260 cbf_failnez (cbf_get_doublevalue(cif, &dval))
00261 hcif.diffrn_detector_mar_exposure_dose.min = (float)dval;
00262 }
00263
00264 cbf_failnez (cbf_rewind_row (cif))
00265 cbf_failnez (cbf_find_column (cif, "max"))
00266 if ( !cif_error ) {
00267 cbf_failnez (cbf_get_doublevalue(cif, &dval))
00268 hcif.diffrn_detector_mar_exposure_dose.max= (float)dval;
00269 }
00270
00271 cbf_failnez (cbf_rewind_row (cif))
00272 cbf_failnez (cbf_find_column (cif, "avg"))
00273 if ( !cif_error ) {
00274 cbf_failnez (cbf_get_doublevalue(cif, &dval))
00275 hcif.diffrn_detector_mar_exposure_dose.avg = (float)dval;
00276 }
00277
00278 cbf_failnez (cbf_rewind_row (cif))
00279 cbf_failnez (cbf_find_column (cif, "esd"))
00280 if ( !cif_error ) {
00281 cbf_failnez (cbf_get_doublevalue(cif, &dval))
00282 hcif.diffrn_detector_mar_exposure_dose.esd = (float)dval;
00283 }
00284
00285 cbf_failnez (cbf_rewind_row (cif))
00286 cbf_failnez (cbf_find_column (cif, "measurements"))
00287 if ( !cif_error ) {
00288 cbf_failnez (cbf_get_integervalue (cif, &ival))
00289 hcif.diffrn_detector_mar_exposure_dose.measurements = ival;
00290 }
00291
00292
00293
00294
00295 CIF_MARIP_SCAN:
00296 cbf_failnez (cbf_rewind_datablock (cif))
00297 if ( cif_error ) goto CIF_MARIP_ADC;
00298 cbf_failnez (cbf_find_category (cif, "diffrn_detector_mar_scan"))
00299 cbf_failnez (cbf_find_column (cif, "scanmode"))
00300 if ( !cif_error ) {
00301 cbf_failnez (cbf_get_integervalue (cif, &ival))
00302 hcif.diffrn_detector_mar_scan.scanmode = ival;
00303 }
00304
00305 cbf_failnez (cbf_rewind_row (cif))
00306 cbf_failnez (cbf_find_column (cif, "number_of_pixels"))
00307 if ( !cif_error ) {
00308 cbf_failnez (cbf_get_integervalue (cif, &ival))
00309 hcif.diffrn_detector_mar_scan.number_of_pixels = ival;
00310 }
00311
00312 cbf_failnez (cbf_rewind_row (cif))
00313 cbf_failnez (cbf_find_column (cif, "number_of_pixels_larger_16_bit"))
00314 if ( !cif_error ) {
00315 cbf_failnez (cbf_get_integervalue (cif, &ival))
00316 hcif.diffrn_detector_mar_scan.number_of_pixels_larger_16_bit = ival;
00317 }
00318
00319 cbf_failnez (cbf_rewind_row (cif))
00320 cbf_failnez (cbf_find_column (cif, "pixel_height"))
00321 if ( !cif_error ) {
00322 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00323 hcif.diffrn_detector_mar_scan.pixel_height = (float)dval;
00324 }
00325
00326 cbf_failnez (cbf_rewind_row (cif))
00327 cbf_failnez (cbf_find_column (cif, "pixel_length"))
00328 if ( !cif_error ) {
00329 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00330 hcif.diffrn_detector_mar_scan.pixel_length = (float)dval;
00331 }
00332
00333 cbf_failnez (cbf_rewind_row (cif))
00334 cbf_failnez (cbf_find_column (cif, "radial_offset"))
00335 if ( !cif_error ) {
00336 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00337 hcif.diffrn_detector_mar_scan.radial_offset = (float)dval;
00338 }
00339
00340 cbf_failnez (cbf_rewind_row (cif))
00341 cbf_failnez (cbf_find_column (cif, "tangential_offset"))
00342 if ( !cif_error ) {
00343 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00344 hcif.diffrn_detector_mar_scan.tangential_offset= (float)dval;
00345 }
00346
00347
00348
00349
00350 CIF_MARIP_ADC:
00351 cbf_failnez (cbf_rewind_datablock (cif))
00352 cbf_failnez (cbf_find_category (cif, "diffrn_detector_mar_adc"))
00353 if ( cif_error ) goto CIF_MARIP_DATA;
00354 cbf_failnez (cbf_find_column (cif, "channel_a"))
00355 if ( !cif_error ) {
00356 cbf_failnez (cbf_get_integervalue (cif, &ival))
00357 hcif.diffrn_detector_mar_adc.channel_a = ival;
00358 }
00359
00360 cbf_failnez (cbf_rewind_row (cif))
00361 cbf_failnez (cbf_find_column (cif, "channel_b"))
00362 if ( !cif_error ) {
00363 cbf_failnez (cbf_get_integervalue (cif, &ival))
00364 hcif.diffrn_detector_mar_adc.channel_b = ival;
00365 }
00366
00367 cbf_failnez (cbf_rewind_row (cif))
00368 cbf_failnez (cbf_find_column (cif, "add_channel_a"))
00369 if ( !cif_error ) {
00370 cbf_failnez (cbf_get_integervalue (cif, &ival))
00371 hcif.diffrn_detector_mar_adc.add_channel_a = ival;
00372 }
00373
00374 cbf_failnez (cbf_rewind_row (cif))
00375 cbf_failnez (cbf_find_column (cif, "add_channel_b"))
00376 if ( !cif_error ) {
00377 cbf_failnez (cbf_get_integervalue (cif, &ival))
00378 hcif.diffrn_detector_mar_adc.add_channel_b = ival;
00379 }
00380
00381 cbf_failnez (cbf_rewind_row (cif))
00382 cbf_failnez (cbf_find_column (cif, "oversampling"))
00383 if ( !cif_error ) {
00384 cbf_failnez (cbf_get_integervalue (cif, &ival))
00385 hcif.diffrn_detector_mar_adc.oversampling = ival;
00386 }
00387
00388 cbf_failnez (cbf_rewind_row (cif))
00389 cbf_failnez (cbf_find_column (cif, "multiplier"))
00390 if ( !cif_error ) {
00391 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00392 hcif.diffrn_detector_mar_adc.multiplier = (float)dval;
00393 }
00394
00395 cbf_failnez (cbf_rewind_row (cif))
00396 cbf_failnez (cbf_find_column (cif, "gain"))
00397 if ( !cif_error ) {
00398 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00399 hcif.diffrn_detector_mar_adc.gain = (float)dval;
00400 }
00401
00402
00403
00404
00405 CIF_MARIP_DATA:
00406 cbf_failnez (cbf_rewind_datablock (cif))
00407 cbf_failnez (cbf_find_category (cif, "diffrn_detector_mar_data"))
00408 if ( cif_error ) goto CIF_DIFFRN_FRAME_DATA;
00409 cbf_failnez (cbf_find_column (cif, "intensity_avg"))
00410 if ( !cif_error ) {
00411 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00412 hcif.diffrn_detector_mar_data.intensity_avg = (float)dval;
00413 }
00414
00415 cbf_failnez (cbf_rewind_row (cif))
00416 cbf_failnez (cbf_find_column (cif, "intensity_esd"))
00417 if ( !cif_error ) {
00418 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00419 hcif.diffrn_detector_mar_data.intensity_esd = (float)dval;
00420 }
00421
00422 cbf_failnez (cbf_rewind_row (cif))
00423 cbf_failnez (cbf_find_column (cif, "intensity_min"))
00424 if ( !cif_error ) {
00425 cbf_failnez (cbf_get_integervalue (cif, &ival))
00426 hcif.diffrn_detector_mar_data.intensity_min = ival;
00427 }
00428
00429 cbf_failnez (cbf_rewind_row (cif))
00430 cbf_failnez (cbf_find_column (cif, "intensity_max"))
00431 if ( !cif_error ) {
00432 cbf_failnez (cbf_get_integervalue (cif, &ival))
00433 hcif.diffrn_detector_mar_data.intensity_max = ival;
00434 }
00435
00436 cbf_failnez (cbf_rewind_row (cif))
00437 cbf_failnez (cbf_find_column (cif, "histogram_start"))
00438 if ( !cif_error ) {
00439 cbf_failnez (cbf_get_integervalue (cif, &ival))
00440 hcif.diffrn_detector_mar_data.histogram_start = ival;
00441 }
00442
00443 cbf_failnez (cbf_rewind_row (cif))
00444 cbf_failnez (cbf_find_column (cif, "histogram_end"))
00445 if ( !cif_error ) {
00446 cbf_failnez (cbf_get_integervalue (cif, &ival))
00447 hcif.diffrn_detector_mar_data.histogram_end = ival;
00448 }
00449
00450 cbf_failnez (cbf_rewind_row (cif))
00451 cbf_failnez (cbf_find_column (cif, "histogram_max"))
00452 if ( !cif_error ) {
00453 cbf_failnez (cbf_get_integervalue (cif, &ival))
00454 hcif.diffrn_detector_mar_data.histogram_max = ival;
00455 }
00456
00457
00458
00459
00460 CIF_DIFFRN_FRAME_DATA:
00461 cbf_failnez (cbf_rewind_datablock (cif))
00462 cbf_failnez (cbf_find_category (cif, "diffrn_frame_data"))
00463 if ( cif_error ) {
00464 printe("Cannot find category: diffrn_frame_data ");
00465 goto CIF_DIFFRN_DETECTOR_ELEMENT;
00466 }
00467 cbf_failnez (cbf_find_column (cif, "array_id"))
00468 if ( !cif_error ) {
00469 cbf_failnez (cbf_get_value (cif, &sval))
00470 strcpy( hcif.array_id, sval);
00471 }
00472
00473 cbf_failnez (cbf_rewind_row (cif))
00474 cbf_failnez (cbf_find_column (cif, "id"))
00475 if ( !cif_error ) {
00476 cbf_failnez (cbf_get_value (cif, &sval))
00477 strcpy( hcif.data_id, sval);
00478 }
00479
00480 cbf_failnez (cbf_rewind_row (cif))
00481 cbf_failnez (cbf_find_column (cif, "detector_element_id"))
00482 if ( !cif_error ) {
00483 cbf_failnez (cbf_get_value (cif, &sval))
00484 strcpy( hcif.element_id, sval);
00485 }
00486
00487 cbf_failnez (cbf_rewind_row (cif))
00488 cbf_failnez (cbf_find_column (cif, "binary_id"))
00489 if ( !cif_error ) {
00490 cbf_failnez (cbf_get_integervalue (cif, &hcif.binary_id))
00491 }
00492
00493
00494
00495
00496 CIF_DIFFRN_DETECTOR_ELEMENT:
00497 cbf_failnez (cbf_rewind_datablock (cif))
00498 cbf_failnez (cbf_find_category (cif, "diffrn_detector_element"))
00499 if ( cif_error )goto CIF_ARRAY_STRUCTURE_LIST;
00500
00501 cbf_failnez (cbf_find_column (cif, "center[1]"))
00502 if ( !cif_error ) {
00503 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00504 hcif.diffrn_detector_element.center_x = (float)dval;
00505 }
00506
00507 cbf_failnez (cbf_rewind_row (cif))
00508 cbf_failnez (cbf_find_column (cif, "center[2]"))
00509 if ( !cif_error ) {
00510 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00511 hcif.diffrn_detector_element.center_y = (float)dval;
00512 }
00513
00514
00515
00516
00517 CIF_ARRAY_STRUCTURE_LIST:
00518
00519 cbf_failnez (cbf_rewind_datablock (cif))
00520 cbf_failnez (cbf_find_category (cif, "array_structure_list"))
00521 if ( cif_error ) goto CIF_ARRAY_ELEMENT_SIZE;
00522 cbf_failnez (cbf_rewind_row (cif))
00523 cbf_failnez (cbf_find_column (cif, "array_id"))
00524
00525 i=0;
00526 while (cbf_find_nextrow (cif, hcif.array_id) == 0) {
00527 cbf_failnez (cbf_find_column (cif, "precedence"))
00528 cbf_failnez (cbf_get_integervalue (cif, &hcif.array_structure_list[i].precedence))
00529
00530 if ( hcif.array_structure_list[i].precedence >= 1 &&
00531 hcif.array_structure_list[i].precedence <= 2) {
00532 cbf_failnez (cbf_find_column (cif, "dimension"))
00533 cbf_failnez (cbf_get_integervalue (cif,
00534 &hcif.array_structure_list[2-hcif.array_structure_list[i].precedence].dimension))
00535 }
00536 else {
00537 printe("Cannot find CIF dimensions");
00538 return 0;
00539 }
00540
00541 i++;
00542 if ( i == 2 ) break;
00543 cbf_failnez (cbf_find_column (cif, "array_id"))
00544 }
00545
00546 if ( hcif.array_structure_list[0].dimension*hcif.array_structure_list[1].dimension == 0 ) {
00547 printe("Something wrong with CIF dimensions");
00548 return 0;
00549 }
00550
00551
00552
00553
00554 CIF_ARRAY_ELEMENT_SIZE:
00555 cbf_failnez (cbf_rewind_datablock(cif))
00556 cbf_failnez (cbf_find_category (cif, "array_element_size"))
00557
00558 if ( cif_error ) {
00559 printe("Cannot find category: array_element_size");
00560 goto CIF_DIFFRN_RADIATION;
00561 }
00562 cbf_failnez (cbf_rewind_row (cif))
00563 cbf_failnez (cbf_find_column (cif, "array_id"))
00564
00565 i = 0;
00566 while (cbf_find_nextrow (cif, hcif.array_id) == 0) {
00567 cbf_failnez (cbf_find_column (cif, "size"))
00568 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00569 if ( !cif_error )
00570 hcif.array_element_size.pixelsize[i] = (float)dval;
00571 cbf_failnez (cbf_find_column (cif, "array_id"))
00572 i++;
00573 if ( i == 2 ) break;
00574 }
00575
00576
00577
00578
00579 CIF_DIFFRN_RADIATION:
00580 cbf_failnez (cbf_rewind_datablock(cif))
00581 cbf_failnez (cbf_find_category (cif, "diffrn_radiation"))
00582 if ( cif_error ) goto CIF_DIFFRN_RADIATION_WAVELENGTH;
00583
00584 cbf_failnez (cbf_find_column (cif, "monochromator"))
00585 if ( !cif_error ) {
00586 cbf_failnez (cbf_get_value (cif, &sval))
00587 strcpy( hcif.diffrn_radiation.monochromator, sval);
00588 }
00589
00590 cbf_failnez (cbf_rewind_row (cif))
00591 cbf_failnez (cbf_find_column (cif, "wavelength"))
00592 if ( !cif_error ) {
00593 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00594 hcif.diffrn_radiation_wavelength.wavelength = (float)dval;
00595 }
00596
00597
00598
00599
00600 CIF_DIFFRN_RADIATION_WAVELENGTH:
00601 cbf_failnez (cbf_rewind_datablock(cif))
00602 cbf_failnez (cbf_find_category (cif, "diffrn_radiation_wavelength"))
00603 if ( cif_error ) goto CIF_DIFFRN_MEASUREMENT;
00604 cbf_failnez (cbf_find_column (cif, "wavelength"))
00605 if ( cif_error ) {
00606 printe("Cannot find data item: wavelength");
00607 goto CIF_DIFFRN_MEASUREMENT;
00608 }
00609 else {
00610 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00611 hcif.diffrn_radiation_wavelength.wavelength = (float)dval;
00612 }
00613
00614 cbf_failnez (cbf_rewind_row (cif))
00615 cbf_failnez (cbf_find_column (cif, "polarisn_ratio"))
00616 if ( !cif_error ) {
00617 hcif.diffrn_radiation_wavelength.polarisn_ratio = (float)dval;
00618 }
00619
00620
00621
00622
00623 CIF_DIFFRN_MEASUREMENT:
00624 cbf_failnez (cbf_rewind_datablock(cif))
00625 cbf_failnez (cbf_find_category (cif, "diffrn_measurement"))
00626 if ( cif_error ) {
00627 printe("Cannot find category: diffrn_measurement");
00628 goto CIF_DIFFRN_SOURCE;
00629 }
00630 cbf_failnez (cbf_find_column (cif, "sample_detector_distance"))
00631 if ( cif_error == 0 ) {
00632 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00633 hcif.diffrn_measurement.sample_detector_distance = (float)dval;
00634 }
00635
00636
00637
00638
00639 CIF_DIFFRN_SOURCE:
00640 cbf_failnez (cbf_rewind_datablock(cif))
00641 cbf_failnez (cbf_find_category (cif, "diffrn_source"))
00642 if ( cif_error ) goto CIF_DIFFRN_SCAN_FRAME_AXIS;
00643 cbf_failnez (cbf_find_column (cif, "source"))
00644 if ( !cif_error ) {
00645 cbf_failnez (cbf_get_value (cif, &sval))
00646 strcpy( hcif.diffrn_source.source, sval);
00647 }
00648
00649 cbf_failnez (cbf_rewind_row (cif))
00650 cbf_failnez (cbf_find_column (cif, "type"))
00651 if ( !cif_error ) {
00652 cbf_failnez (cbf_get_value (cif, &sval))
00653 strcpy( hcif.diffrn_source.type, sval);
00654 }
00655
00656 cbf_failnez (cbf_rewind_row (cif))
00657 cbf_failnez (cbf_find_column (cif, "current"))
00658 if ( !cif_error ) {
00659 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00660 hcif.diffrn_source.current = (float)dval;
00661 }
00662
00663 cbf_failnez (cbf_rewind_row (cif))
00664 cbf_failnez (cbf_find_column (cif, "voltage"))
00665 if ( !cif_error ) {
00666 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00667 hcif.diffrn_source.voltage = (float)dval;
00668 }
00669
00670 cbf_failnez (cbf_rewind_row (cif))
00671 cbf_failnez (cbf_find_column (cif, "power"))
00672 if ( !cif_error ) {
00673 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00674 hcif.diffrn_source.power = (float)dval;
00675 }
00676
00677
00678
00679
00680 CIF_DIFFRN_SCAN_FRAME_AXIS:
00681 cbf_failnez (cbf_rewind_datablock(cif))
00682 cbf_failnez (cbf_find_category (cif, "diffrn_scan_frame_axis"))
00683 if ( cif_error ) {
00684 printe("Cannot find category: diffrn_scan_frame_axis");
00685 goto CIF_DIFFRN_SCAN;
00686 }
00687 cbf_failnez (cbf_rewind_row (cif))
00688 cbf_failnez (cbf_find_column (cif, "scan_id"))
00689 if ( !cif_error ) {
00690 cbf_failnez (cbf_get_value (cif, &sval))
00691 strcpy( hcif.scan_id, sval);
00692 }
00693
00694 for ( i=0; i<N_SCAN_FRAME_AXES; i++ ) {
00695 while (cbf_find_nextrow (cif, hcif.scan_id) == 0) {
00696 cbf_failnez (cbf_find_column (cif, "axis_id"))
00697 if ( cif_error ) break;
00698 cbf_failnez (cbf_get_value (cif, &sval))
00699 strcpy( axis, axis_name[i] );
00700 if ( !strcmp( sval, axis ) ) {
00701 cbf_failnez (cbf_find_column (cif, "angle"))
00702 if ( !cif_error ) {
00703 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00704 hcif.diffrn_scan_frame_axis[i].angle=(float)dval;
00705 }
00706 cbf_failnez (cbf_find_column (cif, "displacement"))
00707 if ( !cif_error ) {
00708 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00709 hcif.diffrn_scan_frame_axis[i].displacement=(float)dval;
00710 }
00711 }
00712 cbf_failnez (cbf_find_column (cif, "scan_id"))
00713 }
00714 cbf_failnez (cbf_rewind_row (cif))
00715 }
00716
00717
00718
00719
00720 CIF_DIFFRN_SCAN:
00721 cbf_failnez (cbf_rewind_datablock(cif))
00722 cbf_failnez (cbf_find_category (cif, "diffrn_scan_axis"))
00723 if ( cif_error ) {
00724 printe("Cannot find category: diffrn_scan_axis");
00725 goto CIF_CAT4;
00726 }
00727 cbf_failnez (cbf_rewind_row (cif))
00728 cbf_failnez (cbf_find_column (cif, "scan_id"))
00729 if ( !cif_error ) {
00730 cbf_failnez (cbf_get_value (cif, &sval))
00731 strcpy( hcif.scan_id, sval);
00732 }
00733
00734 for ( i=0; i<N_SCAN_AXES; i++ ) {
00735 while (cbf_find_nextrow (cif, hcif.scan_id) == 0) {
00736 cbf_failnez (cbf_find_column (cif, "axis_id"))
00737 if ( cif_error ) break;
00738 cbf_failnez (cbf_get_value (cif, &sval))
00739 strcpy( axis, axis_name[i] );
00740 if ( !strcmp( sval, axis ) ) {
00741 cbf_failnez (cbf_find_column (cif, "angle_start"))
00742 if ( !cif_error ) {
00743 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00744 hcif.diffrn_scan_axis[i].angle_start=(float)dval;
00745 }
00746 cbf_failnez (cbf_find_column (cif, "angle_increment"))
00747 if ( !cif_error ) {
00748 cbf_failnez (cbf_get_doublevalue (cif, &dval))
00749 hcif.diffrn_scan_axis[i].angle_increment=(float)dval;
00750 }
00751 }
00752 cbf_failnez (cbf_find_column (cif, "scan_id"))
00753 }
00754 cbf_failnez (cbf_rewind_row (cif))
00755 }
00756
00757
00758
00759
00760 CIF_CAT4:
00761
00762 CIF_END:
00763
00764 if ( verbose > 1 ) {
00765 printf("%s: CIF-Header values:\n",prg);
00766 printf(" Pixels :\t %d x %d\n",hcif.array_structure_list[0].dimension,hcif.array_structure_list[1].dimension);
00767 printf(" Pixelsize :\t %11.6f [m]\n",hcif.array_element_size.pixelsize[0]);
00768
00769 if ( strlen( hcif.mar_id ) ) {
00770 printf(" Distance :\t %11.3f [mm ]\n",hcif.diffrn_detector_mar_axis[AXIS_DISTANCE].displacement);
00771 printf(" PHI-start :\t %11.3f [deg]\n",hcif.diffrn_detector_mar_axis[AXIS_PHI].angle_start);
00772 printf(" Delta-PHI :\t %11.3f [deg]\n",hcif.diffrn_detector_mar_axis[AXIS_PHI].angle_increment);
00773 }
00774 else {
00775 printf(" Distance :\t %11.6f [m]\n",hcif.diffrn_scan_frame_axis[AXIS_DISTANCE].displacement);
00776 printf(" Wavelength :\t %11.6f [Ang]\n",hcif.diffrn_radiation_wavelength.wavelength);
00777 printf(" PHI-start :\t %11.3f [deg]\n",hcif.diffrn_scan_axis[AXIS_PHI].angle_start);
00778 printf(" Delta-PHI :\t %11.3f [deg]\n",hcif.diffrn_scan_axis[AXIS_PHI].angle_increment);
00779 }
00780 printf(" Wavelength :\t %11.6f [Ang]\n",hcif.diffrn_radiation_wavelength.wavelength);
00781 }
00782
00783 return 1;
00784 }
00785
00786
00787
00788
00789
00790
00791 MAR345_HEADER CIF2mar345Header(char *prg)
00792 {
00793 char *c,*d, *sval;
00794 int i,j,k;
00795 MAR345_HEADER h345;
00796
00797
00798 memset( (char *)&h345, 0, sizeof(MAR345_HEADER) );
00799
00800 h345.wave = hcif.diffrn_radiation_wavelength.wavelength;
00801 h345.byteorder = 1234;
00802 h345.format = 1;
00803
00804
00805 h345.xcen = hcif.diffrn_detector_element.center_x;
00806 h345.ycen = hcif.diffrn_detector_element.center_y;
00807
00808
00809 if ( (sval=strchr( hcif.element_id, '_' )) != NULL ) {
00810 i=sscanf( sval+1, "%d", &k);
00811 if ( i==1 )
00812 h345.scanner = k;
00813 }
00814
00815
00816 if ( strlen( hcif.mar_id ) ) {
00817
00818 h345.phibeg = hcif.diffrn_detector_mar_axis[AXIS_PHI].angle_start;
00819 h345.phiend = hcif.diffrn_detector_mar_axis[AXIS_PHI].angle_end;
00820 h345.phiosc = hcif.diffrn_detector_mar_axis[AXIS_PHI].oscillations;
00821
00822 h345.omebeg = hcif.diffrn_detector_mar_axis[AXIS_OMEGA].angle_start;
00823 h345.omeend = hcif.diffrn_detector_mar_axis[AXIS_OMEGA].angle_end;
00824 h345.omeosc = hcif.diffrn_detector_mar_axis[AXIS_OMEGA].oscillations;
00825
00826 h345.dist = hcif.diffrn_detector_mar_axis[AXIS_DISTANCE].displacement;
00827 h345.theta = hcif.diffrn_detector_mar_axis[AXIS_THETA].angle_end;
00828 h345.chi = hcif.diffrn_detector_mar_axis[AXIS_CHI].angle_end;
00829
00830 h345.time = hcif.diffrn_detector_mar_exposure.time;
00831
00832
00833 h345.multiplier = hcif.diffrn_detector_mar_adc.multiplier;
00834 h345.gain = hcif.diffrn_detector_mar_adc.gain;
00835 h345.adc_A = hcif.diffrn_detector_mar_adc.channel_a;
00836 h345.adc_B = hcif.diffrn_detector_mar_adc.channel_b;
00837 h345.add_A = hcif.diffrn_detector_mar_adc.add_channel_a;
00838 h345.add_B = hcif.diffrn_detector_mar_adc.add_channel_b;
00839
00840 h345.roff = hcif.diffrn_detector_mar_scan.radial_offset;
00841 h345.toff = hcif.diffrn_detector_mar_scan.tangential_offset;
00842
00843
00844 h345.pixel_height = hcif.diffrn_detector_mar_scan.pixel_height;
00845 h345.pixel_length = hcif.diffrn_detector_mar_scan.pixel_length;
00846
00847 h345.size = hcif.diffrn_detector_mar_scan.scanmode;
00848 h345.pixels = hcif.diffrn_detector_mar_scan.number_of_pixels;
00849 h345.high = hcif.diffrn_detector_mar_scan.number_of_pixels_larger_16_bit;
00850
00851
00852 h345.dosebeg = hcif.diffrn_detector_mar_exposure_dose.start;
00853 h345.doseend = hcif.diffrn_detector_mar_exposure_dose.end;
00854 h345.dosemin = hcif.diffrn_detector_mar_exposure_dose.min;
00855 h345.dosemax = hcif.diffrn_detector_mar_exposure_dose.max;
00856 h345.doseavg = hcif.diffrn_detector_mar_exposure_dose.avg;
00857 h345.dosesig = hcif.diffrn_detector_mar_exposure_dose.esd;
00858 h345.dosen = hcif.diffrn_detector_mar_exposure_dose.measurements;
00859
00860
00861 h345.valmin = hcif.diffrn_detector_mar_data.intensity_min;
00862 h345.valmax = hcif.diffrn_detector_mar_data.intensity_max;
00863 h345.valavg = hcif.diffrn_detector_mar_data.intensity_avg;
00864 h345.valsig = hcif.diffrn_detector_mar_data.intensity_esd;
00865 h345.histbeg = hcif.diffrn_detector_mar_data.histogram_start;
00866 h345.histend = hcif.diffrn_detector_mar_data.histogram_end;
00867 h345.histmax = hcif.diffrn_detector_mar_data.histogram_max;
00868
00869
00870 for (i=0;i<8;i++) {
00871 h345.gap[i] = hcif.diffrn_detector_mar_gaps.gap[i];
00872 }
00873
00874
00875 if ( strstr( hcif.diffrn_detector_mar_exposure.type, "dose" ) )
00876 h345.mode = 0;
00877 else
00878 h345.mode = 1;
00879
00880
00881 if ( (sval=strchr( hcif.mar_id, '_' )) != NULL ) {
00882 i=sscanf( sval+1, "%d", &k);
00883 if ( i==1 )
00884 h345.scanner = k;
00885 }
00886
00887 }
00888
00889
00890
00891 else {
00892
00893 h345.phibeg = hcif.diffrn_scan_axis[AXIS_PHI].angle_start;
00894 h345.phiend = h345.phibeg + hcif.diffrn_scan_axis[AXIS_PHI].angle_increment;
00895 h345.phiosc = 1;
00896
00897 h345.omebeg = hcif.diffrn_scan_axis[AXIS_OMEGA].angle_start;
00898 h345.omeend = h345.omebeg + hcif.diffrn_scan_axis[AXIS_OMEGA].angle_increment;
00899 h345.omeosc = 0;
00900
00901
00902 h345.dist = hcif.diffrn_scan_frame_axis[AXIS_DISTANCE].displacement;
00903 h345.theta = hcif.diffrn_scan_frame_axis[AXIS_THETA].angle;
00904 h345.chi = hcif.diffrn_scan_frame_axis[AXIS_CHI].angle;
00905
00906
00907 h345.pixel_height = hcif.array_element_size.pixelsize[0];
00908 h345.pixel_length = hcif.array_element_size.pixelsize[1];
00909
00910 h345.size = hcif.array_structure_list[0].dimension;
00911 h345.pixels = h345.size*h345.size;
00912 h345.multiplier = hcif.array_intensities.scaling;
00913 h345.gain = hcif.array_intensities.gain;
00914 h345.mode = 1;
00915
00916
00917 if ( (sval=strchr( hcif.element_id, '_' )) != NULL ) {
00918 i=sscanf( sval+1, "%d", &k);
00919 if ( i==1 )
00920 h345.scanner = k;
00921 }
00922
00923 }
00924
00925
00926 i=0;
00927 while (h345.pixel_height < 1.f) {
00928 h345.pixel_height *= 1000.;
00929 h345.pixel_length *= 1000.;
00930 i++;
00931 if (i==6) break;
00932 }
00933
00934
00935 if ( h345.dist < 0.1 ) h345.dist *= 1000.;
00936
00937
00938 if ( h345.pixel_height > 0.01 ) {
00939 h345.xcen /= ( h345.pixel_height/1000. );
00940 h345.ycen /= ( h345.pixel_height/1000. );
00941 }
00942
00943
00944 strcpy( h345.source, hcif.diffrn_source.source);
00945 h345.kV = hcif.diffrn_source.voltage;
00946 h345.mA = hcif.diffrn_source.current;
00947
00948
00949 strcpy( h345.filter, hcif.diffrn_radiation.monochromator);
00950 h345.polar = hcif.diffrn_radiation_wavelength.polarisn_ratio;
00951
00952 strcpy( h345.date, hcif.audit.creation_date);
00953
00954 return h345;
00955 }
00956
00957
00958
00959
00960 int PutCIFHeader( char *prg, char *f)
00961 {
00962 const char *sval;
00963 float fval;
00964 double dval;
00965 int ival;
00966 int i;
00967
00968
00969 cbf_failnez (cbf_make_handle (&cif))
00970
00971
00972 cbf_failnez (cbf_new_datablock (cif, "image_1"))
00973
00974
00975
00976
00977
00978 cbf_failnez (cbf_force_new_category (cif, "audit"))
00979 cbf_failnez (cbf_new_column (cif, "creation_date"))
00980 cbf_failnez (cbf_set_value (cif, hcif.audit.creation_date))
00981 cbf_failnez (cbf_new_column (cif, "creation_method"))
00982 cbf_failnez (cbf_set_value (cif, hcif.audit.creation_method))
00983
00984
00985
00986
00987
00988 cbf_failnez (cbf_force_new_category (cif, "entry_id"))
00989 cbf_failnez (cbf_new_column (cif, "id"))
00990 cbf_failnez (cbf_set_value (cif, "img1"))
00991
00992 cbf_failnez (cbf_force_new_category (cif, "exptl_crystal"))
00993 cbf_failnez (cbf_new_column (cif, "id"))
00994 cbf_failnez (cbf_set_value (cif, hcif.crystal_id))
00995
00996 if ( PRINT_CHEMICAL ) {
00997 cbf_failnez (cbf_force_new_category (cif, "chemical"))
00998 cbf_failnez (cbf_new_column (cif, "entry_id"))
00999 cbf_failnez (cbf_set_value (cif, "img1"))
01000 }
01001
01002
01003
01004
01005
01006 cbf_failnez (cbf_force_new_category (cif, "diffrn"))
01007 cbf_failnez (cbf_new_column (cif, "id"))
01008 cbf_failnez (cbf_set_value (cif, hcif.diffrn_id ))
01009 cbf_failnez (cbf_new_column (cif, "crystal_id"))
01010 cbf_failnez (cbf_set_value (cif, hcif.crystal_id))
01011
01012
01013
01014
01015
01016 cbf_failnez (cbf_force_new_category (cif, "diffrn_source"))
01017 cbf_failnez (cbf_new_column (cif, "diffrn_id"))
01018 cbf_failnez (cbf_set_value (cif, hcif.diffrn_id ))
01019 cbf_failnez (cbf_new_column (cif, "source"))
01020 cbf_failnez (cbf_set_value (cif, hcif.diffrn_source.source))
01021 cbf_failnez (cbf_new_column (cif, "type"))
01022 cbf_failnez (cbf_set_value (cif, hcif.diffrn_source.type))
01023 cbf_failnez (cbf_new_column (cif, "current"))
01024 cbf_failnez (cbf_set_doublevalue (cif, "%.1f", hcif.diffrn_source.current))
01025 cbf_failnez (cbf_new_column (cif, "voltage"))
01026 cbf_failnez (cbf_set_doublevalue (cif, "%.1f", hcif.diffrn_source.voltage))
01027
01028
01029
01030
01031
01032 cbf_failnez (cbf_force_new_category (cif, "diffrn_measurement"))
01033 cbf_failnez (cbf_new_column (cif, "diffrn_id"))
01034 cbf_failnez (cbf_set_value (cif, hcif.diffrn_id ))
01035 cbf_failnez (cbf_new_column (cif, "method"))
01036 cbf_failnez (cbf_set_value (cif, hcif.diffrn_measurement.method))
01037 cbf_failnez (cbf_new_column (cif, "device"))
01038 cbf_failnez (cbf_set_value (cif, hcif.diffrn_measurement.device))
01039 cbf_failnez (cbf_new_column (cif, "device_type"))
01040 cbf_failnez (cbf_set_value (cif, hcif.diffrn_measurement.device_type))
01041 cbf_failnez (cbf_new_column (cif, "sample_detector_distance"))
01042 cbf_failnez (cbf_set_doublevalue (cif, "%.6f", hcif.diffrn_measurement.sample_detector_distance))
01043
01044
01045
01046
01047
01048 cbf_failnez (cbf_force_new_category (cif, "diffrn_radiation"))
01049 cbf_failnez (cbf_new_column (cif, "diffrn_id"))
01050 cbf_failnez (cbf_set_value (cif, hcif.diffrn_id ))
01051 cbf_failnez (cbf_new_column (cif, "detector"))
01052 cbf_failnez (cbf_set_value (cif, hcif.diffrn_radiation.detector))
01053 cbf_failnez (cbf_new_column (cif, "collimation"))
01054 cbf_failnez (cbf_set_value (cif, hcif.diffrn_radiation.collimation))
01055 cbf_failnez (cbf_new_column (cif, "monochromator"))
01056 cbf_failnez (cbf_set_value (cif, hcif.diffrn_radiation.monochromator))
01057
01058
01059
01060
01061
01062 cbf_failnez (cbf_force_new_category (cif, "diffrn_radiation_wavelength"))
01063 cbf_failnez (cbf_new_column (cif, "id"))
01064 cbf_failnez (cbf_set_value (cif, "WL1"))
01065 cbf_failnez (cbf_new_column (cif, "wavelength"))
01066 cbf_failnez (cbf_set_doublevalue (cif, "%.6f", hcif.diffrn_radiation_wavelength.wavelength))
01067 cbf_failnez (cbf_new_column (cif, "wavelength_wt"))
01068 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_radiation_wavelength.wavelength_wt))
01069 cbf_failnez (cbf_new_column (cif, "polarisn_ratio"))
01070 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_radiation_wavelength.polarisn_ratio))
01071 cbf_failnez (cbf_new_column (cif, "polarisn_norm"))
01072 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_radiation_wavelength.polarisn_norm))
01073
01074
01075
01076
01077
01078
01079 cbf_failnez (cbf_force_new_category (cif, "diffrn_detector"))
01080 cbf_failnez (cbf_new_column (cif, "id"))
01081 cbf_failnez (cbf_set_value (cif, hcif.detector_id ))
01082 cbf_failnez (cbf_new_column (cif, "diffrn_id"))
01083 cbf_failnez (cbf_set_value (cif, hcif.diffrn_id ))
01084 cbf_failnez (cbf_new_column (cif, "detector"))
01085 cbf_failnez (cbf_set_value (cif, hcif.diffrn_detector.detector))
01086 cbf_failnez (cbf_new_column (cif, "type"))
01087 cbf_failnez (cbf_set_value (cif, hcif.diffrn_detector.type))
01088
01089
01090
01091
01092
01093 cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_element"))
01094 cbf_failnez (cbf_new_column (cif, "id"))
01095 cbf_failnez (cbf_set_value (cif, hcif.element_id ))
01096 cbf_failnez (cbf_new_column (cif, "detector_id"))
01097 cbf_failnez (cbf_set_value (cif, hcif.detector_id ))
01098 cbf_failnez (cbf_new_column (cif, "center[1]"))
01099 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_element.center_x))
01100 cbf_failnez (cbf_new_column (cif, "center[2]"))
01101 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_element.center_y))
01102
01103
01104
01105
01106
01107 cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar"))
01108 cbf_failnez (cbf_new_column (cif, "id"))
01109 cbf_failnez (cbf_set_value (cif, hcif.mar_id ))
01110 cbf_failnez (cbf_new_column (cif, "detector_id"))
01111 cbf_failnez (cbf_set_value (cif, hcif.detector_id ))
01112
01113
01114
01115
01116
01117 cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_adc"))
01118 cbf_failnez (cbf_new_column (cif, "mar_id"))
01119 cbf_failnez (cbf_set_value (cif, hcif.mar_id ))
01120 cbf_failnez (cbf_new_column (cif, "channel_a"))
01121 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_adc.channel_a))
01122 cbf_failnez (cbf_new_column (cif, "channel_b"))
01123 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_adc.channel_b))
01124 cbf_failnez (cbf_new_column (cif, "add_channel_a"))
01125 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_adc.add_channel_a))
01126 cbf_failnez (cbf_new_column (cif, "add_channel_b"))
01127 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_adc.add_channel_b))
01128 cbf_failnez (cbf_new_column (cif, "oversampling"))
01129 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_adc.oversampling))
01130 cbf_failnez (cbf_new_column (cif, "multiplier"))
01131 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_adc.multiplier))
01132 cbf_failnez (cbf_new_column (cif, "gain"))
01133 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_adc.gain))
01134
01135
01136
01137
01138
01139 cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_gaps"))
01140 cbf_failnez (cbf_new_column (cif, "mar_id"))
01141 cbf_failnez (cbf_set_value (cif, hcif.mar_id ))
01142 cbf_failnez (cbf_new_column (cif, "gap[1]"))
01143 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_gaps.gap[0]))
01144 cbf_failnez (cbf_new_column (cif, "gap[2]"))
01145 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_gaps.gap[1]))
01146 cbf_failnez (cbf_new_column (cif, "gap[3]"))
01147 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_gaps.gap[2]))
01148 cbf_failnez (cbf_new_column (cif, "gap[4]"))
01149 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_gaps.gap[3]))
01150 cbf_failnez (cbf_new_column (cif, "gap[5]"))
01151 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_gaps.gap[4]))
01152 cbf_failnez (cbf_new_column (cif, "gap[6]"))
01153 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_gaps.gap[5]))
01154 cbf_failnez (cbf_new_column (cif, "gap[7]"))
01155 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_gaps.gap[6]))
01156 cbf_failnez (cbf_new_column (cif, "gap[8]"))
01157 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_gaps.gap[7]))
01158
01159
01160
01161
01162
01163 cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_scan"))
01164 cbf_failnez (cbf_new_column (cif, "mar_id"))
01165 cbf_failnez (cbf_set_value (cif, hcif.mar_id ))
01166 cbf_failnez (cbf_new_column (cif, "scanmode"))
01167 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_scan.scanmode))
01168 cbf_failnez (cbf_new_column (cif, "number_of_pixels"))
01169 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_scan.number_of_pixels))
01170 cbf_failnez (cbf_new_column (cif, "number_of_pixels_larger_16_bit"))
01171 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_scan.number_of_pixels_larger_16_bit))
01172 cbf_failnez (cbf_new_column (cif, "radial_offset"))
01173 cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_scan.radial_offset))
01174 cbf_failnez (cbf_new_column (cif, "tangential_offset"))
01175 cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_scan.tangential_offset))
01176 cbf_failnez (cbf_new_column (cif, "pixel_height"))
01177 cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_scan.pixel_height))
01178 cbf_failnez (cbf_new_column (cif, "pixel_length"))
01179 cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_scan.pixel_length))
01180
01181
01182
01183
01184
01185 cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_exposure"))
01186 cbf_failnez (cbf_new_column (cif, "mar_id"))
01187 cbf_failnez (cbf_set_value (cif, hcif.mar_id ))
01188 cbf_failnez (cbf_new_column (cif, "type"))
01189 cbf_failnez (cbf_set_value (cif, hcif.diffrn_detector_mar_exposure.type))
01190 cbf_failnez (cbf_new_column (cif, "time"))
01191 cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure.time))
01192 cbf_failnez (cbf_new_column (cif, "dose"))
01193 cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure.dose))
01194
01195
01196
01197
01198
01199 cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_exposure_dose"))
01200 cbf_failnez (cbf_new_column (cif, "mar_id"))
01201 cbf_failnez (cbf_set_value (cif, hcif.mar_id ))
01202 cbf_failnez (cbf_new_column (cif, "dose"))
01203 cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure.dose))
01204 cbf_failnez (cbf_new_column (cif, "avg"))
01205 cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.avg))
01206 cbf_failnez (cbf_new_column (cif, "esd"))
01207 cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.esd))
01208 cbf_failnez (cbf_new_column (cif, "min"))
01209 cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.min))
01210 cbf_failnez (cbf_new_column (cif, "max"))
01211 cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.max))
01212 cbf_failnez (cbf_new_column (cif, "start"))
01213 cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.start))
01214 cbf_failnez (cbf_new_column (cif, "end"))
01215 cbf_failnez (cbf_set_doublevalue (cif, "%1.2f", hcif.diffrn_detector_mar_exposure_dose.end))
01216 cbf_failnez (cbf_new_column (cif, "measurements"))
01217 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_exposure_dose.measurements))
01218
01219
01220
01221
01222
01223 cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_data"))
01224 cbf_failnez (cbf_new_column (cif, "mar_id"))
01225 cbf_failnez (cbf_set_value (cif, hcif.mar_id ))
01226 cbf_failnez (cbf_new_column (cif, "intensity_avg"))
01227 cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_data.intensity_avg))
01228 cbf_failnez (cbf_new_column (cif, "intensity_esd"))
01229 cbf_failnez (cbf_set_doublevalue (cif, "%1.3f", hcif.diffrn_detector_mar_data.intensity_esd))
01230 cbf_failnez (cbf_new_column (cif, "intensity_min"))
01231 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_data.intensity_min))
01232 cbf_failnez (cbf_new_column (cif, "intensity_max"))
01233 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_data.intensity_max))
01234 cbf_failnez (cbf_new_column (cif, "histogram_start"))
01235 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_data.histogram_start))
01236 cbf_failnez (cbf_new_column (cif, "histogram_end"))
01237 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_data.histogram_end))
01238 cbf_failnez (cbf_new_column (cif, "histogram_max"))
01239 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_data.histogram_max))
01240
01241
01242
01243
01244
01245 cbf_failnez (cbf_force_new_category (cif, "diffrn_detector_mar_axis"))
01246 cbf_failnez (cbf_new_column (cif, "mar_id"))
01247
01248 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01249 cbf_failnez (cbf_set_value (cif, hcif.mar_id ))
01250 if ( i==AXIS_DISTANCE ) break;
01251 cbf_failnez (cbf_new_row (cif))
01252 }
01253
01254 cbf_failnez (cbf_new_column (cif, "axis_id"))
01255 cbf_failnez (cbf_rewind_row (cif))
01256 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01257 cbf_failnez (cbf_set_value (cif, hcif.diffrn_detector_mar_axis[i].axis_id))
01258 if ( i==AXIS_DISTANCE ) break;
01259 cbf_failnez (cbf_next_row (cif))
01260 }
01261
01262 cbf_failnez (cbf_new_column (cif, "angle_start"))
01263 cbf_failnez (cbf_rewind_row (cif))
01264 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01265 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_axis[i].angle_start))
01266 if ( i==AXIS_DISTANCE ) break;
01267 cbf_failnez (cbf_next_row (cif))
01268 }
01269
01270 cbf_failnez (cbf_new_column (cif, "angle_end"))
01271 cbf_failnez (cbf_rewind_row (cif))
01272 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01273 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_axis[i].angle_end))
01274 if ( i==AXIS_DISTANCE ) break;
01275 cbf_failnez (cbf_next_row (cif))
01276 }
01277
01278 cbf_failnez (cbf_new_column (cif, "angle_increment"))
01279 cbf_failnez (cbf_rewind_row (cif))
01280 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01281 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_axis[i].angle_increment))
01282 if ( i==AXIS_DISTANCE ) break;
01283 cbf_failnez (cbf_next_row (cif))
01284 }
01285
01286 cbf_failnez (cbf_new_column (cif, "oscillations"))
01287 cbf_failnez (cbf_rewind_row (cif))
01288 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01289 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_detector_mar_axis[i].oscillations))
01290 if ( i==AXIS_DISTANCE ) break;
01291 cbf_failnez (cbf_next_row (cif))
01292 }
01293
01294 cbf_failnez (cbf_new_column (cif, "displacement"))
01295 cbf_failnez (cbf_rewind_row (cif))
01296 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01297 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_detector_mar_axis[i].displacement))
01298 if ( i==AXIS_DISTANCE ) break;
01299 cbf_failnez (cbf_next_row (cif))
01300 }
01301
01302
01303
01304
01305
01306 cbf_failnez (cbf_force_new_category (cif, "diffrn_frame_data"))
01307 cbf_failnez (cbf_new_column (cif, "id"))
01308 cbf_failnez (cbf_set_value (cif, hcif.frame_id ))
01309 cbf_failnez (cbf_new_column (cif, "detector_element_id"))
01310 cbf_failnez (cbf_set_value (cif, hcif.element_id ))
01311 cbf_failnez (cbf_new_column (cif, "array_id"))
01312 cbf_failnez (cbf_set_value (cif, hcif.array_id ))
01313 cbf_failnez (cbf_new_column (cif, "binary_id"))
01314 cbf_failnez (cbf_set_integervalue (cif, hcif.binary_id))
01315
01316
01317
01318
01319
01320 cbf_failnez (cbf_force_new_category (cif, "diffrn_scan"))
01321 cbf_failnez (cbf_new_column (cif, "scan_id"))
01322 cbf_failnez (cbf_set_value (cif, hcif.scan_id ))
01323 cbf_failnez (cbf_new_column (cif, "frame_id_start"))
01324 cbf_failnez (cbf_set_value (cif, hcif.diffrn_scan.frame_id_start))
01325 cbf_failnez (cbf_new_column (cif, "frame_id_end"))
01326 cbf_failnez (cbf_set_value (cif, hcif.diffrn_scan.frame_id_end))
01327 cbf_failnez (cbf_new_column (cif, "frames"))
01328 cbf_failnez (cbf_set_integervalue (cif, hcif.diffrn_scan.frames))
01329
01330
01331
01332
01333
01334 if ( !PRINT_AXIS ) goto CIF_DIFFRN_SCAN_AXIS;
01335
01336 cbf_failnez (cbf_force_new_category (cif, "axis"))
01337
01338 cbf_failnez (cbf_new_column (cif, "id"))
01339 cbf_failnez (cbf_set_value (cif, "phi" ))
01340 cbf_failnez (cbf_new_row (cif))
01341 cbf_failnez (cbf_set_value (cif, "chi" ))
01342 cbf_failnez (cbf_new_row (cif))
01343 cbf_failnez (cbf_set_value (cif, "omega" ))
01344 cbf_failnez (cbf_new_row (cif))
01345 cbf_failnez (cbf_set_value (cif, "twotheta" ))
01346 cbf_failnez (cbf_new_row (cif))
01347 cbf_failnez (cbf_set_value (cif, "distance" ))
01348
01349 cbf_failnez (cbf_new_column (cif, "type"))
01350 cbf_failnez (cbf_rewind_row (cif))
01351 cbf_failnez (cbf_set_value (cif, "rotation" ))
01352 cbf_failnez (cbf_next_row (cif))
01353 cbf_failnez (cbf_set_value (cif, "rotation" ))
01354 cbf_failnez (cbf_next_row (cif))
01355 cbf_failnez (cbf_set_value (cif, "rotation" ))
01356 cbf_failnez (cbf_next_row (cif))
01357 cbf_failnez (cbf_set_value (cif, "rotation" ))
01358 cbf_failnez (cbf_next_row (cif))
01359 cbf_failnez (cbf_set_value (cif, "translation" ))
01360
01361 cbf_failnez (cbf_new_column (cif, "equipment"))
01362 cbf_failnez (cbf_rewind_row (cif))
01363 cbf_failnez (cbf_set_value (cif, "detector" ))
01364 cbf_failnez (cbf_next_row (cif))
01365 cbf_failnez (cbf_set_value (cif, "detector" ))
01366 cbf_failnez (cbf_next_row (cif))
01367 cbf_failnez (cbf_set_value (cif, "detector" ))
01368 cbf_failnez (cbf_next_row (cif))
01369 cbf_failnez (cbf_set_value (cif, "detector" ))
01370 cbf_failnez (cbf_next_row (cif))
01371 cbf_failnez (cbf_set_value (cif, "detector" ))
01372
01373 cbf_failnez (cbf_new_column (cif, "vector[1]"))
01374 cbf_failnez (cbf_rewind_row (cif))
01375 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 1.0))
01376 cbf_failnez (cbf_next_row (cif))
01377 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01378 cbf_failnez (cbf_next_row (cif))
01379 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01380 cbf_failnez (cbf_next_row (cif))
01381 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 1.0))
01382 cbf_failnez (cbf_next_row (cif))
01383 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01384
01385 cbf_failnez (cbf_new_column (cif, "vector[2]"))
01386 cbf_failnez (cbf_rewind_row (cif))
01387 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01388 cbf_failnez (cbf_next_row (cif))
01389 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 1.0))
01390 cbf_failnez (cbf_next_row (cif))
01391 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01392 cbf_failnez (cbf_next_row (cif))
01393 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01394 cbf_failnez (cbf_next_row (cif))
01395 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01396
01397 cbf_failnez (cbf_new_column (cif, "vector[3]"))
01398 cbf_failnez (cbf_rewind_row (cif))
01399 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01400 cbf_failnez (cbf_next_row (cif))
01401 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01402 cbf_failnez (cbf_next_row (cif))
01403 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 1.0))
01404 cbf_failnez (cbf_next_row (cif))
01405 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01406 cbf_failnez (cbf_next_row (cif))
01407 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", -1.0))
01408
01409 cbf_failnez (cbf_new_column (cif, "offset[1]"))
01410 cbf_failnez (cbf_rewind_row (cif))
01411 for (i=0;i<=AXIS_DISTANCE;i++) {
01412 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01413 if ( i==AXIS_DISTANCE ) break;
01414 cbf_failnez (cbf_next_row (cif))
01415 }
01416
01417 cbf_failnez (cbf_new_column (cif, "offset[2]"))
01418 cbf_failnez (cbf_rewind_row (cif))
01419 for (i=0;i<=AXIS_DISTANCE;i++) {
01420 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01421 if ( i==AXIS_DISTANCE ) break;
01422 cbf_failnez (cbf_next_row (cif))
01423 }
01424
01425 cbf_failnez (cbf_new_column (cif, "offset[3]"))
01426 cbf_failnez (cbf_rewind_row (cif))
01427 for (i=0;i<=AXIS_DISTANCE;i++) {
01428 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", 0.0))
01429 if ( i==AXIS_DISTANCE ) break;
01430 cbf_failnez (cbf_next_row (cif))
01431 }
01432
01433
01434
01435
01436 CIF_DIFFRN_SCAN_AXIS:
01437 cbf_failnez (cbf_force_new_category (cif, "diffrn_scan_axis"))
01438 cbf_failnez (cbf_new_column (cif, "scan_id"))
01439 cbf_failnez (cbf_set_value (cif, hcif.scan_id ))
01440 cbf_failnez (cbf_new_column (cif, "axis_id"))
01441 cbf_failnez (cbf_set_value (cif, hcif.diffrn_scan_axis[AXIS_PHI].axis_id))
01442 cbf_failnez (cbf_new_column (cif, "angle_start"))
01443 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_scan_axis[AXIS_PHI].angle_start))
01444 cbf_failnez (cbf_new_column (cif, "angle_increment"))
01445 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_scan_axis[AXIS_PHI].angle_increment))
01446
01447
01448
01449
01450
01451 cbf_failnez (cbf_force_new_category (cif, "diffrn_scan_frame"))
01452 cbf_failnez (cbf_new_column (cif, "scan_id"))
01453 cbf_failnez (cbf_set_value (cif, hcif.scan_id ))
01454 cbf_failnez (cbf_new_column (cif, "frame_id"))
01455 cbf_failnez (cbf_set_value (cif, hcif.frame_id ))
01456
01457
01458
01459
01460
01461 cbf_failnez (cbf_force_new_category (cif, "diffrn_scan_frame_axis"))
01462
01463 cbf_failnez (cbf_new_column (cif, "frame_id"))
01464 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01465 cbf_failnez (cbf_set_value (cif, hcif.frame_id ))
01466 if ( i==AXIS_DISTANCE ) break;
01467 cbf_failnez (cbf_new_row (cif))
01468 }
01469
01470 cbf_failnez (cbf_new_column (cif, "axis_id"))
01471 cbf_failnez (cbf_rewind_row (cif))
01472 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01473 cbf_failnez (cbf_set_value (cif, hcif.diffrn_scan_frame_axis[i].axis_id))
01474 if ( i==AXIS_DISTANCE ) break;
01475 cbf_failnez (cbf_next_row (cif))
01476 }
01477
01478 cbf_failnez (cbf_new_column (cif, "angle"))
01479 cbf_failnez (cbf_rewind_row (cif))
01480 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01481 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_scan_frame_axis[i].angle))
01482 if ( i==AXIS_DISTANCE ) break;
01483 cbf_failnez (cbf_next_row (cif))
01484 }
01485
01486 cbf_failnez (cbf_new_column (cif, "displacement"))
01487 cbf_failnez (cbf_rewind_row (cif))
01488 for ( i=0; i<=AXIS_DISTANCE; i++ ) {
01489 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.diffrn_scan_frame_axis[i].displacement))
01490 if ( i==AXIS_DISTANCE ) break;
01491 cbf_failnez (cbf_next_row (cif))
01492 }
01493
01494
01495
01496
01497
01498 cbf_failnez (cbf_force_new_category (cif, "array_structure"))
01499 cbf_failnez (cbf_new_column (cif, "array_id"))
01500 cbf_failnez (cbf_set_value (cif, hcif.array_id ))
01501
01502
01503
01504
01505
01506 cbf_failnez (cbf_force_new_category (cif, "array_intensities"))
01507 cbf_failnez (cbf_new_column (cif, "array_id"))
01508 cbf_failnez (cbf_set_value (cif, hcif.array_id ))
01509 cbf_failnez (cbf_new_column (cif, "binary_id"))
01510 cbf_failnez (cbf_set_integervalue (cif, hcif.binary_id))
01511 cbf_failnez (cbf_new_column (cif, "linearity"))
01512 cbf_failnez (cbf_set_value (cif, hcif.array_intensities.linearity))
01513 cbf_failnez (cbf_new_column (cif, "undefined_value"))
01514 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", hcif.array_intensities.undefined_value))
01515 cbf_failnez (cbf_new_column (cif, "overload"))
01516 cbf_failnez (cbf_set_doublevalue (cif, "%.0f", hcif.array_intensities.overload))
01517 cbf_failnez (cbf_new_column (cif, "scaling"))
01518 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.array_intensities.scaling))
01519 cbf_failnez (cbf_new_column (cif, "gain"))
01520 cbf_failnez (cbf_set_doublevalue (cif, "%.3f", hcif.array_intensities.gain))
01521
01522
01523
01524
01525
01526 cbf_failnez (cbf_force_new_category (cif, "array_structure_list"))
01527
01528 cbf_failnez (cbf_new_column (cif, "array_id"))
01529 for ( i=0; i<2; i++ ) {
01530 cbf_failnez (cbf_set_value (cif, hcif.array_id ))
01531 if ( i==1) break;
01532 cbf_failnez (cbf_new_row (cif))
01533 }
01534
01535 cbf_failnez (cbf_new_column (cif, "index"))
01536 cbf_failnez (cbf_rewind_row (cif))
01537 for ( i=0; i<2; i++ ) {
01538 cbf_failnez (cbf_set_integervalue (cif, hcif.array_structure_list[i].index))
01539 if ( i==1) break;
01540 cbf_failnez (cbf_next_row (cif))
01541 }
01542
01543 cbf_failnez (cbf_new_column (cif, "dimension"))
01544 cbf_failnez (cbf_rewind_row (cif))
01545 for ( i=0; i<2; i++ ) {
01546 cbf_failnez (cbf_set_integervalue (cif, hcif.array_structure_list[i].dimension))
01547 if ( i==1) break;
01548 cbf_failnez (cbf_next_row (cif))
01549 }
01550
01551 cbf_failnez (cbf_new_column (cif, "precedence"))
01552 cbf_failnez (cbf_rewind_row (cif))
01553 for ( i=0; i<2; i++ ) {
01554 cbf_failnez (cbf_set_integervalue (cif, hcif.array_structure_list[i].precedence))
01555 if ( i==1) break;
01556 cbf_failnez (cbf_next_row (cif))
01557 }
01558
01559 cbf_failnez (cbf_new_column (cif, "direction"))
01560 cbf_failnez (cbf_rewind_row (cif))
01561 for ( i=0; i<2; i++ ) {
01562 cbf_failnez (cbf_set_value (cif, hcif.array_structure_list[i].direction))
01563 if ( i==1) break;
01564 cbf_failnez (cbf_next_row (cif))
01565 }
01566
01567
01568
01569
01570
01571 cbf_failnez (cbf_force_new_category (cif, "array_element_size"))
01572
01573 cbf_failnez (cbf_new_column (cif, "array_id"))
01574 for ( i=0; i<2; i++ ) {
01575 cbf_failnez (cbf_set_value (cif, hcif.array_id ))
01576 if ( i==1) break;
01577 cbf_failnez (cbf_new_row (cif))
01578 }
01579
01580 cbf_failnez (cbf_new_column (cif, "index"))
01581 cbf_failnez (cbf_rewind_row (cif))
01582 for ( i=0; i<2; i++ ) {
01583 cbf_failnez (cbf_set_integervalue (cif, hcif.array_element_size.index[i]))
01584 if ( i==1) break;
01585 cbf_failnez (cbf_next_row (cif))
01586 }
01587
01588 cbf_failnez (cbf_new_column (cif, "size"))
01589 cbf_failnez (cbf_rewind_row (cif))
01590 for ( i=0; i<2; i++ ) {
01591 cbf_failnez (cbf_set_doublevalue (cif, "%1.4e", hcif.array_element_size.pixelsize[i]))
01592 if ( i==1) break;
01593 cbf_failnez (cbf_next_row (cif))
01594 }
01595
01596
01597
01598
01599
01600 cbf_failnez (cbf_force_new_category (cif, "array_data"))
01601 cbf_failnez (cbf_new_column (cif, "array_id"))
01602 cbf_failnez (cbf_set_value (cif, "image_1"))
01603 cbf_failnez (cbf_new_column (cif, "binary_id"))
01604 cbf_failnez (cbf_set_integervalue (cif, hcif.binary_id))
01605 cbf_failnez (cbf_new_column (cif, "data"))
01606
01607 return 1;
01608 }
01609
01610
01611
01612
01613 void mar3452CIFHeader(char *prg, char *f, MAR345_HEADER h345)
01614 {
01615 char *c,str[64],num[16];
01616 int i;
01617 float pixelsize;
01618 time_t now;
01619
01620 time( &now );
01621
01622
01623 memset( (char *)&hcif, 0, sizeof(CIF_HEADER) );
01624
01625 pixelsize = h345.pixel_height;
01626 if ( pixelsize > 1.0 ) pixelsize /= 1000.;
01627
01628 hcif.binary_id = 1;
01629
01630 strcpy(hcif.entry_id, "img1");
01631 strcpy(hcif.scan_id, "scan1");
01632 strcpy(hcif.array_id, "img1");
01633 strcpy(hcif.crystal_id, "xtal1");
01634 sprintf(str, "SN_%03d",h345.scanner);
01635 strcpy(hcif.element_id, str);
01636 strcpy(hcif.mar_id, str);
01637 strcpy(hcif.diffrn_id, "diffrn1");
01638 strcpy(hcif.data_id, "data1");
01639 strcpy(hcif.detector_id, "mar345");
01640 strcpy(hcif.frame_id, "frm1");
01641
01642 sprintf(str, "%s",(char *)ctime( &now ) );
01643 str[ strlen( str ) -1 ] = '\0';
01644 if ( strlen( h345.date ) > 5 )
01645 strcpy(hcif.audit.creation_date, h345.date);
01646 else
01647 strcpy(hcif.audit.creation_date, str);
01648
01649 sprintf(str, "Created by %s", prg);
01650 strcpy(hcif.audit.creation_method, str);
01651
01652 strcpy(hcif.diffrn_radiation.detector, "Image Plate");
01653 strcpy(hcif.diffrn_radiation.collimation, "double slits");
01654 strcpy(hcif.diffrn_radiation.monochromator, h345.filter);
01655 hcif.diffrn_radiation_wavelength.polarisn_ratio = h345.polar;
01656 hcif.diffrn_radiation_wavelength.polarisn_norm = 0.0;
01657 hcif.diffrn_radiation_wavelength.wavelength = h345.wave;
01658 hcif.diffrn_radiation_wavelength.wavelength_wt = 1.0;
01659
01660 if ( strlen( h345.source ) )
01661 strcpy(hcif.diffrn_source.source, h345.source);
01662 else
01663 strcpy(hcif.diffrn_source.source, "unknown");
01664 strcpy(hcif.diffrn_source.type, "unknown");
01665 hcif.diffrn_source.current = h345.mA;
01666 hcif.diffrn_source.voltage = h345.kV;
01667 hcif.diffrn_source.power = h345.kV*h345.mA;
01668
01669 strcpy(hcif.array_structure.compression_type, "x-CBF_PACKED");
01670 strcpy(hcif.array_structure.encoding_type, "unsigned 32-bit integer");
01671 strcpy(hcif.array_structure.byte_order, "little_endian");
01672
01673 hcif.array_structure_list[0].dimension = h345.size;
01674 hcif.array_structure_list[1].dimension = h345.size;
01675 hcif.array_structure_list[0].index = 1;
01676 hcif.array_structure_list[1].index = 2;
01677 hcif.array_structure_list[0].precedence = 2;
01678 hcif.array_structure_list[1].precedence = 1;
01679 strcpy(hcif.array_structure_list[0].direction, "increasing");
01680 strcpy(hcif.array_structure_list[1].direction, "increasing");
01681
01682 hcif.array_element_size.pixelsize[0] = pixelsize/1000.;
01683 hcif.array_element_size.pixelsize[1] = pixelsize/1000.;
01684 hcif.array_element_size.index[0] = 1;
01685 hcif.array_element_size.index[1] = 2;
01686
01687 hcif.array_intensities.gain = h345.gain;
01688 hcif.array_intensities.overload = 250000;
01689 hcif.array_intensities.undefined_value = 999999;
01690 strcpy(hcif.array_intensities.linearity, "linear");
01691 hcif.array_intensities.offset = 0;
01692 hcif.array_intensities.scaling = h345.multiplier;
01693
01694 strcpy(hcif.axis[AXIS_PHI].id, "phi" );
01695 strcpy(hcif.axis[AXIS_PHI].type, "rotation" );
01696 strcpy(hcif.axis[AXIS_PHI].equipment, "detector" );
01697 strcpy(hcif.axis[AXIS_PHI].depends_on, "." );
01698 hcif.axis[AXIS_PHI].vector[0] = 1.0;
01699 hcif.axis[AXIS_PHI].vector[1] = 0.0;
01700 hcif.axis[AXIS_PHI].vector[2] = 0.0;
01701
01702 strcpy(hcif.axis[AXIS_OMEGA].id, "omega" );
01703 strcpy(hcif.axis[AXIS_OMEGA].type, "rotation" );
01704 strcpy(hcif.axis[AXIS_OMEGA].equipment, "detector" );
01705 strcpy(hcif.axis[AXIS_OMEGA].depends_on, "." );
01706 hcif.axis[AXIS_OMEGA].vector[0] = 0.0;
01707 hcif.axis[AXIS_OMEGA].vector[1] = 1.0;
01708 hcif.axis[AXIS_OMEGA].vector[2] = 0.0;
01709
01710 strcpy(hcif.axis[AXIS_CHI].id, "chi" );
01711 strcpy(hcif.axis[AXIS_CHI].type, "rotation" );
01712 strcpy(hcif.axis[AXIS_CHI].equipment, "detector" );
01713 strcpy(hcif.axis[AXIS_CHI].depends_on, "." );
01714 hcif.axis[AXIS_CHI].vector[0] = 0.0;
01715 hcif.axis[AXIS_CHI].vector[1] = 0.0;
01716 hcif.axis[AXIS_CHI].vector[2] = 1.0;
01717
01718 strcpy(hcif.axis[AXIS_THETA].id, "twotheta" );
01719 strcpy(hcif.axis[AXIS_THETA].type, "rotation" );
01720 strcpy(hcif.axis[AXIS_THETA].equipment, "detector" );
01721 strcpy(hcif.axis[AXIS_THETA].depends_on, "." );
01722 hcif.axis[AXIS_THETA].vector[0] = 1.0;
01723 hcif.axis[AXIS_THETA].vector[1] = 0.0;
01724 hcif.axis[AXIS_THETA].vector[2] = 0.0;
01725
01726 strcpy(hcif.axis[AXIS_DISTANCE].id, "distance" );
01727 strcpy(hcif.axis[AXIS_DISTANCE].type, "translation" );
01728 strcpy(hcif.axis[AXIS_DISTANCE].equipment, "detector" );
01729 strcpy(hcif.axis[AXIS_DISTANCE].depends_on, "." );
01730 hcif.axis[AXIS_DISTANCE].vector[0] = 0.0;
01731 hcif.axis[AXIS_DISTANCE].vector[1] = 0.0;
01732 hcif.axis[AXIS_DISTANCE].vector[2] = -1.0;
01733
01734 strcpy(hcif.diffrn_detector.detector, "Image Plate" );
01735 strcpy(hcif.diffrn_detector.type, "mar345 IP system" );
01736
01737 hcif.diffrn_detector_element.center_x = h345.xcen*pixelsize;
01738 hcif.diffrn_detector_element.center_y = h345.ycen*pixelsize;
01739
01740
01741 if ( h345.mode == 0 )
01742 strcpy(hcif.diffrn_detector_mar_exposure.type, "dose");
01743 else
01744 strcpy(hcif.diffrn_detector_mar_exposure.type, "time");
01745 hcif.diffrn_detector_mar_exposure.time = h345.time;
01746 hcif.diffrn_detector_mar_exposure.dose = h345.doseavg;
01747
01748 for (i=0; i<=AXIS_DISTANCE; i++ ) {
01749 hcif.diffrn_detector_mar_axis[i].angle_start =
01750 hcif.diffrn_detector_mar_axis[i].angle_end =
01751 hcif.diffrn_detector_mar_axis[i].angle_increment=
01752 hcif.diffrn_detector_mar_axis[i].displacement = 0.0;
01753 }
01754
01755 hcif.diffrn_detector_mar_axis[AXIS_PHI].angle_start = h345.phibeg;
01756 hcif.diffrn_detector_mar_axis[AXIS_PHI].angle_end = h345.phiend;
01757 hcif.diffrn_detector_mar_axis[AXIS_OMEGA].angle_start = h345.omebeg;
01758 hcif.diffrn_detector_mar_axis[AXIS_OMEGA].angle_end = h345.omeend;
01759 hcif.diffrn_detector_mar_axis[AXIS_CHI].angle_start = h345.chi;
01760 hcif.diffrn_detector_mar_axis[AXIS_CHI].angle_end = h345.chi;
01761 hcif.diffrn_detector_mar_axis[AXIS_THETA].angle_end = h345.theta;
01762 hcif.diffrn_detector_mar_axis[AXIS_THETA].angle_start = h345.theta;
01763 hcif.diffrn_detector_mar_axis[AXIS_OMEGA].oscillations = h345.omeosc;
01764 hcif.diffrn_detector_mar_axis[AXIS_PHI ].oscillations = h345.phiosc;
01765
01766 hcif.diffrn_detector_mar_axis[AXIS_DISTANCE].angle_start = 0.0;
01767 hcif.diffrn_detector_mar_axis[AXIS_DISTANCE].angle_end = 0.0;
01768 hcif.diffrn_detector_mar_axis[AXIS_DISTANCE].displacement = h345.dist;
01769
01770 for (i=0; i<=AXIS_DISTANCE; i++ ) {
01771 strcpy( hcif.diffrn_detector_mar_axis[i].axis_id, hcif.axis[i].id);
01772 hcif.diffrn_detector_mar_axis[i].angle_increment = hcif.diffrn_detector_mar_axis[i].angle_end -
01773 hcif.diffrn_detector_mar_axis[i].angle_start;\
01774 }
01775
01776 hcif.diffrn_detector_mar_exposure_dose.start = h345.dosebeg;
01777 hcif.diffrn_detector_mar_exposure_dose.end = h345.doseend;
01778 hcif.diffrn_detector_mar_exposure_dose.min = h345.dosemin;
01779 hcif.diffrn_detector_mar_exposure_dose.max = h345.dosemax;
01780 hcif.diffrn_detector_mar_exposure_dose.avg = h345.doseavg;
01781 hcif.diffrn_detector_mar_exposure_dose.esd = h345.dosesig;
01782 hcif.diffrn_detector_mar_exposure_dose.measurements = h345.dosen;
01783
01784 hcif.diffrn_detector_mar_adc.channel_a = h345.adc_A;
01785 hcif.diffrn_detector_mar_adc.channel_b = h345.adc_B;
01786 hcif.diffrn_detector_mar_adc.add_channel_a = h345.add_A;
01787 hcif.diffrn_detector_mar_adc.add_channel_b = h345.add_B;
01788 hcif.diffrn_detector_mar_adc.gain = h345.gain;
01789 hcif.diffrn_detector_mar_adc.multiplier = h345.multiplier;
01790 if ( h345.pixel_height == 100.f || h345.pixel_height == 0.1f )
01791 hcif.diffrn_detector_mar_adc.oversampling = 1;
01792 else
01793 hcif.diffrn_detector_mar_adc.oversampling = 2;
01794
01795 hcif.diffrn_detector_mar_scan.scanmode = h345.size;
01796 hcif.diffrn_detector_mar_scan.number_of_pixels = h345.pixels;
01797 hcif.diffrn_detector_mar_scan.number_of_pixels_larger_16_bit = h345.high;
01798 hcif.diffrn_detector_mar_scan.radial_offset = h345.roff;
01799 hcif.diffrn_detector_mar_scan.tangential_offset = h345.toff;
01800 hcif.diffrn_detector_mar_scan.pixel_height = h345.pixel_height;
01801 hcif.diffrn_detector_mar_scan.pixel_length = h345.pixel_length;
01802
01803 hcif.diffrn_detector_mar_data.intensity_min = h345.valmin;
01804 hcif.diffrn_detector_mar_data.intensity_max = h345.valmax;
01805 hcif.diffrn_detector_mar_data.intensity_avg = h345.valavg;
01806 hcif.diffrn_detector_mar_data.intensity_esd = h345.valsig;
01807 hcif.diffrn_detector_mar_data.histogram_start = h345.histbeg;
01808 hcif.diffrn_detector_mar_data.histogram_end = h345.histend;
01809 hcif.diffrn_detector_mar_data.histogram_max = h345.histmax;
01810
01811 for ( i=0; i<8; i++ )
01812 hcif.diffrn_detector_mar_gaps.gap[i] = h345.gap[i];
01813
01814
01815 c = strrchr( f, '/' );
01816 if ( c == NULL )
01817 c = f;
01818 else
01819 c++;
01820
01821
01822 strcpy( str, c);
01823 c = strrchr ( str, '.' );
01824 if ( c!=NULL ) {
01825 i=strlen( c );
01826 str[ strlen(str) - i ] = '\0';
01827 }
01828 strcpy( hcif.diffrn_scan.frame_id_start, str);
01829 strcpy( hcif.diffrn_scan.frame_id_end, str);
01830
01831 for (i=strlen(str)-1;i>=0; i--) {
01832 if ( str[i] == '_' ) {
01833 str[i] = '\0';
01834 break;
01835 }
01836 }
01837 strcpy(hcif.crystal_id, str);
01838 hcif.diffrn_scan.frames = 1;
01839
01840 strcpy(hcif.diffrn_measurement.device, "oscillation camera");
01841 strcpy(hcif.diffrn_measurement.device_type, "mar detector");
01842 strcpy(hcif.diffrn_measurement.method, "phi scan");
01843 hcif.diffrn_measurement.sample_detector_distance = h345.dist;
01844 hcif.diffrn_measurement.number_of_axes = 1;
01845
01846 strcpy(hcif.diffrn_scan_axis[AXIS_PHI].axis_id, "phi" );
01847 hcif.diffrn_scan_axis[AXIS_PHI].angle_start = h345.phibeg;
01848 hcif.diffrn_scan_axis[AXIS_PHI].angle_range = h345.phiend-h345.phibeg;
01849 hcif.diffrn_scan_axis[AXIS_PHI].angle_increment = h345.phiend-h345.phibeg;
01850
01851 strcpy(hcif.diffrn_scan_axis[AXIS_OMEGA].axis_id,"omega" );
01852 hcif.diffrn_scan_axis[AXIS_OMEGA].angle_start = h345.omebeg;
01853 hcif.diffrn_scan_axis[AXIS_OMEGA].angle_range = h345.omeend-h345.omebeg;
01854 hcif.diffrn_scan_axis[AXIS_OMEGA].angle_increment= h345.omeend-h345.omebeg;
01855
01856 strcpy(hcif.diffrn_scan_frame_axis[AXIS_PHI].axis_id, "phi" );
01857 hcif.diffrn_scan_frame_axis[AXIS_PHI].angle = h345.phiend;
01858 hcif.diffrn_scan_frame_axis[AXIS_PHI].displacement = 0.0;
01859
01860 strcpy(hcif.diffrn_scan_frame_axis[AXIS_OMEGA].axis_id, "omega" );
01861 hcif.diffrn_scan_frame_axis[AXIS_OMEGA].angle = h345.omeend;
01862 hcif.diffrn_scan_frame_axis[AXIS_OMEGA].displacement = 0.0;
01863
01864 strcpy(hcif.diffrn_scan_frame_axis[AXIS_CHI].axis_id, "chi" );
01865 hcif.diffrn_scan_frame_axis[AXIS_CHI].angle = h345.chi;
01866 hcif.diffrn_scan_frame_axis[AXIS_CHI].displacement = 0.0;
01867
01868 strcpy(hcif.diffrn_scan_frame_axis[AXIS_THETA].axis_id, "twotheta" );
01869 hcif.diffrn_scan_frame_axis[AXIS_THETA].angle = h345.theta;
01870 hcif.diffrn_scan_frame_axis[AXIS_THETA].displacement = 0.0;
01871
01872 strcpy(hcif.diffrn_scan_frame_axis[AXIS_DISTANCE].axis_id,"distance" );
01873 hcif.diffrn_scan_frame_axis[AXIS_DISTANCE].angle = 0.0;
01874 hcif.diffrn_scan_frame_axis[AXIS_DISTANCE].displacement = h345.dist;
01875 }
01876
01877
01878
01879
01880 int GetCIFData (char *prg, char *f, FILE *fp, unsigned int *i4_img)
01881 {
01882 cif_read = 0;
01883 cbf_failnez (cbf_rewind_datablock(cif))
01884 cbf_failnez (cbf_find_category (cif, "array_data"))
01885 if ( cif_error ) {
01886 printe("Cannot find category: array_data");
01887 goto CIF_END;
01888 }
01889 cbf_failnez (cbf_find_column (cif, "array_id"))
01890 cbf_failnez (cbf_find_row (cif, hcif.array_id))
01891 cbf_failnez (cbf_find_column (cif, "data"))
01892 cbf_failnez (cbf_get_integerarrayparameters(
01893 cif,
01894 &cif_compression,
01895 &cif_id,
01896 &cif_element_size,
01897 &cif_element_signed,
01898 &cif_element_unsigned,
01899 &cif_nelements,
01900 &cif_minelement,
01901 &cif_maxelement))
01902 if ( cif_error ) {
01903 printe("Cannot get data array parameters");
01904 goto CIF_END;
01905 }
01906
01907 cbf_failnez (cbf_get_integerarray (
01908 cif,
01909 &cif_id,
01910 (void *)i4_img,
01911 cif_element_size,
01912 cif_element_signed,
01913 cif_nelements,
01914 &cif_read))
01915 if ( cif_error ) {
01916 printe("Cannot read data array");
01917 goto CIF_END;
01918 }
01919
01920 CIF_END:
01921 if ( verbose > 1 ) {
01922 printf("\n");
01923 printf(" Identifier :\t %11d\n",cif_id);
01924 printf(" Compression :\t %11d\n",cif_compression);
01925 printf(" Elements: :\t %11d\n",cif_nelements);
01926 printf(" Min. element :\t %11d\n",cif_minelement);
01927 printf(" Max. element :\t %11d\n",cif_maxelement);
01928 printf(" Element size :\t %11d\n",cif_element_size);
01929 printf(" Signed :\t %11d\n",cif_element_signed);
01930 printf(" Unsigned :\t %11d\n",cif_element_unsigned);
01931 printf(" Elements read:\t %11d\n",cif_read);
01932 }
01933
01934
01935 cbf_failnez (cbf_free_handle (cif))
01936
01937
01938 fp = NULL;
01939
01940 return cif_read;
01941 }
01942
01943
01944
01945
01946 int PutCIFData (char *prg, char *op, char op_cbf, unsigned int *i4_img)
01947 {
01948 FILE *fp = NULL;
01949 int success = 0;
01950 int mime = MIME_HEADERS;
01951 int digest = MSG_DIGEST;
01952 int encoding = ENC_NONE;
01953 int bytedir = 0;
01954 int cbforcif = CBF;
01955 int term = ENC_CRTERM | ENC_LFTERM;
01956
01957 if ( op_cbf == 1 ) {
01958 cbforcif = CBF;
01959 encoding = ENC_NONE;
01960 term = ENC_CRTERM | ENC_LFTERM;
01961 }
01962 else {
01963 cbforcif = CIF;
01964 encoding = ENC_BASE64;
01965 term = ENC_LFTERM;
01966 }
01967
01968 cif_compression = CBF_PACKED;
01969 cif_id = hcif.binary_id;
01970 cif_element_size = sizeof(int);
01971 cif_element_signed = 0;
01972 cif_nelements = hcif.array_structure_list[0].dimension *
01973 hcif.array_structure_list[1].dimension;
01974
01975
01976 cbf_failnez (cbf_set_integerarray (
01977 cif,
01978 cif_compression,
01979 cif_id,
01980 (void *)i4_img,
01981 cif_element_size,
01982 cif_element_signed,
01983 cif_nelements))
01984
01985 fp = fopen (op, "w+b");
01986 if ( fp == NULL ) return 0;
01987
01988 cbf_failnez (cbf_write_file (
01989 cif,
01990 fp,
01991 1,
01992 cbforcif,
01993 mime | digest,
01994 encoding | bytedir | term))
01995 if ( !cif_error ) success = 1;
01996
01997
01998 cbf_failnez (cbf_free_handle (cif))
01999
02000 if ( verbose > 1 ) {
02001 printf("\n");
02002 printf("%s: CIF-Header values:\n",prg);
02003 printf(" Pixels :\t %d x %d\n",hcif.array_structure_list[0].dimension,hcif.array_structure_list[1].dimension);
02004 printf(" Identifier :\t %11d\n",cif_id);
02005 printf(" Compression :\t %11d\n",cif_compression);
02006 printf(" Elements: :\t %11d\n",cif_nelements);
02007 printf(" Element size :\t %11d\n",cif_element_size);
02008 printf(" Signed :\t %11d\n",cif_element_signed);
02009 }
02010
02011
02012 return success;
02013 }