3 # The latest update : %G% at %U%
12 static char __sccs_id[] = "%Z%moi2mrc ver%I%; Date:%D% %Z%";
17 #define GLOBAL_DECLARATION
18 #include "../inc/config.h"
23 #include "eosString.h"
26 typedef int MedOpticsInteger;
27 typedef float MedOpticsReal;
28 typedef short MedOpticsImageInteger;
29 #define MedOpticsCCDPixelSize (24)
31 typedef struct MedOpticsScan {
32 MedOpticsInteger prescan;
33 MedOpticsInteger underscan;
34 MedOpticsInteger origin;
35 MedOpticsInteger read;
36 MedOpticsInteger postscan;
37 MedOpticsInteger overscan;
41 typedef struct MedOpticsCameraParam {
44 MedOpticsInteger gain;
46 MedOpticsInteger openDelay;
47 MedOpticsInteger closeDelay;
48 MedOpticsInteger expTime;
49 MedOpticsInteger clears;
50 MedOpticsInteger cclear;
51 MedOpticsInteger frame;
52 MedOpticsInteger parShift;
53 MedOpticsInteger numImages;
54 MedOpticsInteger imDelay;
55 MedOpticsInteger expInc;
56 MedOpticsInteger crab;
57 MedOpticsInteger offset;
58 MedOpticsInteger setpointTemp;
59 MedOpticsInteger spec3;
60 MedOpticsInteger spec2;
61 MedOpticsInteger spec1;
62 } MedOpticsCameraParam;
64 typedef struct MedOpticsROI {
71 typedef struct MedOpticsLabels {
80 typedef struct MedOpticsHeader {
83 MedOpticsCameraParam params;
84 MedOpticsInteger serDim;
85 MedOpticsInteger parDim;
86 MedOpticsInteger Shutter;
89 MedOpticsInteger Temperature;
91 MedOpticsInteger numMean;
92 MedOpticsInteger exclude;
93 MedOpticsLabels labels;
99 MedOpticsInteger wmin;
100 MedOpticsInteger wmax;
103 typedef struct MedOpticsImage {
104 MedOpticsHeader Header;
105 MedOpticsImageInteger* Image;
108 typedef struct lmoi2mrcInfo {
109 mrcImageParaTypeReal ADUperElectron;
110 mrcImageParaTypeReal Magnification;
113 extern void MedOpticsImageFileRead(MedOpticsImage* moi, char* filename, int mode);
114 extern void MedOpticsImageHeaderPrint(FILE* fpt, MedOpticsHeader* moi, int mode);
115 extern void lmoi2mrc(MedOpticsImage* moi, mrcImage* mrc, lmoi2mrcInfo linfo, int mode);
118 main(int argc, char* argv[])
126 argCheck(&info, argc, argv);
129 linfo.ADUperElectron = info.ADUperE;
130 linfo.Magnification = info.Mag*info.Mag2*1000;
132 DEBUGPRINT("Program Start\n");
133 MedOpticsImageFileRead(&moi, info.In, 0);
137 MedOpticsImageHeaderPrint(stdout, &(moi.Header), 0);
145 lmoi2mrc(&moi, &mrc, linfo, info.mode);
148 mrcFileWrite(&mrc, info.Out, "in main", 0);
156 fprintf(stderr, "----- Additional Usage -----\n");
157 fprintf(stderr, ">>>> -info Integer\n");
158 fprintf(stderr, " 1: All Header Info List \n");
163 lmoi2mrc(MedOpticsImage* moi, mrcImage* mrc, lmoi2mrcInfo linfo, int mode)
165 mrcDefaultHeaderValueSet(mrc);
166 mrc->HeaderN.x = moi->Header.serDim;
167 mrc->HeaderN.y = moi->Header.parDim;
169 mrc->HeaderMode = mode;
170 mrc->HeaderLength.x = MedOpticsCCDPixelSize*10000/linfo.Magnification;
171 mrc->HeaderLength.y = mrc->HeaderLength.x;
172 mrc->HeaderLength.z = mrc->HeaderLength.x;
177 int n = mrc->HeaderN.x*mrc->HeaderN.y;
186 fprintf(stderr, "mean+-3 sd\n");
189 if(0<=moi->Image[i]) {
190 sum += ((double)moi->Image[i]);
191 sum2 += SQR((double)moi->Image[i]);
196 stdev = sqrt(sum2/count - mean*mean);
200 if(moi->Image[i] <= mean - stdev3) {
201 mrc->ImageCharImage[i] = 0;
202 } else if(moi->Image[i] >= mean + stdev3) {
203 mrc->ImageCharImage[i] = 255;
205 mrc->ImageCharImage[i] = (((double)moi->Image[i]) - mean)/stdev3*127 + 127;
210 case mrcShortImage: {
212 int n = mrc->HeaderN.x*mrc->HeaderN.y;
214 fprintf(stderr, "Direct(Positive only)\n");
216 if(moi->Image[i] < 0) {
217 mrc->ImageShortImage[i] = 0;
219 mrc->ImageShortImage[i] = moi->Image[i];
223 fprintf(stderr, "%d %d\n", mrc->ImageShortImage[i], moi->Image[i]);
229 case mrcFloatImage: {
230 int n = mrc->HeaderN.x*mrc->HeaderN.y;
233 fprintf(stderr, "Electon Number\n");
235 if(moi->Image[i] < 0) {
236 mrc->ImageFloatImage[i] = 0;
238 mrc->ImageFloatImage[i] = ((double)moi->Image[i])/linfo.ADUperElectron;
244 fprintf(stderr, "Not supported mode in lmoi2mrc: %d\n", mode);
251 MedOpticsImageFileReadScan(MedOpticsScan* scan, FILE* fpt, int mode)
253 fread(scan, sizeof(MedOpticsInteger), 7, fpt);
255 memoryByteSwap(scan, sizeof(MedOpticsInteger), 7);
260 MedOpticsImageScanPrint(FILE* fpt, MedOpticsScan* scan, int mode)
262 fprintf(fpt, "Scan ----\n");
263 fprintf(fpt, "prescan: %d\n", scan->prescan);
264 fprintf(fpt, "underscan: %d\n", scan->underscan);
265 fprintf(fpt, "origin: %d\n", scan->origin);
266 fprintf(fpt, "read: %d\n", scan->read);
267 fprintf(fpt, "postscan: %d\n", scan->postscan);
268 fprintf(fpt, "overscan: %d\n", scan->overscan);
269 fprintf(fpt, "bin: %d\n", scan->bin);
273 MedOpticsImageFileReadCameraParam(MedOpticsCameraParam* cam, FILE* fpt, int mode)
275 MedOpticsImageFileReadScan(&(cam->ser), fpt, mode);
276 MedOpticsImageFileReadScan(&(cam->par), fpt, mode);
277 fread(&(cam->gain), sizeof(MedOpticsInteger), 18, fpt);
279 memoryByteSwap(&(cam->gain), sizeof(MedOpticsInteger), 18);
284 MedOpticsImageCameraParamPrint(FILE* fpt, MedOpticsCameraParam* cam, int mode)
286 fprintf(fpt, "Camera Parameters ----\n");
287 fprintf(fpt, "---- Serial ");
288 MedOpticsImageScanPrint(fpt, &(cam->ser), mode);
289 fprintf(fpt, "---- Parallel ");
290 MedOpticsImageScanPrint(fpt, &(cam->par), mode);
291 fprintf(fpt, "gain: %d\n", cam->gain);
292 fprintf(fpt, "mpp: %d\n", cam->mpp);
293 fprintf(fpt, "openDelay: %d\n", cam->openDelay);
294 fprintf(fpt, "closeDelay: %d\n", cam->closeDelay);
295 fprintf(fpt, "expTime: %d\n", cam->expTime);
296 fprintf(fpt, "clears: %d\n", cam->clears);
297 fprintf(fpt, "cclear: %d\n", cam->cclear);
298 fprintf(fpt, "frame: %d\n", cam->frame);
299 fprintf(fpt, "parShift: %d\n", cam->parShift);
300 fprintf(fpt, "numImages: %d\n", cam->numImages);
301 fprintf(fpt, "imDelay: %d\n", cam->imDelay);
302 fprintf(fpt, "expInc: %d\n", cam->expInc);
303 fprintf(fpt, "crab: %d\n", cam->crab);
304 fprintf(fpt, "offset: %d\n", cam->offset);
305 fprintf(fpt, "setTemp: %d\n", cam->setpointTemp);
306 fprintf(fpt, "spec3: %d\n", cam->spec3);
307 fprintf(fpt, "spec2: %d\n", cam->spec2);
308 fprintf(fpt, "spec1: %d\n", cam->spec1);
312 MedOpticsImageFileReadROI(MedOpticsROI* roi, FILE* fpt, int mode)
314 fread(&(roi->x), sizeof(MedOpticsInteger), 4, fpt);
316 memoryByteSwap(&(roi->x), sizeof(MedOpticsInteger), 4);
321 MedOpticsImageROIPrint(FILE* fpt, MedOpticsROI* roi, int mode)
323 fprintf(fpt, "ROI ----\n");
324 fprintf(fpt, "x: %d\n", roi->x);
325 fprintf(fpt, "y: %d\n", roi->y);
326 fprintf(fpt, "xsz: %d\n", roi->xsz);
327 fprintf(fpt, "ysz: %d\n", roi->ysz);
331 MedOpticsImageFileReadLabels(MedOpticsLabels* labels, FILE* fpt, int mode)
337 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); labels->name[i] = stringDuplicate(s);
340 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); labels->comment[i] = stringDuplicate(s);
343 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); labels->filter[i] = stringDuplicate(s);
346 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); labels->lens[i] = stringDuplicate(s);
349 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); labels->aperture[i] = stringDuplicate(s);
352 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); labels->history[i] = stringDuplicate(s);
357 MedOpticsImageLabelsPrint(FILE* fpt, MedOpticsLabels* labels, int mode)
361 fprintf(fpt, "Labels ----\n");
362 fprintf(fpt, "---- Name ----\n");
364 fprintf(fpt, "%s\n", labels->name[i]);
366 fprintf(fpt, "---- Comment ----\n");
368 fprintf(fpt, "%s\n", labels->comment[i]);
370 fprintf(fpt, "---- Filter ----\n");
372 fprintf(fpt, "%s\n", labels->filter[i]);
374 fprintf(fpt, "---- Lens ----\n");
376 fprintf(fpt, "%s\n", labels->lens[i]);
378 fprintf(fpt, "---- Aperture ----\n");
380 fprintf(fpt, "%s\n", labels->aperture[i]);
382 fprintf(fpt, "---- History ----\n");
384 fprintf(fpt, "%s\n", labels->history[i]);
389 MedOpticsImageFileRead(MedOpticsImage* MOI, char* filename, int mode)
393 MedOpticsHeader* moi;
396 fpt = fileOpen(filename, "r");
398 moi = &(MOI->Header);
399 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); moi->title = stringDuplicate(s);
400 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); moi->vers = stringDuplicate(s);
401 MedOpticsImageFileReadCameraParam(&(moi->params), fpt, mode);
402 fread(&(moi->serDim), sizeof(MedOpticsInteger), 3, fpt);
404 memoryByteSwap(&(moi->serDim), sizeof(MedOpticsInteger), 3);
406 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); moi->startTime = stringDuplicate(s);
407 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); moi->endTime = stringDuplicate(s);
408 fread(&(moi->Temperature), sizeof(MedOpticsInteger), 1, fpt);
410 memoryByteSwap(&(moi->Temperature), sizeof(MedOpticsInteger), 1);
412 stringGetFromFile(s, "MedOpticsImageFileRead", fpt, stdout, 3); moi->type = stringDuplicate(s);
413 fread(&(moi->numMean), sizeof(MedOpticsInteger), 2, fpt);
415 memoryByteSwap(&(moi->numMean), sizeof(MedOpticsInteger), 2);
417 MedOpticsImageFileReadLabels(&(moi->labels), fpt, mode);
418 fread(&(moi->min), sizeof(MedOpticsInteger), 4, fpt);
420 memoryByteSwap(&(moi->min), sizeof(MedOpticsInteger), 4);
422 MedOpticsImageFileReadROI(&(moi->roi), fpt, mode);
423 fread(&(moi->wmin), sizeof(MedOpticsInteger), 2, fpt);
425 memoryByteSwap(&(moi->wmin), sizeof(MedOpticsInteger), 2);
427 MOI->Image = (MedOpticsImageInteger*)memoryAllocate(sizeof(MedOpticsImageInteger)*moi->serDim*moi->parDim, "MedOptics");
428 n = fread(MOI->Image, sizeof(MedOpticsImageInteger), moi->serDim*moi->parDim, fpt);
429 if(n != moi->serDim*moi->parDim) {
430 fprintf(stderr, "All Data Cannot Read: %d(present) != %d(predict) at %ld\n", n, moi->serDim*moi->parDim, ftell(fpt));
433 memoryByteSwap(MOI->Image, sizeof(MedOpticsImageInteger), moi->serDim*moi->parDim);
439 MedOpticsImageHeaderPrint(FILE* fpt, MedOpticsHeader* moi, int mode)
441 fprintf(fpt, "title: %s\n", moi->title);
442 fprintf(fpt, "vers: %s\n", moi->vers);
443 fprintf(fpt, "---- Camera Params ");
444 MedOpticsImageCameraParamPrint(fpt, &(moi->params), mode);
445 fprintf(fpt, "serDim: %d\n", moi->serDim);
446 fprintf(fpt, "parDim: %d\n", moi->parDim);
447 fprintf(fpt, "Shutter: %d\n", moi->Shutter);
448 fprintf(fpt, "startTime: %s\n", moi->startTime);
449 fprintf(fpt, "endTime: %s\n", moi->endTime);
450 fprintf(fpt, "Temperature: %d\n", moi->Temperature);
451 fprintf(fpt, "type: %s\n", moi->type);
452 fprintf(fpt, "numMean: %d\n", moi->numMean);
453 fprintf(fpt, "exclude: %d\n", moi->exclude);
454 MedOpticsImageLabelsPrint(fpt, &(moi->labels), mode);
455 fprintf(fpt, "min: %d\n", moi->min);
456 fprintf(fpt, "max: %d\n", moi->max);
457 fprintf(fpt, "mean: %15.6f\n", moi->mean);
458 fprintf(fpt, "stdev: %15.6f\n", moi->stdev);
459 MedOpticsImageROIPrint(fpt, &(moi->roi), mode);
460 fprintf(fpt, "wmin: %d\n", moi->wmin);
461 fprintf(fpt, "wmax: %d\n", moi->wmax);