Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

qplot.c

Go to the documentation of this file.
00001 /*****************************************************************************
00002    Major portions of this software are copyrighted by the Medical College
00003    of Wisconsin, 1994-2000, and are released under the Gnu General Public
00004    License, Version 2.  See the file README.Copyright for details.
00005 ******************************************************************************/
00006 
00007 #include "mrilib.h"
00008 #include "coxplot.h"
00009 #include "display.h"
00010 
00011 /*---- quickie program to look at some graphs - RWCox - Feb 1999 ----*/
00012 
00013 #define DEFAULT_NCOLOVR 20
00014 
00015 static char * INIT_colovr[DEFAULT_NCOLOVR] = {
00016    "#ffff00" , "#ffcc00"   , "#ff9900"  , "#ff6900" , "#ff4400" , "#ff0000" ,
00017    "#0000ff" , "#0044ff"   , "#0069ff"  , "#0099ff" , "#00ccff" , "#00ffff" ,
00018    "green"   , "limegreen" , "violet"   , "hotpink" ,
00019    "white"   , "#dddddd"   , "#bbbbbb"  , "black"
00020 } ;
00021 
00022 static char * INIT_labovr[DEFAULT_NCOLOVR] = {
00023    "yellow" , "yell-oran" , "oran-yell" , "orange"   , "oran-red" , "red"   ,
00024    "dk-blue", "blue"      , "lt-blue1"  , "lt-blue2" , "blue-cyan", "cyan"  ,
00025    "green"  , "limegreen" , "violet"    , "hotpink"  ,
00026    "white"  , "gry-dd"    , "gry-bb"    , "black"
00027 } ;
00028 
00029 static int nx,nts , sep=1 ;
00030 static float ** yar , * xar ;
00031 static MCW_DC * dc ;
00032 static char * title = NULL , * xlabel = NULL , * ylabel = NULL ;
00033 
00034 static char * dfile_nar[6] = {
00035          "Roll [\\degree]" , "Pitch [\\degree]" , "Yaw [\\degree]"    ,
00036          "\\Delta I-S [mm]" , "\\Delta R-L [mm]" , "\\Delta A-P [mm]"  } ;
00037 
00038 static int    nyar = 0 ;
00039 static char * ynar[128] ;
00040 static char ** yname = NULL ;
00041 
00042 void startup_timeout_CB( XtPointer client_data , XtIntervalId * id ) ;
00043 void scroll_timeout_CB ( XtPointer client_data , XtIntervalId * id ) ;
00044 
00045 XtAppContext app ;
00046 
00047 int main( int argc , char * argv[] )
00048 {
00049    int iarg , ii , ny , ignore=0 , use=0 , install=0 ;
00050    float dx=1.0 ;
00051    char * tsfile , * cpt ;
00052    char dname[THD_MAX_NAME] , subv[THD_MAX_NAME] ;
00053    MRI_IMAGE * inim , * flim ;
00054    float * far ;
00055    Widget shell ;
00056    int use_stdin=0 ; /* 01 Aug 2001 */
00057 
00058    /*-- help? --*/
00059 
00060    if( argc < 2 || strcmp(argv[1],"-help") == 0 ){
00061      printf("Usage: 1dplot [options] tsfile\n"
00062             "Graphs the columns of a *.1D type time series file to the screen.\n"
00063             "\n"
00064             "Options:\n"
00065             " -install   = Install a new X11 colormap.\n"
00066             " -sep       = Plot each column in a separate sub-graph.\n"
00067             " -one       = Plot all columns together in one big graph.\n"
00068             "                [default = -sep]\n"
00069             " -dx xx     = Spacing between points on the x-axis is 'xx'\n"
00070             "                [default = 1]\n"
00071             " -ignore nn = Skip first 'nn' rows in the input file\n"
00072             "                [default = 0]\n"
00073             " -use mm    = Plot 'mm' points [default = all of them]\n"
00074             " -xlabel aa = Put string 'aa' below the x-axis\n"
00075             "                [default = no axis label]\n"
00076             " -ylabel aa = Put string 'aa' to the left of the y-axis\n"
00077             "                [default = no axis label]\n"
00078             "\n"
00079             " -stdin     = Don't read from tsfile; instead, read from\n"
00080             "              stdin and plot it.\n"
00081             "\n"
00082             " -ynames aa bb ... = Use the strings 'aa', 'bb', etc., as\n"
00083             "                     labels to the right of the graphs,\n"
00084             "                     corresponding to each input column.\n"
00085             "                     These strings CANNOT start with the\n"
00086             "                     '-' character.\n"
00087             "\n"
00088             " -volreg           = Makes the 'ynames' be the same as the\n"
00089             "                     6 labels used in plug_volreg for\n"
00090             "                     Roll, Pitch, Yaw, I-S, R-L, and A-P\n"
00091             "                     movements, in that order.\n"
00092             "\n"
00093             "You may also select a subset of columns to display using\n"
00094             "a tsfile specification like 'fred.1D[0,3,5]', indicating\n"
00095             "that columns #0, #3, and #5 will be the only ones plotted.\n"
00096             "For more details on this selection scheme, see the output\n"
00097             "of '3dcalc -help'.\n"
00098             "\n"
00099             "Example: graphing a 'dfile' output by 3dvolreg, when TR=5:\n"
00100             "   1dplot -volreg -dx 5 -xlabel Time 'dfile[1..6]'\n"
00101             "\n"
00102            ) ;
00103       exit(0) ;
00104    }
00105 
00106    mainENTRY("1dplot main"); machdep();
00107 
00108    /* open X11 */
00109 
00110    shell = XtVaAppInitialize(
00111               &app , "AFNI" , NULL , 0 , &argc , argv , NULL , NULL ) ;
00112    if( shell == NULL ){
00113       fprintf(stderr,"** Cannot initialize X11!\n") ; exit(1) ;
00114    }
00115 
00116    cpt = my_getenv("TMPDIR") ;  /* just for fun */
00117 
00118    /*-- scan arguments that X11 didn't eat --*/
00119 
00120    iarg = 1 ;
00121    while( iarg < argc && argv[iarg][0] == '-' ){
00122 
00123      if( strcmp(argv[iarg],"-install") == 0 ){
00124         install++ ; iarg++ ; continue ;
00125      }
00126 
00127      if( strcmp(argv[iarg],"-stdin") == 0 ){  /* 01 Aug 2001 */
00128         use_stdin++ ; iarg++ ; continue ;
00129      }
00130 
00131      if( strcmp(argv[iarg],"-") == 0 ){  /* skip */
00132         iarg++ ; continue ;
00133      }
00134 
00135      if( strcmp(argv[iarg],"-ynames") == 0 ){
00136         iarg++ ;
00137         while( iarg < argc && argv[iarg][0] != '-' ){
00138            ynar[nyar++] = argv[iarg++] ;
00139         }
00140         continue ;
00141      }
00142 
00143      if( strcmp(argv[iarg],"-volreg") == 0 ){
00144         int ii ;
00145         for( ii=0 ; ii < 6 ; ii++ ) ynar[nyar++] = dfile_nar[ii] ;
00146         iarg++ ; continue ;
00147      }
00148 
00149      if( strcmp(argv[iarg],"-title") == 0 ){
00150         title = argv[++iarg] ;
00151         iarg++ ; continue ;
00152      }
00153 
00154      if( strcmp(argv[iarg],"-xlabel") == 0 ){
00155         xlabel = argv[++iarg] ;
00156         iarg++ ; continue ;
00157      }
00158 
00159      if( strcmp(argv[iarg],"-ylabel") == 0 ){
00160         ylabel = argv[++iarg] ;
00161         iarg++ ; continue ;
00162      }
00163 
00164      if( strcmp(argv[iarg],"-ignore") == 0 ){
00165         ignore = strtod( argv[++iarg] , NULL ) ;
00166         if( ignore < 0 ){fprintf(stderr,"** Illegal -ignore value!\n");exit(1);}
00167         iarg++ ; continue ;
00168      }
00169 
00170      if( strcmp(argv[iarg],"-use") == 0 ){
00171         use = strtod( argv[++iarg] , NULL ) ;
00172         if( use < 2 ){fprintf(stderr,"** Illegal -use value!\n");exit(1);}
00173         iarg++ ; continue ;
00174      }
00175 
00176      if( strcmp(argv[iarg],"-dx") == 0 ){
00177         dx = strtod( argv[++iarg] , NULL ) ;
00178         if( dx <= 0.0 ){fprintf(stderr,"** Illegal -dx value!\n");exit(1);}
00179         iarg++ ; continue ;
00180      }
00181 
00182      if( strcmp(argv[iarg],"-sep") == 0 ){
00183         sep = 1 ; iarg++ ; continue ;
00184      }
00185 
00186      if( strcmp(argv[iarg],"-one") == 0 ){
00187         sep = 0 ; iarg++ ; continue ;
00188      }
00189 
00190      fprintf(stderr,"** Unknown option: %s\n",argv[iarg]) ; exit(1) ;
00191    }
00192 
00193    if( iarg >= argc && !use_stdin ){
00194       fprintf(stderr,"** No tsfile on command line!\n") ; exit(1) ;
00195    }
00196 
00197    dc = MCW_new_DC( shell , 16 ,
00198                     DEFAULT_NCOLOVR , INIT_colovr , INIT_labovr ,
00199                     1.0 , install ) ;
00200 
00201    if( nyar > 0 ) yname = ynar ;
00202 
00203    /*-- 01 Aug 2001: read from stdin instead of a file --*/
00204 
00205    if( use_stdin ){
00206      char lbuf[2560] , *cpt ;
00207      int nval ;
00208      float val[9] ;
00209 
00210      cpt = fgets(lbuf,2560,stdin) ;
00211      if( cpt == NULL ){
00212         fprintf(stderr,"*** Can't read from stdin!\n"); exit(1);
00213      }
00214      nval = sscanf(lbuf,"%f%f%f%f%f%f%f%f%f",
00215                    val+0,val+1,val+2,val+3,val+4,val+5,val+6,val+7,val+8) ;
00216      if( nval < 1 ){
00217         fprintf(stderr,"*** Can't read numbers from stdin!\n"); exit(1);
00218      }
00219 
00220      subv[0] = '\0' ; nx = nval ; ny = 1 ;
00221      far = (float *) malloc(sizeof(float)*nval) ;
00222      memcpy(far,val,sizeof(float)*nx) ;
00223      while(1){  /* read from stdin */
00224         cpt = fgets(lbuf,2560,stdin) ;
00225         if( cpt == NULL ) break ;
00226         nval = sscanf(lbuf,"%f%f%f%f%f%f%f%f%f",
00227                       val+0,val+1,val+2,val+3,val+4,val+5,val+6,val+7,val+8) ;
00228         if( nval < 1 ) break ;
00229         far = (float *) realloc( far , sizeof(float)*(ny+1)*nx ) ;
00230         memcpy(far+ny*nx,val,sizeof(float)*nx) ;
00231         ny++ ;
00232      }
00233      if( ny < 2 ){
00234         fprintf(stderr,"** Can't read enough data from stdin\n"); exit(1);
00235      }
00236      inim = mri_new_vol_empty( nx,ny,1 , MRI_float ) ;
00237      mri_fix_data_pointer( far , inim ) ;
00238 
00239    } else {  /*-- old code: read from a file --*/
00240 
00241      /* check input filename for index strings */
00242 
00243      tsfile = argv[iarg] ;
00244      cpt    = strstr(tsfile,"[") ;
00245 
00246      if( cpt == NULL ){
00247         strcpy( dname , tsfile ) ;
00248         subv[0] = '\0' ;
00249      } else if( cpt == tsfile ){
00250         fprintf(stderr,"** Illegal filename on command line!\n");exit(1);
00251      } else {
00252         ii = cpt - tsfile ;
00253         memcpy(dname,tsfile,ii) ; dname[ii] = '\0' ;
00254         strcpy(subv,cpt) ;
00255      }
00256 
00257      /* read input file */
00258 
00259      inim = mri_read_ascii( dname ) ;
00260      if( inim == NULL ){
00261         fprintf(stderr,"** Can't read input file %s\n",dname) ;
00262         exit(1);
00263      }
00264    } /* end of file input */
00265 
00266    if( inim->kind != MRI_float ){  /* should not happen */
00267       flim = mri_to_float(inim) ; mri_free(inim) ; inim = flim ;
00268    }
00269    flim = mri_transpose(inim) ; mri_free(inim) ;
00270    far  = MRI_FLOAT_PTR(flim) ;
00271    nx   = flim->nx ;
00272    ny   = flim->ny ;
00273 
00274    /* make x axis */
00275 
00276    xar = (float *) malloc( sizeof(float) * nx ) ;
00277    for( ii=0 ; ii < nx ; ii++ ) xar[ii] = dx * ii ;
00278 
00279    /* select data to plot */
00280 
00281    if( subv[0] == '\0' ){  /* no sub-list */
00282 
00283       nts = ny ;
00284       yar = (float **) malloc(sizeof(float *)*nts) ;
00285       for( ii=0 ; ii < ny ; ii++ ) yar[ii] = far + (ii*nx+ignore) ;
00286 
00287    } else {                /* process sub-list */
00288       int  * ivlist , * ivl ;
00289 
00290       ivlist = MCW_get_intlist( ny , subv ) ;
00291       if( ivlist == NULL || ivlist[0] < 1 ){
00292          fprintf(stderr,"** Illegal column selectors on command line!\n");
00293          exit(1);
00294       }
00295       nts = ivlist[0] ;
00296       ivl = ivlist + 1 ;
00297       for( ii=0 ; ii < nts ; ii++ ){
00298          if( ivl[ii] < 0 || ivl[ii] >= ny ){
00299             fprintf(stderr,"** Illegal selector on command line!\n");
00300             exit(1) ;
00301          }
00302       }
00303       yar = (float **) malloc(sizeof(float *)*nts) ;
00304       for( ii=0 ; ii < nts ; ii++ ) yar[ii] = far + (ivl[ii]*nx+ignore) ;
00305       free(ivlist) ;
00306    }
00307 
00308    nx = nx - ignore ;  /* cut off the ignored points */
00309 
00310    if( use > 1 && nx > use ) nx = use ;  /* 29 Nov 1999 */
00311 
00312    /* start X11 */
00313 
00314    (void) XtAppAddTimeOut( app , 123 , startup_timeout_CB , NULL ) ;
00315 
00316    XtAppMainLoop(app) ;
00317    exit(0) ;
00318 }
00319 
00320 /*-----------------------------------------------------------------*/
00321 void killfunc(void * fred){ exit(0) ; }
00322 /*-----------------------------------------------------------------*/
00323 
00324 MEM_topshell_data * plot_ts_qqq( Display * dpy ,
00325                   int nx , float * x , int ny , float ** y ,
00326                   char * lab_xxx , char * lab_yyy , char * lab_top ,
00327                   char ** nam_yyy , void_func * killfunc )
00328 {
00329    MEM_plotdata * mp ;
00330    MEM_topshell_data * mpmp=NULL ;
00331    int ymask = 0 ;
00332 
00333    if( dpy == NULL ) return ;
00334 
00335    if( ny < 0 ){ ymask = TSP_SEPARATE_YBOX ; ny = -ny ; }
00336 
00337    mp = plot_ts_mem( nx,x , ny,ymask,y , lab_xxx , lab_yyy , lab_top , nam_yyy ) ;
00338    if( mp != NULL )
00339     mpmp = memplot_to_topshell( dpy , mp , killfunc ) ;
00340 
00341    return mpmp ;
00342 }
00343 
00344 MEM_topshell_data * mp=NULL ;
00345 
00346 void startup_timeout_CB( XtPointer client_data , XtIntervalId * id )
00347 {
00348    int ng ;
00349 
00350    /* make graph */
00351 
00352    ng = (sep) ? (-nts) : (nts) ;
00353    
00354    mp = plot_ts_qqq( dc->display , nx , xar , ng , yar ,
00355                      xlabel , ylabel , title , yname , killfunc ) ;
00356 
00357    (void) XtAppAddTimeOut( app , 16 , scroll_timeout_CB , NULL ) ;
00358    return ;
00359 }
00360 
00361 void scroll_timeout_CB( XtPointer client_data , XtIntervalId * id )
00362 {
00363    XWindowAttributes xwat ;
00364 
00365    XGetWindowAttributes( XtDisplay(mp->drawing),
00366                          XtWindow(mp->drawing) , &xwat ) ;
00367 
00368    XCopyArea( XtDisplay(mp->drawing) ,
00369               XtWindow(mp->drawing) , XtWindow(mp->drawing) ,
00370               DefaultGC(XtDisplay(mp->drawing),0) ,
00371               1 , 0 , xwat.width-1 , xwat.height , 0 , 0 ) ;
00372 
00373    XClearArea( XtDisplay(mp->drawing) ,
00374                XtWindow(mp->drawing) ,
00375                xwat.width-1 , 0 , 1 , xwat.height , FALSE ) ;
00376 
00377    (void) XtAppAddTimeOut( app , 16 , scroll_timeout_CB , NULL ) ;
00378    return ;
00379 }
 

Powered by Plone

This site conforms to the following standards: