Changeset 15195 for trunk/psastro/src/psastroDemoPlot.c
- Timestamp:
- Oct 3, 2007, 4:29:18 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psastro/src/psastroDemoPlot.c (modified) (21 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psastro/src/psastroDemoPlot.c
r15103 r15195 4 4 # include <kapa.h> 5 5 6 bool psastroPlotRawstars (psArray *rawstars, pmFPA *fpa, pmChip *chip) 6 bool pmKapaPlotVectorTriple_AutoLimitsZscale_OpenGraph (int kapa, Graphdata *graphdata, psVector *xVec, psVector *yVec, psVector *zVec, bool increasing); 7 8 bool psastroPlotRawstars (psArray *rawstars, pmFPA *fpa, pmChip *chip, psMetadata *recipe) 7 9 { 8 10 Graphdata graphdata; … … 15 17 } 16 18 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 17 23 KapaResize (kapa, 1000, 1000); 18 24 KapaInitGraph (&graphdata); … … 42 48 pmAstromObj *raw = rawstars->data[i]; 43 49 if (!isfinite(raw->Mag)) continue; 50 if (raw->Mag < iMagMin) continue; 51 if (raw->Mag > iMagMax) continue; 52 44 53 xVec->data.F32[n] = raw->chip->x; 45 54 yVec->data.F32[n] = raw->chip->y; … … 61 70 pmAstromObj *raw = rawstars->data[i]; 62 71 if (!isfinite(raw->Mag)) continue; 72 if (raw->Mag < iMagMin) continue; 73 if (raw->Mag > iMagMax) continue; 74 63 75 xVec->data.F32[n] = raw->FP->x; 64 76 yVec->data.F32[n] = raw->FP->y; … … 80 92 pmAstromObj *raw = rawstars->data[i]; 81 93 if (!isfinite(raw->Mag)) continue; 94 if (raw->Mag < iMagMin) continue; 95 if (raw->Mag > iMagMax) continue; 96 82 97 xVec->data.F32[n] = raw->TP->x; 83 98 yVec->data.F32[n] = raw->TP->y; … … 99 114 pmAstromObj *raw = rawstars->data[i]; 100 115 if (!isfinite(raw->Mag)) continue; 116 if (raw->Mag < iMagMin) continue; 117 if (raw->Mag > iMagMax) continue; 118 101 119 xVec->data.F32[n] = DEG_RAD*raw->sky->r; 102 120 yVec->data.F32[n] = DEG_RAD*raw->sky->d; … … 111 129 char key[10], name[80]; 112 130 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); 115 132 if (key[0] == 's') { 116 133 fprintf (stdout, "enter plot name [rawstars.png]: "); … … 126 143 } 127 144 128 bool psastroPlotRefstars (psArray *refstars )145 bool psastroPlotRefstars (psArray *refstars, psMetadata *recipe) 129 146 { 130 147 Graphdata graphdata; … … 136 153 } 137 154 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 138 159 KapaResize (kapa, 1000, 1000); 139 160 KapaInitGraph (&graphdata); … … 153 174 pmAstromObj *ref = refstars->data[i]; 154 175 if (!isfinite(ref->Mag)) continue; 176 if (ref->Mag > rMagMax) continue; 177 if (ref->Mag < rMagMin) continue; 178 155 179 xVec->data.F32[n] = DEG_RAD*ref->sky->r; 156 180 yVec->data.F32[n] = DEG_RAD*ref->sky->d; … … 165 189 char key[10], name[80]; 166 190 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); 169 192 if (key[0] == 's') { 170 193 fprintf (stdout, "enter plot name [refstars.png]: "); … … 180 203 } 181 204 182 bool psastroPlotOneChipFit (psArray *rawstars, psArray *refstars, psArray *match, p mAstromFitResults *results) {205 bool psastroPlotOneChipFit (psArray *rawstars, psArray *refstars, psArray *match, psMetadata *recipe) { 183 206 184 207 Graphdata graphdata; … … 190 213 return false; 191 214 } 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"); 192 221 193 222 KapaResize (kapa, 1000, 1000); … … 221 250 pmAstromObj *ref = refstars->data[pair->ref]; 222 251 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 223 257 xVec->data.F32[n] = raw->chip->x; 224 258 yVec->data.F32[n] = raw->chip->x - ref->chip->x; … … 244 278 245 279 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 246 285 xVec->data.F32[n] = raw->chip->x; 247 286 yVec->data.F32[n] = raw->chip->y - ref->chip->y; … … 267 306 268 307 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 269 313 xVec->data.F32[n] = raw->chip->y; 270 314 yVec->data.F32[n] = raw->chip->x - ref->chip->x; … … 290 334 291 335 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 292 341 xVec->data.F32[n] = raw->chip->y; 293 342 yVec->data.F32[n] = raw->chip->y - ref->chip->y; … … 297 346 xVec->n = yVec->n = zVec->n = n; 298 347 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); 299 415 300 416 // pause and wait for user input: … … 302 418 char key[10], name[80]; 303 419 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); 306 421 if (key[0] == 's') { 307 422 fprintf (stdout, "enter plot name [chipfit.png]: "); … … 311 426 } 312 427 428 close (kapa2); 313 429 psFree (xVec); 314 430 psFree (yVec); … … 317 433 } 318 434 435 bool 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 319 475 # else 320 476
Note:
See TracChangeset
for help on using the changeset viewer.
