- Timestamp:
- May 3, 2010, 8:50:52 AM (16 years ago)
- Location:
- branches/simtest_nebulous_branches
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/simtest_nebulous_branches
- Property svn:mergeinfo changed
-
branches/simtest_nebulous_branches/psModules
-
Property svn:mergeinfo
set to (toggle deleted branches)
/trunk/psModules merged eligible /branches/eam_branches/stackphot.20100406/psModules 27623-27653 /branches/pap_delete/psModules 27530-27595
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
branches/simtest_nebulous_branches/psModules/src/objects/pmSourceVisual.c
r23242 r27840 5 5 #include <pslib.h> 6 6 #include "pmTrend2D.h" 7 #include "pmPSF.h" 8 #include "pmPSFtry.h" 9 #include "pmSource.h" 7 10 #include "pmSourceVisual.h" 8 11 … … 15 18 16 19 static int kapa1 = -1; 20 static int kapa2 = -1; 17 21 static bool plotPSF = true; 18 // static int kapa2 = -1;19 22 // static int kapa3 = -1; 20 23 … … 27 30 bool pmSourcePlotPoints3D (int myKapa, Graphdata *graphdata, psVector *xn, psVector *yn, psVector *zn, float theta, float phi); 28 31 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? 32 bool pmSourceVisualPlotPSFMetric (pmPSFtry *psfTry) { 33 33 34 34 Graphdata graphdata; 35 35 36 if (!pmVisualIsVisual() || !plotPSF) return true;36 if (!pmVisualIsVisual()) return true; 37 37 38 38 if (kapa1 == -1) { … … 45 45 } 46 46 47 KapaClear Plots (kapa1);47 KapaClearSections (kapa1); 48 48 KapaInitGraph (&graphdata); 49 49 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 115 bool 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; 84 143 section.x = 0.0; 85 144 section.y = 0.0; … … 88 147 KapaSetSection (kapa1, §ion); 89 148 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; 97 210 section.name = NULL; 98 211 psStringAppend (§ion.name, "a2"); 99 212 KapaSetSection (kapa1, §ion); 100 213 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 280 bool 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 360 bool 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 400 bool 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; 106 455 section.x = 0.0; 107 section.y = 0. 33;456 section.y = 0.0; 108 457 section.name = NULL; 109 psStringAppend (§ion.name, "a 3");458 psStringAppend (§ion.name, "a1"); 110 459 KapaSetSection (kapa1, §ion); 111 460 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; 119 508 section.name = NULL; 120 psStringAppend (§ion.name, "a 4");509 psStringAppend (§ion.name, "a2"); 121 510 KapaSetSection (kapa1, §ion); 122 511 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 (§ion.name, "a5"); 132 KapaSetSection (kapa1, §ion); 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 (§ion.name, "a6"); 143 KapaSetSection (kapa1, §ion); 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); 146 556 147 557 psFree (resid); 148 149 psFree (xn); 150 psFree (yn); 151 psFree (zn); 152 psFree (Zn); 558 psFree (model); 153 559 154 560 // pause and wait for user input: … … 159 565 } 160 566 161 // send in normalized points567 // Somewhat broken 3D plotting function (was used by pmSourceVisualPSFModelResid, but not anymore) 162 568 bool pmSourcePlotPoints3D (int myKapa, Graphdata *graphdata, psVector *xn, psVector *yn, psVector *zn, float theta, float phi) { 569 570 return true; 163 571 164 572 psVector *xv = psVectorAlloc (PS_MAX(6, 2*xn->n), PS_TYPE_F32); … … 192 600 KapaSetLimits (myKapa, graphdata); 193 601 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 199 602 graphdata->color = KapaColorByName ("black"); 200 603 graphdata->ptype = 100;
Note:
See TracChangeset
for help on using the changeset viewer.
