add support for whaterver maryam is useing
This commit is contained in:
parent
c78fa5bd42
commit
551e30b098
@ -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)
|
||||
|
||||
|
135
src/main.cpp
135
src/main.cpp
@ -1,135 +0,0 @@
|
||||
#include <eisgenerator/translators.h>
|
||||
#include <eisgenerator/eistype.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <filesystem>
|
||||
|
||||
#include "csvBackend.h"
|
||||
#include "tokenize.h"
|
||||
|
||||
struct ModelData
|
||||
{
|
||||
std::string modelStr;
|
||||
std::string id;
|
||||
size_t classNum;
|
||||
size_t classIndex;
|
||||
double temperature;
|
||||
std::vector<eis::DataPoint> data;
|
||||
};
|
||||
|
||||
void trimBrackets(std::string& str)
|
||||
{
|
||||
if(str[0] == '[')
|
||||
str.erase(str.begin());
|
||||
if(str.back() == ']')
|
||||
str.pop_back();
|
||||
}
|
||||
|
||||
std::vector<eis::DataPoint> 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<std::string> freqTokens = tokenize(freqArray, ',');
|
||||
std::vector<std::string> realTokens = tokenize(realArray, ',');
|
||||
std::vector<std::string> imaginaryTokens = tokenize(imaginaryArray, ',');
|
||||
assert(realTokens.size() == freqTokens.size() && realTokens.size() == imaginaryTokens.size());
|
||||
|
||||
std::vector<eis::DataPoint> data;
|
||||
data.reserve(freqTokens.size());
|
||||
for(size_t i = 0; i < freqTokens.size(); ++i)
|
||||
data.push_back(eis::DataPoint(std::complex<fvalue>(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 "<<outDir/filename;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool checkDir(const std::filesystem::path& outDir)
|
||||
{
|
||||
if(!std::filesystem::is_directory(outDir))
|
||||
{
|
||||
if(!std::filesystem::create_directory(outDir))
|
||||
{
|
||||
std::cerr<<outDir<<" dose not exist and can not be created\n";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
std::cerr<<"a file name is required\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
io::CSVReader<7, io::trim_chars<' ', '\t'>, 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<std::pair<std::string, size_t>> 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<std::string, size_t>& 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<std::string, size_t>(circutString, 0));
|
||||
data.classIndex = 0;
|
||||
data.classNum = modelStrings.size()-1;
|
||||
std::cout<<"found "<<circutString<<" as new class "<<data.classNum<<'\n';
|
||||
}
|
||||
data.temperature = temperature;
|
||||
data.data = parseEisDataFromMadapArrays(frequencyArray, realArray, imaginaryArray);
|
||||
saveData(data, "./out");
|
||||
}
|
||||
|
||||
}
|
49
src/maryam.cpp
Normal file
49
src/maryam.cpp
Normal file
@ -0,0 +1,49 @@
|
||||
#include <iostream>
|
||||
#include <filesystem>
|
||||
#include <eisgenerator/translators.h>
|
||||
#include <eisgenerator/eistype.h>
|
||||
|
||||
#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<fvalue>(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 "<<err.what();
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user