mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2025-06-13 07:47:13 +02:00
read numpy file: works
This commit is contained in:
@ -15,6 +15,8 @@ class File {
|
||||
virtual Frame<DataType>* get_frame(int frame_number) = 0;
|
||||
|
||||
private:
|
||||
//comment
|
||||
|
||||
|
||||
public:
|
||||
std::filesystem::path fname;
|
||||
|
@ -5,11 +5,10 @@ class JsonFileFactory: public FileFactory<detector,DataType>
|
||||
private:
|
||||
/* data */
|
||||
public:
|
||||
JsonFileFactory(std::filesystem::path fpath);
|
||||
File<detector,DataType>* load_file() override;
|
||||
void parse_metadata(File<detector,DataType>*) override;
|
||||
void parse_fname(File<detector,DataType>*) override;
|
||||
|
||||
JsonFileFactory<detector,DataType>(std::filesystem::path fpath);
|
||||
void open_subfiles(File<detector,DataType>*);
|
||||
sls_detector_header read_header(const std::filesystem::path &fname);
|
||||
void find_geometry(File<detector,DataType>*);
|
||||
|
@ -1,9 +1,52 @@
|
||||
#pragma once
|
||||
#include "aare/File.hpp"
|
||||
#include "aare/defs.hpp"
|
||||
#include <iostream>
|
||||
#include <numeric>
|
||||
|
||||
template <DetectorType detector, typename DataType>
|
||||
class NumpyFile : public File<detector, DataType>
|
||||
{
|
||||
using shape_t = std::vector<uint64_t>;
|
||||
|
||||
struct dtype_t {
|
||||
char byteorder;
|
||||
char kind;
|
||||
unsigned int itemsize;
|
||||
std::string to_string() {
|
||||
std::stringstream sstm;
|
||||
sstm << byteorder << kind << itemsize;
|
||||
return sstm.str();
|
||||
}
|
||||
};
|
||||
struct header_t {
|
||||
dtype_t dtype;
|
||||
bool fortran_order;
|
||||
shape_t shape;
|
||||
std::string to_string() {
|
||||
std::stringstream sstm;
|
||||
sstm << "dtype: " << dtype.to_string() << ", fortran_order: " << fortran_order << ' ';
|
||||
|
||||
sstm << "shape: (";
|
||||
for (auto item : shape)
|
||||
sstm << item << ',';
|
||||
sstm << ')';
|
||||
return sstm.str();
|
||||
}
|
||||
};
|
||||
template <DetectorType detector, typename DataType> class NumpyFile : public File<detector, DataType> {
|
||||
FILE *fp = nullptr;
|
||||
|
||||
|
||||
public:
|
||||
NumpyFile(std::filesystem::path fname);
|
||||
Frame<DataType> *get_frame(int frame_number) override;
|
||||
header_t header{};
|
||||
static constexpr std::array<char, 6> magic_str{'\x93', 'N', 'U', 'M', 'P', 'Y'};
|
||||
uint8_t major_ver_{};
|
||||
uint8_t minor_ver_{};
|
||||
uint32_t header_len{};
|
||||
uint8_t header_len_size{};
|
||||
const uint8_t magic_string_length{6};
|
||||
ssize_t header_size{};
|
||||
inline ssize_t pixels_per_frame() {
|
||||
return std::accumulate(header.shape.begin() + 1, header.shape.end(), 1, std::multiplies<uint64_t>());
|
||||
};
|
||||
inline ssize_t bytes_per_frame() { return header.dtype.itemsize * pixels_per_frame(); };
|
||||
};
|
@ -1,6 +1,7 @@
|
||||
#include "aare/defs.hpp"
|
||||
#pragma once
|
||||
#include "aare/FileFactory.hpp"
|
||||
#include "aare/NumpyFile.hpp"
|
||||
#include "aare/defs.hpp"
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <filesystem>
|
||||
@ -8,22 +9,17 @@
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
|
||||
template <DetectorType detector, typename DataType> class NumpyFileFactory : public FileFactory<detector, DataType> {
|
||||
private:
|
||||
std::ifstream f;
|
||||
void read_data(File<detector, DataType> *_file);
|
||||
|
||||
public:
|
||||
NumpyFileFactory(std::filesystem::path fpath);
|
||||
void parse_metadata(File<detector, DataType> *_file) override;
|
||||
void open_subfiles(File<detector, DataType> *_file) override;
|
||||
File<detector, DataType> *load_file() override;
|
||||
void parse_fname(File<detector, DataType> *){};
|
||||
|
||||
uint8_t major_ver() const noexcept { return major_ver_; }
|
||||
uint8_t minor_ver() const noexcept { return minor_ver_; }
|
||||
|
||||
private:
|
||||
static constexpr std::array<char, 6> magic_str{'\x93', 'N', 'U', 'M', 'P', 'Y'};
|
||||
uint8_t major_ver_{};
|
||||
uint8_t minor_ver_{};
|
||||
uint32_t header_len{};
|
||||
uint8_t header_len_size{};
|
||||
const uint8_t magic_string_length{6};
|
||||
};
|
Reference in New Issue
Block a user