int main(int argc, char *argv[]){ if(!argv[1]) { printf("\n./cutTree <Tree Name> <Nr. Cuts> <Mask Name> <Output Name>\n"); return 0; } printf("\nLoading the dendrogram ... \n"); FILE *treeFile = fopen(argv[1], "r"); int goodValues; fscanf(treeFile, "%i", &goodValues); Node *tree = malloc((goodValues-1)*sizeof(Node)); for(int i=0; i<goodValues-1; i++){ fscanf(treeFile, "%i %i %lf", &(tree[i].left), &(tree[i].right), &(tree[i].distance)); } fclose(treeFile); printf("\nCutting the dendrogram ...\n"); int * clusterid; int nr_clusters = atoi(argv[2]); clusterid = (int*)malloc(goodValues*sizeof(int)); cuttree (goodValues, tree, nr_clusters, clusterid); free(tree); printf("\nLoading mask template ... \n"); FSLIO *fslio; fslio = FslInit(); void *buffer = FslReadAllVolumes(fslio, argv[3]); double ***mask = FslGetVolumeAsScaledDouble(fslio, 0); FslClose(fslio); printf("\nSaving the image ...\n"); nifti_image *nim = nifti_image_read(argv[3], 1); int nx = nim->nx; int ny = nim->ny; int nz = nim->nz; short *pData = (short *)nim->data; int c = 0; int c2 = 0; for(int k=0;k<nz;k++) { for(int j=0;j<ny;j++) { for(int i=0;i<nx;i++) { if ( mask[k][j][i] != 0 ) { pData[c2] = clusterid[c]+1; c++; c2++; } else { pData[c2] = 0; c2++; } }}} nim->data = (short *)pData; int ret = nifti_set_filenames(nim, argv[4], 0, 1); nifti_image_write( nim ); nifti_image_free( nim ); free(clusterid); return 0; }
int main(int argc, char * argv[]) { FSLIO *fslio; void *buffer; char *f1name; double ***vol; int x,y,z,t; /*** process commandline parameters */ if (argc < 2) { pusage(argv[0]); exit(1); } /************************* PRINT ***************************/ if (!strncmp(argv[1],"print",5)) { if (argc != 3) { fprintf(stderr, "\nError, print command takes one parameter: print <dataset>\n"); exit(1); } f1name = argv[2]; /** open nifti dataset */ fslio = FslInit(); buffer = FslReadAllVolumes(fslio,f1name); if (buffer == NULL) { fprintf(stderr, "\nError opening and reading %s.\n",f1name); exit(1); } nifti_image_infodump(fslio->niftiptr); exit(0); } /************************* PEEK ***************************/ if (!strncmp(argv[1],"peek",4)) { if (argc != 7) { fprintf(stderr, "\nError, peek command takes five parameters: peek <dataset> X Y Z T\n"); exit(1); } /**** get inputs */ f1name = argv[2]; x = atoi(argv[3]); y = atoi(argv[4]); z = atoi(argv[5]); t = atoi(argv[6]); /** open nifti dataset header */ fslio = FslReadHeader(f1name); if (fslio == NULL) { fprintf(stderr, "\nError, could not read header info for %s.\n",f1name); exit(1); } /**** check inputs */ if ( (x<0) || (x>=fslio->niftiptr->nx) ) { fprintf(stderr, "\nError: x index (%d) out of range [0..%d]\n",x,fslio->niftiptr->nx-1); exit(1); } if ( (y<0) || (y>=fslio->niftiptr->ny) ) { fprintf(stderr, "\nError: y index (%d) out of range [0..%d]\n",y,fslio->niftiptr->ny-1); exit(1); } if ( (z<0) || (z>=fslio->niftiptr->nz) ) { fprintf(stderr, "\nError: z index (%d) out of range [0..%d]\n",z,fslio->niftiptr->nz-1); exit(1); } if ( (t<0) || (t>=fslio->niftiptr->nt) ) { fprintf(stderr, "\nError: t index (%d) out of range [0..%d]\n",t,fslio->niftiptr->nt-1); exit(1); } /*** get volume data as scaled doubles */ vol = FslGetVolumeAsScaledDouble(fslio,t); if (vol == NULL) { fprintf(stderr, "\nError accessing %s\n",f1name); exit(1); } else { fprintf(stderr, "\nLocation %d %d %d %d: %.4f\n",x,y,z,t,vol[z][y][x]); exit(0); } } fprintf(stderr, "\nError, unrecognized command %s\n",argv[1]); pusage(argv[0]); exit(1); }