Doxygen Source Code Documentation
1dplot.c File Reference
#include "mrilib.h"
#include "coxplot.h"
#include "display.h"
Go to the source code of this file.
Defines | |
#define | DEFAULT_NCOLOVR 20 |
#define | NLBUF 131072 |
#define | NVMAX 10000 |
Functions | |
void | startup_timeout_CB (XtPointer client_data, XtIntervalId *id) |
int | main (int argc, char *argv[]) |
void | killfunc (void *fred) |
Variables | |
char * | INIT_colovr [DEFAULT_NCOLOVR] |
char * | INIT_labovr [DEFAULT_NCOLOVR] |
int | nx |
int | nts |
int | sep = 1 |
float ** | yar |
float * | xar |
MCW_DC * | dc |
char * | title = NULL |
char * | xlabel = NULL |
char * | ylabel = NULL |
char * | dfile_nar [6] |
int | nyar = 0 |
char * | ynar [128] |
char ** | yname = NULL |
Define Documentation
|
Definition at line 14 of file 1dplot.c. Referenced by main(). |
|
|
|
|
Function Documentation
|
13 May 2005: modified to read up to NVMAX numbers from stdin, rather than the fixed size array of length 9 of old * Definition at line 427 of file 1dplot.c. Referenced by startup_timeout_CB().
00427 { exit(0) ; } |
|
convert three sub-briks to a raw dataset with consecutive triplets Definition at line 47 of file 1dplot.c. References ADDTO_IMARR, argc, DEFAULT_NCOLOVR, DESTROY_IMARR, dfile_nar, ERROR_exit(), far, free, IMARR_SUBIM, INIT_colovr, INIT_IMARR, INIT_labovr, machdep(), mainENTRY, malloc, MCW_new_DC(), memplot_to_postscript(), mp, mri_fix_data_pointer(), MRI_FLOAT_PTR, mri_free(), mri_new(), mri_new_vol_empty(), mri_read_1D(), mri_transpose(), my_getenv(), nts, MRI_IMARR::num, MRI_IMAGE::nx, nx, MRI_IMAGE::ny, nyar, plot_ts_mem(), plot_ts_xfix(), plot_ts_xypush(), plot_ts_yfix(), PRINT_VERSION, realloc, sep, startup_timeout_CB(), strtod(), title, TS_HELP_STRING, xar, xlabel, yar, ylabel, yname, and ynar.
00048 { 00049 int iarg , ii , ny , ignore=0 , use=0 , install=0 ; 00050 float dx=1.0 , xzero=0.0 ; 00051 char *cpt ; 00052 MRI_IMAGE *inim , *flim ; 00053 float *far ; 00054 XtAppContext app ; 00055 Widget shell ; 00056 int use_stdin=0 ; /* 01 Aug 2001 */ 00057 int out_ps =0 ; /* 29 Nov 2002 */ 00058 int nopush =0 ; 00059 int nnax=0,mmax=0 , nnay=0,mmay=0 ; 00060 float xbot,xtop , ybot,ytop ; 00061 00062 /*-- help? --*/ 00063 00064 if( argc < 2 || strcmp(argv[1],"-help") == 0 ){ 00065 printf("Usage: 1dplot [options] tsfile ...\n" 00066 "Graphs the columns of a *.1D type time series file to the screen.\n" 00067 "\n" 00068 "Options:\n" 00069 " -install = Install a new X11 colormap.\n" 00070 " -sep = Plot each column in a separate sub-graph.\n" 00071 " -one = Plot all columns together in one big graph.\n" 00072 " [default = -sep]\n" 00073 " -dx xx = Spacing between points on the x-axis is 'xx'\n" 00074 " [default = 1]\n" 00075 " -xzero zz = Initial x coordinate is 'zz' [default = 0]\n" 00076 " -nopush = Don't 'push' axes ranges outwards.\n" 00077 " -ignore nn = Skip first 'nn' rows in the input file\n" 00078 " [default = 0]\n" 00079 " -use mm = Plot 'mm' points [default = all of them]\n" 00080 " -xlabel aa = Put string 'aa' below the x-axis\n" 00081 " [default = no axis label]\n" 00082 " -ylabel aa = Put string 'aa' to the left of the y-axis\n" 00083 " [default = no axis label]\n" 00084 "\n" 00085 " -stdin = Don't read from tsfile; instead, read from\n" 00086 " stdin and plot it. You cannot combine input\n" 00087 " from stdin and tsfile(s). If you want to do\n" 00088 " so, see program 1dcat.\n" 00089 "\n" 00090 " -ps = Don't draw plot in a window; instead, write it\n" 00091 " to stdout in PostScript format.\n" 00092 " N.B.: If you view this result in 'gv', you should\n" 00093 " turn 'anti-alias' off, and switch to\n" 00094 " landscape mode.\n" 00095 "\n" 00096 " -xaxis b:t:n:m = Set the x-axis to run from value 'b' to\n" 00097 " value 't', with 'n' major divisions and\n" 00098 " 'm' minor tic marks per major division.\n" 00099 " For example:\n" 00100 " -xaxis 0:100:5:20\n" 00101 " Setting 'n' to 0 means no tic marks or labels.\n" 00102 "\n" 00103 " -yaxis b:t:n:m = Similar to above, for the y-axis. These\n" 00104 " options override the normal autoscaling\n" 00105 " of their respective axes.\n" 00106 "\n" 00107 " -ynames aa bb ... = Use the strings 'aa', 'bb', etc., as\n" 00108 " labels to the right of the graphs,\n" 00109 " corresponding to each input column.\n" 00110 " These strings CANNOT start with the\n" 00111 " '-' character.\n" 00112 "\n" 00113 " -volreg = Makes the 'ynames' be the same as the\n" 00114 " 6 labels used in plug_volreg for\n" 00115 " Roll, Pitch, Yaw, I-S, R-L, and A-P\n" 00116 " movements, in that order.\n" 00117 "\n" 00118 "You may also select a subset of columns to display using\n" 00119 "a tsfile specification like 'fred.1D[0,3,5]', indicating\n" 00120 "that columns #0, #3, and #5 will be the only ones plotted.\n" 00121 "For more details on this selection scheme, see the output\n" 00122 "of '3dcalc -help'.\n" 00123 "\n" 00124 "Example: graphing a 'dfile' output by 3dvolreg, when TR=5:\n" 00125 " 1dplot -volreg -dx 5 -xlabel Time 'dfile[1..6]'\n" 00126 "\n" 00127 "You can also input more than one tsfile, in which case the files\n" 00128 "will all be plotted. However, if the files have different column\n" 00129 "lengths, the shortest one will rule.\n" 00130 "\n" 00131 "The colors for the line graphs cycle between black, red, green, and\n" 00132 "blue. You can alter these colors by setting Unix environment\n" 00133 "variables of the form AFNI_1DPLOT_COLOR_xx -- cf. README.environment.\n" 00134 "You can alter the thickness of the lines by setting the variable\n" 00135 "AFNI_1DPLOT_THIK to a value between 0.00 and 0.05 -- the units are\n" 00136 "fractions of the page size.\n" 00137 00138 "\n" 00139 TS_HELP_STRING 00140 ) ; 00141 exit(0) ; 00142 } 00143 00144 mainENTRY("1dplot main"); machdep(); PRINT_VERSION("1dplot"); 00145 00146 /* 29 Nov 2002: scan for -ps */ 00147 00148 for( ii=1 ; ii < argc ; ii++ ) 00149 if( strcmp(argv[ii],"-ps") == 0 ){ out_ps = 1; break; } 00150 00151 /* open X11 */ 00152 00153 if( !out_ps ){ 00154 shell = XtVaAppInitialize( 00155 &app , "AFNI" , NULL , 0 , &argc , argv , NULL , NULL ) ; 00156 if( shell == NULL ) ERROR_exit("Cannot initialize X11!") ; 00157 } 00158 00159 cpt = my_getenv("TMPDIR") ; /* just for fun */ 00160 00161 /*-- scan arguments that X11 didn't eat --*/ 00162 00163 iarg = 1 ; 00164 while( iarg < argc && argv[iarg][0] == '-' ){ 00165 00166 if( strcmp(argv[iarg],"-xaxis") == 0 ){ /* 22 Jul 2003 */ 00167 sscanf(argv[++iarg],"%f:%f:%d:%d",&xbot,&xtop,&nnax,&mmax) ; 00168 if( xbot >= xtop || nnax < 0 || mmax < 1 ) 00169 ERROR_exit("String after -xaxis is illegal!\n") ; 00170 00171 plot_ts_xfix( nnax,mmax , xbot,xtop ) ; 00172 iarg++ ; continue ; 00173 } 00174 00175 if( strcmp(argv[iarg],"-yaxis") == 0 ){ /* 22 Jul 2003 */ 00176 sscanf(argv[++iarg],"%f:%f:%d:%d",&ybot,&ytop,&nnay,&mmay) ; 00177 if( ybot >= ytop || nnay < 0 || mmay < 1 ) 00178 ERROR_exit("String after -yaxis is illegal!\n") ; 00179 00180 plot_ts_yfix( nnay,mmay , ybot,ytop ) ; 00181 iarg++ ; continue ; 00182 } 00183 00184 if( strcmp(argv[iarg],"-nopush") == 0 ){ /* 12 Mar 2003 */ 00185 plot_ts_xypush( 0 , 0 ) ; 00186 iarg++ ; continue ; 00187 } 00188 00189 if( strcmp(argv[iarg],"-ps") == 0 ){ /* 29 Nov 2002: already handled above */ 00190 iarg++ ; continue ; 00191 } 00192 00193 if( strcmp(argv[iarg],"-install") == 0 ){ 00194 install++ ; iarg++ ; continue ; 00195 } 00196 00197 if( strcmp(argv[iarg],"-stdin") == 0 ){ /* 01 Aug 2001 */ 00198 use_stdin++ ; iarg++ ; continue ; 00199 } 00200 00201 if( strcmp(argv[iarg],"-") == 0 ){ /* skip */ 00202 iarg++ ; continue ; 00203 } 00204 00205 if( strcmp(argv[iarg],"-ynames") == 0 ){ 00206 iarg++ ; 00207 while( iarg < argc && argv[iarg][0] != '-' ){ 00208 ynar[nyar++] = argv[iarg++] ; 00209 } 00210 continue ; 00211 } 00212 00213 if( strcmp(argv[iarg],"-volreg") == 0 ){ 00214 int ii ; 00215 for( ii=0 ; ii < 6 ; ii++ ) ynar[nyar++] = dfile_nar[ii] ; 00216 iarg++ ; continue ; 00217 } 00218 00219 if( strcmp(argv[iarg],"-title") == 0 ){ 00220 title = argv[++iarg] ; 00221 iarg++ ; continue ; 00222 } 00223 00224 if( strcmp(argv[iarg],"-xlabel") == 0 ){ 00225 xlabel = argv[++iarg] ; 00226 iarg++ ; continue ; 00227 } 00228 00229 if( strcmp(argv[iarg],"-ylabel") == 0 ){ 00230 ylabel = argv[++iarg] ; 00231 iarg++ ; continue ; 00232 } 00233 00234 if( strcmp(argv[iarg],"-ignore") == 0 ){ 00235 ignore = strtod( argv[++iarg] , NULL ) ; 00236 if( ignore < 0 ) ERROR_exit("Illegal -ignore value!\n") ; 00237 iarg++ ; continue ; 00238 } 00239 00240 if( strcmp(argv[iarg],"-use") == 0 ){ 00241 use = strtod( argv[++iarg] , NULL ) ; 00242 if( use < 2 ) ERROR_exit("Illegal -use value!\n") ; 00243 iarg++ ; continue ; 00244 } 00245 00246 if( strcmp(argv[iarg],"-dx") == 0 ){ 00247 dx = strtod( argv[++iarg] , NULL ) ; 00248 if( dx <= 0.0 ) ERROR_exit("Illegal -dx value!\n"); 00249 iarg++ ; continue ; 00250 } 00251 00252 if( strcmp(argv[iarg],"-xzero") == 0 ){ 00253 xzero = strtod( argv[++iarg] , NULL ) ; 00254 iarg++ ; continue ; 00255 } 00256 00257 if( strcmp(argv[iarg],"-sep") == 0 ){ 00258 sep = 1 ; iarg++ ; continue ; 00259 } 00260 00261 if( strcmp(argv[iarg],"-one") == 0 ){ 00262 sep = 0 ; iarg++ ; continue ; 00263 } 00264 00265 ERROR_exit("Unknown option: %s\n",argv[iarg]) ; 00266 } 00267 00268 if( iarg >= argc && !use_stdin ) 00269 ERROR_exit("No time series file on command line!\n") ; 00270 00271 if( !out_ps ) 00272 dc = MCW_new_DC( shell , 16 , 00273 DEFAULT_NCOLOVR , INIT_colovr , INIT_labovr , 00274 1.0 , install ) ; 00275 00276 if( nyar > 0 ) yname = ynar ; 00277 00278 /*-- 01 Aug 2001: read from stdin instead of a file --*/ 00279 00280 #define NLBUF 131072 00281 #define NVMAX 10000 00282 if( use_stdin ){ 00283 char *lbuf , *cpt , *dpt ; 00284 int nval ; 00285 float *val , fff ; 00286 00287 lbuf = (char * )malloc(sizeof(char )*NLBUF) ; 00288 val = (float *)malloc(sizeof(float)*NVMAX) ; 00289 00290 /** 13 May 2005: modified to read up to NVMAX numbers from stdin, 00291 rather than the fixed size array of length 9 of old **/ 00292 00293 do{ /* read lines until 1st char is non-blank and non-# */ 00294 cpt = fgets(lbuf,NLBUF,stdin) ; 00295 if( cpt==NULL ) ERROR_exit("Can't read from stdin!\n"); 00296 for( ii=0 ; cpt[ii] != '\0' && isspace(cpt[ii]) ; ii++ ) ; /* nada */ 00297 } while( cpt[ii] == '\0' || cpt[ii] == '#' ) ; 00298 00299 nval = 0 ; cpt = lbuf ; /* read numbers from lbuf into val */ 00300 while(1){ 00301 fff = strtod(cpt,&dpt) ; if( dpt == cpt ) break ; 00302 val[nval++] = fff ; if( nval == NVMAX ) break ; 00303 cpt = dpt; if( *cpt == ',' ) cpt++; if( *cpt == '\0' ) break; 00304 } 00305 if( nval < 1 ) 00306 ERROR_exit("Can't read numbers from stdin!\n" 00307 " First line: '%-.30s'\n" , lbuf) ; 00308 00309 nx = nval ; ny = 1 ; 00310 far = (float *) malloc(sizeof(float)*nx) ; 00311 memcpy(far,val,sizeof(float)*nx) ; 00312 while(1){ /* read from stdin */ 00313 cpt = fgets(lbuf,NLBUF,stdin) ; 00314 if( cpt == NULL ) break ; /* done */ 00315 for( ii=0 ; cpt[ii] != '\0' && isspace(cpt[ii]) ; ii++ ) ; /* nada */ 00316 if( cpt[ii] == '\0' || cpt[ii] == '#' ) continue ; /* skip */ 00317 memset(val,0,sizeof(float)*nx) ; 00318 00319 nval = 0 ; cpt = lbuf ; /* read numbers from lbuf into val */ 00320 while(1){ 00321 fff = strtod(cpt,&dpt) ; if( dpt == cpt ) break ; 00322 val[nval++] = fff ; if( nval == nx ) break ; 00323 cpt = dpt; if( *cpt == ',' ) cpt++; if( *cpt == '\0' ) break; 00324 } 00325 far = (float *) realloc( far , sizeof(float)*(ny+1)*nx ) ; 00326 memcpy(far+ny*nx,val,sizeof(float)*nx) ; ny++ ; 00327 } 00328 if( ny < 2 && nx < 2 ) 00329 ERROR_exit("Can't read at least 2 lines from stdin\n"); 00330 00331 flim = mri_new_vol_empty( nx,ny,1 , MRI_float ) ; 00332 mri_fix_data_pointer( far , flim ) ; 00333 if( ny > 1 ){ /* more than one row ==> transpose (the usual case) */ 00334 inim = mri_transpose(flim) ; mri_free(flim) ; 00335 } else { /* only 1 row ==> am OK this way [13 May 2005] */ 00336 inim = flim ; 00337 } 00338 free((void *)val); free((void *)lbuf); 00339 00340 } else { /*-- old code: read from a file --*/ 00341 /*-- 05 Mar 2003: or more than 1 file --*/ 00342 00343 if( iarg >= argc ) 00344 ERROR_exit("No input files on command line?!\n"); 00345 00346 00347 if( iarg == argc-1 ){ /* only 1 input file */ 00348 inim = mri_read_1D( argv[iarg] ) ; 00349 if( inim == NULL ) 00350 ERROR_exit("Can't read input file %s\n",argv[iarg]) ; 00351 00352 } else { /* multiple inputs [05 Mar 2003] */ 00353 MRI_IMARR *imar ; /* read them & glue into 1 image */ 00354 int iarg_first=iarg, nysum=0, ii,jj,nx ; 00355 float *far,*iar ; 00356 00357 INIT_IMARR(imar) ; 00358 for( ; iarg < argc ; iarg++ ){ 00359 inim = mri_read_1D( argv[iarg] ) ; 00360 if( inim == NULL ) 00361 ERROR_exit("Can't read input file %s\n",argv[iarg]) ; 00362 00363 if( iarg == iarg_first || inim->nx < nx ) nx = inim->nx ; 00364 ADDTO_IMARR(imar,inim) ; nysum += inim->ny ; 00365 } 00366 flim = mri_new( nx,nysum, MRI_float ); far = MRI_FLOAT_PTR(flim); 00367 for( nysum=ii=0 ; ii < imar->num ; ii++ ){ 00368 inim = IMARR_SUBIM(imar,ii) ; iar = MRI_FLOAT_PTR(inim) ; 00369 for( jj=0 ; jj < inim->ny ; jj++,nysum++ ){ 00370 memcpy( far + nx*nysum , iar + jj*inim->nx , sizeof(float)*nx ) ; 00371 } 00372 } 00373 DESTROY_IMARR(imar) ; inim = flim ; 00374 } 00375 00376 if( inim->nx == 1 && inim->ny > 1 ){ /* 13 May 2005 */ 00377 flim = mri_transpose(inim); mri_free(inim); inim = flim; 00378 } 00379 00380 } /* end of file input */ 00381 00382 flim = inim ; 00383 far = MRI_FLOAT_PTR(flim) ; 00384 nx = flim->nx ; 00385 ny = flim->ny ; 00386 00387 if( nx < 2 ) 00388 ERROR_exit("1dplot can't plot curves only 1 point long!\n") ; 00389 00390 /* make x axis */ 00391 00392 xar = (float *) malloc( sizeof(float) * nx ) ; 00393 for( ii=0 ; ii < nx ; ii++ ) xar[ii] = xzero + dx*ii ; 00394 00395 /* select data to plot */ 00396 00397 nts = ny ; 00398 yar = (float **) malloc(sizeof(float *)*nts) ; 00399 for( ii=0 ; ii < ny ; ii++ ) yar[ii] = far + (ii*nx+ignore) ; 00400 00401 nx = nx - ignore ; /* cut off the ignored points */ 00402 00403 if( use > 1 && nx > use ) nx = use ; /* 29 Nov 1999 */ 00404 00405 /* start X11 */ 00406 00407 if( !out_ps ){ 00408 (void) XtAppAddTimeOut( app , 123 , startup_timeout_CB , NULL ) ; 00409 XtAppMainLoop(app) ; /* never returns */ 00410 } 00411 00412 /* 29 Nov 2002: if here, output PostScript to stdout */ 00413 00414 { MEM_plotdata *mp ; 00415 int ymask = (sep) ? TSP_SEPARATE_YBOX : 0 ; 00416 00417 mp = plot_ts_mem( nx,xar , nts,ymask,yar , 00418 xlabel , ylabel , title , yname ) ; 00419 00420 memplot_to_postscript( "-" , mp ) ; 00421 } 00422 00423 exit(0) ; 00424 } |
|
Definition at line 430 of file 1dplot.c. References client_data, MCW_DC::display, killfunc(), nts, nx, plot_ts_lab(), title, xar, xlabel, yar, ylabel, and yname. Referenced by main().
|
Variable Documentation
|
|
|
Initial value: { "Roll [\\degree]" , "Pitch [\\degree]" , "Yaw [\\degree]" , "\\Delta I-S [mm]" , "\\Delta R-L [mm]" , "\\Delta A-P [mm]" } Definition at line 35 of file 1dplot.c. Referenced by main(). |
|
Initial value: { "#ffff00" , "#ffcc00" , "#ff9900" , "#ff6900" , "#ff4400" , "#ff0000" , "#0000ff" , "#0044ff" , "#0069ff" , "#0099ff" , "#00ccff" , "#00ffff" , "green" , "limegreen" , "violet" , "hotpink" , "white" , "#dddddd" , "#bbbbbb" , "black" } Definition at line 16 of file 1dplot.c. Referenced by main(). |
|
Initial value: { "yellow" , "yell-oran" , "oran-yell" , "orange" , "oran-red" , "red" , "dk-blue", "blue" , "lt-blue1" , "lt-blue2" , "blue-cyan", "cyan" , "green" , "limegreen" , "violet" , "hotpink" , "white" , "gry-dd" , "gry-bb" , "black" } Definition at line 23 of file 1dplot.c. Referenced by main(). |
|
Definition at line 30 of file 1dplot.c. Referenced by main(), and startup_timeout_CB(). |
|
Definition at line 30 of file 1dplot.c. Referenced by main(), and startup_timeout_CB(). |
|
Definition at line 39 of file 1dplot.c. Referenced by main(). |
|
Definition at line 30 of file 1dplot.c. Referenced by main(). |
|
Definition at line 33 of file 1dplot.c. Referenced by main(), and startup_timeout_CB(). |
|
Definition at line 31 of file 1dplot.c. Referenced by main(), and startup_timeout_CB(). |
|
Definition at line 33 of file 1dplot.c. Referenced by main(), and startup_timeout_CB(). |
|
Definition at line 31 of file 1dplot.c. Referenced by main(), and startup_timeout_CB(). |
|
Definition at line 33 of file 1dplot.c. Referenced by main(), and startup_timeout_CB(). |
|
Definition at line 41 of file 1dplot.c. Referenced by main(), and startup_timeout_CB(). |
|
Definition at line 40 of file 1dplot.c. Referenced by main(). |