672 origVariance=
False, nptsFull=1e6, keepPlots=
True, titleFs=14):
673 """Plot diffim residuals for LOCAL and SPATIAL models.
679 for cell
in kernelCellSet.getCellList():
680 for cand
in cell.begin(
True):
682 if not (cand.getStatus() == afwMath.SpatialCellCandidate.GOOD):
685 diffim = cand.getDifferenceImage(diffimLib.KernelCandidateF.ORIG)
686 orig = cand.getScienceMaskedImage()
688 ski = afwImage.ImageD(kernel.getDimensions())
689 kernel.computeImage(ski,
False,
int(cand.getXCenter()),
int(cand.getYCenter()))
692 sdiffim = cand.getDifferenceImage(sk, sbg)
695 bbox = kernel.shrinkBBox(diffim.getBBox())
696 tdiffim = diffim.Factory(diffim, bbox)
697 torig = orig.Factory(orig, bbox)
698 tsdiffim = sdiffim.Factory(sdiffim, bbox)
701 candidateResids.append(np.ravel(tdiffim.getImage().getArray()
702 / np.sqrt(torig.getVariance().getArray())))
703 spatialResids.append(np.ravel(tsdiffim.getImage().getArray()
704 / np.sqrt(torig.getVariance().getArray())))
706 candidateResids.append(np.ravel(tdiffim.getImage().getArray()
707 / np.sqrt(tdiffim.getVariance().getArray())))
708 spatialResids.append(np.ravel(tsdiffim.getImage().getArray()
709 / np.sqrt(tsdiffim.getVariance().getArray())))
711 fullIm = diffExposure.getMaskedImage().getImage().getArray()
712 fullMask = diffExposure.getMaskedImage().getMask().getArray()
714 fullVar = exposure.getMaskedImage().getVariance().getArray()
716 fullVar = diffExposure.getMaskedImage().getVariance().getArray()
719 bitmaskBad |= afwImage.Mask.getPlaneBitMask(
'NO_DATA')
720 bitmaskBad |= afwImage.Mask.getPlaneBitMask(
'SAT')
721 idx = np.where((fullMask & bitmaskBad) == 0)
722 stride =
int(len(idx[0])//nptsFull)
723 sidx = idx[0][::stride], idx[1][::stride]
724 allResids = fullIm[sidx]/np.sqrt(fullVar[sidx])
726 testFootprints = diffimTools.sourceToFootprintList(testSources, warpedTemplateExposure,
728 getLogger(__name__).getChild(
"plotPixelResiduals"))
729 for fp
in testFootprints:
730 subexp = diffExposure.Factory(diffExposure, fp[
"footprint"].getBBox())
731 subim = subexp.getMaskedImage().getImage()
733 subvar = afwImage.ExposureF(exposure, fp[
"footprint"].getBBox()).getMaskedImage().getVariance()
735 subvar = subexp.getMaskedImage().getVariance()
736 nonfitResids.append(np.ravel(subim.getArray()/np.sqrt(subvar.getArray())))
738 candidateResids = np.ravel(np.array(candidateResids))
739 spatialResids = np.ravel(np.array(spatialResids))
740 nonfitResids = np.ravel(np.array(nonfitResids))
744 from matplotlib.font_manager
import FontProperties
745 except ImportError
as e:
746 print(
"Unable to import pylab: %s" % e)
752 fig.canvas._tkcanvas._root().lift()
756 fig.suptitle(
"Diffim residuals: Normalized by sqrt(input variance)", fontsize=titleFs)
758 fig.suptitle(
"Diffim residuals: Normalized by sqrt(diffim variance)", fontsize=titleFs)
760 sp1 = pylab.subplot(221)
761 sp2 = pylab.subplot(222, sharex=sp1, sharey=sp1)
762 sp3 = pylab.subplot(223, sharex=sp1, sharey=sp1)
763 sp4 = pylab.subplot(224, sharex=sp1, sharey=sp1)
764 xs = np.arange(-5, 5.05, 0.1)
765 ys = 1./np.sqrt(2*np.pi)*np.exp(-0.5*xs**2)
767 sp1.hist(candidateResids, bins=xs, normed=
True, alpha=0.5, label=
"N(%.2f, %.2f)"
768 % (np.mean(candidateResids), np.var(candidateResids)))
769 sp1.plot(xs, ys,
"r-", lw=2, label=
"N(0,1)")
770 sp1.set_title(
"Candidates: basis fit", fontsize=titleFs - 2)
771 sp1.legend(loc=1, fancybox=
True, shadow=
True, prop=FontProperties(size=titleFs - 6))
773 sp2.hist(spatialResids, bins=xs, normed=
True, alpha=0.5, label=
"N(%.2f, %.2f)"
774 % (np.mean(spatialResids), np.var(spatialResids)))
775 sp2.plot(xs, ys,
"r-", lw=2, label=
"N(0,1)")
776 sp2.set_title(
"Candidates: spatial fit", fontsize=titleFs - 2)
777 sp2.legend(loc=1, fancybox=
True, shadow=
True, prop=FontProperties(size=titleFs - 6))
779 sp3.hist(nonfitResids, bins=xs, normed=
True, alpha=0.5, label=
"N(%.2f, %.2f)"
780 % (np.mean(nonfitResids), np.var(nonfitResids)))
781 sp3.plot(xs, ys,
"r-", lw=2, label=
"N(0,1)")
782 sp3.set_title(
"Control sample: spatial fit", fontsize=titleFs - 2)
783 sp3.legend(loc=1, fancybox=
True, shadow=
True, prop=FontProperties(size=titleFs - 6))
785 sp4.hist(allResids, bins=xs, normed=
True, alpha=0.5, label=
"N(%.2f, %.2f)"
786 % (np.mean(allResids), np.var(allResids)))
787 sp4.plot(xs, ys,
"r-", lw=2, label=
"N(0,1)")
788 sp4.set_title(
"Full image (subsampled)", fontsize=titleFs - 2)
789 sp4.legend(loc=1, fancybox=
True, shadow=
True, prop=FontProperties(size=titleFs - 6))
791 pylab.setp(sp1.get_xticklabels() + sp1.get_yticklabels(), fontsize=titleFs - 4)
792 pylab.setp(sp2.get_xticklabels() + sp2.get_yticklabels(), fontsize=titleFs - 4)
793 pylab.setp(sp3.get_xticklabels() + sp3.get_yticklabels(), fontsize=titleFs - 4)
794 pylab.setp(sp4.get_xticklabels() + sp4.get_yticklabels(), fontsize=titleFs - 4)
801 if keepPlots
and not keptPlots:
804 print(
"%s: Please close plots when done." % __name__)
809 print(
"Plots closed, exiting...")
811 atexit.register(show)
A kernel created from an Image.
def getLogger(loggername)