def METHOD_NAME(self):
    # generate timestreams
    op = OpSimNoise()
    op.exec(self.data)
    # Replace the noise with a polynomial fit
    old_rms = []
    for ob in self.data.obs:
        tod = ob["tod"]
        orms = {}
        for det in tod.local_dets:
            cachename = "noise_{}".format(det)
            y = tod.cache.reference(cachename)
            x = np.arange(y.size)
            p = np.polyfit(x, y, self.order)
            y[:] = np.polyval(p, x)
            orms[det] = np.std(y)
            del y
        old_rms.append(orms)
    # Filter timestreams
    op = OpPolyFilter(name="noise", order=self.order)
    op.exec(self.data)
    # Ensure all timestreams are zeroed out by the filter.
    # The polynomial basis used in populating the TOD is different
    # than the one filter uses and the basis functions are not
    # strictly orthogonal on a sparse grid so we expect a low level
    # residual.
    for ob, orms in zip(self.data.obs, old_rms):
        tod = ob["tod"]
        for det in tod.local_dets:
            cachename = "noise_{}".format(det)
            y = tod.cache.reference(cachename)
            rms = np.std(y)
            old = orms[det]
            if np.abs(rms / old) > 1e-6:
                raise RuntimeError(
                    "det {} old rms = {}, new rms = {}".format(det, old, rms)
                )
            del y
    return