diff --git a/src/cal_tools/agipdlib.py b/src/cal_tools/agipdlib.py index 88c3413cc623efda893852293865abc2b90db701..2f4046a6c88193319545e9102b7d704a57cae8fc 100644 --- a/src/cal_tools/agipdlib.py +++ b/src/cal_tools/agipdlib.py @@ -53,12 +53,19 @@ class AgipdCtrl: self.ctrl_src = ctrl_src self.raise_error = raise_error - def get_num_cells(self) -> Optional[int]: - """Read number of memory cells from fast data. + def _get_num_cells_ctrl(self) -> Optional[int]: + """Get number of cells from CONTROL source.""" + # Attempt to look for number of cells in slow data + ncell_src = ( + self.ctrl_src, "bunchStructure.nPulses.value") + if ( + ncell_src[0] in self.run_dc.all_sources and + ncell_src[1] in self.run_dc.keys_for_source(ncell_src[0]) + ): + return int(self.run_dc[ncell_src].as_single_value(reduce_by='max')) - :return mem_cells: Number of memory cells - return None, if no data available. - """ + def _get_num_cells_instr(self) -> Optional[int]: + """Get number of cells from INSTRUMENT source.""" cells = np.squeeze( self.run_dc[ self.image_src, "image.cellId"].drop_empty_trains().ndarray() @@ -70,6 +77,20 @@ class AgipdCtrl: dists = [abs(o - maxcell) for o in options] return options[np.argmin(dists)] + def get_num_cells(self) -> Optional[int]: + """Read number of memory cells from fast data. + + :return mem_cells: Number of memory cells + return None, if no data available. + """ + ncell = self._get_num_cells_ctrl() + if ncell is not None: + return ncell + # The method implemented in this function doesn't suit for filtered + # data. If DAQ filters data and the last cell is removed, the + # function returns wrong value + return self._get_num_cells_instr() + def _get_acq_rate_ctrl(self) -> Optional[float]: """Get acquisition (repetition) rate from CONTROL source.""" # Attempt to look for acquisition rate in slow data @@ -83,9 +104,6 @@ class AgipdCtrl: # about bucketing the rate for managing meta-data. return round(float(self.run_dc[rep_rate_src].as_single_value()), 1) - def _get_acq_rate_instr(self) -> Optional[float]: - """Get acquisition (repetition rate) from INSTRUMENT source.""" - def _get_acq_rate_instr(self) -> Optional[float]: """Get acquisition (repetition rate) from INSTRUMENT source."""