Skip to content

Commit

Permalink
added decoding of adc_sar_04 (#127)
Browse files Browse the repository at this point in the history
  • Loading branch information
erikfrojdh authored Feb 12, 2025
1 parent 2faa317 commit c0c5e07
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 5 deletions.
3 changes: 2 additions & 1 deletion include/aare/decode.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ namespace aare {


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_04_decode64to16(NDView<uint64_t, 2> input, NDView<uint16_t,2> output);

} // namespace aare
5 changes: 5 additions & 0 deletions python/aare/transform.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
from . import _aare


class AdcSar04Transform64to16:
def __call__(self, data):
return _aare.adc_sar_04_decode64to16(data)

class AdcSar05Transform64to16:
def __call__(self, data):
return _aare.adc_sar_05_decode64to16(data)
Expand Down Expand Up @@ -50,4 +54,5 @@ def __call__(self, data):
moench05_1g = Moench05Transform1g()
moench05_old = Moench05TransformOld()
matterhorn02 = Matterhorn02Transform()
adc_sar_04_64to16 = AdcSar04Transform64to16()
adc_sar_05_64to16 = AdcSar05Transform64to16()
23 changes: 19 additions & 4 deletions python/src/ctb_raw_file.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
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;
});


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;
});
Expand Down
29 changes: 29 additions & 0 deletions src/decode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit c0c5e07

Please sign in to comment.