- Timestamp:
- Nov 22, 2012, 1:34:12 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delete_photcodes.c
r34684 r34685 1 1 # include "delstar.h" 2 2 3 void delete_ times (FITS_DB *db) {3 void delete_photcodes (FITS_DB *db, photcodes, Nphotcodes) { 4 4 5 5 int found, code; 6 6 off_t i, j, k, n; 7 off_t Nimage, Nimlist;8 7 off_t Nregions, NREGIONS; 9 8 off_t *imlist; 10 9 SkyList *skylist, *skyset; 11 10 SkyTable *sky; 12 Image *image;13 11 Catalog catalog; 14 12 13 // xxx where does this go? 15 14 photcodesDrop = ParsePhotcodeList (PHOTCODE_LIST, &NphotcodesDrop, FALSE); 16 15 … … 23 22 24 23 // delete images with these photcodes 25 delete_photcodes_images (db, photcodesDrop, NphotcodesDrop);26 27 // delete images with these photcodes28 24 delete_photcodes_catalogs (db, photcodesDrop, NphotcodesDrop); 29 25 … … 32 28 } 33 29 34 void delete_photcodes_catalogs (skylist, photcodesDrop, NphotcodesDrop) {35 36 // XXX need to decide how to determine PARALLEL mode...30 void delete_photcodes_catalogs (skylist, hostID, photcodesDrop, NphotcodesDrop) { 31 32 // launch the remote jobs 37 33 if (PARALLEL && !hostID) { 38 delete_photcodes_parallel (skylist, photcodesDrop, NphotcodesDrop);39 return TRUE;34 int status = delete_photcodes_parallel (skylist, photcodesDrop, NphotcodesDrop); 35 return status; 40 36 } 41 37 … … 46 42 if (!HostTableTestHost(skylist[0].regions[i], hostID)) continue; 47 43 48 // set up the basic catalog info49 44 // set up the basic catalog info 50 45 char hostfile[1024]; … … 68 63 } 69 64 70 find_matches (&catalog, code, START, END);65 delete_photcodes_from_catalog (&catalog, photcodes, Nphotcodes); 71 66 dvo_catalog_save (&catalog, VERBOSE); 72 67 dvo_catalog_unlock (&catalog); … … 98 93 99 94 // options / arguments that can affect relphot_client -update-objects: 100 // VERBOSE, VERBOSE2 101 // KEEP_UBERCAL 102 // RESET (-reset) 103 // TimeSelect -time 104 // DophotSelect 105 // (note that psfQF is applied rigidly at 0.85, as is the galaxy test) 106 // MAG_LIM 107 // SIGMA_LIM 108 // ImagSelect, ImagMin, ImagMax 109 // MaxDensityUse, MaxDensityValue 95 // VERBOSE 110 96 111 97 char command[1024]; 112 98 snprintf (command, 1024, "delstar_client -hostID %d -D CATDIR %s -hostdir %s -region %f %f %f %f -photcodes %s", 113 table->hosts[i].hostID, CATDIR, table->hosts[i].pathname, UserPatch.Rmin, UserPatch.Rmax, UserPatch.Dmin, UserPatch.Dmax, PHOTCODE_LIST); 99 table->hosts[i].hostID, CATDIR, table->hosts[i].pathname, 100 UserPatch.Rmin, UserPatch.Rmax, UserPatch.Dmin, UserPatch.Dmax, 101 PHOTCODE_LIST); 114 102 115 103 char tmpline[1024]; … … 123 111 int status = system (command); 124 112 if (status) { 125 fprintf (stderr, "ERROR running relphot_client\n");113 fprintf (stderr, "ERROR running delstar_client\n"); 126 114 exit (2); 127 115 } … … 148 136 return TRUE; 149 137 } 138 139 // sort the measure Sequence based on the average Sequence entries 140 void SortAveMeasMatch (off_t *MEAS, off_t *AVE, off_t N) { 141 142 # define SWAPFUNC(A,B){ off_t tmp_meas; off_t tmp_ave; \ 143 tmp_meas = MEAS[A]; MEAS[A] = MEAS[B]; MEAS[B] = tmp_meas; \ 144 tmp_ave = AVE[A]; AVE[A] = AVE[B]; AVE[B] = tmp_ave; \ 145 } 146 # define COMPARE(A,B)(AVE[A] < AVE[B]) 147 OHANA_SORT (N, COMPARE, SWAPFUNC); 148 # undef SWAPFUNC 149 # undef COMPARE 150 } 151 152 int delete_photcodes_catalog (Catalog *catalog, photcodes, Nphotcodes) { 153 154 off_t i, j, N, currentAve; 155 156 off_t *measureSeq = NULL; 157 off_t *averageSeq = NULL; 158 Measure *measureTMP = NULL; 159 160 /* internal counters */ 161 off_t Nmeasure = catalog[0].Nmeasure; 162 off_t Naverage = catalog[0].Naverage; 163 164 Measure *measure = catalog[0].measure; 165 Average *average = catalog[0].average; 166 167 if (VERBOSE) fprintf (stderr, "starting with Nave, Nmeas: "OFF_T_FMT" "OFF_T_FMT"\n", catalog[0].Naverage, catalog[0]Nmeasure); 168 169 // we have a table of average objects and an unsorted table of measurements. each measurement 170 // has a reference to the average object sequence (as well as an ID) 171 // measure[i].averef -> average[averef] 172 // measure[i].objID = average[averef].objID 173 // measure[i].catID = average[averef].catID 174 175 // we want a sorted measure array with all averef entries in sequence, skipping the entries which match our criteria 176 177 // arrays 178 ALLOCATE (measureDrop, off_t, Nmeasure); 179 ALLOCATE (measureSeqRaw, off_t, Nmeasure); 180 ALLOCATE (measureSeqOut, off_t, Nmeasure); 181 ALLOCATE (measureAveRaw, off_t, Nmeasure); 182 ALLOCATE (averageNmeas, off_t, Naverage); 183 ALLOCATE (averageDmeas, off_t, Naverage); 184 ALLOCATE (averageSeqOut, off_t, Naverage); 185 ALLOCATE (averageRefOut, off_t, Naverage); 186 ALLOCATE (measureAveOut, off_t, NmeasOut); 187 188 // mark the measures to be dropped 189 for (i = 0; i < Nmeasure; i++) { 190 int drop = FALSE; 191 for (j = 0; !drop && (j < Nphotcodes); j++) { 192 drop |= (photcodes[j].code == measure[i].photcode); 193 } 194 measureDrop[i] = drop; 195 } 196 197 // set up the measure sequence lists 198 for (i = 0; i < Nmeasure; i++) { 199 measureSeqRaw[i] = i; 200 measureAveRaw[i] = measure[i].averef; 201 } 202 // sort measureSeqRaw and measureAveRaw in order of measureAveRaw 203 SortAveMeasMatch(measureSeqRaw, measureAveRaw, Nmeasure); 204 205 // generate the measureSeqOut array 206 off_t NmeasOut = 0; 207 for (i = 0; i < Nmeasure; i++) { 208 j = measureSeqRaw[i]; 209 if (measureDrop[j]) continue; 210 measureSeqOut[NmeasOut] = j; 211 measureRefOut[j] = NmeasOut; 212 NmeasOut ++; 213 } 214 // n = measureSeqOut[i] : measureOut[i] = measure[n] (i = 0 -- NmeasOut, n = 0 -- Nmeasure) 215 // n = measureRefOut[i] : measureOut[n] = measure[i] 216 217 // count the number of measures for each averef 218 off_t N = 0; 219 off_t D = -1; 220 currentAve = measureAveRaw[0]; 221 for (i = 0; i < Nmeasure; i++) { 222 if (measureAveRaw[i] != currentAve) { 223 // we have hit the next entry in the list 224 averageNmeas[currentAve] = N; // number of measures 225 averageDmeas[currentAve] = D; // first measure 226 N = 0; 227 D = -1; 228 currentAve = measureAveRaw[i]; 229 } 230 j = measureSeqRaw[i]; 231 if (measureDrop[j]) continue; 232 N++; 233 if (D == -1) { 234 // first valid measureOut for this averef 235 D = measureRefOut[j]; 236 } 237 } 238 averageNmeas[currentAve] = N; // number of measures 239 averageDmeas[currentAve] = D; // first measure 240 241 // generate the new average sequence, skipping entries with no measurements 242 int NaveOut = 0; 243 for (i = 0; i < Naverage; i++) { 244 if (averageNmeas[i] == 0) continue; 245 averageSeqOut[Nave] = i; 246 averageRefOut[i] = Nave; 247 Nave ++; 248 } 249 // n = averageSeqOut[i] : averageOut[i] = average[n] (i = 0 -- NaveOut, n = 0 -- Naverage) 250 // n = averageRefOut[i] : averageOut[n] = average[i] 251 252 // generate the output averefs 253 for (i = 0; i < NmeasOut; i++) { 254 j = measureSeqOut[i]; // measure[j] = measureOut[i] 255 n = measureAveRaw[j]; // average[n] : measure[j] 256 N = averageRefOut[n]; // averageOut[N] = average[n]; 257 measureAveOut[i] = N; // measureOut[i].averef = measureAveOut[i] 258 } 259 260 // copy the (kept) measurements in the sorted order 261 ALLOCATE (measureOut, Measure, Nmeas); 262 for (i = 0; i < Nmeas; i++) { 263 j = measureSeqOut[i]; 264 measureOut[i] = measure[j]; 265 measureOut[i].averef = measureAveOut[i]; 266 } 267 268 // copy the (kept) average entries 269 ALLOCATE (averageOut, Average, Nave); 270 for (i = 0; i < Nave; i++) { 271 j = averageSeqOut[i]; 272 averageOut[i] = average[j]; 273 averageOut[i].Nmeasure = averageNmeas[j]; 274 averageOut[i].measureOffset = averageDmeas[j]; 275 } 276 277 // update the values of average.measureOffset and average.Nmeasure 278 FREE(measure); 279 FREE(average); 280 catalog[0].measure = measureOut; 281 catalog[0].average = averageOut; 282 283 // update catalog.Nmeasure and catalog.Naverage, double check 284 int NmeasureTotal = 0; 285 int measureOffsetOK = TRUE; 286 for (i = 0; i < Naverage; i++) { 287 NmeasureTotal += catalog[0].average[i].Nmeasure; 288 if (VERBOSE && !(NmeasureTotal <= catalog[0].Nmeasure)) { 289 fprintf (stderr, "too few measurements: %d %d %d\n", (int) i, NmeasureTotal, (int) catalog[0].Nmeasure); 290 } 291 measureOffsetOK &= (catalog[0].average[i].measureOffset < catalog[0].Nmeasure); 292 if (VERBOSE && !(catalog[0].average[i].measureOffset < catalog[0].Nmeasure)) { 293 fprintf (stderr, "offset too large: %d %d %d\n", (int) i, catalog[0].average[i].Nmeasure, (int) catalog[0].Nmeasure); 294 } 295 measureOffsetOK &= (catalog[0].average[i].measureOffset + catalog[0].average[i].Nmeasure <= catalog[0].Nmeasure); 296 if (VERBOSE && !(catalog[0].average[i].measureOffset + catalog[0].average[i].Nmeasure <= catalog[0].Nmeasure)) { 297 fprintf (stderr, "orrset + Nmeasure too large: %d + %d > %d %d\n", (int) i, catalog[0].average[i].measureOffset, catalog[0].average[i].Nmeasure, (int) catalog[0].Nmeasure); 298 } 299 m = catalog[0].average[i].measureOffset; 300 for (j = 0; j < catalog[0].average[i].Nmeasure; j++) { 301 averefOK &= (catalog[0].measure[m+j].averef == i); 302 if (VERBOSE && !(catalog[0].measure[m+j].averef == i)) { 303 fprintf (stderr, "averef broken: %d vs %d (measure %d)\n", (int) i, catalog[0].measure[m+j].averef, m+j); 304 } 305 } 306 } 307 308 if (!measureOffsetOK) { 309 fprintf (stderr, "ERROR: catalog %s has an invalid measureOffset\n", catalog[0].filename); 310 } 311 312 if (!averefOK) { 313 fprintf (stderr, "ERROR: catalog %s has invalid averefs\n", catalog[0].filename); 314 } 315 316 if (NmeasureTotal != catalog[0].Nmeasure) { 317 fprintf (stderr, "ERROR: catalog %s has an invalid Nmeasure\n", catalog[0].filename); 318 } 319 320 // MARKTIME(" match time %9.4f sec for %7lld measures, %6lld average\n", dtime, (long long) Nmeasure, (long long) Naverage); 321 322 catalog[0].sorted = TRUE; 323 324 FREE (measureDrop); 325 FREE (measureSeqRaw); 326 FREE (measureSeqOut); 327 FREE (measureAveRaw); 328 FREE (averageNmeas); 329 FREE (averageDmeas); 330 FREE (averageSeqOut); 331 FREE (averageRefOut); 332 FREE (measureAveOut); 333 334 return TRUE; 335 }
Note:
See TracChangeset
for help on using the changeset viewer.
