507 origVariance=
False, nptsFull=1e6, keepPlots=
True, titleFs=14):
508 """Plot diffim residuals for LOCAL and SPATIAL models. 514 for cell
in kernelCellSet.getCellList():
515 for cand
in cell.begin(
True):
517 if not (cand.getStatus() == afwMath.SpatialCellCandidate.GOOD):
520 diffim = cand.getDifferenceImage(diffimLib.KernelCandidateF.ORIG)
521 orig = cand.getScienceMaskedImage()
523 ski = afwImage.ImageD(kernel.getDimensions())
524 kernel.computeImage(ski,
False,
int(cand.getXCenter()),
int(cand.getYCenter()))
527 sdiffim = cand.getDifferenceImage(sk, sbg)
530 bbox = kernel.shrinkBBox(diffim.getBBox())
531 tdiffim = diffim.Factory(diffim, bbox)
532 torig = orig.Factory(orig, bbox)
533 tsdiffim = sdiffim.Factory(sdiffim, bbox)
536 candidateResids.append(np.ravel(tdiffim.getImage().getArray() /
537 np.sqrt(torig.getVariance().getArray())))
538 spatialResids.append(np.ravel(tsdiffim.getImage().getArray() /
539 np.sqrt(torig.getVariance().getArray())))
541 candidateResids.append(np.ravel(tdiffim.getImage().getArray() /
542 np.sqrt(tdiffim.getVariance().getArray())))
543 spatialResids.append(np.ravel(tsdiffim.getImage().getArray() /
544 np.sqrt(tsdiffim.getVariance().getArray())))
546 fullIm = diffExposure.getMaskedImage().getImage().getArray()
547 fullMask = diffExposure.getMaskedImage().getMask().getArray()
549 fullVar = exposure.getMaskedImage().getVariance().getArray()
551 fullVar = diffExposure.getMaskedImage().getVariance().getArray()
554 bitmaskBad |= afwImage.Mask.getPlaneBitMask(
'NO_DATA')
555 bitmaskBad |= afwImage.Mask.getPlaneBitMask(
'SAT')
556 idx = np.where((fullMask & bitmaskBad) == 0)
557 stride =
int(len(idx[0])//nptsFull)
558 sidx = idx[0][::stride], idx[1][::stride]
559 allResids = fullIm[sidx]/np.sqrt(fullVar[sidx])
561 testFootprints = diffimTools.sourceToFootprintList(testSources, warpedTemplateExposure,
562 exposure, config, Log.getDefaultLogger())
563 for fp
in testFootprints:
564 subexp = diffExposure.Factory(diffExposure, fp[
"footprint"].getBBox())
565 subim = subexp.getMaskedImage().getImage()
567 subvar = afwImage.ExposureF(exposure, fp[
"footprint"].getBBox()).getMaskedImage().getVariance()
569 subvar = subexp.getMaskedImage().getVariance()
570 nonfitResids.append(np.ravel(subim.getArray()/np.sqrt(subvar.getArray())))
572 candidateResids = np.ravel(np.array(candidateResids))
573 spatialResids = np.ravel(np.array(spatialResids))
574 nonfitResids = np.ravel(np.array(nonfitResids))
578 from matplotlib.font_manager
import FontProperties
579 except ImportError
as e:
580 print(
"Unable to import pylab: %s" % e)
586 fig.canvas._tkcanvas._root().lift()
590 fig.suptitle(
"Diffim residuals: Normalized by sqrt(input variance)", fontsize=titleFs)
592 fig.suptitle(
"Diffim residuals: Normalized by sqrt(diffim variance)", fontsize=titleFs)
594 sp1 = pylab.subplot(221)
595 sp2 = pylab.subplot(222, sharex=sp1, sharey=sp1)
596 sp3 = pylab.subplot(223, sharex=sp1, sharey=sp1)
597 sp4 = pylab.subplot(224, sharex=sp1, sharey=sp1)
598 xs = np.arange(-5, 5.05, 0.1)
599 ys = 1./np.sqrt(2*np.pi)*np.exp(-0.5*xs**2)
601 sp1.hist(candidateResids, bins=xs, normed=
True, alpha=0.5, label=
"N(%.2f, %.2f)" 602 % (np.mean(candidateResids), np.var(candidateResids)))
603 sp1.plot(xs, ys,
"r-", lw=2, label=
"N(0,1)")
604 sp1.set_title(
"Candidates: basis fit", fontsize=titleFs - 2)
605 sp1.legend(loc=1, fancybox=
True, shadow=
True, prop=FontProperties(size=titleFs - 6))
607 sp2.hist(spatialResids, bins=xs, normed=
True, alpha=0.5, label=
"N(%.2f, %.2f)" 608 % (np.mean(spatialResids), np.var(spatialResids)))
609 sp2.plot(xs, ys,
"r-", lw=2, label=
"N(0,1)")
610 sp2.set_title(
"Candidates: spatial fit", fontsize=titleFs - 2)
611 sp2.legend(loc=1, fancybox=
True, shadow=
True, prop=FontProperties(size=titleFs - 6))
613 sp3.hist(nonfitResids, bins=xs, normed=
True, alpha=0.5, label=
"N(%.2f, %.2f)" 614 % (np.mean(nonfitResids), np.var(nonfitResids)))
615 sp3.plot(xs, ys,
"r-", lw=2, label=
"N(0,1)")
616 sp3.set_title(
"Control sample: spatial fit", fontsize=titleFs - 2)
617 sp3.legend(loc=1, fancybox=
True, shadow=
True, prop=FontProperties(size=titleFs - 6))
619 sp4.hist(allResids, bins=xs, normed=
True, alpha=0.5, label=
"N(%.2f, %.2f)" 620 % (np.mean(allResids), np.var(allResids)))
621 sp4.plot(xs, ys,
"r-", lw=2, label=
"N(0,1)")
622 sp4.set_title(
"Full image (subsampled)", fontsize=titleFs - 2)
623 sp4.legend(loc=1, fancybox=
True, shadow=
True, prop=FontProperties(size=titleFs - 6))
625 pylab.setp(sp1.get_xticklabels() + sp1.get_yticklabels(), fontsize=titleFs - 4)
626 pylab.setp(sp2.get_xticklabels() + sp2.get_yticklabels(), fontsize=titleFs - 4)
627 pylab.setp(sp3.get_xticklabels() + sp3.get_yticklabels(), fontsize=titleFs - 4)
628 pylab.setp(sp4.get_xticklabels() + sp4.get_yticklabels(), fontsize=titleFs - 4)
635 if keepPlots
and not keptPlots:
638 print(
"%s: Please close plots when done." % __name__)
643 print(
"Plots closed, exiting...")
645 atexit.register(show)
A kernel created from an Image.