mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2025-07-13 12:21:49 +02:00
fixed warnings and removed ambiguous read_frame
This commit is contained in:
@ -49,6 +49,7 @@ class JungfrauDataFile : public FileInterface {
|
||||
size_t total_frames() const override;
|
||||
size_t rows() const override;
|
||||
size_t cols() const override;
|
||||
std::array<ssize_t,2> shape() const;
|
||||
size_t n_files() const; //!< get the number of files in the series.
|
||||
|
||||
// Extra functions needed for FileInterface
|
||||
@ -81,13 +82,6 @@ class JungfrauDataFile : public FileInterface {
|
||||
*/
|
||||
void read_into(NDArray<uint16_t>* image, JungfrauDataHeader* header = nullptr);
|
||||
|
||||
/**
|
||||
* @brief Read a single frame from the file. Allocated a new NDArray for the output data
|
||||
* @param header pointer to a JungfrauDataHeader or nullptr to skip header)
|
||||
* @return NDArray with the image data
|
||||
*/
|
||||
NDArray<uint16_t> read_frame(JungfrauDataHeader* header = nullptr);
|
||||
|
||||
JungfrauDataHeader read_header();
|
||||
std::filesystem::path current_file() const { return fpath(m_current_file_index+m_offset); }
|
||||
|
||||
|
@ -72,6 +72,7 @@ template <typename T, int64_t Ndim = 2> class NDView : public ArrayExpr<NDView<T
|
||||
}
|
||||
|
||||
size_t size() const { return size_; }
|
||||
ssize_t ssize() const { return static_cast<ssize_t>(size_); }
|
||||
size_t total_bytes() const { return size_ * sizeof(T); }
|
||||
std::array<int64_t, Ndim> strides() const noexcept { return strides_; }
|
||||
|
||||
|
@ -6,8 +6,8 @@ namespace aare {
|
||||
Interpolator::Interpolator(NDView<double, 3> etacube, NDView<double, 1> xbins,
|
||||
NDView<double, 1> ybins, NDView<double, 1> ebins)
|
||||
: m_ietax(etacube), m_ietay(etacube), m_etabinsx(xbins), m_etabinsy(ybins), m_energy_bins(ebins) {
|
||||
if (etacube.shape(0) != xbins.size() || etacube.shape(1) != ybins.size() ||
|
||||
etacube.shape(2) != ebins.size()) {
|
||||
if (etacube.shape(0) != xbins.ssize() || etacube.shape(1) != ybins.ssize() ||
|
||||
etacube.shape(2) != ebins.ssize()) {
|
||||
throw std::invalid_argument(
|
||||
"The shape of the etacube does not match the shape of the bins");
|
||||
}
|
||||
@ -68,19 +68,14 @@ std::vector<Photon> Interpolator::interpolate(const ClusterVector<int32_t>& clus
|
||||
photon.y = cluster.y;
|
||||
photon.energy = eta.sum;
|
||||
|
||||
// auto ie = nearest_index(m_energy_bins, photon.energy)-1;
|
||||
// auto ix = nearest_index(m_etabinsx, eta.x)-1;
|
||||
// auto iy = nearest_index(m_etabinsy, eta.y)-1;
|
||||
|
||||
//Finding the index of the last element that is smaller
|
||||
//should work fine as long as we have many bins
|
||||
auto ie = last_smaller(m_energy_bins, photon.energy);
|
||||
auto ix = last_smaller(m_etabinsx, eta.x);
|
||||
auto iy = last_smaller(m_etabinsy, eta.y);
|
||||
|
||||
// fmt::print("ex: {}, ix: {}, iy: {}\n", ie, ix, iy);
|
||||
|
||||
double dX, dY;
|
||||
int ex, ey;
|
||||
double dX{}, dY{};
|
||||
// cBottomLeft = 0,
|
||||
// cBottomRight = 1,
|
||||
// cTopLeft = 2,
|
||||
|
@ -37,8 +37,9 @@ Frame JungfrauDataFile::read_frame(size_t frame_number){
|
||||
|
||||
std::vector<Frame> JungfrauDataFile::read_n(size_t n_frames) {
|
||||
std::vector<Frame> frames;
|
||||
throw std::runtime_error(LOCATION +
|
||||
"Not implemented yet");
|
||||
for(size_t i = 0; i < n_frames; ++i){
|
||||
frames.push_back(read_frame());
|
||||
}
|
||||
return frames;
|
||||
}
|
||||
|
||||
@ -54,6 +55,10 @@ size_t JungfrauDataFile::frame_number(size_t frame_index) {
|
||||
return read_header().framenum;
|
||||
}
|
||||
|
||||
std::array<ssize_t, 2> JungfrauDataFile::shape() const {
|
||||
return {static_cast<ssize_t>(rows()), static_cast<ssize_t>(cols())};
|
||||
}
|
||||
|
||||
DetectorType JungfrauDataFile::detector_type() const { return DetectorType::Jungfrau; }
|
||||
|
||||
std::string JungfrauDataFile::base_name() const { return m_base_name; }
|
||||
@ -198,22 +203,13 @@ void JungfrauDataFile::read_into(std::byte *image_buf, size_t n_frames,
|
||||
}
|
||||
|
||||
void JungfrauDataFile::read_into(NDArray<uint16_t>* image, JungfrauDataHeader* header) {
|
||||
if(!(rows() == image->shape(0) && cols() == image->shape(1))){
|
||||
if(image->shape()!=shape()){
|
||||
throw std::runtime_error(LOCATION +
|
||||
"Image shape does not match file size: " + std::to_string(rows()) + "x" + std::to_string(cols()));
|
||||
}
|
||||
read_into(reinterpret_cast<std::byte *>(image->data()), header);
|
||||
}
|
||||
|
||||
NDArray<uint16_t> JungfrauDataFile::read_frame(JungfrauDataHeader* header) {
|
||||
Shape<2> shape{rows(), cols()};
|
||||
NDArray<uint16_t> image(shape);
|
||||
|
||||
read_into(reinterpret_cast<std::byte *>(image.data()),
|
||||
header);
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
JungfrauDataHeader JungfrauDataFile::read_header() {
|
||||
JungfrauDataHeader header;
|
||||
|
@ -28,7 +28,8 @@ TEST_CASE("Open a Jungfrau data file", "[.files]") {
|
||||
//Check that the frame number and buch id is read correctly
|
||||
for (size_t i = 0; i < 24; ++i) {
|
||||
JungfrauDataHeader header;
|
||||
auto image = f.read_frame(&header);
|
||||
aare::NDArray<uint16_t> image(f.shape());
|
||||
f.read_into(&image, &header);
|
||||
REQUIRE(header.framenum == i + 1);
|
||||
REQUIRE(header.bunchid == (i + 1) * (i + 1));
|
||||
REQUIRE(image.shape(0) == 512);
|
||||
@ -58,7 +59,8 @@ TEST_CASE("Seek in a JungfrauDataFile", "[.files]"){
|
||||
REQUIRE(h3.framenum == 59+1);
|
||||
|
||||
JungfrauDataHeader h4;
|
||||
auto image = f.read_frame(&h4);
|
||||
aare::NDArray<uint16_t> image(f.shape());
|
||||
f.read_into(&image, &h4);
|
||||
REQUIRE(h4.framenum == 59+1);
|
||||
|
||||
//now we should be on the next frame
|
||||
@ -91,4 +93,22 @@ TEST_CASE("Open a Jungfrau data file with non zero file index", "[.files]"){
|
||||
|
||||
REQUIRE(f.current_file().stem() == "AldoJF65k_000003");
|
||||
|
||||
}
|
||||
|
||||
TEST_CASE("Read into throws if size doesn't match", "[.files]"){
|
||||
auto fpath = test_data_path() / "dat" / "AldoJF65k_000000.dat";
|
||||
REQUIRE(std::filesystem::exists(fpath));
|
||||
|
||||
JungfrauDataFile f(fpath);
|
||||
|
||||
aare::NDArray<uint16_t> image({39, 85});
|
||||
JungfrauDataHeader header;
|
||||
|
||||
REQUIRE_THROWS(f.read_into(&image, &header));
|
||||
REQUIRE_THROWS(f.read_into(&image, nullptr));
|
||||
REQUIRE_THROWS(f.read_into(&image));
|
||||
|
||||
REQUIRE(f.tell() == 0);
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user