www.pudn.com > 医学算法.rar > cen.c
#include#include /* cen - find center of scanner data Carl Crawford Purdue University West Lafayette, Indiana 47907 April 23,1981 */ /* syntax: cen [options] VARIABLES: DEFAULT n: number of detectors (maximum 100) 100 if: input file name for ellipse data for003.dat k: number of projections 100 FLAGS: DEFAULT -f: don't flip last projection -p: don't print program status -e: save error file -c: generate command line output format */ #define MD 512 /* max number of detectors */ int n = 100; /* number of detectors */ int n2; /* n * 3 */ char *ifn = "for003.dat"; /* input file */ FILE *ifd; /* input file descriptor */ int k = 100; /* number of projections */ float pr1[3*MD]; /* zero degree projection */ float pr2[MD]; /* 180 degree projection */ float merr[2*MD]; /* error array */ int print; /* 1=don't print program info */ int flip; /* 1=don't flip last projection */ float diff; /* tmp difference value */ int serr; /* 1=save error vector in "err" */ int com; /* 1=use commandline format */ char *table[] = { "n", "k", "if", 0 }; main(argc,argv) int argc; char **argv; { register i,j; char cc; while(argv++,--argc){ if(**argv == '-')while(cc = *++*argv)switch(cc){ case 'p': /* print flag */ print = 1; break; case 's': /* don't flop */ case 'f': flip = 1; break; case 'e': /* save error vector */ serr = 1; break; case 'c': /* command line format */ com = 1; break; default: fprintf(stderr,"bad flag: -%c\n",cc); exit(1); }else switch(comm(*argv)){ case 1: /* n */ n = atoi(*argv + 2); break; case 3: /* if */ ifn = *argv + 3; break; case 2: /* k */ k = atoi(*argv + 2); break; } } if(!print && !com){ printf("CEN DATA\n\n"); printf("n: %d\n",n); printf("k: %d\n",k); printf("if: %s\n",ifn); if(flip)printf("no swap\n"); if(serr)printf("error vector saved in 'err'\n"); } if(n > MD || n < 1)err("bad detector count",""); if((ifd = fopen(ifn,"r")) == NULL)err("can't open: ",ifn); n2 = n * 2; for(i=0;i<(n2+n);pr1[i++] = 0.0); fread(pr1+n,sizeof(*pr1),n,ifd); fseek(ifd,(long)sizeof(*pr1)*(k-2)*n,1); if(fread(pr2,sizeof(*pr2),n,ifd) != n)err("unexpected EOF",""); slant(pr1+n); slant(pr2); if(!flip)swap(pr2); for(i=0;i >1; for(p=proj,q=proj+n-1,i=0;i