IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 22, 2011, 4:11:23 PM (15 years ago)
Author:
rhenders
Message:

Using new Fits class and Config class

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippToPsps/src/DetectionBatch.c

    r30967 r31011  
    11#include "DetectionBatch.h"
    22#include "DetectionBatchEnums.h"
     3
     4#include "Fits.h"
     5
    36
    47/**
     
    4346    if (this->base.exitCode != PS_EXIT_SUCCESS) return this->base.exitCode;
    4447
    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);
    7162
    7263    // 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 
    7764    int8_t filterID = -1;
    78     if (!ippToPspsConfig_getFilterId(this->base.config, filterType, &filterID)) {
     65    if (!this->base.config->getFilterId(this->base.config, filterType, &filterID)) {
    7966   
    8067        this->base.exitCode = PS_EXIT_DATA_ERROR;
    8168        return this->base.exitCode;
    8269    }
    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
    8575
    8676    int16_t cameraID = 1; // TODO
    87     fits_write_col(this->base.fitsOut, TSHORT, FRAMEMETA_CAMERAID, 1, 1, 1, &cameraID, &status);
    88 
    8977    int16_t cameraConfigID = 1; // TODO
    90     fits_write_col(this->base.fitsOut, TSHORT, FRAMEMETA_CAMERACONFIGID, 1, 1, 1, &cameraConfigID, &status);
    91 
    9278    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);
    9482
    9583    // stuff to keep from psf.hdr header
     
    10795    uint32_t s,d, invalidDvoRows, nChipDetectionsOut = 0;
    10896
    109     long longnull = -999;
    110     float floatnull = -999.0;
    111     int anynull = 0;
    112 
    11397    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
    11599    long* ippIDet = (long*)calloc(this->MAXDETECT, sizeof(long));
    116100    float* instMag = (float*)calloc(this->MAXDETECT, sizeof(float));
     
    129113    int8_t* filterIDs = (int8_t*)calloc(this->MAXDETECT, sizeof(int8_t));
    130114    int8_t* surveyIDs = (int8_t*)calloc(this->MAXDETECT, sizeof(int8_t));
    131 
    132115    char** assocDate = (char**)calloc(this->MAXDETECT, sizeof(char*));
    133116    for (uint32_t i=0; i<this->MAXDETECT;i++) assocDate[i] = (char*)malloc(20*sizeof(char));
     
    186169            sprintf(ccdNumber, "%d%d", x, y);
    187170
    188             // check we can move to detections table in smf
     171            // check we CAN move to detections table in smf
    189172            sprintf(extensionName, "XY%s.psf", ccdNumber);
    190             if (!ippToPspsConfig_moveToExtensionTable(fitsIn, extensionName)) continue;
     173            if (!fitsIn->moveToBinaryTable(fitsIn, extensionName)) continue;
    191174
    192175            // move to header extension
    193176            sprintf(extensionName, "XY%s.hdr", ccdNumber);
    194             if (!ippToPspsConfig_moveToExtensionHeader(fitsIn, extensionName)) continue;
     177            if (!fitsIn->moveToHeader(fitsIn, extensionName)) continue;
    195178
    196179            // 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);
    204187            totalNumPhotoRef += numPhotoRef; // total up for storing in FrameMeta
     188
    205189            // access DVO database
    206190            skylist = dvoSkyListByExternID(this->base.dvoConfig, sourceId, imageId, &image);
     
    221205            if (numDvoDetections > this->MAXDETECT ) {
    222206
    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",
    225208                        numDvoDetections, this->MAXDETECT);
    226209                error = true;
     
    229212
    230213            // 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);
    232215            psfFwhm = (fwhmMaj+fwhmMin)/2;
    233216            momentFwhm = (momentMaj+momentMin)/2;
    234217            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);
    245228
    246229            // now move BACK to detections table in smf
    247230            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
    251235            nOta++;
    252 
    253             long nChipDetectionsIn = 0;
    254             if (fits_get_num_rows(fitsIn, &nChipDetectionsIn, &status)) {
    255                 fits_report_error(stderr, status);
    256             }
    257236
    258237            // loop round detections to populate some extra stuff
    259238            s = d = nChipDetectionsOut = invalidDvoRows = 0;
    260239
    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
    262241            if (firstTimeIn) {
    263242
    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);
    272247
    273248                firstTimeIn=false;
    274249            }
    275250
    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);
    281256
    282257            // DVO detections are ordered by IPP_IDET, which increments from 0 in SMF table
     
    288263            // loop through all detections in smf file extension for this chip.
    289264            // there are three ways for a detection to be ommitted from the final FITS output:
     265            //
    290266            // 1. it has a duplicate obj ID to a previous detection
    291267            // 2. it has an invalid detection ID (< 0 or > max DVO det ID)
     
    355331
    356332            // 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);
    358334
    359335            int totalRemove = numOfDuplicates+numInvalidFlux+numOfInvalidIppIDet;
     
    363339
    364340                // 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);
    381356
    382357                // 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);
    389363
    390364                // 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);
    397370            }
    398371
     
    436409
    437410    // 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);
    446418
    447419    writeResults(this, minObjID, maxObjID, totalDetectionsOut);
     
    496468    }
    497469
    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);
    499473
    500474    if (
     
    532506    this->MAXDETECT = 200000;
    533507
     508    // method pointers
    534509    this->print = print;
    535510    this->destroy = destroy;
     
    538513    this->expName = (char*)calloc(100, sizeof(char));
    539514
    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);
    546516
    547517    return this;
     
    565535    detectionBatch->destroy(detectionBatch);
    566536
    567     double secs = psTimerMark("ippToPsps");
     537    double secs = psTimerMark("detectionbatch");
    568538
    569539    psLogMsg("detectionbatch", 3, "detectionbatch completed %ssuccessfully, with exit code %d, in %.1f %s\n",
Note: See TracChangeset for help on using the changeset viewer.