mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2025-06-05 12:30:39 +02:00
added decoding of adc_sar_04 (#127)
This commit is contained in:
parent
2faa317bdf
commit
c0c5e07ad8
@ -6,7 +6,8 @@ namespace aare {
|
|||||||
|
|
||||||
|
|
||||||
uint16_t adc_sar_05_decode64to16(uint64_t input);
|
uint16_t adc_sar_05_decode64to16(uint64_t input);
|
||||||
|
uint16_t adc_sar_04_decode64to16(uint64_t input);
|
||||||
void adc_sar_05_decode64to16(NDView<uint64_t, 2> input, NDView<uint16_t,2> output);
|
void adc_sar_05_decode64to16(NDView<uint64_t, 2> input, NDView<uint16_t,2> output);
|
||||||
|
void adc_sar_04_decode64to16(NDView<uint64_t, 2> input, NDView<uint16_t,2> output);
|
||||||
|
|
||||||
} // namespace aare
|
} // namespace aare
|
@ -2,6 +2,10 @@ import numpy as np
|
|||||||
from . import _aare
|
from . import _aare
|
||||||
|
|
||||||
|
|
||||||
|
class AdcSar04Transform64to16:
|
||||||
|
def __call__(self, data):
|
||||||
|
return _aare.adc_sar_04_decode64to16(data)
|
||||||
|
|
||||||
class AdcSar05Transform64to16:
|
class AdcSar05Transform64to16:
|
||||||
def __call__(self, data):
|
def __call__(self, data):
|
||||||
return _aare.adc_sar_05_decode64to16(data)
|
return _aare.adc_sar_05_decode64to16(data)
|
||||||
@ -50,4 +54,5 @@ moench05 = Moench05Transform()
|
|||||||
moench05_1g = Moench05Transform1g()
|
moench05_1g = Moench05Transform1g()
|
||||||
moench05_old = Moench05TransformOld()
|
moench05_old = Moench05TransformOld()
|
||||||
matterhorn02 = Matterhorn02Transform()
|
matterhorn02 = Matterhorn02Transform()
|
||||||
|
adc_sar_04_64to16 = AdcSar04Transform64to16()
|
||||||
adc_sar_05_64to16 = AdcSar05Transform64to16()
|
adc_sar_05_64to16 = AdcSar05Transform64to16()
|
@ -37,15 +37,30 @@ m.def("adc_sar_05_decode64to16", [](py::array_t<uint8_t> input) {
|
|||||||
|
|
||||||
//Create a view of the input and output arrays
|
//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<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)});
|
NDView<uint16_t, 2> output_view(output.mutable_data(), {output.shape(0), output.shape(1)});
|
||||||
|
|
||||||
adc_sar_05_decode64to16(input_view, output_view);
|
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;
|
||||||
// }
|
});
|
||||||
|
|
||||||
|
|
||||||
|
m.def("adc_sar_04_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_04_decode64to16(input_view, output_view);
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
});
|
});
|
||||||
|
@ -29,4 +29,33 @@ void adc_sar_05_decode64to16(NDView<uint64_t, 2> input, NDView<uint16_t,2> outpu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t adc_sar_04_decode64to16(uint64_t input){
|
||||||
|
|
||||||
|
// bit_map = array([15,17,19,21,23,4,6,8,10,12,14,16] LSB->MSB
|
||||||
|
uint16_t output = 0;
|
||||||
|
output |= ((input >> 16) & 1) << 11;
|
||||||
|
output |= ((input >> 14) & 1) << 10;
|
||||||
|
output |= ((input >> 12) & 1) << 9;
|
||||||
|
output |= ((input >> 10) & 1) << 8;
|
||||||
|
output |= ((input >> 8) & 1) << 7;
|
||||||
|
output |= ((input >> 6) & 1) << 6;
|
||||||
|
output |= ((input >> 4) & 1) << 5;
|
||||||
|
output |= ((input >> 23) & 1) << 4;
|
||||||
|
output |= ((input >> 21) & 1) << 3;
|
||||||
|
output |= ((input >> 19) & 1) << 2;
|
||||||
|
output |= ((input >> 17) & 1) << 1;
|
||||||
|
output |= ((input >> 15) & 1) << 0;
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
void adc_sar_04_decode64to16(NDView<uint64_t, 2> input, NDView<uint16_t,2> output){
|
||||||
|
for(int64_t i = 0; i < input.shape(0); i++){
|
||||||
|
for(int64_t j = 0; j < input.shape(1); j++){
|
||||||
|
output(i,j) = adc_sar_04_decode64to16(input(i,j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace aare
|
} // namespace aare
|
||||||
|
Loading…
x
Reference in New Issue
Block a user