void VParseFilterCmd (int noptions, VOptionDescRec opts[], int argc, char **argv, FILE **inp, FILE **outp) { static VStringConst in_file, out_file; static VBoolean in_found, out_found; static VOptionDescRec io_opts[] = { { "in", VStringRepn, 1, & in_file, & in_found, NULL, "Input file" }, { "out", VStringRepn, 1, & out_file, & out_found, NULL, "Output file" } }; int i, n; VOptionDescRec options[100]; /* Check that number of options will not overflow the options array. */ if (noptions >= 98) { VWarning("VParseFilterCmd: Too many options allowed"); noptions = 98; } /* Copy options into a new list and add the "in" and "out" options. */ n = 0; if (inp) options[n++] = io_opts[0]; if (outp) options[n++] = io_opts[1]; for (i = 0; i < noptions; i++, n++) options[n] = opts[i]; /* Parse command line arguments and identify the input and output files: */ if (! VParseCommand (n, options, & argc, argv) || (inp && ! VIdentifyFiles (n, options, "in", & argc, argv, 0)) || (outp && ! VIdentifyFiles (n, options, "out", & argc, argv, 1))) goto Usage; /* Any remaining unparsed arguments are erroneous: */ if (argc > 1) { VReportBadArgs (argc, argv); Usage: VReportUsage (argv[0], n, options, inp ? (outp ? "[infile] [outfile]" : "[infile]") : (outp ? "[outfile]" : NULL)); exit (EXIT_FAILURE); } /* Open the input and output files: */ if (inp) *inp = VOpenInputFile (in_file, TRUE); if (outp) *outp = VOpenOutputFile (out_file, TRUE); }
int main(int argc, char *argv[]) { static VArgVector in_files; static VString out_filename; static VBoolean in_found, out_found; static VOptionDescRec options[] = { {"in", VStringRepn, 0, & in_files, & in_found, NULL, "Input files" }, {"out", VStringRepn, 1, & out_filename, & out_found, NULL, "Output file" } }; FILE *fp = NULL; VStringConst in_filename; VAttrList list = NULL, out_list = NULL; VImage *design = NULL, tmp = NULL, dest = NULL; VAttrListPosn posn; int i, nimages; char prg_name[100]; char ver[100]; getLipsiaVersion(ver, sizeof(ver)); sprintf(prg_name, "vcatdesign V%s", ver); fprintf(stderr, "%s\n", prg_name); /* Parse command line arguments: */ if(! VParseCommand(VNumber(options), options, & argc, argv) || ! VIdentifyFiles(VNumber(options), options, "in", & argc, argv, 0) || ! VIdentifyFiles(VNumber(options), options, "out", & argc, argv, -1)) goto Usage; if(argc > 1) { VReportBadArgs(argc, argv); Usage: VReportUsage(argv[0], VNumber(options), options, NULL); exit(EXIT_FAILURE); } /* Read each input file */ nimages = in_files.number; design = (VImage *) VMalloc(sizeof(VImage) * nimages); for(i = 0; i < nimages; i++) { in_filename = ((VStringConst *) in_files.vector)[i]; fprintf(stderr, " reading: %s\n", in_filename); fp = VOpenInputFile(in_filename, TRUE); list = VReadFile(fp, NULL); if(! list) VError("Error reading file %s", in_filename); fclose(fp); for(VFirstAttr(list, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & tmp); if(VPixelRepn(tmp) == VFloatRepn || VPixelRepn(tmp) == VDoubleRepn) { design[i] = tmp; break; } } } /* process */ dest = ConcatDesigns(design, nimages); out_list = VCreateAttrList(); VAppendAttr(out_list, "image", NULL, VImageRepn, dest); /* Output: */ VHistory(VNumber(options), options, prg_name, &list, &out_list); fp = VOpenOutputFile(out_filename, TRUE); if(!fp) VError(" error opening outout file %s", out_filename); if(! VWriteFile(fp, out_list)) exit(1); fprintf(stderr, "%s: done.\n", argv[0]); return 0; }
int main (int argc, char* argv[]) { VString inname; /* name of input images */ VString outname; /* name of output images */ VString fieldname; /* name of deformation field */ VBoolean verbose = TRUE; /* verbose flag */ VOptionDescRec options[] = /* options of program */ { {"in", VStringRepn, 1, &inname, VRequiredOpt, NULL, "Input image"}, {"out", VStringRepn, 1, &outname, VRequiredOpt, NULL, "Deformed output image"}, {"field", VStringRepn, 1, &fieldname, VRequiredOpt, NULL, "3D deformation field"}, {"verbose", VBooleanRepn, 1, &verbose, VOptionalOpt, NULL, "Show status messages. Optional"} }; VAttrList in_history=NULL; /* history of input images */ VAttrList field_history=NULL; /* history of deformation field */ VAttrList In; /* input images */ VImage Dx, Dy, Dz; /* field images */ VAttrListPosn pos; /* position in list */ VImage in; /* image in list */ float fx, fy, fz; /* scaling factors */ VImage dx, dy, dz; /* scaled deformation field */ VAttrListPosn rider; /* functional data rider */ int bands, rows, columns, steps; /* size of functional data */ VImage data; /* functional data */ VShort *src, *dest; /* functional data pointer */ VBoolean success; /* success flag */ int n, t, z; /* indices */ /* print information */ char prg_name[100]; char ver[100]; getLipsiaVersion(ver, sizeof(ver)); sprintf(prg_name, "vdeform V%s", ver); fprintf (stderr, "%s\n", prg_name); fflush (stderr); /* parse command line */ if (!VParseCommand (VNumber (options), options, &argc, argv)) { if (argc > 1) VReportBadArgs (argc, argv); VReportUsage (argv[0], VNumber (options), options, NULL); exit (1); } /* read input images */ if (verbose) {fprintf (stderr, "Reading input image '%s' ...\n", inname); fflush (stderr);} ReadImages (inname, In, in_history); if (!In) exit (2); /* read deformation field */ if (verbose) {fprintf (stderr, "Reading 3D deformation field '%s' ...\n", fieldname); fflush (stderr);} ReadField (fieldname, Dx, Dy, Dz, field_history); if (!Dx || !Dy || !Dz) exit (3); /* deform anatomical images */ for (VFirstAttr (In, &pos); VAttrExists (&pos); VNextAttr (&pos)) { /* get image */ VGetAttrValue (&pos, NULL, VImageRepn, &in); if (VPixelRepn (in) != VUByteRepn) break; /* compare image and field */ if (verbose) {fprintf (stderr, "Comparing anatomical image and deformation field ...\n"); fflush (stderr);} if (!Compatible (in, Dx)) exit (4); if (!Compatible (in, Dy)) exit (4); if (!Compatible (in, Dz)) exit (4); /* deform image */ if (verbose) {fprintf (stderr, "Deforming anatomical image ...\n"); fflush (stderr);} RTTI (in, TrilinearInverseDeform, (in, Dx, Dy, Dz)); VSetAttrValue (&pos, NULL, VImageRepn, in); } /* deform map images */ for (; VAttrExists (&pos); VNextAttr (&pos)) { /* get image */ VGetAttrValue (&pos, NULL, VImageRepn, &in); if (VPixelRepn (in) != VFloatRepn) break; /* scale field */ if (verbose) {fprintf (stderr, "Scaling deformation field ...\n"); fflush (stderr);} fx = (float) VImageNColumns (in) / (float) VImageNColumns (Dx); fy = (float) VImageNRows (in) / (float) VImageNRows (Dy); fz = (float) VImageNBands (in) / (float) VImageNBands (Dz); TrilinearScale<VFloat> (Dx, fx, fy, fz, dx); Multiply<VFloat> (dx, fx); TrilinearScale<VFloat> (Dy, fx, fy, fz, dy); Multiply<VFloat> (dy, fy); TrilinearScale<VFloat> (Dz, fx, fy, fz, dz); Multiply<VFloat> (dz, fz); /* compare image and field */ if (verbose) {fprintf (stderr, "Comparing map image and deformation field ...\n"); fflush (stderr);} if (!Compatible (in, dx)) exit (5); if (!Compatible (in, dy)) exit (5); if (!Compatible (in, dz)) exit (5); /* deform image */ if (verbose) {fprintf (stderr, "Deforming map image ...\n"); fflush (stderr);} RTTI (in, TrilinearInverseDeform, (in, dx, dy, dz)); VSetAttrValue (&pos, NULL, VImageRepn, in); /* clean-up */ VDestroyImage (dx); VDestroyImage (dy); VDestroyImage (dz); } /* deform functional images */ if (VAttrExists (&pos)) { /* get data size */ bands = rows = columns = steps = 0; for (rider = pos; VAttrExists (&rider); VNextAttr (&rider)) { /* get image */ VGetAttrValue (&rider, NULL, VImageRepn, &data); if (VPixelRepn (data) != VShortRepn) break; /* store image size */ if (VImageNBands (data) > steps) steps = VImageNBands (data); if (VImageNRows (data) > rows) rows = VImageNRows (data); if (VImageNColumns (data) > columns) columns = VImageNColumns (data); bands++; } in = VCreateImage (bands, rows, columns, VShortRepn); /* scale field */ if (verbose) {fprintf (stderr, "Scaling deformation field ...\n"); fflush (stderr);} fx = (float) VImageNColumns (in) / (float) VImageNColumns (Dx); fy = (float) VImageNRows (in) / (float) VImageNRows (Dy); fz = (float) VImageNBands (in) / (float) VImageNBands (Dz); TrilinearScale<VFloat> (Dx, fx, fy, fz, dx); Multiply<VFloat> (dx, fx); TrilinearScale<VFloat> (Dy, fx, fy, fz, dy); Multiply<VFloat> (dy, fy); TrilinearScale<VFloat> (Dz, fx, fy, fz, dz); Multiply<VFloat> (dz, fz); /* compare image and field */ if (verbose) {fprintf (stderr, "Comparing functional images and deformation field ...\n"); fflush (stderr);} if (!Compatible (in, dx)) exit (6); if (!Compatible (in, dy)) exit (6); if (!Compatible (in, dz)) exit (6); /* expand zero images */ for (rider = pos, z = 0; z < bands; z++, VNextAttr (&rider)) { VGetAttrValue (&rider, NULL, VImageRepn, &data); if (FunctionalZero (data)) { FunctionalResize (data, steps, rows, columns); VSetAttrValue (&rider, NULL, VImageRepn, data); } } /* deform images */ if (verbose) {fprintf (stderr, "Deforming functional images ...\n"); fflush (stderr);} for (t = 0; t < steps; t++) { /* collect data */ dest = (VShort*) VPixelPtr (in, 0, 0, 0); for (rider = pos, z = 0; z < bands; z++, VNextAttr (&rider)) { VGetAttrValue (&rider, NULL, VImageRepn, &data); src = (VShort*) VPixelPtr (data, t, 0, 0); for (n = 0; n < rows * columns; ++n) *(dest++) = *(src++); } /* deform image */ if (verbose) {fprintf (stderr, "Timestep %d of %d ...\r", t + 1, steps); fflush (stderr);} RTTI (in, TrilinearInverseDeform, (in, dx, dy, dz)); /* spread data */ src = (VShort*) VPixelPtr (in, 0, 0, 0); for (rider = pos, z = 0; z < bands; z++, VNextAttr (&rider)) { VGetAttrValue (&rider, NULL, VImageRepn, &data); dest = (VShort*) VPixelPtr (data, t, 0, 0); for (n = 0; n < rows * columns; ++n) *(dest++) = *(src++); } } /* collapse zero images */ for (rider = pos, z = 0; z < bands; z++, VNextAttr (&rider)) { VGetAttrValue (&rider, NULL, VImageRepn, &data); if (FunctionalZero (data)) { FunctionalResize (data, 1, 1, 1); VSetAttrValue (&rider, NULL, VImageRepn, data); } } /* clean-up */ VDestroyImage (in); VDestroyImage (dx); VDestroyImage (dy); VDestroyImage (dz); /* proceed */ pos = rider; } /* check list */ if (VAttrExists (&pos)) { VError ("Remaining image does not contain valid data"); exit (7); } /* Prepend History */ VPrependHistory(VNumber(options),options,prg_name,&in_history); /* write output images */ if (verbose) {fprintf (stderr, "Writing output image '%s' ...\n", outname); fflush (stderr);} success = WriteImages (outname, In, in_history); if (!success) exit (8); /* clean-up VDestroyAttrList (inhistory); VDestroyAttrList (fieldhistory); VDestroyAttrList (In); VDestroyImage (Dx); VDestroyImage (Dy); VDestroyImage (Dz); */ /* exit */ if (verbose) {fprintf (stderr, "Finished.\n"); fflush (stderr);} return 0; } /* main */
int main(int argc, char *argv[]) { static VArgVector in_files1; static VArgVector in_files2; static VString out_filename; static VShort type = 1; static VBoolean gauss = FALSE; static VOptionDescRec options[] = { {"in1", VStringRepn, 0, & in_files1, VRequiredOpt, NULL, "Input files 1" }, {"in2", VStringRepn, 0, & in_files2, VRequiredOpt, NULL, "Input files 2" }, {"type", VShortRepn, 1, (VPointer) &type, VOptionalOpt, TypeDict, "output type"}, {"gaussianize", VBooleanRepn, 1, (VPointer) &gauss, VOptionalOpt, NULL, "Whether to Gaussianize"}, {"out", VStringRepn, 1, & out_filename, VRequiredOpt, NULL, "Output file" } }; FILE *fp = NULL; VStringConst in_filename, buf1, buf2; VAttrList list1, list2, out_list; VAttrListPosn posn; VString str; VImage src, *src1, *src2, dest = NULL; int i, nimages, npix = 0; char prg_name[100]; char ver[100]; getLipsiaVersion(ver, sizeof(ver)); sprintf(prg_name, "vpaired_ttest V%s", ver); fprintf(stderr, "%s\n", prg_name); /* ** parse command line */ if(! VParseCommand(VNumber(options), options, & argc, argv)) { VReportUsage(argv[0], VNumber(options), options, NULL); exit(EXIT_FAILURE); } if(argc > 1) { VReportBadArgs(argc, argv); exit(EXIT_FAILURE); } if(type < 0 || type > 1) VError(" illegal type"); /* ini */ nimages = in_files1.number; if(in_files2.number != nimages) VError(" inconsistent number of files %d %d", nimages, in_files2.number); for(i = 0; i < nimages; i++) { buf1 = ((VStringConst *) in_files1.vector)[i]; buf2 = ((VStringConst *) in_files2.vector)[i]; fprintf(stderr, "%3d: %s %s\n", i, buf1, buf2); } fprintf(stderr, "\n"); /* images 1 */ src1 = (VImage *) VCalloc(nimages, sizeof(VImage)); for(i = 0; i < nimages; i++) { src1[i] = NULL; in_filename = ((VStringConst *) in_files1.vector)[i]; fp = VOpenInputFile(in_filename, TRUE); list1 = VReadFile(fp, NULL); if(! list1) VError("Error reading image"); fclose(fp); for(VFirstAttr(list1, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & src); if(VPixelRepn(src) != VFloatRepn) continue; if(VGetAttr(VImageAttrList(src), "modality", NULL, VStringRepn, &str) == VAttrFound) { if(strcmp(str, "conimg") != 0) continue; } if(i == 0) npix = VImageNPixels(src); else if(npix != VImageNPixels(src)) VError(" inconsistent image dimensions"); src1[i] = src; break; } if(src1[i] == NULL) VError(" no contrast image found in %s", in_filename); } /* images 2 */ src2 = (VImage *) VCalloc(nimages, sizeof(VImage)); for(i = 0; i < nimages; i++) { src2[i] = NULL; in_filename = ((VStringConst *) in_files2.vector)[i]; fp = VOpenInputFile(in_filename, TRUE); list2 = VReadFile(fp, NULL); if(! list2) VError("Error reading image"); fclose(fp); for(VFirstAttr(list2, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & src); if(VPixelRepn(src) != VFloatRepn) continue; if(VGetAttr(VImageAttrList(src), "modality", NULL, VStringRepn, &str) == VAttrFound) { if(strcmp(str, "conimg") != 0) continue; } if(npix != VImageNPixels(src)) VError(" inconsistent image dimensions"); src2[i] = src; break; } if(src2[i] == NULL) VError(" no contrast image found in %s", in_filename); } /* make normally distributed */ if(gauss) { VGaussianize(src1, nimages); VGaussianize(src2, nimages); } /* paired t-test */ dest = PairedTest(src1, src2, dest, nimages, type); /* ** output */ out_list = VCreateAttrList(); VHistory(VNumber(options), options, prg_name, &list1, &out_list); VAppendAttr(out_list, "image", NULL, VImageRepn, dest); fp = VOpenOutputFile(out_filename, TRUE); if(! VWriteFile(fp, out_list)) exit(1); fclose(fp); fprintf(stderr, "%s: done.\n", argv[0]); exit(0); }
int main(int argc, char *argv[]) { static VArgVector in_files; static VString out_filename; static VString filename; static VShort minval = 0; static VFloat fwhm = 4.0; static VOptionDescRec options[] = { {"in", VStringRepn, 0, & in_files, VRequiredOpt, NULL, "Input files" }, {"out", VStringRepn, 1, & out_filename, VRequiredOpt, NULL, "Output file" }, {"design", VStringRepn, 1, (VPointer) &filename, VRequiredOpt, NULL, "Design file"}, { "fwhm", VFloatRepn, 1, (VPointer) &fwhm, VOptionalOpt, NULL, "FWHM of temporal Gaussian filter in seconds" }, {"minval", VShortRepn, 1, (VPointer) &minval, VOptionalOpt, NULL, "Signal threshold"} }; FILE *fp = NULL, *f = NULL; VStringConst in_filename; VString ifilename; VAttrList list = NULL, list1 = NULL; VAttrList out_list = NULL, history_list = NULL; VAttrListPosn posn; VImage design = NULL; ListInfo *linfo; VLong itr = 0; VFloat sigma = 0, tr = 0; int i, n, nimages; char prg_name[100]; char ver[100]; getLipsiaVersion(ver, sizeof(ver)); sprintf(prg_name, "vcolorglm V%s", ver); fprintf(stderr, "%s\n", prg_name); /* ** parse command line */ if(! VParseCommand(VNumber(options), options, & argc, argv)) { VReportUsage(argv[0], VNumber(options), options, NULL); exit(EXIT_FAILURE); } if(argc > 1) { VReportBadArgs(argc, argv); exit(EXIT_FAILURE); } /* ** read design matrix */ fp = VOpenInputFile(filename, TRUE); list1 = VReadFile(fp, NULL); if(! list1) VError("Error reading design file"); fclose(fp); n = 0; for(VFirstAttr(list1, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & design); if(VPixelRepn(design) != VFloatRepn /* && VPixelRepn(design) != VDoubleRepn */) continue; n++; break; } if(n == 0) VError(" design matrix not found "); /* ** get pre-coloring info */ if(VGetAttr(VImageAttrList(design), "repetition_time", NULL, VLongRepn, &itr) != VAttrFound) VError(" TR info missing in header"); tr = (float) itr / 1000.0; sigma = 0; if(tr > 0.001 && fwhm > 0.001) { fprintf(stderr, " TR: %.3f seconds\n", tr); sigma = fwhm / 2.35482; sigma /= tr; if(sigma < 0.1) { VWarning(" 'fwhm/sigma' too small (%.3f / %.3f), will be set to zero", fwhm, sigma); sigma = 0; } } /* ** Read each input file */ nimages = in_files.number; linfo = (ListInfo *) VMalloc(sizeof(ListInfo) * nimages); for(i = 0; i < nimages; i++) { in_filename = ((VStringConst *) in_files.vector)[i]; ifilename = VNewString(in_filename); fprintf(stderr, " file: %s\n", ifilename); list = GetListInfo(ifilename, &linfo[i]); /* Create history */ if(i == 0) { history_list = VReadHistory(&list); if(history_list == NULL) history_list = VCreateAttrList(); VPrependHistory(VNumber(options), options, prg_name, &history_list); } } /* ** GLM */ out_list = VRegression(linfo, nimages, minval, design, sigma, itr); /* ** Output: */ VPrependAttr(out_list, "history", NULL, VAttrListRepn, history_list); f = VOpenOutputFile(out_filename, TRUE); if(!f) VError(" error opening outout file %s", out_filename); if(! VWriteFile(f, out_list)) exit(1); fprintf(stderr, "%s: done.\n", argv[0]); return 0; }
/* the main routine */ int main (int argc,char *argv[]) { QApplication::setColorSpec( QApplication::ManyColor ); /* initialize preferences variables */ pr = prefsini(); /* write out the revision string */ char prg_name[100]; char ver[100]; getLipsiaVersion(ver, sizeof(ver)); sprintf(prg_name, "vlview V%s", ver); fprintf (stderr, "%s\n", prg_name); /* Parse command line arguments and identify files: */ if (! VParseCommand (VNumber (options), options, & argc, argv) || ! VIdentifyFiles (VNumber (options), options, "in", & argc, argv, 0)) goto Usage; if (argc > 1) { VReportBadArgs (argc, argv); Usage: VReportUsage (argv[0], VNumber (options), options, NULL); exit (EXIT_FAILURE); } /* A. Hagert: exceptions */ if (mincol == 123456 && maxcol == 123456) { pr->col_min = 0; pr->col_max = 0; } else if (mincol != 123456 && maxcol == 123456) { printf("ERROR: maximum not given -> ignoring given minimum.\n"); pr->col_min = 0; pr->col_max = 0; } else if (mincol == 123456 && maxcol != 123456) { printf("ERROR: minimum not given -> ignoring given maximum.\n"); pr->col_min = 0; pr->col_max = 0; } else if (mincol<=maxcol) { pr->col_min=mincol; pr->col_max=maxcol; } else { printf("ERROR: given minimum is higher than maximum -> ignoring both.\n"); pr->col_min = 0; pr->col_max = 0; } /* set verbose option to prefs */ pr->prg_name=prg_name; pr->verbose=verbose; pr->raw=rawfile; pr->des=desfile; pr->beta=betafile; pr->colortable=colortable_filename; pr->graph[0]=graphfile; pr->files=0; pr->infilenum=in_files.number; pr->zmapfilenum=zmap_files.number; pr->thresh=th11; pr->background0=background[0]; pr->background1=background[1]; if (pr->infilenum > pr->zmapfilenum) pr->files=pr->infilenum; else pr->files=pr->zmapfilenum; if (pr->infilenum==0) VError("No infile specified"); if (pr->files>1) VError("Use 'vlv' for visualization of data sets > 1"); /* get the number of graphs (pr->g_number) */ myload_.testFiles(); /* initialize open the main window */ QApplication a( argc, argv ); lView ww; a.setMainWidget( &ww ); ww.show(); return a.exec(); /* end of the program */ }
int main(int argc, char *argv[]) { static VArgVector in_files1; static VArgVector in_files2; static VString out_filename; static VOptionDescRec options[] = { { "in1", VStringRepn, 0, & in_files1, VRequiredOpt, NULL, "Input files 1" }, { "in2", VStringRepn, 0, & in_files2, VRequiredOpt, NULL, "Input files 2" }, { "out", VStringRepn, 1, & out_filename, VRequiredOpt, NULL, "Output file" } }; FILE *fp = NULL; VStringConst in_filename, buf1, buf2; VAttrList list1, list2, out_list; VAttrListPosn posn; VImage src, *src1, *src2, dest = NULL; int i, nimages, npix = 0; char prg_name[100]; char ver[100]; getLipsiaVersion(ver, sizeof(ver)); sprintf(prg_name, "vpaired_wilcoxtest V%s", ver); fprintf(stderr, "%s\n", prg_name); /* ** parse command line */ if(! VParseCommand(VNumber(options), options, & argc, argv)) { VReportUsage(argv[0], VNumber(options), options, NULL); exit(EXIT_FAILURE); } if(argc > 1) { VReportBadArgs(argc, argv); exit(EXIT_FAILURE); } /* number of images */ nimages = in_files1.number; if(in_files2.number != nimages) VError(" inconsistent number of files "); for(i = 0; i < nimages; i++) { buf1 = ((VStringConst *) in_files1.vector)[i]; buf2 = ((VStringConst *) in_files2.vector)[i]; fprintf(stderr, "%3d: %s %s\n", i, buf1, buf2); } fprintf(stderr, "\n"); /* ** read images 1 */ src1 = (VImage *) VCalloc(nimages, sizeof(VImage)); for(i = 0; i < nimages; i++) { src1[i] = NULL; in_filename = ((VStringConst *) in_files1.vector)[i]; fp = VOpenInputFile(in_filename, TRUE); list1 = VReadFile(fp, NULL); if(! list1) VError("Error reading image"); fclose(fp); for(VFirstAttr(list1, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & src); if(VPixelRepn(src) != VFloatRepn) continue; src1[i] = src; break; } if(i == 0) npix = VImageNPixels(src1[i]); else if(npix != VImageNPixels(src1[i])) VError(" inconsistent image dimensions"); if(src1[i] == NULL) VError(" no image found in %s", in_filename); } /* ** read images 2 */ src2 = (VImage *) VCalloc(nimages, sizeof(VImage)); for(i = 0; i < nimages; i++) { src2[i] = NULL; in_filename = ((VStringConst *) in_files2.vector)[i]; fp = VOpenInputFile(in_filename, TRUE); list2 = VReadFile(fp, NULL); if(! list2) VError("Error reading image"); fclose(fp); for(VFirstAttr(list2, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & src); if(VPixelRepn(src) != VFloatRepn) continue; src2[i] = src; break; } if(npix != VImageNPixels(src2[i])) VError(" inconsistent image dimensions"); if(src2[i] == NULL) VError(" no image found in %s", in_filename); } /* ** paired wilcoxon test */ dest = PairedWilcoxTest(src1, src2, dest, nimages); /* ** output */ out_list = VCreateAttrList(); VHistory(VNumber(options), options, prg_name, &list1, &out_list); VAppendAttr(out_list, "image", NULL, VImageRepn, dest); fp = VOpenOutputFile(out_filename, TRUE); if(! VWriteFile(fp, out_list)) exit(1); fclose(fp); fprintf(stderr, "%s: done.\n", argv[0]); exit(0); }
int main(int argc, char *argv[]) { VAttrList list, out_list; VImage src; VImage dest = NULL; VAttrListPosn posn; VString str; int nimages; char historystr[] = "history"; char prg_name[100]; char ver[100]; getLipsiaVersion(ver, sizeof(ver)); sprintf(prg_name, "vdelcereb V%s", ver); fprintf(stderr, "%s\n", prg_name); /* Parse command line arguments: */ if(!VParseCommand(VNumber(options), options, &argc, argv) || ! VIdentifyFiles(VNumber(options), options, "in", & argc, argv, 0) || ! VIdentifyFiles(VNumber(options), options, "out", & argc, argv, -1)) goto Usage; if(argc > 1) { VReportBadArgs(argc, argv); Usage: VReportUsage(argv[0], VNumber(options), options, NULL); exit(EXIT_FAILURE); } /* Read source image(s): */ if(strcmp(in_filename, "-") == 0) in_file = stdin; else { in_file = fopen(in_filename, "r"); if(! in_file) VError("Failed to open input file %s", in_filename); } if(!(list = VReadFile(in_file, NULL))) exit(EXIT_FAILURE); fclose(in_file); /* Process image */ nimages = 0; for(VFirstAttr(list, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & src); dest = VCerebellum(src); VSetAttrValue(& posn, NULL, VImageRepn, dest); VDestroyImage(src); nimages++; break; } /* Create outlist */ out_list = VCreateAttrList(); /* Make History */ VHistory(VNumber(options), options, prg_name, &list, &out_list); /* Alle Attribute (ausser history:) in die neue Liste schreiben: */ for(VFirstAttr(list, &posn); VAttrExists(&posn); VNextAttr(&posn)) { if(strncmp(VGetAttrName(&posn), historystr, strlen(historystr)) == 0) continue; switch(VGetAttrRepn(&posn)) { case VImageRepn: VGetAttrValue(&posn, NULL, VImageRepn, &src); VAppendAttr(out_list, VGetAttrName(&posn), NULL, VImageRepn, src); break; case VStringRepn: VGetAttrValue(&posn, NULL, VStringRepn, &str); VAppendAttr(out_list, VGetAttrName(&posn), NULL, VImageRepn, str); break; default: break; } } /* Write the results to the output file: */ if(strcmp(out_filename, "-") == 0) out_file = stdout; else { out_file = fopen(out_filename, "w"); if(! out_file) VError("Failed to open output file %s", out_filename); } if(VWriteFile(out_file, out_list)) { if(verbose >= 1) fprintf(stderr, "%s: processed %d image%s.\n", argv[0], nimages, nimages == 1 ? "" : "s"); fprintf(stderr, "%s: done.\n", argv[0]); } return 0; }
int main(int argc, char *argv[]) { static VArgVector in_files; static VString out_filename; static VBoolean level = FALSE; static VBoolean zscore = FALSE; static VBoolean in_found, out_found; static VOptionDescRec options[] = { { "in", VStringRepn, 0, & in_files, & in_found, NULL, "Contrast images" }, { "out", VStringRepn, 1, & out_filename, & out_found, NULL, "Output file" }, { "level", VBooleanRepn, 1, & level, VOptionalOpt, NULL, "Whether to produce output to be used for 3rd level analysis" } /* { "zscore", VBooleanRepn, 1, & zscore, VOptionalOpt, NULL, "Whether to produce z-scores as output"} */ }; FILE *f; VStringConst in_filename; VAttrList list, out_list; VAttrListPosn posn; VImage src = NULL; VImage cbeta_images[N], sd_images[N]; int i, nimages = 0; VString str = NULL; char prg_name[100]; char ver[100]; getLipsiaVersion(ver, sizeof(ver)); sprintf(prg_name, "vbayes V%s", ver); fprintf(stderr, "%s\n", prg_name); /* Parse command line arguments: */ if(! VParseCommand(VNumber(options), options, & argc, argv) || ! VIdentifyFiles(VNumber(options), options, "in", & argc, argv, 0) || ! VIdentifyFiles(VNumber(options), options, "out", & argc, argv, -1)) goto Usage; if(argc > 1) { VReportBadArgs(argc, argv); Usage: VReportUsage(argv[0], VNumber(options), options, NULL); exit(EXIT_FAILURE); } nimages = in_files.number; fprintf(stderr, "Processing %d input files\n\n", nimages); if(nimages >= N) VError("Too many input images, max: %d", N); if(nimages == 0) VError("Input images missing"); /* loop through all input files */ for(i = 0; i < nimages; i++) { in_filename = ((VStringConst *) in_files.vector)[i]; fprintf(stderr, "%s\n", in_filename); f = fopen((char *)in_filename, "r"); if(! f) VError("Failed to open input file %s", in_filename); if(!(list = VReadFile(f, NULL))) exit(EXIT_FAILURE); fclose(f); for(VFirstAttr(list, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & src); if(VPixelRepn(src) != VFloatRepn) continue; VGetAttr(VImageAttrList(src), "modality", NULL, VStringRepn, &str); if(strcmp(str, "conimg") == 0) { cbeta_images[i] = VCopyImage(src, NULL, VAllBands); } else if(strcmp(str, "std_dev") == 0 || strcmp(str, "sd") == 0) { sd_images[i] = VCopyImage(src, NULL, VAllBands); } else VError(" Illegal input file! Make sure to use con-images as input"); } } /* calculate probabilities */ out_list = VBayes(cbeta_images, sd_images, nimages, level, zscore); if(out_list == NULL) VError(" no result"); /* ** output */ VHistory(VNumber(options), options, prg_name, &list, &out_list); if(strcmp(out_filename, "-") == 0) VError("Output file required"); f = fopen(out_filename, "w"); if(! f) VError("Failed to open output file %s", out_filename); if(! VWriteFile(f, out_list)) exit(EXIT_FAILURE); fprintf(stderr, "\n%s: done \n", argv[0]); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { /* command line arguments */ static VString out_filename; static VArgVector in_files; static VString trans_filename = ""; static VBoolean in_found, out_found; static VShort minval = 0; static VBoolean compress = TRUE; static VFloat resolution = 3; static VOptionDescRec options[] = { { "in", VStringRepn, 0, & in_files, & in_found, NULL, "Input file" }, { "out", VStringRepn, 1, & out_filename, & out_found, NULL, "Output file" }, { "trans", VStringRepn, 1, &trans_filename, VRequiredOpt, NULL, "File containing transformation matrix" }, { "resolution", VFloatRepn, 1, &resolution, VOptionalOpt, NULL, "Output voxel resolution in mm" }, { "minval", VShortRepn, 1, &minval, VOptionalOpt, NULL, "Signal threshold" }, { "compress", VBooleanRepn, 1, &compress, VOptionalOpt, NULL, "Whether to compress empty slices" } }; VStringConst in_filename; FILE *in_file, *out_file, *fp; VAttrList list, list1, out_list; VAttrListPosn posn; VImage trans = NULL; VImage *dst_image; VImageInfo *imageInfo; int nobject = 0, ntimesteps = 0, nbands = 0, nrows = 0, ncols = 0; VString ca, cp, extent, str; int found = 0; int j, dest_nbands; char prg_name[100]; char ver[100]; getLipsiaVersion(ver, sizeof(ver)); sprintf(prg_name, "vfunctrans V%s", ver); fprintf(stderr, "%s\n", prg_name); /* Parse command line arguments: */ if(! VParseCommand(VNumber(options), options, & argc, argv) || ! VIdentifyFiles(VNumber(options), options, "in", & argc, argv, 0) || ! VIdentifyFiles(VNumber(options), options, "out", & argc, argv, -1)) goto Usage; if(argc > 1) { VReportBadArgs(argc, argv); Usage: VReportUsage(argv[0], VNumber(options), options, NULL); exit(EXIT_FAILURE); } if(resolution <= 0) VError(" 'resolution' must be an integer > 0"); /* ** Read the transformation matrix: */ fp = VOpenInputFile(trans_filename, TRUE); list1 = VReadFile(fp, NULL); if(! list1) VError("Error reading image"); fclose(fp); for(VFirstAttr(list1, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; if(strncmp(VGetAttrName(&posn), "transform", 9) != 0) continue; VGetAttrValue(& posn, NULL, VImageRepn, & trans); break; } if(trans == NULL) VError("transformation matrix not found"); /* ** check attributes */ if(VGetAttr(VImageAttrList(trans), "ca", NULL, VStringRepn, (VPointer) & ca) != VAttrFound) VError(" attribute 'ca' missing in transformation matrix "); if(VGetAttr(VImageAttrList(trans), "cp", NULL, VStringRepn, (VPointer) & cp) != VAttrFound) VError(" attribute 'cp' missing in transformation matrix "); if(VGetAttr(VImageAttrList(trans), "extent", NULL, VStringRepn, (VPointer) & extent) != VAttrFound) VError(" attribute 'extent' missing in transformation matrix "); /* ** open in-file */ if(in_files.number < 1 || in_files.number > 1) VError(" incorrect number of input files: %d", in_files.number); in_filename = ((VStringConst *) in_files.vector)[0]; if(strcmp(in_filename, "-") == 0) in_file = stdin; else { in_file = fopen((char *)in_filename, "r"); if(! in_file) VError("Failed to open input file %s", in_filename); } /* ** read file info */ if(! ReadHeader(in_file)) VError("error reading header"); if(!(list = ReadAttrList(in_file))) VError("error reading attr list"); j = 0; for(VFirstAttr(list, & posn); VAttrExists(& posn); VNextAttr(& posn)) { j++; } imageInfo = (VImageInfo *) VMalloc(sizeof(VImageInfo) * (j + 1)); nobject = nbands = found = 0; for(VFirstAttr(list, & posn); VAttrExists(& posn); VNextAttr(& posn)) { str = VGetAttrName(&posn); if(strncmp(str, "history", 7) == 0) { nobject++; continue; } VImageInfoIni(&imageInfo[nbands]); if(! VGetImageInfo(in_file, list, nobject, &imageInfo[nbands])) VError(" error reading image info"); if(imageInfo[nbands].repn == VShortRepn) { found = 1; nrows = imageInfo[nbands].nrows; ncols = imageInfo[nbands].ncolumns; ntimesteps = imageInfo[nbands].nbands; nbands++; } nobject++; } fclose(in_file); if(!found) VError(" couldn't find functional data"); /* ** process each time step */ dst_image = VFunctrans(in_filename, imageInfo, nbands, trans, resolution, ntimesteps, minval, compress, &dest_nbands); /* ** output */ out_list = VCreateAttrList(); VHistory(VNumber(options), options, prg_name, &list, &out_list); for(j = 0; j < dest_nbands; j++) { VAppendAttr(out_list, "image", NULL, VImageRepn, dst_image[j]); } /* Open and write the output file: */ if(strcmp(out_filename, "-") == 0) out_file = stdout; else { out_file = fopen(out_filename, "w"); if(! out_file) VError("Failed to open output file %s", out_filename); } if(!VWriteFile(out_file, out_list) || fclose(out_file)) VSystemError("error writing output file"); fprintf(stderr, "\n%s: done.\n", argv[0]); return (EXIT_SUCCESS); }
int main(int argc, char *argv[]) { static VArgVector in_files1; static VArgVector in_files2; static VArgVector mask_file; static VArgVector report_file; static VOptionDescRec options[] = { { "in1", VStringRepn, 0, & in_files1, VRequiredOpt, NULL, "Input files 1" }, { "in2", VStringRepn, 0, & in_files2, VRequiredOpt, NULL, "Input files 2" }, { "report", VStringRepn, 0, & report_file, VRequiredOpt, NULL, "Report file" }, { "mask", VStringRepn, 0, & mask_file, VRequiredOpt, NULL, "Mask file(s)" } }; FILE *fp = NULL; VStringConst in_filename; VAttrList list1, list2, list3; VAttrListPosn posn; VString str; VImage src, *src1, *src2, *mask; int i, nimages = 0, mimages = 0; char prg_name[100]; char ver[100]; getLipsiaVersion(ver, sizeof(ver)); sprintf(prg_name, "vROIpaired_ttest V%s", ver); fprintf(stderr, "%s\n", prg_name); if(!VParseCommand(VNumber(options), options, & argc, argv)) { VReportUsage(argv[0], VNumber(options), options, NULL); exit(0); } /* get number of input images */ nimages = in_files1.number; if(in_files2.number != nimages) VError(" inconsistent number of files: in1: %d, in2: %d ", nimages, in_files2.number); mimages = mask_file.number; if(nimages != mimages && mimages > 1) VError(" inconsistent number of files, images: %d, masks: %d", nimages, mimages); /* images 1 */ src1 = (VImage *) VMalloc(sizeof(VImage) * nimages); for(i = 0; i < nimages; i++) { src1[i] = NULL; in_filename = ((VStringConst *) in_files1.vector)[i]; fp = VOpenInputFile(in_filename, TRUE); if(!fp) VError("Error opening file %s", in_filename); list1 = VReadFile(fp, NULL); if(! list1) VError("Error reading file %s", in_filename); fclose(fp); for(VFirstAttr(list1, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & src); if(VPixelRepn(src) != VFloatRepn) continue; if(VGetAttr(VImageAttrList(src), "modality", NULL, VStringRepn, &str) == VAttrFound) { if(strcmp(str, "conimg") != 0) continue; } src1[i] = src; break; } if(src1[i] == NULL) VError(" no contrast image found in %s", in_filename); } /* images 2 */ src2 = (VImage *) VMalloc(sizeof(VImage) * nimages); for(i = 0; i < nimages; i++) { src2[i] = NULL; in_filename = ((VStringConst *) in_files2.vector)[i]; fp = VOpenInputFile(in_filename, TRUE); if(!fp) VError("Error opening file %s", in_filename); list2 = VReadFile(fp, NULL); if(! list2) VError("Error reading file %s", in_filename); fclose(fp); for(VFirstAttr(list2, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & src); if(VPixelRepn(src) != VFloatRepn) continue; if(VGetAttr(VImageAttrList(src), "modality", NULL, VStringRepn, &str) == VAttrFound) { if(strcmp(str, "conimg") != 0) continue; } src2[i] = src; break; } if(src2[i] == NULL) VError(" no contrast image found in %s", in_filename); } for(i = 0; i < nimages; i++) { fprintf(stderr, "%3d: %s %s\n", i, ((VStringConst *) in_files1.vector)[i], ((VStringConst *) in_files2.vector)[i]); } fprintf(stderr, "\n"); /* mask images */ mask = (VImage *) VMalloc(sizeof(VImage) * mimages); for(i = 0; i < mimages; i++) { mask[i] = NULL; in_filename = ((VStringConst *) mask_file.vector)[i]; fp = VOpenInputFile(in_filename, TRUE); if(!fp) VError("Error opening file %s", in_filename); list3 = VReadFile(fp, NULL); if(! list3) VError("Error reading file", in_filename); fclose(fp); for(VFirstAttr(list3, & posn); VAttrExists(& posn); VNextAttr(& posn)) { if(VGetAttrRepn(& posn) != VImageRepn) continue; VGetAttrValue(& posn, NULL, VImageRepn, & src); if(VPixelRepn(src) != VUByteRepn) mask[i] = VConvertImageCopy(src, NULL, VAllBands, VUByteRepn); else mask[i] = src; break; } if(mask[i] == NULL) VError(" mask %d not found", i); } /* open report_file */ fp = NULL; in_filename = ((VStringConst *) report_file.vector)[0]; fp = fopen(in_filename, "w"); if(!fp) VError(" error opening file %s", in_filename); /* paired t-test in ROIs */ VROIpaired_ttest(src1, src2, mask, nimages, mimages, fp); exit(0); }