From 36d54306b10898bb7851e56ddd75d4ab5efef054 Mon Sep 17 00:00:00 2001 From: Eddie Schlafly Date: Tue, 23 Feb 2021 17:42:09 -0800 Subject: [PATCH 1/3] Add parameters necessary for ETC integration to NTS. --- py/desisurvey/NTS.py | 33 ++++++++++++++++++++++-------- py/desisurvey/data/config-cmx.yaml | 6 ++++++ py/desisurvey/scripts/run_plan.py | 2 +- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/py/desisurvey/NTS.py b/py/desisurvey/NTS.py index f5dbb589..b6c1927e 100644 --- a/py/desisurvey/NTS.py +++ b/py/desisurvey/NTS.py @@ -344,10 +344,11 @@ def next_tile(self, conditions=None, exposure=None, constraints=None, (tileid, passnum, snr2frac_start, exposure_factor, airmass, sched_program, mjd_program_end) = result if tileid is None: - tile = {'s2n': 0., 'esttime': 0., 'exptime': 0., + tile = {'esttime': 0., 'exptime': 0., 'count': 0, 'maxtime': 0., 'fiberassign': 0, 'foundtile': False, - 'conditions': '', 'program': '', 'exposure_factor': 0} + 'conditions': '', 'program': '', 'exposure_factor': 0, + 'req_efftime': 0., 'sbprof': 'PSF'} self.requestlog.logresponse(tile) return tile @@ -359,6 +360,22 @@ def next_tile(self, conditions=None, exposure=None, constraints=None, tile_program = self.scheduler.tiles.tileprogram[idx] texp_tot, texp_remaining, nexp_remaining = self.ETC.estimate_exposure( tile_program, snr2frac_start, exposure_factor, nexp_completed=0) + efftime = getattr(self.config.nominal_exposure_time, tile_program, + None) + if efftime is not None: + efftime = efftime() + else: + efftime = 1000*u.s + efftime = float(efftime.to(u.s).value) + + sbprof = getattr(self.config, 'sbprof', None) + if sbprof is not None: + sbprof = getattr(sbprof, tile_program, None) + if sbprof is not None: + sbprof = sbprof() + if not isinstance(sbprof, str): + sbprof = 'PSF' + if tile_program not in ['DARK', 'GRAY', 'BRIGHT']: moon_up_factor = getattr(self.config, 'moon_up_factor') moon_up_factor = getattr(moon_up_factor, sched_program)() @@ -367,7 +384,6 @@ def next_tile(self, conditions=None, exposure=None, constraints=None, # avoid crossing program boundaries. texp_remaining = min([texp_remaining, mjd_program_end+15/24/60-mjd]) - s2n = 50.0 * texp_remaining/texp_tot exptime = texp_remaining maxtime = self.ETC.MAX_EXPTIME maxtimecond = getattr(self.config, 'maximum_time_in_conditions', @@ -406,16 +422,17 @@ def next_tile(self, conditions=None, exposure=None, constraints=None, minexptime = minexptime.to(u.s).value splitexptime = max([splitexptime, minexptime/days_to_seconds]) - selection = {'s2n': s2n, - 'esttime': exptime*days_to_seconds, + selection = {'esttime': exptime*days_to_seconds, 'exptime': splitexptime*days_to_seconds, 'count': count, - 'maxtime': maxtime*days_to_seconds, + 'maxtime': 3600.0, 'fiberassign': int(tileid), 'foundtile': True, 'conditions': sched_program, - 'program': tile_program, - 'exposure_factor': exposure_factor} + 'tile_program': tile_program, + 'exposure_factor': exposure_factor, + 'req_efftime': efftime, + 'sbprof': sbprof} if not speculative: self.queuedlist.add(tileid) self.log.info('Next selection: %r' % selection) diff --git a/py/desisurvey/data/config-cmx.yaml b/py/desisurvey/data/config-cmx.yaml index 28475091..6eefee57 100644 --- a/py/desisurvey/data/config-cmx.yaml +++ b/py/desisurvey/data/config-cmx.yaml @@ -114,6 +114,12 @@ nominal_conditions: transparency: 1.0 EBV: 0.0 +sbprof: + DARK: ELG + GRAY: ELG + BRIGHT: BGS + BACKUP: PSF + # Reobserve tiles that have not reached this fraction of their target SNR**2. # Keep this at one until we simulate errors in ETC integration. min_snr2_fraction: 1.0 diff --git a/py/desisurvey/scripts/run_plan.py b/py/desisurvey/scripts/run_plan.py index 0f14e825..dd28245d 100644 --- a/py/desisurvey/scripts/run_plan.py +++ b/py/desisurvey/scripts/run_plan.py @@ -74,7 +74,7 @@ def run_plan(nts_dir=None, verbose=False): ('%s %5.1f %6s %d %5.1f %5.1f %10s %3.1f ' '%4d %6s %3.1f/%3.1f/%3.1f') % ( mjd_to_azstr(t0), lst, res['conditions'], - res['fiberassign'], ra, dec, res['program'], + res['fiberassign'], ra, dec, res['tile_program'], res['exposure_factor'], res['esttime'].astype('i4'), ('%dx%d' % (res['count'], res['exptime'])), *nsofar)) t0 += (res['exptime']+180)*res['count']/60/60/24 From 4c1db66329c52351e2adb3118d0363bf02c38a53 Mon Sep 17 00:00:00 2001 From: Eddie Schlafly Date: Sun, 28 Feb 2021 13:42:30 -0800 Subject: [PATCH 2/3] Restore original program name in NTS return dictionary. --- py/desisurvey/NTS.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/desisurvey/NTS.py b/py/desisurvey/NTS.py index b6c1927e..847109d5 100644 --- a/py/desisurvey/NTS.py +++ b/py/desisurvey/NTS.py @@ -429,7 +429,7 @@ def next_tile(self, conditions=None, exposure=None, constraints=None, 'fiberassign': int(tileid), 'foundtile': True, 'conditions': sched_program, - 'tile_program': tile_program, + 'program': tile_program, 'exposure_factor': exposure_factor, 'req_efftime': efftime, 'sbprof': sbprof} From 9a56fd4ea91e384dadc90c416426f71cc047327c Mon Sep 17 00:00:00 2001 From: Eddie Schlafly Date: Sun, 28 Feb 2021 13:44:45 -0800 Subject: [PATCH 3/3] Use original 'program' keyword in interpreting NTS return values. --- py/desisurvey/scripts/run_plan.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/desisurvey/scripts/run_plan.py b/py/desisurvey/scripts/run_plan.py index dd28245d..0f14e825 100644 --- a/py/desisurvey/scripts/run_plan.py +++ b/py/desisurvey/scripts/run_plan.py @@ -74,7 +74,7 @@ def run_plan(nts_dir=None, verbose=False): ('%s %5.1f %6s %d %5.1f %5.1f %10s %3.1f ' '%4d %6s %3.1f/%3.1f/%3.1f') % ( mjd_to_azstr(t0), lst, res['conditions'], - res['fiberassign'], ra, dec, res['tile_program'], + res['fiberassign'], ra, dec, res['program'], res['exposure_factor'], res['esttime'].astype('i4'), ('%dx%d' % (res['count'], res['exptime'])), *nsofar)) t0 += (res['exptime']+180)*res['count']/60/60/24