IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 3, 2007, 4:29:18 PM (19 years ago)
Author:
eugene
Message:

cleanups of the plotting functions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psastro/src/psastroDemoPlot.c

    r15103 r15195  
    44# include <kapa.h>
    55
    6 bool psastroPlotRawstars (psArray *rawstars, pmFPA *fpa, pmChip *chip)
     6bool pmKapaPlotVectorTriple_AutoLimitsZscale_OpenGraph (int kapa, Graphdata *graphdata, psVector *xVec, psVector *yVec, psVector *zVec, bool increasing);
     7
     8bool psastroPlotRawstars (psArray *rawstars, pmFPA *fpa, pmChip *chip, psMetadata *recipe)
    79{
    810    Graphdata graphdata;
     
    1517    }
    1618
     19    bool status = false;
     20    float iMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MIN");
     21    float iMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MAX");
     22
    1723    KapaResize (kapa, 1000, 1000);
    1824    KapaInitGraph (&graphdata);
     
    4248        pmAstromObj *raw = rawstars->data[i];
    4349        if (!isfinite(raw->Mag)) continue;
     50        if (raw->Mag < iMagMin) continue;
     51        if (raw->Mag > iMagMax) continue;
     52
    4453        xVec->data.F32[n] = raw->chip->x;
    4554        yVec->data.F32[n] = raw->chip->y;
     
    6170        pmAstromObj *raw = rawstars->data[i];
    6271        if (!isfinite(raw->Mag)) continue;
     72        if (raw->Mag < iMagMin) continue;
     73        if (raw->Mag > iMagMax) continue;
     74
    6375        xVec->data.F32[n] = raw->FP->x;
    6476        yVec->data.F32[n] = raw->FP->y;
     
    8092        pmAstromObj *raw = rawstars->data[i];
    8193        if (!isfinite(raw->Mag)) continue;
     94        if (raw->Mag < iMagMin) continue;
     95        if (raw->Mag > iMagMax) continue;
     96
    8297        xVec->data.F32[n] = raw->TP->x;
    8398        yVec->data.F32[n] = raw->TP->y;
     
    99114        pmAstromObj *raw = rawstars->data[i];
    100115        if (!isfinite(raw->Mag)) continue;
     116        if (raw->Mag < iMagMin) continue;
     117        if (raw->Mag > iMagMax) continue;
     118
    101119        xVec->data.F32[n] = DEG_RAD*raw->sky->r;
    102120        yVec->data.F32[n] = DEG_RAD*raw->sky->d;
     
    111129    char key[10], name[80];
    112130    fprintf (stdout, "(s)ave plot or [c]ontinue? ");
    113     fscanf (stdin, "%s", key);
    114     fprintf (stderr, "got: %s\n", key);
     131    fgets (key, 8, stdin);
    115132    if (key[0] == 's') {
    116133        fprintf (stdout, "enter plot name [rawstars.png]: ");
     
    126143}
    127144
    128 bool psastroPlotRefstars (psArray *refstars)
     145bool psastroPlotRefstars (psArray *refstars, psMetadata *recipe)
    129146{
    130147    Graphdata graphdata;
     
    136153    }
    137154
     155    bool status = false;
     156    float rMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MIN");
     157    float rMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MAX");
     158
    138159    KapaResize (kapa, 1000, 1000);
    139160    KapaInitGraph (&graphdata);
     
    153174        pmAstromObj *ref = refstars->data[i];
    154175        if (!isfinite(ref->Mag)) continue;
     176        if (ref->Mag > rMagMax) continue;
     177        if (ref->Mag < rMagMin) continue;
     178
    155179        xVec->data.F32[n] = DEG_RAD*ref->sky->r;
    156180        yVec->data.F32[n] = DEG_RAD*ref->sky->d;
     
    165189    char key[10], name[80];
    166190    fprintf (stdout, "(s)ave plot or [c]ontinue? ");
    167     fscanf (stdin, "%s", key);
    168     fprintf (stderr, "got: %s\n", key);
     191    fgets (key, 8, stdin);
    169192    if (key[0] == 's') {
    170193        fprintf (stdout, "enter plot name [refstars.png]: ");
     
    180203}
    181204
    182 bool psastroPlotOneChipFit (psArray *rawstars, psArray *refstars, psArray *match, pmAstromFitResults *results) {
     205bool psastroPlotOneChipFit (psArray *rawstars, psArray *refstars, psArray *match, psMetadata *recipe) {
    183206
    184207    Graphdata graphdata;
     
    190213        return false;
    191214    }
     215
     216    bool status = false;
     217    float iMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MIN");
     218    float iMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MAX");
     219    float rMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MIN");
     220    float rMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MAX");
    192221
    193222    KapaResize (kapa, 1000, 1000);
     
    221250        pmAstromObj *ref = refstars->data[pair->ref];
    222251       
     252        if (raw->Mag < iMagMin) continue;
     253        if (raw->Mag > iMagMax) continue;
     254        if (ref->Mag < rMagMin) continue;
     255        if (ref->Mag > rMagMax) continue;
     256
    223257        xVec->data.F32[n] = raw->chip->x;
    224258        yVec->data.F32[n] = raw->chip->x - ref->chip->x;
     
    244278       
    245279        if (!isfinite(raw->Mag)) continue;
     280        if (raw->Mag < iMagMin) continue;
     281        if (raw->Mag > iMagMax) continue;
     282        if (ref->Mag < rMagMin) continue;
     283        if (ref->Mag > rMagMax) continue;
     284
    246285        xVec->data.F32[n] = raw->chip->x;
    247286        yVec->data.F32[n] = raw->chip->y - ref->chip->y;
     
    267306       
    268307        if (!isfinite(raw->Mag)) continue;
     308        if (raw->Mag < iMagMin) continue;
     309        if (raw->Mag > iMagMax) continue;
     310        if (ref->Mag < rMagMin) continue;
     311        if (ref->Mag > rMagMax) continue;
     312
    269313        xVec->data.F32[n] = raw->chip->y;
    270314        yVec->data.F32[n] = raw->chip->x - ref->chip->x;
     
    290334       
    291335        if (!isfinite(raw->Mag)) continue;
     336        if (raw->Mag < iMagMin) continue;
     337        if (raw->Mag > iMagMax) continue;
     338        if (ref->Mag < rMagMin) continue;
     339        if (ref->Mag > rMagMax) continue;
     340
    292341        xVec->data.F32[n] = raw->chip->y;
    293342        yVec->data.F32[n] = raw->chip->y - ref->chip->y;
     
    297346    xVec->n = yVec->n = zVec->n = n;
    298347    pmKapaPlotVectorTriple_AutoLimits_OpenGraph (kapa, &graphdata, xVec, yVec, zVec, false);
     348
     349    // *** X vs Y plot (different window)
     350    int kapa2 = KapaOpenNamedSocket ("kapa", "XvsY");
     351    if (kapa2 == -1) {
     352        psError(PS_ERR_UNKNOWN, true, "failure to open kapa");
     353        return false;
     354    }
     355
     356    KapaResize (kapa2, 1000, 1000);
     357    KapaInitGraph (&graphdata);
     358    KapaClearPlots (kapa2);
     359
     360    graphdata.color = KapaColorByName ("black");
     361    graphdata.ptype = 2;
     362    graphdata.style = 2;
     363
     364    psFree (xVec);
     365    psFree (yVec);
     366    psFree (zVec);
     367
     368    xVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
     369    yVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
     370    zVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
     371
     372    // X vs Y by mag (raw)
     373    n = 0;
     374    for (int i = 0; i < rawstars->n; i++) {
     375        pmAstromObj *raw = rawstars->data[i];
     376        if (!isfinite(raw->Mag)) continue;
     377        if (raw->Mag < iMagMin) continue;
     378        if (raw->Mag > iMagMax) continue;
     379
     380        xVec->data.F32[n] = raw->chip->x;
     381        yVec->data.F32[n] = raw->chip->y;
     382        zVec->data.F32[n] = raw->Mag;
     383        n++;
     384    }   
     385    xVec->n = yVec->n = zVec->n = n;
     386    pmKapaPlotVectorTriple_AutoLimits_OpenGraph (kapa2, &graphdata, xVec, yVec, zVec, false);
     387
     388    graphdata.color = KapaColorByName ("red");
     389    graphdata.ptype = 7;
     390    graphdata.style = 2;
     391
     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    // X vs Y by mag (raw)
     401    n = 0;
     402    for (int i = 0; i < refstars->n; i++) {
     403        pmAstromObj *ref = refstars->data[i];
     404        if (!isfinite(ref->Mag)) continue;
     405        if (ref->Mag < rMagMin) continue;
     406        if (ref->Mag > rMagMax) continue;
     407
     408        xVec->data.F32[n] = ref->chip->x;
     409        yVec->data.F32[n] = ref->chip->y;
     410        zVec->data.F32[n] = ref->Mag;
     411        n++;
     412    }   
     413    xVec->n = yVec->n = zVec->n = n;
     414    pmKapaPlotVectorTriple_AutoLimitsZscale_OpenGraph (kapa2, &graphdata, xVec, yVec, zVec, false);
    299415
    300416    // pause and wait for user input:
     
    302418    char key[10], name[80];
    303419    fprintf (stdout, "(s)ave plot or [c]ontinue? ");
    304     fscanf (stdin, "%s", key);
    305     fprintf (stderr, "got: %s\n", key);
     420    fgets (key, 8, stdin);
    306421    if (key[0] == 's') {
    307422        fprintf (stdout, "enter plot name [chipfit.png]: ");
     
    311426    }
    312427
     428    close (kapa2);
    313429    psFree (xVec);
    314430    psFree (yVec);
     
    317433}
    318434
     435bool pmKapaPlotVectorTriple_AutoLimitsZscale_OpenGraph (int kapa, Graphdata *graphdata, psVector *xVec, psVector *yVec, psVector *zVec, bool increasing)
     436{
     437
     438    // set limits based on data values
     439    float zmin = +FLT_MAX;
     440    float zmax = -FLT_MAX;
     441    for (int i = 0; i < xVec->n; i++) {
     442        zmin = PS_MIN (zmin, zVec->data.F32[i]);
     443        zmax = PS_MAX (zmax, zVec->data.F32[i]);
     444    }
     445
     446    // set the scale vector
     447    psVector *zScale = psVectorAlloc (zVec->n, PS_DATA_F32);
     448
     449    float range = zmax - zmin;
     450    if (range == 0.0) {
     451        psVectorInit (zScale, 1.0);
     452    } else {
     453        for (int i = 0; i < zVec->n; i++) {
     454            if (increasing) {
     455                zScale->data.F32[i] = PS_MIN (1.5, PS_MAX(0.05, 1.5*(zVec->data.F32[i] - zmin)/range));
     456            } else {
     457                zScale->data.F32[i] = PS_MIN (1.5, PS_MAX(0.05, 1.5*(zmax - zVec->data.F32[i])/range));
     458            }
     459        }
     460    }
     461
     462    KapaSetFont (kapa, "helvetica", 14);
     463    KapaBox (kapa, graphdata);
     464
     465    // the point size will be scaled from the z vector
     466    graphdata->size = -1;
     467    KapaPrepPlot (kapa, xVec->n, graphdata);
     468    KapaPlotVector (kapa, xVec->n, xVec->data.F32, "x");
     469    KapaPlotVector (kapa, yVec->n, yVec->data.F32, "y");
     470    KapaPlotVector (kapa, zVec->n, zScale->data.F32, "z");
     471    psFree (zScale);
     472    return true;
     473}
     474
    319475# else
    320476
Note: See TracChangeset for help on using the changeset viewer.