IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 35750


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:
4 edited
2 copied

Legend:

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

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

    r35560 r35750  
    5858#define BLANK_HEADERS "BLANK.HEADERS"   // Name of metadata in camera configuration containing header names
    5959                                        // for putting values into a blank PHU
    60 static bool pmReadoutReadXSRC(pmFPAfile *file, char * exttype, psMetadata *hduHeader, psString xsrcname, psArray *sources, long *sourceIndex);
    61 static bool pmReadoutReadXFIT(pmFPAfile *file, char * exttype, psMetadata *hduHeader, psString xfitname, psArray *sources, long *sourceIndex);
     60static bool pmReadoutReadXSRC(pmFPAfile *file, pmReadout *readout, char * exttype, psMetadata *hduHeader, psString xsrcname, psArray *sources, long *sourceIndex);
     61static bool pmReadoutReadXFIT(pmFPAfile *file, pmReadout *readout, char * exttype, psMetadata *hduHeader, psString xfitname, psArray *sources, long *sourceIndex);
    6262static bool pmReadoutReadXRAD(pmFPAfile *file, pmReadout *readout, char * exttype, psMetadata *hduHeader, psString xfitname, psArray *sources, long *sourceIndex);
    6363
     
    10931093            if (XSRC_OUTPUT && xsrcname) {
    10941094                // a cmf file may have an XSRC extension, but it is not required
    1095                 if (!pmReadoutReadXSRC(file, exttype, hdu->header, xsrcname, sources, sourceIndex)) {
     1095                if (!pmReadoutReadXSRC(file, readout, exttype, hdu->header, xsrcname, sources, sourceIndex)) {
    10961096                    // do anything?
    10971097                }
     
    11001100            if (XFIT_OUTPUT && xfitname) {
    11011101                // a cmf file may have an XFIT extension, but it is not required
    1102                 if (!pmReadoutReadXFIT(file, exttype, hdu->header, xfitname, sources, sourceIndex)) {
     1102                if (!pmReadoutReadXFIT(file, readout, exttype, hdu->header, xfitname, sources, sourceIndex)) {
    11031103                    // do anything?
    11041104                }
     
    12431243// XXX: We might be able to macroize this and reuse for the other types
    12441244
    1245 static bool pmReadoutReadXSRC(pmFPAfile *file, char *exttype, psMetadata *hduHeader, psString xsrcname, psArray *sources, long *sourceIndex)
     1245static bool pmReadoutReadXSRC(pmFPAfile *file, pmReadout *readout, char *exttype, psMetadata *hduHeader, psString xsrcname, psArray *sources, long *sourceIndex)
    12461246{
    12471247    if (!psFitsMoveExtNameClean (file->fits, xsrcname)) {
     
    12631263# define PM_SOURCES_READ_XSRC(NAME,TYPE)                                \
    12641264    if (!strcmp (exttype, NAME)) {                                      \
    1265         status = pmSourcesRead_##TYPE##_XSRC(file->fits, hduHeader, sources, sourceIndex); \
     1265        status = pmSourcesRead_##TYPE##_XSRC(file->fits, readout, hduHeader, tableHeader, sources, sourceIndex); \
    12661266    }                                                                   
    12671267
     
    12821282}
    12831283
    1284 static bool pmReadoutReadXFIT(pmFPAfile *file, char *exttype, psMetadata *hduHeader, psString extname, psArray *sources, long *sourceIndex)
     1284static bool pmReadoutReadXFIT(pmFPAfile *file, pmReadout *readout, char *exttype, psMetadata *hduHeader, psString extname, psArray *sources, long *sourceIndex)
    12851285{
    12861286    if (!psFitsMoveExtNameClean (file->fits, extname)) {
     
    13021302# define PM_SOURCES_READ_XFIT(NAME,TYPE)                                \
    13031303    if (!strcmp (exttype, NAME)) {                                      \
    1304         status = pmSourcesRead_##TYPE##_XFIT(file->fits, hduHeader, sources, sourceIndex); \
     1304        status = pmSourcesRead_##TYPE##_XFIT(file->fits, readout, hduHeader, tableHeader, sources, sourceIndex); \
    13051305    }                                                                   
    13061306
     
    13401340# define PM_SOURCES_READ_XRAD(NAME,TYPE)                                \
    13411341    if (!strcmp (exttype, NAME)) {                                      \
    1342         status = pmSourcesRead_##TYPE##_XRAD(file->fits, readout, hduHeader, sources, sourceIndex); \
     1342        status = pmSourcesRead_##TYPE##_XRAD(file->fits, readout, hduHeader, tableHeader, sources, sourceIndex); \
    13431343    }                                                                   
    13441344
  • branches/eam_branches/ipp-20130509/psModules/src/objects/pmSourceIO.h

    r34403 r35750  
    2222  bool pmSourcesWrite_##TYPE##_XRAD(psFits *fits, pmReadout *readout, psArray *sources, psMetadata *imageHeader, char *extname, psMetadata *recipe); \
    2323  psArray *pmSourcesRead_##TYPE (psFits *fits, psMetadata *header); \
    24   bool pmSourcesRead_##TYPE##_XSRC (psFits *fits, psMetadata *header, psArray *sources, long *index); \
    25   bool pmSourcesRead_##TYPE##_XFIT (psFits *fits, psMetadata *header, psArray *sources, long *index); \
    26   bool pmSourcesRead_##TYPE##_XRAD (psFits *fits, pmReadout *readout, psMetadata *header, psArray *sources, long *index);\
     24  bool pmSourcesRead_##TYPE##_XSRC (psFits *fits, pmReadout *readout, psMetadata *header, psMetadata *tableHeader, psArray *sources, long *index); \
     25  bool pmSourcesRead_##TYPE##_XFIT (psFits *fits, pmReadout *readout, psMetadata *header, psMetadata *tableHeader, psArray *sources, long *index); \
     26  bool pmSourcesRead_##TYPE##_XRAD (psFits *fits, pmReadout *readout, psMetadata *header, psMetadata *tableHeader, psArray *sources, long *index);\
    2727 
    2828// All of these functions need to use the same API, even if not all elements are used in a specific case
  • 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.