#include #include #include #include #include #include #include #include #include #include using namespace std; #define MAX_ROOTPATH_LEN 100 #define MAX_FULLPATH_LEN 150 #define MAX_OBJECTS 64000 //max objects per frame #define MAX_NUM_SETS 100 //maximum number of image sets to process #define MAX_FILESIZE 2252800 // maximum size (in bytes) of image files allowed; 2200kB #define PATH_BEADS "PROC/BEAD/" #define PATH_DATASET "PROC/DATASETS/" #define DEBUG 1 int main(int argc, char *argv[]){ char raw_fn[MAX_FULLPATH_LEN], dataset_fn[MAX_FULLPATH_LEN], obj_count_fn[MAX_FULLPATH_LEN], align_fn[MAX_FULLPATH_LEN], bead_fn[MAX_FULLPATH_LEN], object_dir[MAX_FULLPATH_LEN], ROOT_PATH[MAX_ROOTPATH_LEN], curr_fn_index[5], curr_set_index[4], curr_obj_count[20], text[500], dataset_name[MAX_FULLPATH_LEN], error_string[200], even_odd=0; int num_frames, num_sets, set_index[MAX_NUM_SETS], curr_set, field_size, success, curr_frame, output_thresh, output_flag=0; FILE *infile[MAX_NUM_SETS], *outfile, *outfile2, *current_file; //short unsigned int input_frame=0, short unsigned int input_frame=0, input_set=0, input_size=0, input_centroid_x=0, input_centroid_y=0, input_border=0, input_value=0, input_border_temp=0; // short unsigned int input_frame[10]; field_size = sizeof(unsigned short int); //****************** Parse command-line arguments ********************** // strcpy(ROOT_PATH, argv[1]); strcpy(dataset_name, argv[2]); num_sets = argc - 4; output_thresh = atoi(argv[3]); // //********************************************************************** //********** Open input bead files and output dataset files ************ // #ifdef DEBUG fprintf(stderr, "Opening input bead files and output dataset file (%d sets).\n",num_sets); #endif // Generate filename for current output (dataset) file strcpy(dataset_fn, ""); strcat(dataset_fn, ROOT_PATH); strcat(dataset_fn, PATH_DATASET); strcat(dataset_fn, dataset_name); strcat(dataset_fn, ".dataset"); #ifdef DEBUG fprintf(stderr, "Opening file %s for output: ", dataset_fn); #endif if((outfile = fopen(dataset_fn, "w")) == NULL){ fprintf(stderr, "ERROR OPENING OUTFILE.\n"); exit(42); } #ifdef DEBUG fprintf(stderr, "%s\n", strerror(errno)); #endif strcat(dataset_fn, "2"); #ifdef DEBUG fprintf(stderr, "Opening file %s for output: ", dataset_fn); #endif if((outfile2 = fopen(dataset_fn, "w")) == NULL){ fprintf(stderr, "ERROR OPENING OUTFILE2.\n"); exit(42); } #ifdef DEBUG fprintf(stderr, "%s\n", strerror(errno)); #endif for(curr_set = 0; curr_set < num_sets; curr_set++){ set_index[curr_set] = atoi(argv[curr_set+4]); //set indices come from cmd-line args sprintf(curr_set_index, "%03d", *(set_index + curr_set)); //convert to 0-padded 4-digit // Generate filename for current input (bead) file strcpy(bead_fn, ""); strcat(bead_fn, ROOT_PATH); strcat(bead_fn, PATH_BEADS); strcat(bead_fn, curr_set_index); strcat(bead_fn, ".beads"); // Open files #ifdef DEBUG fprintf(stderr, "Opening file %s for input: ", bead_fn); #endif if((*(infile + curr_set) = fopen(bead_fn, "r")) == NULL){ fprintf(stderr, "ERROR OPENING INFILE.\n"); exit(42); } #ifdef DEBUG fprintf(stderr, "%s\n", strerror(errno)); #endif } // //********************************************************************** curr_frame = 0; while(!feof(*infile)){ /* if((success=fread(&input_frame, field_size, 1, *infile)) < 1){ fprintf(stderr, "ERROR reading output_frame from bead file %4.0d", curr_set); exit(42); }*/ if((success=fread(&input_frame, field_size, 1, *infile)) < 1){ break; } #ifdef DEBUG if(curr_frame + 1 < input_frame){ fprintf(stderr, "Current frame %d\n", curr_frame + 2); curr_frame ++; } #endif if((success=fread(&input_set, field_size, 1, *infile)) < 1){ fprintf(stderr, "ERROR reading input_set from bead file %4.0d", curr_set); exit(42); } if((success=fread(&input_size, field_size, 1, *infile)) < 1){ fprintf(stderr, "ERROR reading input_size from bead file %4.0d", curr_set); exit(42); } if((success=fread(&input_centroid_x, field_size, 1, *infile)) < 1){ fprintf(stderr, "ERROR reading input_centroid_x from bead file %4.0d", curr_set); exit(42); } if((success=fread(&input_centroid_y, field_size, 1, *infile)) < 1){ fprintf(stderr, "ERROR reading input_centroid_y from bead file %4.0d", curr_set); exit(42); } if((success=fread(&input_border, field_size, 1, *infile)) < 1){ fprintf(stderr, "ERROR reading input_border from bead file %4.0d", curr_set); exit(42); } if((success=fread(&input_value, field_size, 1, *infile)) < 1){ fprintf(stderr, "ERROR reading input_value from bead file %4.0d", curr_set); exit(42); } if(input_value >= output_thresh){ output_flag = 1; } else{ output_flag = 0; } if(output_flag == 1){ if(even_odd){ current_file = outfile; even_odd=0; } else{ current_file = outfile2; even_odd=1; } if((success=fwrite(&input_frame, field_size, 1, current_file)) < 1){ fprintf(stderr, "ERROR writing input_frame to bead file %4.0d", curr_set); exit(42); } if((success=fwrite(&input_set, field_size, 1, current_file)) < 1){ fprintf(stderr, "ERROR writing input_set to bead file %4.0d", curr_set); exit(42); } if((success=fwrite(&input_size, field_size, 1, current_file)) < 1){ fprintf(stderr, "ERROR writing input_size to bead file %4.0d", curr_set); exit(42); } if((success=fwrite(&input_centroid_x, field_size, 1, current_file)) < 1){ fprintf(stderr, "ERROR writing input_centroid_x to bead file %4.0d", curr_set); exit(42); } if((success=fwrite(&input_centroid_y, field_size, 1, current_file)) < 1){ fprintf(stderr, "ERROR writing input_centroid_y to bead file %4.0d", curr_set); exit(42); } if((success=fwrite(&input_value, field_size, 1, current_file)) < 1){ fprintf(stderr, "ERROR writing input_value to bead file %4.0d", curr_set); exit(42); } } for(curr_set = 1; curr_set < num_sets; curr_set++){ if((success=fread(&input_value, field_size, 1, *(infile + curr_set))) < 1){ fprintf(stderr, "ERROR reading input_value from bead file %4.0d", curr_set); exit(42); } if((success=fread(&input_value, field_size, 1, *(infile + curr_set))) < 1){ fprintf(stderr, "ERROR reading input_value from bead file %4.0d", curr_set); exit(42); } if((success=fread(&input_value, field_size, 1, *(infile + curr_set))) < 1){ fprintf(stderr, "ERROR reading input_value from bead file %4.0d", curr_set); exit(42); } if((success=fread(&input_value, field_size, 1, *(infile + curr_set))) < 1){ fprintf(stderr, "ERROR reading input_value from bead file %4.0d", curr_set); exit(42); } if((success=fread(&input_value, field_size, 1, *(infile + curr_set))) < 1){ fprintf(stderr, "ERROR reading input_value from bead file %4.0d", curr_set); exit(42); } if((success=fread(&input_border_temp, field_size, 1, *(infile + curr_set))) < 1){ fprintf(stderr, "ERROR reading input_border from bead file %4.0d", curr_set); exit(42); } input_border = input_border + input_border_temp; if((success=fread(&input_value, field_size, 1, *(infile + curr_set))) < 1){ fprintf(stderr, "ERROR reading input_value from bead file %4.0d", curr_set); exit(42); } if(output_flag == 1){ if((success=fwrite(&input_value, field_size, 1, current_file)) < 1){ fprintf(stderr, "ERROR writing input_value to bead file %4.0d", curr_set); exit(42); } } }//end for(curr_set) if(output_flag == 1){ if((success=fwrite(&input_border, field_size, 1, current_file)) < 1){ fprintf(stderr, "ERROR writing input_value to bead file %4.0d", curr_set); exit(42); } } }//end while(!eof) for(curr_set = 0; curr_set < num_sets; curr_set++){ fclose(*(infile + curr_set)); } fclose(outfile); fclose(outfile2); // //********************************************************************** }