mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2025-06-09 05:50:43 +02:00
renamed NumpyFile member variable header to m_header
This commit is contained in:
parent
9854500a6f
commit
390ceb02d8
@ -11,7 +11,9 @@ namespace aare{
|
|||||||
class NumpyFile : public FileInterface {
|
class NumpyFile : public FileInterface {
|
||||||
FILE *fp = nullptr;
|
FILE *fp = nullptr;
|
||||||
size_t initial_header_len = 0;
|
size_t initial_header_len = 0;
|
||||||
|
size_t current_frame{};
|
||||||
|
void get_frame_into(size_t, std::byte *);
|
||||||
|
Frame get_frame(size_t frame_number);
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -30,12 +32,12 @@ class NumpyFile : public FileInterface {
|
|||||||
size_t pixels() override;
|
size_t pixels() override;
|
||||||
void seek(size_t frame_number) override { this->current_frame = frame_number; }
|
void seek(size_t frame_number) override { this->current_frame = frame_number; }
|
||||||
size_t tell() override { return this->current_frame; }
|
size_t tell() override { return this->current_frame; }
|
||||||
size_t total_frames() const override { return header.shape[0]; }
|
size_t total_frames() const override { return m_header.shape[0]; }
|
||||||
ssize_t rows() const override { return header.shape[1]; }
|
ssize_t rows() const override { return m_header.shape[1]; }
|
||||||
ssize_t cols() const override { return header.shape[2]; }
|
ssize_t cols() const override { return m_header.shape[2]; }
|
||||||
ssize_t bitdepth() const override { return header.dtype.bitdepth(); }
|
ssize_t bitdepth() const override { return m_header.dtype.bitdepth(); }
|
||||||
|
|
||||||
header_t header;
|
header_t m_header;
|
||||||
uint8_t major_ver_{};
|
uint8_t major_ver_{};
|
||||||
uint8_t minor_ver_{};
|
uint8_t minor_ver_{};
|
||||||
uint32_t header_len{};
|
uint32_t header_len{};
|
||||||
@ -44,10 +46,8 @@ class NumpyFile : public FileInterface {
|
|||||||
|
|
||||||
~NumpyFile();
|
~NumpyFile();
|
||||||
|
|
||||||
private:
|
|
||||||
size_t current_frame{};
|
|
||||||
void get_frame_into(size_t, std::byte *);
|
|
||||||
Frame get_frame(size_t frame_number);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace aare
|
} // namespace aare
|
@ -4,25 +4,25 @@
|
|||||||
namespace aare{
|
namespace aare{
|
||||||
|
|
||||||
NumpyFile::NumpyFile(const std::filesystem::path& fname) {
|
NumpyFile::NumpyFile(const std::filesystem::path& fname) {
|
||||||
this->m_fname = fname;
|
m_fname = fname;
|
||||||
fp = fopen(this->m_fname.c_str(), "rb");
|
fp = fopen(m_fname.c_str(), "rb");
|
||||||
}
|
}
|
||||||
NumpyFile::NumpyFile(FileConfig config, header_t header) {
|
NumpyFile::NumpyFile(FileConfig config, header_t header) {
|
||||||
this->mode = "w";
|
mode = "w";
|
||||||
this->m_fname = config.fname;
|
m_fname = config.fname;
|
||||||
this->m_bitdepth = config.dtype.bitdepth();
|
m_bitdepth = config.dtype.bitdepth();
|
||||||
this->m_rows = config.rows;
|
m_rows = config.rows;
|
||||||
this->m_cols = config.cols;
|
m_cols = config.cols;
|
||||||
this->header = header;
|
m_header = header;
|
||||||
this->header.shape = {0, config.rows, config.cols};
|
m_header.shape = {0, config.rows, config.cols};
|
||||||
|
|
||||||
fp = fopen(this->m_fname.c_str(), "wb");
|
fp = fopen(m_fname.c_str(), "wb");
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
throw std::runtime_error(fmt::format("Could not open: {} for reading", this->m_fname.c_str()));
|
throw std::runtime_error(fmt::format("Could not open: {} for reading", m_fname.c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
this->initial_header_len =
|
initial_header_len =
|
||||||
aare::NumpyHelpers::write_header(std::filesystem::path(this->m_fname.c_str()), this->header);
|
aare::NumpyHelpers::write_header(std::filesystem::path(m_fname.c_str()), header);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NumpyFile::write(Frame &frame) {
|
void NumpyFile::write(Frame &frame) {
|
||||||
@ -39,7 +39,7 @@ void NumpyFile::write(Frame &frame) {
|
|||||||
|
|
||||||
|
|
||||||
Frame NumpyFile::get_frame(size_t frame_number) {
|
Frame NumpyFile::get_frame(size_t frame_number) {
|
||||||
Frame frame(header.shape[1], header.shape[2], header.dtype.bitdepth());
|
Frame frame(m_header.shape[1], m_header.shape[2], m_header.dtype.bitdepth());
|
||||||
get_frame_into(frame_number, frame._get_data());
|
get_frame_into(frame_number, frame._get_data());
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
@ -47,7 +47,7 @@ void NumpyFile::get_frame_into(size_t frame_number, std::byte *image_buf) {
|
|||||||
if (fp == nullptr) {
|
if (fp == nullptr) {
|
||||||
throw std::runtime_error("File not open");
|
throw std::runtime_error("File not open");
|
||||||
}
|
}
|
||||||
if (frame_number > header.shape[0]) {
|
if (frame_number > m_header.shape[0]) {
|
||||||
throw std::runtime_error("Frame number out of range");
|
throw std::runtime_error("Frame number out of range");
|
||||||
}
|
}
|
||||||
fseek(fp, header_size + frame_number * bytes_per_frame(), SEEK_SET);
|
fseek(fp, header_size + frame_number * bytes_per_frame(), SEEK_SET);
|
||||||
@ -55,24 +55,24 @@ void NumpyFile::get_frame_into(size_t frame_number, std::byte *image_buf) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t NumpyFile::pixels() {
|
size_t NumpyFile::pixels() {
|
||||||
return std::accumulate(header.shape.begin() + 1, header.shape.end(), 1, std::multiplies<uint64_t>());
|
return std::accumulate(m_header.shape.begin() + 1, m_header.shape.end(), 1, std::multiplies<uint64_t>());
|
||||||
};
|
};
|
||||||
size_t NumpyFile::bytes_per_frame() { return header.dtype.bitdepth() / 8 * pixels(); };
|
size_t NumpyFile::bytes_per_frame() { return m_header.dtype.bitdepth() / 8 * pixels(); };
|
||||||
|
|
||||||
std::vector<Frame> NumpyFile::read(size_t n_frames) {
|
std::vector<Frame> NumpyFile::read(size_t n_frames) {
|
||||||
// TODO: implement this in a more efficient way
|
// TODO: implement this in a more efficient way
|
||||||
std::vector<Frame> frames;
|
std::vector<Frame> frames;
|
||||||
for (size_t i = 0; i < n_frames; i++) {
|
for (size_t i = 0; i < n_frames; i++) {
|
||||||
frames.push_back(this->get_frame(this->current_frame));
|
frames.push_back(get_frame(current_frame));
|
||||||
this->current_frame++;
|
current_frame++;
|
||||||
}
|
}
|
||||||
return frames;
|
return frames;
|
||||||
}
|
}
|
||||||
void NumpyFile::read_into(std::byte *image_buf, size_t n_frames) {
|
void NumpyFile::read_into(std::byte *image_buf, size_t n_frames) {
|
||||||
// TODO: implement this in a more efficient way
|
// TODO: implement this in a more efficient way
|
||||||
for (size_t i = 0; i < n_frames; i++) {
|
for (size_t i = 0; i < n_frames; i++) {
|
||||||
this->get_frame_into(this->current_frame++, image_buf);
|
get_frame_into(current_frame++, image_buf);
|
||||||
image_buf += this->bytes_per_frame();
|
image_buf += bytes_per_frame();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,11 +84,11 @@ NumpyFile::~NumpyFile() {
|
|||||||
size_t data_size = file_size - initial_header_len;
|
size_t data_size = file_size - initial_header_len;
|
||||||
size_t n_frames = data_size / bytes_per_frame();
|
size_t n_frames = data_size / bytes_per_frame();
|
||||||
// update number of frames in header (first element of shape)
|
// update number of frames in header (first element of shape)
|
||||||
this->header.shape[0] = n_frames;
|
m_header.shape[0] = n_frames;
|
||||||
fseek(fp, 0, SEEK_SET);
|
fseek(fp, 0, SEEK_SET);
|
||||||
// create string stream to contain header
|
// create string stream to contain header
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
aare::NumpyHelpers::write_header(ss, this->header);
|
aare::NumpyHelpers::write_header(ss, m_header);
|
||||||
std::string header_str = ss.str();
|
std::string header_str = ss.str();
|
||||||
// write header
|
// write header
|
||||||
fwrite(header_str.c_str(), header_str.size(), 1, fp);
|
fwrite(header_str.c_str(), header_str.size(), 1, fp);
|
||||||
|
@ -70,7 +70,7 @@ void NumpyFileFactory::parse_metadata(FileInterface *_file) {
|
|||||||
auto dim = static_cast<unsigned long>(std::stoul(item));
|
auto dim = static_cast<unsigned long>(std::stoul(item));
|
||||||
shape.push_back(dim);
|
shape.push_back(dim);
|
||||||
}
|
}
|
||||||
file->header = {dtype, fortran_order, shape};
|
file->m_header = {dtype, fortran_order, shape};
|
||||||
}
|
}
|
||||||
|
|
||||||
NumpyFile *NumpyFileFactory::load_file_read() {
|
NumpyFile *NumpyFileFactory::load_file_read() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user