From a84154d92f8bdd1722f5d6512125444768a7ae3f Mon Sep 17 00:00:00 2001 From: Carl Philipp Klemm Date: Fri, 25 Oct 2024 11:50:16 +0200 Subject: [PATCH] add relaxis file to pass fail dataset converter --- CMakeLists.txt | 10 ++++-- src/common.cpp | 11 +++--- src/common.h | 2 +- src/hash.cpp | 49 ++++++++++++++++++++++++++ src/hash.h | 4 +++ src/madap.cpp | 2 +- src/maryam.cpp | 2 +- src/relaxis.cpp | 17 ++++++--- src/rlxpassfail.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 169 insertions(+), 14 deletions(-) create mode 100644 src/hash.cpp create mode 100644 src/hash.h create mode 100644 src/rlxpassfail.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index a58f696..a50c35b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,12 +5,13 @@ project(dataformaters) set(COMMON_SRC_FILES src/tokenize.cpp src/common.cpp + src/hash.cpp ) if(WIN32) - set(COMMON_LINK_LIBRARIES -leisgenerator_static -static-libgcc -static-libstdc++ -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive -Bdynamic) + set(COMMON_LINK_LIBRARIES -lkisstype_static -leisgenerator_static -static-libgcc -static-libstdc++ -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive -Bdynamic) else() - set(COMMON_LINK_LIBRARIES -leisgenerator) + set(COMMON_LINK_LIBRARIES -leisgenerator -lkisstype) endif() add_compile_options( @@ -37,6 +38,11 @@ target_link_libraries(maryamtoeis ${COMMON_LINK_LIBRARIES}) set_property(TARGET maryamtoeis PROPERTY CXX_STANDARD 17) install(TARGETS maryamtoeis RUNTIME DESTINATION bin) +add_executable(rlxpassfail ${COMMON_SRC_FILES} src/rlxpassfail.cpp) +target_link_libraries(rlxpassfail ${COMMON_LINK_LIBRARIES} -lrelaxisloader) +set_property(TARGET rlxpassfail PROPERTY CXX_STANDARD 17) +install(TARGETS rlxpassfail RUNTIME DESTINATION bin) + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") diff --git a/src/common.cpp b/src/common.cpp index 1c7d6c9..fc2d072 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -1,6 +1,6 @@ #include "common.h" -#include +#include #include #include @@ -22,12 +22,15 @@ bool saveData(const std::string& exportName, const ModelData& data, const std::f ++classIndex; } while(std::filesystem::exists(outDir/filename)); - if(!saveToDisk(eis::EisSpectra(data.data, data.modelStr, data.id + ", \"" + originFile.filename().string() + "\""), outDir/filename)) + try + { + eis::Spectra(data.data, data.modelStr, data.id + ", \"" + originFile.filename().string() + "\"").saveToDisk(outDir/filename); + return true; + } + catch(...) { - std::cerr<<"Unable to save to "< #include -#include +#include struct ModelData { diff --git a/src/hash.cpp b/src/hash.cpp new file mode 100644 index 0000000..9e41d33 --- /dev/null +++ b/src/hash.cpp @@ -0,0 +1,49 @@ +#include "hash.h" + +uint64_t murmurHash64(const void* key, int len, uint64_t seed) +{ + const uint64_t m = 0xc6a4a7935bd1e995; + const int r = 47; + + uint64_t h = seed ^ (len * m); + + const uint64_t * data = (const uint64_t *)key; + const uint64_t * end = data + (len/8); + + while(data != end) + { + uint64_t k = *data++; + k *= m; + k ^= k >> r; + k *= m; + h ^= k; + h *= m; + } + + const unsigned char * data2 = (const unsigned char*)data; + + switch(len & 7) + { + case 7: + h ^= ((uint64_t) data2[6]) << 48; + case 6: + h ^= ((uint64_t) data2[5]) << 40; + case 5: + h ^= ((uint64_t) data2[4]) << 32; + case 4: + h ^= ((uint64_t) data2[3]) << 24; + case 3: + h ^= ((uint64_t) data2[2]) << 16; + case 2: + h ^= ((uint64_t) data2[1]) << 8; + case 1: + h ^= ((uint64_t) data2[0]); + h *= m; + }; + + h ^= h >> r; + h *= m; + h ^= h >> r; + + return h; +} diff --git a/src/hash.h b/src/hash.h new file mode 100644 index 0000000..5f15ccd --- /dev/null +++ b/src/hash.h @@ -0,0 +1,4 @@ +#pragma once +#include + +uint64_t murmurHash64(const void* key,int len, uint64_t seed); diff --git a/src/madap.cpp b/src/madap.cpp index 92fbdaf..fb8414d 100644 --- a/src/madap.cpp +++ b/src/madap.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include diff --git a/src/maryam.cpp b/src/maryam.cpp index 2845a2a..9b3623c 100644 --- a/src/maryam.cpp +++ b/src/maryam.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include "csvBackend.h" #include "common.h" diff --git a/src/relaxis.cpp b/src/relaxis.cpp index bdf7440..ed5be4f 100644 --- a/src/relaxis.cpp +++ b/src/relaxis.cpp @@ -1,6 +1,7 @@ #include #include -#include +#include +#include #include #include #include @@ -10,6 +11,7 @@ #include #include +#include "hash.h" #include "common.h" static bool saveDataRlx(const rlx::Spectra& data, const std::filesystem::path& outDir, const std::filesystem::path& originFile) @@ -25,6 +27,8 @@ static bool saveDataRlx(const rlx::Spectra& data, const std::filesystem::path& o filename.assign("relaxisExport_"); filename.concat(modelStrWithoutParams); filename.concat("_"); + filename.concat(std::to_string(murmurHash64(originFile.string().c_str(), originFile.string().length(), 24))); + filename.concat("_"); filename.concat(std::to_string(classIndex)); filename.concat(".csv"); ++classIndex; @@ -38,14 +42,17 @@ static bool saveDataRlx(const rlx::Spectra& data, const std::filesystem::path& o labels.push_back(meta.second); } - eis::EisSpectra eisSpectra(data.data, data.model, originFile, labels, labelNames); + eis::Spectra eisSpectra(data.data, data.model, originFile, labels, labelNames); - if(!eisSpectra.saveToDisk(outDir/filename)) + try + { + eisSpectra.saveToDisk(outDir/filename); + return true; + } + catch(...) { - std::cerr<<"Unable to save to "< +#include +#include +#include +#include +#include + +int main(int argc, char** argv) +{ + if(argc < 2) + { + std::cout<<"Usage: "< data(spectra->length); + for(size_t i = 0; i < spectra->length; ++i) + { + data[i].im = {real[i], imag[i]}; + data[i].omega = omega[i]; + } + + data = eis::rescale(data, 50); + + eis::Spectra eisSpectra(data, !meta || meta->value == 0 ? "Pass" : "Fail", argv[i]); + size_t index = 0; + std::filesystem::path filename; + do + { + filename.assign("relaxisPassFail_"); + filename.concat(!meta || meta->value == 0 ? "Pass" : "Fail"); + filename.concat("_"); + filename.concat(std::to_string(index)); + filename.concat(".csv"); + ++index; + } while(std::filesystem::exists(outdir/filename)); + eisSpectra.saveToDisk(outdir/filename); + ++spectra; + } + rlx_spectra_free_array(spectras); + } + rlx_project_free_array(projects); + rlx_close_file(file); + } + + return 0; +}