Changeset 5672
- Timestamp:
- Dec 4, 2005, 5:33:32 AM (20 years ago)
- Location:
- trunk/psphot
- Files:
-
- 7 added
- 14 edited
-
Makefile (modified) (4 diffs)
-
src/modelTestFitSource.c (modified) (2 diffs)
-
src/pmPeaksSigmaLimit.c (modified) (1 diff)
-
src/pmSourceContour.c (added)
-
src/psphot.c (modified) (5 diffs)
-
src/psphot.h (modified) (3 diffs)
-
src/psphotBasicDeblend.c (added)
-
src/psphotEnsemblePSF.c (added)
-
src/psphotFitGalaxies.c (modified) (2 diffs)
-
src/psphotFixedPSF.c (modified) (2 diffs)
-
src/psphotImageBackground.c (added)
-
src/psphotMagnitudes.c (modified) (2 diffs)
-
src/psphotMarkPSF.c (modified) (3 diffs)
-
src/psphotModelGroupInit.c (added)
-
src/psphotOutput.c (modified) (1 diff)
-
src/psphotReapplyPSF.c (added)
-
src/psphotSetup.c (modified) (1 diff)
-
src/psphotSortBySN.c (modified) (1 diff)
-
src/psphotSubtractPSF.c (modified) (2 diffs)
-
src/psphotTest.c (modified) (1 diff)
-
src/psphotTestArguments.c (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/Makefile
r5653 r5672 29 29 $(SRC)/psphotApplyPSF.$(ARCH).o \ 30 30 $(SRC)/psphotFixedPSF.$(ARCH).o \ 31 $(SRC)/psphotEnsemblePSF.$(ARCH).o \ 32 $(SRC)/psphotReapplyPSF.$(ARCH).o \ 31 33 $(SRC)/psphotFitGalaxies.$(ARCH).o \ 32 34 $(SRC)/psphotOutput.$(ARCH).o \ … … 36 38 $(SRC)/psphotDefinePixels.$(ARCH).o\ 37 39 $(SRC)/psphotMagnitudes.$(ARCH).o \ 40 $(SRC)/psphotImageBackground.$(ARCH).o \ 38 41 $(SRC)/psLine.$(ARCH).o \ 39 42 $(SRC)/psModulesUtils.$(ARCH).o \ 40 43 $(SRC)/pmPeaksSigmaLimit.$(ARCH).o \ 41 44 $(SRC)/pmSourceFitFixed.$(ARCH).o \ 45 $(SRC)/psSparse.$(ARCH).o \ 42 46 $(SRC)/psImageData.$(ARCH).o 43 47 … … 69 73 TEST = \ 70 74 $(SRC)/psphotTest.$(ARCH).o \ 75 $(SRC)/psphotTestArguments.$(ARCH).o \ 76 $(SRC)/pmSourceContour.$(ARCH).o \ 77 $(SRC)/psImageData.$(ARCH).o \ 78 $(SRC)/psphotSetup.$(ARCH).o \ 79 $(SRC)/psModulesUtils.$(ARCH).o \ 71 80 $(SRC)/psSparse.$(ARCH).o 72 81 … … 85 94 $(TEST): $(SRC)/psphot.h 86 95 87 INSTALL = psphot psphot ModelTest96 INSTALL = psphot psphotTest psphotModelTest 88 97 89 98 # dependancy rules for binary code ######################### -
trunk/psphot/src/modelTestFitSource.c
r5622 r5672 7 7 bool status; 8 8 int modelType; 9 float sky,obsMag, fitMag, value;9 float obsMag, fitMag, value; 10 10 char name[64]; 11 11 … … 96 96 97 97 // subtract object, leave local sky 98 sky = model->params->data.F32[0]; 99 model->params->data.F32[0] = 0; 100 pmSourceSubModel (source->pixels, source->mask, model, false); 101 model->params->data.F32[0] = sky; 98 pmSourceSubModel (source->pixels, source->mask, model, false, false); 102 99 103 100 // write out -
trunk/psphot/src/pmPeaksSigmaLimit.c
r5617 r5672 23 23 // set peak threshold 24 24 NSIGMA = psMetadataLookupF32 (&status, config, "PEAKS_NSIGMA_LIMIT"); 25 threshold = NSIGMA*sky->sampleStdev + sky->sampleMean; 25 26 // threshold = NSIGMA*sky->sampleStdev + sky->sampleMean; 27 threshold = NSIGMA*sky->sampleStdev; 26 28 psLogMsg ("psphot", 3, "threshold: %f DN\n", threshold); 27 29 -
trunk/psphot/src/psphot.c
r5643 r5672 11 11 pmPSFClump psfClump; 12 12 bool status; 13 14 psphotModelGroupInit (); 13 15 14 16 config = psphotArguments (&argc, argv); … … 25 27 // measure image stats for initial guess 26 28 sky = psphotImageStats (imdata, config); 29 30 // psPolynomial2D *skyModel = psphotImageBackground (imdata, config, sky); 31 psphotImageBackground (imdata, config, sky); 27 32 28 33 // find the peaks in the image … … 53 58 54 59 switch (FITMODE) { 60 case -2: 61 psphotEnsemblePSF (imdata, config, sources, psf, sky); 62 psphotReapplyPSF (imdata, config, sources, psf, sky); 63 break; 64 65 case -1: 66 psphotEnsemblePSF (imdata, config, sources, psf, sky); 67 break; 68 55 69 case 0: 56 70 psphotFixedPSF (imdata, config, sources, psf, sky); … … 63 77 64 78 case 2: 65 // fit extended objects with galaxy models79 // fit extended objects with galaxy models 66 80 psphotApplyPSF (imdata, config, sources, psf, sky); 67 81 psphotFitGalaxies (imdata, config, sources, sky); … … 69 83 70 84 case 3: 71 // fit extended objects with galaxy models85 // fit extended objects with galaxy models 72 86 psphotFixedPSF (imdata, config, sources, psf, sky); 73 87 psphotFitGalaxies (imdata, config, sources, sky); -
trunk/psphot/src/psphot.h
r5654 r5672 3 3 # include <unistd.h> // for unlink 4 4 # include <pslib.h> 5 # include <pmObjects.h> 6 # include <pmPSF.h> 7 # include <pmPSFtry.h> 8 # include <pmModelGroup.h> 5 9 # include "psLibUtils.h" 6 # include "pmObjects_EAM.h"7 10 # include "psModulesUtils.h" 8 # include "pmPSF.h"9 # include "pmPSFtry.h"10 # include "pmModelGroup.h"11 11 # include "psSparse.h" 12 13 # define psMemCopy(A)(psMemIncrRefCounter((A))) 12 14 13 15 typedef struct { … … 32 34 bool psphotSubtractPSF (pmSource *source); 33 35 int psphotSortBySN (const void **a, const void **b); 36 int psphotSortByY (const void **a, const void **b); 34 37 int psphotSaveImage (psMetadata *header, psImage *image, char *filename); 35 38 bool psphotDefinePixels (pmSource *mySource, const eamReadout *imdata, psF32 x, psF32 y, psF32 Radius); … … 61 64 psMetadata *modelTestArguments (int *argc, char **argv); 62 65 bool modelTestFitSource (eamReadout *imdata, psMetadata *config); 66 bool psphotEnsemblePSF (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky); 67 float psphotCrossProduct (pmSource *Mi, pmSource *Mj); 68 psPolynomial2D *psphotImageBackground (eamReadout *imdata, psMetadata *config, psStats *sky); 69 bool psphotReapplyPSF (eamReadout *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky); 70 71 pmModel *pmModelCopy (pmModel *model); 72 psArray *pmSourceContour_EAM (psImage *image, int x, int y, float threshold); 73 psMetadata *psphotTestArguments (int *argc, char **argv); -
trunk/psphot/src/psphotFitGalaxies.c
r5593 r5672 6 6 float x; 7 7 float y; 8 float sky;9 8 int Nfit = 0; 10 9 int Nfail = 0; … … 104 103 105 104 // subtract object, leave local sky 106 sky = model->params->data.F32[0]; 107 model->params->data.F32[0] = 0; 108 pmSourceSubModel (source->pixels, source->mask, model, false); 109 model->params->data.F32[0] = sky; 110 105 pmSourceSubModel (source->pixels, source->mask, model, false, false); 111 106 } 112 107 psLogMsg ("psphot", 3, "fit galaxies: %f sec for %d galaxies (%d failures, %d total iterations)\n", psTimerMark ("psphot"), Nfit, Nfail, Niter); -
trunk/psphot/src/psphotFixedPSF.c
r5643 r5672 8 8 float x; 9 9 float y; 10 float Sky;11 10 int Nfit = 0; 12 11 … … 77 76 78 77 // subtract object, leave local sky 79 Sky = model->params->data.F32[0]; 80 model->params->data.F32[0] = 0; 81 pmSourceSubModel (source->pixels, source->mask, source->modelPSF, false); 82 model->params->data.F32[0] = Sky; 78 pmSourceSubModel (source->pixels, source->mask, source->modelPSF, false, false); 83 79 } 84 80 -
trunk/psphot/src/psphotMagnitudes.c
r5124 r5672 24 24 25 25 // replace source flux 26 // XXX EAM : need to add 'sky' boolean option here 27 model->params->data.F32[0] = 0; 28 pmSourceAddModel (source->pixels, source->mask, model, false); 29 model->params->data.F32[0] = sky; 26 pmSourceAddModel (source->pixels, source->mask, model, false, false); 30 27 31 28 // measure object photometry … … 38 35 39 36 // subtract object, leave local sky 40 // XXX EAM : need to add 'sky' boolean option here 41 model->params->data.F32[0] = 0; 42 pmSourceSubModel (source->pixels, source->mask, model, false); 43 model->params->data.F32[0] = sky; 37 pmSourceSubModel (source->pixels, source->mask, model, false, false); 44 38 45 39 // unmask aperture -
trunk/psphot/src/psphotMarkPSF.c
r5058 r5672 30 30 float nSx, nSy, Chi; 31 31 32 if (source->modelPSF == NULL) return (false);32 pmModel *model = source->modelPSF; 33 33 34 // if object has fitted peak above saturation, label as SATSTAR 34 // do we actually have a valid PSF model? 35 if (model == NULL) return (false); 36 37 // did the model fit fail for one or another reason? 38 switch (model->status) { 39 case PM_MODEL_BADARGS: 40 case PM_MODEL_UNTRIED: 41 source->type = PM_SOURCE_FAIL_FIT_PSF; // better choice? 42 return false; 43 case PM_MODEL_SUCCESS: 44 break; 45 case PM_MODEL_NONCONVERGE: 46 case PM_MODEL_OFFIMAGE: 47 psLogMsg ("psphot", 5, "PSF fit failed for %f, %f (%d iterations)\n", model->params->data.F32[2], model->params->data.F32[3], model->nIter); 48 source->type = PM_SOURCE_FAIL_FIT_PSF; // better choice? 49 return false; 50 default: 51 return false; 52 } 53 54 // if the object has fitted peak above saturation, label as SATSTAR 55 // this is a valid PSF object, but ignore the other quality tests 35 56 // remember: fit does not use saturated pixels (masked) 36 if ( source->modelPSF->params->data.F32[1] >= SATURATE) {57 if (model->params->data.F32[1] >= SATURATE) { 37 58 if (source->type == PM_SOURCE_PSFSTAR) { 38 59 psLogMsg ("psphot", 5, "PSFSTAR marked SATSTAR\n"); … … 41 62 return (true); 42 63 } 64 65 // if the object has a fitted peak below 0, the fit did not converge cleanly 66 if (model->params->data.F32[1] < 0) { 67 source->type = PM_SOURCE_FAIL_FIT_PSF; 68 return (false); 69 } 70 71 // if the source was predicted to be a SATSTAR, but it fitted below saturation, 72 // make a note to the user 43 73 if (source->type == PM_SOURCE_SATSTAR) { 44 74 psLogMsg ("psphot", 5, "SATSTAR marked GOODSTAR (fitted peak below saturation)\n"); … … 46 76 } 47 77 48 SN = source->modelPSF->params->data.F32[1]/source->modelPSF->dparams->data.F32[1];49 SX = source->modelPSF->params->data.F32[4];50 SY = source->modelPSF->params->data.F32[5];51 dSX = source->modelPSF->dparams->data.F32[4];52 dSY = source->modelPSF->dparams->data.F32[5];53 Chi = source->modelPSF->chisq / source->modelPSF->nDOF;78 SN = model->params->data.F32[1]/model->dparams->data.F32[1]; 79 SX = model->params->data.F32[4]; 80 SY = model->params->data.F32[5]; 81 dSX = model->dparams->data.F32[4]; 82 dSY = model->dparams->data.F32[5]; 83 Chi = model->chisq / model->nDOF; 54 84 55 85 // swing of sigma_x,y in sigmas -
trunk/psphot/src/psphotOutput.c
r5628 r5672 583 583 unlink (filename); 584 584 psFits *fits = psFitsAlloc (filename); 585 psFitsWriteImage (fits, header, image, 0);585 psFitsWriteImage (fits, NULL, image, 0); 586 586 psFree (fits); 587 587 return (TRUE); -
trunk/psphot/src/psphotSetup.c
r5622 r5672 84 84 // XXX EAM does the mask need to grow? 85 85 float SATURATION = psMetadataLookupF32 (&status, config, "SATURATION"); 86 for (int i = 0; i < image->numRows; i++) {86 for (int i = 0; status && (i < image->numRows); i++) { 87 87 for (int j = 0; j < image->numCols; j++) { 88 88 if (image->data.F32[i][j] >= SATURATION) { 89 89 mask->data.U8[i][j] |= PSPHOT_MASK_SATURATED; 90 } 91 } 92 } 93 94 // mask the pixels below min threshold 95 float MIN_VALID = psMetadataLookupF32 (&status, config, "MIN_VALID_PIXEL"); 96 for (int i = 0; status && (i < image->numRows); i++) { 97 for (int j = 0; j < image->numCols; j++) { 98 if (image->data.F32[i][j] < MIN_VALID) { 99 mask->data.U8[i][j] |= PSPHOT_MASK_INVALID; 90 100 } 91 101 } -
trunk/psphot/src/psphotSortBySN.c
r4949 r5672 18 18 } 19 19 20 // sort by Y (ascending) 21 int psphotSortByY (const void **a, const void **b) 22 { 23 pmSource *A = *(pmSource **)a; 24 pmSource *B = *(pmSource **)b; 25 26 psF32 fA = (A->moments == NULL) ? 0 : A->moments->y; 27 psF32 fB = (B->moments == NULL) ? 0 : B->moments->y; 28 29 psF32 diff = fA - fB; 30 if (diff > FLT_EPSILON) return (+1); 31 if (diff < FLT_EPSILON) return (-1); 32 return (0); 33 } 34 -
trunk/psphot/src/psphotSubtractPSF.c
r5049 r5672 6 6 bool psphotSubtractPSF (pmSource *source) 7 7 { 8 float sky;9 8 pmModel *model; 10 psImage *pixels;11 9 12 10 // only subtract successful fits … … 23 21 } 24 22 25 pixels = source->pixels;26 27 23 // subtract object, leave local sky 28 sky = model->params->data.F32[0]; 29 model->params->data.F32[0] = 0; 30 pmSourceSubModel (pixels, source->mask, model, false); 31 model->params->data.F32[0] = sky; 24 pmSourceSubModel (source->pixels, source->mask, model, false, false); 32 25 33 26 // XXX EAM : amplify the weight matrix a la dophot? -
trunk/psphot/src/psphotTest.c
r5654 r5672 3 3 int main (int argc, char **argv) { 4 4 5 psSparseMatrixTest ();5 bool status; 6 6 7 psMetadata *config = psphotTestArguments (&argc, argv); 8 eamReadout *imdata = psphotSetup (config); 9 10 int x = psMetadataLookupF32 (&status, config, "TEST_FIT_X"); 11 int y = psMetadataLookupF32 (&status, config, "TEST_FIT_Y"); 12 float fraction = psMetadataLookupF32 (&status, config, "TEST_FRACTION"); 13 float threshold = psMetadataLookupF32 (&status, config, "TEST_THRESHOLD"); 14 15 if (threshold == -1) { 16 threshold = fraction * imdata->image->data.F32[y][x]; 17 } 18 19 psArray *contour = pmSourceContour_EAM (imdata->image, x, y, threshold); 20 if (contour == NULL) { 21 fprintf (stderr, "error: invalid contour\n"); 22 exit (1); 23 } 24 25 psVector *xV = contour->data[0]; 26 psVector *yV = contour->data[1]; 27 28 for (int i = 0; i < xV->n; i++) { 29 fprintf (stdout, "%d %f %f\n", i, xV->data.F32[i], yV->data.F32[i]); 30 } 31 32 // psSparseMatrixTest (); 33 exit (0); 7 34 }
Note:
See TracChangeset
for help on using the changeset viewer.
