IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 3, 2010, 8:50:52 AM (16 years ago)
Author:
eugene
Message:

updates from trunk

Location:
branches/simtest_nebulous_branches
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/simtest_nebulous_branches

  • branches/simtest_nebulous_branches/psModules

  • branches/simtest_nebulous_branches/psModules/src/objects/pmSourceVisual.c

    r23242 r27840  
    55#include <pslib.h>
    66#include "pmTrend2D.h"
     7#include "pmPSF.h"
     8#include "pmPSFtry.h"
     9#include "pmSource.h"
    710#include "pmSourceVisual.h"
    811
     
    1518
    1619static int kapa1 = -1;
     20static int kapa2 = -1;
    1721static bool plotPSF = true;
    18 // static int kapa2 = -1;
    1922// static int kapa3 = -1;
    2023
     
    2730bool pmSourcePlotPoints3D (int myKapa, Graphdata *graphdata, psVector *xn, psVector *yn, psVector *zn, float theta, float phi);
    2831
    29 
    30 bool pmSourceVisualPSFModelResid (pmTrend2D *trend, psVector *x, psVector *y, psVector *param, psVector *mask) {
    31 
    32     KapaSection section;  // put the positive profile in one and the residuals in another?
     32bool pmSourceVisualPlotPSFMetric (pmPSFtry *psfTry) {
    3333
    3434    Graphdata graphdata;
    3535
    36     if (!pmVisualIsVisual() || !plotPSF) return true;
     36    if (!pmVisualIsVisual()) return true;
    3737
    3838    if (kapa1 == -1) {
     
    4545    }
    4646
    47     KapaClearPlots (kapa1);
     47    KapaClearSections (kapa1);
    4848    KapaInitGraph (&graphdata);
    4949
    50     float min = +1e32;
    51     float max = -1e32;
    52     float Min = +1e32;
    53     float Max = -1e32;
    54 
    55     psVector *resid = psVectorAlloc (x->n, PS_TYPE_F32);
    56     psVector *model = psVectorAlloc (x->n, PS_TYPE_F32);
    57 
    58     for (int i = 0; i < x->n; i++) {
    59         model->data.F32[i] = pmTrend2DEval (trend, x->data.F32[i], y->data.F32[i]);
    60         resid->data.F32[i] = param->data.F32[i] - model->data.F32[i];
    61         if (mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) continue;
    62         min = PS_MIN (min, resid->data.F32[i]);
    63         max = PS_MAX (max, resid->data.F32[i]);
    64         Min = PS_MIN (min, param->data.F32[i]);
    65         Max = PS_MAX (max, param->data.F32[i]);
    66     }
    67 
    68     psVector *xn = psVectorAlloc (x->n, PS_TYPE_F32);
    69     psVector *yn = psVectorAlloc (x->n, PS_TYPE_F32);
    70     psVector *zn = psVectorAlloc (x->n, PS_TYPE_F32);
    71     psVector *Zn = psVectorAlloc (x->n, PS_TYPE_F32);
    72     psVector *Fn = psVectorAlloc (x->n, PS_TYPE_F32);
    73     for (int i = 0; i < x->n; i++) {
    74         xn->data.F32[i] = x->data.F32[i] / 5000.0;
    75         yn->data.F32[i] = y->data.F32[i] / 5000.0;
    76         zn->data.F32[i] = (resid->data.F32[i] - min) / (max - min);
    77         Zn->data.F32[i] = (param->data.F32[i] - Min) / (Max - Min);
    78         Fn->data.F32[i] = (model->data.F32[i] - Min) / (Max - Min);
    79     }
    80 
    81     // view 1 on resid
    82     section.dx = 0.5;
    83     section.dy = 0.33;
     50    psVector *x = psVectorAllocEmpty (psfTry->sources->n, PS_TYPE_F32);
     51    psVector *y = psVectorAllocEmpty (psfTry->sources->n, PS_TYPE_F32);
     52    psVector *dy = psVectorAllocEmpty(psfTry->sources->n, PS_TYPE_F32);
     53
     54    graphdata.xmin = +32.0;
     55    graphdata.xmax = -32.0;
     56    graphdata.ymin = +32.0;
     57    graphdata.ymax = -32.0;
     58
     59    // construct the plot vectors
     60    int n = 0;
     61    for (int i = 0; i < psfTry->sources->n; i++) {
     62        if (psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PSFTRY_MASK_ALL) continue;
     63        x->data.F32[n] = psfTry->fitMag->data.F32[i];
     64        y->data.F32[n] = psfTry->metric->data.F32[i];
     65        dy->data.F32[n] = psfTry->metricErr->data.F32[i];
     66        graphdata.xmin = PS_MIN(graphdata.xmin, x->data.F32[n]);
     67        graphdata.xmax = PS_MAX(graphdata.xmax, x->data.F32[n]);
     68        graphdata.ymin = PS_MIN(graphdata.ymin, y->data.F32[n]);
     69        graphdata.ymax = PS_MAX(graphdata.ymax, y->data.F32[n]);
     70        n++;
     71    }
     72    x->n = y->n = dy->n = n;
     73
     74    float range;
     75    range = graphdata.xmax - graphdata.xmin;
     76    graphdata.xmax += 0.05*range;
     77    graphdata.xmin -= 0.05*range;
     78    range = graphdata.ymax - graphdata.ymin;
     79    graphdata.ymax += 0.05*range;
     80    graphdata.ymin -= 0.05*range;
     81
     82    // better choice for range?
     83    // graphdata.xmin = -17.0;
     84    // graphdata.xmax =  -9.0;
     85    graphdata.ymin = -0.51;
     86    graphdata.ymax = +0.51;
     87
     88    KapaSetLimits (kapa1, &graphdata);
     89
     90    KapaSetFont (kapa1, "helvetica", 14);
     91    KapaBox (kapa1, &graphdata);
     92    KapaSendLabel (kapa1, "PSF Mag", KAPA_LABEL_XM);
     93    KapaSendLabel (kapa1, "Ap Mag - PSF Mag", KAPA_LABEL_YM);
     94
     95    graphdata.color = KapaColorByName ("black");
     96    graphdata.ptype = 2;
     97    graphdata.size = 0.5;
     98    graphdata.style = 2;
     99    graphdata.etype |= 0x01;
     100
     101    KapaPrepPlot (kapa1, n, &graphdata);
     102    KapaPlotVector (kapa1, n, x->data.F32, "x");
     103    KapaPlotVector (kapa1, n, y->data.F32, "y");
     104    KapaPlotVector (kapa1, n, dy->data.F32, "dym");
     105    KapaPlotVector (kapa1, n, dy->data.F32, "dyp");
     106
     107    psFree (x);
     108    psFree (y);
     109    psFree (dy);
     110
     111    pmVisualAskUser(NULL);
     112    return true;
     113}
     114
     115bool pmSourceVisualPlotPSFMetricSubpix (pmPSFtry *psfTry) {
     116
     117    KapaSection section;  // put the positive profile in one and the residuals in another?
     118    Graphdata graphdata;
     119
     120    if (!pmVisualIsVisual()) return true;
     121
     122    if (kapa1 == -1) {
     123        kapa1 = KapaOpenNamedSocket ("kapa", "pmSource:plots");
     124        if (kapa1 == -1) {
     125            fprintf (stderr, "failure to open kapa; visual mode disabled\n");
     126            pmVisualSetVisual(false);
     127            return false;
     128        }
     129    }
     130
     131    KapaClearSections (kapa1);
     132    KapaInitGraph (&graphdata);
     133
     134    int n;
     135    float range;
     136    psVector *x = psVectorAllocEmpty (psfTry->sources->n, PS_TYPE_F32);
     137    psVector *y = psVectorAllocEmpty (psfTry->sources->n, PS_TYPE_F32);
     138    psVector *dy = psVectorAllocEmpty(psfTry->sources->n, PS_TYPE_F32);
     139
     140    // section a: fractional-x pixel
     141    section.dx = 1.0;
     142    section.dy = 0.5;
    84143    section.x = 0.0;
    85144    section.y = 0.0;
     
    88147    KapaSetSection (kapa1, &section);
    89148    psFree (section.name);
    90     pmSourcePlotPoints3D (kapa1, &graphdata, xn, yn, zn, 30.0*PS_RAD_DEG, -15.0*PS_RAD_DEG);
    91 
    92     // view 2 on resid
    93     section.dx = 0.5;
    94     section.dy = 0.33;
    95     section.x = 0.5;
    96     section.y = 0.0;
     149
     150    graphdata.xmin = +32.0;
     151    graphdata.xmax = -32.0;
     152    graphdata.ymin = +32.0;
     153    graphdata.ymax = -32.0;
     154
     155    // construct the plot vectors
     156    n = 0;
     157    for (int i = 0; i < psfTry->sources->n; i++) {
     158        if (psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PSFTRY_MASK_ALL) continue;
     159
     160        pmSource *source = psfTry->sources->data[i];
     161        x->data.F32[n] = source->modelEXT->params->data.F32[PM_PAR_XPOS] - (int)source->modelEXT->params->data.F32[PM_PAR_XPOS];
     162
     163        y->data.F32[n] = psfTry->metric->data.F32[i];
     164        dy->data.F32[n] = psfTry->metricErr->data.F32[i];
     165        graphdata.xmin = PS_MIN(graphdata.xmin, x->data.F32[n]);
     166        graphdata.xmax = PS_MAX(graphdata.xmax, x->data.F32[n]);
     167        graphdata.ymin = PS_MIN(graphdata.ymin, y->data.F32[n]);
     168        graphdata.ymax = PS_MAX(graphdata.ymax, y->data.F32[n]);
     169        n++;
     170    }
     171    x->n = y->n = dy->n = n;
     172
     173    range = graphdata.xmax - graphdata.xmin;
     174    graphdata.xmax += 0.05*range;
     175    graphdata.xmin -= 0.05*range;
     176    range = graphdata.ymax - graphdata.ymin;
     177    graphdata.ymax += 0.05*range;
     178    graphdata.ymin -= 0.05*range;
     179
     180    // better choice for range?
     181    // graphdata.xmin = -17.0;
     182    // graphdata.xmax =  -9.0;
     183    graphdata.ymin = -0.51;
     184    graphdata.ymax = +0.51;
     185
     186    KapaSetLimits (kapa1, &graphdata);
     187
     188    KapaSetFont (kapa1, "helvetica", 14);
     189    KapaBox (kapa1, &graphdata);
     190    KapaSendLabel (kapa1, "PSF Mag", KAPA_LABEL_XM);
     191    KapaSendLabel (kapa1, "Ap Mag - PSF Mag", KAPA_LABEL_YM);
     192
     193    graphdata.color = KapaColorByName ("black");
     194    graphdata.ptype = 2;
     195    graphdata.size = 0.5;
     196    graphdata.style = 2;
     197    graphdata.etype |= 0x01;
     198
     199    KapaPrepPlot (kapa1, n, &graphdata);
     200    KapaPlotVector (kapa1, n, x->data.F32, "x");
     201    KapaPlotVector (kapa1, n, y->data.F32, "y");
     202    KapaPlotVector (kapa1, n, dy->data.F32, "dym");
     203    KapaPlotVector (kapa1, n, dy->data.F32, "dyp");
     204
     205    // *** section b: fractional-x pixel
     206    section.dx = 1.0;
     207    section.dy = 0.5;
     208    section.x = 0.0;
     209    section.y = 0.5;
    97210    section.name = NULL;
    98211    psStringAppend (&section.name, "a2");
    99212    KapaSetSection (kapa1, &section);
    100213    psFree (section.name);
    101     pmSourcePlotPoints3D (kapa1, &graphdata, xn, yn, zn, -60.0*PS_RAD_DEG, -15.0*PS_RAD_DEG);
    102 
    103     // view 3 on resid
    104     section.dx = 0.5;
    105     section.dy = 0.33;
     214
     215    graphdata.xmin = +32.0;
     216    graphdata.xmax = -32.0;
     217    graphdata.ymin = +32.0;
     218    graphdata.ymax = -32.0;
     219
     220    // construct the plot vectors
     221    n = 0;
     222    for (int i = 0; i < psfTry->sources->n; i++) {
     223        if (psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PSFTRY_MASK_ALL) continue;
     224
     225        pmSource *source = psfTry->sources->data[i];
     226        x->data.F32[n] = source->modelEXT->params->data.F32[PM_PAR_YPOS] - (int)source->modelEXT->params->data.F32[PM_PAR_YPOS];
     227
     228        y->data.F32[n] = psfTry->metric->data.F32[i];
     229        dy->data.F32[n] = psfTry->metricErr->data.F32[i];
     230        graphdata.xmin = PS_MIN(graphdata.xmin, x->data.F32[n]);
     231        graphdata.xmax = PS_MAX(graphdata.xmax, x->data.F32[n]);
     232        graphdata.ymin = PS_MIN(graphdata.ymin, y->data.F32[n]);
     233        graphdata.ymax = PS_MAX(graphdata.ymax, y->data.F32[n]);
     234        n++;
     235    }
     236    x->n = y->n = dy->n = n;
     237
     238    range = graphdata.xmax - graphdata.xmin;
     239    graphdata.xmax += 0.05*range;
     240    graphdata.xmin -= 0.05*range;
     241    range = graphdata.ymax - graphdata.ymin;
     242    graphdata.ymax += 0.05*range;
     243    graphdata.ymin -= 0.05*range;
     244
     245    // better choice for range?
     246    // graphdata.xmin = -17.0;
     247    // graphdata.xmax =  -9.0;
     248    graphdata.ymin = -0.51;
     249    graphdata.ymax = +0.51;
     250
     251    KapaSetLimits (kapa1, &graphdata);
     252
     253    KapaSetFont (kapa1, "helvetica", 14);
     254    KapaBox (kapa1, &graphdata);
     255    KapaSendLabel (kapa1, "PSF Mag", KAPA_LABEL_XM);
     256    KapaSendLabel (kapa1, "Ap Mag - PSF Mag", KAPA_LABEL_YM);
     257
     258    graphdata.color = KapaColorByName ("black");
     259    graphdata.ptype = 2;
     260    graphdata.size = 0.5;
     261    graphdata.style = 2;
     262    graphdata.etype |= 0x01;
     263
     264    KapaPrepPlot (kapa1, n, &graphdata);
     265    KapaPlotVector (kapa1, n, x->data.F32, "x");
     266    KapaPlotVector (kapa1, n, y->data.F32, "y");
     267    KapaPlotVector (kapa1, n, dy->data.F32, "dym");
     268    KapaPlotVector (kapa1, n, dy->data.F32, "dyp");
     269
     270    psFree (x);
     271    psFree (y);
     272    psFree (dy);
     273
     274    pmVisualAskUser(NULL);
     275    return true;
     276}
     277
     278// to see the structure of the psf model, place the sources in a fake image 1/10th the size
     279// at their appropriate relative location. later sources stomp on earlier sources
     280bool pmSourceVisualShowModelFits (pmPSF *psf, psArray *sources, psImageMaskType maskVal) {
     281
     282    if (!pmVisualIsVisual()) return true;
     283
     284    if (kapa2 == -1) {
     285        kapa2 = KapaOpenNamedSocket ("kapa", "pmSource:images");
     286        if (kapa2 == -1) {
     287            fprintf (stderr, "failure to open kapa; visual mode disabled\n");
     288            pmVisualSetVisual(false);
     289            return false;
     290        }
     291    }
     292
     293    // create images 1/10 scale:
     294    psImage *image = psImageAlloc (0.1*psf->fieldNx, 0.1*psf->fieldNy, PS_TYPE_F32);
     295    psImage *model = psImageAlloc (0.1*psf->fieldNx, 0.1*psf->fieldNy, PS_TYPE_F32);
     296    psImage *resid = psImageAlloc (0.1*psf->fieldNx, 0.1*psf->fieldNy, PS_TYPE_F32);
     297    psImageInit (image, 0.0);
     298    psImageInit (model, 0.0);
     299    psImageInit (resid, 0.0);
     300
     301    for (int i = sources->n - 1; i >= 0; i--) {
     302        pmSource *source = sources->data[i];
     303        if (!source) continue;
     304        if (!source->pixels) continue;
     305
     306        pmSourceCacheModel (source, maskVal);
     307        if (!source->modelFlux) continue;
     308
     309        pmModel *srcModel = pmSourceGetModel (NULL, source);
     310        if (!model) continue;
     311
     312        float norm = srcModel->params->data.F32[PM_PAR_I0];
     313
     314        int Xo = 0.1*srcModel->params->data.F32[PM_PAR_XPOS];
     315        int Yo = 0.1*srcModel->params->data.F32[PM_PAR_YPOS];
     316
     317        // insert source pixels in the image at 1/10th offset
     318        for (int iy = 0; iy < source->pixels->numRows; iy++) {
     319            int jy = iy + Yo;
     320            if (jy >= image->numRows) continue;
     321            for (int ix = 0; ix < source->pixels->numCols; ix++) {
     322                int jx = ix + Xo;
     323                if (jx >= image->numCols) continue;
     324                if (source->maskObj->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix]) continue;
     325                if (source->modelFlux->data.F32[iy][ix] < 0.001) continue;
     326                image->data.F32[jy][jx] = source->pixels->data.F32[iy][ix];
     327                model->data.F32[jy][jx] = source->modelFlux->data.F32[iy][ix];
     328                resid->data.F32[jy][jx] = source->pixels->data.F32[iy][ix] - norm*source->modelFlux->data.F32[iy][ix];
     329            }
     330        }
     331    }
     332
     333    // KapaClearSections (kapa2);
     334    pmVisualScaleImage (kapa2, image, "image", 0, true);
     335    pmVisualScaleImage (kapa2, model, "model", 1, true);
     336    pmVisualScaleImage (kapa2, resid, "resid", 2, true);
     337
     338# ifdef DEBUG
     339    {
     340        psFits *fits = psFitsOpen ("image.fits", "w");
     341        psFitsWriteImage (fits, NULL, image, 0, NULL);
     342        psFitsClose (fits);
     343        fits = psFitsOpen ("model.fits", "w");
     344        psFitsWriteImage (fits, NULL, model, 0, NULL);
     345        psFitsClose (fits);
     346        fits = psFitsOpen ("resid.fits", "w");
     347        psFitsWriteImage (fits, NULL, resid, 0, NULL);
     348        psFitsClose (fits);
     349    }
     350# endif
     351
     352    psFree (image);
     353    psFree (model);
     354    psFree (resid);
     355
     356    pmVisualAskUser(NULL);
     357    return true;
     358}
     359
     360bool pmSourceVisualShowModelFit (pmSource *source) {
     361
     362    if (!pmVisualIsVisual()) return true;
     363    if (!source->pixels) return false;
     364    if (!source->modelFlux) return false;
     365
     366    if (kapa2 == -1) {
     367        kapa2 = KapaOpenNamedSocket ("kapa", "pmSource:images");
     368        if (kapa2 == -1) {
     369            fprintf (stderr, "failure to open kapa; visual mode disabled\n");
     370            pmVisualSetVisual(false);
     371            return false;
     372        }
     373    }
     374
     375    // KapaClearSections (kapa2);
     376    pmVisualScaleImage (kapa2, source->pixels, "source", 0, false);
     377    pmVisualScaleImage (kapa2, source->modelFlux, "model", 1, false);
     378
     379    pmModel *model = pmSourceGetModel (NULL, source);
     380    float norm = model->params->data.F32[PM_PAR_I0];
     381
     382    psImage *resid = psImageAlloc (source->pixels->numCols, source->pixels->numRows, PS_TYPE_F32);
     383    for (int iy = 0; iy < source->pixels->numRows; iy++) {
     384        for (int ix = 0; ix < source->pixels->numCols; ix++) {
     385            if (source->maskObj->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix]) {
     386                resid->data.F32[iy][ix] = NAN;
     387                continue;
     388            }
     389            resid->data.F32[iy][ix] = source->pixels->data.F32[iy][ix] - norm*source->modelFlux->data.F32[iy][ix];
     390        }
     391    }
     392    pmVisualScaleImage (kapa2, resid, "resid", 2, false);
     393
     394    psFree (resid);
     395
     396    pmVisualAskUser(NULL);
     397    return true;
     398}
     399
     400bool pmSourceVisualPSFModelResid (pmTrend2D *trend, psVector *x, psVector *y, psVector *param, psVector *mask) {
     401
     402    KapaSection section;  // put the positive profile in one and the residuals in another?
     403
     404    Graphdata graphdata;
     405
     406    if (!pmVisualIsVisual() || !plotPSF) return true;
     407
     408    if (kapa1 == -1) {
     409        kapa1 = KapaOpenNamedSocket ("kapa", "pmSource:plots");
     410        if (kapa1 == -1) {
     411            fprintf (stderr, "failure to open kapa; visual mode disabled\n");
     412            pmVisualSetVisual(false);
     413            return false;
     414        }
     415    }
     416
     417    KapaClearPlots (kapa1);
     418    KapaInitGraph (&graphdata);
     419
     420    float Xmin = +1e32;
     421    float Xmax = -1e32;
     422    float Ymin = +1e32;
     423    float Ymax = -1e32;
     424    float Fmin = +1e32;
     425    float Fmax = -1e32;
     426
     427    psVector *resid = psVectorAlloc (x->n, PS_TYPE_F32);
     428    psVector *model = psVectorAlloc (x->n, PS_TYPE_F32);
     429
     430    psVector *xm = psVectorAlloc (x->n, PS_TYPE_F32);
     431    psVector *ym = psVectorAlloc (x->n, PS_TYPE_F32);
     432    psVector *Fm = psVectorAlloc (x->n, PS_TYPE_F32);
     433
     434    int n = 0;
     435    for (int i = 0; i < x->n; i++) {
     436        model->data.F32[i] = pmTrend2DEval (trend, x->data.F32[i], y->data.F32[i]);
     437        resid->data.F32[i] = param->data.F32[i] - model->data.F32[i];
     438        if (mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) continue;
     439        Xmin = PS_MIN (Xmin, x->data.F32[i]);
     440        Xmax = PS_MAX (Xmax, x->data.F32[i]);
     441        Ymin = PS_MIN (Ymin, y->data.F32[i]);
     442        Ymax = PS_MAX (Ymax, y->data.F32[i]);
     443        Fmin = PS_MIN (Fmin, param->data.F32[i]);
     444        Fmax = PS_MAX (Fmax, param->data.F32[i]);
     445        xm->data.F32[n] = x->data.F32[i];
     446        ym->data.F32[n] = y->data.F32[i];
     447        Fm->data.F32[n] = param->data.F32[i];
     448        n++;
     449    }
     450    xm->n = ym->n = Fm->n = n;
     451
     452    // view 1 on resid
     453    section.dx = 1.0;
     454    section.dy = 0.5;
    106455    section.x = 0.0;
    107     section.y = 0.33;
     456    section.y = 0.0;
    108457    section.name = NULL;
    109     psStringAppend (&section.name, "a3");
     458    psStringAppend (&section.name, "a1");
    110459    KapaSetSection (kapa1, &section);
    111460    psFree (section.name);
    112     pmSourcePlotPoints3D (kapa1, &graphdata, xn, yn, Zn, 30.0*PS_RAD_DEG, -15.0*PS_RAD_DEG);
    113 
    114     // view 4 on resid
    115     section.dx = 0.5;
    116     section.dy = 0.33;
    117     section.x = 0.5;
    118     section.y = 0.33;
     461
     462    graphdata.color = KapaColorByName ("black");
     463    graphdata.xmin = Xmin;
     464    graphdata.xmax = Xmax;
     465    graphdata.ymin = Fmin;
     466    graphdata.ymax = Fmax;
     467
     468    {
     469        float range;
     470        range = graphdata.xmax - graphdata.xmin;
     471        graphdata.xmax += 0.05*range;
     472        graphdata.xmin -= 0.05*range;
     473        range = graphdata.ymax - graphdata.ymin;
     474        graphdata.ymax += 0.05*range;
     475        graphdata.ymin -= 0.05*range;
     476    }
     477
     478    KapaSetLimits (kapa1, &graphdata);
     479    KapaSetFont (kapa1, "helvetica", 14);
     480    KapaBox (kapa1, &graphdata);
     481    KapaSendLabel (kapa1, "X (pixels)", KAPA_LABEL_XM);
     482    KapaSendLabel (kapa1, "Model Param", KAPA_LABEL_YM);
     483
     484    graphdata.ptype = 2;
     485    graphdata.size = 1.0;
     486    graphdata.style = 2;
     487    KapaPrepPlot (kapa1,   x->n, &graphdata);
     488    KapaPlotVector (kapa1, x->n, x->data.F32, "x");
     489    KapaPlotVector (kapa1, x->n, param->data.F32, "y");
     490
     491    graphdata.color = KapaColorByName ("red");
     492    graphdata.ptype = 1;
     493    KapaPrepPlot (kapa1,   xm->n, &graphdata);
     494    KapaPlotVector (kapa1, xm->n, xm->data.F32, "x");
     495    KapaPlotVector (kapa1, xm->n, Fm->data.F32, "y");
     496
     497    graphdata.color = KapaColorByName ("blue");
     498    graphdata.ptype = 1;
     499    KapaPrepPlot (kapa1,   x->n, &graphdata);
     500    KapaPlotVector (kapa1, x->n, x->data.F32, "x");
     501    KapaPlotVector (kapa1, x->n, model->data.F32, "y");
     502
     503    // view 2 on resid
     504    section.dx = 1.0;
     505    section.dy = 0.5;
     506    section.x = 0.0;
     507    section.y = 0.5;
    119508    section.name = NULL;
    120     psStringAppend (&section.name, "a4");
     509    psStringAppend (&section.name, "a2");
    121510    KapaSetSection (kapa1, &section);
    122511    psFree (section.name);
    123     pmSourcePlotPoints3D (kapa1, &graphdata, xn, yn, Zn, -60.0*PS_RAD_DEG, -15.0*PS_RAD_DEG);
    124 
    125     // view 5 on resid
    126     section.dx = 0.5;
    127     section.dy = 0.33;
    128     section.x = 0.0;
    129     section.y = 0.66;
    130     section.name = NULL;
    131     psStringAppend (&section.name, "a5");
    132     KapaSetSection (kapa1, &section);
    133     psFree (section.name);
    134     pmSourcePlotPoints3D (kapa1, &graphdata, xn, yn, Fn, 30.0*PS_RAD_DEG, -15.0*PS_RAD_DEG);
    135 
    136     // view 6 on resid
    137     section.dx = 0.5;
    138     section.dy = 0.33;
    139     section.x = 0.5;
    140     section.y = 0.66;
    141     section.name = NULL;
    142     psStringAppend (&section.name, "a6");
    143     KapaSetSection (kapa1, &section);
    144     psFree (section.name);
    145     pmSourcePlotPoints3D (kapa1, &graphdata, xn, yn, Fn, -60.0*PS_RAD_DEG, -15.0*PS_RAD_DEG);
     512
     513    graphdata.color = KapaColorByName ("black");
     514    graphdata.xmin = Ymin;
     515    graphdata.xmax = Ymax;
     516    graphdata.ymin = Fmin;
     517    graphdata.ymax = Fmax;
     518    {
     519        float range;
     520        range = graphdata.xmax - graphdata.xmin;
     521        graphdata.xmax += 0.05*range;
     522        graphdata.xmin -= 0.05*range;
     523        range = graphdata.ymax - graphdata.ymin;
     524        graphdata.ymax += 0.05*range;
     525        graphdata.ymin -= 0.05*range;
     526    }
     527
     528    KapaSetLimits (kapa1, &graphdata);
     529    KapaSetFont (kapa1, "helvetica", 14);
     530    KapaBox (kapa1, &graphdata);
     531    KapaSendLabel (kapa1, "Y (pixels)", KAPA_LABEL_XM);
     532    KapaSendLabel (kapa1, "Model Param", KAPA_LABEL_YM);
     533
     534    graphdata.ptype = 2;
     535    graphdata.size = 1.0;
     536    graphdata.style = 2;
     537    KapaPrepPlot (kapa1,   y->n, &graphdata);
     538    KapaPlotVector (kapa1, y->n, y->data.F32, "x");
     539    KapaPlotVector (kapa1, y->n, param->data.F32, "y");
     540
     541    graphdata.color = KapaColorByName ("red");
     542    graphdata.ptype = 1;
     543    KapaPrepPlot (kapa1,   xm->n, &graphdata);
     544    KapaPlotVector (kapa1, xm->n, ym->data.F32, "x");
     545    KapaPlotVector (kapa1, xm->n, Fm->data.F32, "y");
     546
     547    graphdata.color = KapaColorByName ("blue");
     548    graphdata.ptype = 1;
     549    KapaPrepPlot (kapa1,   y->n, &graphdata);
     550    KapaPlotVector (kapa1, y->n, y->data.F32, "x");
     551    KapaPlotVector (kapa1, y->n, model->data.F32, "y");
     552
     553    psFree (xm);
     554    psFree (ym);
     555    psFree (Fm);
    146556
    147557    psFree (resid);
    148 
    149     psFree (xn);
    150     psFree (yn);
    151     psFree (zn);
    152     psFree (Zn);
     558    psFree (model);
    153559
    154560    // pause and wait for user input:
     
    159565}
    160566
    161 // send in normalized points
     567// Somewhat broken 3D plotting function (was used by pmSourceVisualPSFModelResid, but not anymore)
    162568bool pmSourcePlotPoints3D (int myKapa, Graphdata *graphdata, psVector *xn, psVector *yn, psVector *zn, float theta, float phi) {
     569
     570    return true;
    163571
    164572    psVector *xv = psVectorAlloc (PS_MAX(6, 2*xn->n), PS_TYPE_F32);
     
    192600    KapaSetLimits (myKapa, graphdata);
    193601
    194     // KapaSetFont (myKapa, "helvetica", 14);
    195     // KapaBox (myKapa, graphdata);
    196     // KapaSendLabel (myKapa, "&ss&h_x| (pixels)", KAPA_LABEL_XM);
    197     // KapaSendLabel (myKapa, "&ss&h_y| (pixels)", KAPA_LABEL_YM);
    198 
    199602    graphdata->color = KapaColorByName ("black");
    200603    graphdata->ptype = 100;
Note: See TracChangeset for help on using the changeset viewer.