Ejemplo n.º 1
0
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;			
}
Ejemplo n.º 2
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);
}