/*************************************************************************\ * Copyright (c) 2002 The University of Chicago, as Operator of Argonne * National Laboratory. * Copyright (c) 2002 The Regents of the University of California, as * Operator of Los Alamos National Laboratory. * This file is distributed subject to a Software License Agreement found * in the file LICENSE that is included with this distribution. \*************************************************************************/ /************************************************************************* * FILE: image2sdds.c * Author: Josh Stein * * Purpose: Program for converting a raw binary image file * to a variety of SDDS formats. * * Mods: login mm/dd/yy: description * * stein 02/26/97: created *************************************************************************/ #include #include #include /* SDDS library header */ #define VERSION "V1.2" #define XDIMENSION 482 /* Default beam size in X axis*/ #define YDIMENSION 512 /* Default beam size in Y axis*/ /* Parameter defines */ #define PARM_DEBUG 1 #define PARM_XDIM 2 #define PARM_YDIM 3 #define PARM_TRANSPOSE 4 #define PARM_ASCII 5 #define PARM_HELP 6 #define PARM_QMARK 7 #define PARM_CONTOUR 8 #define PARM_2D 9 #define PARM_XMIN 10 #define PARM_YMIN 11 #define PARM_XMAX 12 #define PARM_YMAX 13 #define PARM_MULTICOLUMNMODE 14 int asciiOutput=0; /* Set to 1 for ASCII sdds output, 0 for binary */ int array=0; /* Set to 1 for 2 dimensional array output */ int contour=0; int xDim=0; int yDim=0; double xMin=0; double yMin=0; double xMax=1; double yMax=1; int useXmax=0; int useYmax=0; int debug=0; int transpose=0; int multiColumnMode=0; struct parm_info { char *parm; int len; int id; char *desc; }; typedef struct parm_info PARM_INFO; static PARM_INFO ptable[] = { { "-2d", 3, PARM_2D, "2D_array"}, { "-debug", 6, PARM_DEBUG, "Debug_flag"}, { "-xdim", 5, PARM_XDIM, "X_Dimensions"}, { "-ydim", 5, PARM_YDIM, "Y_Dimensions"}, { "-transpose",10, PARM_TRANSPOSE,"Transpose"}, { "-ascii",6, PARM_ASCII,"Transpose"}, { "-contour",8, PARM_CONTOUR,"Contour"}, { "-help",5, PARM_HELP,"Help"}, { "-?",2, PARM_QMARK,"Help"}, { "-xmin", 5, PARM_XMIN, "X_Minimum"}, { "-ymin", 5, PARM_YMIN, "Y_Minimum"}, { "-xmax", 5, PARM_XMAX, "X_Maximum"}, { "-ymax", 5, PARM_YMAX, "Y_Maximum"}, { "-multicolumnmode",16,PARM_MULTICOLUMNMODE,"MultiColumnMode"}, { NULL, -1, -1 } }; /* Prototypes */ int process_cmdline_args(int argc, char *argv[], char *infile, char *outfile); void usage(char *name); int main(int argc,char *argv[]) { short *image=NULL; short *rotimage=NULL; char infile[255]; char outfile[255]; char xDimStr[10]; char yDimStr[10]; int32_t dim[2]; FILE *infilefp; int x,y,i,n,j; SDDS_TABLE table; double xInterval=.02; double yInterval=.02; double *indexes=NULL; char **columnNames=NULL; int32_t *data=NULL; process_cmdline_args(argc,argv,infile,outfile); /* If user didn't specify extrema */ if(!xDim) { xDim = XDIMENSION; } if(!yDim) { yDim = YDIMENSION; } image = (short*)malloc(sizeof(short)*xDim*yDim); rotimage = (short*)malloc(sizeof(short)*xDim*yDim); /* Open input file */ if((infilefp = fopen(infile,"r"))==NULL) { fprintf(stderr,"%s: error: enable to open input file: %s\n", argv[0],infile); exit(1); } /* Read image into 1 dimensional array */ for (x=0;xargc) cmderror++; else { if(argv[i][0]=='-') cmderror++; else { if(sscanf(argv[i],"%d",&debug)<1) cmderror++; else scan_done=1; } } break; case PARM_XDIM: if(++i>argc) cmderror++; else { if(argv[i][0]=='-') cmderror++; else { if(sscanf(argv[i],"%d",&xDim)<1) cmderror++; else scan_done=1; } } break; case PARM_YDIM: if(++i>argc) cmderror++; else { if(argv[i][0]=='-') cmderror++; else { if(sscanf(argv[i],"%d",&yDim)<1) cmderror++; else scan_done=1; } } break; case PARM_XMIN: if(++i>argc) cmderror++; else { if(argv[i][0]=='-') cmderror++; else { if(sscanf(argv[i],"%lf",&xMin)<1) cmderror++; else scan_done=1; } } break; case PARM_XMAX: if(++i>argc) cmderror++; else { if(argv[i][0]=='-') cmderror++; else { if(sscanf(argv[i],"%lf",&xMax)<1) cmderror++; else { scan_done=1; useXmax=1; } } } break; case PARM_YMIN: if(++i>argc) cmderror++; else { if(argv[i][0]=='-') cmderror++; else { if(sscanf(argv[i],"%lf",&yMin)<1) cmderror++; else scan_done=1; } } break; case PARM_YMAX: if(++i>argc) cmderror++; else { if(argv[i][0]=='-') cmderror++; else { if(sscanf(argv[i],"%lf",&yMax)<1) cmderror++; else { scan_done=1; useYmax=1; } } } break; case PARM_TRANSPOSE: transpose++; scan_done=1; break; case PARM_MULTICOLUMNMODE: multiColumnMode=1; scan_done=1; break; case PARM_ASCII: asciiOutput++; scan_done=1; break; case PARM_HELP | PARM_QMARK: usage(argv[0]); scan_done=1; break; case PARM_CONTOUR: contour++; scan_done=1; break; case PARM_2D: array++; scan_done=1; break; default: cmderror++; break; } } } scan_done=0; } } if (cmderror) { usage(argv[0]); exit(1); } return(0); } /************************************************************************* * FUNCTION : usage() * PURPOSE : Describes command line options available to client. * ARGS in : char *name - name of executable program * ARGS out : none * GLOBAL : nothing * RETURNS : none ************************************************************************/ #define pr fprintf void usage(char *name) { pr(stderr,"Image conversion to SDDS utility %s\n",VERSION); pr(stderr,"-------------------------------------\n"); pr(stderr,"usage: %s [optionlist...]\n",name); pr(stderr,"[-2d] output SDDS file as 2D array\n"); pr(stderr,"[-ascii] write SDDS file as ascii (default is binary)\n"); pr(stderr,"[-contour] generate SDDS headers for sddscontour tool \n"); pr(stderr,"[-multicolumnmode]\n"); pr(stderr,"[-?] or [-help] print this message\n"); pr(stderr,"[-transpose] transpose image about diagonal\n"); pr(stderr,"[-xdim ] X dimension of image (default = %d) \n",XDIMENSION); pr(stderr,"[-ydim ] Y dimension of image (default = %d) \n",YDIMENSION); pr(stderr,"[-xmin ] [-xmax ]\n"); pr(stderr,"[-ymin ] [-ymax ]\n"); pr(stderr,"\npurpose:\tReads the image data from file .\n"); pr(stderr,"\t\tand write SDDS data to .\n"); }