Commit d920a33e authored by Zhang Xin's avatar Zhang Xin
Browse files

fix bug sls: spec shift along y direction

parent 966f2132
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -122,7 +122,7 @@ class SpecDisperser(object):
                                                                 beam=beam)

        ### Account for pixel centering of the trace
        yfrac_beam = ytrace_beam - floor(ytrace_beam)
        yfrac_beam = ytrace_beam - floor(ytrace_beam+0.5)

        ysens = lam_beam * 0
        lam_index = argsort(lam_beam)
@@ -155,7 +155,7 @@ class SpecDisperser(object):
        sensitivity_beam = ysens

        len_spec_x = len(dx)
        len_spec_y = int(ceil(yfrac_beam[-1]) - floor(yfrac_beam[0]) + 1)
        len_spec_y = int(ceil(ytrace_beam[-1]) - floor(ytrace_beam[0]) + 1)

        beam_sh = (self.img_sh[0] + len_spec_y, self.img_sh[1] + len_spec_x)
        modelf = zeros(product(beam_sh), dtype=float)
@@ -165,9 +165,15 @@ class SpecDisperser(object):

        dxpix = dx - dx[0] + x0[1]

        dyc = cast[int](ytrace_beam)
        dyc = cast[int](np.floor(ytrace_beam+0.5))

        dypix = cast[int](np.floor(ytrace_beam - dyc[0] + x0[0] + 0.5))

        frac_ids =  yfrac_beam<0

        dypix[frac_ids] = dypix[frac_ids] - 1
        yfrac_beam[frac_ids] = 1+yfrac_beam[frac_ids]

        dypix = dyc - dyc[0] + x0[0]
        flat_index = idx[dypix, dxpix]

        nonz = sensitivity_beam != 0
+6 −6
Original line number Diff line number Diff line
@@ -86,12 +86,12 @@ def disperse_grism_object(np.ndarray[FTYPE_t, ndim=2] flam,
                    k1 = idxl[k]+j*shg[1]+i
                    if (k1 >= 0) & (k1 < nl):
                        flat_ids = k1*nlamb+k
                        full[k1] += fl_ij*yfrac[k]*flat_eff_all[flat_ids]
                        full[k1] += fl_ij*(1-yfrac[k])*flat_eff_all[flat_ids]

                    k2 = idxl[k]+(j-1)*shg[1]+i
                    k2 = idxl[k]+(j+1)*shg[1]+i
                    if (k2 >= 0) & (k2 < nl):
                        flat_ids = k2*nlamb+k
                        full[k2] += fl_ij*(1-yfrac[k])*flat_eff_all[flat_ids]
                        full[k2] += fl_ij*yfrac[k]*flat_eff_all[flat_ids]

    else:
        for i in range(0-x0[1], x0[1]):
@@ -109,11 +109,11 @@ def disperse_grism_object(np.ndarray[FTYPE_t, ndim=2] flam,
                for k in range(nk):
                    k1 = idxl[k]+j*shg[1]+i
                    if (k1 >= 0) & (k1 < nl):
                        full[k1] += ysens[k]*fl_ij*yfrac[k]
                        full[k1] += ysens[k]*fl_ij*(1-yfrac[k])

                    k2 = idxl[k]+(j-1)*shg[1]+i
                    k2 = idxl[k]+(j+1)*shg[1]+i
                    if (k2 >= 0) & (k2 < nl):
                        full[k2] += ysens[k]*fl_ij*(1-yfrac[k])
                        full[k2] += ysens[k]*fl_ij*yfrac[k]

    return True