- Timestamp:
- Jul 30, 2010, 9:31:50 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20100621/ippToPsps/src/ippToPspsBatchDetection.c
r28439 r28794 14 14 15 15 // Gets uncalibrated instrumental flux from magnitude 16 static __inline bool ippToPsps_getFlux(const float zeroPoint, const float exposureTime, const float magnitude, float* flux) {16 static __inline bool ippToPsps_getFlux(const float exposureTime, const float magnitude, float* flux, const float magnitudeErr, float* fluxErr) { 17 17 18 18 *flux = powf(10.0, -0.4*magnitude) / exposureTime; 19 return (!isfinite(*flux) || *flux < 0.000001) ? false : true; 19 if (!isfinite(*flux) || *flux < 0.000001) return false; 20 if (fluxErr) *fluxErr = fabsf((magnitudeErr * *flux)/1.085736); 21 // if (fluxErr) printf("Mag = %03.03f, Flux = %03.03f, Mag err = %03.03f, Flux Err = %03.03f\n", magnitude, *flux, magnitudeErr, *fluxErr); 22 23 return true; 20 24 } 21 25 … … 46 50 fits_get_hdrspace(fitsIn, &nKeys, NULL, &status); 47 51 48 float zptObs, zeroPoint,exposureTime;52 float zptObs, exposureTime; 49 53 char filterType[20]; 50 54 double obsTime; … … 52 56 double expTime; 53 57 status=0; fits_read_key(fitsIn, TFLOAT, "ZPT_OBS", &zptObs, NULL, &status); 54 status=0; fits_read_key(fitsIn, TFLOAT, "ZPT_REF", &zeroPoint, NULL, &status);55 58 status=0; fits_read_key(fitsIn, TFLOAT, "EXPREQ", &exposureTime, NULL, &status); 56 59 status=0; fits_read_key(fitsIn, TSTRING, "FILTERID", filterType, NULL, &status); 57 60 status=0; fits_read_key(fitsIn, TDOUBLE, "MJD-OBS", &expStart, NULL, &status); 58 61 status=0; fits_read_key(fitsIn, TDOUBLE, "EXPTIME", &expTime, NULL, &status); 59 obsTime = expStart + (expTime/172800 ); // exp start plus half exp time (converted from secs to days)62 obsTime = expStart + (expTime/172800.0); // exp start plus half exp time (converted from secs to days) 60 63 61 64 ippToPspsConfig_writeTable(this->config, fitsIn, this->fitsOut, 1, "FrameMeta", true); … … 83 86 84 87 // stuff to keep from psf.hdr header 85 int sourceId = -1; 86 int imageId = -1; 87 float fwhmMaj; 88 float fwhmMin; 89 float momentMaj; 90 float momentMin; 91 float psfFwhm; 92 float momentFwhm; 88 int sourceId = -1, imageId = -1; 89 float fwhmMaj, fwhmMin, momentMaj, momentMin, psfFwhm, momentFwhm; 93 90 long pspsImageId = -1; 94 91 … … 96 93 SkyList *skylist = NULL; 97 94 dvoDetection *dvoDetections = NULL; 98 int maxDvoDetId = -1; 99 int numDvoDetections = -1; 95 int maxDvoDetId = -1, numDvoDetections = -1; 100 96 Image *image = NULL; 101 97 … … 108 104 strftime(timeStr, sizeof(timeStr), "%Y-%m-%d", ts); 109 105 110 uint32_t totalDetections = 0; 111 uint32_t s,d; 112 uint32_t invalidDvoRows; 113 uint32_t smfJumps; 114 uint32_t unmatched; 106 uint32_t s,d, invalidDvoRows, smfJumps, unmatched, totalDetections = 0; 115 107 116 108 long longnull = -999; … … 118 110 int anynull = 0; 119 111 120 char ccdNumber[3] ;121 char extensionName[15]; 122 112 char ccdNumber[3], extensionName[15]; 113 114 // for storing FITS column data 123 115 long ippIDet[MAXDETECT]; 124 float instMag[MAXDETECT]; 125 float instMagErr[MAXDETECT]; 126 float peakMag[MAXDETECT]; 116 float instMag[MAXDETECT], instMagErr[MAXDETECT], peakMag[MAXDETECT]; 127 117 uint64_t flags[MAXDETECT]; 128 long objID[MAXDETECT]; 129 long detectID[MAXDETECT]; 130 long ippObjID[MAXDETECT]; 131 long ippDetectID[MAXDETECT]; 132 long imageID[MAXDETECT]; 118 long objID[MAXDETECT], detectID[MAXDETECT], ippObjID[MAXDETECT], ippDetectID[MAXDETECT], imageID[MAXDETECT]; 133 119 double obsTimes[MAXDETECT]; 134 float instFlux[MAXDETECT]; 135 float instFluxErr[MAXDETECT]; 136 float peakFlux[MAXDETECT]; 137 int8_t filterIDs[MAXDETECT]; 138 int8_t surveyIDs[MAXDETECT]; 120 float instFlux[MAXDETECT], instFluxErr[MAXDETECT], peakFlux[MAXDETECT]; 121 int8_t filterIDs[MAXDETECT], surveyIDs[MAXDETECT]; 139 122 140 123 char** assocDate = (char**)calloc(MAXDETECT, sizeof(char**)); … … 149 132 } 150 133 151 long maxObjID = LONG_MIN; 152 long minObjID = LONG_MAX; 134 long maxObjID = LONG_MIN, minObjID = LONG_MAX; 153 135 uint64_t imageFlags; 154 136 short nOta = 0; 155 137 long i; 156 138 bool isDuplicate; 157 uint32_t numOfDuplicates; 158 uint32_t numInvalidFlux; 159 long numDetectionsOut; 160 long totalDetectionsOut = 0; 139 uint32_t numOfDuplicates, numInvalidFlux; 140 long numDetectionsOut, totalDetectionsOut = 0, numPhotoRef, totalNumPhotoRef = 0; 161 141 long removeList[MAXDETECT]; 162 142 long thisObjId; 143 bool firstTimeIn = true, peakFluxOk, instFluxOk; 144 int ippIDetNum, instMagNum, instMagErrNum, peakMagNum; 163 145 164 146 // loop round all 60 chips … … 197 179 status=0; fits_read_key(fitsIn, TLONG, "IMAGEID", &imageId, NULL, &status); 198 180 status=0; fits_read_key(fitsIn, TLONG, "SOURCEID", &sourceId, NULL, &status); 181 status=0; fits_read_key(fitsIn, TLONG, "NASTRO", &numPhotoRef, NULL, &status); 182 totalNumPhotoRef += numPhotoRef; // total up for storing in FrameMeta 199 183 200 184 // access DVO database … … 202 186 if (skylist == NULL) { 203 187 psError(PS_ERR_IO, false, 204 "DVO: can't find SkyList for sourceId='%d' imageId='%d' (CCD = XY%s): skipping \n",188 "DVO: can't find SkyList for sourceId='%d' imageId='%d' (CCD = XY%s): skipping this chip\n", 205 189 sourceId, imageId, ccdNumber); 206 190 continue; … … 251 235 s = d = totalDetections = invalidDvoRows = smfJumps = unmatched = 0; 252 236 237 // determine column numbers for certain IPP detection columns 238 if (firstTimeIn) { 239 240 status=0;fits_get_colnum(fitsIn, CASESEN, "IPP_IDET", &ippIDetNum, &status); 241 if (status) psError(PS_ERR_IO, false, "Unable to read col num for IPP_IDET"); 242 status=0;fits_get_colnum(fitsIn, CASESEN, "PSF_INST_MAG", &instMagNum, &status); 243 if (status) psError(PS_ERR_IO, false, "Unable to read col num for PSF_INST_MAG"); 244 status=0;fits_get_colnum(fitsIn, CASESEN, "PSF_INST_MAG_SIG", &instMagErrNum, &status); 245 if (status) psError(PS_ERR_IO, false, "Unable to read col num for PSF_INST_MAG_SIG"); 246 status=0;fits_get_colnum(fitsIn, CASESEN, "PEAK_FLUX_AS_MAG", &peakMagNum, &status); 247 if (status) psError(PS_ERR_IO, false, "Unable to read col num for PEAK_FLUX_AS_MAG"); 248 249 firstTimeIn=false; 250 } 251 253 252 anynull = 0; 254 fits_read_col(fitsIn, TLONG, 1, 1, 1, nDet, &longnull, ippIDet, &anynull, &status);255 fits_read_col(fitsIn, TFLOAT, 8, 1, 1, nDet, &floatnull, instMag, &anynull, &status);256 fits_read_col(fitsIn, TFLOAT, 9, 1, 1, nDet, &floatnull, instMagErr, &anynull, &status);257 fits_read_col(fitsIn, TFLOAT, 12, 1, 1, nDet, &floatnull, peakMag, &anynull, &status);253 fits_read_col(fitsIn, TLONG, ippIDetNum, 1, 1, nDet, &longnull, ippIDet, &anynull, &status); 254 fits_read_col(fitsIn, TFLOAT, instMagNum, 1, 1, nDet, &floatnull, instMag, &anynull, &status); 255 fits_read_col(fitsIn, TFLOAT, instMagErrNum, 1, 1, nDet, &floatnull, instMagErr, &anynull, &status); 256 fits_read_col(fitsIn, TFLOAT, peakMagNum, 1, 1, nDet, &floatnull, peakMag, &anynull, &status); 258 257 259 258 // DVO detections are ordered by IPP_IDET, which increments from 0 in SMF table … … 297 296 obsTimes[s] = obsTime; 298 297 299 ippToPsps_getFlux(zeroPoint, exposureTime, instMagErr[s], &instFluxErr[s]); 298 // calculate flux and flux errors from magnitudes 299 peakFluxOk = ippToPsps_getFlux(exposureTime, peakMag[s], &peakFlux[s], 0.0, NULL); 300 instFluxOk = ippToPsps_getFlux(exposureTime, instMag[s], &instFlux[s], instMagErr[s], &instFluxErr[s]); 300 301 301 302 // check for invalid flux values (if not already labelled as a duplicate) 302 if ((!ippToPsps_getFlux(zeroPoint, exposureTime, peakMag[s], &peakFlux[s]) || 303 !ippToPsps_getFlux(zeroPoint, exposureTime, instMag[s], &instFlux[s])) && !isDuplicate) { 303 if ( (!peakFluxOk || !instFluxOk) && !isDuplicate) { 304 304 removeList[numOfDuplicates+numInvalidFlux] = s+1; 305 305 numInvalidFlux++; … … 379 379 if (fits_movnam_hdu(this->fitsOut, BINARY_TBL, "FrameMeta", 0, &status)) 380 380 psError(PS_ERR_IO, false, "Can't move back to FrameMeta extension to write number of OTAs\n"); 381 else 381 else { 382 382 fits_write_col(this->fitsOut, TSHORT, FRAMEMETA_NOTA, 1, 1, 1, &nOta, &status); 383 383 fits_write_col(this->fitsOut, TSHORT, FRAMEMETA_NUMPHOTOREF, 1, 1, 1, &totalNumPhotoRef, &status); 384 } 384 385 status=0; 385 386 if (fits_close_file(fitsIn, &status)) fits_report_error(stderr, status); 386 387 387 388 // write results 388 if (this->resultsFile) { 389 390 if (fprintf(this->resultsFile, "%ld\n", minObjID) < 1 ) 391 psError(PS_ERR_IO, false, "Unable to write min Object ID to'%s'\n", this->resultsPath); 392 if (fprintf(this->resultsFile, "%ld\n", maxObjID) < 1 ) 393 psError(PS_ERR_IO, false, "Unable to write max Object ID to'%s'\n", this->resultsPath); 394 if (fprintf(this->resultsFile, "%ld\n", totalDetectionsOut) < 1 ) 395 psError(PS_ERR_IO, false, "Unable to write totalDetectionsOut to'%s'\n", this->resultsPath); 389 if (this->resultsXmlDoc) { 390 391 xmlNodePtr rootNode = xmlDocGetRootElement(this->resultsXmlDoc); 392 char tmp[100]; 393 sprintf(tmp, "%ld", minObjID); 394 xmlNewChild(rootNode, NULL, BAD_CAST "minObjID", BAD_CAST tmp); 395 sprintf(tmp, "%ld", maxObjID); 396 xmlNewChild(rootNode, NULL, BAD_CAST "maxObjID", BAD_CAST tmp); 397 sprintf(tmp, "%ld", totalDetectionsOut); 398 xmlNewChild(rootNode, NULL, BAD_CAST "totalDetections", BAD_CAST tmp); 396 399 } 397 400 … … 403 406 } 404 407 405
Note:
See TracChangeset
for help on using the changeset viewer.
