Skip to content

Commit

Permalink
Merge pull request #2341 from desihub/tsnr-of-bad-fibers
Browse files Browse the repository at this point in the history
Fix TSNR value when cframe mask or ivar=0
  • Loading branch information
sbailey committed Aug 23, 2024
2 parents 2919ae2 + f0c8c87 commit 6796c59
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 8 deletions.
3 changes: 2 additions & 1 deletion bin/desi_tsnr_afterburner
Original file line number Diff line number Diff line change
Expand Up @@ -210,12 +210,13 @@ def compute_tsnr_values(cframe_filename,cframe_hdulist,night,expid,camera,specpr
sky = cframe_filename.replace('cframe', 'sky')
psf = cframe_filename.replace('cframe', 'psf')

cframe=read_frame(cframe_filename, skip_resolution=True)
frame=read_frame(iin, skip_resolution=True)
fiberflat=read_fiberflat(flat)
fluxcalib=read_flux_calibration(calib)
skymodel=read_sky(sky)

results, alpha = calc_tsnr2(frame, fiberflat=fiberflat,
results, alpha = calc_tsnr2(cframe, frame, fiberflat=fiberflat,
skymodel=skymodel, fluxcalib=fluxcalib, alpha_only=alpha_only)

table=Table()
Expand Down
2 changes: 1 addition & 1 deletion py/desispec/scripts/procexp.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ def main(args):

if not args.no_tsnr:
log.info("calculating tsnr")
results, alpha = calc_tsnr2(uncalibrated_frame, fiberflat=fiberflat, skymodel=skymodel, fluxcalib=fluxcalib, alpha_only=args.alpha_only)
results, alpha = calc_tsnr2(frame,uncalibrated_frame, fiberflat=fiberflat, skymodel=skymodel, fluxcalib=fluxcalib, alpha_only=args.alpha_only)

frame.meta['TSNRALPH'] = alpha

Expand Down
14 changes: 8 additions & 6 deletions py/desispec/tsnr.py
Original file line number Diff line number Diff line change
Expand Up @@ -896,7 +896,7 @@ def calc_tsnr_fiberfracs(fibermap, etc_fiberfracs, no_offsets=False):
# = (rel. fiber frac-offset correction for psf in seeing) / (rel. fiber frac-offset correction for psf in 1.1'') / plate scale**2 [flux calib * fiberflat]
#

notnull = rel_psf_loss_1p1 > 0.0
notnull = (rel_psf_loss_1p1 > 0.01) # do not do the subtle correction of relative fiber loss vs seeing compare to 1.1'' if the fiber is off target

for tracer in ['psf', 'mws', 'qso', 'lya', 'gpbbackup']:
tsnr_fiberfracs[tracer] = np.ones_like(rel_psf_loss)
Expand Down Expand Up @@ -965,13 +965,14 @@ def calc_tsnr2_cframe(cframe):
skymodel = read_sky(skyfile)
fluxcalib = read_flux_calibration(fluxcalibfile)

return calc_tsnr2(frame, fiberflat, skymodel, fluxcalib)
return calc_tsnr2(cframe, frame, fiberflat, skymodel, fluxcalib)

def calc_tsnr2(frame, fiberflat, skymodel, fluxcalib, alpha_only=False, include_poisson=True, include_fiberfracs=True):
def calc_tsnr2(cframe, frame, fiberflat, skymodel, fluxcalib, alpha_only=False, include_poisson=True, include_fiberfracs=True):
'''
Compute template SNR^2 values for a given frame
Args:
cframe : calibrated Frame object for one camera
frame : uncalibrated Frame object for one camera
fiberflat : FiberFlat object
sky : SkyModel object
Expand Down Expand Up @@ -1092,9 +1093,10 @@ def calc_tsnr2(frame, fiberflat, skymodel, fluxcalib, alpha_only=False, include_
if alpha_only:
return {}, alpha

maskfactor = np.ones_like(frame.mask, dtype=float)
maskfactor[frame.mask > 0] = 0.0
maskfactor *= (frame.ivar > 0.0)
# use cframe instead of frame mask and ivar
maskfactor = np.ones_like(cframe.mask, dtype=float)
maskfactor[cframe.mask > 0] = 0.0
maskfactor *= (cframe.ivar > 0.0)
tsnrs = {}

for tracer in ensemble.keys():
Expand Down

0 comments on commit 6796c59

Please sign in to comment.