/*---------------------------------------------------------------*/ int main(int argc, char **argv) { int c,r,s,f; double val,rval; FILE *fp; MRI *mritmp; Progname = argv[0] ; argc --; argv++; ErrorInit(NULL, NULL, NULL) ; DiagInit(NULL, NULL, NULL) ; /* assign default geometry */ cdircos[0] = 1.0; cdircos[1] = 0.0; cdircos[2] = 0.0; rdircos[0] = 0.0; rdircos[1] = 1.0; rdircos[2] = 0.0; sdircos[0] = 0.0; sdircos[1] = 0.0; sdircos[2] = 1.0; res[0] = 1.0; res[1] = 1.0; res[2] = 1.0; cras[0] = 0.0; cras[1] = 0.0; cras[2] = 0.0; res[3] = 2.0; /* TR */ if (argc == 0) usage_exit(); parse_commandline(argc, argv); check_options(); dump_options(stdout); if(tempid != NULL) { printf("INFO: reading template header\n"); if(! DoCurv) mritemp = MRIreadHeader(tempid,tempfmtid); else mritemp = MRIread(tempid); if (mritemp == NULL) { printf("ERROR: reading %s header\n",tempid); exit(1); } if(NewVoxSizeSpeced){ dim[0] = round(mritemp->width*mritemp->xsize/res[0]); dim[1] = round(mritemp->height*mritemp->ysize/res[1]); dim[2] = round(mritemp->depth*mritemp->zsize/res[2]); dim[3] = mritemp->nframes; res[3] = mritemp->tr; dimSpeced = 1; } if(dimSpeced){ mritmp = MRIallocSequence(dim[0],dim[1],dim[2],MRI_FLOAT,dim[3]); MRIcopyHeader(mritemp,mritmp); MRIfree(&mritemp); mritemp = mritmp; } if(resSpeced){ mritemp->xsize = res[0]; mritemp->ysize = res[1]; mritemp->zsize = res[2]; mritemp->tr = res[3]; } dim[0] = mritemp->width; dim[1] = mritemp->height; dim[2] = mritemp->depth; if (nframes > 0) dim[3] = nframes; else dim[3] = mritemp->nframes; mritemp->nframes = dim[3]; } if(mritemp) { if(SpikeTP >= mritemp->nframes){ printf("ERROR: SpikeTP = %d >= mritemp->nframes = %d\n", SpikeTP,mritemp->nframes); exit(1); } } printf("Synthesizing\n"); srand48(seed); if (strcmp(pdfname,"gaussian")==0) mri = MRIrandn(dim[0], dim[1], dim[2], dim[3], gausmean, gausstd, NULL); else if (strcmp(pdfname,"uniform")==0) mri = MRIdrand48(dim[0], dim[1], dim[2], dim[3], 0, 1, NULL); else if (strcmp(pdfname,"const")==0) mri = MRIconst(dim[0], dim[1], dim[2], dim[3], ValueA, NULL); else if (strcmp(pdfname,"sphere")==0) { if(voxradius < 0) voxradius = sqrt( pow(dim[0]/2.0,2)+pow(dim[1]/2.0,2)+pow(dim[2]/2.0,2) )/2.0; printf("voxradius = %lf\n",voxradius); mri = MRIsphereMask(dim[0], dim[1], dim[2], dim[3], dim[0]/2.0, dim[1]/2.0, dim[2]/2.0, voxradius, ValueA, NULL); } else if (strcmp(pdfname,"delta")==0) { mri = MRIconst(dim[0], dim[1], dim[2], dim[3], delta_off_value, NULL); if (delta_crsf_speced == 0) { delta_crsf[0] = dim[0]/2; delta_crsf[1] = dim[1]/2; delta_crsf[2] = dim[2]/2; delta_crsf[3] = dim[3]/2; } printf("delta set to %g at %d %d %d %d\n",delta_value,delta_crsf[0], delta_crsf[1],delta_crsf[2],delta_crsf[3]); MRIFseq_vox(mri, delta_crsf[0], delta_crsf[1], delta_crsf[2], delta_crsf[3]) = delta_value; } else if (strcmp(pdfname,"chi2")==0) { rfs = RFspecInit(seed,NULL); rfs->name = strcpyalloc("chi2"); rfs->params[0] = dendof; mri = MRIconst(dim[0], dim[1], dim[2], dim[3], 0, NULL); printf("Synthesizing chi2 with dof=%d\n",dendof); RFsynth(mri,rfs,NULL); } else if (strcmp(pdfname,"z")==0) { printf("Synthesizing z \n"); rfs = RFspecInit(seed,NULL); rfs->name = strcpyalloc("gaussian"); rfs->params[0] = 0; // mean rfs->params[1] = 1; // std mri = MRIconst(dim[0], dim[1], dim[2], dim[3], 0, NULL); RFsynth(mri,rfs,NULL); } else if (strcmp(pdfname,"t")==0) { printf("Synthesizing t with dof=%d\n",dendof); rfs = RFspecInit(seed,NULL); rfs->name = strcpyalloc("t"); rfs->params[0] = dendof; mri = MRIconst(dim[0], dim[1], dim[2], dim[3], 0, NULL); RFsynth(mri,rfs,NULL); } else if (strcmp(pdfname,"tr")==0) { printf("Synthesizing t with dof=%d as ratio of z/sqrt(chi2)\n",dendof); rfs = RFspecInit(seed,NULL); // numerator rfs->name = strcpyalloc("gaussian"); rfs->params[0] = 0; // mean rfs->params[1] = 1; // std mri = MRIconst(dim[0], dim[1], dim[2], dim[3], 0, NULL); RFsynth(mri,rfs,NULL); // denominator rfs->name = strcpyalloc("chi2"); rfs->params[0] = dendof; mri2 = MRIconst(dim[0], dim[1], dim[2], dim[3], 0, NULL); RFsynth(mri2,rfs,NULL); fMRIsqrt(mri2,mri2); // sqrt of chi2 mri = MRIdivide(mri,mri2,mri); MRIscalarMul(mri, mri, sqrt(dendof)) ; MRIfree(&mri2); } else if (strcmp(pdfname,"F")==0) { printf("Synthesizing F with num=%d den=%d\n",numdof,dendof); rfs = RFspecInit(seed,NULL); rfs->name = strcpyalloc("F"); rfs->params[0] = numdof; rfs->params[1] = dendof; mri = MRIconst(dim[0], dim[1], dim[2], dim[3], 0, NULL); RFsynth(mri,rfs,NULL); } else if (strcmp(pdfname,"Fr")==0) { printf("Synthesizing F with num=%d den=%d as ratio of two chi2\n", numdof,dendof); rfs = RFspecInit(seed,NULL); rfs->name = strcpyalloc("chi2"); // numerator rfs->params[0] = numdof; mri = MRIconst(dim[0], dim[1], dim[2], dim[3], 0, NULL); RFsynth(mri,rfs,NULL); // denominator rfs->params[0] = dendof; mri2 = MRIconst(dim[0], dim[1], dim[2], dim[3], 0, NULL); RFsynth(mri2,rfs,NULL); mri = MRIdivide(mri,mri2,mri); MRIscalarMul(mri, mri, (double)dendof/numdof) ; MRIfree(&mri2); } else if (strcmp(pdfname,"voxcrs")==0) { // three frames. 1st=col, 2nd=row, 3rd=slice printf("Filling with vox CRS\n"); mri = MRIconst(dim[0], dim[1], dim[2], 3, 0, NULL); for(c=0; c < mri->width; c ++){ for(r=0; r < mri->height; r ++){ for(s=0; s < mri->depth; s ++){ MRIsetVoxVal(mri,c,r,s,0,c); MRIsetVoxVal(mri,c,r,s,1,r); MRIsetVoxVal(mri,c,r,s,2,s); } } } } else if (strcmp(pdfname,"boundingbox")==0) { printf("Setting bounding box \n"); if(mritemp == NULL) mritemp = MRIconst(dim[0], dim[1], dim[2], dim[3], 0, NULL); mri = MRIsetBoundingBox(mritemp,&boundingbox,ValueA,ValueB); if(!mri) exit(1); } else if (strcmp(pdfname,"checker")==0) { printf("Checker \n"); mri=MRIchecker(mritemp,NULL); if(!mri) exit(1); } else if (strcmp(pdfname,"sliceno")==0) { printf("SliceNo \n"); if(mritemp == NULL){ printf("ERROR: need --temp with sliceno\n"); exit(1); } mri=MRIsliceNo(mritemp,NULL); if(!mri) exit(1); } else if (strcmp(pdfname,"indexno")==0) { printf("IndexNo \n"); if(mritemp == NULL){ printf("ERROR: need --temp with indexno\n"); exit(1); } mri=MRIindexNo(mritemp,NULL); if(!mri) exit(1); } else if (strcmp(pdfname,"crs")==0) { printf("CRS \n"); if(mritemp == NULL){ printf("ERROR: need --temp with crs\n"); exit(1); } mri=MRIcrs(mritemp,NULL); if(!mri) exit(1); } else { printf("ERROR: pdf %s unrecognized, must be gaussian, uniform,\n" "const, delta, checker\n", pdfname); exit(1); } if (tempid != NULL) { MRIcopyHeader(mritemp,mri); mri->type = MRI_FLOAT; // Override if(nframes > 0) mri->nframes = nframes; if(TR > 0) mri->tr = TR; } else { if(mri == NULL) { usage_exit(); } mri->xsize = res[0]; mri->ysize = res[1]; mri->zsize = res[2]; mri->tr = res[3]; mri->x_r = cdircos[0]; mri->x_a = cdircos[1]; mri->x_s = cdircos[2]; mri->y_r = rdircos[0]; mri->y_a = rdircos[1]; mri->y_s = rdircos[2]; mri->z_r = sdircos[0]; mri->z_a = sdircos[1]; mri->z_s = sdircos[2]; if(!usep0){ mri->c_r = cras[0]; mri->c_a = cras[1]; mri->c_s = cras[2]; } else MRIp0ToCRAS(mri, p0[0], p0[1], p0[2]); } if (gstd > 0) { if(!UseFFT){ printf("Smoothing\n"); MRIgaussianSmooth(mri, gstd, gmnnorm, mri); /* gmnnorm = 1 = normalize */ } else { printf("Smoothing with FFT \n"); mri2 = MRIcopy(mri,NULL); mri = MRI_fft_gaussian(mri2, mri, gstd, gmnnorm); /* gmnnorm = 1 = normalize */ } if (rescale) { printf("Rescaling\n"); if (strcmp(pdfname,"z")==0) RFrescale(mri,rfs,NULL,mri); if (strcmp(pdfname,"chi2")==0) RFrescale(mri,rfs,NULL,mri); if (strcmp(pdfname,"t")==0) RFrescale(mri,rfs,NULL,mri); if (strcmp(pdfname,"tr")==0) RFrescale(mri,rfs,NULL,mri); if (strcmp(pdfname,"F")==0) RFrescale(mri,rfs,NULL,mri); if (strcmp(pdfname,"Fr")==0) RFrescale(mri,rfs,NULL,mri); } } if(DoHSC){ // This multiplies each frame by a random number // between HSCMin HSCMax to simulate heteroscedastisity printf("Applying HSC %lf %lf\n",HSCMin,HSCMax); for(f=0; f < mri->nframes; f++){ rval = (HSCMax-HSCMin)*drand48() + HSCMin; if(debug) printf("%3d %lf\n",f,rval); for(c=0; c < mri->width; c ++){ for(r=0; r < mri->height; r ++){ for(s=0; s < mri->depth; s ++){ val = MRIgetVoxVal(mri,c,r,s,f); MRIsetVoxVal(mri,c,r,s,f,rval*val); } } } } } if(AddOffset) { printf("Adding offset\n"); offset = MRIread(tempid); if(offset == NULL) exit(1); if(OffsetFrame == -1) OffsetFrame = nint(offset->nframes/2); printf("Offset frame %d\n",OffsetFrame); mritmp = fMRIframe(offset, OffsetFrame, NULL); if(mritmp == NULL) exit(1); MRIfree(&offset); offset = mritmp; fMRIaddOffset(mri, offset, NULL, mri); } if(SpikeTP > 0){ printf("Spiking time point %d\n",SpikeTP); for(c=0; c < mri->width; c ++){ for(r=0; r < mri->height; r ++){ for(s=0; s < mri->depth; s ++){ MRIsetVoxVal(mri,c,r,s,SpikeTP,1e9); } } } } if(DoAbs){ printf("Computing absolute value\n"); MRIabs(mri,mri); } if(!NoOutput){ printf("Saving\n"); if(!DoCurv) MRIwriteAnyFormat(mri,volid,volfmt,-1,NULL); else { printf("Saving in curv format\n"); MRIScopyMRI(surf, mri, 0, "curv"); MRISwriteCurvature(surf,volid); } } if(sum2file){ val = MRIsum2All(mri); fp = fopen(sum2file,"w"); if(fp == NULL){ printf("ERROR: opening %s\n",sum2file); exit(1); } printf("sum2all: %20.10lf\n",val); printf("vrf: %20.10lf\n",1/val); fprintf(fp,"%20.10lf\n",val); } return(0); }
/*---------------------------------------------------------------*/ int main(int argc, char *argv[]) { int nargs,n; MRIS *SurfReg[100]; MRI *SrcVal, *TrgVal; char *base; nargs = handle_version_option (argc, argv, vcid, "$Name: $"); 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); printf("Loading %s\n",SrcValFile); SrcVal = MRIread(SrcValFile); if(SrcVal==NULL) exit(1); if(DoSynthRand) { if (SynthSeed < 0) SynthSeed = PDFtodSeed(); printf("INFO: synthesizing, seed = %d\n",SynthSeed); srand48(SynthSeed); MRIrandn(SrcVal->width, SrcVal->height, SrcVal->depth, SrcVal->nframes,0, 1, SrcVal); } if(DoSynthOnes != 0) { printf("INFO: filling input with all 1s\n"); MRIconst(SrcVal->width, SrcVal->height, SrcVal->depth, SrcVal->nframes, 1, SrcVal); } for(n=0; n<nsurfs; n++) { printf("%d Loading %s\n",n+1,SurfRegFile[n]); base = fio_basename(SurfRegFile[n],".tri"); if(strcmp(base,"ic7")==0) { // Have to do it this way to rescale. Need to find a better more robust way. printf(" reading as ico 7, rescaling radius to 100\n"); SurfReg[n] = ReadIcoByOrder(7, 100); } else SurfReg[n] = MRISread(SurfRegFile[n]); free(base); if(SurfReg[n]==NULL) exit(1); } TrgVal = MRISapplyReg(SrcVal, SurfReg, nsurfs,ReverseMapFlag,DoJac,UseHash); if(TrgVal == NULL) exit(1); printf("Writing %s\n",TrgValFile); MRIwrite(TrgVal,TrgValFile); printf("mris_apply_reg done\n"); return 0; }
/*---------------------------------------------------------------*/ int main(int argc, char *argv[]) { int nargs,n,err; MRIS *SurfReg[100]; MRI *SrcVal, *TrgVal; char *base; COLOR_TABLE *ctab=NULL; nargs = handle_version_option (argc, argv, vcid, "$Name: $"); 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); // Load in surface registrations for(n=0; n<nsurfs;n++){ printf("%d Loading %s\n",n+1,SurfRegFile[n]); base = fio_basename(SurfRegFile[n],".tri"); if(strcmp(base,"ic7")==0){ // Have to do it this way to rescale. Need to find a better more robust way. printf(" reading as ico 7, rescaling radius to 100\n"); SurfReg[n] = ReadIcoByOrder(7, 100); } else SurfReg[n] = MRISread(SurfRegFile[n]); free(base); if(SurfReg[n]==NULL) exit(1); } // Load in source data SrcVal = NULL; if(DoSynthRand) { if (SynthSeed < 0) SynthSeed = PDFtodSeed(); printf("INFO: synthesizing, seed = %d\n",SynthSeed); srand48(SynthSeed); MRIrandn(SrcVal->width, SrcVal->height, SrcVal->depth, SrcVal->nframes,0, 1, SrcVal); } else if(DoSynthOnes != 0) { printf("INFO: filling input with all 1s\n"); MRIconst(SrcVal->width, SrcVal->height, SrcVal->depth, SrcVal->nframes, 1, SrcVal); } else if(AnnotFile) { printf("Loading annotation %s\n",AnnotFile); err = MRISreadAnnotation(SurfReg[0], AnnotFile); if(err) exit(1); SrcVal = MRISannotIndex2Seg(SurfReg[0]); ctab = CTABdeepCopy(SurfReg[0]->ct); } else if(LabelFile) { LABEL *srclabel; printf("Loading label %s\n",LabelFile); srclabel = LabelRead(NULL, LabelFile); if(srclabel == NULL) exit(1); SrcVal = MRISlabel2Mask(SurfReg[0],srclabel,NULL); printf(" %d points in input label\n",srclabel->n_points); LabelFree(&srclabel); } else { printf("Loading %s\n",SrcValFile); SrcVal = MRIread(SrcValFile); if(SrcVal==NULL) exit(1); } // Apply registration to source TrgVal = MRISapplyReg(SrcVal, SurfReg, nsurfs, ReverseMapFlag, DoJac, UseHash); if(TrgVal == NULL) exit(1); // Save output if(AnnotFile){ printf("Converting to target annot\n"); err = MRISseg2annot(SurfReg[nsurfs-1],TrgVal,ctab); if(err) exit(1); printf("Writing %s\n",TrgValFile); MRISwriteAnnotation(SurfReg[nsurfs-1], TrgValFile); } else if(LabelFile){ LABEL *label; label = MRISmask2Label(SurfReg[nsurfs-1], TrgVal, 0, 10e-5); printf(" %d points in output label\n",label->n_points); err = LabelWrite(label,TrgValFile); if(err){ printf("ERROR: writing label file %s\n",TrgValFile); exit(1); } LabelFree(&label); } else{ printf("Writing %s\n",TrgValFile); MRIwrite(TrgVal,TrgValFile); } printf("mris_apply_reg done\n"); return 0; }