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