Page History
...
Two keys variables when running in integrating-detector mode: PS_SMD_N_EVENTS (and environment variable) which is how many events SMD0 will send to each EB core, and the batch_size kwarg which controls how many events the EB cores send to the BD cores. When running integrating detectors then the "units" of these two variables change from being "high-rate events" to being "low-rate integrating-detector events". batch_size should be set to less than PS_SMD_N_EVENTS. We can consider trying to simplify this interface in the future.
NOTE: part of psana ("SMD0") has buffers that need to be large enough to accommodate at least one event from the integrating detector. If PS_SMD_N_EVENTS is set too large and this is not possible then an error message is printed and psana exits.
Code Block | ||||
---|---|---|---|---|
| ||||
# The PS_SMD_N_EVENTS should be set to a small number (e.g. 1) # since all other events which are part of this intg. event will be sent # in the same batch. import os os.environ['PS_SMD_N_EVENTS'] = '1' batch_size = 1 from psana import DataSource ds = DataSource(exp='xpptut15', run=1, dir='/cds/data/psdm/prj/public01/xtc/intg_det', intg_det='andor', batch_size=batch_size) run = next(ds.runs()) hsd = run.Detector('hsd') andor = run.Detector('andor') # Test calculating sum of the hsd for each integrating event. sum_hsd = 0 for i_evt, evt in enumerate(run.events()): hsd_calib = hsd.raw.calib(evt) andor_calib = andor.raw.calib(evt) # Keep summing the value of the other detector (hsd in this case) sum_hsd += np.sum(hsd_calib[:])/np.prod(hsd_calib.shape) # When an integrating event is found, print out and reset the sum variable if andor_calib is not None: val_andor = np.sum(andor_calib[:])/np.prod(andor_calib.shape) print(f'i_evt: {i_evt} andor: {val_andor} sum_hsd:{sum_hsd}') sum_hsd = 0 |
...