- Timestamp:
- May 3, 2010, 8:50:52 AM (16 years ago)
- Location:
- branches/simtest_nebulous_branches
- Files:
-
- 4 edited
-
. (modified) (1 prop)
-
psphot (modified) (1 prop)
-
psphot/src (modified) (1 prop)
-
psphot/src/psphotRoughClass.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/simtest_nebulous_branches
- Property svn:mergeinfo changed
-
branches/simtest_nebulous_branches/psphot
-
Property svn:mergeinfo
set to (toggle deleted branches)
/trunk/psphot merged eligible /branches/eam_branches/stackphot.20100406/psphot 27622-27655 /branches/pap_delete/psphot 27530-27595
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
branches/simtest_nebulous_branches/psphot/src
- Property svn:ignore
-
old new 18 18 psphotVersionDefinitions.h 19 19 psphotMomentsStudy 20 psphotPetrosianStudy 21 psphotForced 22 psphotMakePSF 23 psphotStack
-
- Property svn:ignore
-
branches/simtest_nebulous_branches/psphot/src/psphotRoughClass.c
r23989 r27840 1 1 # include "psphotInternal.h" 2 2 3 # define CHECK_STATUS(S,MSG) { \4 if (!status) {\5 psError(PSPHOT_ERR_CONFIG, false, "missing PSF Clump entry: %s\n", MSG); \6 return false;\7 } }3 # define CHECK_STATUS(S,MSG) { \ 4 if (!status) { \ 5 psError(PSPHOT_ERR_CONFIG, false, "missing PSF Clump entry: %s\n", MSG); \ 6 return false; \ 7 } } 8 8 9 bool psphotRoughClassRegion (int nRegion, psRegion *region, psArray *sources, psMetadata *recipe, const bool havePSF); 9 // for now, let's store the detections on the readout->analysis for each readout 10 bool psphotRoughClass (pmConfig *config, const pmFPAview *view) 11 { 12 bool status = true; 10 13 11 // 2006.02.02 : no leaks 12 bool psphotRoughClass (pmReadout *readout, psArray *sources, psMetadata *recipe, const bool havePSF) { 14 // select the appropriate recipe information 15 psMetadata *recipe = psMetadataLookupPtr (&status, config->recipes, PSPHOT_RECIPE); 16 psAssert (recipe, "missing recipe?"); 17 18 int num = psMetadataLookupS32 (&status, config->arguments, "PSPHOT.INPUT.NUM"); 19 psAssert (status, "programming error: must define PSPHOT.INPUT.NUM"); 20 21 // skip the chisq image (optionally?) 22 int chisqNum = psMetadataLookupS32 (&status, config->arguments, "PSPHOT.CHISQ.NUM"); 23 if (!status) chisqNum = -1; 24 25 // loop over the available readouts 26 for (int i = 0; i < num; i++) { 27 if (i == chisqNum) continue; // skip chisq image 28 if (!psphotRoughClassReadout (config, view, "PSPHOT.INPUT", i, recipe)) { 29 psError (PSPHOT_ERR_CONFIG, false, "failed on rough classification for PSPHOT.INPUT entry %d", i); 30 return false; 31 } 32 } 33 return true; 34 } 35 36 bool psphotRoughClassReadout (pmConfig *config, const pmFPAview *view, const char *filename, int index, psMetadata *recipe) { 13 37 14 38 bool status; 15 39 16 40 psTimerStart ("psphot.rough"); 41 42 // find the currently selected readout 43 pmFPAfile *file = pmFPAfileSelectSingle(config->files, filename, index); // File of interest 44 psAssert (file, "missing file?"); 45 46 pmReadout *readout = pmFPAviewThisReadout(view, file->fpa); 47 psAssert (readout, "missing readout?"); 48 49 // if we have a PSF, use the existing PSF clump region below 50 bool havePSF = false; 51 if (psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.PSF")) { 52 havePSF = true; 53 } 54 55 pmDetections *detections = psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.DETECTIONS"); 56 psAssert (detections, "missing detections?"); 57 58 psArray *sources = detections->newSources; 59 psAssert (sources, "missing sources?"); 60 61 if (!sources->n) { 62 psLogMsg ("psphot", PS_LOG_INFO, "no sources, skipping rough classification"); 63 return true; 64 } 17 65 18 66 // we make this measurement on a NxM grid of regions across the readout … … 24 72 int nRegion = 0; 25 73 for (int ix = 0; ix < NX; ix ++) { 26 for (int iy = 0; iy < NY; iy ++) {74 for (int iy = 0; iy < NY; iy ++) { 27 75 28 psRegion region = psRegionSet (ix*dX, (ix + 1)*dX, iy*dY, (iy + 1)*dY); 29 if (!psphotRoughClassRegion (nRegion, ®ion, sources, recipe, havePSF)) { 30 psLogMsg ("psphot", 4, "Failed to determine rough classification for region %f,%f - %f,%f\n", 31 region.x0, region.y0, region.x1, region.y1); 32 continue; 33 } 34 35 nRegion ++; 36 } 76 psRegion *region = psRegionAlloc (ix*dX, (ix + 1)*dX, iy*dY, (iy + 1)*dY); 77 if (!psphotRoughClassRegion (nRegion, region, sources, readout->analysis, recipe, havePSF)) { 78 psLogMsg ("psphot", 4, "Failed to determine rough classification for region %f,%f - %f,%f\n", 79 region->x0, region->y0, region->x1, region->y1); 80 psFree (region); 81 continue; 82 } 83 psFree (region); 84 nRegion ++; 85 } 37 86 } 38 psMetadataAddS32 (re cipe, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", nRegion);87 psMetadataAddS32 (readout->analysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", nRegion); 39 88 40 89 // optional printout of source moments only … … 43 92 psLogMsg ("psphot.roughclass", PS_LOG_INFO, "rough classification: %f sec\n", psTimerMark ("psphot.rough")); 44 93 45 psphotVisualPlotMoments (recipe, sources);94 psphotVisualPlotMoments (recipe, readout->analysis, sources); 46 95 psphotVisualShowRoughClass (sources); 47 psphotVisualShowFlags (sources);96 // XXX better visualization: psphotVisualShowFlags (sources); 48 97 49 98 return true; 50 99 } 51 100 52 bool psphotRoughClassRegion (int nRegion, psRegion *region, psArray *sources, psMetadata * recipe, const bool havePSF) {101 bool psphotRoughClassRegion (int nRegion, psRegion *region, psArray *sources, psMetadata *analysis, psMetadata *recipe, const bool havePSF) { 53 102 54 103 bool status; … … 60 109 assert (maskSat); 61 110 111 // the regions are saved on the readout->analysis metadata folder (passed to us as analysis) 62 112 snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", nRegion); 63 psMetadata *regionMD = psMetadataLookupPtr (&status, recipe, regionName);113 psMetadata *regionMD = psMetadataLookupPtr (&status, analysis, regionName); 64 114 if (!regionMD) { 65 regionMD = psMetadataAlloc(); 66 psMetadataAddMetadata (recipe, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD); 67 psFree (regionMD); 115 // allocate the region metadata folder and add this region to it. 116 regionMD = psMetadataAlloc(); 117 psMetadataAddMetadata (analysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD); 118 psFree (regionMD); 68 119 } 120 psMetadataAddPtr (regionMD, PS_LIST_TAIL, "REGION", PS_DATA_REGION | PS_META_REPLACE, "psf clump region", region); 69 121 70 122 if (!havePSF) { 71 // determine the PSF parameters from the source moment values 72 psfClump = pmSourcePSFClump (region, sources, recipe); 73 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.X", PS_META_REPLACE, "psf clump center", psfClump.X); 74 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.Y", PS_META_REPLACE, "psf clump center", psfClump.Y); 75 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DX", PS_META_REPLACE, "psf clump center", psfClump.dX); 76 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY); 123 // determine the PSF parameters from the source moment values 124 // XXX why not save the psfClump as a PTR? 125 126 float PSF_SN_LIM = psMetadataLookupF32(&status, recipe, "PSF_SN_LIM"); psAssert (status, "missing PSF_SN_LIM"); 127 float MOMENTS_AR_MAX = psMetadataLookupF32(&status, recipe, "MOMENTS_AR_MAX"); psAssert (status, "missing MOMENTS_AR_MAX"); 128 129 float PSF_CLUMP_GRID_SCALE = psMetadataLookupF32(&status, analysis, "PSF_CLUMP_GRID_SCALE"); 130 if (!status) { 131 PSF_CLUMP_GRID_SCALE = psMetadataLookupF32(&status, recipe, "PSF_CLUMP_GRID_SCALE"); 132 psAssert (status, "missing PSF_CLUMP_GRID_SCALE"); 133 } 134 float MOMENTS_SX_MAX = psMetadataLookupF32(&status, analysis, "MOMENTS_SX_MAX"); 135 if (!status) { 136 MOMENTS_SX_MAX = psMetadataLookupF32(&status, recipe, "MOMENTS_SX_MAX"); 137 psAssert (status, "missing MOMENTS_SX_MAX"); 138 } 139 float MOMENTS_SY_MAX = psMetadataLookupF32(&status, analysis, "MOMENTS_SY_MAX"); 140 if (!status) { 141 MOMENTS_SY_MAX = psMetadataLookupF32(&status, recipe, "MOMENTS_SY_MAX"); 142 psAssert (status, "missing MOMENTS_SY_MAX"); 143 } 144 145 psfClump = pmSourcePSFClump (NULL, region, sources, PSF_SN_LIM, PSF_CLUMP_GRID_SCALE, MOMENTS_SX_MAX, MOMENTS_SY_MAX, MOMENTS_AR_MAX); 146 147 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.X", PS_META_REPLACE, "psf clump center", psfClump.X); 148 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.Y", PS_META_REPLACE, "psf clump center", psfClump.Y); 149 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DX", PS_META_REPLACE, "psf clump center", psfClump.dX); 150 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY); 77 151 } else { 78 // pull FWHM_X,Y from the recipe, use to define psfClump.X,Y79 psfClump.X = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.X"); 80 if (!status) {81 psLogMsg ("psphot", 4, "No PSF clump defined for region %f,%f - %f,%f\n", region->x0, region->y0, region->x1, region->y1);82 return false;83 } 84 psfClump.Y = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.Y"); psAssert (status, "missing PSF.CLUMP.Y");85 psfClump.dX = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DX"); psAssert (status, "missing PSF.CLUMP.DX");86 psfClump.dY = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DY"); psAssert (status, "missing PSF.CLUMP.DY");152 // pull FWHM_X,Y from the recipe, use to define psfClump.X,Y 153 psfClump.X = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.X"); 154 if (!status) { 155 psLogMsg ("psphot", 4, "No PSF clump defined for region %f,%f - %f,%f\n", region->x0, region->y0, region->x1, region->y1); 156 return false; 157 } 158 psfClump.Y = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.Y"); psAssert (status, "missing PSF.CLUMP.Y"); 159 psfClump.dX = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DX"); psAssert (status, "missing PSF.CLUMP.DX"); 160 psfClump.dY = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DY"); psAssert (status, "missing PSF.CLUMP.DY"); 87 161 } 88 162 89 163 if (psfClump.X < 0) { 90 psError(PSPHOT_ERR_PROG, false, "programming error calling pmSourcePSFClump");91 return false;164 psError(PSPHOT_ERR_PROG, false, "programming error calling pmSourcePSFClump"); 165 return false; 92 166 } 93 167 if (!psfClump.X || !psfClump.Y || isnan(psfClump.X) || isnan(psfClump.Y)) { 94 psLogMsg ("psphot", 4, "Failed to find a valid PSF clump for region %f,%f - %f,%f\n", region->x0, region->y0, region->x1, region->y1);95 return false;168 psLogMsg ("psphot", 4, "Failed to find a valid PSF clump for region %f,%f - %f,%f\n", region->x0, region->y0, region->x1, region->y1); 169 return false; 96 170 } 97 171 psLogMsg ("psphot", 3, "psf clump X, Y: %f, %f\n", psfClump.X, psfClump.Y); 98 172 psLogMsg ("psphot", 3, "psf clump DX, DY: %f, %f\n", psfClump.dX, psfClump.dY); 99 173 174 // get basic parameters, or set defaults 175 float PSF_SN_LIM = psMetadataLookupF32 (&status, recipe, "PSF_SN_LIM"); psAssert (status, "missing PSF_SN_LIM"); 176 float PSF_CLUMP_NSIGMA = psMetadataLookupF32 (&status, recipe, "PSF_CLUMP_NSIGMA"); psAssert (status, "missing PSF_CLUMP_NSIGMA"); 177 100 178 // group into STAR, COSMIC, EXTENDED, SATURATED, etc. 101 if (!pmSourceRoughClass (region, sources, recipe, psfClump, maskSat)) {102 psError(PSPHOT_ERR_PROG, false, "programming error calling pmSourceRoughClass");103 return false;179 if (!pmSourceRoughClass (region, sources, PSF_SN_LIM, PSF_CLUMP_NSIGMA, psfClump, maskSat)) { 180 psError(PSPHOT_ERR_PROG, false, "programming error calling pmSourceRoughClass"); 181 return false; 104 182 } 105 183
Note:
See TracChangeset
for help on using the changeset viewer.
