mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2025-04-22 23:00:03 +02:00
Decoding for ADC SAR 05 64->16bit (#124)
Co-authored-by: Patrick <patrick.sieberer@psi.ch>
This commit is contained in:
parent
078e5d81ec
commit
5a3ca2ae2d
@ -283,6 +283,7 @@ set(PUBLICHEADERS
|
||||
include/aare/ClusterFile.hpp
|
||||
include/aare/CtbRawFile.hpp
|
||||
include/aare/ClusterVector.hpp
|
||||
include/aare/decode.hpp
|
||||
include/aare/defs.hpp
|
||||
include/aare/Dtype.hpp
|
||||
include/aare/File.hpp
|
||||
@ -307,6 +308,7 @@ set(SourceFiles
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/ClusterFile.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/defs.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Dtype.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/decode.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Frame.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/File.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/NumpyFile.cpp
|
||||
|
12
include/aare/decode.hpp
Normal file
12
include/aare/decode.hpp
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <aare/NDView.hpp>
|
||||
namespace aare {
|
||||
|
||||
|
||||
uint16_t adc_sar_05_decode64to16(uint64_t input);
|
||||
|
||||
void adc_sar_05_decode64to16(NDView<uint64_t, 2> input, NDView<uint16_t,2> output);
|
||||
|
||||
} // namespace aare
|
@ -2,6 +2,10 @@ import numpy as np
|
||||
from . import _aare
|
||||
|
||||
|
||||
class AdcSar05Transform64to16:
|
||||
def __call__(self, data):
|
||||
return _aare.adc_sar_05_decode64to16(data)
|
||||
|
||||
class Moench05Transform:
|
||||
#Could be moved to C++ without changing the interface
|
||||
def __init__(self):
|
||||
@ -45,4 +49,5 @@ class Matterhorn02Transform:
|
||||
moench05 = Moench05Transform()
|
||||
moench05_1g = Moench05Transform1g()
|
||||
moench05_old = Moench05TransformOld()
|
||||
matterhorn02 = Matterhorn02Transform()
|
||||
matterhorn02 = Matterhorn02Transform()
|
||||
adc_sar_05_64to16 = AdcSar05Transform64to16()
|
@ -7,6 +7,7 @@
|
||||
#include "aare/RawSubFile.hpp"
|
||||
|
||||
#include "aare/defs.hpp"
|
||||
#include "aare/decode.hpp"
|
||||
// #include "aare/fClusterFileV2.hpp"
|
||||
|
||||
#include <cstdint>
|
||||
@ -23,6 +24,32 @@ using namespace ::aare;
|
||||
|
||||
void define_ctb_raw_file_io_bindings(py::module &m) {
|
||||
|
||||
m.def("adc_sar_05_decode64to16", [](py::array_t<uint8_t> input) {
|
||||
|
||||
|
||||
if(input.ndim() != 2){
|
||||
throw std::runtime_error("Only 2D arrays are supported at this moment");
|
||||
}
|
||||
|
||||
//Create a 2D output array with the same shape as the input
|
||||
std::vector<ssize_t> shape{input.shape(0), input.shape(1)/8};
|
||||
py::array_t<uint16_t> output(shape);
|
||||
|
||||
//Create a view of the input and output arrays
|
||||
NDView<uint64_t, 2> input_view(reinterpret_cast<uint64_t*>(input.mutable_data()), {output.shape(0), output.shape(1)});
|
||||
|
||||
NDView<uint16_t, 2> output_view(output.mutable_data(), {output.shape(0), output.shape(1)});
|
||||
|
||||
adc_sar_05_decode64to16(input_view, output_view);
|
||||
// for (size_t i=0; i!=input_view.size(); ++i) {
|
||||
// output_view(i) = decode_adc(input_view(i));
|
||||
// }
|
||||
|
||||
|
||||
|
||||
return output;
|
||||
});
|
||||
|
||||
py::class_<CtbRawFile>(m, "CtbRawFile")
|
||||
.def(py::init<const std::filesystem::path &>())
|
||||
.def("read_frame",
|
||||
|
32
src/decode.cpp
Normal file
32
src/decode.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
#include "aare/decode.hpp"
|
||||
|
||||
namespace aare {
|
||||
|
||||
uint16_t adc_sar_05_decode64to16(uint64_t input){
|
||||
|
||||
//we want bits 29,19,28,18,31,21,27,20,24,23,25,22 and then pad to 16
|
||||
uint16_t output = 0;
|
||||
output |= ((input >> 22) & 1) << 11;
|
||||
output |= ((input >> 25) & 1) << 10;
|
||||
output |= ((input >> 23) & 1) << 9;
|
||||
output |= ((input >> 24) & 1) << 8;
|
||||
output |= ((input >> 20) & 1) << 7;
|
||||
output |= ((input >> 27) & 1) << 6;
|
||||
output |= ((input >> 21) & 1) << 5;
|
||||
output |= ((input >> 31) & 1) << 4;
|
||||
output |= ((input >> 18) & 1) << 3;
|
||||
output |= ((input >> 28) & 1) << 2;
|
||||
output |= ((input >> 19) & 1) << 1;
|
||||
output |= ((input >> 29) & 1) << 0;
|
||||
return output;
|
||||
}
|
||||
|
||||
void adc_sar_05_decode64to16(NDView<uint64_t, 2> input, NDView<uint16_t,2> output){
|
||||
for(size_t i = 0; i < input.shape(0); i++){
|
||||
for(size_t j = 0; j < input.shape(1); j++){
|
||||
output(i,j) = adc_sar_05_decode64to16(input(i,j));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace aare
|
Loading…
x
Reference in New Issue
Block a user