Пример #1
0
 def forward(self, tod, amps, pmul=1):
     # Amps should be [nsrc,ndir,ndet|1,npol]
     params = self.params.copy()
     params[...,2:2+amps.shape[-1]]   = amps
     self.psrc.forward(tod, params, pmul=pmul)
     sampcut.gapfill_linear(self.cut, tod, inplace=True)
     return tod
Пример #2
0
def calc_model_constrained(tod,
                           cut,
                           srate=400,
                           mask_scale=0.3,
                           lim=3e-4,
                           maxiter=50,
                           verbose=False):
    # First do some simple gapfilling to avoid messing up the noise model
    tod = sampcut.gapfill_linear(cut, tod, inplace=False)
    ft = fft.rfft(tod) * tod.shape[1]**-0.5
    iN = nmat_measure.detvecs_jon(ft, srate)
    del ft
    iV = iN.ivar * mask_scale

    def A(x):
        x = x.reshape(tod.shape)
        Ax = iN.apply(x.copy())
        Ax += sampcut.gapfill_const(cut, x * iV[:, None], 0, inplace=True)
        return Ax.reshape(-1)

    b = sampcut.gapfill_const(cut, tod * iV[:, None], 0,
                              inplace=True).reshape(-1)
    x0 = sampcut.gapfill_linear(cut, tod).reshape(-1)
    solver = cg.CG(A, b, x0)
    while solver.i < maxiter and solver.err > lim:
        solver.step()
        if verbose:
            print("%5d %15.7e" % (solver.i, solver.err))
    res = solver.x.reshape(tod.shape)
    res = smooth(res, srate)
    return res
Пример #3
0
 def forward(self, tod, amps, pmul=1):
     # Amps should be [nsrc,ndir,ndet|1,npol]
     params = self.params.copy()
     # this assumes that the input amps params start from tqu onwards (no ra,dec)
     params[...,2:2+amps.shape[-1]]   = amps
     self.psrc.forward(tod, params, pmul=pmul)
     sampcut.gapfill_linear(self.cut, tod, inplace=True)
     return tod
Пример #4
0
 def backward(self, tod, amps=None, pmul=1, ncomp=3):
     params = self.params.copy()
     tod = sampcut.gapfill_linear(self.cut, tod, inplace=False, transpose=True)
     self.psrc.backward(tod, params, pmul=pmul)
     if amps is None: amps = params[...,2:2+ncomp]
     else: amps[:] = params[...,2:2+amps.shape[-1]]
     return amps
Пример #5
0
	def backward(self, tod, amps=None, pmul=1):
		params = self.params.copy()
		tod = sampcut.gapfill_linear(self.cut, tod, inplace=False, transpose=True)
		self.psrc.backward(tod, params, pmul=pmul)
		if amps is None: amps = params[...,2]
		else: amps[:] = params[...,2]
		return amps
Пример #6
0
def calc_model_constrained(tod, cut, srate=400, mask_scale=0.3, lim=3e-4, maxiter=50, verbose=False):
	# First do some simple gapfilling to avoid messing up the noise model
	tod = sampcut.gapfill_linear(cut, tod, inplace=False)
	ft = fft.rfft(tod) * tod.shape[1]**-0.5
	iN = nmat_measure.detvecs_jon(ft, srate)
	del ft
	iV = iN.ivar*mask_scale
	def A(x):
		x   = x.reshape(tod.shape)
		Ax  = iN.apply(x.copy())
		Ax += sampcut.gapfill_const(cut, x*iV[:,None], 0, inplace=True)
		return Ax.reshape(-1)
	b  = sampcut.gapfill_const(cut, tod*iV[:,None], 0, inplace=True).reshape(-1)
	x0 = sampcut.gapfill_linear(cut, tod).reshape(-1)
	solver = cg.CG(A, b, x0)
	while solver.i < maxiter and solver.err > lim:
		solver.step()
		if verbose:
			print "%5d %15.7e" % (solver.i, solver.err)
	return solver.x.reshape(tod.shape)
Пример #7
0
def gapfill_linear(tod, cut, inplace=False, overlap=None):
    overlap = config.get("gapfill_context", overlap)
    return sampcut.gapfill_linear(cut, tod, inplace=inplace, context=overlap)
Пример #8
0
	def forward(self, tod, amps, pmul=1):
		params = self.params.copy()
		params[...,2]   = amps
		self.psrc.forward(tod, params, pmul=pmul)
		sampcut.gapfill_linear(self.cut, tod, inplace=True)