int main(int argc, char *argv[]) { char **av ; int ac, nargs ; MRI *mri=NULL ; char *xform_fname=NULL, *in_fname=NULL, *out_fname=NULL ; /* rkt: check for and handle version tag */ nargs = handle_version_option (argc, argv, "$Id: mri_add_xform_to_header.c,v 1.12 2011/03/02 00:04:13 nicks Exp $", "$Name: $"); argc -= nargs; Progname = argv[0] ; ErrorInit(NULL, NULL, NULL) ; DiagInit(NULL, NULL, NULL) ; if (argc == 1) { usage_exit(); } ac = argc ; av = argv ; for ( ; argc > 1 && ISOPTION(*argv[1]) ; argc--, argv++) { nargs = get_option(argc, argv) ; argc -= nargs ; argv += nargs ; } if (argc < 2) { ErrorExit(ERROR_BADPARM, "%s: no transform name specified", Progname) ; } xform_fname = argv[1] ; if (argc < 3) { ErrorExit(ERROR_BADPARM, "%s: no input name specified", Progname) ; } in_fname = argv[2] ; if (argc < 4) { out_fname = in_fname ; } else { out_fname = argv[3] ; } if (verbose) { fprintf(stderr, "reading from %s...", in_fname) ; } // we have two cases, in_fname is just a directory name or .mgz if (fio_IsDirectory(in_fname)) { mri = MRIreadInfo(in_fname) ; // must be old COR volume } else if (fio_FileExistsReadable(in_fname)) { char *ext = fio_extension(in_fname); if (ext==0) { ErrorExit(ERROR_BADPARM, "%s: no extension found", Progname) ; } printf("INFO: extension is %s\n", ext); if (strcmp(ext, "mgz")==0 || strcmp(ext, "mgh")==0) { mri = MRIread(in_fname); // mgh or mgz } else { ErrorExit(ERROR_BADPARM, "%s: currently only .mgz or .mgh saves transform name", Progname) ; } } if (!mri) ErrorExit(ERROR_NO_FILE, "%s: could not open source file %s", Progname, in_fname) ; if (! CopyNameOnly) { // why do we need to load the transform at this time // mri is removed anyway???? -- good point, added -s for noload if (input_transform_file(xform_fname, &mri->transform) != OK) ErrorPrintf(ERROR_NO_MEMORY, "%s: could not read xform file '%s'\n", Progname, xform_fname); // my guess is just to verify the validity of the transform? mri->linear_transform = get_linear_transform_ptr(&mri->transform) ; mri->inverse_linear_transform = get_inverse_linear_transform_ptr(&mri->transform) ; mri->free_transform = 1 ; } strcpy(mri->transform_fname, xform_fname) ; if (verbose) { fprintf(stderr, "done.\nwriting to %s...", out_fname) ; } // this writes COR-.info only if (fio_IsDirectory(out_fname)) { MRIwriteInfo(mri, out_fname) ; } else { MRIwrite(mri, out_fname); // currently only mgh format write xform info } if (verbose) { fprintf(stderr, "done.\n") ; } MRIfree(&mri) ; exit(0) ; return(0) ; }
/*---------------------------------------------------------------*/ int main(int argc, char *argv[]) { int nargs, nthlabel, n, vtxno, ano, index, nunhit; nargs = handle_version_option (argc, argv, vcid, "$Name: stable5 $"); if (nargs && argc - nargs == 1) exit (0); argc -= nargs; cmdline = argv2cmdline(argc,argv); uname(&uts); getcwd(cwd,2000); Progname = argv[0] ; argc --; argv++; ErrorInit(NULL, NULL, NULL) ; DiagInit(NULL, NULL, NULL) ; if (argc == 0) usage_exit(); parse_commandline(argc, argv); check_options(); if (checkoptsonly) return(0); dump_options(stdout); // Make sure subject exists sprintf(tmpstr,"%s/%s",SUBJECTS_DIR,subject); if (!fio_IsDirectory(tmpstr)) { printf("ERROR: cannot find %s\n",tmpstr); exit(1); } if(AnnotPath == NULL){ // Get path to annot, make sure it does not exist sprintf(tmpstr,"%s/%s/label/%s.%s.annot", SUBJECTS_DIR,subject,hemi,AnnotName); if (fio_FileExistsReadable(tmpstr)) { printf("ERROR: %s already exists\n",tmpstr); exit(1); } AnnotPath = strcpyalloc(tmpstr); } // Read the surf sprintf(tmpstr,"%s/%s/surf/%s.orig",SUBJECTS_DIR,subject,hemi); printf("Loading %s\n",tmpstr); mris = MRISread(tmpstr); if (mris == NULL) exit(1); // Set up color table set_atable_from_ctable(ctab); mris->ct = ctab; // Set up something to keep track of nhits nhits = MRIalloc(mris->nvertices,1,1,MRI_INT); // Set up something to keep track of max stat for that vertex if (maxstatwinner) maxstat = MRIalloc(mris->nvertices,1,1,MRI_FLOAT); // Go thru each label for (nthlabel = 0; nthlabel < nlabels; nthlabel ++) { label = LabelRead(subject,LabelFiles[nthlabel]); if (label == NULL) { printf("ERROR: reading %s\n",LabelFiles[nthlabel]); exit(1); } index = nthlabel; if (MapUnhitToUnknown) index ++; ano = index_to_annotation(index); printf("%2d %2d %s\n",index,ano,index_to_name(index)); for (n = 0; n < label->n_points; n++) { vtxno = label->lv[n].vno; if (vtxno < 0 || vtxno > mris->nvertices) { printf("ERROR: %s, n=%d, vertex %d out of range\n", LabelFiles[nthlabel],n,vtxno); exit(1); } if(DoLabelThresh && label->lv[n].stat < LabelThresh) continue; if (maxstatwinner) { float stat = MRIgetVoxVal(maxstat,vtxno,0,0,0); if (label->lv[n].stat < stat) { if (verbose) { printf("Keeping prior label for vtxno %d " "(old_stat=%f > this_stat=%f)\n", vtxno,stat,label->lv[n].stat); } continue; } MRIsetVoxVal(maxstat,vtxno,0,0,0,label->lv[n].stat); } if (verbose) { if (MRIgetVoxVal(nhits,vtxno,0,0,0) > 0) { printf ("WARNING: vertex %d maps to multiple labels! (overwriting)\n", vtxno); } } MRIsetVoxVal(nhits,vtxno,0,0,0,MRIgetVoxVal(nhits,vtxno,0,0,0)+1); mris->vertices[vtxno].annotation = ano; //printf("%5d %2d %2d %s\n",vtxno,segid,ano,index_to_name(segid)); } // label ponts LabelFree(&label); }// Label nunhit = 0; if (MapUnhitToUnknown) { printf("Mapping unhit to unknown\n"); for (vtxno = 0; vtxno < mris->nvertices; vtxno++) { if (MRIgetVoxVal(nhits,vtxno,0,0,0) == 0) { ano = index_to_annotation(0); mris->vertices[vtxno].annotation = ano; nunhit ++; } } printf("Found %d unhit vertices\n",nunhit); } if (dilate_label_name) { dilate_label_into_unknown(mris, dilate_label_annot) ; } printf("Writing annot to %s\n",AnnotPath); MRISwriteAnnotation(mris, AnnotPath); if (NHitsFile != NULL) MRIwrite(nhits,NHitsFile); return 0; }