Changeset 25383 for trunk/psModules
- Timestamp:
- Sep 15, 2009, 12:45:01 PM (17 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
- 2 copied
-
. (modified) (1 prop)
-
psModules/src/camera/pmFPAMosaic.c (modified) (13 diffs)
-
psModules/src/camera/pmReadoutFake.c (modified) (2 diffs, 1 prop)
-
psModules/src/camera/pmReadoutFake.h (modified) (1 diff)
-
psModules/src/objects/Makefile.am (modified) (2 diffs)
-
psModules/src/objects/pmDetEff.c (copied) (copied from branches/pap/psModules/src/objects/pmDetEff.c )
-
psModules/src/objects/pmDetEff.h (copied) (copied from branches/pap/psModules/src/objects/pmDetEff.h )
-
psModules/src/objects/pmSourceIO.c (modified) (8 diffs)
-
psModules/src/psmodules.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/pap (added) merged: 25238,25241-25243,25246,25258-25267,25278,25302,25309-25312,25326-25329,25331-25339
- Property svn:mergeinfo changed
-
trunk/psModules/src/camera/pmFPAMosaic.c
r21363 r25383 740 740 static bool chipMosaic(psImage **mosaicImage, // The mosaic image, to be returned 741 741 psImage **mosaicMask, // The mosaic mask, to be returned 742 psImage **mosaicVariance s, // The mosaic variances, to be returned742 psImage **mosaicVariance, // The mosaic variance, to be returned 743 743 int *xBinChip, int *yBinChip, // The binning in x and y, to be returned 744 744 const pmChip *chip, // Chip to mosaic … … 749 749 assert(mosaicImage); 750 750 assert(mosaicMask); 751 assert(mosaicVariance s);751 assert(mosaicVariance); 752 752 assert(xBinChip); 753 753 assert(yBinChip); … … 826 826 if (allGood) { 827 827 *mosaicImage = imageMosaic(images, xFlip, yFlip, xBin, yBin, *xBinChip, *yBinChip, x0, y0, BLANK_VALUE); 828 *mosaicVariance s= imageMosaic(variances, xFlip, yFlip, xBin, yBin, *xBinChip, *yBinChip, x0, y0, BLANK_VALUE);828 *mosaicVariance = imageMosaic(variances, xFlip, yFlip, xBin, yBin, *xBinChip, *yBinChip, x0, y0, BLANK_VALUE); 829 829 *mosaicMask = imageMosaic(masks, xFlip, yFlip, xBin, yBin, *xBinChip, *yBinChip, x0, y0, blank); 830 830 } … … 847 847 static bool fpaMosaic(psImage **mosaicImage, // The mosaic image, to be returned 848 848 psImage **mosaicMask, // The mosaic mask, to be returned 849 psImage **mosaicVariance s, // The mosaic variances, to be returned849 psImage **mosaicVariance, // The mosaic variance, to be returned 850 850 int *xBinFPA, int *yBinFPA, // The binning in x and y, to be returned 851 851 const pmFPA *fpa, // FPA to mosaic … … 857 857 assert(mosaicImage); 858 858 assert(mosaicMask); 859 assert(mosaicVariance s);859 assert(mosaicVariance); 860 860 assert(xBinFPA); 861 861 assert(yBinFPA); … … 960 960 if (allGood) { 961 961 *mosaicImage = imageMosaic(images, xFlip, yFlip, xBin, yBin, *xBinFPA, *yBinFPA, x0, y0, BLANK_VALUE); 962 *mosaicVariance s= imageMosaic(variances, xFlip, yFlip, xBin, yBin, *xBinFPA, *yBinFPA, x0, y0, BLANK_VALUE);962 *mosaicVariance = imageMosaic(variances, xFlip, yFlip, xBin, yBin, *xBinFPA, *yBinFPA, x0, y0, BLANK_VALUE); 963 963 *mosaicMask = imageMosaic(masks, xFlip, yFlip, xBin, yBin, *xBinFPA, *yBinFPA, x0, y0, blank); 964 964 } … … 1025 1025 psImage *mosaicImage = NULL; // The mosaic image 1026 1026 psImage *mosaicMask = NULL; // The mosaic mask 1027 psImage *mosaicVariance s= NULL; // The mosaic variances1027 psImage *mosaicVariance = NULL; // The mosaic variances 1028 1028 1029 1029 // Find the HDU … … 1052 1052 } 1053 1053 if (hdu->variances) { 1054 mosaicVariance s= psImageSubset(hdu->variances->data[0], bounds);1055 if (!mosaicVariance s) {1054 mosaicVariance = psImageSubset(hdu->variances->data[0], bounds); 1055 if (!mosaicVariance) { 1056 1056 psError(PS_ERR_UNKNOWN, false, "Unable to select variance pixels.\n"); 1057 1057 return false; … … 1061 1061 // Case 2 --- we need to mosaic by cut and paste 1062 1062 psTrace("psModules.camera", 1, "Case 2 mosaicking: cut and paste.\n"); 1063 if (!chipMosaic(&mosaicImage, &mosaicMask, &mosaicVariance s, &xBin, &yBin, source, targetCell, blank)) {1063 if (!chipMosaic(&mosaicImage, &mosaicMask, &mosaicVariance, &xBin, &yBin, source, targetCell, blank)) { 1064 1064 psError(PS_ERR_UNKNOWN, false, "Unable to mosaic cells.\n"); 1065 1065 return false; … … 1069 1069 } 1070 1070 psTrace("psModules.camera", 1, "xBin,yBin: %d,%d\n", xBin, yBin); 1071 1071 1072 1072 1073 // Set the concepts for the target cell … … 1090 1091 target->parent->concepts = psMetadataCopy(target->parent->concepts, source->parent->concepts); // FPA lvl 1091 1092 1093 // Average the covariances 1094 psList *covariances = psListAlloc(NULL); // Input covariance matrices 1095 for (int i = 0; i < source->cells->n; i++) { 1096 pmCell *cell = source->cells->data[i]; // Cell of interest 1097 if (!cell || !cell->data_exists) { 1098 continue; 1099 } 1100 pmReadout *ro = cell->readouts->data[0]; // Readout of interest 1101 if (!ro || !ro->covariance) { 1102 continue; 1103 } 1104 psListAdd(covariances, PS_LIST_TAIL, ro->covariance); 1105 } 1106 psKernel *mosaicCovariance = NULL; // Covariance for mosaic 1107 if (psListLength(covariances) > 0) { 1108 psArray *covarArray = psListToArray(covariances); // Array with covariances 1109 mosaicCovariance = psImageCovarianceAverage(covarArray); 1110 psFree(covarArray); 1111 } 1112 psFree(covariances); 1113 1092 1114 // Now make a new readout to go in the target cell 1093 1115 pmReadout *newReadout = pmReadoutAlloc(targetCell); // New readout 1094 1116 newReadout->image = mosaicImage; 1095 1117 newReadout->mask = mosaicMask; 1096 newReadout->variance = mosaicVariances; 1118 newReadout->variance = mosaicVariance; 1119 newReadout->covariance = mosaicCovariance; 1097 1120 psFree(newReadout); // Drop reference 1098 1121 … … 1334 1357 target->concepts = psMetadataCopy(target->concepts, source->concepts); 1335 1358 1359 // Average the covariances 1360 psList *covariances = psListAlloc(NULL); // Input covariance matrices 1361 for (int i = 0; i < covariances->n; i++) { 1362 pmChip *chip = chips->data[i]; // Chip of interest 1363 if (!chip || !chip->data_exists) { 1364 continue; 1365 } 1366 psArray *cells = chip->cells; // Cells in chip 1367 for (long j = 0; j < cells->n; j++) { 1368 pmCell *cell = cells->data[i]; // Cell of interest 1369 if (!cell || !cell->data_exists) { 1370 continue; 1371 } 1372 pmReadout *ro = cell->readouts->data[0]; // Readout of interest 1373 if (!ro || !ro->covariance) { 1374 continue; 1375 } 1376 psListAdd(covariances, PS_LIST_TAIL, ro->covariance); 1377 } 1378 } 1379 psKernel *mosaicCovariances = NULL; // Covariance for mosaic 1380 if (psListLength(covariances) > 0) { 1381 psArray *covarArray = psListToArray(covariances); // Array with covariances 1382 mosaicCovariances = psImageCovarianceAverage(covarArray); 1383 psFree(covarArray); 1384 } 1385 psFree(covariances); 1386 1336 1387 // Now make a new readout to go in the new cell 1337 1388 pmReadout *newReadout = pmReadoutAlloc(targetCell); // New readout … … 1339 1390 newReadout->mask = mosaicMask; 1340 1391 newReadout->variance = mosaicVariances; 1392 newReadout->covariance = mosaicCovariances; 1341 1393 psFree(newReadout); // Drop reference 1342 1394 -
trunk/psModules/src/camera/pmReadoutFake.c
- Property svn:mergeinfo changed
/branches/pap/psModules/src/camera/pmReadoutFake.c merged: 25243,25310
r25324 r25383 82 82 } 83 83 PS_ASSERT_PTR_NON_NULL(psf, false); 84 if (radius > 0 && isfinite(minFlux) && minFlux > 0.0) {85 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Cannot define both minimum flux and fixed radius.");86 return false;87 }88 84 89 85 readout->image = psImageRecycle(readout->image, numCols, numRows, PS_TYPE_F32); … … 128 124 pmSource *fakeSource = pmSourceAlloc(); // Fake source to generate 129 125 fakeSource->peak = pmPeakAlloc(xSrc, ySrc, fakeModel->params->data.F32[PM_PAR_I0], PM_PEAK_LONE); 130 float fakeRadius = radius > 0 ? radius : 131 PS_MAX(1.0, fakeModel->modelRadius(fakeModel->params, minFlux)); // Radius of fake source 126 float fakeRadius = 1.0; // Radius of fake source 127 if (isfinite(minFlux)) { 128 fakeRadius = PS_MAX(fakeRadius, fakeModel->modelRadius(fakeModel->params, minFlux)); 129 } 130 if (radius > 0) { 131 fakeRadius = PS_MAX(fakeRadius, radius); 132 } 132 133 133 134 if (xOffset) { - Property svn:mergeinfo changed
-
trunk/psModules/src/camera/pmReadoutFake.h
r25313 r25383 13 13 #include <pmSourceMasks.h> 14 14 15 /// Generate a fake readout from vectors 16 bool pmReadoutFakeFromVectors(pmReadout *readout, ///< Output readout 17 int numCols, int numRows, ///< Dimension of image 18 const psVector *x, const psVector *y, ///< Source coordinates 19 const psVector *mag, ///< Source magnitudes 20 const psVector *xOffset, ///< x offsets for sources (source -> img), or NULL 21 const psVector *yOffset, ///< y offsets for sources (source -> img), or NULL 22 const pmPSF *psf, ///< PSF for sources 23 float minFlux, ///< Minimum flux to bother about; for setting source radius 24 int radius, ///< Fixed radius for sources 25 bool circularise, ///< Circularise PSF model? 26 bool normalisePeak ///< Normalise the peak value? 27 ); 28 15 29 /// Generate a fake readout from an array of sources 16 bool pmReadoutFakeFromSources(pmReadout *readout, ///< Output readout , or NULL30 bool pmReadoutFakeFromSources(pmReadout *readout, ///< Output readout 17 31 int numCols, int numRows, ///< Dimension of image 18 32 const psArray *sources, ///< Array of pmSource -
trunk/psModules/src/objects/Makefile.am
r24875 r25383 53 53 pmGrowthCurveGenerate.c \ 54 54 pmGrowthCurve.c \ 55 pmSourceMatch.c 55 pmSourceMatch.c \ 56 pmDetEff.c 56 57 57 58 EXTRA_DIST = \ … … 90 91 pmTrend2D.h \ 91 92 pmGrowthCurve.h \ 92 pmSourceMatch.h 93 pmSourceMatch.h \ 94 pmDetEff.h 93 95 94 96 CLEANFILES = *~ -
trunk/psModules/src/objects/pmSourceIO.c
r24694 r25383 42 42 #include "pmSource.h" 43 43 #include "pmModelClass.h" 44 #include "pmDetEff.h" 44 45 #include "pmSourceIO.h" 45 46 46 47 #define BLANK_HEADERS "BLANK.HEADERS" // Name of metadata in camera configuration containing header names 47 48 // for putting values into a blank PHU 49 50 // lookup the EXTNAME values used for table data and image header segments 51 static bool sourceExtensions(psString *headname, // Extension name for header 52 psString *dataname, // Extension name for data 53 psString *deteffname, // Extension name for detection efficiency 54 psString *xsrcname, // Extension name for extended sources 55 psString *xfitname, // Extension name for extended fits 56 const pmFPAfile *file, // File of interest 57 const pmFPAview *view // View to level of interest 58 ) 59 { 60 bool status; // Status of MD lookup 61 62 // Menu of EXTNAME rules 63 psMetadata *menu = psMetadataLookupMetadata(&status, file->camera, "EXTNAME.RULES"); 64 if (!menu) { 65 psError(PS_ERR_UNKNOWN, true, "missing EXTNAME.RULES in camera.config"); 66 return false; 67 } 68 69 // EXTNAME for image header 70 if (headname) { 71 const char *rule = psMetadataLookupStr(&status, menu, "CMF.HEAD"); 72 if (!rule) { 73 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.HEAD in EXTNAME.RULES in camera.config"); 74 return false; 75 } 76 *headname = pmFPAfileNameFromRule(rule, file, view); 77 } 78 79 // EXTNAME for table data 80 if (dataname) { 81 const char *rule = psMetadataLookupStr(&status, menu, "CMF.DATA"); 82 if (!rule) { 83 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.DATA in EXTNAME.RULES in camera.config"); 84 return false; 85 } 86 *dataname = pmFPAfileNameFromRule(rule, file, view); 87 } 88 89 // EXTNAME for detection efficiency 90 if (deteffname) { 91 const char *rule = psMetadataLookupStr(&status, menu, "CMF.DETEFF"); 92 if (!rule) { 93 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.DETEFF in EXTNAME.RULES in camera.config"); 94 return false; 95 } 96 *deteffname = pmFPAfileNameFromRule(rule, file, view); 97 } 98 99 // EXTNAME for extended source data table 100 if (xsrcname) { 101 const char *rule = psMetadataLookupStr(&status, menu, "CMF.XSRC"); 102 if (!rule) { 103 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.XSRC in EXTNAME.RULES in camera.config"); 104 return false; 105 } 106 *xsrcname = pmFPAfileNameFromRule (rule, file, view); 107 } 108 109 if (xfitname) { 110 // EXTNAME for extended source data table 111 const char *rule = psMetadataLookupStr(&status, menu, "CMF.XFIT"); 112 if (!rule) { 113 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.XFIT in EXTNAME.RULES in camera.config"); 114 return false; 115 } 116 *xfitname = pmFPAfileNameFromRule (rule, file, view); 117 } 118 119 return true; 120 } 121 48 122 49 123 // translations between psphot object types and dophot object types … … 271 345 272 346 char *exttype = NULL; 273 char *dataname = NULL;274 char *xsrcname = NULL;275 char *xfitname = NULL;276 char *headname = NULL;277 347 278 348 // if sources is NULL, write out an empty table … … 354 424 355 425 // define the EXTNAME values for the different data segments: 356 { 357 // lookup the EXTNAME values used for table data and image header segments 358 char *rule = NULL; 359 360 // Menu of EXTNAME rules 361 psMetadata *menu = psMetadataLookupMetadata(&status, file->camera, "EXTNAME.RULES"); 362 if (!menu) { 363 psError(PS_ERR_UNKNOWN, true, "missing EXTNAME.RULES in camera.config"); 364 return false; 365 } 366 367 // EXTNAME for image header 368 rule = psMetadataLookupStr(&status, menu, "CMF.HEAD"); 369 if (!rule) { 370 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.HEAD in EXTNAME.RULES in camera.config"); 371 return false; 372 } 373 headname = pmFPAfileNameFromRule (rule, file, view); 374 375 // EXTNAME for table data 376 rule = psMetadataLookupStr(&status, menu, "CMF.DATA"); 377 if (!rule) { 378 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.DATA in EXTNAME.RULES in camera.config"); 379 return false; 380 } 381 dataname = pmFPAfileNameFromRule (rule, file, view); 382 383 if (XSRC_OUTPUT) { 384 // EXTNAME for extended source data table 385 rule = psMetadataLookupStr(&status, menu, "CMF.XSRC"); 386 if (!rule) { 387 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.XSRC in EXTNAME.RULES in camera.config"); 388 return false; 389 } 390 xsrcname = pmFPAfileNameFromRule (rule, file, view); 391 } 392 if (XFIT_OUTPUT) { 393 // EXTNAME for extended source data table 394 rule = psMetadataLookupStr(&status, menu, "CMF.XFIT"); 395 if (!rule) { 396 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.XFIT in EXTNAME.RULES in camera.config"); 397 return false; 398 } 399 xfitname = pmFPAfileNameFromRule (rule, file, view); 400 } 426 psString headname = NULL; 427 psString dataname = NULL; 428 psString deteffname = NULL; 429 psString xsrcname = NULL; 430 psString xfitname = NULL; 431 if (!sourceExtensions(&headname, &dataname, &deteffname, XSRC_OUTPUT ? &xsrcname : NULL, 432 XFIT_OUTPUT ? &xfitname : NULL, file, view)) { 433 return false; 401 434 } 402 435 … … 480 513 481 514 // XXX these are case-sensitive since the EXTYPE is case-sensitive 482 status = false;515 status = true; 483 516 if (!strcmp (exttype, "SMPDATA")) { 484 status = pmSourcesWrite_SMPDATA (file->fits, sources, file->header, outhead, dataname);517 status &= pmSourcesWrite_SMPDATA (file->fits, sources, file->header, outhead, dataname); 485 518 } 486 519 if (!strcmp (exttype, "PS1_DEV_0")) { 487 status = pmSourcesWrite_PS1_DEV_0 (file->fits, sources, file->header, outhead, dataname);520 status &= pmSourcesWrite_PS1_DEV_0 (file->fits, sources, file->header, outhead, dataname); 488 521 } 489 522 if (!strcmp (exttype, "PS1_DEV_1")) { 490 status = pmSourcesWrite_PS1_DEV_1 (file->fits, sources, file->header, outhead, dataname);523 status &= pmSourcesWrite_PS1_DEV_1 (file->fits, sources, file->header, outhead, dataname); 491 524 } 492 525 if (!strcmp (exttype, "PS1_CAL_0")) { 493 status = pmSourcesWrite_PS1_CAL_0 (file->fits, readout, sources, file->header, outhead, dataname);526 status &= pmSourcesWrite_PS1_CAL_0 (file->fits, readout, sources, file->header, outhead, dataname); 494 527 } 495 528 if (!strcmp (exttype, "PS1_V1")) { 496 status = pmSourcesWrite_CMF_PS1_V1 (file->fits, readout, sources, file->header, outhead, dataname);529 status &= pmSourcesWrite_CMF_PS1_V1 (file->fits, readout, sources, file->header, outhead, dataname); 497 530 } 498 531 if (!strcmp (exttype, "PS1_V2")) { 499 status = pmSourcesWrite_CMF_PS1_V2 (file->fits, readout, sources, file->header, outhead, dataname); 500 } 532 status &= pmSourcesWrite_CMF_PS1_V2 (file->fits, readout, sources, file->header, outhead, dataname); 533 } 534 535 if (deteffname) { 536 status &= pmReadoutWriteDetEff(file->fits, readout, outhead, deteffname); 537 } 538 501 539 if (xsrcname) { 502 540 if (!strcmp (exttype, "PS1_DEV_1")) { 503 status = pmSourcesWrite_PS1_DEV_1_XSRC (file->fits, sources, xsrcname, recipe);541 status &= pmSourcesWrite_PS1_DEV_1_XSRC (file->fits, sources, xsrcname, recipe); 504 542 } 505 543 if (!strcmp (exttype, "PS1_CAL_0")) { 506 status = pmSourcesWrite_PS1_CAL_0_XSRC (file->fits, readout, sources, file->header, xsrcname, recipe);544 status &= pmSourcesWrite_PS1_CAL_0_XSRC (file->fits, readout, sources, file->header, xsrcname, recipe); 507 545 } 508 546 if (!strcmp (exttype, "PS1_V1")) { 509 status = pmSourcesWrite_CMF_PS1_V1_XSRC (file->fits, sources, xsrcname, recipe);547 status &= pmSourcesWrite_CMF_PS1_V1_XSRC (file->fits, sources, xsrcname, recipe); 510 548 } 511 549 if (!strcmp (exttype, "PS1_V2")) { 512 status = pmSourcesWrite_CMF_PS1_V2_XSRC (file->fits, sources, xsrcname, recipe);550 status &= pmSourcesWrite_CMF_PS1_V2_XSRC (file->fits, sources, xsrcname, recipe); 513 551 } 514 552 } 515 553 if (xfitname) { 516 554 if (!strcmp (exttype, "PS1_DEV_1")) { 517 status = pmSourcesWrite_PS1_DEV_1_XFIT (file->fits, sources, xfitname);555 status &= pmSourcesWrite_PS1_DEV_1_XFIT (file->fits, sources, xfitname); 518 556 } 519 557 if (!strcmp (exttype, "PS1_CAL_0")) { 520 status = pmSourcesWrite_PS1_CAL_0_XFIT (file->fits, readout, sources, file->header, xfitname);558 status &= pmSourcesWrite_PS1_CAL_0_XFIT (file->fits, readout, sources, file->header, xfitname); 521 559 } 522 560 if (!strcmp (exttype, "PS1_V1")) { 523 status = pmSourcesWrite_CMF_PS1_V1_XFIT (file->fits, sources, xfitname);561 status &= pmSourcesWrite_CMF_PS1_V1_XFIT (file->fits, sources, xfitname); 524 562 } 525 563 if (!strcmp (exttype, "PS1_V2")) { 526 status = pmSourcesWrite_CMF_PS1_V2_XFIT (file->fits, sources, xfitname);564 status &= pmSourcesWrite_CMF_PS1_V2_XFIT (file->fits, sources, xfitname); 527 565 } 528 566 } … … 572 610 // not needed if only one chip 573 611 if (file->fpa->chips->n == 1) { 574 pmSourceIO_WriteMatchedRefs (file->fits, file->fpa, config);575 return true;612 pmSourceIO_WriteMatchedRefs (file->fits, file->fpa, config); 613 return true; 576 614 } 577 615 … … 885 923 hdu = pmFPAviewThisHDU (view, file->fpa); 886 924 887 // lookup the EXTNAME values used for table data and image header segments 888 char *rule = NULL; 889 // Menu of EXTNAME rules 890 psMetadata *menu = psMetadataLookupMetadata(&status, file->camera, "EXTNAME.RULES"); 891 if (!menu) { 892 psError(PS_ERR_UNKNOWN, true, "missing EXTNAME.RULES in camera.config"); 893 return false; 894 } 895 // EXTNAME for image header 896 rule = psMetadataLookupStr(&status, menu, "CMF.HEAD"); 897 if (!rule) { 898 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.HEAD in EXTNAME.RULES in camera.config"); 899 return false; 900 } 901 char *headname = pmFPAfileNameFromRule (rule, file, view); 902 // EXTNAME for table data 903 rule = psMetadataLookupStr(&status, menu, "CMF.DATA"); 904 if (!rule) { 905 psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.DATA in EXTNAME.RULES in camera.config"); 906 return false; 907 } 908 char *dataname = pmFPAfileNameFromRule (rule, file, view); 925 // define the EXTNAME values for the different data segments: 926 psString headname = NULL; 927 psString dataname = NULL; 928 psString deteffname = NULL; 929 if (!sourceExtensions(&headname, &dataname, &deteffname, NULL, NULL, file, view)) { 930 return false; 931 } 909 932 910 933 // advance to the IMAGE HEADER extension … … 958 981 sources = pmSourcesRead_CMF_PS1_V2 (file->fits, hdu->header); 959 982 } 983 984 if (!pmReadoutReadDetEff(file->fits, readout, deteffname)) { 985 psError(PS_ERR_IO, false, "Unable to read detection efficiency"); 986 return false; 987 } 960 988 } 961 989 … … 1070 1098 } 1071 1099 1072 1100 -
trunk/psModules/src/psmodules.h
r24891 r25383 133 133 #include <pmSourceVisual.h> 134 134 #include <pmSourceMatch.h> 135 #include <pmDetEff.h> 135 136 136 137 // The following headers are from random locations, here because they cross bounds
Note:
See TracChangeset
for help on using the changeset viewer.
