Changeset 35610
- Timestamp:
- May 30, 2013, 2:29:11 PM (13 years ago)
- Location:
- trunk/psModules/src/objects
- Files:
-
- 3 edited
-
pmSourceIO.c (modified) (8 diffs)
-
pmSourceIO.h (modified) (1 diff)
-
pmSourceIO_CMF.c.in (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/pmSourceIO.c
r35560 r35610 58 58 #define BLANK_HEADERS "BLANK.HEADERS" // Name of metadata in camera configuration containing header names 59 59 // 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);60 static bool pmReadoutReadXSRC(pmFPAfile *file, pmReadout *readout, char * exttype, psMetadata *hduHeader, psString xsrcname, psArray *sources, long *sourceIndex); 61 static bool pmReadoutReadXFIT(pmFPAfile *file, pmReadout *readout, char * exttype, psMetadata *hduHeader, psString xfitname, psArray *sources, long *sourceIndex); 62 62 static bool pmReadoutReadXRAD(pmFPAfile *file, pmReadout *readout, char * exttype, psMetadata *hduHeader, psString xfitname, psArray *sources, long *sourceIndex); 63 63 … … 1093 1093 if (XSRC_OUTPUT && xsrcname) { 1094 1094 // 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)) { 1096 1096 // do anything? 1097 1097 } … … 1100 1100 if (XFIT_OUTPUT && xfitname) { 1101 1101 // 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)) { 1103 1103 // do anything? 1104 1104 } … … 1243 1243 // XXX: We might be able to macroize this and reuse for the other types 1244 1244 1245 static bool pmReadoutReadXSRC(pmFPAfile *file, char *exttype, psMetadata *hduHeader, psString xsrcname, psArray *sources, long *sourceIndex)1245 static bool pmReadoutReadXSRC(pmFPAfile *file, pmReadout *readout, char *exttype, psMetadata *hduHeader, psString xsrcname, psArray *sources, long *sourceIndex) 1246 1246 { 1247 1247 if (!psFitsMoveExtNameClean (file->fits, xsrcname)) { … … 1263 1263 # define PM_SOURCES_READ_XSRC(NAME,TYPE) \ 1264 1264 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); \ 1266 1266 } 1267 1267 … … 1282 1282 } 1283 1283 1284 static bool pmReadoutReadXFIT(pmFPAfile *file, char *exttype, psMetadata *hduHeader, psString extname, psArray *sources, long *sourceIndex)1284 static bool pmReadoutReadXFIT(pmFPAfile *file, pmReadout *readout, char *exttype, psMetadata *hduHeader, psString extname, psArray *sources, long *sourceIndex) 1285 1285 { 1286 1286 if (!psFitsMoveExtNameClean (file->fits, extname)) { … … 1302 1302 # define PM_SOURCES_READ_XFIT(NAME,TYPE) \ 1303 1303 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); \ 1305 1305 } 1306 1306 … … 1340 1340 # define PM_SOURCES_READ_XRAD(NAME,TYPE) \ 1341 1341 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); \ 1343 1343 } 1344 1344 -
trunk/psModules/src/objects/pmSourceIO.h
r34403 r35610 22 22 bool pmSourcesWrite_##TYPE##_XRAD(psFits *fits, pmReadout *readout, psArray *sources, psMetadata *imageHeader, char *extname, psMetadata *recipe); \ 23 23 psArray *pmSourcesRead_##TYPE (psFits *fits, psMetadata *header); \ 24 bool pmSourcesRead_##TYPE##_XSRC (psFits *fits, p sMetadata *header, psArray *sources, long *index); \25 bool pmSourcesRead_##TYPE##_XFIT (psFits *fits, p sMetadata *header, psArray *sources, long *index); \26 bool pmSourcesRead_##TYPE##_XRAD (psFits *fits, pmReadout *readout, psMetadata *header, ps Array *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);\ 27 27 28 28 // All of these functions need to use the same API, even if not all elements are used in a specific case -
trunk/psModules/src/objects/pmSourceIO_CMF.c.in
r35038 r35610 457 457 bool doPetrosian = psMetadataLookupBool (&status, recipe, "EXTENDED_SOURCE_PETROSIAN"); 458 458 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"); 461 469 psAssert (radMin->n == radMax->n, "inconsistent annular bins"); 462 470 … … 610 618 } 611 619 612 bool pmSourcesRead_CMF_@CMFMODE@_XSRC(psFits *fits, psMetadata *hduHeader, psArray *sources, long *sourceIndex) 620 static 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 681 bool pmSourcesRead_CMF_@CMFMODE@_XSRC(psFits *fits, pmReadout *readout, psMetadata *hduHeader, psMetadata *tableHeader, psArray *sources, long *sourceIndex) 613 682 { 614 683 PS_ASSERT_PTR_NON_NULL(fits, false); … … 626 695 float exptime = psMetadataLookupF32(&status, hduHeader, "EXPTIME"); 627 696 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 } 628 702 629 703 for (long i = 0; i < numSources; i++) { … … 920 994 } 921 995 922 bool pmSourcesRead_CMF_@CMFMODE@_XFIT(psFits *fits, p sMetadata *hduHeader, psArray *sources, long *sourceIndex)996 bool pmSourcesRead_CMF_@CMFMODE@_XFIT(psFits *fits, pmReadout *readout, psMetadata *hduHeader, psMetadata *tableHeader, psArray *sources, long *sourceIndex) 923 997 { 924 998 PS_ASSERT_PTR_NON_NULL(fits, false); … … 1043 1117 1044 1118 // 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!"); 1047 1128 psAssert (radMax, "this must have been defined and tested earlier!"); 1048 psAssert (radMax->n, "this must have been defined and tested earlier!");1049 1129 psAssert (radMin->n == radMax->n, "inconsistent annular bins"); 1050 1130 … … 1167 1247 } 1168 1248 1169 bool pmSourcesRead_CMF_@CMFMODE@_XRAD(psFits *fits, pmReadout *readout, psMetadata *hduHeader, ps Array *sources, long *sourceIndex)1249 bool pmSourcesRead_CMF_@CMFMODE@_XRAD(psFits *fits, pmReadout *readout, psMetadata *hduHeader, psMetadata *tableHeader, psArray *sources, long *sourceIndex) 1170 1250 { 1171 1251 PS_ASSERT_PTR_NON_NULL(fits, false); … … 1176 1256 if (numSources == 0) { 1177 1257 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"); 1178 1263 return false; 1179 1264 }
Note:
See TracChangeset
for help on using the changeset viewer.
