IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 3, 2013, 1:46:00 PM (13 years ago)
Author:
eugene
Message:

merge changes from trunk

Location:
branches/eam_branches/ipp-20130509/psModules
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20130509/psModules

  • branches/eam_branches/ipp-20130509/psModules/src/objects/pmSourceIO_CMF.c.in

    r35643 r35750  
    457457    bool doPetrosian    = psMetadataLookupBool (&status, recipe, "EXTENDED_SOURCE_PETROSIAN");
    458458
    459     psVector *radMin = psMetadataLookupPtr (&status, recipe, "RADIAL.ANNULAR.BINS.LOWER");
    460     psVector *radMax = psMetadataLookupPtr (&status, recipe, "RADIAL.ANNULAR.BINS.UPPER");
     459    // First look for radial bin definition in readout->analysis ...
     460    psVector *radMin = psMetadataLookupPtr (&status, readout->analysis, "RADIAL.ANNULAR.BINS.LOWER");
     461    psVector *radMax = psMetadataLookupPtr (&status, readout->analysis, "RADIAL.ANNULAR.BINS.UPPER");
     462    if (!radMin) {
     463        // .. if not found use the recipe values
     464        radMin = psMetadataLookupPtr (&status, recipe, "RADIAL.ANNULAR.BINS.LOWER");
     465        radMax = psMetadataLookupPtr (&status, recipe, "RADIAL.ANNULAR.BINS.UPPER");
     466    }
     467    psAssert(radMin != NULL, "unable to find RADIAL.ANNULAR.BINS.LOWER");
     468    psAssert(radMax != NULL, "unable to find RADIAL.ANNULAR.BINS.LOWER");
    461469    psAssert (radMin->n == radMax->n, "inconsistent annular bins");
    462470
     
    610618}
    611619
    612 bool pmSourcesRead_CMF_@CMFMODE@_XSRC(psFits *fits, psMetadata *hduHeader, psArray *sources, long *sourceIndex)
     620static bool setRadialBinsInAnalysis(pmReadout *readout, psMetadata *tableHeader)
     621{
     622    if (!readout->analysis) {
     623        readout->analysis = psMetadataAlloc();
     624    }
     625
     626    bool status;
     627    psVector *oldRMin = psMetadataLookupVector(&status, readout->analysis, "RADIAL.ANNULAR.BINS.LOWER");
     628    psVector *oldRMax = psMetadataLookupVector(&status, readout->analysis, "RADIAL.ANNULAR.BINS.UPPER");
     629
     630    psVector *rMin = psVectorAllocEmpty(20, PS_TYPE_F32);
     631    psVector *rMax = psVectorAllocEmpty(20, PS_TYPE_F32);
     632
     633    for (int i = 0; ; i++) {
     634        char key [24];
     635        sprintf(key, "RMIN_%02d", i);
     636        psF32 rMinVal = psMetadataLookupF32(&status, tableHeader, key);
     637        if (!status) {
     638            break;
     639        }
     640        psVectorAppend(rMin, rMinVal);
     641
     642        sprintf(key, "RMAX_%02d", i);
     643        psF32 rMaxVal = psMetadataLookupF32(&status, tableHeader, key);
     644        if (!status) {
     645            break;
     646        }
     647        psVectorAppend(rMax, rMaxVal);
     648    }
     649
     650    if (rMin->n != rMax->n) {
     651        psError(PS_ERR_UNKNOWN, true, "number of RMIN entries %ld does not equal number of RMAX entries %ld",
     652            rMin->n, rMax->n);
     653        return false;
     654    }
     655
     656    if (oldRMin) {
     657        if (oldRMin->n != rMin->n) {
     658            psError(PS_ERR_UNKNOWN, true, "number of RMIN entries in header: %ld does not equal number of RMAX entries in analysis: %ld",
     659                rMin->n, oldRMin->n);
     660            return false;
     661        }
     662    } else {
     663        psMetadataAddVector(readout->analysis, PS_LIST_TAIL, "RADIAL.ANNULAR.BINS.LOWER", PS_META_REPLACE, "", rMin);
     664    }
     665    psFree(rMin);
     666
     667    if (oldRMax) {
     668        if (oldRMax->n != rMax->n) {
     669            psError(PS_ERR_UNKNOWN, true, "number of RMIN entries in header: %ld does not equal number of RMAX entries in analysis: %ld",
     670                rMax->n, oldRMax->n);
     671            return false;
     672        }
     673    } else {
     674        psMetadataAddVector(readout->analysis, PS_LIST_TAIL, "RADIAL.ANNULAR.BINS.UPPER", PS_META_REPLACE, "", rMax);
     675    }
     676    psFree(rMax);
     677
     678    return true;
     679}
     680
     681bool pmSourcesRead_CMF_@CMFMODE@_XSRC(psFits *fits, pmReadout *readout, psMetadata *hduHeader, psMetadata *tableHeader, psArray *sources, long *sourceIndex)
    613682{
    614683    PS_ASSERT_PTR_NON_NULL(fits, false);
     
    626695    float exptime = psMetadataLookupF32(&status, hduHeader, "EXPTIME");
    627696    float magOffset = zeropt + 2.5*log10(exptime);
     697
     698    if (!setRadialBinsInAnalysis(readout, tableHeader)) {
     699        psError(PS_ERR_UNKNOWN, false, "Failed to save radial bins in analysis");
     700        return false;
     701    }
    628702
    629703    for (long i = 0; i < numSources; i++) {
     
    920994}
    921995
    922 bool pmSourcesRead_CMF_@CMFMODE@_XFIT(psFits *fits, psMetadata *hduHeader, psArray *sources, long *sourceIndex)
     996bool pmSourcesRead_CMF_@CMFMODE@_XFIT(psFits *fits, pmReadout *readout, psMetadata *hduHeader, psMetadata *tableHeader, psArray *sources, long *sourceIndex)
    923997{
    924998    PS_ASSERT_PTR_NON_NULL(fits, false);
     
    10431117
    10441118    // we use this just to define the output vectors (which must be present for all objects)
    1045     psVector *radMin = psMetadataLookupPtr (&status, recipe, "RADIAL.ANNULAR.BINS.LOWER");
    1046     psVector *radMax = psMetadataLookupPtr (&status, recipe, "RADIAL.ANNULAR.BINS.UPPER");
     1119    // First look for radial bin definition in readout->analysis ...
     1120    psVector *radMin = psMetadataLookupPtr (&status, readout->analysis, "RADIAL.ANNULAR.BINS.LOWER");
     1121    psVector *radMax = psMetadataLookupPtr (&status, readout->analysis, "RADIAL.ANNULAR.BINS.UPPER");
     1122    if (!radMin) {
     1123        // .. if not found use the recipe values
     1124        radMin = psMetadataLookupPtr (&status, recipe, "RADIAL.ANNULAR.BINS.LOWER");
     1125        radMax = psMetadataLookupPtr (&status, recipe, "RADIAL.ANNULAR.BINS.UPPER");
     1126    }
     1127    psAssert (radMin, "this must have been defined and tested earlier!");
    10471128    psAssert (radMax, "this must have been defined and tested earlier!");
    1048     psAssert (radMax->n, "this must have been defined and tested earlier!");
    10491129    psAssert (radMin->n == radMax->n, "inconsistent annular bins");
    10501130
     
    11671247}
    11681248
    1169 bool pmSourcesRead_CMF_@CMFMODE@_XRAD(psFits *fits, pmReadout *readout, psMetadata *hduHeader, psArray *sources, long *sourceIndex)
     1249bool pmSourcesRead_CMF_@CMFMODE@_XRAD(psFits *fits, pmReadout *readout, psMetadata *hduHeader, psMetadata *tableHeader, psArray *sources, long *sourceIndex)
    11701250{
    11711251    PS_ASSERT_PTR_NON_NULL(fits, false);
     
    11761256    if (numSources == 0) {
    11771257        psError(psErrorCodeLast(), false, "XRAD Table contains no entries\n");
     1258        return false;
     1259    }
     1260
     1261    if (!setRadialBinsInAnalysis(readout, tableHeader)) {
     1262        psError(PS_ERR_UNKNOWN, false, "Failed to save radial bins in analysis");
    11781263        return false;
    11791264    }
Note: See TracChangeset for help on using the changeset viewer.