From a6ff0fc794e687df1045021fdb9d19ac7f041342 Mon Sep 17 00:00:00 2001 From: Bechir Braham Date: Mon, 19 Feb 2024 18:58:35 +0100 Subject: [PATCH] save work --- .clang-format | 2 +- .vscode/c_cpp_properties.json | 3 +- .vscode/launch.json | 55 ++++++++++++++ .vscode/settings.json | 17 ++++- .vscode/tasks.json | 25 +++++++ CMakeLists.txt | 2 +- data/m3_d0_f0_0.raw | Bin 0 -> 15472 bytes data/m3_master_0.json | 55 ++++++++++++++ src/file_io/CMakeLists.txt | 1 + src/file_io/file/File.hpp | 57 +++++++++------ src/file_io/file/SubFile.cpp | 71 +++++++++++++++++++ src/file_io/file/SubFile.hpp | 47 ++++++++++++ src/file_io/file_factory/FileFactory.cpp | 2 +- src/file_io/file_factory/FileFactory.hpp | 2 +- src/file_io/file_factory/JsonFileFactory.cpp | 53 +++++++------- src/file_io/file_factory/JsonFileFactory.hpp | 1 + src/main.cpp | 4 +- test | 0 18 files changed, 343 insertions(+), 54 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 data/m3_d0_f0_0.raw create mode 100644 data/m3_master_0.json create mode 100644 src/file_io/file/SubFile.cpp create mode 100644 src/file_io/file/SubFile.hpp delete mode 100644 test diff --git a/.clang-format b/.clang-format index 2a4b795..d6ec39a 100644 --- a/.clang-format +++ b/.clang-format @@ -2,6 +2,6 @@ BasedOnStyle: LLVM IndentWidth: 4 UseTab: Never -ColumnLimit: 80 +ColumnLimit: 120 AlignConsecutiveAssignments: false AlignConsecutiveMacros: true \ No newline at end of file diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 10e21c5..930311e 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -12,7 +12,8 @@ "cppStandard": "c++17", "intelliSenseMode": "linux-gcc-x64", "configurationProvider": "ms-vscode.cmake-tools", - "compilerArgs": [] + "compilerArgs": [], + "compileCommands": "/home/l_bechir/github/aare/build/compile_commands.json" } ], "version": 4 diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..ba0f5fe --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,55 @@ +{ + "configurations": [ + { + "name": "(gdb) Launch", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/aare", + "args": [], + "stopAtEntry": true, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + }, + { + "name": "C/C++: g++ build and debug active file", + "type": "cppdbg", + "request": "launch", + "program": "${fileDirname}/${fileBasenameNoExtension}", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ], + "preLaunchTask": "C/C++: g++ build active file", + "miDebuggerPath": "/usr/bin/gdb" + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index c31a2ab..3e8d822 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -70,7 +70,22 @@ "stop_token": "cpp", "thread": "cpp", "valarray": "cpp", - "variant": "cpp" + "variant": "cpp", + "bitset": "cpp", + "charconv": "cpp", + "chrono": "cpp", + "format": "cpp", + "__bit_reference": "cpp", + "__config": "cpp", + "__hash_table": "cpp", + "__locale": "cpp", + "__node_handle": "cpp", + "__split_buffer": "cpp", + "__threading_support": "cpp", + "__verbose_abort": "cpp", + "execution": "cpp", + "ios": "cpp", + "locale": "cpp" }, "C_Cpp.errorSquiggles": "enabled" } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..eb42ea1 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,25 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: g++ build active file", + "command": "/usr/bin/g++", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}/${fileBasenameNoExtension}" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": "build", + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index eb20097..f3c82b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ find_package(fmt 6 REQUIRED) set(CMAKE_BUILD_TYPE "Debug") if (CMAKE_BUILD_TYPE STREQUAL "Debug") - set(OPTIMIZATION_FLAGS "-Og -ggdb3") + set(OPTIMIZATION_FLAGS "-Og -ggdb3 -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC") else() set(OPTIMIZATION_FLAGS "-O3") endif() diff --git a/data/m3_d0_f0_0.raw b/data/m3_d0_f0_0.raw new file mode 100644 index 0000000000000000000000000000000000000000..ab85ccf2123335c13fb73f3db8e5773f45ed75da GIT binary patch literal 15472 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 X;3J>-%oo1$jqm*6C%^d3AO7+`bGYI8 literal 0 HcmV?d00001 diff --git a/data/m3_master_0.json b/data/m3_master_0.json new file mode 100644 index 0000000..f6b4f31 --- /dev/null +++ b/data/m3_master_0.json @@ -0,0 +1,55 @@ +{ + "Version": 7.1, + "Timestamp": "Wed Sep 21 13:48:10 2022", + "Detector Type": "Mythen3", + "Timing Mode": "auto", + "Geometry": { + "x": 1, + "y": 1 + }, + "Image Size in bytes": 15360, + "Pixels": { + "x": 3840, + "y": 1 + }, + "Max Frames Per File": 10000, + "Frame Discard Policy": "nodiscard", + "Frame Padding": 1, + "Scan Parameters": "[disabled]", + "Total Frames": 1, + "Receiver Roi": { + "xmin": 4294967295, + "xmax": 4294967295, + "ymin": 4294967295, + "ymax": 4294967295 + }, + "Dynamic Range": 32, + "Ten Giga": 1, + "Period": "2ms", + "Counter Mask": "0x7", + "Exptime1": "0.1s", + "Exptime2": "0.1s", + "Exptime3": "0.1s", + "GateDelay1": "0ns", + "GateDelay2": "0ns", + "GateDelay3": "0ns", + "Gates": 1, + "Threshold Energies": "[-1, -1, -1]", + "Frames in File": 1, + "Frame Header Format": { + "Frame Number": "8 bytes", + "SubFrame Number/ExpLength": "4 bytes", + "Packet Number": "4 bytes", + "Bunch ID": "8 bytes", + "Timestamp": "8 bytes", + "Module Id": "2 bytes", + "Row": "2 bytes", + "Column": "2 bytes", + "Reserved": "2 bytes", + "Debug": "4 bytes", + "Round Robin Number": "2 bytes", + "Detector Type": "1 byte", + "Header Version": "1 byte", + "Packets Caught Mask": "64 bytes" + } +} \ No newline at end of file diff --git a/src/file_io/CMakeLists.txt b/src/file_io/CMakeLists.txt index f402919..f990c9b 100644 --- a/src/file_io/CMakeLists.txt +++ b/src/file_io/CMakeLists.txt @@ -4,6 +4,7 @@ target_include_directories(aare PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") set(FILE_IO_SOURCES "file/File.cpp" "file/JsonFile.cpp" + "file/SubFile.cpp" "file_factory/FileFactory.cpp" "file_factory/JsonFileFactory.cpp" "file_factory/RawFileFactory.cpp" diff --git a/src/file_io/file/File.hpp b/src/file_io/file/File.hpp index ed101a5..269e394 100644 --- a/src/file_io/file/File.hpp +++ b/src/file_io/file/File.hpp @@ -1,15 +1,33 @@ #pragma once -#include #include "defs.hpp" +#include #include +#include "SubFile.hpp" -class File -{ -public: -std::filesystem::path fname; +struct RawFileConfig { + int module_gap_row{}; + int module_gap_col{}; + + bool operator==(const RawFileConfig &other) const { + if (module_gap_col != other.module_gap_col) + return false; + if (module_gap_row != other.module_gap_row) + return false; + return true; + } +}; + + + +class File { + private: + using config = RawFileConfig; + public: + std::vector subfiles; + std::filesystem::path fname; std::filesystem::path base_path; - std::string base_name,ext; + std::string base_name, ext; int findex, n_subfiles; size_t total_frames{}; @@ -17,27 +35,22 @@ std::filesystem::path fname; DetectorType type; TimingMode timing_mode; int subfile_rows, subfile_cols; - bool quad {false}; - - - + bool quad{false}; ssize_t rows{}; ssize_t cols{}; uint8_t bitdepth{}; std::vector positions; + config cfg{0,0}; // File(); // ~File(); - - - - inline size_t bytes_per_frame() const{ - return rows*cols*bitdepth/8; - } - inline size_t pixels() const{ - return rows*cols; + inline size_t bytes_per_frame() const { return rows * cols * bitdepth / 8; } + inline size_t pixels() const { return rows * cols; } + inline void set_config(int row,int col){ + cfg.module_gap_row = row; + cfg.module_gap_col = col; } // TODO! Deal with fast quad and missing files @@ -49,13 +62,13 @@ std::filesystem::path fname; n_subfiles = n_mod; } - inline std::filesystem::path master_fname() { - return base_path / fmt::format("{}_master_{}{}", base_name, findex, ext); + return base_path / + fmt::format("{}_master_{}{}", base_name, findex, ext); } inline std::filesystem::path data_fname(int mod_id, int file_id) { - return base_path / fmt::format("{}_d{}_f{}_{}.raw", base_name, mod_id, file_id, findex); + return base_path / fmt::format("{}_d{}_f{}_{}.raw", base_name, mod_id, + file_id, findex); } // size_t total_frames(); - }; diff --git a/src/file_io/file/SubFile.cpp b/src/file_io/file/SubFile.cpp new file mode 100644 index 0000000..2e4dd70 --- /dev/null +++ b/src/file_io/file/SubFile.cpp @@ -0,0 +1,71 @@ +#include "SubFile.hpp" +#include +// #include + +/** + * SubFile methods + * + * + */ +template +SubFile::SubFile(std::filesystem::path fname, ssize_t rows, ssize_t cols) : rows(rows), cols(cols) { + fp = fopen(fname.c_str(), "rb"); + if (fp == nullptr) { + throw std::runtime_error("Could not open file " + fname.string()); + } + std::cout<<"File opened"< +NormalSubFile::NormalSubFile(std::filesystem::path fname, ssize_t rows, ssize_t cols) + : SubFile(fname, rows, cols){}; + +template size_t NormalSubFile::read_impl(std::byte *buffer) { + return fread(reinterpret_cast(buffer), sizeof(DataType) * this->rows * this->cols, 1, this->fp); +}; + + + +/** + * ReorderM03SubFile methods +*/ +template +ReorderM03SubFile::ReorderM03SubFile(std::filesystem::path fname, ssize_t rows, ssize_t cols) + : SubFile(fname, rows, cols){}; + +template size_t ReorderM03SubFile::read_impl(std::byte *buffer) { + std::vector tmp(this->pixels_per_frame()); + size_t rc = fread(reinterpret_cast(&tmp[0]), this->bytes_per_frame(), 1, this->fp); + + int adc_nr[32] = {300, 325, 350, 375, 300, 325, 350, 375, 200, 225, 250, 275, 200, 225, 250, 275, + 100, 125, 150, 175, 100, 125, 150, 175, 0, 25, 50, 75, 0, 25, 50, 75}; + int sc_width = 25; + int nadc = 32; + int pixels_per_sc = 5000; + + auto dst = reinterpret_cast(buffer); + int pixel = 0; + for (int i = 0; i != pixels_per_sc; ++i) { + for (int i_adc = 0; i_adc != nadc; ++i_adc) { + int col = adc_nr[i_adc] + (i % sc_width); + int row; + if ((i_adc / 4) % 2 == 0) + row = 199 - int(i / sc_width); + else + row = 200 + int(i / sc_width); + + dst[col + row * 400] = tmp[pixel]; + pixel++; + } + } + return rc; +}; + +template class NormalSubFile; +template class NormalSubFile; +template class ReorderM03SubFile; diff --git a/src/file_io/file/SubFile.hpp b/src/file_io/file/SubFile.hpp new file mode 100644 index 0000000..4d7980a --- /dev/null +++ b/src/file_io/file/SubFile.hpp @@ -0,0 +1,47 @@ +#pragma once +#include "defs.hpp" +#include +#include +#include + +template class SubFile { + protected: + FILE *fp = nullptr; + + public: + SubFile(std::filesystem::path fname, ssize_t rows, ssize_t cols); + inline size_t bytes_per_frame() const { return sizeof(DataType) * rows * cols; } + + inline size_t pixels_per_frame() const { return rows * cols; } + + + ssize_t rows{}; + ssize_t cols{}; + ssize_t n_frames{}; + int sub_file_index_{}; + size_t read_impl(std::byte *buffer){}; + +}; + +template class NormalSubFile : public SubFile { + public: + NormalSubFile(std::filesystem::path fname, ssize_t rows, ssize_t cols); + size_t read_impl(std::byte *buffer); +}; + +// template +// class FlipSubFile : public SubFile{ +// size_t read_impl() override; +// }; + +template class ReorderM03SubFile : public SubFile { + public: + ReorderM03SubFile(std::filesystem::path fname, ssize_t rows, ssize_t cols); + size_t read_impl(std::byte *buffer); +}; + +using JungfrauSubFile = NormalSubFile; +using Moench03SubFile = ReorderM03SubFile; +using Mythen3SubFile = NormalSubFile; + +using SubFileVariants = std::variant; diff --git a/src/file_io/file_factory/FileFactory.cpp b/src/file_io/file_factory/FileFactory.cpp index 601108e..46e69c4 100644 --- a/src/file_io/file_factory/FileFactory.cpp +++ b/src/file_io/file_factory/FileFactory.cpp @@ -72,5 +72,5 @@ void FileFactory::find_geometry(File& file) { file.rows = r * file.subfile_rows; file.cols = c * file.subfile_cols; - file.rows += (r - 1) * cfg.module_gap_row; + file.rows += (r - 1) * file.cfg.module_gap_row; } \ No newline at end of file diff --git a/src/file_io/file_factory/FileFactory.hpp b/src/file_io/file_factory/FileFactory.hpp index 6bf251c..7182fb0 100644 --- a/src/file_io/file_factory/FileFactory.hpp +++ b/src/file_io/file_factory/FileFactory.hpp @@ -14,7 +14,7 @@ public: virtual void parse_metadata(File&){}; - void find_geometry(File&){}; + void find_geometry(File&); void parse_fname(File&); template Header read_header(const std::filesystem::path &fname); diff --git a/src/file_io/file_factory/JsonFileFactory.cpp b/src/file_io/file_factory/JsonFileFactory.cpp index 9b46c99..f3a909a 100644 --- a/src/file_io/file_factory/JsonFileFactory.cpp +++ b/src/file_io/file_factory/JsonFileFactory.cpp @@ -1,33 +1,32 @@ #include "JsonFileFactory.hpp" #include "JsonFile.hpp" -#include "helpers.hpp" -#include -#include #include "defs.hpp" +#include "helpers.hpp" +#include +#include #include +#include "SubFile.hpp" using json = nlohmann::json; - - - -JsonFileFactory::JsonFileFactory(std::filesystem::path fpath){ - if(not is_master_file(fpath)) +JsonFileFactory::JsonFileFactory(std::filesystem::path fpath) { + if (not is_master_file(fpath)) throw std::runtime_error("Json file is not a master file"); this->fpath = fpath; } -void JsonFileFactory::parse_metadata(File& file){ - std::cout<<"Parsing metadata"<> j; double v = j["Version"]; file.version = fmt::format("{:.1f}", v); - std::string tmp; - j["Detector Type"].get_to(tmp); - file.type = StringTo(tmp); - file.timing_mode = StringTo(j["Timing Mode"].get()); + // std::string tmp; + // j["Detector Type"].get_to(tmp); + file.type = StringTo(j["Detector Type"].get()); + file.timing_mode = + StringTo(j["Timing Mode"].get()); file.total_frames = j["Frames in File"]; file.subfile_cols = j["Pixels"]["x"]; file.subfile_rows = j["Pixels"]["y"]; @@ -40,24 +39,30 @@ void JsonFileFactory::parse_metadata(File& file){ if (file.type == DetectorType::Eiger) { file.quad = (j["Quad"] == 1); } - - - - } -File JsonFileFactory::loadFile(){ - std::cout<<"Loading json file"<parse_fname(file); this->parse_metadata(file); file.find_number_of_subfiles(); this->find_geometry(file); - - - - + this->open_subfiles(file); return file; } \ No newline at end of file diff --git a/src/file_io/file_factory/JsonFileFactory.hpp b/src/file_io/file_factory/JsonFileFactory.hpp index 42ef35d..659594a 100644 --- a/src/file_io/file_factory/JsonFileFactory.hpp +++ b/src/file_io/file_factory/JsonFileFactory.hpp @@ -8,6 +8,7 @@ public: File loadFile() override; void parse_metadata(File&) override; JsonFileFactory(std::filesystem::path fpath); + void open_subfiles(File&); }; diff --git a/src/main.cpp b/src/main.cpp index e90319f..a1d3820 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,7 +4,7 @@ int main() { - FileFactory fileFactory=FileFactory::getFactory(std::filesystem::current_path()/"test.json"); - + FileFactory fileFactory=FileFactory::getFactory(std::filesystem::path("/home/l_bechir/github/aare")/"data"/"m3_master_0.json"); + std::cout<<"filefactory is of instance: "<