static void error_report (hilbert_data_V2* ud, int ncall ) { int xpos,ypos,zpos; indexTOxyz (ud, ncall, &xpos , &ypos , &zpos); switch (ud->errcode) { case ERROR_NOTHINGTODO: fprintf (ud->outlogfile,"Nothing to do hilbertdelay_V2 call "); break; case ERROR_LARGENSEG: fprintf (ud->outlogfile,"Number of segments Too Large "); break; case ERROR_LONGDELAY: fprintf (ud->outlogfile,"Could not find zero crossing before maxdel limit "); break; case ERROR_SERIESLENGTH: fprintf (ud->outlogfile,"Vectors have different length "); break; case ERROR_NULLTIMESERIES: fprintf (ud->outlogfile,"Null time series vector "); break; default: fprintf (ud->outlogfile,"De Fault, De Fault (%d), the two sweetest words in the english langage ! ",ud->errcode); break; } fprintf (ud->outlogfile,"%d\t%d\t%d\t%d\t\n", ncall , xpos , ypos , zpos ); return; }
static void error_report (extract_data* ud, int ncall ) { int xpos,ypos,zpos; indexTOxyz (ud, ncall, &xpos , &ypos , &zpos); switch (ud->errcode) { default: fprintf (ud->outlogfile,"De Fault, De Fault (%d), the two sweetest words in the english langage ! ",ud->errcode); break; } fprintf (ud->outlogfile,"%d\t%d\t%d\t%d\t\n", ncall , xpos , ypos , zpos ); return; }
static void writets (extract_data * ud,float * ts, int ncall) { int i,xpos,ypos,zpos; switch (ud->format) { case (0): indexTOxyz (ud,ncall,&xpos , &ypos , &zpos); fprintf (ud->outwritets, "%d\t%d\t%d\t%d\t",ncall,xpos, ypos,zpos); break; case (1): break; default: break; } for (i=0;i<ud->ln;++i) { fprintf (ud->outwritets, "%f\t",ts[i]); } fprintf (ud->outwritets,"\n"); }
static void EXTRACT_tsfunc( double T0 , double TR , int npts , float ts[] , double ts_mean , double ts_slope , void * udp , float * dumb) { static int nvox , ncall ; extract_data uda,*ud; float xcor=0.0 , tmp=0.0 , tmp2 = 0.0 , dtx = 0.0 ,\ slp = 0.0 , vts = 0.0 , vrvec = 0.0 , rxcorCoef = 0.0; int i , is_ts_null , status , opt , actv , zpos , ypos , xpos , hit; ud = &uda; ud = (extract_data *) udp; /** is this a "notification"? **/ if( dumb == NULL ){ if( npts > 0 ){ /* the "start notification" */ PLUTO_popup_meter( global_plint ) ; /* progress meter */ nvox = npts ; /* keep track of */ ncall = 0 ; /* number of calls */ } else { /* the "end notification" */ PLUTO_set_meter( global_plint , 100 ) ; /* set meter to 100% */ } return ; } hit = 0; ud->ln = npts; if (ud->iloc != -1) /* for each ncall, find out if this index is wanted*/ { *dumb = ud->fail; for (i=0;i<ud->nrows;++i) { if (ud->indvect[i] == (float)ncall) { hit = 1; *dumb = ud->pass; writets (ud,ts,ncall); i = ud->nrows; } } } else { *dumb = ud->fail; indexTOxyz (ud, ncall, &xpos , &ypos , &zpos); for (i=0;i<ud->nrows;++i) { if (ud->xyzvect[i].x == (float)xpos) { if (ud->xyzvect[i].y == (float)ypos) { if (ud->xyzvect[i].z == (float)zpos) { hit = 1; *dumb = ud->pass; writets (ud,ts,ncall); i = ud->nrows; } } } } } /* the output brick generated here is practically useless, it has 1 at the voxels whos time courses were used and 0 where nothing was extracted */ if (ud->errcode == 0) /* if there are no errors, proceed */ {/* */ }/* ud->errcode == 0 outer loop */ /** set the progress meter to the % of completion **/ ncall++ ; PLUTO_set_meter( global_plint , (100*ncall)/nvox ) ; ud->errcode = 0; /* Rest error to nothing */ return ; }
static void DELAY_tsfuncV2( double T0 , double TR , int npts , float ts[] , double ts_mean , double ts_slope , void * udp , int nbrick , float * buckar) { static int nvox , ncall ; hilbert_data_V2 uda,*ud; float del, xcorCoef, buckara[4]; float xcor=0.0 , tmp=0.0 , tmp2 = 0.0 , dtx = 0.0 ,\ delu = 0.0 , slp = 0.0 , vts = 0.0 , vrvec = 0.0 ; int i , is_ts_null , status , opt , actv , zpos , ypos , xpos ; ud = &uda; ud = (hilbert_data_V2 *) udp; /** is this a "notification"? **/ if( buckar == NULL ){ if( npts > 0 ){ /* the "start notification" */ PLUTO_popup_meter( global_plint ) ; /* progress meter */ nvox = npts ; /* keep track of */ ncall = 0 ; /* number of calls */ } else { /* the "end notification" */ opt = 0; /* cleanup in hdelay */ #if 0 status = hilbertdelay_V2 (ts,ud->rvec,ud->ln,ud->Nseg,ud->Pover,opt,ud->dtrnd,dtx,ud->biasrem,&tmp,&slp,&xcor,&tmp2,&vts,&vrvec); /* cleanup time */ #else hilbertdelay_V2reset(); #endif PLUTO_set_meter( global_plint , 100 ) ; /* set meter to 100% */ } return ; } /* In the old version, I had to check for a match between the lengths of the reference time series and FMRI time series This is now done before the function is called. */ if (is_vect_null (ts,npts) == 1) /* check for null vectors */ { ud->errcode = ERROR_NULLTIMESERIES; error_report (ud , ncall ); /* report the error */ del = 0.0; /* Set all the variables to Null and don't set xcorCoef to an impossible value*/ xcorCoef = 0.0; /* because the data might still be OK */ xcor = 0.0; } if (ud->errcode == 0) /* if there are no errors, proceed */ {/* ud->errcode == 0 outer loop */ opt = 1; /* activate hdelay */ /* transform dtx from seconds to sampling units and correct for the number of points ignored*/ if (ud->Dsamp == YUP) dtx = (float) (T0 / TR) - ud->ignore; else dtx = 0.0; ud->errcode = hilbertdelay_V2 (ts,ud->rvec,ud->ln,ud->Nseg,ud->Pover,opt,ud->dtrnd,dtx,ud->biasrem,&delu,&slp,&xcor,&xcorCoef,&vts,&vrvec); /* cleanup time */ if (ud->errcode == 0) /* If there are no errors, proceed */ { /*ud->errcode == 0 inner loop */ hunwrap (delu, (float)(1/TR), ud->T, slp, ud->wrp, ud->unt, 0, 1.0, &del ); actv = 1; /* assume voxel is active */ if (xcorCoef < ud->co) actv = 0; /* determine if voxel is activated using xcorCoef */ if ((actv == 1) && (ud->out == YUP)) /* if voxel is truly activated, write results to file without modifying return value */ { indexTOxyz ( ud , ncall, &xpos , &ypos , &zpos); fprintf (ud->outwrite,"%d\t%d\t%d\t%d\t%f\t%f\t%f\t%f\t%f\n", ncall , xpos , ypos , zpos , delu , del , xcor , xcorCoef , vts); if (ud->outts == YUP) { writets (ud,ts); } } }/*ud->errcode == 0 inner loop */ else if (ud->errcode == ERROR_LONGDELAY) { error_report ( ud , ncall); del = 0.0; /* Set all the variables to Null and don't set xcorCoef to an impossible value*/ xcorCoef = 0.0; /* because the data might still be OK */ xcor = 0.0; } else if (ud->errcode != 0) { error_report ( ud , ncall); del = 0.0; /* Set all the variables to Null and set xcorCoef to an impossible value*/ xcorCoef = NOWAYXCORCOEF; xcor = 0.0; } }/* ud->errcode == 0 outer loop */ /* Now fill up the bucket array */ buckar[DELINDX] = del; buckar[COVINDX] = xcor; buckar[COFINDX] = xcorCoef; buckar[VARINDX] = vts; /** set the progress meter to the % of completion **/ ncall++ ; PLUTO_set_meter( global_plint , (100*ncall)/nvox ) ; ud->errcode = 0; /* Rest error to nothing */ return ; }