diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mrc.c | 25 |
1 files changed, 12 insertions, 13 deletions
@@ -35,7 +35,7 @@ int mrc_read(ControlContext *ctx) { unsigned int extsize; double pixel_size; int x, y; - + fh = fopen(ctx->filename, "rb"); /* Read primary header */ @@ -51,7 +51,7 @@ int mrc_read(ControlContext *ctx) { fprintf(stderr, "MR: Image origin must be at zero: found at %i,%i\n", mrc.nxstart, mrc.nystart); return -1; } - + /* Read all extended headers, one by one */ extsize = 4*mrc.numintegers + 4*mrc.numfloats; if ( extsize > sizeof(MRCExtHeader) ) { @@ -62,16 +62,16 @@ int mrc_read(ControlContext *ctx) { for ( i=0; i<mrc.nz; i++ ) { fread(&ext[i], extsize, 1, fh); } - + pixel_size = ext[0].pixel_size; printf("pixel_size = %f m^-1\n", pixel_size); ctx->fmode = FORMULATION_PIXELSIZE; - + for ( i=0; i<mrc.nz; i++ ) { - + int16_t *image = malloc(mrc.ny * mrc.nx * sizeof(uint16_t)); uint16_t *uimage = malloc(mrc.ny * mrc.nx * sizeof(uint16_t)); - + printf("Image #%3i: tilt=%f deg omega=%f deg L=%f m\n", i, ext[i].a_tilt, ext[i].tilt_axis, ext[i].magnification); ctx->camera_length = ext[i].magnification; @@ -82,10 +82,10 @@ int mrc_read(ControlContext *ctx) { } ctx->omega = deg2rad(ext[i].tilt_axis); ctx->pixel_size = ext[i].pixel_size; - + fseek(fh, mrc.next + sizeof(MRCHeader) + mrc.nx*mrc.ny*2*i, SEEK_SET); fread(image, mrc.nx*mrc.ny*2, 1, fh); - + for ( x=0; x<mrc.nx; x++ ) { for ( y=0; y<mrc.ny; y++ ) { uimage[x + mrc.nx*y] = image[x + mrc.nx*y] + 32767; @@ -93,13 +93,13 @@ int mrc_read(ControlContext *ctx) { } } free(image); - + image_add(ctx->images, uimage, mrc.nx, mrc.ny, deg2rad(ext[i].a_tilt), ctx); - + } fclose(fh); - + return 0; } @@ -109,8 +109,7 @@ unsigned int mrc_is_mrcfile(const char *filename) { if ( strcmp(filename+(strlen(filename)-4), ".mrc") == 0 ) { return 1; } - + return 0; } - |