Changeset 28003 for branches/pap/ippToPsps/src/ippToPspsBatchDetection.c
- Timestamp:
- May 18, 2010, 12:49:05 PM (16 years ago)
- Location:
- branches/pap
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
ippToPsps/src/ippToPspsBatchDetection.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/pap
- Property svn:mergeinfo changed
-
branches/pap/ippToPsps/src/ippToPspsBatchDetection.c
r27700 r28003 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 (!isfinite(*flux) || *flux < 0.000001) ? false : true; 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 … … 217 218 fits_write_col(this->fitsOut, TLONG, IMAGEMETA_FRAMEID, 1, 1, 1, &this->expId, &status); 218 219 fits_write_col(this->fitsOut, TSHORT, IMAGEMETA_CCDID, 1, 1, 1, &pImage->ccdnum, &status); 219 // fits_write_col(this->fitsOut, TLONG, IMAGEMETA_PHOTOCALID, 1, 1, 1, &pImage->photcode, &status); TODO220 fits_write_col(this->fitsOut, TLONG, IMAGEMETA_PHOTOCALID, 1, 1, 1, &pImage->photcode, &status); 220 221 fits_write_col(this->fitsOut, TBYTE, IMAGEMETA_FILTERID, 1, 1, 1, &filterID, &status); 221 222 fits_write_col(this->fitsOut, TFLOAT, IMAGEMETA_PHOTOSCAT, 1, 1, 1, &zptObs, &status); … … 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 289 ippToPsps_getFlux(zeroPoint, exposureTime, instMagErr[s], &instFluxErr[s]); 290 291 // check for invalid flux values (if not already labelled as a duplicate) 292 if ((!ippToPsps_getFlux(zeroPoint, exposureTime, peakMag[s], &peakFlux[s]) || 293 !ippToPsps_getFlux(zeroPoint, exposureTime, instMag[s], &instFlux[s])) && !isDuplicate) { 294 removeList[numOfDuplicates+numInvalidFlux] = s+1; 295 numInvalidFlux++; 296 } 288 297 289 298 // store max/min objID … … 304 313 305 314 // write number of rows (detections) to ImageMeta 306 numDetectionsOut = totalDetections - numOfDuplicates ;307 fits_write_col(this->fitsOut, TLONG, 10, 1, 1, 1, &numDetectionsOut, &status);315 numDetectionsOut = totalDetections - numOfDuplicates - numInvalidFlux; 316 fits_write_col(this->fitsOut, TLONG, IMAGEMETA_NDETECT, 1, 1, 1, &numDetectionsOut, &status); 308 317 309 318 // detections … … 321 330 fits_write_col(this->fitsOut, TFLOAT, DETECTION_PEAKADU, 1, 1, nDet, peakFlux, &status); 322 331 fits_write_col(this->fitsOut, TSTRING, DETECTION_ASSOCDATE, 1, 1, nDet, assocDate, &status); 323 if (numOfDuplicates ) fits_delete_rowlist(this->fitsOut, duplicateList, numOfDuplicates, &status);332 if (numOfDuplicates||numInvalidFlux) fits_delete_rowlist(this->fitsOut, removeList, numOfDuplicates+numInvalidFlux, &status); 324 333 325 334 // skinny object … … 327 336 fits_write_col(this->fitsOut, TLONGLONG, SKINNYOBJECT_OBJID, 1, 1, nDet, objID, &status); 328 337 fits_write_col(this->fitsOut, TLONGLONG, SKINNYOBJECT_IPPOBJID, 1, 1, nDet, ippObjID, &status); 329 if (numOfDuplicates ) fits_delete_rowlist(this->fitsOut, duplicateList, numOfDuplicates, &status);338 if (numOfDuplicates||numInvalidFlux) fits_delete_rowlist(this->fitsOut, removeList, numOfDuplicates+numInvalidFlux, &status); 330 339 331 340 // object calibration color … … 334 343 fits_write_col(this->fitsOut, TLONGLONG, OBJECTCALCOLOR_IPPOBJID, 1, 1, nDet, ippObjID, &status); 335 344 fits_write_col(this->fitsOut, TBYTE, OBJECTCALCOLOR_FILTERID, 1, 1, nDet, filterIDs, &status); 336 if (numOfDuplicates ) fits_delete_rowlist(this->fitsOut, duplicateList, numOfDuplicates, &status);345 if (numOfDuplicates||numInvalidFlux) fits_delete_rowlist(this->fitsOut, removeList, numOfDuplicates+numInvalidFlux, &status); 337 346 338 347 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 );348 "+-----------+---------+----------+------------------+---------------+--------------+\n" 349 "| Extension | Rows in | Rows out | Missing from DVO | Duplicate IDs | Invalid Flux |\n" 350 "| %s | %5ld | %5ld | %5d | %5d | %5d |\n", 351 extensionName, nDet, numDetectionsOut, unmatched, numOfDuplicates, numInvalidFlux); 343 352 344 353 if (dvoDetections!= NULL) dvoFree(dvoDetections); … … 353 362 status=0; 354 363 if (fits_movnam_hdu(this->fitsOut, BINARY_TBL, "FrameMeta", 0, &status)) 355 psError(PS_ERR_IO, false, "Can't move back to FrameMeta extension to write number of OTAs\n");364 psError(PS_ERR_IO, false, "Can't move back to FrameMeta extension to write number of OTAs\n"); 356 365 else 357 366 fits_write_col(this->fitsOut, TSHORT, FRAMEMETA_NOTA, 1, 1, 1, &nOta, &status);
Note:
See TracChangeset
for help on using the changeset viewer.
