Generated by Cython 3.0.11
Yellow lines hint at Python interaction.
Click on a line that starts with a "+
" to see the C code that Cython generated for it.
Raw output: extension.pyx
001: from fcio_def cimport fcio_config
002:
003: cimport numpy
004:
+005: cdef class FCIOExt:
struct __pyx_obj_4fcio_FCIOExt { PyObject_HEAD struct __pyx_vtabstruct_4fcio_FCIOExt *__pyx_vtab; fcio_config *_config_ptr; int *_timestamp; int *_timeoffset; int *_deadregion; PyArrayObject *_tracemap; PyArrayObject *_card_addresses; PyArrayObject *_card_channels; int _num_channels_per_card; int _maxtraces; __pyx_t_5numpy_int64_t _utc_unix_ns; __pyx_t_5numpy_float64_t _utc_unix; __pyx_t_5numpy_int64_t _fpga_time_ns; __pyx_t_5numpy_int32_t _allowed_gps_error_ns; PyArrayObject *_start_time_ns; PyArrayObject *_cur_dead_time_ns; PyArrayObject *_total_dead_time_ns; struct __pyx_obj_4fcio_DeadIntervalBuffer *_dead_interval_buffer; int _tag; }; /* … */ struct __pyx_vtabstruct_4fcio_FCIOExt { PyObject *(*update)(struct __pyx_obj_4fcio_FCIOExt *); }; static struct __pyx_vtabstruct_4fcio_FCIOExt *__pyx_vtabptr_4fcio_FCIOExt;
006:
007: cdef fcio_config *_config_ptr
008: cdef int* _timestamp
009: cdef int* _timeoffset
010: cdef int* _deadregion
011:
012: # derived from config
013: cdef numpy.ndarray _tracemap
014: cdef numpy.ndarray _card_addresses
015: cdef numpy.ndarray _card_channels
016: cdef int _num_channels_per_card
017: cdef int _maxtraces
018:
019: # derived from event / recevent base information
020: cdef numpy.int64_t _utc_unix_ns
021: cdef numpy.float64_t _utc_unix
022:
023: cdef numpy.int64_t _fpga_time_ns
024:
025: cdef numpy.int32_t _allowed_gps_error_ns
026:
027: cdef numpy.ndarray _start_time_ns
028: cdef numpy.ndarray _cur_dead_time_ns
029: cdef numpy.ndarray _total_dead_time_ns
030:
031: cdef DeadIntervalBuffer _dead_interval_buffer
032:
033: cdef int _tag
034:
+035: def __cinit__(self, fcio : FCIO):
/* Python wrapper */ static int __pyx_pw_4fcio_7FCIOExt_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pw_4fcio_7FCIOExt_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { struct __pyx_obj_4fcio_FCIO *__pyx_v_fcio = 0; CYTHON_UNUSED Py_ssize_t __pyx_nargs; CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; #endif __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); { PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fcio,0}; PyObject* values[1] = {0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); switch (__pyx_nargs) { case 0: if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fcio)) != 0)) { (void)__Pyx_Arg_NewRef_VARARGS(values[0]); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 35, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__cinit__") < 0)) __PYX_ERR(2, 35, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); } __pyx_v_fcio = ((struct __pyx_obj_4fcio_FCIO *)values[0]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 35, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); } } __Pyx_AddTraceback("fcio.FCIOExt.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fcio), __pyx_ptype_4fcio_FCIO, 0, "fcio", 0))) __PYX_ERR(2, 35, __pyx_L1_error) __pyx_r = __pyx_pf_4fcio_7FCIOExt___cinit__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self), __pyx_v_fcio); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = -1; __pyx_L0:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); } } __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_pf_4fcio_7FCIOExt___cinit__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self, struct __pyx_obj_4fcio_FCIO *__pyx_v_fcio) { __Pyx_memviewslice __pyx_v_tracemap_view = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_r; /* … */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF((PyObject *)__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __PYX_XCLEAR_MEMVIEW(&__pyx_t_7, 1); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("fcio.FCIOExt.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __PYX_XCLEAR_MEMVIEW(&__pyx_v_tracemap_view, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; }
036:
+037: if isinstance(self, Event):
__pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_4fcio_Event);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+038: self._timestamp = fcio._fcio_data.event.timestamp
__pyx_t_2 = __pyx_v_fcio->_fcio_data->event.timestamp; __pyx_v_self->_timestamp = __pyx_t_2;
+039: self._timeoffset = fcio._fcio_data.event.timeoffset
__pyx_t_2 = __pyx_v_fcio->_fcio_data->event.timeoffset; __pyx_v_self->_timeoffset = __pyx_t_2;
+040: self._deadregion = fcio._fcio_data.event.deadregion
__pyx_t_2 = __pyx_v_fcio->_fcio_data->event.deadregion; __pyx_v_self->_deadregion = __pyx_t_2;
+041: elif isinstance(self, RecEvent):
__pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_4fcio_RecEvent);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L3;
}
+042: self._timestamp = fcio._fcio_data.recevent.timestamp
__pyx_t_2 = __pyx_v_fcio->_fcio_data->recevent.timestamp; __pyx_v_self->_timestamp = __pyx_t_2;
+043: self._timeoffset = fcio._fcio_data.recevent.timeoffset
__pyx_t_2 = __pyx_v_fcio->_fcio_data->recevent.timeoffset; __pyx_v_self->_timeoffset = __pyx_t_2;
+044: self._deadregion = fcio._fcio_data.recevent.deadregion
__pyx_t_2 = __pyx_v_fcio->_fcio_data->recevent.deadregion; __pyx_v_self->_deadregion = __pyx_t_2;
045: else:
+046: raise NotImplemented("FCIOExt does not implement an interface {type(self)}")
/*else*/ { __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_NotImplemented, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(2, 46, __pyx_L1_error) } __pyx_L3:; /* … */ __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_FCIOExt_does_not_implement_an_in); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(2, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__20); __Pyx_GIVEREF(__pyx_tuple__20);
047:
+048: self._config_ptr = &fcio._fcio_data.config
__pyx_v_self->_config_ptr = (&__pyx_v_fcio->_fcio_data->config);
049:
+050: self._dead_interval_buffer = DeadIntervalBuffer()
__pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4fcio_DeadIntervalBuffer)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 50, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF((PyObject *)__pyx_v_self->_dead_interval_buffer); __Pyx_DECREF((PyObject *)__pyx_v_self->_dead_interval_buffer); __pyx_v_self->_dead_interval_buffer = ((struct __pyx_obj_4fcio_DeadIntervalBuffer *)__pyx_t_3); __pyx_t_3 = 0;
051:
052: # helper variables
+053: self._maxtraces = self._config_ptr.adcs + self._config_ptr.triggers
__pyx_v_self->_maxtraces = (__pyx_v_self->_config_ptr->adcs + __pyx_v_self->_config_ptr->triggers);
054:
+055: cdef unsigned int[::1] tracemap_view = self._config_ptr.tracemap
__pyx_t_4 = __pyx_v_self->_config_ptr->tracemap; if (!__pyx_t_4) { PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer"); __PYX_ERR(2, 55, __pyx_L1_error) } __pyx_t_6 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_unsigned_int); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 55, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = Py_BuildValue((char*) "(" __PYX_BUILD_PY_SSIZE_T ")", ((Py_ssize_t)FCIOMaxChannels)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 55, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __pyx_array_new(__pyx_t_3, sizeof(unsigned int), PyBytes_AS_STRING(__pyx_t_6), (char *) "fortran", (char *) __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 55, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_int(((PyObject *)__pyx_t_5), PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(2, 55, __pyx_L1_error) __Pyx_DECREF((PyObject *)__pyx_t_5); __pyx_t_5 = 0; __pyx_v_tracemap_view = __pyx_t_7; __pyx_t_7.memview = NULL; __pyx_t_7.data = NULL;
+056: self._tracemap = numpy.ndarray(shape=(self._maxtraces,), dtype=numpy.uint32, offset=0, buffer=tracemap_view)
__pyx_t_6 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->_maxtraces); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3)) __PYX_ERR(2, 56, __pyx_L1_error); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_shape, __pyx_t_8) < 0) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_numpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_uint32); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_offset, __pyx_int_0) < 0) __PYX_ERR(2, 56, __pyx_L1_error) __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_tracemap_view, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_buffer, __pyx_t_3) < 0) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_ndarray), __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF((PyObject *)__pyx_v_self->_tracemap); __Pyx_DECREF((PyObject *)__pyx_v_self->_tracemap); __pyx_v_self->_tracemap = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0;
057:
+058: self._card_addresses = self._tracemap >> 16 # upper 16bit
__pyx_t_3 = PyNumber_Rshift(((PyObject *)__pyx_v_self->_tracemap), __pyx_int_16); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 58, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(2, 58, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF((PyObject *)__pyx_v_self->_card_addresses); __Pyx_DECREF((PyObject *)__pyx_v_self->_card_addresses); __pyx_v_self->_card_addresses = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0;
+059: self._card_channels = self._tracemap % (1 << 16) # lower 16bit
__pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_v_self->_tracemap), __pyx_int_65536); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(2, 59, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF((PyObject *)__pyx_v_self->_card_channels); __Pyx_DECREF((PyObject *)__pyx_v_self->_card_channels); __pyx_v_self->_card_channels = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0;
060:
+061: self._start_time_ns = numpy.zeros(shape=(self._config_ptr.adcs,),dtype=numpy.int64)
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_numpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_self->_config_ptr->adcs); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_8); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8)) __PYX_ERR(2, 61, __pyx_L1_error); __pyx_t_8 = 0; if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_shape, __pyx_t_9) < 0) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_numpy); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_int64); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(2, 61, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_8); __Pyx_GOTREF((PyObject *)__pyx_v_self->_start_time_ns); __Pyx_DECREF((PyObject *)__pyx_v_self->_start_time_ns); __pyx_v_self->_start_time_ns = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0;
+062: self._start_time_ns[:] = -1
if (__Pyx_PyObject_SetSlice(((PyObject *)__pyx_v_self->_start_time_ns), __pyx_int_neg_1, 0, 0, NULL, NULL, &__pyx_slice__5, 0, 0, 1) < 0) __PYX_ERR(2, 62, __pyx_L1_error)
063:
+064: self._cur_dead_time_ns = numpy.zeros(shape=(self._config_ptr.adcs,),dtype=numpy.int64)
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_numpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->_config_ptr->adcs); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6)) __PYX_ERR(2, 64, __pyx_L1_error); __pyx_t_6 = 0; if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_shape, __pyx_t_9) < 0) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_numpy); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_int64); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(2, 64, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_6); __Pyx_GOTREF((PyObject *)__pyx_v_self->_cur_dead_time_ns); __Pyx_DECREF((PyObject *)__pyx_v_self->_cur_dead_time_ns); __pyx_v_self->_cur_dead_time_ns = ((PyArrayObject *)__pyx_t_6); __pyx_t_6 = 0;
+065: self._total_dead_time_ns = numpy.zeros(shape=(self._config_ptr.adcs,),dtype=numpy.int64)
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_zeros); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->_config_ptr->adcs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3)) __PYX_ERR(2, 65, __pyx_L1_error); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_shape, __pyx_t_9) < 0) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_numpy); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(2, 65, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF((PyObject *)__pyx_v_self->_total_dead_time_ns); __Pyx_DECREF((PyObject *)__pyx_v_self->_total_dead_time_ns); __pyx_v_self->_total_dead_time_ns = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0;
066:
+067: if self._config_ptr.adcbits == 12:
switch (__pyx_v_self->_config_ptr->adcbits) { case 12: /* … */ break; case 16:
+068: self._num_channels_per_card = 24
__pyx_v_self->_num_channels_per_card = 24;
+069: elif self._config_ptr.adcbits == 16:
break; default: break; }
+070: self._num_channels_per_card = 6
__pyx_v_self->_num_channels_per_card = 6;
071:
+072: self._allowed_gps_error_ns = self._config_ptr.gps
__pyx_t_10 = __pyx_v_self->_config_ptr->gps; __pyx_v_self->_allowed_gps_error_ns = __pyx_t_10;
073:
+074: cdef update(self):
static PyObject *__pyx_f_4fcio_7FCIOExt_update(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PY_LONG_LONG __pyx_v_NS_PER_S; PY_LONG_LONG __pyx_v_EXPECTED_MAX_TICKS; PY_LONG_LONG __pyx_v_NS_PER_TICK; PY_LONG_LONG __pyx_v__daq_synchronized_timestamp_ns; CYTHON_UNUSED int __pyx_v__current_clock_offset; int __pyx_v_dr_start; int __pyx_v_dr_end; PY_LONG_LONG __pyx_v__dead_interval_start_ns; PY_LONG_LONG __pyx_v__dead_interval_stop_ns; CYTHON_UNUSED PY_LONG_LONG __pyx_v__dead_interval_ns; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF((PyObject *)__pyx_t_10); __Pyx_AddTraceback("fcio.FCIOExt.update", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
075:
076: # No const in cython :/
+077: cdef long long NS_PER_S = 1000000000
__pyx_v_NS_PER_S = 0x3B9ACA00;
+078: cdef long long EXPECTED_MAX_TICKS = 249999999
__pyx_v_EXPECTED_MAX_TICKS = 0xEE6B27F;
+079: cdef long long NS_PER_TICK = 4
__pyx_v_NS_PER_TICK = 4;
080:
081: # update current pps/clk counters
+082: cdef long long _daq_synchronized_timestamp_ns = (NS_PER_S * self._timestamp[1] + 4 * self._timestamp[2])
__pyx_v__daq_synchronized_timestamp_ns = ((__pyx_v_NS_PER_S * (__pyx_v_self->_timestamp[1])) + (4 * (__pyx_v_self->_timestamp[2])));
+083: self._fpga_time_ns = _daq_synchronized_timestamp_ns
__pyx_v_self->_fpga_time_ns = __pyx_v__daq_synchronized_timestamp_ns;
084:
085: # update absolute time information
+086: if self._config_ptr.gps != 0:
__pyx_t_1 = (__pyx_v_self->_config_ptr->gps != 0); if (__pyx_t_1) { /* … */ goto __pyx_L3; }
087: # we have an external clock (likely from a timeserver or gps clock)
+088: self._utc_unix_ns = _daq_synchronized_timestamp_ns + self._timeoffset[2] * NS_PER_S
__pyx_v_self->_utc_unix_ns = (__pyx_v__daq_synchronized_timestamp_ns + ((__pyx_v_self->_timeoffset[2]) * __pyx_v_NS_PER_S));
089: else:
090: # synchronization via server clock (likely from NTP server)
+091: self._utc_unix_ns = _daq_synchronized_timestamp_ns + NS_PER_S * self._timeoffset[0] + 1000 * self._timeoffset[1]
/*else*/ { __pyx_v_self->_utc_unix_ns = ((__pyx_v__daq_synchronized_timestamp_ns + (__pyx_v_NS_PER_S * (__pyx_v_self->_timeoffset[0]))) + (0x3E8 * (__pyx_v_self->_timeoffset[1]))); } __pyx_L3:;
092:
+093: self._utc_unix = self._utc_unix_ns / NS_PER_S
if (unlikely(__pyx_v_NS_PER_S == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "float division"); __PYX_ERR(2, 93, __pyx_L1_error) } __pyx_v_self->_utc_unix = (((double)__pyx_v_self->_utc_unix_ns) / ((double)__pyx_v_NS_PER_S));
094:
+095: cdef int _current_clock_offset = abs(self._timestamp[3] - EXPECTED_MAX_TICKS) * NS_PER_TICK
__pyx_t_2 = __Pyx_abs_longlong(((__pyx_v_self->_timestamp[3]) - __pyx_v_EXPECTED_MAX_TICKS)); __pyx_v__current_clock_offset = (__pyx_t_2 * __pyx_v_NS_PER_TICK);
096: # if _current_clock_offset > self._allowed_gps_error_ns:
097: # print(f"WARNING fcio: max_ticks of last pps cycle {self.timestamp[3]} with { _current_clock_offset } > {self._allowed_gps_error_ns}",file=sys.stderr)
098:
099: # default deadtimes are the same for all channels
100: # only dr_start is used to track progress
+101: cdef int dr_start = 0
__pyx_v_dr_start = 0;
+102: cdef int dr_end = self._config_ptr.adcs
__pyx_t_3 = __pyx_v_self->_config_ptr->adcs; __pyx_v_dr_end = __pyx_t_3;
103:
104: # for daqmode 12 (event.type 11), each card has it's own eventnumbers, clock counters and deadregions
105: # need to track them separately, but will do it on a channel list basis
106:
+107: if self.type == 11:
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_4, __pyx_int_11, 11, 0)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 107, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { /* … */ }
+108: dr_start = self._deadregion[5]
__pyx_v_dr_start = (__pyx_v_self->_deadregion[5]);
+109: dr_end = self._deadregion[5] + self._deadregion[6]
__pyx_v_dr_end = ((__pyx_v_self->_deadregion[5]) + (__pyx_v_self->_deadregion[6]));
110:
+111: cdef long long _dead_interval_start_ns = self._deadregion[0] * NS_PER_S + self._deadregion[1] * NS_PER_TICK
__pyx_v__dead_interval_start_ns = (((__pyx_v_self->_deadregion[0]) * __pyx_v_NS_PER_S) + ((__pyx_v_self->_deadregion[1]) * __pyx_v_NS_PER_TICK));
+112: cdef long long _dead_interval_stop_ns = self._deadregion[2] * NS_PER_S + self._deadregion[3] * NS_PER_TICK
__pyx_v__dead_interval_stop_ns = (((__pyx_v_self->_deadregion[2]) * __pyx_v_NS_PER_S) + ((__pyx_v_self->_deadregion[3]) * __pyx_v_NS_PER_TICK));
+113: cdef long long _dead_interval_ns = _dead_interval_stop_ns - _dead_interval_start_ns
__pyx_v__dead_interval_ns = (__pyx_v__dead_interval_stop_ns - __pyx_v__dead_interval_start_ns);
114:
+115: if numpy.any(self._start_time_ns[dr_start : dr_end] == -1):
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_numpy); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_any); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_self->_start_time_ns), __pyx_v_dr_start, __pyx_v_dr_end, NULL, NULL, NULL, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyInt_EqObjC(__pyx_t_5, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = NULL; __pyx_t_8 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); __pyx_t_8 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_7}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 115, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { /* … */ }
116: # start times not set yet
+117: if _dead_interval_start_ns == 0 and _dead_interval_stop_ns > 0:
__pyx_t_9 = (__pyx_v__dead_interval_start_ns == 0); if (__pyx_t_9) { } else { __pyx_t_1 = __pyx_t_9; goto __pyx_L7_bool_binop_done; } __pyx_t_9 = (__pyx_v__dead_interval_stop_ns > 0); __pyx_t_1 = __pyx_t_9; __pyx_L7_bool_binop_done:; if (__pyx_t_1) { /* … */ goto __pyx_L6; }
118: # if only start is zero, it's daqmode 12 per card and we can estimate the trigger enable timestamp from that
+119: self._start_time_ns[dr_start : dr_end] = _dead_interval_stop_ns
__pyx_t_4 = __Pyx_PyInt_From_PY_LONG_LONG(__pyx_v__dead_interval_stop_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (__Pyx_PyObject_SetSlice(((PyObject *)__pyx_v_self->_start_time_ns), __pyx_t_4, __pyx_v_dr_start, __pyx_v_dr_end, NULL, NULL, NULL, 1, 1, 1) < 0) __PYX_ERR(2, 119, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+120: elif _dead_interval_start_ns == 0 and _dead_interval_stop_ns == 0:
__pyx_t_9 = (__pyx_v__dead_interval_start_ns == 0); if (__pyx_t_9) { } else { __pyx_t_1 = __pyx_t_9; goto __pyx_L9_bool_binop_done; } __pyx_t_9 = (__pyx_v__dead_interval_stop_ns == 0); __pyx_t_1 = __pyx_t_9; __pyx_L9_bool_binop_done:; if (__pyx_t_1) { /* … */ } __pyx_L6:;
+121: self._start_time_ns[dr_start : dr_end] = _daq_synchronized_timestamp_ns
__pyx_t_4 = __Pyx_PyInt_From_PY_LONG_LONG(__pyx_v__daq_synchronized_timestamp_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 121, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (__Pyx_PyObject_SetSlice(((PyObject *)__pyx_v_self->_start_time_ns), __pyx_t_4, __pyx_v_dr_start, __pyx_v_dr_end, NULL, NULL, NULL, 1, 1, 1) < 0) __PYX_ERR(2, 121, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
122:
+123: if _dead_interval_start_ns > 0:
__pyx_t_1 = (__pyx_v__dead_interval_start_ns > 0); if (__pyx_t_1) { /* … */ }
124: # if first event contains start and stop stamps, it's a true dead interval between events, add it
+125: self._dead_interval_buffer.add(_dead_interval_start_ns, _dead_interval_stop_ns, dr_start, dr_end)
__pyx_t_4 = ((struct __pyx_vtabstruct_4fcio_DeadIntervalBuffer *)__pyx_v_self->_dead_interval_buffer->__pyx_vtab)->add(__pyx_v_self->_dead_interval_buffer, __pyx_v__dead_interval_start_ns, __pyx_v__dead_interval_stop_ns, __pyx_v_dr_start, __pyx_v_dr_end); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 125, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
126:
+127: self._cur_dead_time_ns[dr_start : dr_end] = 0
if (__Pyx_PyObject_SetSlice(((PyObject *)__pyx_v_self->_cur_dead_time_ns), __pyx_int_0, __pyx_v_dr_start, __pyx_v_dr_end, NULL, NULL, NULL, 1, 1, 1) < 0) __PYX_ERR(2, 127, __pyx_L1_error)
+128: while self._dead_interval_buffer.is_before(_daq_synchronized_timestamp_ns, dr_start, dr_end):
while (1) { __pyx_t_4 = ((struct __pyx_vtabstruct_4fcio_DeadIntervalBuffer *)__pyx_v_self->_dead_interval_buffer->__pyx_vtab)->is_before(__pyx_v_self->_dead_interval_buffer, __pyx_v__daq_synchronized_timestamp_ns, __pyx_v_dr_start, __pyx_v_dr_end); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 128, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 128, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_1) break;
+129: self._cur_dead_time_ns[dr_start : dr_end] = self._dead_interval_buffer.read(dr_start, dr_end)
__pyx_t_4 = ((struct __pyx_vtabstruct_4fcio_DeadIntervalBuffer *)__pyx_v_self->_dead_interval_buffer->__pyx_vtab)->read(__pyx_v_self->_dead_interval_buffer, __pyx_v_dr_start, __pyx_v_dr_end); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (__Pyx_PyObject_SetSlice(((PyObject *)__pyx_v_self->_cur_dead_time_ns), __pyx_t_4, __pyx_v_dr_start, __pyx_v_dr_end, NULL, NULL, NULL, 1, 1, 1) < 0) __PYX_ERR(2, 129, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+130: self._total_dead_time_ns[dr_start : dr_end] += self._cur_dead_time_ns[dr_start : dr_end]
__Pyx_INCREF((PyObject *)__pyx_v_self->_total_dead_time_ns); __pyx_t_10 = __pyx_v_self->_total_dead_time_ns; __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_dr_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dr_end); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PySlice_New(__pyx_t_4, __pyx_t_6, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_t_10), __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_self->_cur_dead_time_ns), __pyx_v_dr_start, __pyx_v_dr_end, NULL, NULL, NULL, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely((PyObject_SetItem(((PyObject *)__pyx_t_10), __pyx_t_7, __pyx_t_5) < 0))) __PYX_ERR(2, 130, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF((PyObject *)__pyx_t_10); __pyx_t_10 = 0; }
131:
+132: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_16cur_dead_time_ns_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_16cur_dead_time_ns_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_16cur_dead_time_ns___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_16cur_dead_time_ns___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("fcio.FCIOExt.cur_dead_time_ns.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
133: def cur_dead_time_ns(self):
134: """
135: The dead time since the last triggered event in nanoseconds.
136: """
+137: return self._cur_dead_time_ns[self.trace_list]
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_list); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->_cur_dead_time_ns), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
138:
+139: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_13start_time_ns_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_13start_time_ns_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_13start_time_ns___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_13start_time_ns___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("fcio.FCIOExt.start_time_ns.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
140: def start_time_ns(self):
141: """
142: Contains a best guess
143: """
+144: return self._start_time_ns[self.trace_list]
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_list); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 144, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->_start_time_ns), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 144, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
145:
+146: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_12dead_time_ns_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_12dead_time_ns_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_12dead_time_ns___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_12dead_time_ns___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("fcio.FCIOExt.dead_time_ns.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
147: def dead_time_ns(self):
148: """
149: The total dead time since the last DAQ reset (start of run) in nanoseconds.
150: """
+151: return self._total_dead_time_ns[self.trace_list]
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_list); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->_total_dead_time_ns), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
152:
+153: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_12card_address_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_12card_address_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_12card_address___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_12card_address___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("fcio.FCIOExt.card_address.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
154: def card_address(self):
155: """
156: List of corresponding MAC addresses of the FADC Card per channel.
157: Display in human readable form as hex(car_address[index])
158: """
+159: return self._card_addresses[self.trace_list]
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_list); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->_card_addresses), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
160:
+161: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_12card_channel_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_12card_channel_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_12card_channel___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_12card_channel___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("fcio.FCIOExt.card_channel.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
162: def card_channel(self):
163: """
164: List of input RJ45 Jacks of the FADC Card per channel.
165: Must be within [0,5] for 16-bit firmware and [0,23] for 12-bit firmware.
166: """
+167: return self._card_channels[self.trace_list]
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_list); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->_card_channels), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
168:
+169: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_12eventsamples_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_12eventsamples_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_12eventsamples___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_12eventsamples___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("fcio.FCIOExt.eventsamples.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
170: def eventsamples(self):
171: """
172: The number of samples of each waveform.
173: This parameter is taken from the Config Record and exposed here for convenience.
174: """
+175: return numpy.int32(self._config_ptr.eventsamples)
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->_config_ptr->eventsamples); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = NULL; __pyx_t_5 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_5 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
176:
+177: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_11eventnumber_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_11eventnumber_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_11eventnumber___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_11eventnumber___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("fcio.FCIOExt.eventnumber.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
178: def eventnumber(self):
179: """
180: The event counter from the Top Master Card of this event for FCIOEvent records,
181: and the event counter from the corresponding FADC Card for FCIOSparseEvent records.
182: """
+183: return numpy.int32(self._timestamp[0])
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyInt_From_int((__pyx_v_self->_timestamp[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = NULL; __pyx_t_5 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_5 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
184:
+185: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_3gps_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_3gps_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_3gps___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_3gps___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("fcio.FCIOExt.gps.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
186: def gps(self):
187: """
188: The maximum time difference between fpga pps and readout server second.
189: If no external clock is used, this parameter is 0.
190: """
+191: return numpy.int32(self._config_ptr.gps)
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->_config_ptr->gps); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = NULL; __pyx_t_5 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_5 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
192:
+193: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_12fpga_time_ns_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_12fpga_time_ns_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_12fpga_time_ns___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_12fpga_time_ns___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("fcio.FCIOExt.fpga_time_ns.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
194: def fpga_time_ns(self):
195: """
196: The number of nanoseconds since daq reset.
197: """
+198: return self._fpga_time_ns
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_npy_int64(__pyx_v_self->_fpga_time_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 198, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
199:
+200: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_11utc_unix_ns_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_11utc_unix_ns_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_11utc_unix_ns___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_11utc_unix_ns___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("fcio.FCIOExt.utc_unix_ns.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
201: def utc_unix_ns(self):
202: """
203: The number of nanoseconds since 1970 (UTC unix timestamps).
204: """
+205: return self._utc_unix_ns
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_npy_int64(__pyx_v_self->_utc_unix_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
206:
+207: @property
/* Python wrapper */ static PyObject *__pyx_pw_4fcio_7FCIOExt_8utc_unix_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_4fcio_7FCIOExt_8utc_unix_1__get__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_4fcio_7FCIOExt_8utc_unix___get__(((struct __pyx_obj_4fcio_FCIOExt *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_4fcio_7FCIOExt_8utc_unix___get__(struct __pyx_obj_4fcio_FCIOExt *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("fcio.FCIOExt.utc_unix.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
208: def utc_unix(self):
209: """
210: utc_unix_ns in seconds as float64.
211: Be aware that float64 on your machine probably doesn't allow for a precision better than microseconds.
212: """
+213: return self._utc_unix
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_utc_unix); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 213, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;