IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 18, 2010, 12:49:05 PM (16 years ago)
Author:
eugene
Message:

merging changes from trunk into branches/pap

Location:
branches/pap
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/pap

  • branches/pap/ippToPsps/src/ippToPspsBatchDetection.c

    r27700 r28003  
    1414
    1515// Gets flux from magnitude
    16 static __inline float ippToPsps_getFlux(const float zeroPoint, const float exposureTime, const float magnitude) {
     16static __inline bool ippToPsps_getFlux(const float zeroPoint, const float exposureTime, const float magnitude, float* flux) {
    1717
    1818    // use uncalibrated instrumental flux
    19     float flux = powf(10.0, -0.4*magnitude) / exposureTime;
     19    *flux = powf(10.0, -0.4*magnitude) / exposureTime;
    2020
    2121    // 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
     
    2323
    2424    //    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;
    2626}
    2727
     
    151151    short nOta = 0;
    152152    long i;
    153     bool duplicate;
     153    bool isDuplicate;
    154154    uint32_t numOfDuplicates;
     155    uint32_t numInvalidFlux;
    155156    long numDetectionsOut;
    156     long duplicateList[MAXDETECT];
     157    long removeList[MAXDETECT];
    157158    long thisObjId;
    158159
     
    217218            fits_write_col(this->fitsOut, TLONG, IMAGEMETA_FRAMEID, 1, 1, 1, &this->expId, &status);
    218219            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); TODO
     220            fits_write_col(this->fitsOut, TLONG, IMAGEMETA_PHOTOCALID, 1, 1, 1, &pImage->photcode, &status);
    220221            fits_write_col(this->fitsOut, TBYTE, IMAGEMETA_FILTERID, 1, 1, 1, &filterID, &status);
    221222            fits_write_col(this->fitsOut, TFLOAT, IMAGEMETA_PHOTOSCAT, 1, 1, 1, &zptObs, &status);
     
    252253            // both DVO detections and smf detections should increment. however, there may be gaps in smf and 'invalid' rows in dvo
    253254            numOfDuplicates = 0;
     255            numInvalidFlux = 0;
    254256            for (long s = 0; s<nDet; s++) {
     257
     258                isDuplicate = false;
    255259
    256260                // count jumps in smf file
     
    266270
    267271                    // TODO HACK duplicates bug - don't include any duplicates
    268                     duplicate = false;
    269272                    thisObjId = dvoDetections[d].ave.extID;
    270273                    for (i=0; i<totalDetections; i++) {
    271274                        if (thisObjId == objID[i]) {
    272                             duplicate = true;
    273                             duplicateList[numOfDuplicates] = s+1;
     275                            removeList[numOfDuplicates+numInvalidFlux] = s+1;
    274276                            numOfDuplicates++;
     277                            isDuplicate=true;
    275278                            break;
    276279                        }
     
    283286                    imageID[s] = pspsImageId;
    284287                    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                    }
    288297
    289298                    // store max/min objID
     
    304313
    305314            // 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);
    308317
    309318            // detections
     
    321330            fits_write_col(this->fitsOut, TFLOAT, DETECTION_PEAKADU, 1, 1, nDet, peakFlux, &status);
    322331            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);
    324333
    325334            // skinny object
     
    327336            fits_write_col(this->fitsOut, TLONGLONG, SKINNYOBJECT_OBJID, 1, 1, nDet, objID, &status);
    328337            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);
    330339
    331340            // object calibration color
     
    334343            fits_write_col(this->fitsOut, TLONGLONG, OBJECTCALCOLOR_IPPOBJID, 1, 1, nDet, ippObjID, &status);
    335344            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);
    337346
    338347            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);
    343352
    344353            if (dvoDetections!= NULL) dvoFree(dvoDetections);
     
    353362    status=0;
    354363    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");
    356365    else
    357366        fits_write_col(this->fitsOut, TSHORT, FRAMEMETA_NOTA, 1, 1, 1, &nOta, &status);
Note: See TracChangeset for help on using the changeset viewer.