def __init__(self, factory): self._elements = {} self.imagecount = PersistentRunCounter('r00%04d.fits') self.mode = 'null' self.ins = 'MEGARA' self.seqs = megara_sequences() self.factory = factory self.ob_data = dict(count=0, repeat=0, name=None, obsid=1) self.targets = None
class ControlSystem(object): """Top level""" def __init__(self, factory): self._elements = {} self.imagecount = PersistentRunCounter('r00%04d.fits') self.mode = 'null' self.ins = 'MEGARA' self.seqs = megara_sequences() self.factory = factory self.ob_data = dict(count=0, repeat=0, name=None, obsid=1) self.targets = None def register(self, name, element): self._elements[name] = element def get(self, name): return self._elements[name] def set_mode(self, mode): self.mode = mode def set_targets(self, targets_description): # Process targets here targets = targets_description['targets'] tlist = [] for m in targets: entry = targets[m] profile_entry = entry['profile'] profile = profile_builder(profile_entry) spectrum_entry = entry['spectrum'] filename = spectrum_entry['sed'] factor = spectrum_entry.get('factor', 1.0) spectrum_entry['sed'] = InterpolFile(filename, factor=factor) spectrum = spectrum_entry relposition = entry['relposition'] tar = Target(m, relposition, profile=profile, spectrum=spectrum) tlist.append(tar) self.targets = tlist def run(self, exposure, repeat=1): if repeat < 1: return _logger.info('mode is %s', self.mode) try: thiss = self.seqs[self.mode] except KeyError: _logger.error('No sequence for mode %s', self.mode) raise iterf = thiss.run(self, exposure, repeat) self.ob_data['repeat'] = repeat self.ob_data['name'] = None for count, final in enumerate(iterf, 1): _logger.info('image %d of %d', count, repeat) self.ob_data['name'] = self.imagecount.runstring() self.ob_data['count'] = count fitsfile = self.factory.create(final, self.ob_data['name'], self) _logger.info('save image %s', self.ob_data['name']) fitsfile.writeto(self.ob_data['name'], clobber=True) def config_info(self): return {'ob_data': self.ob_data} def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.imagecount.__exit__(exc_type, exc_val, exc_tb)