Changeset 31011 for trunk/ippToPsps/src/DetectionBatch.c
- Timestamp:
- Mar 22, 2011, 4:11:23 PM (15 years ago)
- File:
-
- 1 edited
-
trunk/ippToPsps/src/DetectionBatch.c (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippToPsps/src/DetectionBatch.c
r30967 r31011 1 1 #include "DetectionBatch.h" 2 2 #include "DetectionBatchEnums.h" 3 4 #include "Fits.h" 5 3 6 4 7 /** … … 43 46 if (this->base.exitCode != PS_EXIT_SUCCESS) return this->base.exitCode; 44 47 45 int status = 0; 46 fitsfile *fitsIn; 47 48 if (fits_open_file(&fitsIn, this->base.inputFiles[0], READONLY, &status)) { 49 50 fits_report_error(stderr, status); 51 return PS_EXIT_SYS_ERROR; 52 } 53 54 // get primary header and pull stuff out for later 55 int nKeys; 56 fits_get_hdrspace(fitsIn, &nKeys, NULL, &status); 57 58 float zptObs, exposureTime; 59 char filterType[20]; 60 double obsTime; 61 double expStart; 62 double expTime; 63 status=0; fits_read_key(fitsIn, TFLOAT, "ZPT_OBS", &zptObs, NULL, &status); 64 status=0; fits_read_key(fitsIn, TFLOAT, "EXPREQ", &exposureTime, NULL, &status); 65 status=0; fits_read_key(fitsIn, TSTRING, "FILTERID", filterType, NULL, &status); 66 status=0; fits_read_key(fitsIn, TDOUBLE, "MJD-OBS", &expStart, NULL, &status); 67 status=0; fits_read_key(fitsIn, TDOUBLE, "EXPTIME", &expTime, NULL, &status); 68 obsTime = expStart + (expTime/172800.0); // exp start plus half exp time (converted from secs to days) 69 70 ippToPspsConfig_writeTable(this->base.config, fitsIn, this->base.fitsOut, 1, "FrameMeta", true); 48 // open input FITS file 49 Fits* fitsIn = existing_Fits(this->base.inputFiles[0]); 50 if (fitsIn->getFilePtr(fitsIn) == NULL) return PS_EXIT_SYS_ERROR; 51 52 // read some header values 53 float zptObs; fitsIn->getHeaderKeyValue(fitsIn, TFLOAT, "ZPT_OBS", &zptObs); 54 float exposureTime; fitsIn->getHeaderKeyValue(fitsIn, TFLOAT, "EXPREQ", &exposureTime); 55 char filterType[20]; fitsIn->getHeaderKeyValue(fitsIn, TSTRING, "FILTERID", filterType); 56 double expStart; fitsIn->getHeaderKeyValue(fitsIn, TDOUBLE, "MJD-OBS", &expStart); 57 double expTime; fitsIn->getHeaderKeyValue(fitsIn, TDOUBLE, "EXPTIME", &expTime); 58 double obsTime = expStart + (expTime/172800.0); // exp start plus half exp time (converted from secs to days) 59 60 61 this->base.config->createAndPopulateTable(this->base.config, fitsIn, this->base.fitsOut, 1, "FrameMeta", true); 71 62 72 63 // FrameMeta values 73 fits_write_col(this->base.fitsOut, TLONG, FRAMEMETA_FRAMEID, 1, 1, 1, &this->expId, &status);74 fits_write_col(this->base.fitsOut, TSTRING, FRAMEMETA_FRAMENAME, 1, 1, 1, &(this->expName), &status);75 fits_write_col(this->base.fitsOut, TBYTE, FRAMEMETA_SURVEYID, 1, 1, 1, &this->base.surveyID, &status);76 77 64 int8_t filterID = -1; 78 if (! ippToPspsConfig_getFilterId(this->base.config, filterType, &filterID)) {65 if (!this->base.config->getFilterId(this->base.config, filterType, &filterID)) { 79 66 80 67 this->base.exitCode = PS_EXIT_DATA_ERROR; 81 68 return this->base.exitCode; 82 69 } 83 84 fits_write_col(this->base.fitsOut, TBYTE, FRAMEMETA_FILTERID, 1, 1, 1, &filterID, &status); 70 this->base.fitsOut->writeColumn(this->base.fitsOut, TBYTE, FRAMEMETA_FILTERID, 1, 1, 1, &filterID); 71 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONG, FRAMEMETA_FRAMEID, 1, 1, 1, &this->expId); 72 this->base.fitsOut->writeColumn(this->base.fitsOut, TSTRING, FRAMEMETA_FRAMENAME, 1, 1, 1, &(this->expName)); 73 this->base.fitsOut->writeColumn(this->base.fitsOut, TBYTE, FRAMEMETA_SURVEYID, 1, 1, 1, &this->base.surveyID); 74 85 75 86 76 int16_t cameraID = 1; // TODO 87 fits_write_col(this->base.fitsOut, TSHORT, FRAMEMETA_CAMERAID, 1, 1, 1, &cameraID, &status);88 89 77 int16_t cameraConfigID = 1; // TODO 90 fits_write_col(this->base.fitsOut, TSHORT, FRAMEMETA_CAMERACONFIGID, 1, 1, 1, &cameraConfigID, &status);91 92 78 int16_t telescopeID = 1; // TODO 93 fits_write_col(this->base.fitsOut, TSHORT, FRAMEMETA_TELESCOPEID, 1, 1, 1, &telescopeID, &status); 79 this->base.fitsOut->writeColumn(this->base.fitsOut, TSHORT, FRAMEMETA_CAMERAID, 1, 1, 1, &cameraID); 80 this->base.fitsOut->writeColumn(this->base.fitsOut, TSHORT, FRAMEMETA_CAMERACONFIGID, 1, 1, 1, &cameraConfigID); 81 this->base.fitsOut->writeColumn(this->base.fitsOut, TSHORT, FRAMEMETA_TELESCOPEID, 1, 1, 1, &telescopeID); 94 82 95 83 // stuff to keep from psf.hdr header … … 107 95 uint32_t s,d, invalidDvoRows, nChipDetectionsOut = 0; 108 96 109 long longnull = -999;110 float floatnull = -999.0;111 int anynull = 0;112 113 97 char ccdNumber[3], extensionName[15]; 114 // for storing FITS column data 98 // for storing FITS column data - do this once, to avoid expension free/calloc for each chip 115 99 long* ippIDet = (long*)calloc(this->MAXDETECT, sizeof(long)); 116 100 float* instMag = (float*)calloc(this->MAXDETECT, sizeof(float)); … … 129 113 int8_t* filterIDs = (int8_t*)calloc(this->MAXDETECT, sizeof(int8_t)); 130 114 int8_t* surveyIDs = (int8_t*)calloc(this->MAXDETECT, sizeof(int8_t)); 131 132 115 char** assocDate = (char**)calloc(this->MAXDETECT, sizeof(char*)); 133 116 for (uint32_t i=0; i<this->MAXDETECT;i++) assocDate[i] = (char*)malloc(20*sizeof(char)); … … 186 169 sprintf(ccdNumber, "%d%d", x, y); 187 170 188 // check we canmove to detections table in smf171 // check we CAN move to detections table in smf 189 172 sprintf(extensionName, "XY%s.psf", ccdNumber); 190 if (! ippToPspsConfig_moveToExtensionTable(fitsIn, extensionName)) continue;173 if (!fitsIn->moveToBinaryTable(fitsIn, extensionName)) continue; 191 174 192 175 // move to header extension 193 176 sprintf(extensionName, "XY%s.hdr", ccdNumber); 194 if (! ippToPspsConfig_moveToExtensionHeader(fitsIn, extensionName)) continue;177 if (!fitsIn->moveToHeader(fitsIn, extensionName)) continue; 195 178 196 179 // stuff to save from psf.hdr 197 status=0; fits_read_key(fitsIn, TFLOAT, "FWHM_MAJ", &fwhmMaj, NULL, &status);198 status=0; fits_read_key(fitsIn, TFLOAT, "FWHM_MIN", &fwhmMin, NULL, &status);199 status=0; fits_read_key(fitsIn, TFLOAT, "IQ_FW1", &momentMaj, NULL, &status);200 status=0; fits_read_key(fitsIn, TFLOAT, "IQ_FW2", &momentMin, NULL, &status);201 status=0; fits_read_key(fitsIn, TLONG, "IMAGEID", &imageId, NULL, &status);202 status=0; fits_read_key(fitsIn, TLONG, "SOURCEID", &sourceId, NULL, &status);203 status=0; fits_read_key(fitsIn, TLONG, "NASTRO", &numPhotoRef, NULL, &status);180 fitsIn->getHeaderKeyValue(fitsIn, TFLOAT, "FWHM_MAJ", &fwhmMaj); 181 fitsIn->getHeaderKeyValue(fitsIn, TFLOAT, "FWHM_MIN", &fwhmMin); 182 fitsIn->getHeaderKeyValue(fitsIn, TFLOAT, "IQ_FW1", &momentMaj); 183 fitsIn->getHeaderKeyValue(fitsIn, TFLOAT, "IQ_FW2", &momentMin); 184 fitsIn->getHeaderKeyValue(fitsIn, TLONG, "IMAGEID", &imageId); 185 fitsIn->getHeaderKeyValue(fitsIn, TLONG, "SOURCEID", &sourceId); 186 fitsIn->getHeaderKeyValue(fitsIn, TLONG, "NASTRO", &numPhotoRef); 204 187 totalNumPhotoRef += numPhotoRef; // total up for storing in FrameMeta 188 205 189 // access DVO database 206 190 skylist = dvoSkyListByExternID(this->base.dvoConfig, sourceId, imageId, &image); … … 221 205 if (numDvoDetections > this->MAXDETECT ) { 222 206 223 psError(PS_ERR_IO, false, 224 " Number of detections (%d) exceeds max limit (%ld)\n", 207 psError(PS_ERR_IO, false, " Number of detections (%d) exceeds max limit (%ld)\n", 225 208 numDvoDetections, this->MAXDETECT); 226 209 error = true; … … 229 212 230 213 // create ImageMeta 231 ippToPspsConfig_writeTable(this->base.config, fitsIn, this->base.fitsOut, 1, "ImageMeta", true);214 this->base.config->createAndPopulateTable(this->base.config, fitsIn, this->base.fitsOut, 1, "ImageMeta", true); 232 215 psfFwhm = (fwhmMaj+fwhmMin)/2; 233 216 momentFwhm = (momentMaj+momentMin)/2; 234 217 imageFlags = (uint64_t)image->flags; 235 fits_write_col(this->base.fitsOut, TLONGLONG, IMAGEMETA_IMAGEID, 1, 1, 1, &pspsImageId, &status);236 fits_write_col(this->base.fitsOut, TLONG, IMAGEMETA_FRAMEID, 1, 1, 1, &this->expId, &status);237 fits_write_col(this->base.fitsOut, TSHORT, IMAGEMETA_CCDID, 1, 1, 1, &image->ccdnum, &status);238 fits_write_col(this->base.fitsOut, TLONG, IMAGEMETA_PHOTOCALID, 1, 1, 1, &image->photcode, &status);239 fits_write_col(this->base.fitsOut, TBYTE, IMAGEMETA_FILTERID, 1, 1, 1, &filterID, &status);240 fits_write_col(this->base.fitsOut, TFLOAT, IMAGEMETA_PHOTOSCAT, 1, 1, 1, &zptObs, &status);241 fits_write_col(this->base.fitsOut, TFLOAT, IMAGEMETA_PSFFWHM, 1, 1, 1, &psfFwhm, &status);242 fits_write_col(this->base.fitsOut, TFLOAT, IMAGEMETA_MOMENTFWHM, 1, 1, 1, &momentFwhm, &status);243 fits_write_col(this->base.fitsOut, TFLOAT, IMAGEMETA_PHOTOZERO, 1, 1, 1, &zptObs, &status);244 fits_write_col(this->base.fitsOut, TLONGLONG, IMAGEMETA_QAFLAGS, 1, 1, 1, &imageFlags, &status);218 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, IMAGEMETA_IMAGEID, 1, 1, 1, &pspsImageId); 219 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONG, IMAGEMETA_FRAMEID, 1, 1, 1, &this->expId); 220 this->base.fitsOut->writeColumn(this->base.fitsOut, TSHORT, IMAGEMETA_CCDID, 1, 1, 1, &image->ccdnum); 221 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONG, IMAGEMETA_PHOTOCALID, 1, 1, 1, &image->photcode); 222 this->base.fitsOut->writeColumn(this->base.fitsOut, TBYTE, IMAGEMETA_FILTERID, 1, 1, 1, &filterID); 223 this->base.fitsOut->writeColumn(this->base.fitsOut, TFLOAT, IMAGEMETA_PHOTOSCAT, 1, 1, 1, &zptObs); 224 this->base.fitsOut->writeColumn(this->base.fitsOut, TFLOAT, IMAGEMETA_PSFFWHM, 1, 1, 1, &psfFwhm); 225 this->base.fitsOut->writeColumn(this->base.fitsOut, TFLOAT, IMAGEMETA_MOMENTFWHM, 1, 1, 1, &momentFwhm); 226 this->base.fitsOut->writeColumn(this->base.fitsOut, TFLOAT, IMAGEMETA_PHOTOZERO, 1, 1, 1, &zptObs); 227 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, IMAGEMETA_QAFLAGS, 1, 1, 1, &imageFlags); 245 228 246 229 // now move BACK to detections table in smf 247 230 sprintf(extensionName, "XY%s.psf", ccdNumber); 248 if (!ippToPspsConfig_moveToExtensionTable(fitsIn, extensionName)) continue; 249 250 // keep a running count of 'images' we find in order to write total to FrameMeta at the end 231 long nChipDetectionsIn = 0; 232 if (!fitsIn->moveToBinaryTableAndCountRows(fitsIn, extensionName, &nChipDetectionsIn)) continue; 233 234 // keep a running count of 'images' we find in order to write total into FrameMeta at the end 251 235 nOta++; 252 253 long nChipDetectionsIn = 0;254 if (fits_get_num_rows(fitsIn, &nChipDetectionsIn, &status)) {255 fits_report_error(stderr, status);256 }257 236 258 237 // loop round detections to populate some extra stuff 259 238 s = d = nChipDetectionsOut = invalidDvoRows = 0; 260 239 261 // determine column numbers for certain IPP detection columns 240 // determine column numbers for certain IPP detection columns - do this only once to save time 262 241 if (firstTimeIn) { 263 242 264 status=0;fits_get_colnum(fitsIn, CASESEN, "IPP_IDET", &ippIDetNum, &status); 265 if (status) psError(PS_ERR_IO, false, "Unable to read col num for IPP_IDET"); 266 status=0;fits_get_colnum(fitsIn, CASESEN, "PSF_INST_MAG", &instMagNum, &status); 267 if (status) psError(PS_ERR_IO, false, "Unable to read col num for PSF_INST_MAG"); 268 status=0;fits_get_colnum(fitsIn, CASESEN, "PSF_INST_MAG_SIG", &instMagErrNum, &status); 269 if (status) psError(PS_ERR_IO, false, "Unable to read col num for PSF_INST_MAG_SIG"); 270 status=0;fits_get_colnum(fitsIn, CASESEN, "PEAK_FLUX_AS_MAG", &peakMagNum, &status); 271 if (status) psError(PS_ERR_IO, false, "Unable to read col num for PEAK_FLUX_AS_MAG"); 243 fitsIn->getColumnNumber(fitsIn, "IPP_IDET", &ippIDetNum); 244 fitsIn->getColumnNumber(fitsIn, "PSF_INST_MAG", &instMagNum); 245 fitsIn->getColumnNumber(fitsIn, "PSF_INST_MAG_SIG", &instMagErrNum); 246 fitsIn->getColumnNumber(fitsIn, "PEAK_FLUX_AS_MAG", &peakMagNum); 272 247 273 248 firstTimeIn=false; 274 249 } 275 250 276 anynull = 0;277 fits _read_col(fitsIn, TLONG, ippIDetNum, 1, 1, nChipDetectionsIn, &longnull, ippIDet, &anynull, &status);278 fits _read_col(fitsIn, TFLOAT, instMagNum, 1, 1, nChipDetectionsIn, &floatnull, instMag, &anynull, &status);279 fits _read_col(fitsIn, TFLOAT, instMagErrNum, 1, 1, nChipDetectionsIn, &floatnull, instMagErr, &anynull, &status);280 fits _read_col(fitsIn, TFLOAT, peakMagNum, 1, 1, nChipDetectionsIn, &floatnull, peakMag, &anynull, &status);251 //anynull = 0; 252 fitsIn->readColumn(fitsIn, TLONG, ippIDetNum, 1, 1, nChipDetectionsIn, ippIDet); 253 fitsIn->readColumn(fitsIn, TFLOAT, instMagNum, 1, 1, nChipDetectionsIn, instMag); 254 fitsIn->readColumn(fitsIn, TFLOAT, instMagErrNum, 1, 1, nChipDetectionsIn, instMagErr); 255 fitsIn->readColumn(fitsIn, TFLOAT, peakMagNum, 1, 1, nChipDetectionsIn, peakMag); 281 256 282 257 // DVO detections are ordered by IPP_IDET, which increments from 0 in SMF table … … 288 263 // loop through all detections in smf file extension for this chip. 289 264 // there are three ways for a detection to be ommitted from the final FITS output: 265 // 290 266 // 1. it has a duplicate obj ID to a previous detection 291 267 // 2. it has an invalid detection ID (< 0 or > max DVO det ID) … … 355 331 356 332 // write number of rows (detections) to ImageMeta 357 fits_write_col(this->base.fitsOut, TLONG, IMAGEMETA_NDETECT, 1, 1, 1, &nChipDetectionsOut, &status);333 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONG, IMAGEMETA_NDETECT, 1, 1, 1, &nChipDetectionsOut); 358 334 359 335 int totalRemove = numOfDuplicates+numInvalidFlux+numOfInvalidIppIDet; … … 363 339 364 340 // detections 365 ippToPspsConfig_writeTable(this->base.config, fitsIn, this->base.fitsOut, nChipDetectionsIn, "Detection", false); 366 fits_write_col(this->base.fitsOut, TLONGLONG, DETECTION_OBJID, 1, 1, nChipDetectionsIn, objID, &status); 367 fits_write_col(this->base.fitsOut, TLONGLONG, DETECTION_DETECTID, 1, 1, nChipDetectionsIn, detectID, &status); 368 fits_write_col(this->base.fitsOut, TLONGLONG, DETECTION_IPPOBJID, 1, 1, nChipDetectionsIn, ippObjID, &status); 369 fits_write_col(this->base.fitsOut, TLONGLONG, DETECTION_IPPDETECTID, 1, 1, nChipDetectionsIn, ippDetectID, &status); 370 fits_write_col(this->base.fitsOut, TBYTE, DETECTION_FILTERID, 1, 1, nChipDetectionsIn, filterIDs, &status); 371 fits_write_col(this->base.fitsOut, TBYTE, DETECTION_SURVEYID, 1, 1, nChipDetectionsIn, surveyIDs, &status); 372 fits_write_col(this->base.fitsOut, TLONGLONG, DETECTION_IMAGEID, 1, 1, nChipDetectionsIn, imageID, &status); 373 fits_write_col(this->base.fitsOut, TDOUBLE, DETECTION_OBSTIME, 1, 1, nChipDetectionsIn, obsTimes, &status); 374 fits_write_col(this->base.fitsOut, TFLOAT, DETECTION_INSTFLUX, 1, 1, nChipDetectionsIn, instFlux, &status); 375 fits_write_col(this->base.fitsOut, TFLOAT, DETECTION_INSTFLUXERR, 1, 1, nChipDetectionsIn, instFluxErr, &status); 376 fits_write_col(this->base.fitsOut, TFLOAT, DETECTION_PEAKADU, 1, 1, nChipDetectionsIn, peakFlux, &status); 377 fits_write_col(this->base.fitsOut, TSTRING, DETECTION_ASSOCDATE, 1, 1, nChipDetectionsIn, assocDate, &status); 378 fits_write_col(this->base.fitsOut, TLONGLONG, DETECTION_INFOFLAG, 1, 1, nChipDetectionsIn, flags, &status); 379 if (numOfDuplicates||numInvalidFlux||numOfInvalidIppIDet) 380 fits_delete_rowlist(this->base.fitsOut, removeList, totalRemove, &status); 341 this->base.config->createAndPopulateTable(this->base.config, fitsIn, this->base.fitsOut, nChipDetectionsIn, "Detection", false); 342 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, DETECTION_OBJID, 1, 1, nChipDetectionsIn, objID); 343 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, DETECTION_DETECTID, 1, 1, nChipDetectionsIn, detectID); 344 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, DETECTION_IPPOBJID, 1, 1, nChipDetectionsIn, ippObjID); 345 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, DETECTION_IPPDETECTID, 1, 1, nChipDetectionsIn, ippDetectID); 346 this->base.fitsOut->writeColumn(this->base.fitsOut, TBYTE, DETECTION_FILTERID, 1, 1, nChipDetectionsIn, filterIDs); 347 this->base.fitsOut->writeColumn(this->base.fitsOut, TBYTE, DETECTION_SURVEYID, 1, 1, nChipDetectionsIn, surveyIDs); 348 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, DETECTION_IMAGEID, 1, 1, nChipDetectionsIn, imageID); 349 this->base.fitsOut->writeColumn(this->base.fitsOut, TDOUBLE, DETECTION_OBSTIME, 1, 1, nChipDetectionsIn, obsTimes); 350 this->base.fitsOut->writeColumn(this->base.fitsOut, TFLOAT, DETECTION_INSTFLUX, 1, 1, nChipDetectionsIn, instFlux); 351 this->base.fitsOut->writeColumn(this->base.fitsOut, TFLOAT, DETECTION_INSTFLUXERR, 1, 1, nChipDetectionsIn, instFluxErr); 352 this->base.fitsOut->writeColumn(this->base.fitsOut, TFLOAT, DETECTION_PEAKADU, 1, 1, nChipDetectionsIn, peakFlux); 353 this->base.fitsOut->writeColumn(this->base.fitsOut, TSTRING, DETECTION_ASSOCDATE, 1, 1, nChipDetectionsIn, assocDate); 354 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, DETECTION_INFOFLAG, 1, 1, nChipDetectionsIn, flags); 355 if (numOfDuplicates||numInvalidFlux||numOfInvalidIppIDet) this->base.fitsOut->deleteRows(this->base.fitsOut, removeList, totalRemove); 381 356 382 357 // skinny object 383 ippToPspsConfig_writeTable(this->base.config, fitsIn, this->base.fitsOut, nChipDetectionsIn, "SkinnyObject", false); 384 fits_write_col(this->base.fitsOut, TLONGLONG, SKINNYOBJECT_OBJID, 1, 1, nChipDetectionsIn, objID, &status); 385 fits_write_col(this->base.fitsOut, TLONGLONG, SKINNYOBJECT_IPPOBJID, 1, 1, nChipDetectionsIn, ippObjID, &status); 386 fits_write_col(this->base.fitsOut, TBYTE, SKINNYOBJECT_SURVEYID, 1, 1, nChipDetectionsIn, surveyIDs, &status); 387 if (numOfDuplicates||numInvalidFlux||numOfInvalidIppIDet) 388 fits_delete_rowlist(this->base.fitsOut, removeList, totalRemove, &status); 358 this->base.config->createAndPopulateTable(this->base.config, fitsIn, this->base.fitsOut, nChipDetectionsIn, "SkinnyObject", false); 359 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, SKINNYOBJECT_OBJID, 1, 1, nChipDetectionsIn, objID); 360 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, SKINNYOBJECT_IPPOBJID, 1, 1, nChipDetectionsIn, ippObjID); 361 this->base.fitsOut->writeColumn(this->base.fitsOut, TBYTE, SKINNYOBJECT_SURVEYID, 1, 1, nChipDetectionsIn, surveyIDs); 362 if (numOfDuplicates||numInvalidFlux||numOfInvalidIppIDet) this->base.fitsOut->deleteRows(this->base.fitsOut, removeList, totalRemove); 389 363 390 364 // object calibration color 391 ippToPspsConfig_writeTable(this->base.config, fitsIn, this->base.fitsOut, nChipDetectionsIn, "ObjectCalColor", false); 392 fits_write_col(this->base.fitsOut, TLONGLONG, OBJECTCALCOLOR_OBJID, 1, 1, nChipDetectionsIn, objID, &status); 393 fits_write_col(this->base.fitsOut, TLONGLONG, OBJECTCALCOLOR_IPPOBJID, 1, 1, nChipDetectionsIn, ippObjID, &status); 394 fits_write_col(this->base.fitsOut, TBYTE, OBJECTCALCOLOR_FILTERID, 1, 1, nChipDetectionsIn, filterIDs, &status); 395 if (numOfDuplicates||numInvalidFlux||numOfInvalidIppIDet) 396 fits_delete_rowlist(this->base.fitsOut, removeList, totalRemove, &status); 365 this->base.config->createAndPopulateTable(this->base.config, fitsIn, this->base.fitsOut, nChipDetectionsIn, "ObjectCalColor", false); 366 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, OBJECTCALCOLOR_OBJID, 1, 1, nChipDetectionsIn, objID); 367 this->base.fitsOut->writeColumn(this->base.fitsOut, TLONGLONG, OBJECTCALCOLOR_IPPOBJID, 1, 1, nChipDetectionsIn, ippObjID); 368 this->base.fitsOut->writeColumn(this->base.fitsOut, TBYTE, OBJECTCALCOLOR_FILTERID, 1, 1, nChipDetectionsIn, filterIDs); 369 if (numOfDuplicates||numInvalidFlux||numOfInvalidIppIDet) this->base.fitsOut->deleteRows(this->base.fitsOut, removeList, totalRemove); 397 370 } 398 371 … … 436 409 437 410 // write number of images we have found into FrameMeta table 438 if (ippToPspsConfig_moveToExtensionTable(this->base.fitsOut, "FrameMeta")) { 439 440 fits_write_col(this->base.fitsOut, TSHORT, FRAMEMETA_NOTA, 1, 1, 1, &nOta, &status); 441 fits_write_col(this->base.fitsOut, TSHORT, FRAMEMETA_NUMPHOTOREF, 1, 1, 1, &totalNumPhotoRef, &status); 442 } 443 444 status=0; 445 if (fits_close_file(fitsIn, &status)) fits_report_error(stderr, status); 411 if (this->base.fitsOut->moveToBinaryTable(this->base.fitsOut, "FrameMeta")) { 412 413 this->base.fitsOut->writeColumn(this->base.fitsOut, TSHORT, FRAMEMETA_NOTA, 1, 1, 1, &nOta); 414 this->base.fitsOut->writeColumn(this->base.fitsOut, TSHORT, FRAMEMETA_NUMPHOTOREF, 1, 1, 1, &totalNumPhotoRef); 415 } 416 417 fitsIn->destroy(fitsIn); 446 418 447 419 writeResults(this, minObjID, maxObjID, totalDetectionsOut); … … 496 468 } 497 469 498 this->base.parseArguments(&this->base, argc, argv); 470 char fitsOutFile[40]; 471 sprintf(fitsOutFile, "%08d.FITS", this->expId); 472 this->base.parseArguments(&this->base, argc, argv, "/detection", fitsOutFile); 499 473 500 474 if ( … … 532 506 this->MAXDETECT = 200000; 533 507 508 // method pointers 534 509 this->print = print; 535 510 this->destroy = destroy; … … 538 513 this->expName = (char*)calloc(100, sizeof(char)); 539 514 540 if (!parseArguments(this, *argc, argv)) { return this; } 541 542 strcat(this->base.configsDir, "/detection"); 543 sprintf(this->base.fitsOutFile, "%08d.FITS", this->expId); 544 545 this->base.init(&this->base); 515 parseArguments(this, *argc, argv); 546 516 547 517 return this; … … 565 535 detectionBatch->destroy(detectionBatch); 566 536 567 double secs = psTimerMark(" ippToPsps");537 double secs = psTimerMark("detectionbatch"); 568 538 569 539 psLogMsg("detectionbatch", 3, "detectionbatch completed %ssuccessfully, with exit code %d, in %.1f %s\n",
Note:
See TracChangeset
for help on using the changeset viewer.
