ResetGreenDetector

Bases: KPFFunction

Resets the kpfgreen detector

ARGS:

None

Source code in kpf/spectrograph/ResetDetectors.py
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
class ResetGreenDetector(KPFFunction):
    '''Resets the kpfgreen detector

    ARGS:
    =====
    None
    '''
    @classmethod
    def pre_condition(cls, args):
        pass

    @classmethod
    def perform(cls, args):
        # Check if the auto reset is already doing this
        current_expstate  = ktl.cache('kpfgreen', 'EXPSTATE')
        current_expstate.read()
        if current_expstate == 'Resetting':
            return
        elif current_expstate == 'Exposing':
            log.warning('Can not send reset during exposure')
            return
        # Send the reset
        expose = ktl.cache('kpfgreen', 'EXPOSE')
        log.warning(f"Resetting: kpfgreen.EXPOSE = Reset")
        expose.write('Reset')
        log.debug('Reset command sent')

    @classmethod
    def post_condition(cls, args):
        timeout = cfg.getfloat('times', 'kpfexpose_reset_time', fallback=10)
        log.warning(f"Waiting for kpfgreen to be Readout or Ready")
        expr = f"($kpfgreen.EXPOSE == 'Ready') or ($kpfgreen.EXPOSE == 'Readout')"
        success = ktl.waitFor(expr, timeout=timeout)
        if success is not True:
            expose = ktl.cache('kpfgreen', 'EXPOSE')
            raise FailedToReachDestination(expose.read(), 'Ready or Readout')
        else:
            kpfexpose = ktl.cache('kpfexpose')
            log.info(f"ResetGreenDetector done")
            log.info(f"kpfexpose.EXPOSE = {kpfexpose['EXPOSE'].read()}")
            log.info(f"kpfexpose.EXPLAINR = {kpfexpose['EXPLAINR'].read()}")
            log.info(f"kpfexpose.EXPLAINNR = {kpfexpose['EXPLAINNR'].read()}")