From 2d3fdc3cc1c2d682784bed895948411f7e00a73a Mon Sep 17 00:00:00 2001 From: Carl Philipp Klemm <philipp@uvos.xyz> Date: Mon, 12 Jun 2023 16:29:07 +0200 Subject: [PATCH] improve error handling and filtering --- src/common.cpp | 2 +- src/relaxis.cpp | 102 ++++++++++++++++++++++++++++++++++-------------- 2 files changed, 73 insertions(+), 31 deletions(-) diff --git a/src/common.cpp b/src/common.cpp index 40465cb..045efdc 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -22,7 +22,7 @@ bool saveData(const std::string& exportName, const ModelData& data, const std::f ++classIndex; } while(std::filesystem::exists(outDir/filename)); - if(!saveToDisk(data.data, outDir/filename, data.modelStr + ", " + data.id + ", \"" + std::string(originFile.filename()) + "\"")) + if(!saveToDisk(eis::EisSpectra(data.data, data.modelStr, data.id + ", \"" + std::string(originFile.filename()) + "\""), outDir/filename)) { std::cerr<<"Unable to save to "<<outDir/filename; return false; diff --git a/src/relaxis.cpp b/src/relaxis.cpp index 070c0b2..826eb75 100644 --- a/src/relaxis.cpp +++ b/src/relaxis.cpp @@ -1,5 +1,7 @@ +#include <cmath> #include <eisgenerator/translators.h> #include <eisgenerator/eistype.h> +#include <eisgenerator/model.h> #include <relaxisloaderpp/relaxisloaderpp.h> #include <iostream> #include <string> @@ -40,50 +42,90 @@ int main(int argc, char** argv) { if(ignoreArgs.find(arg) != ignoreArgs.end()) continue; - rlx::File file(argv[arg]); - std::cout<<"Loaded "<<argv[arg]<<" file has "<<file.getProjectCount()<<" project(s)\n"; - - for(size_t i = 0; i < file.getProjectCount(); ++i) + try { - try + rlx::File file(argv[arg]); + std::cout<<"Loaded "<<argv[arg]<<" file has "<<file.getProjectCount()<<" project(s)\n"; + + for(size_t i = 0; i < file.getProjectCount(); ++i) { - rlx::Project project = file.getProject(i); - std::cout<<"Project "<<i<<" has "<<project.getSpectraCount()<<" spectra\n"; - for(size_t j = 0; j < project.getSpectraCount(); ++j) + try { - try + rlx::Project project = file.getProject(i); + std::cout<<"Project "<<i<<" has "<<project.getSpectraCount()<<" spectra\n"; + for(size_t j = 0; j < project.getSpectraCount(); ++j) { - rlx::Spectra spectra = project.getSpectra(j); - if(!spectra.fitted) + try + { + rlx::Spectra spectra = project.getSpectra(j); + if(!spectra.fitted) + { + std::cout<<"skipping spectra "<<spectra.id<<" as this spectra is not fitted\n"; + continue; + } + if(spectra.model.empty()) + { + std::cout<<"skipping spectra "<<spectra.id<<" as this spectra has no model\n"; + continue; + } + + std::cout<<spectra.model<<'\n'; + + std::vector<fvalue> omega(spectra.data.size()); + for(size_t i = 0; i < spectra.data.size(); ++i) + omega[i] = spectra.data[i].omega; + + eis::Model model(spectra.model); + + std::vector<eis::DataPoint> genData = model.executeSweep(omega); + + fvalue dist = eisNyquistDistance(spectra.data, genData); + + if(std::isnan(dist)) + { + std::cout<<"skipping spectra "<<spectra.id<<" as this spectra dosent appear to be fitted correctly dist is NAN!\n"; + continue; + } + else if(std::isinf(dist) || dist > 2.0) + { + std::cout<<"skipping spectra "<<spectra.id<<" as this spectra dosent appear to be fitted correctly dist is too large\n"; + continue; + } + else + { + std::cout<<"spectra "<<dist<<" away from theoretical values\n"; + } + + ModelData data; + data.data = spectra.data; + data.modelStr = spectra.model; + data.id = std::to_string(spectra.id); + saveData("relaxis", data, outDir, argv[arg]); + } + catch(const eis::file_error& err) { - std::cout<<"skipping spectra "<<spectra.id<<" as this spectra is not fitted\n"; + std::cerr<<"error spectra " <<j<<" from file "<<argv[arg]<<" librelaxisloaderpp: "<<err.what()<<std::endl; continue; } - if(spectra.model.empty()) + catch(const eis::parse_errror& err) { - std::cout<<"skipping spectra "<<spectra.id<<" as this spectra has no model\n"; + std::cerr<<"error spectra " <<j<<" from file "<<argv[arg]<<' '<<err.what()<<std::endl; continue; } - - ModelData data; - data.data = spectra.data; - data.modelStr = spectra.model; - data.id = std::to_string(spectra.id); - saveData("relaxis", data, outDir, argv[arg]); - } - catch(const eis::file_error& err) - { - std::cerr<<"error spectra " <<i<<" from file "<<argv[arg]<<" librelaxisloaderpp: "<<err.what()<<std::endl; - continue; } } + catch(const eis::file_error& err) + { + std::cerr<<"error reading file "<<argv[arg]<<" librelaxisloaderpp: "<<err.what()<<std::endl; + continue; + } } - catch(const eis::file_error& err) - { - std::cerr<<"error reading file "<<argv[arg]<<" librelaxisloaderpp: "<<err.what()<<std::endl; - continue; - } + } + catch(const eis::file_error& err) + { + std::cout<<"Cant load "<<argv[arg]<<' '<<err.what()<<std::endl; + continue; } } return 0; -- GitLab