IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 31019


Ignore:
Timestamp:
Mar 23, 2011, 9:57:37 AM (15 years ago)
Author:
eugene
Message:

updates to pmVisual especially astrometry visualization

Location:
branches/eam_branches/ipp-20110213/psModules/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20110213/psModules/src/astrom/pmAstrometryObjects.c

    r27554 r31019  
    893893        // XXX this function is crashing
    894894        pmAstromVisualPlotGridMatch(raw, ref, gridNP, stats->offset.x, stats->offset.y, maxOffpix, Scale, Offset);
    895         pmAstromVisualPlotGridMatchOverlay(raw, ref);
     895        pmAstromVisualPlotGridMatchOverlay(raw, ref, stats->offset);
    896896
    897897        psFree (imStats);
  • branches/eam_branches/ipp-20110213/psModules/src/astrom/pmAstrometryVisual.c

    r26260 r31019  
    2121#include "pmKapaPlots.h"
    2222#include "pmVisual.h"
    23 
    24 //variables to determine when things are plotted
     23#include "pmVisualUtils.h"
     24
     25// variables to determine when things are plotted
    2526static bool plotGridMatch        = true;
    2627static bool plotTweak            = true;
     
    3738
    3839// variables to store plotting window indices
    39 static int kapa = -1;
     40static int kapa1 = -1;
    4041static int kapa2 = -1;
    41 
    42 //helper prototypes
     42static int kapa3 = -1;
     43
     44// helper prototypes
    4345bool residPlot (psArray *rawstars, psArray *refstars, psArray *match, psMetadata *recipe,
    4446                char *title);
     
    4951bool pmAstromVisualClose(void)
    5052{
    51     if(kapa != -1)
    52         KiiClose(kapa);
    53     if(kapa2 != -1)
    54         KiiClose(kapa2);
     53    if (kapa1 != -1) KiiClose(kapa1);
     54    if (kapa2 != -1) KiiClose(kapa2);
    5555    return true;
    5656}
     
    6060bool pmAstromVisualPlotRawStars (psArray *rawstars, pmFPA *fpa, pmChip *chip, psMetadata *recipe)
    6161{
    62     // make sure we want to plot this
    63     if (!plotRawStars || !pmVisualIsVisual()) return true;
    64 
    65     //set up plot region
    66     if (!pmVisualInitWindow (&kapa, "psastro:plots")){
    67         return false;
    68     }
     62    if (!plotRawStars) return true;
     63    if (!pmVisualTestLevel("psastro.plot1", 1)) return true;
     64    if (!pmVisualInitWindow (&kapa1, "psastro:plots")) return false;
     65
    6966    Graphdata graphdata;
    7067    KapaSection section;
    7168
    7269    KapaInitGraph (&graphdata);
    73     KapaClearPlots (kapa);
     70    KapaClearPlots (kapa1);
     71    section.bg = KapaColorByName ("none"); // XXX probably should be 'none'
    7472
    7573    graphdata.color = KapaColorByName ("black");
     
    7876    graphdata.style = 2;
    7977
    80     section.dx = 0.4;
    81     section.dy = 0.4;
    82 
    83     //initialize and populate plotting vectors
     78    section.dx = 0.5;
     79    section.dy = 0.5;
     80
     81    // initialize and populate plotting vectors
    8482    bool status = false;
    8583    float iMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MIN");
     
    9492    section.name = NULL;
    9593    psStringAppend (&section.name, "a0");
    96     KapaSetSection (kapa, &section);
     94    KapaSetSection (kapa1, &section);
    9795    psFree (section.name);
    9896
    99     //Chip coordinates
     97    // Chip coordinates
    10098    int n = 0;
    10199    for (int i = 0; i < rawstars->n; i++) {
     
    112110    xVec->n = yVec->n = zVec->n = n;
    113111
    114     KapaSendLabel(kapa, "Chip", KAPA_LABEL_XP);
    115     KapaSendLabel(kapa, "X", KAPA_LABEL_XM);
    116     KapaSendLabel(kapa, "Y", KAPA_LABEL_YM);
    117     pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, zVec, false);
    118 
    119     //Focal Plane Coordinates
     112    KapaSendLabel(kapa1, "Chip", KAPA_LABEL_XP);
     113    KapaSendLabel(kapa1, "X", KAPA_LABEL_XM);
     114    KapaSendLabel(kapa1, "Y", KAPA_LABEL_YM);
     115    pmVisualTriplePlot (kapa1, &graphdata, xVec, yVec, zVec, false);
     116
     117    // Focal Plane Coordinates
    120118    section.x = 0.5;
    121119    section.y = 0.5;
    122120    section.name = NULL;
    123121    psStringAppend (&section.name, "a1");
    124     KapaSetSection (kapa, &section);
     122    KapaSetSection (kapa1, &section);
    125123    psFree (section.name);
    126124
     
    139137    xVec->n = yVec->n = zVec->n = n;
    140138
    141     KapaSendLabel (kapa, "Focal Plane", KAPA_LABEL_XP);
    142     KapaSendLabel (kapa, "L", KAPA_LABEL_XM);
    143     KapaSendLabel (kapa, "M", KAPA_LABEL_YM);
    144     pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, zVec, false);
     139    KapaSendLabel (kapa1, "Focal Plane", KAPA_LABEL_XP);
     140    KapaSendLabel (kapa1, "L", KAPA_LABEL_XM);
     141    KapaSendLabel (kapa1, "M", KAPA_LABEL_YM);
     142    pmVisualTriplePlot (kapa1, &graphdata, xVec, yVec, zVec, false);
    145143
    146144    // Tangent Plane Coordinates
     
    149147    section.name = NULL;
    150148    psStringAppend (&section.name, "a2");
    151     KapaSetSection (kapa, &section);
     149    KapaSetSection (kapa1, &section);
    152150    psFree (section.name);
    153151
     
    166164    xVec->n = yVec->n = zVec->n = n;
    167165
    168     KapaSendLabel (kapa, "Tangential Plane", KAPA_LABEL_XP);
    169     KapaSendLabel (kapa, "P", KAPA_LABEL_XM);
    170     KapaSendLabel (kapa, "Q", KAPA_LABEL_YM);
    171     pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, zVec, false);
    172 
    173     //sky coordinates
     166    KapaSendLabel (kapa1, "Tangential Plane", KAPA_LABEL_XP);
     167    KapaSendLabel (kapa1, "P", KAPA_LABEL_XM);
     168    KapaSendLabel (kapa1, "Q", KAPA_LABEL_YM);
     169    pmVisualTriplePlot (kapa1, &graphdata, xVec, yVec, zVec, false);
     170
     171    // sky coordinates
    174172    section.x = 0.5;
    175173    section.y = 0.0;
    176174    section.name = NULL;
    177175    psStringAppend (&section.name, "a3");
    178     KapaSetSection (kapa, &section);
     176    KapaSetSection (kapa1, &section);
    179177    psFree (section.name);
    180178
     
    193191    xVec->n = yVec->n = zVec->n = n;
    194192
    195     KapaSendLabel (kapa, "Sky", KAPA_LABEL_XP);
    196     KapaSendLabel(kapa, "RA", KAPA_LABEL_XM);
    197     KapaSendLabel(kapa, "Dec", KAPA_LABEL_YM);
    198     pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, zVec, false);
     193    KapaSendLabel (kapa1, "Sky", KAPA_LABEL_XP);
     194    KapaSendLabel(kapa1, "RA", KAPA_LABEL_XM);
     195    KapaSendLabel(kapa1, "Dec", KAPA_LABEL_YM);
     196    pmVisualTriplePlot (kapa1, &graphdata, xVec, yVec, zVec, false);
    199197
    200198    // flip x (East increase to left)
    201199    SWAP (graphdata.xmin, graphdata.xmax);
    202     KapaSetLimits (kapa, &graphdata);
     200    KapaSetLimits (kapa1, &graphdata);
    203201
    204202    // plot label
    205203    section.x = 0.0;
    206204    section.y = 0.0;
    207     section.dx = .95;
    208     section.dy = .95;
     205    section.dx = 1.0;
     206    section.dy = 1.0;
    209207    section.name = NULL;
    210208    psStringAppend (&section.name, "a5");
    211     KapaSetSection (kapa, &section);
    212     KapaSendLabel (kapa, "Raw Star Selection - Initial Astrometry", KAPA_LABEL_XP);
     209    KapaSetSection (kapa1, &section);
     210    KapaSendLabel (kapa1, "Raw Star Selection - Initial Astrometry", KAPA_LABEL_XP);
    213211    psFree (section.name);
    214212
     
    225223bool pmAstromVisualPlotRefStars (psArray *refstars, psMetadata *recipe)
    226224{
    227     //make sure we want to plot this
    228     if (!pmVisualIsVisual() || !plotRefStars) return true;
    229 
    230     //set up plotting variables
    231     if (!pmVisualInitWindow (&kapa, "psastro:plots")) {
    232         return false;
    233     }
     225    if (!plotRefStars) return true;
     226    if (!pmVisualTestLevel("psastro.plot2", 1)) return true;
     227    if (!pmVisualInitWindow (&kapa1, "psastro:plots")) return false;
    234228
    235229    Graphdata graphdata;
    236230    KapaInitGraph (&graphdata);
    237     KapaClearSections (kapa);
     231    KapaClearSections (kapa1);
    238232
    239233    graphdata.color = KapaColorByName ("black");
     
    242236    graphdata.style = 2;
    243237
    244     //initialize and populate plot vectors
     238    // initialize and populate plot vectors
    245239    bool status = false;
    246240    float rMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MIN");
     
    265259    xVec->n = yVec->n = zVec->n = n;
    266260
    267     KapaSendLabel (kapa, "RA", KAPA_LABEL_XM);
    268     KapaSendLabel (kapa, "Dec", KAPA_LABEL_YM);
    269     KapaSendLabel (kapa, "Reference Stars", KAPA_LABEL_XP);
    270     pmVisualTriplePlot(kapa, &graphdata, xVec, yVec, zVec, false);
     261    KapaSendLabel (kapa1, "RA", KAPA_LABEL_XM);
     262    KapaSendLabel (kapa1, "Dec", KAPA_LABEL_YM);
     263    KapaSendLabel (kapa1, "Reference Stars", KAPA_LABEL_XP);
     264    pmVisualTriplePlot(kapa1, &graphdata, xVec, yVec, zVec, false);
    271265
    272266    // flip x (East increase to left)
    273267    SWAP (graphdata.xmin, graphdata.xmax);
    274     KapaSetLimits (kapa, &graphdata);
     268    KapaSetLimits (kapa1, &graphdata);
    275269
    276270    // pause and wait for user input:
     
    290284                                          )
    291285{
    292 
    293     // make sure we want to plot this
    294     if ( !pmVisualIsVisual() || !plotLumFunc ) return true;
    295 
    296     //set up plotting variables
    297     if ( !pmVisualInitWindow (&kapa, "psastro:plots")){
    298         return false;
    299     }
     286    if (!plotLumFunc ) return true;
     287    if (!pmVisualTestLevel("psastro.plot3", 1)) return true;
     288    if (!pmVisualInitWindow (&kapa1, "psastro:plots")) return false;
     289
     290    int colorNone = KapaColorByName ("none"); // XXX probably should be 'none'
    300291
    301292    Graphdata graphdata;
    302     KapaSection section1 = {"s1", .1, .1, .85, .35};
    303     KapaSection section2 =  {"s2", .1, .5, .85, .35};
     293    KapaSection section1 = {"s1", 0.0, 0.0, 1.0, 0.5, colorNone};
     294    KapaSection section2 = {"s2", 0.0, 0.5, 1.0, 0.5, colorNone};
    304295    KapaSection section;
    305     if(rawFunc == NULL)
     296    if (rawFunc == NULL) {
    306297        section = section1;
    307     else
     298    } else {
    308299        section = section2;
    309     if (rawFunc == NULL)
    310         KapaClearPlots(kapa);
     300    }
     301
     302    if (rawFunc == NULL) KapaClearPlots(kapa1);
    311303    KapaInitGraph(&graphdata);
    312304
    313     //Determine Plot Limits
     305    // Determine Plot Limits
    314306    pmVisualScaleGraphdata(&graphdata, Mag, lnMag, false);
    315307
    316     //Make a line for the fit
     308    // Make a line for the fit
    317309    float x[2] = {graphdata.xmin, graphdata.xmax};
    318310    float y[2] = {lumFunc->offset + x[0] * lumFunc->slope,
    319311                 lumFunc->offset + x[1] * lumFunc->slope};
    320312
    321     //Plot Data
    322     KapaSetSection(kapa, &section);
    323     KapaSetLimits(kapa, &graphdata);
    324 
    325     KapaSetFont (kapa, "helvetica", 14);
    326     KapaBox (kapa, &graphdata);
    327     KapaSendLabel (kapa, "Magnitude", KAPA_LABEL_XM);
    328     KapaSendLabel (kapa, "Log(N)", KAPA_LABEL_YM);
     313    // Plot Data
     314    KapaSetSection(kapa1, &section);
     315    KapaSetLimits(kapa1, &graphdata);
     316
     317    KapaSetFont (kapa1, "helvetica", 14);
     318    KapaBox (kapa1, &graphdata);
     319    KapaSendLabel (kapa1, "Magnitude", KAPA_LABEL_XM);
     320    KapaSendLabel (kapa1, "Log(N)", KAPA_LABEL_YM);
    329321    if (rawFunc == NULL)
    330         KapaSendLabel (kapa, "Raw Star Luminosity Function", KAPA_LABEL_XP);
     322        KapaSendLabel (kapa1, "Raw Star Luminosity Function", KAPA_LABEL_XP);
    331323    else
    332         KapaSendLabel (kapa,
     324        KapaSendLabel (kapa1,
    333325                       "Reference Star Luminosity Function, Shifted Raw Fit, and Cutoff",
    334326                       KAPA_LABEL_XP);
    335327    graphdata.color=KapaColorByName("black");
    336328    graphdata.style = 1;
    337     KapaPrepPlot (kapa, lnMag->n, &graphdata);
    338     KapaPlotVector(kapa, lnMag->n,   Mag->data.F32, "x");
    339     KapaPlotVector(kapa, lnMag->n, lnMag->data.F32, "y");
    340 
    341     //Overplot fit
     329    KapaPrepPlot (kapa1, lnMag->n, &graphdata);
     330    KapaPlotVector(kapa1, lnMag->n,   Mag->data.F32, "x");
     331    KapaPlotVector(kapa1, lnMag->n, lnMag->data.F32, "y");
     332
     333    // Overplot fit
    342334    graphdata.style=0;
    343     KapaPrepPlot(kapa,2,&graphdata);
    344     KapaPlotVector(kapa, 2, x, "x");
    345     KapaPlotVector(kapa, 2, y, "y");
    346 
    347     //If rawFunc was supplied, overplot the raw star fit + cutoff
     335    KapaPrepPlot(kapa1,2,&graphdata);
     336    KapaPlotVector(kapa1, 2, x, "x");
     337    KapaPlotVector(kapa1, 2, y, "y");
     338
     339    // If rawFunc was supplied, overplot the raw star fit + cutoff
    348340    if( rawFunc != NULL) {
    349341        double mRef = 0.5*(lumFunc->mMin + lumFunc->mMax);
     
    359351        float y[2] = {graphdata.ymin, graphdata.ymax};
    360352        graphdata.color= KapaColorByName("red");
    361         KapaPrepPlot(kapa, 2, &graphdata);
    362         KapaPlotVector(kapa, 2, x, "x");
    363         KapaPlotVector(kapa, 2, y, "y");
    364         KapaPrepPlot (kapa, 2, &graphdata);
    365         KapaPlotVector (kapa, 2, xraw, "x");
    366         KapaPlotVector (kapa, 2, yraw, "y");
     353        KapaPrepPlot(kapa1, 2, &graphdata);
     354        KapaPlotVector(kapa1, 2, x, "x");
     355        KapaPlotVector(kapa1, 2, y, "y");
     356        KapaPrepPlot (kapa1, 2, &graphdata);
     357        KapaPlotVector (kapa1, 2, xraw, "x");
     358        KapaPlotVector (kapa1, 2, yraw, "y");
    367359
    368360        // pause and wait for user input:
     
    379371                                    )
    380372{
    381 
    382     //make sure we want to plot this
    383     if (!pmVisualIsVisual() || !plotRemoveClumps) return true;
    384 
    385     //set up plot variables
    386     if ( !pmVisualInitWindow (&kapa, "psastro:plots")) {
    387         return false;
    388     }
     373    if (!plotRemoveClumps) return true;
     374    if (!pmVisualTestLevel("psastro.plot4", 1)) return true;
     375    if (!pmVisualInitWindow (&kapa1, "psastro:plots")) return false;
    389376
    390377    KapaSection section;
    391378    Graphdata graphdata;
    392     section.x = 0;
    393     section.dx = .9;
    394     section.y = 0;
    395     section.dy = .9;
     379
     380    KapaClearSections (kapa1);
     381    KapaInitGraph(&graphdata);
     382    section.bg = KapaColorByName ("none"); // XXX probably should be 'none'
     383
     384    section.x = 0.0;
     385    section.dx = 1;
     386    section.y = 0.0;
     387    section.dy = 1.0;
    396388    section.name = NULL;
    397389    psStringAppend( &section.name, "a0");
    398     KapaInitGraph(&graphdata);
    399     KapaSetSection(kapa, &section);
     390    KapaSetSection(kapa1, &section);
    400391    psFree(section.name);
    401392
     
    404395    graphdata.style = 2;
    405396    graphdata.color = KapaColorByName ("black");
    406     KapaClearPlots(kapa);
    407 
    408     //set up plot vectors
     397    KapaClearPlots(kapa1);
     398
     399    // set up plot vectors
    409400    float Xmin = +FLT_MAX;
    410401    float Xmax = -FLT_MAX;
     
    414405    psVector *yVec = psVectorAlloc (input->n, PS_TYPE_F32);
    415406
    416     //determine boundaries for histogram bin calculation
     407    // determine boundaries for histogram bin calculation
    417408    int n = 0;
    418409    for (int i=0; i< input->n; i++) {
     
    430421    xVec->n = yVec->n = n;
    431422
    432     //plot stars
     423    // plot stars
    433424    graphdata.xmax = Xmax;
    434425    graphdata.xmin = Xmin;
    435426    graphdata.ymax = Ymax;
    436427    graphdata.ymin = Ymin;
    437     KapaSetLimits (kapa, &graphdata);
    438     KapaSetFont (kapa, "helvetica", 14);
    439 
    440     KapaBox (kapa, &graphdata);
    441 
    442     KapaSendLabel (kapa, "L (pixels)", KAPA_LABEL_XM);
    443     KapaSendLabel (kapa, "M (pixels)", KAPA_LABEL_YM);
    444     KapaSendLabel (kapa, "Regions Flagged as Clumps (Red Boxes)",
     428    KapaSetLimits (kapa1, &graphdata);
     429    KapaSetFont (kapa1, "helvetica", 14);
     430
     431    KapaBox (kapa1, &graphdata);
     432
     433    KapaSendLabel (kapa1, "L (pixels)", KAPA_LABEL_XM);
     434    KapaSendLabel (kapa1, "M (pixels)", KAPA_LABEL_YM);
     435    KapaSendLabel (kapa1, "Regions Flagged as Clumps (Red Boxes)",
    445436                   KAPA_LABEL_XP);
    446437
    447     KapaPrepPlot (kapa, xVec->n, &graphdata);
    448     KapaPlotVector (kapa, xVec->n, xVec->data.F32, "x");
    449     KapaPlotVector (kapa, yVec->n, yVec->data.F32, "y");
     438    KapaPrepPlot (kapa1, xVec->n, &graphdata);
     439    KapaPlotVector (kapa1, xVec->n, xVec->data.F32, "x");
     440    KapaPlotVector (kapa1, yVec->n, yVec->data.F32, "y");
    450441
    451442    graphdata.color = KapaColorByName ("red");
    452443    graphdata.style = 0;
    453444
    454     //overplot clumpy regions excluded from analysis
    455     for(int i = 0; i < count->numCols; i++) {
     445    // overplot clumpy regions excluded from analysis
     446    for (int i = 0; i < count->numCols; i++) {
    456447        for (int j = 0; j < count->numRows; j++) {
    457             if(count->data.U32[j][i] <= limit) continue; //not a clump
     448            if(count->data.U32[j][i] <= limit) continue; // not a clump
    458449            float Xbot = (i - 5) * scale + Xmin;
    459450            float Ybot = (j - 5) * scale + Ymin;
     
    462453            float x[5] = {Xbot, Xbot + scale, Xbot + scale, Xbot, Xbot};
    463454            float y[5] = {Ybot, Ybot, Ybot + scale, Ybot + scale, Ybot};
    464             KapaPrepPlot (kapa, 5, &graphdata);
    465             KapaPlotVector (kapa, 5, x, "x");
    466             KapaPlotVector (kapa, 5, y, "y");
     455            KapaPrepPlot (kapa1, 5, &graphdata);
     456            KapaPlotVector (kapa1, 5, x, "x");
     457            KapaPlotVector (kapa1, 5, y, "y");
    467458        }
    468459    }
    469460
    470     //ask for user input and finish
     461    // ask for user input and finish
    471462    pmVisualAskUser (&plotRemoveClumps);
    472463    psFree (xVec);
     
    483474                                  )
    484475{
    485 
    486     //make sure we want to plot this
    487     if (!pmVisualIsVisual() || !plotOneChipFit)
    488         return true;
    489 
    490     if(!pmVisualInitWindow(&kapa, "psastro:plots") || !pmVisualInitWindow(&kapa2, "psastro:plots")) {
    491         return false;
    492     }
    493 
    494     //plot the residuals
     476    if (!plotOneChipFit) return true;
     477    if (!pmVisualTestLevel("psastro.plot5", 1)) return true;
     478    if (!pmVisualInitWindow(&kapa1, "psastro:plot1")) return false;
     479    if (!pmVisualInitWindow(&kapa2, "psastro:plot2")) return false;
     480    if (!pmVisualInitWindow(&kapa3, "psastro:plot3")) return false;
     481
     482    // plot the residuals
    495483    if (!residPlot(rawstars, refstars, match, recipe, "Single Chip Fit Residuals (Chip Coordinates)")) {
    496484        plotOneChipFit = false;
     
    498486    }
    499487
    500     //ask for user input and finish
     488    // ask for user input and finish
    501489    pmVisualAskUser(&plotOneChipFit);
    502490    return true;
     
    509497                                )
    510498{
    511     //make sure we want to plot this
    512     if(!pmVisualIsVisual() || !plotFixChips) return true;
    513 
    514     if(!pmVisualInitWindow(&kapa, "psastro:plots")) {
    515         return false;
    516     }
    517 
    518     KapaSection section = {"s1", .05, .05, .9, .9};
     499    if (!plotFixChips) return true;
     500    if (!pmVisualTestLevel("psastro.plot6", 1)) return true;
     501    if (!pmVisualInitWindow(&kapa1, "psastro:plots")) return false;
     502
     503    int colorNone = KapaColorByName ("none"); // XXX probably should be 'none'
     504
     505    KapaSection section = {"s1", 0.0, 0.0, 1.0, 1.0, colorNone};
    519506    Graphdata graphdata;
    520     KapaInitGraph( &graphdata);
    521     KapaClearPlots (kapa);
     507    KapaInitGraph (&graphdata);
     508    KapaClearPlots (kapa1);
    522509    graphdata.ptype = 2;
    523510    graphdata.style = 2;
     
    559546    }
    560547
    561     //set up graph
     548    // set up graph
    562549    pmVisualScaleGraphdata(&graphdata, xOld, yOld, true);
    563     pmVisualInitGraph(kapa, &section, &graphdata);
    564     KapaSendLabel (kapa, "L (FP)", KAPA_LABEL_XM);
    565     KapaSendLabel (kapa, "M (FP)", KAPA_LABEL_YM);
    566     KapaSendLabel (kapa, "Chip corners before (black) and after (red) FixChips", KAPA_LABEL_XP);
    567     KapaPrepPlot (kapa, xOld->n, &graphdata);
    568     KapaPlotVector (kapa, xOld->n, xOld->data.F32, "x");
    569     KapaPlotVector (kapa, xOld->n, yOld->data.F32, "y");
     550    pmVisualInitGraph(kapa1, &section, &graphdata);
     551    KapaSendLabel (kapa1, "L (FP)", KAPA_LABEL_XM);
     552    KapaSendLabel (kapa1, "M (FP)", KAPA_LABEL_YM);
     553    KapaSendLabel (kapa1, "Chip corners before (black) and after (red) FixChips", KAPA_LABEL_XP);
     554    KapaPrepPlot (kapa1, xOld->n, &graphdata);
     555    KapaPlotVector (kapa1, xOld->n, xOld->data.F32, "x");
     556    KapaPlotVector (kapa1, xOld->n, yOld->data.F32, "y");
    570557
    571558    graphdata.ptype = 1;
    572559    graphdata.color = KapaColorByName("red");
    573     KapaPrepPlot (kapa, xNew->n, &graphdata);
    574     KapaPlotVector (kapa, xNew->n, xNew->data.F32, "x");
    575     KapaPlotVector (kapa, xNew->n, yNew->data.F32, "y");
     560    KapaPrepPlot (kapa1, xNew->n, &graphdata);
     561    KapaPlotVector (kapa1, xNew->n, xNew->data.F32, "x");
     562    KapaPlotVector (kapa1, xNew->n, yNew->data.F32, "y");
    576563
    577564    pmVisualAskUser(&plotFixChips);
     
    591578                                        )
    592579{
    593 
    594     //make sure we want to plot this
    595     if (!pmVisualIsVisual() || !plotAstromGuessCheck) return true;
    596 
    597     //set up graph window
    598     if ( !pmVisualInitWindow (&kapa, "psastro:plots")) {
    599         return false;
    600     }
     580    if (!plotAstromGuessCheck) return true;
     581    if (!pmVisualTestLevel("psastro.plot7", 1)) return true;
     582    if (!pmVisualInitWindow (&kapa1, "psastro:plots")) return false;
    601583
    602584    Graphdata graphdata;
    603585    KapaSection section;
    604     KapaInitGraph(&graphdata);
    605     KapaClearPlots (kapa);
     586    KapaInitGraph (&graphdata);
     587    KapaClearPlots (kapa1);
     588
     589    section.bg = KapaColorByName ("none"); // XXX probably should be 'none'
    606590
    607591    graphdata.color = KapaColorByName ("black");
     
    613597    section.dy = 0.4;
    614598
    615     //Old Corners
     599    // Old Corners
    616600    section.x = 0.30;
    617601    section.y = 0.50;
    618602    section.name = NULL;
    619603    psStringAppend (&section.name, "a0");
    620     KapaSetSection (kapa, &section);
     604    KapaSetSection (kapa1, &section);
    621605    psFree(section.name);
    622606
    623607    pmVisualScaleGraphdata (&graphdata, cornerPo, cornerPo, true);
    624     KapaSetLimits (kapa, &graphdata);
    625     KapaBox (kapa, &graphdata);
    626     KapaSendLabel (kapa, "P (Pixels)", KAPA_LABEL_XM);
    627     KapaSendLabel (kapa, "Q (Pixels)", KAPA_LABEL_YM);
    628     KapaSendLabel (kapa,
     608    KapaSetLimits (kapa1, &graphdata);
     609    KapaBox (kapa1, &graphdata);
     610    KapaSendLabel (kapa1, "P (Pixels)", KAPA_LABEL_XM);
     611    KapaSendLabel (kapa1, "Q (Pixels)", KAPA_LABEL_YM);
     612    KapaSendLabel (kapa1,
    629613                   "Fiducial Points in the Tangent Plane. Black: Initial Astrometry. Red: Final Astrometry",
    630614                   KAPA_LABEL_XP);
    631     KapaPrepPlot (kapa, cornerPo->n, &graphdata);
    632     KapaPlotVector (kapa, cornerPo->n, cornerPo->data.F32, "x");
    633     KapaPlotVector (kapa, cornerQo->n, cornerQo->data.F32, "y");
     615    KapaPrepPlot (kapa1, cornerPo->n, &graphdata);
     616    KapaPlotVector (kapa1, cornerPo->n, cornerPo->data.F32, "x");
     617    KapaPlotVector (kapa1, cornerQo->n, cornerQo->data.F32, "y");
    634618
    635619    // New Corners
     
    637621    graphdata.ptype = 7;
    638622    graphdata.size = 1.5;
    639     KapaPrepPlot (kapa, cornerPn->n, &graphdata);
    640     KapaPlotVector (kapa, cornerPn->n, cornerPn->data.F32, "x");
    641     KapaPlotVector (kapa, cornerQn->n, cornerQn->data.F32, "y");
     623    KapaPrepPlot (kapa1, cornerPn->n, &graphdata);
     624    KapaPlotVector (kapa1, cornerPn->n, cornerPn->data.F32, "x");
     625    KapaPlotVector (kapa1, cornerQn->n, cornerQn->data.F32, "y");
    642626
    643627    // Residuals
     
    655639    section.name = NULL;
    656640    psStringAppend (&section.name, "a1");
    657     KapaSetSection (kapa, &section);
     641    KapaSetSection (kapa1, &section);
    658642    psFree(section.name);
    659643
    660644    pmVisualScaleGraphdata (&graphdata, xResid, yResid, true);
    661     KapaSetLimits (kapa, &graphdata);
    662     KapaBox (kapa, &graphdata);
    663     KapaSendLabel (kapa, "dP", KAPA_LABEL_XM);
    664     KapaSendLabel (kapa, "dQ", KAPA_LABEL_YM);
    665     KapaSendLabel (kapa,
     645    KapaSetLimits (kapa1, &graphdata);
     646    KapaBox (kapa1, &graphdata);
     647    KapaSendLabel (kapa1, "dP", KAPA_LABEL_XM);
     648    KapaSendLabel (kapa1, "dQ", KAPA_LABEL_YM);
     649    KapaSendLabel (kapa1,
    666650                   "Residual of the Fit from the Initial Astrometry to the Final Astrometry",
    667651                   KAPA_LABEL_XP);
    668     KapaPrepPlot (kapa, cornerPd->n, &graphdata);
    669     KapaPlotVector (kapa, cornerPd->n, xResid->data.F32, "x");
    670     KapaPlotVector (kapa, cornerQd->n, yResid->data.F32, "y");
     652    KapaPrepPlot (kapa1, cornerPd->n, &graphdata);
     653    KapaPlotVector (kapa1, cornerPd->n, xResid->data.F32, "x");
     654    KapaPlotVector (kapa1, cornerQd->n, yResid->data.F32, "y");
    671655
    672656    psFree(xResid);
     
    681665                                   )
    682666{
    683     //make sure we want to plot this
    684     if (!pmVisualIsVisual() || !plotCommonScale) return true;
    685 
    686     if (!pmVisualInitWindow(&kapa, "psastro:plots")){
    687         return false;
    688     }
    689 
    690     KapaSection section = {"s1", .05, .05, .9, .9};
     667    if (!plotCommonScale) return true;
     668    if (!pmVisualTestLevel("psastro.plot8", 1)) return true;
     669    if (!pmVisualInitWindow(&kapa1, "psastro:plots")) return false;
     670
     671    int colorNone = KapaColorByName ("none");
     672    KapaSection section = {"s1", 0.0, 0.0, 1.0, 1.0, colorNone};
    691673    Graphdata graphdata;
     674
    692675    psPlane ptCH, ptFP;
    693676    ptCH.x = 0;
     
    698681    int nobj = 0;
    699682
    700     //project each chip corner to the Focal Plane
     683    // project each chip corner to the Focal Plane
    701684    for(int i = 0; i < fpa->chips->n; i++) {
    702685        pmChip *chip = fpa->chips->data[i];
     
    711694    }
    712695
    713     //set up plot window
     696    // set up plot window
    714697    KapaInitGraph (&graphdata);
    715     KapaClearPlots (kapa);
    716     KapaSetSection (kapa, &section);
    717     KapaSetFont (kapa, "helvetica", 14);
    718     pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, oldScale, false);
    719     KapaSendLabel (kapa, "L (FP)", KAPA_LABEL_XM);
    720     KapaSendLabel (kapa, "M (FP)", KAPA_LABEL_YM);
    721     KapaSendLabel (kapa, "Old Pixel Scale of FPA Chips (Not to Scale)", KAPA_LABEL_XP);
     698    KapaClearPlots (kapa1);
     699    KapaSetSection (kapa1, &section);
     700    KapaSetFont (kapa1, "helvetica", 14);
     701    pmVisualTriplePlot (kapa1, &graphdata, xVec, yVec, oldScale, false);
     702    KapaSendLabel (kapa1, "L (FP)", KAPA_LABEL_XM);
     703    KapaSendLabel (kapa1, "M (FP)", KAPA_LABEL_YM);
     704    KapaSendLabel (kapa1, "Old Pixel Scale of FPA Chips (Not to Scale)", KAPA_LABEL_XP);
    722705
    723706    pmVisualAskUser (&plotCommonScale);
     
    733716                                     psArray *match, psMetadata *recipe)
    734717{
    735 
    736     //make sure we want to plot this
    737     if (!pmVisualIsVisual() || !plotMosaicOneChip) return true;
    738 
    739     if(!pmVisualInitWindow(&kapa, "psastro:plots") || !pmVisualInitWindow(&kapa2, "psastro:plots")) {
    740         return false;
    741     }
    742 
    743     //plot the residuals
     718    if (!plotMosaicOneChip) return true;
     719    if (!pmVisualTestLevel("psastro.plot9", 1)) return true;
     720    if (!pmVisualInitWindow(&kapa1, "psastro:plot1")) return false;
     721    if (!pmVisualInitWindow(&kapa2, "psastro:plot2")) return false;
     722    if (!pmVisualInitWindow(&kapa3, "psastro:plot3")) return false;
     723
     724    // plot the residuals
    744725    if (!residPlot(rawstars, refstars, match, recipe, "Single Chip Fit Residuals - Mosaic Mode")) {
    745726        pmVisualSetVisual(false);
     
    747728    }
    748729
    749     //ask for user input and finish
     730    // ask for user input and finish
    750731    pmVisualAskUser(&plotMosaicOneChip);
    751732
     
    758739                                    psMetadata *recipe)
    759740{
    760     //make sure we want to plot this
    761     if (!pmVisualIsVisual() || !plotMosaicMatches) return true;
     741    if (!plotMosaicMatches) return true;
     742    if (!pmVisualTestLevel("psastro.plot10", 1)) return true;
     743    if (!pmVisualInitWindow(&kapa1, "psastro:plot1")) return false;
     744    if (!pmVisualInitWindow(&kapa2, "psastro:plot2")) return false;
     745    if (!pmVisualInitWindow(&kapa3, "psastro:plot3")) return false;
    762746
    763747    char title[60];
    764748    sprintf(title, "Matches found during psastroMosaicSetMatch iteration %d", iteration);
    765 
    766 
    767     if(!pmVisualInitWindow(&kapa, "psastro:plots") || !pmVisualInitWindow(&kapa2, "psastro:plots")) {
    768         return false;
    769     }
    770749
    771750    if (!residPlot(rawstars, refstars, match, recipe, title)){
     
    774753    }
    775754
    776     //ask for user input
     755    // ask for user input
    777756    pmVisualAskUser (&plotMosaicMatches);
    778757    return true;
     
    789768                                  double Offset)
    790769{
    791     //make sure we want to plot this
    792     if (!pmVisualIsVisual() || !plotGridMatch) return true;
    793     if (!pmVisualInitWindow(&kapa, "psastro:plots")){
    794         return false;
    795     }
    796 
    797     KapaSection section = {"s1", 0.05, 0.05, .75, .75};
    798     KapaSection sectionY = {"s2", 0.8, 0.05, .15, .75};
    799     KapaSection sectionX = {"s3", .05, .8, .75, .15};
     770    if (!plotGridMatch) return true;
     771    if (!pmVisualTestLevel("psastro.plot11", 1)) return true;
     772    if (!pmVisualInitWindow(&kapa1, "psastro:plots")) return false;
     773
     774    int colorNone = KapaColorByName ("none");
     775    KapaSection section  = {"s1", 0.00, 0.00, 0.75, 0.75, colorNone};
     776    KapaSection sectionY = {"s2", 0.75, 0.00, 0.25, 0.75, colorNone};
     777    KapaSection sectionX = {"s3", 0.00, 0.75, 0.75, 0.25, colorNone};
    800778
    801779    Graphdata graphdata;
     
    818796
    819797    // set up plot information
    820     KapaClearPlots(kapa);
     798    KapaClearPlots(kapa1);
    821799    KapaInitGraph(&graphdata);
    822     KapaSetSection(kapa, &section);
     800    KapaSetSection(kapa1, &section);
    823801
    824802    graphdata.xmin = -1.0 * maxOffpix;
     
    826804    graphdata.ymin = -1.0 * maxOffpix;
    827805    graphdata.ymax =  1.0 * maxOffpix;
    828     KapaSetLimits(kapa, &graphdata);
    829 
    830     KapaSetFont(kapa, "helvetica", 14);
    831     KapaBox(kapa, &graphdata);
    832     KapaSendLabel (kapa, "X offset (FP)", KAPA_LABEL_XM);
    833     KapaSendLabel (kapa, "Y offset (FP)", KAPA_LABEL_YM);
    834     KapaSendLabel (kapa, "pmAstromGridAngle residuals. Box: Correlation Peak.",
     806    KapaSetLimits(kapa1, &graphdata);
     807
     808    KapaSetFont(kapa1, "helvetica", 14);
     809    KapaBox(kapa1, &graphdata);
     810    KapaSendLabel (kapa1, "X offset (FP)", KAPA_LABEL_XM);
     811    KapaSendLabel (kapa1, "Y offset (FP)", KAPA_LABEL_YM);
     812    KapaSendLabel (kapa1, "pmAstromGridAngle residuals. Box: Correlation Peak.",
    835813                   KAPA_LABEL_XP);
    836814    graphdata.style = 2;
     
    868846    }
    869847
    870     //Plot the offsets
    871     KapaPrepPlot(kapa, nplot, &graphdata);
    872     KapaPlotVector (kapa, nplot, dXplot->data.F32, "x");
    873     KapaPlotVector (kapa, nplot, dYplot->data.F32, "y");
    874 
    875     //Overplot bounding box, peak of distribution
     848    // Plot the offsets
     849    KapaPrepPlot(kapa1, nplot, &graphdata);
     850    KapaPlotVector (kapa1, nplot, dXplot->data.F32, "x");
     851    KapaPlotVector (kapa1, nplot, dYplot->data.F32, "y");
     852
     853    // Overplot bounding box, peak of distribution
    876854    float xbound[5] = { -maxOffpix, maxOffpix, maxOffpix, -maxOffpix, -maxOffpix};
    877855    float ybound[5] = { -maxOffpix, -maxOffpix, maxOffpix, maxOffpix, -maxOffpix};
     
    885863    graphdata.style = 0;
    886864    graphdata.size = 1.0;
    887     KapaPrepPlot(kapa, 5, &graphdata);
    888     KapaPlotVector (kapa, 5, xbound, "x");
    889     KapaPlotVector (kapa, 5, ybound, "y");
    890     KapaPrepPlot(kapa, 5, &graphdata);
    891     KapaPlotVector (kapa, 5, xbin, "x");
    892     KapaPlotVector (kapa, 5, ybin, "y");
    893 
    894     //plot X profile
    895     KapaSetSection(kapa, &sectionX);
     865    KapaPrepPlot(kapa1, 5, &graphdata);
     866    KapaPlotVector (kapa1, 5, xbound, "x");
     867    KapaPlotVector (kapa1, 5, ybound, "y");
     868    KapaPrepPlot(kapa1, 5, &graphdata);
     869    KapaPlotVector (kapa1, 5, xbin, "x");
     870    KapaPlotVector (kapa1, 5, ybin, "y");
     871
     872    // plot X profile
     873    KapaSetSection(kapa1, &sectionX);
    896874    graphdata.color = KapaColorByName("black");
    897875    graphdata.ptype = 1;
     
    899877    graphdata.ymin = 0;
    900878    graphdata.ymax = maxHorizontalSlice + 0.5;
    901     KapaSetLimits(kapa, &graphdata);
    902 
    903     KapaBox(kapa, &graphdata);
    904     KapaPrepPlot(kapa, gridNP->numCols, &graphdata);
    905     KapaPlotVector (kapa, gridNP->numCols, horizontalIndices, "x");
    906     KapaPlotVector (kapa, gridNP->numCols, horizHistSlice, "y");
     879    strcpy (graphdata.labels, "0200");
     880    KapaSetLimits(kapa1, &graphdata);
     881
     882    KapaBox(kapa1, &graphdata);
     883    KapaPrepPlot(kapa1, gridNP->numCols, &graphdata);
     884    KapaPlotVector (kapa1, gridNP->numCols, horizontalIndices, "x");
     885    KapaPlotVector (kapa1, gridNP->numCols, horizHistSlice, "y");
    907886
    908887    float xslice[2] = {offsetX - Scale / 2., offsetX - Scale / 2.};
     
    910889    graphdata.style = 0;
    911890    graphdata.color = KapaColorByName("red");
    912     KapaPrepPlot(kapa, 2, &graphdata);
    913     KapaPlotVector (kapa, 2, xslice, "x");
    914     KapaPlotVector (kapa, 2, yslice, "y");
    915 
    916     //plot Y profile
    917     KapaSetSection(kapa, &sectionY);
     891    KapaPrepPlot(kapa1, 2, &graphdata);
     892    KapaPlotVector (kapa1, 2, xslice, "x");
     893    KapaPlotVector (kapa1, 2, yslice, "y");
     894
     895    // plot Y profile
     896    KapaSetSection(kapa1, &sectionY);
    918897    graphdata.color = KapaColorByName("black");
    919898    graphdata.ptype = 1;
     
    923902    graphdata.xmin = -1.0 ;
    924903    graphdata.xmax = maxVerticalSlice + 0.5;
    925     KapaSetLimits(kapa, &graphdata);
    926 
    927     KapaBox(kapa, &graphdata);
    928     KapaPrepPlot(kapa, gridNP->numRows, &graphdata);
    929     KapaPlotVector (kapa, gridNP->numRows, vertHistSlice, "x");
    930     KapaPlotVector (kapa, gridNP->numRows, verticalIndices, "y");
     904    strcpy (graphdata.labels, "2000");
     905    KapaSetLimits(kapa1, &graphdata);
     906
     907    KapaBox(kapa1, &graphdata);
     908    KapaPrepPlot(kapa1, gridNP->numRows, &graphdata);
     909    KapaPlotVector (kapa1, gridNP->numRows, vertHistSlice, "x");
     910    KapaPlotVector (kapa1, gridNP->numRows, verticalIndices, "y");
    931911
    932912    yslice[0] = yslice[1] = offsetY - Scale / 2.;
     
    934914    graphdata.style = 0;
    935915    graphdata.color = KapaColorByName("red");
    936     KapaPrepPlot(kapa, 2, &graphdata);
    937     KapaPlotVector (kapa, 2, xslice, "x");
    938     KapaPlotVector (kapa, 2, yslice, "y");
     916    KapaPrepPlot(kapa1, 2, &graphdata);
     917    KapaPlotVector (kapa1, 2, xslice, "x");
     918    KapaPlotVector (kapa1, 2, yslice, "y");
    939919
    940920    pmVisualAskUser(&plotGridMatch);
     
    946926
    947927bool pmAstromVisualPlotGridMatchOverlay (const psArray *raw,
    948                                          const psArray *ref)
     928                                         const psArray *ref,
     929                                         const psPlane offset)
    949930{
    950     //make sure we want to plot this
    951     if (!pmVisualIsVisual() || !plotGridMatch) return true;
    952     if (!pmVisualInitWindow(&kapa2, "psastro:plots")){
    953         return false;
    954     }
     931    if (!plotGridMatch) return true;
     932    if (!pmVisualTestLevel("psastro.plot12", 1)) return true;
     933    if (!pmVisualInitWindow(&kapa2, "psastro:plots")) return false;
    955934
    956935    Graphdata graphdata;
     
    980959        graphdata.ymin = PS_MIN(graphdata.ymin, obj->FP->y);
    981960        graphdata.ymax = PS_MAX(graphdata.ymax, obj->FP->y);
    982         xPlot->data.F32[i] = obj->FP->x;
    983         yPlot->data.F32[i] = obj->FP->y;
     961        xPlot->data.F32[i] = obj->FP->x + offset.x;
     962        yPlot->data.F32[i] = obj->FP->y + offset.y;
    984963        zPlot->data.F32[i] = obj->Mag;
    985964    }
     
    999978    // the point size will be scaled from the z vector
    1000979    graphdata.style = 2;
    1001     graphdata.ptype = 7;
     980    graphdata.ptype = 2;
    1002981    graphdata.size = -1;
    1003982    graphdata.color = KapaColorByName ("black");
     
    10521031    )
    10531032{
    1054     //make sure we want to plot this
    1055     if (!pmVisualIsVisual() || !plotTweak) return true;
    1056     if (!pmVisualInitWindow(&kapa, "psastro:plots")) {
    1057         return false;
    1058     }
     1033    if (!plotTweak) return true;
     1034    if (!pmVisualTestLevel("psastro.plot13", 1)) return true;
     1035    if (!pmVisualInitWindow(&kapa1, "psastro:plots")) return false;
    10591036
    10601037    Graphdata graphdata;
    1061     KapaSection section1 = {"s1", 0.05, 0.05, 0.90, 0.4};
    1062     KapaSection section2 = {"s2", 0.05, 0.5, 0.90, 0.4};
     1038
     1039    int colorNone = KapaColorByName ("none"); // XXX probably should be 'none'
     1040    KapaSection section1 = {"s1", 0.0, 0.0, 1.0, 0.5, colorNone};
     1041    KapaSection section2 = {"s2", 0.0, 0.5, 1.0, 0.5, colorNone};
     1042    KapaSection section3 = {"s3", 0.0, 0.0, 1.0, 1.0, colorNone};
    10631043
    10641044    psVector *xIndices = psVectorAlloc (xHist->n, PS_TYPE_F32);
    10651045    psVector *yIndices = psVectorAlloc (yHist->n, PS_TYPE_F32);
    10661046
    1067     //populate the Indices vectors
     1047    // populate the Indices vectors
    10681048    for(int i = 0; i < xHist->n; i++) {
    10691049        xIndices->data.F32[i] = i;
     
    10741054
    10751055    // set up plot information
    1076     KapaClearPlots(kapa);
     1056    KapaClearPlots(kapa1);
    10771057    KapaInitGraph(&graphdata);
    10781058
    10791059    // plot the X histogram
    10801060    pmVisualScaleGraphdata(&graphdata, xIndices, xHist, false);
    1081     KapaSetSection(kapa, &section1);
    1082     KapaSetLimits (kapa, &graphdata);
    1083     KapaSetFont(kapa, "helvetica", 14);
    1084     KapaBox(kapa, &graphdata);
    1085     KapaSendLabel (kapa, "X offset Bin", KAPA_LABEL_XM);
    1086     KapaSendLabel (kapa, "Number of Sources", KAPA_LABEL_YM);
    1087     KapaSendLabel (kapa, "Horizontal Profile",
     1061    KapaSetSection(kapa1, &section1);
     1062    KapaSetLimits (kapa1, &graphdata);
     1063    KapaSetFont(kapa1, "helvetica", 14);
     1064    KapaBox(kapa1, &graphdata);
     1065    KapaSendLabel (kapa1, "X offset Bin", KAPA_LABEL_XM);
     1066    KapaSendLabel (kapa1, "Number of Sources", KAPA_LABEL_YM);
     1067    KapaSendLabel (kapa1, "Horizontal Profile",
    10881068                   KAPA_LABEL_XP);
    10891069    graphdata.style = 1;
     
    10921072    graphdata.color = KapaColorByName ("black");
    10931073
    1094     KapaPrepPlot (kapa, xHist->n, &graphdata);
    1095     KapaPlotVector (kapa, xHist->n, xIndices->data.F32, "x");
    1096     KapaPlotVector (kapa, xHist->n, xHist->data.F32, "y");
    1097 
    1098     //overplot the peak
     1074    KapaPrepPlot (kapa1, xHist->n, &graphdata);
     1075    KapaPlotVector (kapa1, xHist->n, xIndices->data.F32, "x");
     1076    KapaPlotVector (kapa1, xHist->n, xHist->data.F32, "y");
     1077
     1078    // overplot the peak
    10991079    float x[2] = {xBin, xBin};
    11001080    float y[2] = {-500, 500};
    11011081    graphdata.color = KapaColorByName ("red");
    1102     KapaPrepPlot (kapa, 2, &graphdata);
    1103     KapaPlotVector (kapa, 2, x, "x");
    1104     KapaPlotVector (kapa, 2, y, "y");
    1105 
    1106     //plot the Y histogram
     1082    KapaPrepPlot (kapa1, 2, &graphdata);
     1083    KapaPlotVector (kapa1, 2, x, "x");
     1084    KapaPlotVector (kapa1, 2, y, "y");
     1085
     1086    // plot the Y histogram
    11071087    pmVisualScaleGraphdata(&graphdata, yIndices, yHist, false);
    1108     KapaSetSection(kapa, &section2);
    1109     KapaSetLimits (kapa, &graphdata);
    1110     KapaSetFont(kapa, "helvetica", 14);
     1088    KapaSetSection(kapa1, &section2);
     1089    KapaSetLimits (kapa1, &graphdata);
     1090    KapaSetFont(kapa1, "helvetica", 14);
    11111091    graphdata.color = KapaColorByName ("black");
    1112     KapaBox(kapa, &graphdata);
    1113     KapaSendLabel (kapa, "Y offset Bin", KAPA_LABEL_XM);
    1114     KapaSendLabel (kapa, "Number of Sources", KAPA_LABEL_YM);
    1115     KapaSendLabel (kapa, "Vertical Profile",
     1092    KapaBox(kapa1, &graphdata);
     1093    KapaSendLabel (kapa1, "Y offset Bin", KAPA_LABEL_XM);
     1094    KapaSendLabel (kapa1, "Number of Sources", KAPA_LABEL_YM);
     1095    KapaSendLabel (kapa1, "Vertical Profile",
    11161096                   KAPA_LABEL_XP);
    11171097    graphdata.style = 1;
     
    11191099    graphdata.size = 0.4;
    11201100
    1121     KapaPrepPlot (kapa, yHist->n, &graphdata);
    1122     KapaPlotVector (kapa, yHist->n, yIndices->data.F32, "x");
    1123     KapaPlotVector (kapa, yHist->n, yHist->data.F32, "y");
    1124 
    1125     //overplot the peak
     1101    KapaPrepPlot (kapa1, yHist->n, &graphdata);
     1102    KapaPlotVector (kapa1, yHist->n, yIndices->data.F32, "x");
     1103    KapaPlotVector (kapa1, yHist->n, yHist->data.F32, "y");
     1104
     1105    // overplot the peak
    11261106    x[0] = x[1] = yBin;
    11271107    graphdata.color = KapaColorByName ("red");
    1128     KapaPrepPlot (kapa, 2, &graphdata);
    1129     KapaPlotVector (kapa, 2, x, "x");
    1130     KapaPlotVector (kapa, 2, y, "y");
    1131 
    1132     //plot title
     1108    KapaPrepPlot (kapa1, 2, &graphdata);
     1109    KapaPlotVector (kapa1, 2, x, "x");
     1110    KapaPlotVector (kapa1, 2, y, "y");
     1111
     1112    // plot title
    11331113    graphdata.color = KapaColorByName("black");
    1134     KapaSection section3 = {"s3", 0, 0, 1, 1};
    1135     KapaSetSection( kapa, &section3);
    1136     KapaSendLabel (kapa, "Tweaking the Astrometry Grid Solution. Smoothed profiles + peak location",
     1114
     1115    KapaSetSection( kapa1, &section3);
     1116    KapaSendLabel (kapa1, "Tweaking the Astrometry Grid Solution. Smoothed profiles + peak location",
    11371117                   KAPA_LABEL_XP);
    11381118
     
    11421122    psFree(yIndices);
    11431123    return true;
    1144 } //end of pmAstromPlotTweak
     1124} // end of pmAstromPlotTweak
    11451125
    11461126
     
    11491129
    11501130
    1151     //initialize graph information
     1131    // initialize graph information
    11521132    Graphdata graphdata;
    11531133    KapaSection section;
     1134    section.bg = KapaColorByName ("none"); // XXX probably should be 'none'
    11541135
    11551136    KapaInitGraph (&graphdata);
    1156     KapaClearPlots (kapa);
     1137    KapaClearPlots (kapa1);
    11571138
    11581139    graphdata.color = KapaColorByName ("black");
     
    11641145    section.dy = 0.4;
    11651146
    1166     //initialize and populate the plotting vectors
     1147    // initialize and populate the plotting vectors
    11671148    bool status = false;
    11681149    float iMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MIN");
     
    11801161    section.name = NULL;
    11811162    psStringAppend (&section.name, "a0");
    1182     KapaSetSection (kapa, &section);
     1163    KapaSetSection (kapa1, &section);
    11831164    psFree (section.name);
    11841165
     
    12021183    xVec->n = yVec->n = zVec->n = n;
    12031184
    1204     KapaSendLabel (kapa, "X", KAPA_LABEL_XM);
    1205     KapaSendLabel (kapa, "dX", KAPA_LABEL_YM);
    1206     pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, zVec, false);
     1185    KapaSendLabel (kapa1, "X", KAPA_LABEL_XM);
     1186    KapaSendLabel (kapa1, "dX", KAPA_LABEL_YM);
     1187    pmVisualTriplePlot (kapa1, &graphdata, xVec, yVec, zVec, false);
    12071188
    12081189    // X vs dY
     
    12111192    section.name = NULL;
    12121193    psStringAppend (&section.name, "a1");
    1213     KapaSetSection (kapa, &section);
     1194    KapaSetSection (kapa1, &section);
    12141195    psFree (section.name);
    12151196
     
    12331214    xVec->n = yVec->n = zVec->n = n;
    12341215
    1235     KapaSendLabel (kapa, "X", KAPA_LABEL_XM);
    1236     KapaSendLabel (kapa, "dY", KAPA_LABEL_YM);
    1237     pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, zVec, false);
     1216    KapaSendLabel (kapa1, "X", KAPA_LABEL_XM);
     1217    KapaSendLabel (kapa1, "dY", KAPA_LABEL_YM);
     1218    pmVisualTriplePlot (kapa1, &graphdata, xVec, yVec, zVec, false);
    12381219
    12391220    // Y vs dX
     
    12421223    section.name = NULL;
    12431224    psStringAppend (&section.name, "a2");
    1244     KapaSetSection (kapa, &section);
     1225    KapaSetSection (kapa1, &section);
    12451226    psFree (section.name);
    12461227
     
    12641245    xVec->n = yVec->n = zVec->n = n;
    12651246
    1266     KapaSendLabel (kapa, "Y", KAPA_LABEL_XM);
    1267     KapaSendLabel (kapa, "dX", KAPA_LABEL_YM);
    1268     pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, zVec, false);
     1247    KapaSendLabel (kapa1, "Y", KAPA_LABEL_XM);
     1248    KapaSendLabel (kapa1, "dX", KAPA_LABEL_YM);
     1249    pmVisualTriplePlot (kapa1, &graphdata, xVec, yVec, zVec, false);
    12691250
    12701251    // Y vs dY
     
    12731254    section.name = NULL;
    12741255    psStringAppend (&section.name, "a3");
    1275     KapaSetSection (kapa, &section);
     1256    KapaSetSection (kapa1, &section);
    12761257    psFree (section.name);
    12771258
     
    12951276    xVec->n = yVec->n = zVec->n = n;
    12961277
    1297     KapaSendLabel (kapa, "Y", KAPA_LABEL_XM);
    1298     KapaSendLabel (kapa, "dY", KAPA_LABEL_YM);
    1299     pmKapaPlotVectorTriple_AutoLimits_OpenGraph (kapa, &graphdata, xVec, yVec, zVec, false);
     1278    KapaSendLabel (kapa1, "Y", KAPA_LABEL_XM);
     1279    KapaSendLabel (kapa1, "dY", KAPA_LABEL_YM);
     1280    pmKapaPlotVectorTriple_AutoLimits_OpenGraph (kapa1, &graphdata, xVec, yVec, zVec, false);
     1281
     1282    psFree (xVec);
     1283    psFree (yVec);
     1284    psFree (zVec);
    13001285
    13011286    section.x = 0.0;
     
    13051290    section.name = NULL;
    13061291    psStringAppend (&section.name, "a5");
    1307     KapaSetSection (kapa, &section);
    1308     KapaSendLabel (kapa, title, KAPA_LABEL_XP);
     1292    KapaSetSection (kapa1, &section);
     1293    KapaSendLabel (kapa1, title, KAPA_LABEL_XP);
    13091294    psFree (section.name);
    13101295
    1311     //second window
     1296    // ***************************************
     1297    // second window
    13121298
    13131299    KapaInitGraph (&graphdata);
     
    13221308    graphdata.ptype = 7;
    13231309    graphdata.style = 2;
    1324 
    1325     psFree (xVec);
    1326     psFree (yVec);
    1327     psFree (zVec);
    13281310
    13291311    xVec = psVectorAlloc (refstars->n, PS_TYPE_F32);
     
    13461328    pmVisualTriplePlot (kapa2, &graphdata, xVec, yVec, zVec, false);
    13471329
    1348     //rescale the graph to include all points
     1330    // rescale the graph to include all points
    13491331    float xmin = graphdata.xmin;
    13501332    float ymin = graphdata.ymin;
     
    13581340    KapaSetLimits (kapa2, &graphdata);
    13591341
    1360     bool plotTweak;
    1361     pmVisualAskUser(&plotTweak);
     1342    // bool plotTweak;
     1343    // pmVisualAskUser(&plotTweak);
    13621344
    13631345    // X vs Y by mag (raw)
    13641346    graphdata.color = KapaColorByName ("black");
    1365     graphdata.ptype = 2;
     1347    graphdata.ptype = 7;
    13661348    graphdata.style = 2;
    13671349
     
    13891371    pmVisualTripleOverplot (kapa2, &graphdata, xVec, yVec, zVec, false);
    13901372
    1391     //overplot matched stars in blue
     1373    // overplot matched stars in blue
    13921374    psFree (xVec);
    13931375    psFree (yVec);
     
    13981380    zVec = psVectorAlloc (match->n, PS_TYPE_F32);
    13991381
     1382    graphdata.ptype = 2;
    14001383    graphdata.color = KapaColorByName ("blue");
    14011384    n = 0;
     
    14111394        xVec->data.F32[n] = raw->chip->x;
    14121395        yVec->data.F32[n] = raw->chip->y;
    1413         zVec->data.F32[n] = iMagMin;
     1396        zVec->data.F32[n] = raw->Mag;
    14141397        n++;
    14151398    }
    14161399    xVec->n = yVec->n = zVec->n = n;
     1400    fprintf (stderr, "plotting %d matched stars (raw = blue)\n", n);
    14171401    pmVisualTripleOverplot (kapa2, &graphdata, xVec, yVec, zVec, false);
     1402
     1403    if (0) {
     1404        graphdata.ptype = 3;
     1405        graphdata.color = KapaColorByName ("green");
     1406        n = 0;
     1407        for (int i = 0; i < match->n; i++) {
     1408            pmAstromMatch *pair = match->data[i];
     1409            pmAstromObj *raw = rawstars->data[pair->raw];
     1410            pmAstromObj *ref = refstars->data[pair->ref];
     1411            if (raw->Mag < iMagMin) continue;
     1412            if (raw->Mag > iMagMax) continue;
     1413            if (ref->Mag < rMagMin) continue;
     1414            if (ref->Mag > rMagMax) continue;
     1415
     1416            xVec->data.F32[n] = ref->chip->x;
     1417            yVec->data.F32[n] = ref->chip->y;
     1418            zVec->data.F32[n] = ref->Mag;
     1419            n++;
     1420        }
     1421        xVec->n = yVec->n = zVec->n = n;
     1422        fprintf (stderr, "plotting %d matched stars (ref = green)\n", n);
     1423        pmVisualTripleOverplot (kapa2, &graphdata, xVec, yVec, zVec, false);
     1424    }
    14181425
    14191426    psFree (xVec);
    14201427    psFree (yVec);
    14211428    psFree (zVec);
     1429
     1430    // ***************************************
     1431    // third window, pt1
     1432
     1433    xVec = psVectorAlloc (match->n, PS_TYPE_F32);
     1434    yVec = psVectorAlloc (match->n, PS_TYPE_F32);
     1435
     1436    KapaInitGraph (&graphdata);
     1437    KapaClearPlots (kapa3);
     1438
     1439    // X vs Y by mag (ref)
     1440    graphdata.color = KapaColorByName ("black");
     1441    graphdata.ptype = 2;
     1442    graphdata.style = 2;
     1443    graphdata.size = 1;
     1444
     1445    section.x  = 0.0;
     1446    section.y  = 0.0;
     1447    section.dx = 0.5;
     1448    section.dy = 0.5;
     1449    section.name = NULL;
     1450    psStringAppend (&section.name, "s1");
     1451    KapaSetSection (kapa3, &section);
     1452    psFree (section.name);
     1453
     1454    n = 0;
     1455    for (int i = 0; i < match->n; i++) {
     1456        pmAstromMatch *pair = match->data[i];
     1457        pmAstromObj *raw = rawstars->data[pair->raw];
     1458        pmAstromObj *ref = refstars->data[pair->ref];
     1459        if (raw->Mag < iMagMin) continue;
     1460        if (raw->Mag > iMagMax) continue;
     1461        if (ref->Mag < rMagMin) continue;
     1462        if (ref->Mag > rMagMax) continue;
     1463
     1464        xVec->data.F32[n] = raw->Mag;
     1465        yVec->data.F32[n] = raw->chip->y - ref->chip->y;
     1466        n++;
     1467    }
     1468    xVec->n = yVec->n = n;
     1469
     1470    // rescale the graph to include all points
     1471    pmVisualScaleGraphdata(&graphdata, xVec, yVec, true);
     1472    KapaSetLimits (kapa3, &graphdata);
     1473    KapaBox (kapa3, &graphdata);
     1474    KapaSendLabel(kapa1, "raw mag", KAPA_LABEL_XM);
     1475    KapaSendLabel(kapa1, "dY", KAPA_LABEL_YM);
     1476
     1477    KapaPrepPlot (kapa3, xVec->n, &graphdata);
     1478    KapaPlotVector (kapa3, xVec->n, xVec->data.F32, "x");
     1479    KapaPlotVector (kapa3, yVec->n, yVec->data.F32, "y");
     1480
     1481    // ***************************************
     1482    // third window, pt2
     1483
     1484    section.x  = 0.5;
     1485    section.y  = 0.0;
     1486    section.dx = 0.5;
     1487    section.dy = 0.5;
     1488    section.name = NULL;
     1489    psStringAppend (&section.name, "s2");
     1490    KapaSetSection (kapa3, &section);
     1491    psFree (section.name);
     1492
     1493    n = 0;
     1494    for (int i = 0; i < match->n; i++) {
     1495        pmAstromMatch *pair = match->data[i];
     1496        pmAstromObj *raw = rawstars->data[pair->raw];
     1497        pmAstromObj *ref = refstars->data[pair->ref];
     1498        if (raw->Mag < iMagMin) continue;
     1499        if (raw->Mag > iMagMax) continue;
     1500        if (ref->Mag < rMagMin) continue;
     1501        if (ref->Mag > rMagMax) continue;
     1502
     1503        xVec->data.F32[n] = ref->Mag;
     1504        yVec->data.F32[n] = raw->chip->y - ref->chip->y;
     1505        n++;
     1506    }
     1507    xVec->n = yVec->n = n;
     1508
     1509    // rescale the graph to include all points
     1510    pmVisualScaleGraphdata(&graphdata, xVec, yVec, true);
     1511    KapaSetLimits (kapa3, &graphdata);
     1512    KapaBox (kapa3, &graphdata);
     1513    KapaSendLabel(kapa1, "ref mag", KAPA_LABEL_XM);
     1514    KapaSendLabel(kapa1, "dY", KAPA_LABEL_YM);
     1515
     1516    KapaPrepPlot (kapa3, xVec->n, &graphdata);
     1517    KapaPlotVector (kapa3, xVec->n, xVec->data.F32, "x");
     1518    KapaPlotVector (kapa3, yVec->n, yVec->data.F32, "y");
     1519
     1520    // ***************************************
     1521    // third window, pt3
     1522
     1523    section.x  = 0.0;
     1524    section.y  = 0.5;
     1525    section.dx = 0.5;
     1526    section.dy = 0.5;
     1527    section.name = NULL;
     1528    psStringAppend (&section.name, "s3");
     1529    KapaSetSection (kapa3, &section);
     1530    psFree (section.name);
     1531
     1532    n = 0;
     1533    for (int i = 0; i < match->n; i++) {
     1534        pmAstromMatch *pair = match->data[i];
     1535        pmAstromObj *raw = rawstars->data[pair->raw];
     1536        pmAstromObj *ref = refstars->data[pair->ref];
     1537        if (raw->Mag < iMagMin) continue;
     1538        if (raw->Mag > iMagMax) continue;
     1539        if (ref->Mag < rMagMin) continue;
     1540        if (ref->Mag > rMagMax) continue;
     1541
     1542        xVec->data.F32[n] = raw->Mag;
     1543        yVec->data.F32[n] = raw->chip->x - ref->chip->x;
     1544        n++;
     1545    }
     1546    xVec->n = yVec->n = n;
     1547
     1548    // rescale the graph to include all points
     1549    pmVisualScaleGraphdata(&graphdata, xVec, yVec, true);
     1550    KapaSetLimits (kapa3, &graphdata);
     1551    KapaBox (kapa3, &graphdata);
     1552    KapaSendLabel(kapa1, "raw mag", KAPA_LABEL_XM);
     1553    KapaSendLabel(kapa1, "dX", KAPA_LABEL_YM);
     1554
     1555    KapaPrepPlot (kapa3, xVec->n, &graphdata);
     1556    KapaPlotVector (kapa3, xVec->n, xVec->data.F32, "x");
     1557    KapaPlotVector (kapa3, yVec->n, yVec->data.F32, "y");
     1558
     1559    // ***************************************
     1560    // third window, pt4
     1561
     1562    section.x  = 0.5;
     1563    section.y  = 0.5;
     1564    section.dx = 0.5;
     1565    section.dy = 0.5;
     1566    section.name = NULL;
     1567    psStringAppend (&section.name, "s4");
     1568    KapaSetSection (kapa3, &section);
     1569    psFree (section.name);
     1570
     1571    n = 0;
     1572    for (int i = 0; i < match->n; i++) {
     1573        pmAstromMatch *pair = match->data[i];
     1574        pmAstromObj *raw = rawstars->data[pair->raw];
     1575        pmAstromObj *ref = refstars->data[pair->ref];
     1576        if (raw->Mag < iMagMin) continue;
     1577        if (raw->Mag > iMagMax) continue;
     1578        if (ref->Mag < rMagMin) continue;
     1579        if (ref->Mag > rMagMax) continue;
     1580
     1581        xVec->data.F32[n] = ref->Mag;
     1582        yVec->data.F32[n] = raw->chip->x - ref->chip->x;
     1583        n++;
     1584    }
     1585    xVec->n = yVec->n = n;
     1586
     1587    // rescale the graph to include all points
     1588    pmVisualScaleGraphdata(&graphdata, xVec, yVec, true);
     1589    KapaSetLimits (kapa3, &graphdata);
     1590    KapaBox (kapa3, &graphdata);
     1591    KapaSendLabel(kapa1, "ref mag", KAPA_LABEL_XM);
     1592    KapaSendLabel(kapa1, "dX", KAPA_LABEL_YM);
     1593
     1594    KapaPrepPlot (kapa3, xVec->n, &graphdata);
     1595    KapaPlotVector (kapa3, xVec->n, xVec->data.F32, "x");
     1596    KapaPlotVector (kapa3, yVec->n, yVec->data.F32, "y");
     1597
    14221598    return true;
    14231599}
  • branches/eam_branches/ipp-20110213/psModules/src/astrom/pmAstrometryVisual.h

    r26260 r31019  
    4747
    4848bool pmAstromVisualPlotGridMatchOverlay (const psArray *raw,
    49                                          const psArray *ref);
     49                                         const psArray *ref,
     50                                         const psPlane offset);
    5051
    5152/**
  • branches/eam_branches/ipp-20110213/psModules/src/extras/pmVisual.c

    r30623 r31019  
    1 /** The following are a collection of core procedures to aid the creation of visaual diagnostics
     1/** The following are a collection of core procedures to aid the creation of visual diagnostics
    22 *  @author Chris Beaumont, IfA
    33 *  @date January 23, 2008
     
    8080
    8181bool pmVisualInitWindow (int *kapid, char *name) {
     82
    8283    if (*kapid == -1) {
    8384        *kapid = KapaOpenNamedSocket("kapa", name);
    8485        if (*kapid == -1) {
    85             fprintf (stderr, "Failure to open kapa.\n");
    86             isVisual = false;
     86            fprintf (stderr, "Failure to open kapa; visual mode disabled.\n");
     87            pmVisualSetVisual(false);
    8788            return false;
    8889        }
     
    255256    }
    256257
     258    if (increasing) {
     259        fprintf (stderr, "plotting points scaled from %f to %f\n", zmin, zmax);
     260    } else {
     261        fprintf (stderr, "plotting points scaled from %f to %f\n", zmax, zmin);
     262    }
     263
    257264    float range = zmax - zmin;
    258265    if (range == 0.0) {
  • branches/eam_branches/ipp-20110213/psModules/src/extras/pmVisualUtils.c

    r29004 r31019  
    1616#include <pslib.h>
    1717
     18#include <pmVisual.h>
    1819#include <pmVisualUtils.h>
    1920
     
    8990    }
    9091
     92    // turn on overall visualization
     93    pmVisualSetVisual(true);
     94
    9195    // If the component name has no leading dot, then supply it.
    9296    if (comp[0] != '.') {
     
    145149    PS_ASSERT_STRING_NON_EMPTY(func, false);
    146150
    147    // return true if level is set to be shown
     151    // if visualization is turned off, just skip
     152    if (!pmVisualIsVisual()) return false;
     153
     154    // return true if level is set to be shown
    148155    FACILITY(facility, func, name);
     156
    149157    bool valid = level <= getLevel(facility);
    150158
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceVisual.c

    r29004 r31019  
    5656
    5757    if (!pmVisualTestLevel("psphot.psf.metric", 2)) return true;
    58 
    59     if (kapa1 == -1) {
    60         kapa1 = KapaOpenNamedSocket ("kapa", "pmSource:plots");
    61         if (kapa1 == -1) {
    62             fprintf (stderr, "failure to open kapa; visual mode disabled\n");
    63             pmVisualSetVisual(false);
    64             return false;
    65         }
    66     }
     58    if (!pmVisualInitWindow (&kapa1, "pmSource:plots")) return false;
    6759
    6860    KapaClearSections (kapa1);
     
    140132
    141133    if (!pmVisualTestLevel("psphot.psf.subpix", 3)) return true;
    142 
    143     if (kapa1 == -1) {
    144         kapa1 = KapaOpenNamedSocket ("kapa", "pmSource:plots");
    145         if (kapa1 == -1) {
    146             fprintf (stderr, "failure to open kapa; visual mode disabled\n");
    147             pmVisualSetVisual(false);
    148             return false;
    149         }
    150     }
     134    if (!pmVisualInitWindow (&kapa1, "pmSource:plots")) return false;
    151135
    152136    KapaClearSections (kapa1);
    153137    KapaInitGraph (&graphdata);
     138    section.bg = KapaColorByName ("none"); // XXX probably should be 'none'
    154139
    155140    int n;
     
    302287
    303288    if (!pmVisualTestLevel("psphot.psf.fits", 2)) return true;
    304 
    305     if (kapa2 == -1) {
    306         kapa2 = KapaOpenNamedSocket ("kapa", "pmSource:images");
    307         if (kapa2 == -1) {
    308             fprintf (stderr, "failure to open kapa; visual mode disabled\n");
    309             pmVisualSetVisual(false);
    310             return false;
    311         }
    312     }
     289    if (!pmVisualInitWindow (&kapa2, "pmSource:images")) return false;
    313290
    314291    // create images 1/10 scale:
     
    385362    if (!source->pixels) return false;
    386363    if (!source->modelFlux) return false;
    387 
    388     if (kapa2 == -1) {
    389         kapa2 = KapaOpenNamedSocket ("kapa", "pmSource:images");
    390         if (kapa2 == -1) {
    391             fprintf (stderr, "failure to open kapa; visual mode disabled\n");
    392             pmVisualSetVisual(false);
    393             return false;
    394         }
    395     }
     364    if (!pmVisualInitWindow (&kapa2, "pmSource:images")) return false;
    396365
    397366    // KapaClearSections (kapa2);
     
    428397    if (!plotPSF) return true;
    429398    if (!pmVisualTestLevel("psphot.psf.resid", 2)) return true;
    430 
    431     if (kapa1 == -1) {
    432         kapa1 = KapaOpenNamedSocket ("kapa", "pmSource:plots");
    433         if (kapa1 == -1) {
    434             fprintf (stderr, "failure to open kapa; visual mode disabled\n");
    435             pmVisualSetVisual(false);
    436             return false;
    437         }
    438     }
     399    if (!pmVisualInitWindow (&kapa1, "pmSource:plots")) return false;
    439400
    440401    KapaClearPlots (kapa1);
    441402    KapaInitGraph (&graphdata);
     403    section.bg = KapaColorByName ("none"); // XXX probably should be 'none'
    442404
    443405    float Xmin = +1e32;
Note: See TracChangeset for help on using the changeset viewer.