Changeset 27838 for branches/tap_branches/psphot/src/psphotVisual.c
- Timestamp:
- May 3, 2010, 8:41:49 AM (16 years ago)
- Location:
- branches/tap_branches
- Files:
-
- 4 edited
-
. (modified) (1 prop)
-
psphot (modified) (1 prop)
-
psphot/src (modified) (1 prop)
-
psphot/src/psphotVisual.c (modified) (43 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/tap_branches
- Property svn:mergeinfo changed
-
branches/tap_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/tap_branches/psphot/src
- Property svn:ignore
-
old new 19 19 psphotMomentsStudy 20 20 psphotPetrosianStudy 21 psphotForced 22 psphotMakePSF 23 psphotStack
-
- Property svn:ignore
-
branches/tap_branches/psphot/src/psphotVisual.c
r25852 r27838 60 60 } 61 61 62 bool psphotVisualEraseOverlays (int channel, char *overlay) { 63 64 int myKapa = psphotKapaChannel (channel); 65 if (!(strcasecmp (overlay, "all"))) { 66 KiiEraseOverlay (myKapa, "red"); 67 KiiEraseOverlay (myKapa, "green"); 68 KiiEraseOverlay (myKapa, "blue"); 69 KiiEraseOverlay (myKapa, "yellow"); 70 return true; 71 } 72 KiiEraseOverlay (myKapa, overlay); 73 return true; 74 } 75 62 76 bool psphotVisualShowMask (int kapaFD, psImage *inImage, const char *name, int channel) { 63 77 … … 106 120 } 107 121 108 bool psphotVisualScaleImage (int kapaFD, psImage *inImage, const char *name, int channel) {122 bool psphotVisualScaleImage (int kapaFD, psImage *inImage, psImage *inMask, const char *name, int channel) { 109 123 110 124 KiiImage image; … … 116 130 psStats *stats = psStatsAlloc (PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV); 117 131 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS); 118 if (!psImageBackground(stats, NULL, inImage, NULL, 0, rng)) {132 if (!psImageBackground(stats, NULL, inImage, inMask, 0xffff, rng)) { 119 133 fprintf (stderr, "failed to get background values\n"); 120 134 return false; … … 171 185 if (kapa == -1) return false; 172 186 173 //psphotVisualShowMask (kapa, readout->mask, "mask", 2);174 psphotVisualScaleImage (kapa, readout->variance, "variance", 1);175 psphotVisualScaleImage (kapa, readout->image, "image", 0);187 psphotVisualShowMask (kapa, readout->mask, "mask", 2); 188 psphotVisualScaleImage (kapa, readout->variance, readout->mask, "variance", 1); 189 psphotVisualScaleImage (kapa, readout->image, readout->mask, "image", 0); 176 190 177 191 pmVisualAskUser(NULL); … … 197 211 } 198 212 199 psphotVisualScaleImage (kapa, backgnd->image, "backgnd", 2);200 psphotVisualScaleImage (kapa, readout->image, "backsub", 0);213 psphotVisualScaleImage (kapa, backgnd->image, readout->mask, "backgnd", 2); 214 psphotVisualScaleImage (kapa, readout->image, readout->mask, "backsub", 0); 201 215 202 216 pmVisualAskUser(NULL); … … 204 218 } 205 219 206 bool psphotVisualShowSignificance (psImage *image ) {220 bool psphotVisualShowSignificance (psImage *image, float min, float max) { 207 221 208 222 if (!pmVisualIsVisual()) return true; … … 211 225 if (kapa == -1) return false; 212 226 213 psphotVisualRangeImage (kapa, image, "signif", 2, -1.0, 25.0*25.0);227 psphotVisualRangeImage (kapa, image, "signif", 2, min, max); 214 228 215 229 pmVisualAskUser(NULL); … … 247 261 overlay[Noverlay].text = NULL; 248 262 Noverlay ++; 249 250 # if (0) 251 overlay[Noverlay].type = KII_OVERLAY_BOX; 252 overlay[Noverlay].x = peak->x; 253 overlay[Noverlay].y = peak->y; 254 overlay[Noverlay].dx = 1.0; 255 overlay[Noverlay].dy = 1.0; 256 overlay[Noverlay].angle = 0.0; 257 overlay[Noverlay].text = NULL; 258 Noverlay ++; 259 260 overlay[Noverlay].type = KII_OVERLAY_CIRCLE; 261 overlay[Noverlay].x = peak->xf; 262 overlay[Noverlay].y = peak->yf; 263 overlay[Noverlay].dx = 2.0; 264 overlay[Noverlay].dy = 2.0; 265 overlay[Noverlay].angle = 0.0; 266 overlay[Noverlay].text = NULL; 267 Noverlay ++; 268 # endif 269 } 270 271 # if (1) 272 overlay[Noverlay].type = KII_OVERLAY_BOX; 273 overlay[Noverlay].x = 10.0; 274 overlay[Noverlay].y = 10.0; 275 overlay[Noverlay].dx = 1.0; 276 overlay[Noverlay].dy = 1.0; 277 overlay[Noverlay].angle = 0.0; 278 overlay[Noverlay].text = NULL; 279 Noverlay ++; 280 # endif 263 } 281 264 282 265 KiiLoadOverlay (kapa, overlay, Noverlay, "red"); … … 463 446 KapaSetFont (myKapa, "courier", 14); 464 447 448 section.bg = KapaColorByName ("none"); // XXX probably should be 'none' 449 465 450 float SN_LIM = psMetadataLookupF32(&status, recipe, "PSF_SN_LIM"); 466 451 … … 494 479 Xmin = PS_MAX(Xmin, -0.1); 495 480 Ymin = PS_MAX(Ymin, -0.1); 481 482 // XXX test: hardwire plot limits 483 // Xmin = -0.1; Ymin = -0.1; 484 // Xmax = 20.1; Ymax = 20.1; 496 485 497 486 // storage vectors for data to be plotted … … 551 540 KapaSetLimits (myKapa, &graphdata); 552 541 542 graphdata.padXm = NAN; 543 graphdata.padYm = NAN; 544 graphdata.padXp = 0.5; 545 graphdata.padYp = 0.5; 553 546 KapaBox (myKapa, &graphdata); 547 554 548 KapaSendLabel (myKapa, "M_xx| (pixels)", KAPA_LABEL_XM); 555 549 KapaSendLabel (myKapa, "M_yy| (pixels)", KAPA_LABEL_YM); … … 560 554 graphdata.style = 2; 561 555 KapaPrepPlot (myKapa, nF, &graphdata); 556 562 557 KapaPlotVector (myKapa, nF, xFaint->data.F32, "x"); 563 558 KapaPlotVector (myKapa, nF, yFaint->data.F32, "y"); … … 575 570 section.dy = 0.25; 576 571 section.x = 0.00; 577 section.y = 0. 80;572 section.y = 0.75; 578 573 section.name = psStringCopy ("MagMyy"); 579 574 KapaSetSection (myKapa, §ion); … … 587 582 KapaSetLimits (myKapa, &graphdata); 588 583 584 graphdata.padXm = 0.5; 585 graphdata.padYm = NAN; 586 graphdata.padXp = NAN; 587 graphdata.padYp = 0.5; 589 588 strcpy (graphdata.labels, "0210"); 590 589 KapaBox (myKapa, &graphdata); … … 611 610 section.dx = 0.25; 612 611 section.dy = 0.75; 613 section.x = 0. 80;612 section.x = 0.75; 614 613 section.y = 0.00; 615 614 section.name = psStringCopy ("MagMxx"); … … 624 623 KapaSetLimits (myKapa, &graphdata); 625 624 625 graphdata.padXm = NAN; 626 graphdata.padYm = 0.5; 627 graphdata.padXp = 0.5; 628 graphdata.padYp = NAN; 626 629 strcpy (graphdata.labels, "2001"); 627 630 KapaBox (myKapa, &graphdata); … … 654 657 655 658 int nRegions = psMetadataLookupS32 (&status, analysis, "PSF.CLUMP.NREGIONS"); 656 float PSF_CLUMP_NSIGMA = psMetadataLookupF32 (&status, analysis, "PSF_CLUMP_NSIGMA");659 float PSF_CLUMP_NSIGMA = psMetadataLookupF32 (&status, recipe, "PSF_CLUMP_NSIGMA"); 657 660 658 661 graphdata.color = KapaColorByName ("blue"); … … 1107 1110 } 1108 1111 1109 psphotVisualScaleImage (myKapa, outsat, "satstar", 2);1112 psphotVisualScaleImage (myKapa, outsat, NULL, "satstar", 2); 1110 1113 1111 1114 pmVisualAskUser(NULL); 1112 1115 psFree (outsat); 1113 1116 return true; 1117 } 1118 1119 static void plotline (int myKapa, Graphdata *graphdata, float x0, float y0, float x1, float y1) 1120 { 1121 float x[2], y[2]; 1122 x[0] = x0; 1123 x[1] = x1; 1124 y[0] = y0; 1125 y[1] = y1; 1126 KapaPrepPlot (myKapa, 2, graphdata); 1127 KapaPlotVector (myKapa, 2, x, "x"); 1128 KapaPlotVector (myKapa, 2, y, "y"); 1114 1129 } 1115 1130 … … 1151 1166 } 1152 1167 1168 // generate model profiles (major and minor axis): 1169 // create a model with theta = 0.0 so major and minor axes are equiv to x and y: 1170 psEllipseShape rawShape, rotShape; 1171 1172 rawShape.sx = source->modelPSF->params->data.F32[PM_PAR_SXX] / M_SQRT2; 1173 rawShape.sy = source->modelPSF->params->data.F32[PM_PAR_SYY] / M_SQRT2; 1174 rawShape.sxy = source->modelPSF->params->data.F32[PM_PAR_SXY]; 1175 1176 psEllipseAxes axes = psEllipseShapeToAxes (rawShape, 20.0); 1177 1178 axes.theta = 0.0; 1179 1180 rotShape = psEllipseAxesToShape (axes); 1181 1182 psVector *params = psVectorAlloc(source->modelPSF->params->n, PS_TYPE_F32); 1183 for (int i = 0; i < source->modelPSF->params->n; i++) { 1184 params->data.F32[i] = source->modelPSF->params->data.F32[i]; 1185 } 1186 params->data.F32[PM_PAR_SXX] = rotShape.sx * M_SQRT2; 1187 params->data.F32[PM_PAR_SYY] = rotShape.sy * M_SQRT2; 1188 params->data.F32[PM_PAR_SXY] = rotShape.sxy; 1189 params->data.F32[PM_PAR_XPOS] = 0.0; 1190 params->data.F32[PM_PAR_YPOS] = 0.0; 1191 1192 psVector *rmod = psVectorAlloc(300, PS_TYPE_F32); 1193 psVector *fmaj = psVectorAlloc(300, PS_TYPE_F32); 1194 psVector *fmin = psVectorAlloc(300, PS_TYPE_F32); 1195 1196 psVector *coord = psVectorAlloc(2, PS_TYPE_F32); 1197 1198 float r = 0.0; 1199 for (int i = 0; i < rmod->n; i++) { 1200 r = i*0.1; 1201 rmod->data.F32[i] = r; 1202 1203 coord->data.F32[1] = r; 1204 coord->data.F32[0] = 0.0; 1205 fmaj->data.F32[i] = log10(source->modelPSF->modelFunc (NULL, params, coord)); 1206 1207 coord->data.F32[0] = r; 1208 coord->data.F32[1] = 0.0; 1209 fmin->data.F32[i] = log10(source->modelPSF->modelFunc (NULL, params, coord)); 1210 } 1211 psFree (coord); 1212 psFree (params); 1213 1214 float FWHM_MAJOR = 2.0*source->modelPSF->modelRadius (source->modelPSF->params, 0.5*source->modelPSF->params->data.F32[PM_PAR_I0]); 1215 float FWHM_MINOR = FWHM_MAJOR * (axes.minor / axes.major); 1216 if (FWHM_MAJOR < FWHM_MINOR) PS_SWAP (FWHM_MAJOR, FWHM_MINOR); 1217 1218 psEllipseMoments emoments; 1219 emoments.x2 = source->moments->Mxx; 1220 emoments.xy = source->moments->Mxy; 1221 emoments.y2 = source->moments->Myy; 1222 axes = psEllipseMomentsToAxes (emoments, 20.0); 1223 float MOMENTS_MAJOR = 2.355*axes.major; 1224 float MOMENTS_MINOR = 2.355*axes.minor; 1225 1226 float logHM = log10(0.5*source->modelPSF->params->data.F32[PM_PAR_I0]); 1227 1153 1228 // reset source Add/Sub state to recorded 1154 1229 if (subtracted) pmSourceSub (source, PM_MODEL_OP_FULL, maskVal); … … 1187 1262 KapaPlotVector (myKapa, nb, fb->data.F32, "y"); 1188 1263 1264 graphdata.color = KapaColorByName ("blue"); 1265 graphdata.ptype = 0; 1266 graphdata.size = 0.0; 1267 graphdata.style = 0; 1268 KapaPrepPlot (myKapa, rmod->n, &graphdata); 1269 KapaPlotVector (myKapa, rmod->n, rmod->data.F32, "x"); 1270 KapaPlotVector (myKapa, rmod->n, fmin->data.F32, "y"); 1271 plotline (myKapa, &graphdata, 0.0, logHM, 30.0, logHM); 1272 plotline (myKapa, &graphdata, 0.5*FWHM_MINOR, 0.0, 0.5*FWHM_MINOR, 5.0); 1273 graphdata.ltype = 1; 1274 plotline (myKapa, &graphdata, 0.5*MOMENTS_MINOR, 0.0, 0.5*MOMENTS_MINOR, 5.0); 1275 graphdata.ltype = 0; 1276 1277 graphdata.color = KapaColorByName ("green"); 1278 graphdata.ptype = 0; 1279 graphdata.size = 0.0; 1280 graphdata.style = 0; 1281 KapaPrepPlot (myKapa, rmod->n, &graphdata); 1282 KapaPlotVector (myKapa, rmod->n, rmod->data.F32, "x"); 1283 KapaPlotVector (myKapa, rmod->n, fmaj->data.F32, "y"); 1284 plotline (myKapa, &graphdata, 0.5*FWHM_MAJOR, 0.0, 0.5*FWHM_MAJOR, 5.0); 1285 graphdata.ltype = 1; 1286 plotline (myKapa, &graphdata, 0.5*MOMENTS_MAJOR, 0.0, 0.5*MOMENTS_MAJOR, 5.0); 1287 graphdata.ltype = 0; 1288 1289 for (int i = 0; i < rmod->n; i++) { 1290 rmod->data.F32[i] = log10(rmod->data.F32[i]); 1291 } 1292 1189 1293 // ** loglog ** 1190 1294 KapaSelectSection (myKapa, "loglog"); … … 1195 1299 graphdata.ymin = -0.05; 1196 1300 graphdata.ymax = +5.05; 1301 graphdata.color = KapaColorByName ("black"); 1197 1302 KapaSetLimits (myKapa, &graphdata); 1198 1303 … … 1217 1322 KapaPlotVector (myKapa, nb, Rb->data.F32, "x"); 1218 1323 KapaPlotVector (myKapa, nb, fb->data.F32, "y"); 1324 1325 graphdata.color = KapaColorByName ("blue"); 1326 graphdata.ptype = 0; 1327 graphdata.size = 0.0; 1328 graphdata.style = 0; 1329 KapaPrepPlot (myKapa, rmod->n, &graphdata); 1330 KapaPlotVector (myKapa, rmod->n, rmod->data.F32, "x"); 1331 KapaPlotVector (myKapa, rmod->n, fmin->data.F32, "y"); 1332 1333 graphdata.color = KapaColorByName ("green"); 1334 graphdata.ptype = 0; 1335 graphdata.size = 0.0; 1336 graphdata.style = 0; 1337 KapaPrepPlot (myKapa, rmod->n, &graphdata); 1338 KapaPlotVector (myKapa, rmod->n, rmod->data.F32, "x"); 1339 KapaPlotVector (myKapa, rmod->n, fmaj->data.F32, "y"); 1340 1341 psFree (rmod); 1342 psFree (fmin); 1343 psFree (fmaj); 1219 1344 1220 1345 psFree (rg); … … 1240 1365 psImageMaskType maskVal = psMetadataLookupImageMask(&status, recipe, "MASK.PSPHOT"); // Mask value for bad pixels 1241 1366 assert (maskVal); 1367 1368 section.bg = KapaColorByName ("none"); // XXX probably should be 'none' 1242 1369 1243 1370 KapaClearPlots (myKapa); … … 1405 1532 if (source == NULL) continue; 1406 1533 1407 // if (source->type != type) continue;1408 1534 if (mode) { 1409 1535 if (keep) { … … 1478 1604 KapaSetFont (myKapa, "courier", 14); 1479 1605 1606 section.bg = KapaColorByName ("none"); // XXX probably should be 'none' 1607 1480 1608 // select the max psfX,Y values for the plot limits 1481 1609 float Xmin = 1000.0, Xmax = 0.0; … … 1529 1657 psVector *sDEF = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1530 1658 1659 psVector *xLOW = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1660 psVector *yLOW = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1661 psVector *mLOW = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1662 psVector *sLOW = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1663 1531 1664 psVector *xCR = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1532 1665 psVector *yCR = psVectorAllocEmpty (sources->n, PS_TYPE_F32); … … 1539 1672 int nPSF = 0; 1540 1673 int nDEF = 0; 1674 int nLOW = 0; 1541 1675 int nCR = 0; 1542 1676 for (int i = 0; i < sources->n; i++) { 1543 1677 pmSource *source = sources->data[i]; 1544 1678 if (source->moments == NULL) continue; 1679 1680 // only plot the measured sources... 1681 if (!(source->tmpFlags & PM_SOURCE_TMPF_SIZE_MEASURED)) continue; 1545 1682 1546 1683 if (source->mode & PM_SOURCE_MODE_CR_LIMIT) { … … 1574 1711 continue; 1575 1712 } 1576 if ((source->mode & PM_SOURCE_MODE_CR_LIMIT) || (source->mode & PM_SOURCE_MODE_SATSTAR)) { 1713 if (source->errMag > 0.1) { 1714 xLOW->data.F32[nLOW] = source->moments->Mxx; 1715 yLOW->data.F32[nLOW] = source->moments->Myy; 1716 mLOW->data.F32[nLOW] = -2.5*log10(source->moments->Sum); 1717 sLOW->data.F32[nLOW] = source->extNsigma; 1718 nLOW++; 1577 1719 continue; 1578 1720 } … … 1583 1725 nPSF++; 1584 1726 } 1727 1585 1728 xSAT->n = nSAT; 1586 1729 ySAT->n = nSAT; … … 1607 1750 mDEF->n = nDEF; 1608 1751 sDEF->n = nDEF; 1752 1753 xLOW->n = nLOW; 1754 yLOW->n = nLOW; 1755 mLOW->n = nLOW; 1756 sLOW->n = nLOW; 1609 1757 1610 1758 // four sections: MxxMyy, MagMxx, MagMyy, MagSigma … … 1626 1774 KapaSetLimits (myKapa, &graphdata); 1627 1775 1776 graphdata.padXm = NAN; 1777 graphdata.padYm = NAN; 1778 graphdata.padXp = 0.5; 1779 graphdata.padYp = 0.5; 1628 1780 KapaBox (myKapa, &graphdata); 1629 1781 KapaSendLabel (myKapa, "M_xx| (pixels)", KAPA_LABEL_XM); … … 1669 1821 KapaPlotVector (myKapa, nSAT, xSAT->data.F32, "x"); 1670 1822 KapaPlotVector (myKapa, nSAT, ySAT->data.F32, "y"); 1823 1824 graphdata.color = KapaColorByName ("black"); 1825 graphdata.ptype = 7; 1826 graphdata.size = 1.0; 1827 graphdata.style = 2; 1828 KapaPrepPlot (myKapa, nLOW, &graphdata); 1829 KapaPlotVector (myKapa, nLOW, xLOW->data.F32, "x"); 1830 KapaPlotVector (myKapa, nLOW, yLOW->data.F32, "y"); 1671 1831 1672 1832 // second section: MagMyy … … 1681 1841 graphdata.color = KapaColorByName ("black"); 1682 1842 graphdata.xmin = -17.1; 1683 graphdata.xmax = - 7.9;1843 graphdata.xmax = -6.9; 1684 1844 graphdata.ymin = Ymin; 1685 1845 graphdata.ymax = Ymax; 1686 1846 KapaSetLimits (myKapa, &graphdata); 1687 1847 1848 graphdata.padXm = 0.5; 1849 graphdata.padYm = NAN; 1850 graphdata.padXp = NAN; 1851 graphdata.padYp = 0.5; 1688 1852 strcpy (graphdata.labels, "0210"); 1689 1853 KapaBox (myKapa, &graphdata); … … 1734 1898 section.dx = 0.25; 1735 1899 section.dy = 0.60; 1736 section.x = 0. 80;1900 section.x = 0.75; 1737 1901 section.y = 0.00; 1738 1902 section.name = psStringCopy ("MagMxx"); … … 1743 1907 graphdata.xmin = Xmin; 1744 1908 graphdata.xmax = Xmax; 1745 graphdata.ymin = - 7.9;1909 graphdata.ymin = -6.9; 1746 1910 graphdata.ymax = -17.1; 1747 1911 KapaSetLimits (myKapa, &graphdata); 1748 1912 1913 graphdata.padXm = NAN; 1914 graphdata.padYm = 0.5; 1915 graphdata.padXp = 0.5; 1916 graphdata.padYp = NAN; 1749 1917 strcpy (graphdata.labels, "2001"); 1750 1918 KapaBox (myKapa, &graphdata); … … 1794 1962 // fourth section: MagSigma 1795 1963 section.dx = 0.75; 1796 section.dy = 0. 15;1964 section.dy = 0.20; 1797 1965 section.x = 0.00; 1798 section.y = 0.6 5;1966 section.y = 0.60; 1799 1967 section.name = psStringCopy ("MagSigma"); 1800 1968 KapaSetSection (myKapa, §ion); … … 1802 1970 1803 1971 graphdata.color = KapaColorByName ("black"); 1804 graphdata.xmax = - 7.9;1972 graphdata.xmax = -6.9; 1805 1973 graphdata.xmin = -17.1; 1806 1974 graphdata.ymin = -20.1; … … 1808 1976 KapaSetLimits (myKapa, &graphdata); 1809 1977 1978 graphdata.padXm = 0.5; 1979 graphdata.padYm = NAN; 1980 graphdata.padXp = 0.5; 1981 graphdata.padYp = 0.5; 1810 1982 strcpy (graphdata.labels, "0100"); 1811 1983 KapaBox (myKapa, &graphdata); … … 1862 2034 1863 2035 int nRegions = psMetadataLookupS32 (&status, analysis, "PSF.CLUMP.NREGIONS"); 1864 float PSF_CLUMP_NSIGMA = psMetadataLookupF32 (&status, analysis, "PSF_CLUMP_NSIGMA");2036 float PSF_CLUMP_NSIGMA = psMetadataLookupF32 (&status, recipe, "PSF_CLUMP_NSIGMA"); 1865 2037 1866 2038 graphdata.color = KapaColorByName ("blue"); … … 1901 2073 psFree (ySAT); 1902 2074 psFree (mSAT); 2075 psFree (sSAT); 1903 2076 1904 2077 psFree (xEXT); 1905 2078 psFree (yEXT); 1906 2079 psFree (mEXT); 2080 psFree (sEXT); 1907 2081 1908 2082 psFree (xPSF); 1909 2083 psFree (yPSF); 1910 2084 psFree (mPSF); 2085 psFree (sPSF); 1911 2086 1912 2087 psFree (xDEF); 1913 2088 psFree (yDEF); 1914 2089 psFree (mDEF); 2090 psFree (sDEF); 2091 2092 psFree (xLOW); 2093 psFree (yLOW); 2094 psFree (mLOW); 2095 psFree (sLOW); 1915 2096 1916 2097 psFree (xCR); 1917 2098 psFree (yCR); 1918 2099 psFree (mCR); 2100 psFree (sCR); 1919 2101 1920 2102 pmVisualAskUser(NULL); … … 1929 2111 if (myKapa == -1) return false; 1930 2112 1931 psphotVisualScaleImage (myKapa, readout->image, "resid", 1);2113 psphotVisualScaleImage (myKapa, readout->image, readout->mask, "resid", 1); 1932 2114 1933 2115 pmVisualAskUser(NULL); … … 2054 2236 } 2055 2237 2238 bool psphotVisualPlotChisq (psArray *sources) { 2239 2240 Graphdata graphdata; 2241 2242 if (!pmVisualIsVisual()) return true; 2243 2244 int myKapa = psphotKapaChannel (2); 2245 if (myKapa == -1) return false; 2246 2247 KapaClearPlots (myKapa); 2248 KapaInitGraph (&graphdata); 2249 2250 psVector *x = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 2251 psVector *y = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 2252 2253 graphdata.xmin = +32.0; 2254 graphdata.xmax = -32.0; 2255 graphdata.ymin = +32.0; 2256 graphdata.ymax = -32.0; 2257 2258 FILE *f = fopen ("chisq.dat", "w"); 2259 2260 // construct the plot vectors 2261 int n = 0; 2262 for (int i = 0; i < sources->n; i++) { 2263 pmSource *source = sources->data[i]; 2264 if (!source) continue; 2265 if (source->type != PM_SOURCE_TYPE_STAR) continue; 2266 if (!source->moments) continue; 2267 if (!isfinite(source->moments->Sum)) continue; 2268 if (!source->modelPSF) continue; 2269 if (!isfinite(source->modelPSF->chisq)) continue; 2270 2271 x->data.F32[n] = -2.5*log10(source->moments->Sum); 2272 y->data.F32[n] = source->modelPSF->chisq / source->modelPSF->nDOF; 2273 graphdata.xmin = PS_MIN(graphdata.xmin, x->data.F32[n]); 2274 graphdata.xmax = PS_MAX(graphdata.xmax, x->data.F32[n]); 2275 graphdata.ymin = PS_MIN(graphdata.ymin, y->data.F32[n]); 2276 graphdata.ymax = PS_MAX(graphdata.ymax, y->data.F32[n]); 2277 2278 fprintf (f, "%d %d %f %f\n", i, n, x->data.F32[n], y->data.F32[n]); 2279 2280 n++; 2281 } 2282 x->n = y->n = n; 2283 fclose (f); 2284 2285 float range; 2286 range = graphdata.xmax - graphdata.xmin; 2287 graphdata.xmax += 0.05*range; 2288 graphdata.xmin -= 0.05*range; 2289 range = graphdata.ymax - graphdata.ymin; 2290 graphdata.ymax += 0.05*range; 2291 graphdata.ymin -= 0.05*range; 2292 2293 // XXX test 2294 graphdata.xmin = -17.0; 2295 graphdata.xmax = -3.0; 2296 graphdata.ymin = -0.1; 2297 graphdata.ymax = +10.1; 2298 2299 KapaSetLimits (myKapa, &graphdata); 2300 2301 KapaSetFont (myKapa, "helvetica", 14); 2302 KapaBox (myKapa, &graphdata); 2303 KapaSendLabel (myKapa, "PSF Mag", KAPA_LABEL_XM); 2304 KapaSendLabel (myKapa, "ChiSq", KAPA_LABEL_YM); 2305 2306 graphdata.color = KapaColorByName ("black"); 2307 graphdata.ptype = 2; 2308 graphdata.size = 0.5; 2309 graphdata.style = 2; 2310 KapaPrepPlot (myKapa, n, &graphdata); 2311 KapaPlotVector (myKapa, n, x->data.F32, "x"); 2312 KapaPlotVector (myKapa, n, y->data.F32, "y"); 2313 2314 psFree (x); 2315 psFree (y); 2316 2317 pmVisualAskUser(NULL); 2318 return true; 2319 } 2320 2056 2321 bool psphotVisualShowPetrosians (psArray *sources) { 2057 2322 … … 2073 2338 if (!source) continue; 2074 2339 if (!source->extpars) continue; 2075 if (!source->extpars->profile) continue; 2076 if (!source->extpars->petrosian_80) continue; 2077 2078 pmSourceRadialProfile *profile = source->extpars->profile; 2079 pmSourceExtendedFlux *petrosian = source->extpars->petrosian_80; 2340 if (!source->extpars->petProfile) continue; 2341 2342 float petrosianRadius = source->extpars->petrosianRadius; 2343 psEllipseAxes *axes = &source->extpars->axes; 2080 2344 2081 2345 overlay[Noverlay].type = KII_OVERLAY_CIRCLE; 2082 2346 overlay[Noverlay].x = source->peak->xf; 2083 2347 overlay[Noverlay].y = source->peak->yf; 2084 overlay[Noverlay].dx = 2.0*petrosian->radius;2085 overlay[Noverlay].dy = 2.0*petrosian->radius*profile->axes.minor/profile->axes.major;2086 overlay[Noverlay].angle = profile->axes.theta * PS_DEG_RAD;2348 overlay[Noverlay].dx = 1.0*petrosianRadius; 2349 overlay[Noverlay].dy = 1.0*petrosianRadius*axes->minor/axes->major; 2350 overlay[Noverlay].angle = axes->theta * PS_DEG_RAD; 2087 2351 overlay[Noverlay].text = NULL; 2088 2352 Noverlay ++; 2089 2353 CHECK_REALLOCATE (overlay, KiiOverlay, NOVERLAY, Noverlay, 100); 2090 2354 2091 overlay[Noverlay].type = KII_OVERLAY_CIRCLE;2092 overlay[Noverlay].x = source->peak->xf;2093 overlay[Noverlay].y = source->peak->yf;2094 overlay[Noverlay].dx = 4.0*petrosian->radius;2095 overlay[Noverlay].dy = 4.0*petrosian->radius*profile->axes.minor/profile->axes.major;2096 overlay[Noverlay].angle = profile->axes.theta * PS_DEG_RAD;2097 overlay[Noverlay].text = NULL;2098 Noverlay ++;2099 CHECK_REALLOCATE (overlay, KiiOverlay, NOVERLAY, Noverlay, 100);2355 // overlay[Noverlay].type = KII_OVERLAY_CIRCLE; 2356 // overlay[Noverlay].x = source->peak->xf; 2357 // overlay[Noverlay].y = source->peak->yf; 2358 // overlay[Noverlay].dx = 2.0*petrosianRadius; 2359 // overlay[Noverlay].dy = 2.0*petrosianRadius*axes->minor/axes->major; 2360 // overlay[Noverlay].angle = axes->theta * PS_DEG_RAD; 2361 // overlay[Noverlay].text = NULL; 2362 // Noverlay ++; 2363 // CHECK_REALLOCATE (overlay, KiiOverlay, NOVERLAY, Noverlay, 100); 2100 2364 } 2101 2365
Note:
See TracChangeset
for help on using the changeset viewer.
