def event(self, evt, env): """The event() function puts a "skip_event" object with value @c True into the event if the shot is to be skipped. @param evt Event data object, a configure object @param env Environment object """ self.nshots += 1 if (evt.get("skip_event")): return # Get time as a (seconds, milliseconds) tuple. t = cspad_tbx.evt_time(evt) if (t is None): self.logger.warning("event(): no timestamp, shot skipped") evt.put(skip_event_flag(), "skip_event") return # Update laser status. self.laser_1.set_status(cspad_tbx.env_laser_status(env, laser_id=1), t) self.laser_4.set_status(cspad_tbx.env_laser_status(env, laser_id=4), t) t1 = self.laser_1.ms_since_last_status_change(t) t4 = self.laser_4.ms_since_last_status_change(t) if (self.laser_4.status or (t4 is not None and t4 < self._wait) or (t1 is not None and t1 < self._wait)): # If laser 4 is on or was switched off less than self._wait ms # ago, the shot falls in the "other" category. If laser 1 # changed its state less than self._wait ms ago the shot falls # in the "other" category. if (self._filter != "other"): evt.put(skip_event_flag(), "skip_event") return elif (self.laser_1.status): # If laser 1 is on the shot falls in the "light" category. if (self._filter != "light"): evt.put(skip_event_flag(), "skip_event") return elif (not self.laser_1.status): # If laser 1 is off the shot falls in the "dark" category. if (self._filter != "dark"): evt.put(skip_event_flag(), "skip_event") return else: # NOTREACHED self.logger.error("Could not determine shot category") raise RuntimeError("XXX") self.naccepted += 1
def event(self, evt, env): """The event() function is called for every L1Accept transition. @param evt Event data object, a configure object @param env Environment object """ # Increase the event counter, even if this event is to be skipped. self.nshots += 1 if (evt.get("skip_event")): return sifoil = cspad_tbx.env_sifoil(env) if self.check_beam_status and sifoil is None: self.nfail += 1 self.logger.warning("event(): no Si-foil thickness, shot skipped") evt.put(skip_event_flag(), "skip_event") return if (self.sifoil is not None and self.sifoil != sifoil): self.logger.warning("event(): Si-foil changed mid-run: % 8i -> % 8d" % (self.sifoil, sifoil)) self.sifoil = sifoil if self.verbose: self.logger.info("Si-foil thickness: %i" %sifoil) self.evt_time = cspad_tbx.evt_time(evt) # tuple of seconds, milliseconds self.timestamp = cspad_tbx.evt_timestamp(self.evt_time) # human readable format if (self.timestamp is None): self.nfail += 1 self.logger.warning("event(): no timestamp, shot skipped") evt.put(skip_event_flag(), "skip_event") return if self.verbose: self.logger.info(self.timestamp) if self.override_energy is None: self.wavelength = cspad_tbx.evt_wavelength(evt, self.delta_k) if self.wavelength is None: if self.check_beam_status: self.nfail += 1 self.logger.warning("event(): no wavelength, shot skipped") evt.put(skip_event_flag(), "skip_event") return else: self.wavelength = 0 else: self.wavelength = 12398.4187/self.override_energy if self.verbose: self.logger.info("Wavelength: %.4f" %self.wavelength) self.pulse_length = cspad_tbx.evt_pulse_length(evt) if self.pulse_length is None: if self.check_beam_status: self.nfail += 1 self.logger.warning("event(): no pulse length, shot skipped") evt.put(skip_event_flag(), "skip_event") return else: self.pulse_length = 0 if self.verbose: self.logger.info("Pulse length: %s" %self.pulse_length) self.beam_charge = cspad_tbx.evt_beam_charge(evt) if self.beam_charge is None: if self.check_beam_status: self.nfail += 1 self.logger.warning("event(): no beam charge, shot skipped") evt.put(skip_event_flag(), "skip_event") return else: self.beam_charge = 0 if self.verbose: self.logger.info("Beam charge: %s" %self.beam_charge) self.injector_xyz = cspad_tbx.env_injector_xyz(env) #if self.injector_xyz is not None: #self.logger.info("injector_z: %i" %self.injector_xyz[2].value) self.laser_1_status.set_status(cspad_tbx.env_laser_status(env, laser_id=1), self.evt_time) self.laser_4_status.set_status(cspad_tbx.env_laser_status(env, laser_id=4), self.evt_time) self.laser_1_ms_since_change = self.laser_1_status.ms_since_last_status_change(self.evt_time) self.laser_4_ms_since_change = self.laser_4_status.ms_since_last_status_change(self.evt_time) if self.verbose: if self.laser_1_ms_since_change is not None: self.logger.info("ms since laser 1 status change: %i" %self.laser_1_ms_since_change) if self.laser_4_ms_since_change is not None: self.logger.info("ms since laser 4 status change: %i" %self.laser_4_ms_since_change) if self.laser_1_status is not None and self.laser_1_status.status is not None: self.logger.info("Laser 1 status: %i" %int(self.laser_1_status.status)) if self.laser_4_status is not None and self.laser_4_status.status is not None: self.logger.info("Laser 4 status: %i" %int(self.laser_4_status.status))
def event (self, evt, env) : if (evt.get("skip_event")) : return self.nshots += 1 s = None t = evt.getTime() if (t is not None): s = t.seconds() + (t.nanoseconds() / 1000000000) else : self.nfail += 1 self.logger.warning("event(): no timestamp, shot skipped") evt.put(skip_event_flag(), "skip_event") return if (not isinstance(s, float)) : raise RuntimeError("Wrong type for 's': %s" % type(s).__name__) # XXX This hardcodes the address for the front detector! det_z = cspad_tbx.env_detz('CxiDs1-0|Cspad-0', env) if (det_z is None): self.nfail += 1 self.logger.warning("event(): no distance, shot skipped") evt.put(skip_event_flag(), "skip_event") return laser01 = cspad_tbx.env_laser_status(env, 1) if laser01 is None: self.nfail += 1 self.logger.warning("event(): no status for laser 1, shot skipped") evt.put(skip_event_flag(), 'skip_event') return laser04 = cspad_tbx.env_laser_status(env, 4) if laser04 is None: self.nfail += 1 self.logger.warning("event(): no status for laser 4, shot skipped") evt.put(skip_event_flag(), 'skip_event') return # Laser power for fourth laser. The control name was provided by # Jan Kern. XXX Move to its own function in cspad_tbx? laser04_power = None if env is not None: pv = env.epicsStore().value('CXI:LAS:MMN:02:ROT.RBV') if pv is not None and len(pv.values) == 1: laser04_power = pv.values[0] if laser04_power is None: self.nfail += 1 self.logger.warning("event(): no power for laser 4, shot skipped") evt.put(skip_event_flag(), 'skip_event') return si_foil = cspad_tbx.env_sifoil(env) if (si_foil is None): self.nfail += 1 self.logger.warning("event(): no Si-foil thickness, shot skipped") evt.put(skip_event_flag(), "skip_event") return if (not (isinstance(si_foil, float) or isinstance(si_foil, int))) : raise RuntimeError("Wrong type for 'si_foil': %s"% type(si_foil).__name__) wavelength = cspad_tbx.evt_wavelength(evt) if (wavelength is None): self.nfail += 1 self.logger.warning("event(): no wavelength, shot skipped") evt.put(skip_event_flag(), "skip_event") return # In order to keep all arrays the same length, only append once # all values have been successfully obtained. XXX Still bugs: see # June run 119. self._t.append(s) self._si_foil.append(si_foil) self._wavelength.append(wavelength) self._det_z.append(det_z) self._laser01.append(laser01) self._laser04.append(laser04) self._laser04_power.append(laser04_power) if (self.nshots % 120 == 0) : self.update_plot()
def event(self, evt, env): """The event() function is called for every L1Accept transition. @param evt Event data object, a configure object @param env Environment object """ # Increase the event counter, even if this event is to be skipped. self.nshots += 1 if (evt.get("skip_event")): return sifoil = cspad_tbx.env_sifoil(env) if self.check_beam_status and sifoil is None: self.nfail += 1 self.logger.warning("event(): no Si-foil thickness, shot skipped") evt.put(skip_event_flag(), "skip_event") return if (self.sifoil is not None and self.sifoil != sifoil): self.logger.warning( "event(): Si-foil changed mid-run: % 8i -> % 8d" % (self.sifoil, sifoil)) self.sifoil = sifoil if self.verbose: self.logger.info("Si-foil thickness: %i" % sifoil) self.evt_time = cspad_tbx.evt_time( evt) # tuple of seconds, milliseconds self.timestamp = cspad_tbx.evt_timestamp( self.evt_time) # human readable format if (self.timestamp is None): self.nfail += 1 self.logger.warning("event(): no timestamp, shot skipped") evt.put(skip_event_flag(), "skip_event") return if self.verbose: self.logger.info(self.timestamp) if self.override_energy is None: self.wavelength = cspad_tbx.evt_wavelength(evt, self.delta_k) if self.wavelength is None: if self.check_beam_status: self.nfail += 1 self.logger.warning("event(): no wavelength, shot skipped") evt.put(skip_event_flag(), "skip_event") return else: self.wavelength = 0 else: self.wavelength = 12398.4187 / self.override_energy if self.verbose: self.logger.info("Wavelength: %.4f" % self.wavelength) self.pulse_length = cspad_tbx.evt_pulse_length(evt) if self.pulse_length is None: if self.check_beam_status: self.nfail += 1 self.logger.warning("event(): no pulse length, shot skipped") evt.put(skip_event_flag(), "skip_event") return else: self.pulse_length = 0 if self.verbose: self.logger.info("Pulse length: %s" % self.pulse_length) self.beam_charge = cspad_tbx.evt_beam_charge(evt) if self.beam_charge is None: if self.check_beam_status: self.nfail += 1 self.logger.warning("event(): no beam charge, shot skipped") evt.put(skip_event_flag(), "skip_event") return else: self.beam_charge = 0 if self.verbose: self.logger.info("Beam charge: %s" % self.beam_charge) self.injector_xyz = cspad_tbx.env_injector_xyz(env) #if self.injector_xyz is not None: #self.logger.info("injector_z: %i" %self.injector_xyz[2].value) self.laser_1_status.set_status( cspad_tbx.env_laser_status(env, laser_id=1), self.evt_time) self.laser_4_status.set_status( cspad_tbx.env_laser_status(env, laser_id=4), self.evt_time) self.laser_1_ms_since_change = self.laser_1_status.ms_since_last_status_change( self.evt_time) self.laser_4_ms_since_change = self.laser_4_status.ms_since_last_status_change( self.evt_time) if self.verbose: if self.laser_1_ms_since_change is not None: self.logger.info("ms since laser 1 status change: %i" % self.laser_1_ms_since_change) if self.laser_4_ms_since_change is not None: self.logger.info("ms since laser 4 status change: %i" % self.laser_4_ms_since_change) if self.laser_1_status is not None and self.laser_1_status.status is not None: self.logger.info("Laser 1 status: %i" % int(self.laser_1_status.status)) if self.laser_4_status is not None and self.laser_4_status.status is not None: self.logger.info("Laser 4 status: %i" % int(self.laser_4_status.status))
def event(self, evt, env): if (evt.get("skip_event")): return self.nshots += 1 s = None t = evt.getTime() if (t is not None): s = t.seconds() + (t.nanoseconds() / 1000000000) else: self.nfail += 1 self.logger.warning("event(): no timestamp, shot skipped") evt.put(skip_event_flag(), "skip_event") return if (not isinstance(s, float)): raise RuntimeError("Wrong type for 's': %s" % type(s).__name__) # XXX This hardcodes the address for the front detector! det_z = cspad_tbx.env_detz('CxiDs1-0|Cspad-0', env) if (det_z is None): self.nfail += 1 self.logger.warning("event(): no distance, shot skipped") evt.put(skip_event_flag(), "skip_event") return laser01 = cspad_tbx.env_laser_status(env, 1) if laser01 is None: self.nfail += 1 self.logger.warning("event(): no status for laser 1, shot skipped") evt.put(skip_event_flag(), 'skip_event') return laser04 = cspad_tbx.env_laser_status(env, 4) if laser04 is None: self.nfail += 1 self.logger.warning("event(): no status for laser 4, shot skipped") evt.put(skip_event_flag(), 'skip_event') return # Laser power for fourth laser. The control name was provided by # Jan Kern. XXX Move to its own function in cspad_tbx? laser04_power = None if env is not None: pv = env.epicsStore().value('CXI:LAS:MMN:02:ROT.RBV') if pv is not None and len(pv.values) == 1: laser04_power = pv.values[0] if laser04_power is None: self.nfail += 1 self.logger.warning("event(): no power for laser 4, shot skipped") evt.put(skip_event_flag(), 'skip_event') return si_foil = cspad_tbx.env_sifoil(env) if (si_foil is None): self.nfail += 1 self.logger.warning("event(): no Si-foil thickness, shot skipped") evt.put(skip_event_flag(), "skip_event") return if (not (isinstance(si_foil, float) or isinstance(si_foil, int))): raise RuntimeError("Wrong type for 'si_foil': %s" % type(si_foil).__name__) wavelength = cspad_tbx.evt_wavelength(evt) if (wavelength is None): self.nfail += 1 self.logger.warning("event(): no wavelength, shot skipped") evt.put(skip_event_flag(), "skip_event") return # In order to keep all arrays the same length, only append once # all values have been successfully obtained. XXX Still bugs: see # June run 119. self._t.append(s) self._si_foil.append(si_foil) self._wavelength.append(wavelength) self._det_z.append(det_z) self._laser01.append(laser01) self._laser04.append(laser04) self._laser04_power.append(laser04_power) if (self.nshots % 120 == 0): self.update_plot()