Skip to content

Commit

Permalink
More gcc8 updates (freesurfer#847)
Browse files Browse the repository at this point in the history
  • Loading branch information
freesurfer-rge authored Mar 22, 2021
1 parent 979d9bb commit d4357dd
Show file tree
Hide file tree
Showing 19 changed files with 453 additions and 390 deletions.
158 changes: 41 additions & 117 deletions hiam_make_surfaces/hiam_make_surfaces.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ int main(int argc, char *argv[]) ;

int
main(int argc, char *argv[]) {
char data_dir[400], *cp, ifname[200], ofname[200], labelfilename[200], surftype[10];
char data_dir[400], *cp, ifname[STRLEN], ofname[STRLEN], labelfilename[STRLEN], surftype[10];
int nargs, s, counter=0, i, spikes=1;
float ratio = 1, energy_new = 0, energy_old = 0 ;
// float weight_quadcur = 0.2, weight_label = 0.5, weight_repulse = 0.0,
Expand Down Expand Up @@ -151,7 +151,10 @@ main(int argc, char *argv[]) {
strcpy(surftype, argv[2]);

//***** Extract volume for each label *****//
sprintf(labelfilename,"%s/%s/%s",data_dir,argv[1],labelvolume);
int req = snprintf(labelfilename,STRLEN,"%s/%s/%s",data_dir,argv[1],labelvolume);
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
fprintf(stderr, "reading segmentation volume from %s...\n", labelfilename) ;
mri_orig = MRIread(labelfilename) ;
extractlabelvolume(mri_label, mri_orig);
Expand All @@ -169,7 +172,10 @@ main(int argc, char *argv[]) {
MRIfree(&mri_e);
/******************************/
//******** read original tesselation ********//
sprintf(ifname,"%s/%s/surf/%s.%s",data_dir,argv[1],argv[2],orig_name);
req = snprintf(ifname,STRLEN,"%s/%s/surf/%s.%s",data_dir,argv[1],argv[2],orig_name);
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
fprintf(stderr, "reading original surface position from %s...\n", ifname) ;
mris = MRISread(ifname) ;

Expand Down Expand Up @@ -299,7 +305,12 @@ main(int argc, char *argv[]) {

if (write_iterations > 0) {
if (((++counter) % write_iterations) == 0) {
sprintf(ofname, "%s/%s/surf/movie/%s.firstrefined%3.3d", data_dir, argv[1], argv[2],counter/write_iterations);
int req = snprintf(ofname, STRLEN,
"%s/%s/surf/movie/%s.firstrefined%3.3d",
data_dir, argv[1], argv[2],counter/write_iterations);
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
MRISwrite(mris, ofname) ;
}
}
Expand Down Expand Up @@ -330,7 +341,12 @@ main(int argc, char *argv[]) {
spikes = FindSpikes(mris,i);
if (write_iterations > 0) {
if (((++counter) % write_iterations) == 0) {
sprintf(ofname, "%s/%s/surf/movie/%s.refined%3.3d", data_dir, argv[1], argv[2],counter/write_iterations);
int req = snprintf(ofname, STRLEN,
"%s/%s/surf/movie/%s.refined%3.3d",
data_dir, argv[1], argv[2],counter/write_iterations);
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
fprintf(stderr, "writing out reconstructed surface after %d iteration to %3.3d \n", i, counter/write_iterations );
MRISwrite(mris, ofname) ;
//measure the volume this new surface encloses and compare with the original//
Expand All @@ -357,7 +373,12 @@ main(int argc, char *argv[]) {
mrisClearGradient(mris);
if (write_iterations > 0) {
if (((++counter) % write_iterations) == 0) {
sprintf(ofname, "%s/%s/surf/movie/%s.refined%3.3d", data_dir, argv[1], argv[2],counter/write_iterations);
int req = snprintf(ofname, STRLEN,
"%s/%s/surf/movie/%s.refined%3.3d",
data_dir, argv[1], argv[2],counter/write_iterations);
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
MRISwrite(mris, ofname) ;
}
}
Expand All @@ -369,15 +390,26 @@ main(int argc, char *argv[]) {
//write out final smoothing result//
if (write_iterations > 0) {
counter = floor(counter/write_iterations)+1 ;
sprintf(ofname, "%s/%s/surf/movie/%s.refined%3.3d", data_dir, argv[1], argv[2],counter);
int req = snprintf(ofname, STRLEN,
"%s/%s/surf/movie/%s.refined%3.3d", data_dir, argv[1], argv[2],counter);
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
MRISwrite(mris, ofname) ;
}

sprintf(ofname, "%s/%s/surf/%s.%s", data_dir, argv[1], argv[2],suffix) ;
req = snprintf(ofname, STRLEN,
"%s/%s/surf/%s.%s", data_dir, argv[1], argv[2],suffix) ;
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
fprintf (stderr,"writing refined surface to %s\n", ofname);
MRISwrite(mris, ofname) ;
MRISuseMeanCurvature(mris);
sprintf(ofname, "%s/%s/surf/%s.%s.curv", data_dir, argv[1], argv[2],suffix) ;
req = snprintf(ofname, STRLEN, "%s/%s/surf/%s.%s.curv", data_dir, argv[1], argv[2],suffix) ;
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
MRISwriteCurvature(mris, ofname) ;
MRISfree(&mris);
MRIfree(&mri_label[0]);
Expand All @@ -390,113 +422,7 @@ main(int argc, char *argv[]) {
return(0) ;
}

#if 0
static int
extractlabelvolume(MRI *mri_label[5], MRI *mri_orig) {
int xi, yi, zi;

mri_label[0] = MRIalloc(256, 256, 256, MRI_FLOAT) ;
mri_label[1] = MRIalloc(256, 256, 256, MRI_FLOAT) ;
mri_label[2] = MRIalloc(256, 256, 256, MRI_FLOAT) ;
mri_label[3] = MRIalloc(256, 256, 256, MRI_FLOAT) ;
mri_label[4] = MRIalloc(256, 256, 256, MRI_FLOAT) ;

for (xi=0; xi<mri_orig->depth; xi++)
for (yi=0; yi<mri_orig->height; yi++)
for (zi=0; zi<mri_orig->width; zi++) {
if ( MRIvox(mri_orig,zi,yi,xi) >=1 && MRIvox(mri_orig,zi,yi,xi) <=4 ) {
MRIFvox(mri_label[0],zi,yi,xi) = 1.0;
MRIFvox(mri_label[1],zi,yi,xi) = 0.0;
MRIFvox(mri_label[2],zi,yi,xi) = 0.0;
MRIFvox(mri_label[3],zi,yi,xi) = 0.0;
MRIFvox(mri_label[4],zi,yi,xi) = 0.0;
} else if ( MRIvox(mri_orig,zi,yi,xi) >=5 && MRIvox(mri_orig,zi,yi,xi) <=8 ) {
MRIFvox(mri_label[0],zi,yi,xi) = 0.0;
MRIFvox(mri_label[1],zi,yi,xi) = 1.0;
MRIFvox(mri_label[2],zi,yi,xi) = 0.0;
MRIFvox(mri_label[3],zi,yi,xi) = 0.0;
MRIFvox(mri_label[4],zi,yi,xi) = 0.0;
} else if ( MRIvox(mri_orig,zi,yi,xi) == 13 ) {
MRIFvox(mri_label[0],zi,yi,xi) = 0.0;
MRIFvox(mri_label[1],zi,yi,xi) = 0.0;
MRIFvox(mri_label[2],zi,yi,xi) = 1.0;
MRIFvox(mri_label[3],zi,yi,xi) = 0.0;
MRIFvox(mri_label[4],zi,yi,xi) = 0.0;
} else if ( MRIvox(mri_orig,zi,yi,xi) == 14 ) {
MRIFvox(mri_label[0],zi,yi,xi) = 0.0;
MRIFvox(mri_label[1],zi,yi,xi) = 0.0;
MRIFvox(mri_label[2],zi,yi,xi) = 0.0;
MRIFvox(mri_label[3],zi,yi,xi) = 1.0;
MRIFvox(mri_label[4],zi,yi,xi) = 0.0;
} else {
MRIFvox(mri_label[0],zi,yi,xi) = 0.0;
MRIFvox(mri_label[1],zi,yi,xi) = 0.0;
MRIFvox(mri_label[2],zi,yi,xi) = 0.0;
MRIFvox(mri_label[3],zi,yi,xi) = 0.0;
MRIFvox(mri_label[4],zi,yi,xi) = 1.0;
}
}
return(NO_ERROR);

}

static int
mrisFindneighborlabel(MRI_SURFACE *mris, char surftype[10], MRI *mri_label[5], MRI *mri_orig) {
int vno, type=0, tt;
VERTEX *v;
float x, y, z, step;
double xw, yw, zw, val=0;

for (tt=0; tt<4; tt++) {
if ( !strcmp(surftype,surf[tt]) ) type = tt;
}

for ( vno=0; vno < mris->nvertices; vno++ ) {
v = &mris->vertices[vno] ;
x = v->x ;
y = v->y ;
z = v->z ;
step = 0.5;
table[0][vno] = type;

while ( table[0][vno] == type && step <= 2 ) {
MRIsurfaceRASToVoxel(mri_orig, v->x+step*v->nx, v->y+step*v->ny, v->z+step*v->nz, &xw, &yw, &zw) ;
MRIsampleVolumeType(mri_orig, xw, yw, zw, &val, SAMPLE_NEAREST);
if ( val >=1 && val <=4 )
table[0][vno] = 0;
else if ( val >=5 && val <=8 )
table[0][vno] = 1;
else if ( val == 13 )
table[0][vno] = 2;
else if ( val == 14 )
table[0][vno] = 3;
else
table[0][vno] = 4;
step +=0.25;
}

#if 0
MRIsurfaceRASToVoxel(mri_orig, v->x-0.5*v->nx, v->y-0.5*v->ny, v->z-0.5*v->nz, &xw, &yw, &zw) ;
MRIsampleVolumeType(mri_orig, xw, yw, zw, &val, SAMPLE_NEAREST);
if ( val >=1 && val <=4 )
table[1][vno] = 0;
else if ( val >=5 && val <=8 )
table[1][vno] = 1;
else if ( val == 13 )
table[1][vno] = 2;
else if ( val == 14 )
table[1][vno] = 3;
else
table[1][vno] = 4;
#else
table[1][vno] = type;
#endif
}
return(NO_ERROR);
}


#else

static int
extractlabelvolume(MRI *mri_label[5], MRI *mri_orig) {
Expand Down Expand Up @@ -603,8 +529,6 @@ table[1][vno] = type;
return(NO_ERROR);
}

#endif



//////************ Used to calcuate the label term*************/////
Expand Down
56 changes: 41 additions & 15 deletions hiam_make_template/hiam_make_template.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ main(int argc, char *argv[]) {
MRI_SP *mrisp, *mrisp_aligned, *mrisp_template ;
INTEGRATION_PARMS parms ;

memset(&parms, 0, sizeof(parms)) ;
// memset(&parms, 0, sizeof(parms)) ;
Progname = argv[0] ;
ErrorInit(NULL, NULL, NULL) ;
DiagInit(NULL, NULL, NULL) ;
Expand Down Expand Up @@ -119,8 +119,12 @@ main(int argc, char *argv[]) {
for (ino = 0 ; ino < argc-1 ; ino++) {
subject = argv[ino] ;
fprintf(stderr, "processing subject %s\n", subject) ;
sprintf(surf_fname, "%s/%s/surf/%s.%s",
subjects_dir, subject, hemi, sphere_name) ;
int req = snprintf(surf_fname, STRLEN,
"%s/%s/surf/%s.%s",
subjects_dir, subject, hemi, sphere_name) ;
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
fprintf(stderr, "reading spherical surface %s...\n", surf_fname) ;
mris = MRISread(surf_fname) ;
if (!mris)
Expand All @@ -133,8 +137,12 @@ main(int argc, char *argv[]) {
for (sno = 0; sno < SURFACES ; sno++) {
if (curvature_names[sno]) /* read in precomputed curvature file */
{
sprintf(surf_fname, "%s/%s/surf/%s.%s",
subjects_dir, subject, hemi, curvature_names[sno]) ;
int req = snprintf(surf_fname, STRLEN,
"%s/%s/surf/%s.%s",
subjects_dir, subject, hemi, curvature_names[sno]) ;
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
if (MRISreadCurvatureFile(mris, surf_fname) != NO_ERROR)
ErrorExit(Gerror, "%s: could not read curvature file '%s'\n",
Progname, surf_fname) ;
Expand Down Expand Up @@ -175,13 +183,19 @@ main(int argc, char *argv[]) {
cp = strchr(fname, '.') ;
if (cp) {
cp1 = strrchr(fname, '.') ;
if (cp1 && cp1 != cp)
if (cp1 && cp1 != cp) {
strncpy(parms.base_name, cp+1, cp1-cp-1) ;
else
} else {
strcpy(parms.base_name, cp+1) ;
} else
}
} else {
strcpy(parms.base_name, "template") ;
sprintf(fname, "%s.%s.out", hemi, parms.base_name);
}
int req = snprintf(fname, STRLEN,
"%s.%s.out", hemi, parms.base_name);
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
INTEGRATION_PARMS_openFp(&parms, fname, "w") ;
printf("writing output to '%s'\n", fname) ;
}
Expand All @@ -190,8 +204,12 @@ main(int argc, char *argv[]) {
if (Gdiag & DIAG_WRITE)
fprintf(parms.fp, "processing subject %s\n", subject) ;
fprintf(stderr, "processing subject %s\n", subject) ;
sprintf(surf_fname, "%s/%s/surf/%s.%s",
subjects_dir, subject, hemi, sphere_name) ;
int req = snprintf(surf_fname, STRLEN,
"%s/%s/surf/%s.%s",
subjects_dir, subject, hemi, sphere_name) ;
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
fprintf(stderr, "reading spherical surface %s...\n", surf_fname) ;
mris = MRISread(surf_fname) ;
if (!mris)
Expand All @@ -200,8 +218,12 @@ main(int argc, char *argv[]) {
MRIScomputeMetricProperties(mris) ;
MRISstoreMetricProperties(mris) ;
MRISsaveVertexPositions(mris, ORIGINAL_VERTICES) ;
sprintf(surf_fname, "%s/%s/surf/%s.%s",
subjects_dir, subject, hemi, "hippocampus.curv") ;
req = snprintf(surf_fname, STRLEN,
"%s/%s/surf/%s.%s",
subjects_dir, subject, hemi, "hippocampus.curv") ;
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
if (MRISreadCurvatureFile(mris, surf_fname) != NO_ERROR)
ErrorExit(Gerror, "%s: could not read curvature file '%s'\n",
Progname, surf_fname) ;
Expand All @@ -225,8 +247,12 @@ main(int argc, char *argv[]) {
for (sno = 0; sno < SURFACES ; sno++) {
if (curvature_names[sno]) /* read in precomputed curvature file */
{
sprintf(surf_fname, "%s/%s/surf/%s.%s",
subjects_dir, subject, hemi, curvature_names[sno]) ;
int req = snprintf(surf_fname, STRLEN,
"%s/%s/surf/%s.%s",
subjects_dir, subject, hemi, curvature_names[sno]) ;
if( req >= STRLEN ) {
std::cerr << __FUNCTION__ << ": Truncation on line " << __LINE__ << std::endl;
}
if (MRISreadCurvatureFile(mris, surf_fname) != NO_ERROR)
ErrorExit(Gerror, "%s: could not read curvature file '%s'\n",
Progname, surf_fname) ;
Expand Down
Loading

0 comments on commit d4357dd

Please sign in to comment.