diff --git a/RELEASE.md b/RELEASE.md index dc10406..a0c0704 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,6 +1,15 @@ # Release notes +### head + +Features: + +- Apply calibration works in G0 if passes a 2D calibration and pedestal +- count pixels that switch +- calculate pedestal (also g0 version) + + ### 2025.07.18 Features: diff --git a/docs/src/pycalibration.rst b/docs/src/pycalibration.rst index 0ea3fba..6083162 100644 --- a/docs/src/pycalibration.rst +++ b/docs/src/pycalibration.rst @@ -17,8 +17,24 @@ Functions for applying calibration to data. # Apply calibration to raw data to convert from raw ADC values to keV data = aare.apply_calibration(raw_data, pd=pedestal, cal=calibration) + # If you pass a 2D pedestal and calibration only G0 will be used for the conversion + # Pixels that switched to G1 or G2 will be set to 0 + data = aare.apply_calibration(raw_data, pd=pedestal[0], cal=calibration[0]) + + + .. py:currentmodule:: aare .. autofunction:: apply_calibration .. autofunction:: load_calibration + +.. autofunction:: calculate_pedestal + +.. autofunction:: calculate_pedestal_float + +.. autofunction:: calculate_pedestal_g0 + +.. autofunction:: calculate_pedestal_g0_float + +.. autofunction:: count_switching_pixels diff --git a/python/src/bind_calibration.hpp b/python/src/bind_calibration.hpp index d2e43f1..b95fa34 100644 --- a/python/src/bind_calibration.hpp +++ b/python/src/bind_calibration.hpp @@ -72,29 +72,82 @@ py::array_t pybind_calculate_pedestal_g0( } void bind_calibration(py::module &m) { - m.def("apply_calibration", &pybind_apply_calibration, - py::arg("raw_data").noconvert(), py::kw_only(), - py::arg("pd").noconvert(), py::arg("cal").noconvert(), - py::arg("n_threads") = 4); - m.def("apply_calibration", &pybind_apply_calibration, py::arg("raw_data").noconvert(), py::kw_only(), py::arg("pd").noconvert(), py::arg("cal").noconvert(), py::arg("n_threads") = 4); + m.def("apply_calibration", &pybind_apply_calibration, + py::arg("raw_data").noconvert(), py::kw_only(), + py::arg("pd").noconvert(), py::arg("cal").noconvert(), + py::arg("n_threads") = 4); + m.def("count_switching_pixels", &pybind_count_switching_pixels, + R"( + Count the number of time each pixel switches to G1 or G2. + + Parameters + ---------- + raw_data : array_like + 3D array of shape (frames, rows, cols) to count the switching pixels from. + n_threads : int + The number of threads to use for the calculation. + )", py::arg("raw_data").noconvert(), py::kw_only(), py::arg("n_threads") = 4); - m.def("calculate_pedestal_float", &pybind_calculate_pedestal, + m.def("calculate_pedestal", &pybind_calculate_pedestal, + R"( + Calculate the pedestal for all three gains and return the result as a 3D array of doubles. + + Parameters + ---------- + raw_data : array_like + 3D array of shape (frames, rows, cols) to calculate the pedestal from. + Needs to contain data for all three gains (G0, G1, G2). + n_threads : int + The number of threads to use for the calculation. + )", py::arg("raw_data").noconvert(), py::arg("n_threads") = 4); - m.def("calculate_pedestal", &pybind_calculate_pedestal, + m.def("calculate_pedestal_float", &pybind_calculate_pedestal, + R"( + Same as `calculate_pedestal` but returns a 3D array of floats. + + Parameters + ---------- + raw_data : array_like + 3D array of shape (frames, rows, cols) to calculate the pedestal from. + Needs to contain data for all three gains (G0, G1, G2). + n_threads : int + The number of threads to use for the calculation. + )", py::arg("raw_data").noconvert(), py::arg("n_threads") = 4); m.def("calculate_pedestal_g0", &pybind_calculate_pedestal_g0, + R"( + Calculate the pedestal for G0 and return the result as a 2D array of doubles. + Pixels in G1 and G2 are ignored. + + Parameters + ---------- + raw_data : array_like + 3D array of shape (frames, rows, cols) to calculate the pedestal from. + n_threads : int + The number of threads to use for the calculation. + )", py::arg("raw_data").noconvert(), py::arg("n_threads") = 4); m.def("calculate_pedestal_g0_float", &pybind_calculate_pedestal_g0, + R"( + Same as `calculate_pedestal_g0` but returns a 2D array of floats. + + Parameters + ---------- + raw_data : array_like + 3D array of shape (frames, rows, cols) to calculate the pedestal from. + n_threads : int + The number of threads to use for the calculation. + )", py::arg("raw_data").noconvert(), py::arg("n_threads") = 4); } \ No newline at end of file