Changeset 27760 for trunk/ippToPsps/src/ippToPspsBatchDetection.c
- Timestamp:
- Apr 23, 2010, 2:19:21 PM (16 years ago)
- File:
-
- 1 edited
-
trunk/ippToPsps/src/ippToPspsBatchDetection.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippToPsps/src/ippToPspsBatchDetection.c
r27700 r27760 14 14 15 15 // Gets flux from magnitude 16 static __inline float ippToPsps_getFlux(const float zeroPoint, const float exposureTime, const float magnitude) {16 static __inline bool ippToPsps_getFlux(const float zeroPoint, const float exposureTime, const float magnitude, float* flux) { 17 17 18 18 // use uncalibrated instrumental flux 19 floatflux = powf(10.0, -0.4*magnitude) / exposureTime;19 *flux = powf(10.0, -0.4*magnitude) / exposureTime; 20 20 21 21 // use calibrated flux in Janskys, where 3631 Jy is the zero point flux for the filter: constant over all filters because we're using AB magnitudes … … 23 23 24 24 // printf("mag=%f\texpTime=%f\tzeroPoint=%f\tflux=%f\n", magnitude, exposureTime, zeroPoint, flux); 25 return isnormal(flux) ? flux : -999.0;25 return (isnormal(*flux) && *flux > 0.0) ? true : false; 26 26 } 27 27 … … 151 151 short nOta = 0; 152 152 long i; 153 bool duplicate;153 bool isDuplicate; 154 154 uint32_t numOfDuplicates; 155 uint32_t numInvalidFlux; 155 156 long numDetectionsOut; 156 long duplicateList[MAXDETECT];157 long removeList[MAXDETECT]; 157 158 long thisObjId; 158 159 … … 252 253 // both DVO detections and smf detections should increment. however, there may be gaps in smf and 'invalid' rows in dvo 253 254 numOfDuplicates = 0; 255 numInvalidFlux = 0; 254 256 for (long s = 0; s<nDet; s++) { 257 258 isDuplicate = false; 255 259 256 260 // count jumps in smf file … … 266 270 267 271 // TODO HACK duplicates bug - don't include any duplicates 268 duplicate = false;269 272 thisObjId = dvoDetections[d].ave.extID; 270 273 for (i=0; i<totalDetections; i++) { 271 274 if (thisObjId == objID[i]) { 272 duplicate = true; 273 duplicateList[numOfDuplicates] = s+1; 275 removeList[numOfDuplicates+numInvalidFlux] = s+1; 274 276 numOfDuplicates++; 277 isDuplicate=true; 275 278 break; 276 279 } … … 283 286 imageID[s] = pspsImageId; 284 287 obsTimes[s] = obsTime; 285 instFlux[s] = ippToPsps_getFlux(zeroPoint, exposureTime, instMag[s]); 286 instFluxErr[s] = ippToPsps_getFlux(zeroPoint, exposureTime, instMagErr[s]); 287 peakFlux[s] = ippToPsps_getFlux(zeroPoint, exposureTime, peakMag[s]); 288 ippToPsps_getFlux(zeroPoint, exposureTime, instMagErr[s], &instFluxErr[s]); 289 ippToPsps_getFlux(zeroPoint, exposureTime, peakMag[s], &peakFlux[s]); 290 291 // check for invalid flux values (if not already labelled as a duplicate) 292 if (!ippToPsps_getFlux(zeroPoint, exposureTime, instMag[s], &instFlux[s]) && !isDuplicate) { 293 removeList[numOfDuplicates+numInvalidFlux] = s+1; 294 numInvalidFlux++; 295 } 288 296 289 297 // store max/min objID … … 304 312 305 313 // write number of rows (detections) to ImageMeta 306 numDetectionsOut = totalDetections - numOfDuplicates ;314 numDetectionsOut = totalDetections - numOfDuplicates - numInvalidFlux; 307 315 fits_write_col(this->fitsOut, TLONG, 10, 1, 1, 1, &numDetectionsOut, &status); 308 316 … … 321 329 fits_write_col(this->fitsOut, TFLOAT, DETECTION_PEAKADU, 1, 1, nDet, peakFlux, &status); 322 330 fits_write_col(this->fitsOut, TSTRING, DETECTION_ASSOCDATE, 1, 1, nDet, assocDate, &status); 323 if (numOfDuplicates ) fits_delete_rowlist(this->fitsOut, duplicateList, numOfDuplicates, &status);331 if (numOfDuplicates||numInvalidFlux) fits_delete_rowlist(this->fitsOut, removeList, numOfDuplicates+numInvalidFlux, &status); 324 332 325 333 // skinny object … … 327 335 fits_write_col(this->fitsOut, TLONGLONG, SKINNYOBJECT_OBJID, 1, 1, nDet, objID, &status); 328 336 fits_write_col(this->fitsOut, TLONGLONG, SKINNYOBJECT_IPPOBJID, 1, 1, nDet, ippObjID, &status); 329 if (numOfDuplicates ) fits_delete_rowlist(this->fitsOut, duplicateList, numOfDuplicates, &status);337 if (numOfDuplicates||numInvalidFlux) fits_delete_rowlist(this->fitsOut, removeList, numOfDuplicates+numInvalidFlux, &status); 330 338 331 339 // object calibration color … … 334 342 fits_write_col(this->fitsOut, TLONGLONG, OBJECTCALCOLOR_IPPOBJID, 1, 1, nDet, ippObjID, &status); 335 343 fits_write_col(this->fitsOut, TBYTE, OBJECTCALCOLOR_FILTERID, 1, 1, nDet, filterIDs, &status); 336 if (numOfDuplicates ) fits_delete_rowlist(this->fitsOut, duplicateList, numOfDuplicates, &status);344 if (numOfDuplicates||numInvalidFlux) fits_delete_rowlist(this->fitsOut, removeList, numOfDuplicates+numInvalidFlux, &status); 337 345 338 346 psLogMsg("ippToPsps", PS_LOG_INFO, 339 " ___________________________________________________________________\n"340 "| Extension | Rows in | Rows out | Missing from DVO | Duplicate IDs | \n"341 "| %s | %5ld | %5ld | %5d | %5d | \n",342 extensionName, nDet, numDetectionsOut, unmatched, numOfDuplicates );347 "+-----------+---------+----------+------------------+---------------+--------------+\n" 348 "| Extension | Rows in | Rows out | Missing from DVO | Duplicate IDs | Invalid Flux |\n" 349 "| %s | %5ld | %5ld | %5d | %5d | %5d |\n", 350 extensionName, nDet, numDetectionsOut, unmatched, numOfDuplicates, numInvalidFlux); 343 351 344 352 if (dvoDetections!= NULL) dvoFree(dvoDetections);
Note:
See TracChangeset
for help on using the changeset viewer.
