IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 8, 2009, 5:32:23 PM (17 years ago)
Author:
beaumont
Message:

Cleaned up some memory allocation bugs in pmAstrometryVisual.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/cnb_branch_20090113/psModules/src/extras/pmVisual.c

    r21208 r21421  
    3333        *kapid = KapaOpenNamedSocket("kapa", name);
    3434        if (*kapid == -1) {
    35             fprintf (stderr, "failure to open kapa; visual mode disabled.\n");
     35            fprintf (stderr, "Failure to open kapa.\n");
    3636            return false;
    3737        }
     
    181181
    182182
    183 bool pmVisualResidPlot (psArray *rawstars, psArray *refstars, psArray *match, psMetadata *recipe,
    184                         char *title, int *kapa, int *kapa2) {
    185 
    186     //set up the first window
    187     if (!pmVisualInitWindow(kapa, "plots")) return false;
    188 
    189     //initialize graph information
    190     Graphdata graphdata;
    191     KapaSection section;
    192 
    193     KapaInitGraph (&graphdata);
    194     KapaClearPlots (*kapa);
    195 
    196     graphdata.color = KapaColorByName ("black");
    197     graphdata.ptype = 7;
    198     graphdata.size = 0.5;
    199     graphdata.style = 2;
    200 
    201     section.dx = 0.4;
    202     section.dy = 0.4;
    203 
    204     //initialize and populate the plotting vectors
    205     bool status = false;
    206     float iMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MIN");
    207     float iMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MAX");
    208     float rMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MIN");
    209     float rMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MAX");
    210 
    211     psVector *xVec = psVectorAlloc (match->n, PS_TYPE_F32);
    212     psVector *yVec = psVectorAlloc (match->n, PS_TYPE_F32);
    213     psVector *zVec = psVectorAlloc (match->n, PS_TYPE_F32);
    214 
    215     // X vs dX
    216     section.x = 0.0;
    217     section.y = 0.5;
    218     section.name = NULL;
    219     psStringAppend (&section.name, "a0");
    220     KapaSetSection (*kapa, &section);
    221     psFree (section.name);
    222 
    223     int n = 0;
    224     for (int i = 0; i < match->n; i++) {
    225         pmAstromMatch *pair = match->data[i];
    226         pmAstromObj *raw = rawstars->data[pair->raw];
    227         pmAstromObj *ref = refstars->data[pair->ref];
    228 
    229         if (!isfinite(raw->Mag)) continue;
    230         if (raw->Mag < iMagMin) continue;
    231         if (raw->Mag > iMagMax) continue;
    232         if (ref->Mag < rMagMin) continue;
    233         if (ref->Mag > rMagMax) continue;
    234 
    235         xVec->data.F32[n] = raw->chip->x;
    236         yVec->data.F32[n] = raw->chip->x - ref->chip->x;
    237         zVec->data.F32[n] = raw->Mag;
    238         n++;
    239     }
    240     xVec->n = yVec->n = zVec->n = n;
    241 
    242     KapaSendLabel (*kapa, "X", KAPA_LABEL_XM);
    243     KapaSendLabel (*kapa, "dX", KAPA_LABEL_YM);
    244     pmVisualTriplePlot (*kapa, &graphdata, xVec, yVec, zVec, false);
    245 
    246     // X vs dY
    247     section.x = 0.5;
    248     section.y = 0.5;
    249     section.name = NULL;
    250     psStringAppend (&section.name, "a1");
    251     KapaSetSection (*kapa, &section);
    252     psFree (section.name);
    253 
    254     n = 0;
    255     for (int i = 0; i < match->n; i++) {
    256         pmAstromMatch *pair = match->data[i];
    257         pmAstromObj *raw = rawstars->data[pair->raw];
    258         pmAstromObj *ref = refstars->data[pair->ref];
    259 
    260         if (!isfinite(raw->Mag)) continue;
    261         if (raw->Mag < iMagMin) continue;
    262         if (raw->Mag > iMagMax) continue;
    263         if (ref->Mag < rMagMin) continue;
    264         if (ref->Mag > rMagMax) continue;
    265 
    266         xVec->data.F32[n] = raw->chip->x;
    267         yVec->data.F32[n] = raw->chip->y - ref->chip->y;
    268         zVec->data.F32[n] = raw->Mag;
    269         n++;
    270     }
    271     xVec->n = yVec->n = zVec->n = n;
    272 
    273     KapaSendLabel (*kapa, "X", KAPA_LABEL_XM);
    274     KapaSendLabel (*kapa, "dY", KAPA_LABEL_YM);
    275     pmVisualTriplePlot (*kapa, &graphdata, xVec, yVec, zVec, false);
    276 
    277     // Y vs dX
    278     section.x = 0.0;
    279     section.y = 0.0;
    280     section.name = NULL;
    281     psStringAppend (&section.name, "a2");
    282     KapaSetSection (*kapa, &section);
    283     psFree (section.name);
    284 
    285     n = 0;
    286     for (int i = 0; i < match->n; i++) {
    287         pmAstromMatch *pair = match->data[i];
    288         pmAstromObj *raw = rawstars->data[pair->raw];
    289         pmAstromObj *ref = refstars->data[pair->ref];
    290 
    291         if (!isfinite(raw->Mag)) continue;
    292         if (raw->Mag < iMagMin) continue;
    293         if (raw->Mag > iMagMax) continue;
    294         if (ref->Mag < rMagMin) continue;
    295         if (ref->Mag > rMagMax) continue;
    296 
    297         xVec->data.F32[n] = raw->chip->y;
    298         yVec->data.F32[n] = raw->chip->x - ref->chip->x;
    299         zVec->data.F32[n] = raw->Mag;
    300         n++;
    301     }
    302     xVec->n = yVec->n = zVec->n = n;
    303 
    304     KapaSendLabel (*kapa, "Y", KAPA_LABEL_XM);
    305     KapaSendLabel (*kapa, "dX", KAPA_LABEL_YM);
    306     pmVisualTriplePlot (*kapa, &graphdata, xVec, yVec, zVec, false);
    307 
    308     // Y vs dY
    309     section.x = 0.5;
    310     section.y = 0.0;
    311     section.name = NULL;
    312     psStringAppend (&section.name, "a3");
    313     KapaSetSection (*kapa, &section);
    314     psFree (section.name);
    315 
    316     n = 0;
    317     for (int i = 0; i < match->n; i++) {
    318         pmAstromMatch *pair = match->data[i];
    319         pmAstromObj *raw = rawstars->data[pair->raw];
    320         pmAstromObj *ref = refstars->data[pair->ref];
    321 
    322         if (!isfinite(raw->Mag)) continue;
    323         if (raw->Mag < iMagMin) continue;
    324         if (raw->Mag > iMagMax) continue;
    325         if (ref->Mag < rMagMin) continue;
    326         if (ref->Mag > rMagMax) continue;
    327 
    328         xVec->data.F32[n] = raw->chip->y;
    329         yVec->data.F32[n] = raw->chip->y - ref->chip->y;
    330         zVec->data.F32[n] = raw->Mag;
    331         n++;
    332     }
    333     xVec->n = yVec->n = zVec->n = n;
    334 
    335     KapaSendLabel (*kapa, "Y", KAPA_LABEL_XM);
    336     KapaSendLabel (*kapa, "dY", KAPA_LABEL_YM);
    337     pmKapaPlotVectorTriple_AutoLimits_OpenGraph (*kapa, &graphdata, xVec, yVec, zVec, false);
    338 
    339     section.x = 0.0;
    340     section.y = 0.0;
    341     section.dx = 0.95;
    342     section.dy = 0.95;
    343     section.name = NULL;
    344     psStringAppend (&section.name, "a5");
    345     KapaSetSection (*kapa, &section);
    346     KapaSendLabel (*kapa, title, KAPA_LABEL_XP);
    347     psFree (section.name);
    348 
    349 
    350     // X vs Y plot (different window)
    351     if (!pmVisualInitWindow( kapa2, "psastro:plots"))
    352         return false;
    353 
    354     KapaInitGraph (&graphdata);
    355     KapaClearPlots (*kapa2);
    356 
    357     graphdata.color = KapaColorByName ("black");
    358     graphdata.ptype = 2;
    359     graphdata.style = 2;
    360 
    361     psFree (xVec);
    362     psFree (yVec);
    363     psFree (zVec);
    364 
    365     xVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
    366     yVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
    367     zVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
    368 
    369     // X vs Y by mag (raw)
    370     n = 0;
    371     for (int i = 0; i < rawstars->n; i++) {
    372         pmAstromObj *raw = rawstars->data[i];
    373         if (!isfinite(raw->Mag)) continue;
    374         if (raw->Mag < iMagMin) continue;
    375         if (raw->Mag > iMagMax) continue;
    376 
    377         xVec->data.F32[n] = raw->chip->x;
    378         yVec->data.F32[n] = raw->chip->y;
    379         zVec->data.F32[n] = raw->Mag;
    380         n++;
    381     }
    382     xVec->n = yVec->n = zVec->n = n;
    383 
    384     KapaSendLabel (*kapa2, "X", KAPA_LABEL_XM);
    385     KapaSendLabel (*kapa2, "Y", KAPA_LABEL_YM);
    386     KapaSendLabel (*kapa2,
    387                    "Chip Coordinates. Black = Raw Stars. Red = Ref Stars. Blue = Matched Stars"
    388                    , KAPA_LABEL_XP);
    389     pmVisualTriplePlot (*kapa2, &graphdata, xVec, yVec, zVec, false);
    390 
    391     // X vs Y by mag (ref)
    392     psFree (xVec);
    393     psFree (yVec);
    394     psFree (zVec);
    395 
    396     xVec = psVectorAlloc (refstars->n, PS_TYPE_F32);
    397     yVec = psVectorAlloc (refstars->n, PS_TYPE_F32);
    398     zVec = psVectorAlloc (refstars->n, PS_TYPE_F32);
    399 
    400     graphdata.color = KapaColorByName ("red");
    401     graphdata.ptype = 7;
    402     graphdata.style = 2;
    403 
    404     n = 0;
    405     for (int i = 0; i < refstars->n; i++) {
    406         pmAstromObj *ref = refstars->data[i];
    407         if (!isfinite(ref->Mag)) continue;
    408         if (ref->Mag < rMagMin) continue;
    409         if (ref->Mag > rMagMax) continue;
    410 
    411         xVec->data.F32[n] = ref->chip->x;
    412         yVec->data.F32[n] = ref->chip->y;
    413         zVec->data.F32[n] = ref->Mag;
    414         n++;
    415     }
    416     xVec->n = yVec->n = zVec->n = n;
    417     pmVisualTripleOverplot (*kapa2, &graphdata, xVec, yVec, zVec, false);
    418 
    419     //rescale the graph to include all points
    420     float xmin = graphdata.xmin;
    421     float ymin = graphdata.ymin;
    422     float xmax = graphdata.xmax;
    423     float ymax = graphdata.ymax;
    424     pmVisualScaleGraphdata(&graphdata, xVec, yVec, true);
    425     graphdata.xmin = PS_MIN(xmin, graphdata.xmin);
    426     graphdata.ymin = PS_MIN(ymin, graphdata.ymin);
    427     graphdata.xmax = PS_MAX(xmax, graphdata.xmax);
    428     graphdata.ymax = PS_MAX(ymax, graphdata.ymax);
    429     KapaSetLimits (*kapa2, &graphdata);
    430 
    431     //overplot matched stars in blue
    432     psFree (xVec);
    433     psFree (yVec);
    434     psFree (zVec);
    435 
    436     xVec = psVectorAlloc (match->n, PS_TYPE_F32);
    437     yVec = psVectorAlloc (match->n, PS_TYPE_F32);
    438     zVec = psVectorAlloc (match->n, PS_TYPE_F32);
    439 
    440     graphdata.color = KapaColorByName ("blue");
    441     n = 0;
    442     for (int i = 0; i < match->n; i++) {
    443         pmAstromMatch *pair = match->data[i];
    444         pmAstromObj *raw = rawstars->data[pair->raw];
    445         pmAstromObj *ref = refstars->data[pair->ref];
    446         if (raw->Mag < iMagMin) continue;
    447         if (raw->Mag > iMagMax) continue;
    448         if (ref->Mag < rMagMin) continue;
    449         if (ref->Mag > rMagMax) continue;
    450 
    451         xVec->data.F32[n] = raw->chip->x;
    452         yVec->data.F32[n] = raw->chip->y;
    453         zVec->data.F32[n] = iMagMin;
    454         n++;
    455     }
    456     xVec->n = yVec->n = zVec->n = n;
    457     pmVisualTripleOverplot (*kapa2, &graphdata, xVec, yVec, zVec, false);
    458 
    459     psFree (xVec);
    460     psFree (yVec);
    461     psFree (zVec);
    462     return true;
    463 }
    464 
    465 
    466183bool pmVisualScaleImage(int kapaFD, psImage *inImage, const char *name, int channel, bool clip) {
    467184
Note: See TracChangeset for help on using the changeset viewer.