Changeset 25387
- Timestamp:
- Sep 15, 2009, 3:22:03 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20090715/psphot/src/psphotVisual.c
r25356 r25387 20 20 // these are invoked by the -visual options 21 21 22 static int kapa = -1;22 static int kapa1 = -1; 23 23 static int kapa2 = -1; 24 24 static int kapa3 = -1; 25 25 26 int psphotKapaChannel (int channel) { 27 28 switch (channel) { 29 case 1: 30 if (kapa1 == -1) { 31 kapa1 = KapaOpenNamedSocket ("kapa", "psphot:images"); 32 if (kapa1 == -1) { 33 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 34 pmVisualSetVisual(false); 35 } 36 } 37 return kapa1; 38 case 2: 39 if (kapa2 == -1) { 40 kapa2 = KapaOpenNamedSocket ("kapa", "psphot:plots"); 41 if (kapa2 == -1) { 42 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 43 pmVisualSetVisual(false); 44 } 45 } 46 return kapa2; 47 case 3: 48 if (kapa3 == -1) { 49 kapa3 = KapaOpenNamedSocket ("kapa", "psphot:stamps"); 50 if (kapa3 == -1) { 51 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 52 pmVisualSetVisual(false); 53 } 54 } 55 return kapa3; 56 default: 57 psAbort ("unknown kapa channel"); 58 } 59 psAbort ("unknown kapa channel"); 60 } 26 61 27 62 bool psphotVisualShowMask (int kapaFD, psImage *inImage, const char *name, int channel) { … … 131 166 bool psphotVisualShowImage (pmReadout *readout) { 132 167 133 if (!pmVisualIsVisual()) return true; 134 135 if (kapa == -1) { 136 kapa = KapaOpenNamedSocket ("kapa", "psphot:images"); 137 if (kapa == -1) { 138 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 139 pmVisualSetVisual(false); 140 return false; 141 } 142 } 168 // if (!pmVisualIsVisual()) return true; 169 170 int kapa = psphotKapaChannel (1); 171 if (kapa == -1) return false; 143 172 144 173 // psphotVisualShowMask (kapa, readout->mask, "mask", 2); … … 162 191 if (!pmVisualIsVisual()) return true; 163 192 164 if (kapa == -1) { 165 kapa = KapaOpenNamedSocket ("kapa", "psphot:images"); 166 if (kapa == -1) { 167 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 168 pmVisualSetVisual(false); 169 return false; 170 } 171 } 193 int kapa = psphotKapaChannel (1); 194 if (kapa == -1) return false; 172 195 173 196 bool status = false; … … 197 220 if (!pmVisualIsVisual()) return true; 198 221 199 if (kapa == -1) { 200 kapa = KapaOpenNamedSocket ("kapa", "psphot:images"); 201 if (kapa == -1) { 202 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 203 pmVisualSetVisual(false); 204 return false; 205 } 206 } 222 int kapa = psphotKapaChannel (1); 223 if (kapa == -1) return false; 207 224 208 225 // XXX test: image->data.F32[10][10] = 10000; … … 226 243 if (!pmVisualIsVisual()) return true; 227 244 228 if (kapa == -1) { 229 fprintf (stderr, "kapa not opened, skipping\n"); 230 return false; 231 } 245 int kapa = psphotKapaChannel (1); 246 if (kapa == -1) return false; 232 247 233 248 psArray *peaks = detections->peaks; … … 304 319 if (!pmVisualIsVisual()) return true; 305 320 306 if (kapa == -1) { 307 fprintf (stderr, "kapa not opened, skipping\n"); 308 return false; 309 } 321 int kapa = psphotKapaChannel (1); 322 if (kapa == -1) return false; 310 323 311 324 psArray *footprints = detections->footprints; … … 422 435 if (!pmVisualIsVisual()) return true; 423 436 424 if (kapa == -1) { 425 fprintf (stderr, "kapa not opened, skipping\n"); 426 return false; 427 } 437 int kapa = psphotKapaChannel (1); 438 if (kapa == -1) return false; 428 439 429 440 // XXX mark the different source classes with different color/shape dots … … 483 494 if (!pmVisualIsVisual()) return true; 484 495 485 if (kapa3 == -1) { 486 kapa3 = KapaOpenNamedSocket ("kapa", "psphot:plots"); 487 if (kapa3 == -1) { 488 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 489 pmVisualSetVisual(false); 490 return false; 491 } 492 } 493 494 KapaClearPlots (kapa3); 496 int myKapa = psphotKapaChannel (2); 497 if (myKapa == -1) return false; 498 499 KapaClearPlots (myKapa); 495 500 KapaInitGraph (&graphdata); 496 KapaSetFont ( kapa3, "courier", 14);501 KapaSetFont (myKapa, "courier", 14); 497 502 498 503 float SN_LIM = psMetadataLookupF32(&status, recipe, "PSF_SN_LIM"); … … 525 530 } 526 531 } 532 Xmin = PS_MAX(Xmin, -0.1); 533 Ymin = PS_MAX(Ymin, -0.1); 527 534 528 535 // storage vectors for data to be plotted … … 572 579 section.y = 0.00; 573 580 section.name = psStringCopy ("MxxMyy"); 574 KapaSetSection ( kapa3, §ion);581 KapaSetSection (myKapa, §ion); 575 582 psFree (section.name); 576 583 … … 580 587 graphdata.xmax = Xmax; 581 588 graphdata.ymax = Ymax; 582 KapaSetLimits ( kapa3, &graphdata);583 584 KapaBox ( kapa3, &graphdata);585 KapaSendLabel ( kapa3, "M_xx| (pixels)", KAPA_LABEL_XM);586 KapaSendLabel ( kapa3, "M_yy| (pixels)", KAPA_LABEL_YM);589 KapaSetLimits (myKapa, &graphdata); 590 591 KapaBox (myKapa, &graphdata); 592 KapaSendLabel (myKapa, "M_xx| (pixels)", KAPA_LABEL_XM); 593 KapaSendLabel (myKapa, "M_yy| (pixels)", KAPA_LABEL_YM); 587 594 588 595 graphdata.color = KapaColorByName ("black"); … … 590 597 graphdata.size = 0.3; 591 598 graphdata.style = 2; 592 KapaPrepPlot ( kapa3, nF, &graphdata);593 KapaPlotVector ( kapa3, nF, xFaint->data.F32, "x");594 KapaPlotVector ( kapa3, nF, yFaint->data.F32, "y");599 KapaPrepPlot (myKapa, nF, &graphdata); 600 KapaPlotVector (myKapa, nF, xFaint->data.F32, "x"); 601 KapaPlotVector (myKapa, nF, yFaint->data.F32, "y"); 595 602 596 603 graphdata.color = KapaColorByName ("red"); … … 598 605 graphdata.size = 0.5; 599 606 graphdata.style = 2; 600 KapaPrepPlot ( kapa3, nB, &graphdata);601 KapaPlotVector ( kapa3, nB, xBright->data.F32, "x");602 KapaPlotVector ( kapa3, nB, yBright->data.F32, "y");607 KapaPrepPlot (myKapa, nB, &graphdata); 608 KapaPlotVector (myKapa, nB, xBright->data.F32, "x"); 609 KapaPlotVector (myKapa, nB, yBright->data.F32, "y"); 603 610 604 611 // second section: MagMyy … … 608 615 section.y = 0.80; 609 616 section.name = psStringCopy ("MagMyy"); 610 KapaSetSection ( kapa3, §ion);617 KapaSetSection (myKapa, §ion); 611 618 psFree (section.name); 612 619 … … 616 623 graphdata.ymin = Ymin; 617 624 graphdata.ymax = Ymax; 618 KapaSetLimits ( kapa3, &graphdata);625 KapaSetLimits (myKapa, &graphdata); 619 626 620 627 strcpy (graphdata.labels, "0210"); 621 KapaBox ( kapa3, &graphdata);622 KapaSendLabel ( kapa3, "inst mag", KAPA_LABEL_XP);623 KapaSendLabel ( kapa3, "M_yy| (pixels)", KAPA_LABEL_YM);628 KapaBox (myKapa, &graphdata); 629 KapaSendLabel (myKapa, "inst mag", KAPA_LABEL_XP); 630 KapaSendLabel (myKapa, "M_yy| (pixels)", KAPA_LABEL_YM); 624 631 625 632 graphdata.color = KapaColorByName ("black"); … … 627 634 graphdata.size = 0.3; 628 635 graphdata.style = 2; 629 KapaPrepPlot ( kapa3, nF, &graphdata);630 KapaPlotVector ( kapa3, nF, mFaint->data.F32, "x");631 KapaPlotVector ( kapa3, nF, yFaint->data.F32, "y");636 KapaPrepPlot (myKapa, nF, &graphdata); 637 KapaPlotVector (myKapa, nF, mFaint->data.F32, "x"); 638 KapaPlotVector (myKapa, nF, yFaint->data.F32, "y"); 632 639 633 640 graphdata.color = KapaColorByName ("red"); … … 635 642 graphdata.size = 0.5; 636 643 graphdata.style = 2; 637 KapaPrepPlot ( kapa3, nB, &graphdata);638 KapaPlotVector ( kapa3, nB, mBright->data.F32, "x");639 KapaPlotVector ( kapa3, nB, yBright->data.F32, "y");644 KapaPrepPlot (myKapa, nB, &graphdata); 645 KapaPlotVector (myKapa, nB, mBright->data.F32, "x"); 646 KapaPlotVector (myKapa, nB, yBright->data.F32, "y"); 640 647 641 648 // third section: MagMxx … … 645 652 section.y = 0.00; 646 653 section.name = psStringCopy ("MagMxx"); 647 KapaSetSection ( kapa3, §ion);654 KapaSetSection (myKapa, §ion); 648 655 psFree (section.name); 649 656 … … 653 660 graphdata.ymin = -7.9; 654 661 graphdata.ymax = -17.1; 655 KapaSetLimits ( kapa3, &graphdata);662 KapaSetLimits (myKapa, &graphdata); 656 663 657 664 strcpy (graphdata.labels, "2001"); 658 KapaBox ( kapa3, &graphdata);659 KapaSendLabel ( kapa3, "M_xx| (pixels)", KAPA_LABEL_XM);660 KapaSendLabel ( kapa3, "inst mag", KAPA_LABEL_YP);665 KapaBox (myKapa, &graphdata); 666 KapaSendLabel (myKapa, "M_xx| (pixels)", KAPA_LABEL_XM); 667 KapaSendLabel (myKapa, "inst mag", KAPA_LABEL_YP); 661 668 662 669 graphdata.color = KapaColorByName ("black"); … … 664 671 graphdata.size = 0.3; 665 672 graphdata.style = 2; 666 KapaPrepPlot ( kapa3, nF, &graphdata);667 KapaPlotVector ( kapa3, nF, xFaint->data.F32, "x");668 KapaPlotVector ( kapa3, nF, mFaint->data.F32, "y");673 KapaPrepPlot (myKapa, nF, &graphdata); 674 KapaPlotVector (myKapa, nF, xFaint->data.F32, "x"); 675 KapaPlotVector (myKapa, nF, mFaint->data.F32, "y"); 669 676 670 677 graphdata.color = KapaColorByName ("red"); … … 672 679 graphdata.size = 0.5; 673 680 graphdata.style = 2; 674 KapaPrepPlot ( kapa3, nB, &graphdata);675 KapaPlotVector ( kapa3, nB, xBright->data.F32, "x");676 KapaPlotVector ( kapa3, nB, mBright->data.F32, "y");681 KapaPrepPlot (myKapa, nB, &graphdata); 682 KapaPlotVector (myKapa, nB, xBright->data.F32, "x"); 683 KapaPlotVector (myKapa, nB, mBright->data.F32, "y"); 677 684 678 685 // draw N circles to outline the clumps 679 686 { 680 KapaSelectSection ( kapa3, "MxxMyy");687 KapaSelectSection (myKapa, "MxxMyy"); 681 688 682 689 // draw a circle centered on psfX,Y with size of the psf limit … … 694 701 graphdata.xmax = Xmax; 695 702 graphdata.ymax = Ymax; 696 KapaSetLimits ( kapa3, &graphdata);703 KapaSetLimits (myKapa, &graphdata); 697 704 698 705 for (int n = 0; n < nRegions; n++) { … … 713 720 yLimit->data.F32[i] = Ry*sin(i*2.0*M_PI/120.0) + psfY; 714 721 } 715 KapaPrepPlot ( kapa3, xLimit->n, &graphdata);716 KapaPlotVector ( kapa3, xLimit->n, xLimit->data.F32, "x");717 KapaPlotVector ( kapa3, yLimit->n, yLimit->data.F32, "y");722 KapaPrepPlot (myKapa, xLimit->n, &graphdata); 723 KapaPlotVector (myKapa, xLimit->n, xLimit->data.F32, "x"); 724 KapaPlotVector (myKapa, yLimit->n, yLimit->data.F32, "y"); 718 725 } 719 726 psFree (xLimit); 720 727 psFree (yLimit); 721 728 } 722 723 # if (0)724 // *** make a histogram of the source counts in the x and y directions725 psHistogram *nX = psHistogramAlloc (graphdata.xmin, graphdata.xmax, 50.0);726 psHistogram *nY = psHistogramAlloc (graphdata.ymin, graphdata.ymax, 50.0);727 psVectorHistogram (nX, xFaint, NULL, NULL, 0);728 psVectorHistogram (nY, yFaint, NULL, NULL, 0);729 psVector *dX = psVectorAlloc (nX->nums->n, PS_TYPE_F32);730 psVector *vX = psVectorAlloc (nX->nums->n, PS_TYPE_F32);731 psVector *dY = psVectorAlloc (nY->nums->n, PS_TYPE_F32);732 psVector *vY = psVectorAlloc (nY->nums->n, PS_TYPE_F32);733 for (int i = 0; i < nX->nums->n; i++) {734 dX->data.F32[i] = nX->nums->data.S32[i];735 vX->data.F32[i] = 0.5*(nX->bounds->data.F32[i] + nX->bounds->data.F32[i+1]);736 }737 for (int i = 0; i < nY->nums->n; i++) {738 dY->data.F32[i] = nY->nums->data.S32[i];739 vY->data.F32[i] = 0.5*(nY->bounds->data.F32[i] + nY->bounds->data.F32[i+1]);740 }741 742 graphdata.color = KapaColorByName ("black");743 graphdata.ptype = 0;744 graphdata.size = 0.0;745 graphdata.style = 0;746 KapaPrepPlot (kapa3, dX->n, &graphdata);747 KapaPlotVector (kapa3, dX->n, dX->data.F32, "x");748 KapaPlotVector (kapa3, vX->n, vX->data.F32, "y");749 750 psFree (nX);751 psFree (dX);752 psFree (vX);753 754 psFree (nY);755 psFree (dY);756 psFree (vY);757 # endif758 729 759 730 psFree (xBright); … … 775 746 776 747 // assumes 'kapa' value is checked and set 777 bool psphotVisualShowRoughClass_Single ( psArray *sources, pmSourceType type, pmSourceMode mode, char *color) {748 bool psphotVisualShowRoughClass_Single (int myKapa, psArray *sources, pmSourceType type, pmSourceMode mode, char *color) { 778 749 779 750 int Noverlay; … … 815 786 } 816 787 817 KiiLoadOverlay ( kapa, overlay, Noverlay, color);788 KiiLoadOverlay (myKapa, overlay, Noverlay, color); 818 789 FREE (overlay); 819 790 … … 825 796 if (!pmVisualIsVisual()) return true; 826 797 827 if (kapa == -1) { 828 fprintf (stderr, "kapa not opened, skipping\n"); 829 return false; 830 } 831 832 KiiEraseOverlay (kapa, "yellow"); // moments 833 834 psphotVisualShowRoughClass_Single (sources, PM_SOURCE_TYPE_STAR, 0, "red"); 835 psphotVisualShowRoughClass_Single (sources, PM_SOURCE_TYPE_EXTENDED, 0, "blue"); 836 psphotVisualShowRoughClass_Single (sources, PM_SOURCE_TYPE_DEFECT, 0, "blue"); 837 psphotVisualShowRoughClass_Single (sources, PM_SOURCE_TYPE_SATURATED, 0, "red"); 838 psphotVisualShowRoughClass_Single (sources, PM_SOURCE_TYPE_STAR, PM_SOURCE_MODE_PSFSTAR, "yellow"); 839 psphotVisualShowRoughClass_Single (sources, PM_SOURCE_TYPE_STAR, PM_SOURCE_MODE_SATSTAR, "green"); 798 int myKapa = psphotKapaChannel (1); 799 if (myKapa == -1) return false; 800 801 KiiEraseOverlay (myKapa, "yellow"); // moments 802 803 psphotVisualShowRoughClass_Single (myKapa, sources, PM_SOURCE_TYPE_STAR, 0, "red"); 804 psphotVisualShowRoughClass_Single (myKapa, sources, PM_SOURCE_TYPE_EXTENDED, 0, "blue"); 805 psphotVisualShowRoughClass_Single (myKapa, sources, PM_SOURCE_TYPE_DEFECT, 0, "blue"); 806 psphotVisualShowRoughClass_Single (myKapa, sources, PM_SOURCE_TYPE_SATURATED, 0, "red"); 807 psphotVisualShowRoughClass_Single (myKapa, sources, PM_SOURCE_TYPE_STAR, PM_SOURCE_MODE_PSFSTAR, "yellow"); 808 psphotVisualShowRoughClass_Single (myKapa, sources, PM_SOURCE_TYPE_STAR, PM_SOURCE_MODE_SATSTAR, "green"); 840 809 841 810 // pause and wait for user input: … … 854 823 if (!pmVisualIsVisual()) return true; 855 824 856 if (kapa2 == -1) { 857 kapa2 = KapaOpenNamedSocket ("kapa", "psphot:psfstars"); 858 if (kapa2 == -1) { 859 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 860 pmVisualSetVisual(false); 861 return false; 862 } 863 } 825 int myKapa = psphotKapaChannel (3); 826 if (myKapa == -1) return false; 864 827 865 828 int DX = 64; … … 906 869 907 870 psImage *psfLogFlux = (psImage *) psUnaryOp (NULL, psfMosaic, "log"); 908 psphotVisualRangeImage ( kapa2, psfLogFlux, "psf_mosaic", 0, -2.0, 3.0);909 psphotVisualRangeImage ( kapa2, funMosaic, "psf_analytical", 1, -10.0, 100.0);910 psphotVisualRangeImage ( kapa2, resMosaic, "psf_residual", 2, -10.0, 100.0);871 psphotVisualRangeImage (myKapa, psfLogFlux, "psf_mosaic", 0, -2.0, 3.0); 872 psphotVisualRangeImage (myKapa, funMosaic, "psf_analytical", 1, -10.0, 100.0); 873 psphotVisualRangeImage (myKapa, resMosaic, "psf_residual", 2, -10.0, 100.0); 911 874 912 875 psFree (psfMosaic); … … 932 895 if (!pmVisualIsVisual()) return true; 933 896 934 if (kapa2 == -1) { 935 kapa2 = KapaOpenNamedSocket ("kapa", "psphot:psfstars"); 936 if (kapa2 == -1) { 937 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 938 pmVisualSetVisual(false); 939 return false; 940 } 941 } 897 int myKapa = psphotKapaChannel (3); 898 if (myKapa == -1) return false; 942 899 943 900 // user-defined masks to test for good/bad pixels (build from recipe list if not yet set) … … 1064 1021 } 1065 1022 1066 psphotVisualRangeImage ( kapa2, outpos, "psfpos", 0, -0.05, 0.95);1067 psphotVisualRangeImage ( kapa2, outsub, "psfsub", 1, -0.05, 0.95);1023 psphotVisualRangeImage (myKapa, outpos, "psfpos", 0, -0.05, 0.95); 1024 psphotVisualRangeImage (myKapa, outsub, "psfsub", 1, -0.05, 0.95); 1068 1025 1069 1026 // pause and wait for user input: … … 1092 1049 if (!pmVisualIsVisual()) return true; 1093 1050 1094 if (kapa2 == -1) { 1095 kapa2 = KapaOpenNamedSocket ("kapa", "psphot:images"); 1096 if (kapa2 == -1) { 1097 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 1098 pmVisualSetVisual(false); 1099 return false; 1100 } 1101 } 1051 int myKapa = psphotKapaChannel (3); 1052 if (myKapa == -1) return false; 1102 1053 1103 1054 // user-defined masks to test for good/bad pixels (build from recipe list if not yet set) … … 1212 1163 } 1213 1164 1214 psphotVisualScaleImage ( kapa2, outsat, "satstar", 2);1165 psphotVisualScaleImage (myKapa, outsat, "satstar", 2); 1215 1166 1216 1167 // pause and wait for user input: … … 1345 1296 if (!pmVisualIsVisual()) return true; 1346 1297 1347 if (kapa3 == -1) { 1348 kapa3 = KapaOpenNamedSocket ("kapa", "psphot:plots"); 1349 if (kapa3 == -1) { 1350 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 1351 pmVisualSetVisual(false); 1352 return false; 1353 } 1354 } 1298 int myKapa = psphotKapaChannel (2); 1299 if (myKapa == -1) return false; 1355 1300 1356 1301 // user-defined masks to test for good/bad pixels (build from recipe list if not yet set) … … 1359 1304 assert (maskVal); 1360 1305 1361 KapaClearPlots ( kapa3);1306 KapaClearPlots (myKapa); 1362 1307 // first section : mag vs CR nSigma 1363 1308 section.dx = 1.0; … … 1367 1312 section.name = NULL; 1368 1313 psStringAppend (§ion.name, "linlog"); 1369 KapaSetSection ( kapa3, §ion);1314 KapaSetSection (myKapa, §ion); 1370 1315 psFree (section.name); 1371 1316 … … 1377 1322 section.name = NULL; 1378 1323 psStringAppend (§ion.name, "loglog"); 1379 KapaSetSection ( kapa3, §ion);1324 KapaSetSection (myKapa, §ion); 1380 1325 psFree (section.name); 1381 1326 … … 1386 1331 if (!(source->mode & PM_SOURCE_MODE_PSFSTAR)) continue; 1387 1332 1388 psphotVisualPlotRadialProfile ( kapa3, source, maskVal);1333 psphotVisualPlotRadialProfile (myKapa, source, maskVal); 1389 1334 1390 1335 // pause and wait for user input: … … 1396 1341 } 1397 1342 if (key[0] == 'e') { 1398 KapaClearPlots ( kapa3);1343 KapaClearPlots (myKapa); 1399 1344 } 1400 1345 if (key[0] == 's') { … … 1417 1362 if (!pmVisualIsVisual()) return true; 1418 1363 1419 if (kapa == -1) { 1420 fprintf (stderr, "kapa not opened, skipping\n"); 1421 return false; 1422 } 1364 int myKapa = psphotKapaChannel (1); 1365 if (myKapa == -1) return false; 1423 1366 1424 1367 // note: this uses the Ohana allocation tools: … … 1493 1436 } 1494 1437 1495 KiiLoadOverlay ( kapa, overlayE, NoverlayE, "red");1496 KiiLoadOverlay ( kapa, overlayO, NoverlayO, "yellow");1438 KiiLoadOverlay (myKapa, overlayE, NoverlayE, "red"); 1439 KiiLoadOverlay (myKapa, overlayO, NoverlayO, "yellow"); 1497 1440 FREE (overlayE); 1498 1441 FREE (overlayO); … … 1511 1454 } 1512 1455 1513 bool psphotVisualShowSourceSize (pmReadout *readout, psArray *sources) {1514 1515 int Noverlay , NOVERLAY;1456 bool psphotVisualShowSourceSize_Single (int myKapa, psArray *sources, pmSourceMode mode, bool keep, float scale, char *color) { 1457 1458 int Noverlay; 1516 1459 KiiOverlay *overlay; 1517 1460 1518 if (!pmVisualIsVisual()) return true; 1519 1520 if (kapa == -1) { 1521 fprintf (stderr, "kapa not opened, skipping\n"); 1522 return false; 1523 } 1461 psEllipseMoments emoments; 1462 psEllipseAxes axes; 1524 1463 1525 1464 // note: this uses the Ohana allocation tools: 1465 ALLOCATE (overlay, KiiOverlay, sources->n); 1466 1526 1467 Noverlay = 0; 1527 NOVERLAY = 100;1528 ALLOCATE (overlay, KiiOverlay, sources->n);1529 1530 // mark CRs with red boxes1531 1468 for (int i = 0; i < sources->n; i++) { 1532 1469 … … 1534 1471 if (source == NULL) continue; 1535 1472 1536 if (!(source->mode & PM_SOURCE_MODE_CR_LIMIT)) continue; 1537 1538 overlay[Noverlay].type = KII_OVERLAY_BOX; 1539 overlay[Noverlay].x = source->peak->xf; 1540 overlay[Noverlay].y = source->peak->yf; 1541 1542 overlay[Noverlay].dx = 4; 1543 overlay[Noverlay].dy = 4; 1544 overlay[Noverlay].angle = 0; 1473 // if (source->type != type) continue; 1474 if (mode) { 1475 if (keep) { 1476 if (!(source->mode & mode)) continue; 1477 } else { 1478 if (source->mode & mode) continue; 1479 } 1480 } 1481 1482 pmMoments *moments = source->moments; 1483 if (moments == NULL) continue; 1484 1485 overlay[Noverlay].type = KII_OVERLAY_CIRCLE; 1486 overlay[Noverlay].x = moments->Mx; 1487 overlay[Noverlay].y = moments->My; 1488 1489 emoments.x2 = moments->Mxx; 1490 emoments.y2 = moments->Myy; 1491 emoments.xy = moments->Mxy; 1492 1493 axes = psEllipseMomentsToAxes (emoments, 20.0); 1494 1495 overlay[Noverlay].dx = scale*2.0*axes.major; 1496 overlay[Noverlay].dy = scale*2.0*axes.minor; 1497 overlay[Noverlay].angle = axes.theta * PS_DEG_RAD; 1545 1498 overlay[Noverlay].text = NULL; 1546 1499 Noverlay ++; 1547 CHECK_REALLOCATE (overlay, KiiOverlay, NOVERLAY, Noverlay, 100); 1548 } 1549 KiiLoadOverlay (kapa, overlay, Noverlay, "red"); 1550 1551 1552 Noverlay = 0; 1553 for (int i = 0; i < sources->n; i++) { 1554 1555 pmSource *source = sources->data[i]; 1556 if (source == NULL) continue; 1557 1558 // mark EXTs with yellow circles 1559 if (!(source->mode & PM_SOURCE_MODE_EXT_LIMIT)) continue; 1560 1561 overlay[Noverlay].type = KII_OVERLAY_CIRCLE; 1562 overlay[Noverlay].x = source->peak->xf; 1563 overlay[Noverlay].y = source->peak->yf; 1564 1565 overlay[Noverlay].dx = 10; 1566 overlay[Noverlay].dy = 10; 1567 overlay[Noverlay].angle = 0; 1568 overlay[Noverlay].text = NULL; 1569 Noverlay ++; 1570 CHECK_REALLOCATE (overlay, KiiOverlay, NOVERLAY, Noverlay, 100); 1571 } 1572 1573 KiiLoadOverlay (kapa, overlay, Noverlay, "blue"); 1500 } 1501 1502 KiiLoadOverlay (myKapa, overlay, Noverlay, color); 1574 1503 FREE (overlay); 1575 1504 1576 psphotVisualShowMask (kapa, readout->mask, "mask", 2); 1505 return true; 1506 } 1507 1508 bool psphotVisualShowSourceSize (pmReadout *readout, psArray *sources) { 1509 1510 // if (!pmVisualIsVisual()) return true; 1511 1512 int myKapa = psphotKapaChannel (1); 1513 if (myKapa == -1) return false; 1514 1515 KiiEraseOverlay (myKapa, "red"); 1516 KiiEraseOverlay (myKapa, "blue"); 1517 KiiEraseOverlay (myKapa, "green"); 1518 KiiEraseOverlay (myKapa, "yellow"); 1519 1520 psphotVisualShowSourceSize_Single (myKapa, sources, PM_SOURCE_MODE_EXT_LIMIT | PM_SOURCE_MODE_DEFECT | PM_SOURCE_MODE_CR_LIMIT | PM_SOURCE_MODE_SATSTAR, 0, 1.0, "green"); 1521 psphotVisualShowSourceSize_Single (myKapa, sources, PM_SOURCE_MODE_EXT_LIMIT, 1, 1.0, "blue"); 1522 psphotVisualShowSourceSize_Single (myKapa, sources, PM_SOURCE_MODE_CR_LIMIT, 1, 1.0, "red"); 1523 psphotVisualShowSourceSize_Single (myKapa, sources, PM_SOURCE_MODE_DEFECT, 1, 2.0, "red"); 1524 psphotVisualShowSourceSize_Single (myKapa, sources, PM_SOURCE_MODE_SATSTAR, 1, 1.0, "yellow"); 1577 1525 1578 1526 // pause and wait for user input: 1579 1527 // continue, save (provide name), ?? 1580 1528 char key[10]; 1581 fprintf (stdout, " CR: 4pix red BOX; EXT: 10pix blue circle\n");1529 fprintf (stdout, "red: CR; blue: EXTENDED; green: PSF-like; yellow: SATSTAR\n"); 1582 1530 fprintf (stdout, "[c]ontinue? "); 1583 1531 if (!fgets(key, 8, stdin)) { 1584 1532 psWarning("Unable to read option"); 1585 1533 } 1586 1587 return true; 1588 } 1589 1590 bool psphotVisualPlotSourceSize (psArray *sources) { 1591 1534 return true; 1535 } 1536 1537 bool psphotVisualPlotSourceSize (psMetadata *recipe, psArray *sources) { 1538 1539 bool status; 1592 1540 Graphdata graphdata; 1593 1541 KapaSection section; 1594 1542 1595 if (!pmVisualIsVisual()) return true; 1596 1597 if (kapa3 == -1) { 1598 kapa3 = KapaOpenNamedSocket ("kapa", "psphot:plots"); 1599 if (kapa3 == -1) { 1600 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 1601 pmVisualSetVisual(false); 1602 return false; 1543 // if (!pmVisualIsVisual()) return true; 1544 1545 int myKapa = psphotKapaChannel (2); 1546 if (myKapa == -1) return false; 1547 1548 KapaClearPlots (myKapa); 1549 KapaInitGraph (&graphdata); 1550 KapaSetFont (myKapa, "courier", 14); 1551 1552 // select the max psfX,Y values for the plot limits 1553 float Xmin = 1000.0, Xmax = 0.0; 1554 float Ymin = 1000.0, Ymax = 0.0; 1555 { 1556 int nRegions = psMetadataLookupS32 (&status, recipe, "PSF.CLUMP.NREGIONS"); 1557 for (int n = 0; n < nRegions; n++) { 1558 1559 char regionName[64]; 1560 snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", n); 1561 psMetadata *regionMD = psMetadataLookupPtr (&status, recipe, regionName); 1562 1563 float psfX = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.X"); 1564 float psfY = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.Y"); 1565 float psfdX = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DX"); 1566 float psfdY = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DY"); 1567 1568 float X0 = psfX - 10.0*psfdX; 1569 float X1 = psfX + 10.0*psfdX; 1570 float Y0 = psfY - 10.0*psfdY; 1571 float Y1 = psfY + 10.0*psfdY; 1572 1573 if (isfinite(X0)) { Xmin = PS_MIN(Xmin, X0); } 1574 if (isfinite(X1)) { Xmax = PS_MAX(Xmax, X1); } 1575 if (isfinite(Y0)) { Ymin = PS_MIN(Ymin, Y0); } 1576 if (isfinite(Y1)) { Ymax = PS_MAX(Ymax, Y1); } 1603 1577 } 1604 1578 } 1605 1606 KapaClearPlots (kapa3); 1607 KapaInitGraph (&graphdata); 1608 1609 // first section : mag vs CR nSigma 1610 section.dx = 1.0; 1611 section.dy = 0.5; 1612 section.x = 0.0; 1613 section.y = 0.0; 1614 section.name = NULL; 1615 psStringAppend (§ion.name, "a1"); 1616 KapaSetSection (kapa3, §ion); 1617 psFree (section.name); 1618 1619 psVector *x = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1620 psVector *y = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1621 1622 graphdata.xmin = +32.0; 1623 graphdata.xmax = -32.0; 1624 graphdata.ymin = +32.0; 1625 graphdata.ymax = -32.0; 1626 1627 // construct the plot vectors 1628 int n = 0; 1579 Xmin = PS_MAX(Xmin, -0.1); 1580 Ymin = PS_MAX(Ymin, -0.1); 1581 1582 // storage vectors for data to be plotted 1583 psVector *xSAT = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1584 psVector *ySAT = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1585 psVector *mSAT = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1586 psVector *sSAT = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1587 1588 psVector *xPSF = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1589 psVector *yPSF = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1590 psVector *mPSF = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1591 psVector *sPSF = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1592 1593 psVector *xEXT = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1594 psVector *yEXT = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1595 psVector *mEXT = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1596 psVector *sEXT = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1597 1598 psVector *xDEF = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1599 psVector *yDEF = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1600 psVector *mDEF = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1601 psVector *sDEF = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1602 1603 psVector *xCR = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1604 psVector *yCR = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1605 psVector *mCR = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1606 psVector *sCR = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 1607 1608 // construct the vectors 1609 int nSAT = 0; 1610 int nEXT = 0; 1611 int nPSF = 0; 1612 int nDEF = 0; 1613 int nCR = 0; 1629 1614 for (int i = 0; i < sources->n; i++) { 1630 1615 pmSource *source = sources->data[i]; 1631 if (!source) continue; 1632 if (source->type != PM_SOURCE_TYPE_STAR) continue; 1633 if (!isfinite (source->crNsigma)) continue; 1634 if (!isfinite (source->peak->flux)) continue; 1635 if (source->peak->flux < 0) continue; 1636 1637 x->data.F32[n] = -2.5*log10(source->peak->flux); 1638 y->data.F32[n] = source->crNsigma; 1639 graphdata.xmin = PS_MIN(graphdata.xmin, x->data.F32[n]); 1640 graphdata.xmax = PS_MAX(graphdata.xmax, x->data.F32[n]); 1641 graphdata.ymin = -0.5; 1642 graphdata.ymax = 10.0; 1643 1644 n++; 1645 } 1646 x->n = y->n = n; 1647 1648 float range; 1649 range = graphdata.xmax - graphdata.xmin; 1650 graphdata.xmax += 0.05*range; 1651 graphdata.xmin -= 0.05*range; 1652 1653 // XXX set the plot range to match the image 1654 KapaSetLimits (kapa3, &graphdata); 1655 1656 KapaSetFont (kapa3, "helvetica", 14); 1657 KapaBox (kapa3, &graphdata); 1658 KapaSendLabel (kapa3, "Peak as Mag", KAPA_LABEL_XM); 1659 KapaSendLabel (kapa3, "CR N Sigma", KAPA_LABEL_YM); 1616 if (source->moments == NULL) continue; 1617 1618 if (source->mode & PM_SOURCE_MODE_CR_LIMIT) { 1619 xCR->data.F32[nCR] = source->moments->Mxx; 1620 yCR->data.F32[nCR] = source->moments->Myy; 1621 mCR->data.F32[nCR] = -2.5*log10(source->moments->Sum); 1622 sCR->data.F32[nCR] = source->extNsigma; 1623 nCR++; 1624 } 1625 if (source->mode & PM_SOURCE_MODE_SATSTAR) { 1626 xSAT->data.F32[nSAT] = source->moments->Mxx; 1627 ySAT->data.F32[nSAT] = source->moments->Myy; 1628 mSAT->data.F32[nSAT] = -2.5*log10(source->moments->Sum); 1629 sSAT->data.F32[nSAT] = source->extNsigma; 1630 nSAT++; 1631 } 1632 if (source->mode & PM_SOURCE_MODE_EXT_LIMIT) { 1633 xEXT->data.F32[nEXT] = source->moments->Mxx; 1634 yEXT->data.F32[nEXT] = source->moments->Myy; 1635 mEXT->data.F32[nEXT] = -2.5*log10(source->moments->Sum); 1636 sEXT->data.F32[nEXT] = source->extNsigma; 1637 nEXT++; 1638 continue; 1639 } 1640 if (source->mode & PM_SOURCE_MODE_DEFECT) { 1641 xDEF->data.F32[nDEF] = source->moments->Mxx; 1642 yDEF->data.F32[nDEF] = source->moments->Myy; 1643 mDEF->data.F32[nDEF] = -2.5*log10(source->moments->Sum); 1644 sDEF->data.F32[nDEF] = source->extNsigma; 1645 nDEF++; 1646 continue; 1647 } 1648 if ((source->mode & PM_SOURCE_MODE_CR_LIMIT) || (source->mode & PM_SOURCE_MODE_SATSTAR)) { 1649 continue; 1650 } 1651 xPSF->data.F32[nPSF] = source->moments->Mxx; 1652 yPSF->data.F32[nPSF] = source->moments->Myy; 1653 mPSF->data.F32[nPSF] = -2.5*log10(source->moments->Sum); 1654 sPSF->data.F32[nPSF] = source->extNsigma; 1655 nPSF++; 1656 } 1657 xSAT->n = nSAT; 1658 ySAT->n = nSAT; 1659 mSAT->n = nSAT; 1660 sSAT->n = nSAT; 1661 1662 xPSF->n = nPSF; 1663 yPSF->n = nPSF; 1664 mPSF->n = nPSF; 1665 sPSF->n = nPSF; 1666 1667 xEXT->n = nEXT; 1668 yEXT->n = nEXT; 1669 mEXT->n = nEXT; 1670 sEXT->n = nEXT; 1671 1672 xCR->n = nCR; 1673 yCR->n = nCR; 1674 mCR->n = nCR; 1675 sCR->n = nCR; 1676 1677 xDEF->n = nDEF; 1678 yDEF->n = nDEF; 1679 mDEF->n = nDEF; 1680 sDEF->n = nDEF; 1681 1682 // four sections: MxxMyy, MagMxx, MagMyy, MagSigma 1683 1684 // first section: MxxMyy 1685 section.dx = 0.75; 1686 section.dy = 0.60; 1687 section.x = 0.00; 1688 section.y = 0.00; 1689 section.name = psStringCopy ("MxxMyy"); 1690 KapaSetSection (myKapa, §ion); 1691 psFree (section.name); 1660 1692 1661 1693 graphdata.color = KapaColorByName ("black"); 1662 graphdata.ptype = 2; 1694 graphdata.xmin = Xmin; 1695 graphdata.ymin = Ymin; 1696 graphdata.xmax = Xmax; 1697 graphdata.ymax = Ymax; 1698 KapaSetLimits (myKapa, &graphdata); 1699 1700 KapaBox (myKapa, &graphdata); 1701 KapaSendLabel (myKapa, "M_xx| (pixels)", KAPA_LABEL_XM); 1702 KapaSendLabel (myKapa, "M_yy| (pixels)", KAPA_LABEL_YM); 1703 1704 graphdata.color = KapaColorByName ("black"); 1705 graphdata.ptype = 0; 1663 1706 graphdata.size = 0.5; 1664 1707 graphdata.style = 2; 1665 KapaPrepPlot (kapa3, n, &graphdata); 1666 KapaPlotVector (kapa3, n, x->data.F32, "x"); 1667 KapaPlotVector (kapa3, n, y->data.F32, "y"); 1668 1669 // second section : mag vs EXT nSigma 1670 section.dx = 1.0; 1671 section.dy = 0.5; 1672 section.x = 0.0; 1673 section.y = 0.5; 1674 section.name = NULL; 1675 psStringAppend (§ion.name, "a2"); 1676 KapaSetSection (kapa3, §ion); 1708 KapaPrepPlot (myKapa, nPSF, &graphdata); 1709 KapaPlotVector (myKapa, nPSF, xPSF->data.F32, "x"); 1710 KapaPlotVector (myKapa, nPSF, yPSF->data.F32, "y"); 1711 1712 graphdata.color = KapaColorByName ("blue"); 1713 graphdata.ptype = 0; 1714 graphdata.size = 0.5; 1715 graphdata.style = 2; 1716 KapaPrepPlot (myKapa, nEXT, &graphdata); 1717 KapaPlotVector (myKapa, nEXT, xEXT->data.F32, "x"); 1718 KapaPlotVector (myKapa, nEXT, yEXT->data.F32, "y"); 1719 1720 graphdata.color = KapaColorByName ("red"); 1721 graphdata.ptype = 0; 1722 graphdata.size = 0.5; 1723 graphdata.style = 2; 1724 KapaPrepPlot (myKapa, nDEF, &graphdata); 1725 KapaPlotVector (myKapa, nDEF, xDEF->data.F32, "x"); 1726 KapaPlotVector (myKapa, nDEF, yDEF->data.F32, "y"); 1727 1728 graphdata.color = KapaColorByName ("red"); 1729 graphdata.ptype = 7; 1730 graphdata.size = 1.0; 1731 graphdata.style = 2; 1732 KapaPrepPlot (myKapa, nCR, &graphdata); 1733 KapaPlotVector (myKapa, nCR, xCR->data.F32, "x"); 1734 KapaPlotVector (myKapa, nCR, yCR->data.F32, "y"); 1735 1736 graphdata.color = KapaColorByName ("blue"); 1737 graphdata.ptype = 7; 1738 graphdata.size = 1.0; 1739 graphdata.style = 2; 1740 KapaPrepPlot (myKapa, nSAT, &graphdata); 1741 KapaPlotVector (myKapa, nSAT, xSAT->data.F32, "x"); 1742 KapaPlotVector (myKapa, nSAT, ySAT->data.F32, "y"); 1743 1744 // second section: MagMyy 1745 section.dx = 0.75; 1746 section.dy = 0.20; 1747 section.x = 0.00; 1748 section.y = 0.80; 1749 section.name = psStringCopy ("MagMyy"); 1750 KapaSetSection (myKapa, §ion); 1677 1751 psFree (section.name); 1678 1752 1679 graphdata.xmin = +32.0;1680 graphdata.xmax = -32.0;1681 graphdata.ymin = +32.0;1682 graphdata.ymax = -32.0;1683 1684 // construct the plot vectors1685 n = 0;1686 for (int i = 0; i < sources->n; i++) {1687 pmSource *source = sources->data[i];1688 if (!source) continue;1689 if (source->type != PM_SOURCE_TYPE_STAR) continue;1690 if (!isfinite (source->extNsigma)) continue;1691 if (!isfinite (source->peak->flux)) continue;1692 if (source->peak->flux < 0) continue;1693 1694 x->data.F32[n] = -2.5*log10(source->peak->flux);1695 y->data.F32[n] = source->extNsigma;1696 graphdata.xmin = PS_MIN(graphdata.xmin, x->data.F32[n]);1697 graphdata.xmax = PS_MAX(graphdata.xmax, x->data.F32[n]);1698 graphdata.ymin = -0.5;1699 graphdata.ymax = 10.0;1700 1701 n++;1702 }1703 x->n = y->n = n;1704 1705 range = graphdata.xmax - graphdata.xmin;1706 graphdata.xmax += 0.05*range;1707 graphdata.xmin -= 0.05*range;1708 1709 // XXX set the plot range to match the image1710 KapaSetLimits (kapa3, &graphdata);1711 1712 KapaSetFont (kapa3, "helvetica", 14);1713 KapaBox (kapa3, &graphdata);1714 KapaSendLabel (kapa3, "EXT N Sigma", KAPA_LABEL_YM);1715 1716 1753 graphdata.color = KapaColorByName ("black"); 1717 graphdata.ptype = 2; 1754 graphdata.xmin = -17.1; 1755 graphdata.xmax = -7.9; 1756 graphdata.ymin = Ymin; 1757 graphdata.ymax = Ymax; 1758 KapaSetLimits (myKapa, &graphdata); 1759 1760 strcpy (graphdata.labels, "0210"); 1761 KapaBox (myKapa, &graphdata); 1762 KapaSendLabel (myKapa, "inst mag", KAPA_LABEL_XP); 1763 KapaSendLabel (myKapa, "M_yy| (pixels)", KAPA_LABEL_YM); 1764 1765 graphdata.color = KapaColorByName ("black"); 1766 graphdata.ptype = 0; 1718 1767 graphdata.size = 0.5; 1719 1768 graphdata.style = 2; 1720 KapaPrepPlot (kapa3, n, &graphdata); 1721 KapaPlotVector (kapa3, n, x->data.F32, "x"); 1722 KapaPlotVector (kapa3, n, y->data.F32, "y"); 1723 1724 psFree (x); 1725 psFree (y); 1769 KapaPrepPlot (myKapa, nPSF, &graphdata); 1770 KapaPlotVector (myKapa, nPSF, mPSF->data.F32, "x"); 1771 KapaPlotVector (myKapa, nPSF, yPSF->data.F32, "y"); 1772 1773 graphdata.color = KapaColorByName ("blue"); 1774 graphdata.ptype = 0; 1775 graphdata.size = 0.5; 1776 graphdata.style = 2; 1777 KapaPrepPlot (myKapa, nEXT, &graphdata); 1778 KapaPlotVector (myKapa, nEXT, mEXT->data.F32, "x"); 1779 KapaPlotVector (myKapa, nEXT, yEXT->data.F32, "y"); 1780 1781 graphdata.color = KapaColorByName ("red"); 1782 graphdata.ptype = 0; 1783 graphdata.size = 0.5; 1784 graphdata.style = 2; 1785 KapaPrepPlot (myKapa, nDEF, &graphdata); 1786 KapaPlotVector (myKapa, nDEF, mDEF->data.F32, "x"); 1787 KapaPlotVector (myKapa, nDEF, yDEF->data.F32, "y"); 1788 1789 graphdata.color = KapaColorByName ("red"); 1790 graphdata.ptype = 7; 1791 graphdata.size = 1.0; 1792 graphdata.style = 2; 1793 KapaPrepPlot (myKapa, nCR, &graphdata); 1794 KapaPlotVector (myKapa, nCR, mCR->data.F32, "x"); 1795 KapaPlotVector (myKapa, nCR, yCR->data.F32, "y"); 1796 1797 graphdata.color = KapaColorByName ("blue"); 1798 graphdata.ptype = 7; 1799 graphdata.size = 1.0; 1800 graphdata.style = 2; 1801 KapaPrepPlot (myKapa, nSAT, &graphdata); 1802 KapaPlotVector (myKapa, nSAT, mSAT->data.F32, "x"); 1803 KapaPlotVector (myKapa, nSAT, ySAT->data.F32, "y"); 1804 1805 // third section: MagMxx 1806 section.dx = 0.25; 1807 section.dy = 0.60; 1808 section.x = 0.80; 1809 section.y = 0.00; 1810 section.name = psStringCopy ("MagMxx"); 1811 KapaSetSection (myKapa, §ion); 1812 psFree (section.name); 1813 1814 graphdata.color = KapaColorByName ("black"); 1815 graphdata.xmin = Xmin; 1816 graphdata.xmax = Xmax; 1817 graphdata.ymin = -7.9; 1818 graphdata.ymax = -17.1; 1819 KapaSetLimits (myKapa, &graphdata); 1820 1821 strcpy (graphdata.labels, "2001"); 1822 KapaBox (myKapa, &graphdata); 1823 KapaSendLabel (myKapa, "M_xx| (pixels)", KAPA_LABEL_XM); 1824 KapaSendLabel (myKapa, "inst mag", KAPA_LABEL_YP); 1825 1826 graphdata.color = KapaColorByName ("black"); 1827 graphdata.ptype = 0; 1828 graphdata.size = 0.5; 1829 graphdata.style = 2; 1830 KapaPrepPlot (myKapa, nPSF, &graphdata); 1831 KapaPlotVector (myKapa, nPSF, xPSF->data.F32, "x"); 1832 KapaPlotVector (myKapa, nPSF, mPSF->data.F32, "y"); 1833 1834 graphdata.color = KapaColorByName ("blue"); 1835 graphdata.ptype = 0; 1836 graphdata.size = 0.5; 1837 graphdata.style = 2; 1838 KapaPrepPlot (myKapa, nEXT, &graphdata); 1839 KapaPlotVector (myKapa, nEXT, xEXT->data.F32, "x"); 1840 KapaPlotVector (myKapa, nEXT, mEXT->data.F32, "y"); 1841 1842 graphdata.color = KapaColorByName ("red"); 1843 graphdata.ptype = 0; 1844 graphdata.size = 0.5; 1845 graphdata.style = 2; 1846 KapaPrepPlot (myKapa, nDEF, &graphdata); 1847 KapaPlotVector (myKapa, nDEF, xDEF->data.F32, "x"); 1848 KapaPlotVector (myKapa, nDEF, mDEF->data.F32, "y"); 1849 1850 graphdata.color = KapaColorByName ("red"); 1851 graphdata.ptype = 7; 1852 graphdata.size = 1.0; 1853 graphdata.style = 2; 1854 KapaPrepPlot (myKapa, nCR, &graphdata); 1855 KapaPlotVector (myKapa, nCR, xCR->data.F32, "x"); 1856 KapaPlotVector (myKapa, nCR, mCR->data.F32, "y"); 1857 1858 graphdata.color = KapaColorByName ("blue"); 1859 graphdata.ptype = 7; 1860 graphdata.size = 1.0; 1861 graphdata.style = 2; 1862 KapaPrepPlot (myKapa, nSAT, &graphdata); 1863 KapaPlotVector (myKapa, nSAT, xSAT->data.F32, "x"); 1864 KapaPlotVector (myKapa, nSAT, mSAT->data.F32, "y"); 1865 1866 // fourth section: MagSigma 1867 section.dx = 0.75; 1868 section.dy = 0.15; 1869 section.x = 0.00; 1870 section.y = 0.65; 1871 section.name = psStringCopy ("MagSigma"); 1872 KapaSetSection (myKapa, §ion); 1873 psFree (section.name); 1874 1875 graphdata.color = KapaColorByName ("black"); 1876 graphdata.xmax = -7.9; 1877 graphdata.xmin = -17.1; 1878 graphdata.ymin = -20.1; 1879 graphdata.ymax = +20.1; 1880 KapaSetLimits (myKapa, &graphdata); 1881 1882 strcpy (graphdata.labels, "0100"); 1883 KapaBox (myKapa, &graphdata); 1884 // KapaSendLabel (myKapa, "inst mag", KAPA_LABEL_XM); 1885 KapaSendLabel (myKapa, "EXT&ss&c", KAPA_LABEL_YM); 1886 1887 graphdata.color = KapaColorByName ("black"); 1888 graphdata.ptype = 0; 1889 graphdata.size = 0.5; 1890 graphdata.style = 2; 1891 KapaPrepPlot (myKapa, nPSF, &graphdata); 1892 KapaPlotVector (myKapa, nPSF, mPSF->data.F32, "x"); 1893 KapaPlotVector (myKapa, nPSF, sPSF->data.F32, "y"); 1894 1895 graphdata.color = KapaColorByName ("blue"); 1896 graphdata.ptype = 0; 1897 graphdata.size = 0.5; 1898 graphdata.style = 2; 1899 KapaPrepPlot (myKapa, nEXT, &graphdata); 1900 KapaPlotVector (myKapa, nEXT, mEXT->data.F32, "x"); 1901 KapaPlotVector (myKapa, nEXT, sEXT->data.F32, "y"); 1902 1903 graphdata.color = KapaColorByName ("red"); 1904 graphdata.ptype = 0; 1905 graphdata.size = 0.5; 1906 graphdata.style = 2; 1907 KapaPrepPlot (myKapa, nDEF, &graphdata); 1908 KapaPlotVector (myKapa, nDEF, mDEF->data.F32, "x"); 1909 KapaPlotVector (myKapa, nDEF, sDEF->data.F32, "y"); 1910 1911 graphdata.color = KapaColorByName ("red"); 1912 graphdata.ptype = 7; 1913 graphdata.size = 1.0; 1914 graphdata.style = 2; 1915 KapaPrepPlot (myKapa, nCR, &graphdata); 1916 KapaPlotVector (myKapa, nCR, mCR->data.F32, "x"); 1917 KapaPlotVector (myKapa, nCR, sCR->data.F32, "y"); 1918 1919 graphdata.color = KapaColorByName ("blue"); 1920 graphdata.ptype = 7; 1921 graphdata.size = 1.0; 1922 graphdata.style = 2; 1923 KapaPrepPlot (myKapa, nSAT, &graphdata); 1924 KapaPlotVector (myKapa, nSAT, mSAT->data.F32, "x"); 1925 KapaPlotVector (myKapa, nSAT, sSAT->data.F32, "y"); 1926 1927 // draw N circles to outline the clumps 1928 { 1929 KapaSelectSection (myKapa, "MxxMyy"); 1930 1931 // draw a circle centered on psfX,Y with size of the psf limit 1932 psVector *xLimit = psVectorAlloc (120, PS_TYPE_F32); 1933 psVector *yLimit = psVectorAlloc (120, PS_TYPE_F32); 1934 1935 int nRegions = psMetadataLookupS32 (&status, recipe, "PSF.CLUMP.NREGIONS"); 1936 float PSF_CLUMP_NSIGMA = psMetadataLookupF32 (&status, recipe, "PSF_CLUMP_NSIGMA"); 1937 1938 graphdata.color = KapaColorByName ("blue"); 1939 graphdata.style = 0; 1940 1941 graphdata.xmin = Xmin; 1942 graphdata.ymin = Ymin; 1943 graphdata.xmax = Xmax; 1944 graphdata.ymax = Ymax; 1945 KapaSetLimits (myKapa, &graphdata); 1946 1947 for (int n = 0; n < nRegions; n++) { 1948 1949 char regionName[64]; 1950 snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", n); 1951 psMetadata *regionMD = psMetadataLookupPtr (&status, recipe, regionName); 1952 1953 float psfX = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.X"); 1954 float psfY = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.Y"); 1955 float psfdX = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DX"); 1956 float psfdY = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DY"); 1957 float Rx = psfdX * PSF_CLUMP_NSIGMA; 1958 float Ry = psfdY * PSF_CLUMP_NSIGMA; 1959 1960 for (int i = 0; i < xLimit->n; i++) { 1961 xLimit->data.F32[i] = Rx*cos(i*2.0*M_PI/120.0) + psfX; 1962 yLimit->data.F32[i] = Ry*sin(i*2.0*M_PI/120.0) + psfY; 1963 } 1964 KapaPrepPlot (myKapa, xLimit->n, &graphdata); 1965 KapaPlotVector (myKapa, xLimit->n, xLimit->data.F32, "x"); 1966 KapaPlotVector (myKapa, yLimit->n, yLimit->data.F32, "y"); 1967 } 1968 psFree (xLimit); 1969 psFree (yLimit); 1970 } 1971 1972 psFree (xSAT); 1973 psFree (ySAT); 1974 psFree (mSAT); 1975 1976 psFree (xEXT); 1977 psFree (yEXT); 1978 psFree (mEXT); 1979 1980 psFree (xPSF); 1981 psFree (yPSF); 1982 psFree (mPSF); 1983 1984 psFree (xDEF); 1985 psFree (yDEF); 1986 psFree (mDEF); 1987 1988 psFree (xCR); 1989 psFree (yCR); 1990 psFree (mCR); 1726 1991 1727 1992 // pause and wait for user input: … … 1739 2004 if (!pmVisualIsVisual()) return true; 1740 2005 1741 if (kapa == -1) { 1742 kapa = KapaOpenNamedSocket ("kapa", "psphot:images"); 1743 if (kapa == -1) { 1744 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 1745 pmVisualSetVisual(false); 1746 return false; 1747 } 1748 } 1749 1750 psphotVisualScaleImage (kapa, readout->image, "resid", 1); 2006 int myKapa = psphotKapaChannel (1); 2007 if (myKapa == -1) return false; 2008 2009 psphotVisualScaleImage (myKapa, readout->image, "resid", 1); 1751 2010 1752 2011 // pause and wait for user input: … … 1766 2025 if (!pmVisualIsVisual()) return true; 1767 2026 1768 if (kapa3 == -1) { 1769 kapa3 = KapaOpenNamedSocket ("kapa", "psphot:plots"); 1770 if (kapa3 == -1) { 1771 fprintf (stderr, "failure to open kapa; visual mode disabled\n"); 1772 pmVisualSetVisual(false); 1773 return false; 1774 } 1775 } 1776 1777 KapaClearPlots (kapa3); 2027 int myKapa = psphotKapaChannel (2); 2028 if (myKapa == -1) return false; 2029 2030 KapaClearPlots (myKapa); 1778 2031 KapaInitGraph (&graphdata); 1779 2032 … … 1815 2068 1816 2069 // XXX set the plot range to match the image 1817 KapaSetLimits ( kapa3, &graphdata);1818 1819 KapaSetFont ( kapa3, "helvetica", 14);1820 KapaBox ( kapa3, &graphdata);1821 KapaSendLabel ( kapa3, "PSF Mag", KAPA_LABEL_XM);1822 KapaSendLabel ( kapa3, "Ap Mag - PSF Mag", KAPA_LABEL_YM);2070 KapaSetLimits (myKapa, &graphdata); 2071 2072 KapaSetFont (myKapa, "helvetica", 14); 2073 KapaBox (myKapa, &graphdata); 2074 KapaSendLabel (myKapa, "PSF Mag", KAPA_LABEL_XM); 2075 KapaSendLabel (myKapa, "Ap Mag - PSF Mag", KAPA_LABEL_YM); 1823 2076 1824 2077 graphdata.color = KapaColorByName ("black"); … … 1826 2079 graphdata.size = 0.5; 1827 2080 graphdata.style = 2; 1828 KapaPrepPlot ( kapa3, n, &graphdata);1829 KapaPlotVector ( kapa3, n, x->data.F32, "x");1830 KapaPlotVector ( kapa3, n, y->data.F32, "y");2081 KapaPrepPlot (myKapa, n, &graphdata); 2082 KapaPlotVector (myKapa, n, x->data.F32, "x"); 2083 KapaPlotVector (myKapa, n, y->data.F32, "y"); 1831 2084 1832 2085 psFree (x); … … 1850 2103 1851 2104 if (!pmVisualIsVisual()) return true; 2105 2106 int kapa = psphotKapaChannel (3); 2107 if (kapa == -1) return false; 1852 2108 1853 2109 if (kapa == -1) { … … 1896 2152 1897 2153 # endif 2154 2155 # if (0) 2156 // *** make a histogram of the source counts in the x and y directions 2157 psHistogram *nX = psHistogramAlloc (graphdata.xmin, graphdata.xmax, 50.0); 2158 psHistogram *nY = psHistogramAlloc (graphdata.ymin, graphdata.ymax, 50.0); 2159 psVectorHistogram (nX, xFaint, NULL, NULL, 0); 2160 psVectorHistogram (nY, yFaint, NULL, NULL, 0); 2161 psVector *dX = psVectorAlloc (nX->nums->n, PS_TYPE_F32); 2162 psVector *vX = psVectorAlloc (nX->nums->n, PS_TYPE_F32); 2163 psVector *dY = psVectorAlloc (nY->nums->n, PS_TYPE_F32); 2164 psVector *vY = psVectorAlloc (nY->nums->n, PS_TYPE_F32); 2165 for (int i = 0; i < nX->nums->n; i++) { 2166 dX->data.F32[i] = nX->nums->data.S32[i]; 2167 vX->data.F32[i] = 0.5*(nX->bounds->data.F32[i] + nX->bounds->data.F32[i+1]); 2168 } 2169 for (int i = 0; i < nY->nums->n; i++) { 2170 dY->data.F32[i] = nY->nums->data.S32[i]; 2171 vY->data.F32[i] = 0.5*(nY->bounds->data.F32[i] + nY->bounds->data.F32[i+1]); 2172 } 2173 2174 graphdata.color = KapaColorByName ("black"); 2175 graphdata.ptype = 0; 2176 graphdata.size = 0.0; 2177 graphdata.style = 0; 2178 KapaPrepPlot (myKapa, dX->n, &graphdata); 2179 KapaPlotVector (myKapa, dX->n, dX->data.F32, "x"); 2180 KapaPlotVector (myKapa, vX->n, vX->data.F32, "y"); 2181 2182 psFree (nX); 2183 psFree (dX); 2184 psFree (vX); 2185 2186 psFree (nY); 2187 psFree (dY); 2188 psFree (vY); 2189 2190 2191 bool psphotVisualShowSourceSize_old (pmReadout *readout, psArray *sources) { 2192 2193 int Noverlay, NOVERLAY; 2194 KiiOverlay *overlay; 2195 2196 if (!pmVisualIsVisual()) return true; 2197 2198 if (kapa == -1) { 2199 fprintf (stderr, "kapa not opened, skipping\n"); 2200 return false; 2201 } 2202 2203 // note: this uses the Ohana allocation tools: 2204 Noverlay = 0; 2205 NOVERLAY = 100; 2206 ALLOCATE (overlay, KiiOverlay, sources->n); 2207 2208 // mark CRs with red boxes 2209 for (int i = 0; i < sources->n; i++) { 2210 2211 pmSource *source = sources->data[i]; 2212 if (source == NULL) continue; 2213 2214 if (!(source->mode & PM_SOURCE_MODE_CR_LIMIT)) continue; 2215 2216 overlay[Noverlay].type = KII_OVERLAY_BOX; 2217 overlay[Noverlay].x = source->peak->xf; 2218 overlay[Noverlay].y = source->peak->yf; 2219 2220 overlay[Noverlay].dx = 4; 2221 overlay[Noverlay].dy = 4; 2222 overlay[Noverlay].angle = 0; 2223 overlay[Noverlay].text = NULL; 2224 Noverlay ++; 2225 CHECK_REALLOCATE (overlay, KiiOverlay, NOVERLAY, Noverlay, 100); 2226 } 2227 KiiLoadOverlay (kapa, overlay, Noverlay, "red"); 2228 2229 2230 Noverlay = 0; 2231 for (int i = 0; i < sources->n; i++) { 2232 2233 pmSource *source = sources->data[i]; 2234 if (source == NULL) continue; 2235 2236 // mark EXTs with yellow circles 2237 if (!(source->mode & PM_SOURCE_MODE_EXT_LIMIT)) continue; 2238 2239 overlay[Noverlay].type = KII_OVERLAY_CIRCLE; 2240 overlay[Noverlay].x = source->peak->xf; 2241 overlay[Noverlay].y = source->peak->yf; 2242 2243 overlay[Noverlay].dx = 10; 2244 overlay[Noverlay].dy = 10; 2245 overlay[Noverlay].angle = 0; 2246 overlay[Noverlay].text = NULL; 2247 Noverlay ++; 2248 CHECK_REALLOCATE (overlay, KiiOverlay, NOVERLAY, Noverlay, 100); 2249 } 2250 2251 KiiLoadOverlay (kapa, overlay, Noverlay, "blue"); 2252 FREE (overlay); 2253 2254 psphotVisualShowMask (kapa, readout->mask, "mask", 2); 2255 2256 // pause and wait for user input: 2257 // continue, save (provide name), ?? 2258 char key[10]; 2259 fprintf (stdout, "CR: 4pix red BOX; EXT: 10pix blue circle\n"); 2260 fprintf (stdout, "[c]ontinue? "); 2261 if (!fgets(key, 8, stdin)) { 2262 psWarning("Unable to read option"); 2263 } 2264 2265 return true; 2266 } 2267 2268 bool psphotVisualPlotSourceSize_old (psArray *sources) { 2269 2270 Graphdata graphdata; 2271 KapaSection section; 2272 2273 if (!pmVisualIsVisual()) return true; 2274 2275 int kapa = psphotKapaChannel (2); 2276 if (kapa == -1) return false; 2277 2278 KapaClearPlots (kapa3); 2279 KapaInitGraph (&graphdata); 2280 2281 // first section : mag vs CR nSigma 2282 section.dx = 1.0; 2283 section.dy = 0.5; 2284 section.x = 0.0; 2285 section.y = 0.0; 2286 section.name = NULL; 2287 psStringAppend (§ion.name, "a1"); 2288 KapaSetSection (kapa3, §ion); 2289 psFree (section.name); 2290 2291 psVector *x = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 2292 psVector *y = psVectorAllocEmpty (sources->n, PS_TYPE_F32); 2293 2294 graphdata.xmin = +32.0; 2295 graphdata.xmax = -32.0; 2296 graphdata.ymin = +32.0; 2297 graphdata.ymax = -32.0; 2298 2299 // construct the plot vectors 2300 int n = 0; 2301 for (int i = 0; i < sources->n; i++) { 2302 pmSource *source = sources->data[i]; 2303 if (!source) continue; 2304 if (source->type != PM_SOURCE_TYPE_STAR) continue; 2305 if (!isfinite (source->crNsigma)) continue; 2306 if (!isfinite (source->peak->flux)) continue; 2307 if (source->peak->flux < 0) continue; 2308 2309 x->data.F32[n] = -2.5*log10(source->peak->flux); 2310 y->data.F32[n] = source->crNsigma; 2311 graphdata.xmin = PS_MIN(graphdata.xmin, x->data.F32[n]); 2312 graphdata.xmax = PS_MAX(graphdata.xmax, x->data.F32[n]); 2313 graphdata.ymin = -0.5; 2314 graphdata.ymax = 10.0; 2315 2316 n++; 2317 } 2318 x->n = y->n = n; 2319 2320 float range; 2321 range = graphdata.xmax - graphdata.xmin; 2322 graphdata.xmax += 0.05*range; 2323 graphdata.xmin -= 0.05*range; 2324 2325 // XXX set the plot range to match the image 2326 KapaSetLimits (kapa3, &graphdata); 2327 2328 KapaSetFont (kapa3, "helvetica", 14); 2329 KapaBox (kapa3, &graphdata); 2330 KapaSendLabel (kapa3, "Peak as Mag", KAPA_LABEL_XM); 2331 KapaSendLabel (kapa3, "CR N Sigma", KAPA_LABEL_YM); 2332 2333 graphdata.color = KapaColorByName ("black"); 2334 graphdata.ptype = 2; 2335 graphdata.size = 0.5; 2336 graphdata.style = 2; 2337 KapaPrepPlot (kapa3, n, &graphdata); 2338 KapaPlotVector (kapa3, n, x->data.F32, "x"); 2339 KapaPlotVector (kapa3, n, y->data.F32, "y"); 2340 2341 // second section : mag vs EXT nSigma 2342 section.dx = 1.0; 2343 section.dy = 0.5; 2344 section.x = 0.0; 2345 section.y = 0.5; 2346 section.name = NULL; 2347 psStringAppend (§ion.name, "a2"); 2348 KapaSetSection (kapa3, §ion); 2349 psFree (section.name); 2350 2351 graphdata.xmin = +32.0; 2352 graphdata.xmax = -32.0; 2353 graphdata.ymin = +32.0; 2354 graphdata.ymax = -32.0; 2355 2356 // construct the plot vectors 2357 n = 0; 2358 for (int i = 0; i < sources->n; i++) { 2359 pmSource *source = sources->data[i]; 2360 if (!source) continue; 2361 if (source->type != PM_SOURCE_TYPE_STAR) continue; 2362 if (!isfinite (source->extNsigma)) continue; 2363 if (!isfinite (source->peak->flux)) continue; 2364 if (source->peak->flux < 0) continue; 2365 2366 x->data.F32[n] = -2.5*log10(source->peak->flux); 2367 y->data.F32[n] = source->extNsigma; 2368 graphdata.xmin = PS_MIN(graphdata.xmin, x->data.F32[n]); 2369 graphdata.xmax = PS_MAX(graphdata.xmax, x->data.F32[n]); 2370 graphdata.ymin = -0.5; 2371 graphdata.ymax = 10.0; 2372 2373 n++; 2374 } 2375 x->n = y->n = n; 2376 2377 range = graphdata.xmax - graphdata.xmin; 2378 graphdata.xmax += 0.05*range; 2379 graphdata.xmin -= 0.05*range; 2380 2381 // XXX set the plot range to match the image 2382 KapaSetLimits (kapa3, &graphdata); 2383 2384 KapaSetFont (kapa3, "helvetica", 14); 2385 KapaBox (kapa3, &graphdata); 2386 KapaSendLabel (kapa3, "EXT N Sigma", KAPA_LABEL_YM); 2387 2388 graphdata.color = KapaColorByName ("black"); 2389 graphdata.ptype = 2; 2390 graphdata.size = 0.5; 2391 graphdata.style = 2; 2392 KapaPrepPlot (kapa3, n, &graphdata); 2393 KapaPlotVector (kapa3, n, x->data.F32, "x"); 2394 KapaPlotVector (kapa3, n, y->data.F32, "y"); 2395 2396 psFree (x); 2397 psFree (y); 2398 2399 // pause and wait for user input: 2400 // continue, save (provide name), ?? 2401 char key[10]; 2402 fprintf (stdout, "[c]ontinue? "); 2403 if (!fgets(key, 8, stdin)) { 2404 psWarning("Unable to read option"); 2405 } 2406 return true; 2407 } 2408 2409 # endif 2410
Note:
See TracChangeset
for help on using the changeset viewer.
