diff --git a/CMakeLists.txt b/CMakeLists.txt index b63c6e5..948ae39 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,16 +1,15 @@ cmake_minimum_required(VERSION 3.0) -project(mdaptoeis) +project(dataformaters) -set(SRC_FILES - src/main.cpp +set(COMMON_SRC_FILES src/tokenize.cpp + src/common.cpp ) -add_executable(${PROJECT_NAME} ${SRC_FILES}) -target_link_libraries( ${PROJECT_NAME} -leisgenerator) -target_include_directories(${PROJECT_NAME} PRIVATE) -target_compile_options(${PROJECT_NAME} PRIVATE +set(COMMON_LINK_LIBRARIES -leisgenerator) + +add_compile_options( "-Wall" "-Wno-reorder" "-Wfatal-errors" @@ -19,8 +18,22 @@ target_compile_options(${PROJECT_NAME} PRIVATE "-g" "-fno-strict-aliasing" ) -set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17) + +add_executable(madaptoeis ${COMMON_SRC_FILES} src/madap.cpp) +target_link_libraries(madaptoeis ${COMMON_LINK_LIBRARIES}) +set_property(TARGET madaptoeis PROPERTY CXX_STANDARD 17) +install(TARGETS madaptoeis RUNTIME DESTINATION bin) + +add_executable(relaxistoeis ${COMMON_SRC_FILES} src/relaxis.cpp) +target_link_libraries(relaxistoeis ${COMMON_LINK_LIBRARIES} -lrelaxisloaderpp) +set_property(TARGET relaxistoeis PROPERTY CXX_STANDARD 17) +install(TARGETS relaxistoeis RUNTIME DESTINATION bin) + +add_executable(maryamtoeis ${COMMON_SRC_FILES} src/maryam.cpp) +target_link_libraries(maryamtoeis ${COMMON_LINK_LIBRARIES}) +set_property(TARGET maryamtoeis PROPERTY CXX_STANDARD 17) +install(TARGETS maryamtoeis RUNTIME DESTINATION bin) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") -install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin) + diff --git a/src/main.cpp b/src/main.cpp deleted file mode 100644 index 5223eb0..0000000 --- a/src/main.cpp +++ /dev/null @@ -1,135 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "csvBackend.h" -#include "tokenize.h" - -struct ModelData -{ - std::string modelStr; - std::string id; - size_t classNum; - size_t classIndex; - double temperature; - std::vector data; -}; - -void trimBrackets(std::string& str) -{ - if(str[0] == '[') - str.erase(str.begin()); - if(str.back() == ']') - str.pop_back(); -} - -std::vector parseEisDataFromMadapArrays(std::string& freqArray, std::string& realArray, std::string& imaginaryArray) -{ - assert(realArray.size() > 2); - assert(imaginaryArray.size() > 2); - trimBrackets(realArray); - trimBrackets(imaginaryArray); - trimBrackets(freqArray); - - std::vector freqTokens = tokenize(freqArray, ','); - std::vector realTokens = tokenize(realArray, ','); - std::vector imaginaryTokens = tokenize(imaginaryArray, ','); - assert(realTokens.size() == freqTokens.size() && realTokens.size() == imaginaryTokens.size()); - - std::vector data; - data.reserve(freqTokens.size()); - for(size_t i = 0; i < freqTokens.size(); ++i) - data.push_back(eis::DataPoint(std::complex(std::stod(realTokens[i]), std::stod(imaginaryTokens[i])), 2*M_PI*std::stod(freqTokens[i]))); - - std::sort(data.begin(), data.end(), [](const eis::DataPoint& a, const eis::DataPoint& b){return a.omega < b.omega;}); - return data; -} - -bool saveData(const ModelData& data, const std::filesystem::path& outDir) -{ - std::filesystem::path filename("madapExport_"); - std::string modelStrWithoutParams = data.modelStr; - eis::purgeEisParamBrackets(modelStrWithoutParams); - filename.concat(modelStrWithoutParams); - filename.concat("_"); - filename.concat(std::to_string(data.classIndex)); - filename.concat(".csv"); - if(!saveToDisk(data.data, outDir/filename, data.modelStr + ", " + data.id + "@" + std::to_string(data.temperature))) - { - std::cerr<<"Unable to save to "<, io::no_quote_escape<';'>> csvFile(argv[1]); - csvFile.read_header(io::ignore_extra_column, "experimentID", "temperature", "frequency", - "real_impedance", "imaginary_impedance", "EIS_fittedParameters", "EIS_circuit"); - - if(!csvFile.next_line()) - return 1; - if(!csvFile.next_line()) - return 1; - - std::string frequencyArray; - std::string realArray; - std::string imaginaryArray; - std::string paramArray; - std::string circutString; - std::string idStr; - double temperature; - std::vector> modelStrings; - - if(!checkDir("./out")) - return 1; - - while(csvFile.read_row(idStr, temperature, frequencyArray, realArray, imaginaryArray, paramArray, circutString)) - { - ModelData data; - data.modelStr = eis::madapToEis(circutString, paramArray); - data.id = idStr; - auto iterator = std::find_if(modelStrings.begin(), modelStrings.end(), - [circutString](std::pair& pair){return circutString == pair.first;}); - if(iterator != modelStrings.end()) - { - ++iterator->second; - data.classIndex = iterator->second; - data.classNum = std::distance(modelStrings.begin(), iterator); - } - else - { - modelStrings.push_back(std::pair(circutString, 0)); - data.classIndex = 0; - data.classNum = modelStrings.size()-1; - std::cout<<"found "< +#include +#include +#include + +#include "csvBackend.h" +#include "common.h" + +int main(int argc, char** argv) +{ + if(argc < 4) + { + std::cerr<<"Usage: "<<(argc > 0 ? argv[0] : "NULL")<<" [OUTDIR] [MODEL] [FILENAME(S)]\n"; + return 1; + } + + std::filesystem::path outDir(argv[1]); + if(!checkDir(outDir)) + return 1; + + try + { + for(int i = 3; i < argc; ++i) + { + io::CSVReader<3, io::trim_chars<' '>, io::no_quote_escape<'\t'>> csvFile(argv[i]); + if(!csvFile.next_line()) + return 1; + + csvFile.read_header(io::ignore_extra_column, "Impedance Real part", "Impedance Imaginary Part", "Frequency [Hz]"); + + std::string frequency; + std::string real; + std::string imaginary; + ModelData data; + data.modelStr = eis::relaxisToEis(argv[2]); + data.id = std::to_string(i-3); + while(csvFile.read_row(real, imaginary, frequency)) + data.data.push_back(eis::DataPoint(std::complex(std::stod(real), std::stod(imaginary)), std::stod(frequency)*2*M_PI)); + + saveData("maryam", data, outDir, argv[i]); + } + } + catch (const std::invalid_argument& err) + { + std::cerr<<"Could not read file "<