#include #include #include #include #include "galex_footprint.h" /* Read footprint */ Mask read_mask(char *mask_name) { int i; int nbr_convex = 0, nbr_halfspace; char line[max], line_bis[max]; char *token; char *delimiters = " \t\n" ; char *mask_type_test_convex; double x_h, y_h, z_h, c_h; FILE *mask_file; Mask mask; i=0; mask_file = fopen (mask_name,"r"); if(mask_file ==NULL) { fprintf(stderr,"Can't open file %s\n", mask_name); exit(1); } /* Get number of convexes */ while ( fgets (line,max,mask_file) != NULL ) { mask_type_test_convex = strstr(line,"CONVEX"); if(mask_type_test_convex != NULL) nbr_convex++; i++; } mask.nbr_convex = nbr_convex; mask.regions = region_new(nbr_convex); mask.nbr_halfspaces = (int*) malloc(nbr_convex*sizeof(int)); if(mask.nbr_halfspaces == NULL) { fprintf(stderr, "Memory allocation error\n"); } rewind(mask_file); /* Get number of halfspaces per convex */ nbr_convex = -1; while ( fgets (line,max,mask_file) != NULL ) { mask_type_test_convex = strstr(line,"CONVEX"); if(mask_type_test_convex != NULL) { /* Not first one */ if(nbr_convex != -1) { mask.nbr_halfspaces[nbr_convex] = nbr_halfspace; } nbr_halfspace = 0; nbr_convex++; } else { nbr_halfspace++; } } /* Last one */ mask.nbr_halfspaces[nbr_convex] = nbr_halfspace; rewind(mask_file); /* Actually read the convexes */ nbr_convex = -1; while ( fgets (line,max,mask_file) != NULL ) { if(strstr(line,"REGION") == NULL) { strcpy(line_bis,line); mask_type_test_convex = strstr(line,"CONVEX"); if(mask_type_test_convex != NULL) { nbr_convex++; convex_set(mask.regions->convexlist+nbr_convex, mask.nbr_halfspaces[nbr_convex]); nbr_halfspace = 0; } else { /* Break the line up into words */ token = strtok(line_bis, delimiters); while (token != NULL) { x_h = atof(token); token = strtok(NULL, delimiters); y_h = atof(token); token = strtok(NULL, delimiters); z_h = atof(token); token = strtok(NULL, delimiters); c_h = atof(token); halfspace_set(mask.regions->convexlist[nbr_convex].halfspacelist+nbr_halfspace, x_h, y_h, z_h, FALSE, c_h); token = strtok(NULL, delimiters); nbr_halfspace++; } } } } close(mask_file); return(mask); } /* Flag objects using mask footprint */ void flag_objects(char *file, Mask mask, int ra_col, int dec_col) { int i, iconvex, imax = MAX(ra_col, dec_col); char line[max], line_bis[max]; char *token; char *delimiters = " \t\n" ; char *cr = "\n" ; double ra, dec; double tol = 1e-10; point* p = point_new(0,0); int test_in; FILE *in; in = fopen (file,"r"); if(in ==NULL) { fprintf(stderr,"Can't open file %s\n", file); exit(1); } while( fgets (line,max,in) != NULL ) { strcpy(line_bis,line); token = strtok(line_bis, delimiters); i = 0; /* Get ra and dec */ while(i<=imax) /* while (token != NULL) */ { if(i == ra_col) ra = atof(token); if(i == dec_col) dec = atof(token); token = strtok(NULL, delimiters); i++; } p = point_set(p, ra, dec); /* Loop on convexes */ iconvex = 0; test_in = 0; while(iconvex < mask.nbr_convex) { test_in = convex_covers(mask.regions->convexlist+iconvex,p,tol); if(test_in == 1) break; iconvex++; } token = strtok(line, cr); printf("%s\t%d\n",token, test_in); } fclose(in); } /* Free memory for mask */ void delete_mask(Mask mask) { free(mask.nbr_halfspaces); region_free(mask.regions); }