diff --git a/src/external/Nonlocal/PNL_PippardFitter.cpp b/src/external/Nonlocal/PNL_PippardFitter.cpp index fc0ca26c..74e41dbd 100644 --- a/src/external/Nonlocal/PNL_PippardFitter.cpp +++ b/src/external/Nonlocal/PNL_PippardFitter.cpp @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -52,14 +53,14 @@ PNL_PippardFitterGlobal::PNL_PippardFitterGlobal() { // read XML startup file char startup_path_name[128]; - TSAXParser *saxParser = new TSAXParser(); - PNL_StartupHandler *fStartupHandler = new PNL_StartupHandler(); + std::unique_ptr saxParser = std::make_unique(); + fStartupHandler = std::make_unique(); strcpy(startup_path_name, fStartupHandler->GetStartupFilePath().Data()); - saxParser->ConnectToHandler("PNL_StartupHandler", fStartupHandler); + saxParser->ConnectToHandler("PNL_StartupHandler", fStartupHandler.get()); //Int_t status = saxParser->ParseFile(startup_path_name); // parsing the file as above seems to lead to problems in certain environments; // use the parseXmlFile function instead (see PUserFcnBase.cpp for the definition) - Int_t status = parseXmlFile(saxParser, startup_path_name); + Int_t status = parseXmlFile(saxParser.get(), startup_path_name); // check for parse errors if (status) { // error std::cout << std::endl << ">> PNL_PippardFitterGlobal::PNL_PippardFitterGlobal: **WARNING** Reading/parsing nonlocal_startup.xml failed."; @@ -67,14 +68,8 @@ PNL_PippardFitterGlobal::PNL_PippardFitterGlobal() fValid = false; } - // clean up - if (saxParser) { - delete saxParser; - saxParser = 0; - } - // check if everything went fine with the startup handler - if (!fStartupHandler->IsValid()) { + if (!fStartupHandler->IsValid() && fValid) { std::cout << std::endl << ">> PNL_PippardFitterGlobal::PNL_PippardFitterGlobal **PANIC ERROR**"; std::cout << std::endl << ">> startup handler too unhappy. Will terminate unfriendly, sorry."; std::cout << std::endl; @@ -84,12 +79,14 @@ PNL_PippardFitterGlobal::PNL_PippardFitterGlobal() fFourierPoints = fStartupHandler->GetFourierPoints(); // load all the TRIM.SP rge-files - fRgeHandler = new PRgeHandler("./nonlocal_startup.xml"); - if (!fRgeHandler->IsValid()) { - std::cout << std::endl << ">> PNL_PippardFitterGlobal::PNL_PippardFitterGlobal **PANIC ERROR**"; - std::cout << std::endl << ">> rge data handler too unhappy. Will terminate unfriendly, sorry."; - std::cout << std::endl; - fValid = false; + if (fValid) { + fRgeHandler = std::make_unique("./nonlocal_startup.xml"); + if (!fRgeHandler->IsValid()) { + std::cout << std::endl << ">> PNL_PippardFitterGlobal::PNL_PippardFitterGlobal **PANIC ERROR**"; + std::cout << std::endl << ">> rge data handler too unhappy. Will terminate unfriendly, sorry."; + std::cout << std::endl; + fValid = false; + } } fPlanPresent = false; @@ -124,15 +121,6 @@ PNL_PippardFitterGlobal::~PNL_PippardFitterGlobal() fftw_free(fFieldq); fFieldB = 0; } - - if (fRgeHandler) { - delete fRgeHandler; - fRgeHandler = 0; - } - if (fStartupHandler) { - delete fStartupHandler; - fStartupHandler = 0; - } } //-------------------------------------------------------------------------- diff --git a/src/external/Nonlocal/PNL_PippardFitter.h b/src/external/Nonlocal/PNL_PippardFitter.h index 6b442018..2d4a971c 100644 --- a/src/external/Nonlocal/PNL_PippardFitter.h +++ b/src/external/Nonlocal/PNL_PippardFitter.h @@ -36,6 +36,8 @@ //#endif #include +#include + #include "PMusr.h" #include "PUserFcnBase.h" #include "PNL_StartupHandler.h" @@ -57,8 +59,8 @@ class PNL_PippardFitterGlobal private: Bool_t fValid{true}; - PNL_StartupHandler *fStartupHandler{nullptr}; - PRgeHandler *fRgeHandler{nullptr}; + std::unique_ptr fStartupHandler; + std::unique_ptr fRgeHandler; mutable std::vector fPreviousParam; diff --git a/src/external/Nonlocal/cmake/dnlf_config.h.in b/src/external/Nonlocal/cmake/dnlf_config.h.in index 04f16c07..5b8be79a 100644 --- a/src/external/Nonlocal/cmake/dnlf_config.h.in +++ b/src/external/Nonlocal/cmake/dnlf_config.h.in @@ -2,3 +2,7 @@ #define PROJECT_VERSION "@PROJECT_VERSION@" +#define GIT_BRANCH "@GIT_BRANCH@" +#define GIT_CURRENT_SHA1 @GIT_CURRENT_SHA1@ + +#define ROOT_VERSION_USED "@ROOT_VERSION_USED@" diff --git a/src/external/Nonlocal/prog/CMakeLists.txt b/src/external/Nonlocal/prog/CMakeLists.txt index 98bf895b..f5213f07 100644 --- a/src/external/Nonlocal/prog/CMakeLists.txt +++ b/src/external/Nonlocal/prog/CMakeLists.txt @@ -1,23 +1,64 @@ #--- dump_nonlocal_field ------------------------------------------------------ +cmake_minimum_required(VERSION 3.15) + project(dump_nonlocal_field VERSION 1.0.0 LANGUAGES C CXX) +#--- check for git ------------------------------------------------------------ +find_package(Git REQUIRED) + +#--- check for ROOT ----------------------------------------------------------- +find_package(ROOT 6.18 REQUIRED COMPONENTS Gui MathMore Minuit2 XMLParser) +if (ROOT_mathmore_FOUND) + execute_process(COMMAND root-config --bindir OUTPUT_VARIABLE ROOT_BINDIR) + string(STRIP ${ROOT_BINDIR} ROOT_BINDIR) + execute_process(COMMAND root-config --version OUTPUT_VARIABLE ROOT_VERSION_USED) + string(STRIP ${ROOT_VERSION_USED} ROOT_VERSION_USED) + execute_process(COMMAND root-config --incdir OUTPUT_VARIABLE ROOT_INC) + string(STRIP ${ROOT_INC} ROOT_INC) + message("-- Found ROOT: ${ROOT_BINDIR} (found version: ${ROOT_VERSION})") + #---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY) + include(${ROOT_USE_FILE}) +endif (ROOT_mathmore_FOUND) + +#--- check for boost ---------------------------------------------------------- +find_package(Boost REQUIRED + COMPONENTS + system + filesystem +) +message(STATUS "Boost libs: ${Boost_LIBRARIES}") + +#--- check for fftw3 ---------------------------------------------------------- +#find_package(FFTW3 REQUIRED) + +# Get the current working branch +execute_process( + COMMAND git rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Get the latest abbreviated commit hash of the working branch +execute_process( + COMMAND git log -1 --pretty="%h, %ci" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_CURRENT_SHA1 + OUTPUT_STRIP_TRAILING_WHITESPACE +) + + #--- feed dnlf_config.h ----------------------------------------- set(HAVE_DNLF_CONFIG_H 1 CACHE INTERNAL "dnlf_config.h is available") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/dnlf_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/dnlf_config.h) -#--- start create git-revision.h ---------------------------------------------- -if (IS_GIT_REPO) - set(HAVE_GIT_REV_H "-DHAVE_GIT_REV_H") -else (IS_GIT_REPO) - set(HAVE_GIT_REV_H "") -endif (IS_GIT_REPO) - add_executable(dump_nonlocal_field dump_nonlocal_field.cpp) target_compile_options(dump_nonlocal_field BEFORE PRIVATE "-DHAVE_CONFIG_H" "-DHAVE_DNLF_CONFIG_H" "${HAVE_GIT_REV_H}") target_include_directories(dump_nonlocal_field BEFORE PRIVATE $ + $ $ $ $ diff --git a/src/external/Nonlocal/prog/dump_nonlocal_field.cpp b/src/external/Nonlocal/prog/dump_nonlocal_field.cpp index 15a27082..08a3e5c3 100644 --- a/src/external/Nonlocal/prog/dump_nonlocal_field.cpp +++ b/src/external/Nonlocal/prog/dump_nonlocal_field.cpp @@ -38,15 +38,9 @@ #include "PNL_PippardFitter.h" -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif #ifdef HAVE_DNLF_CONFIG_H #include "dnlf_config.h" #endif -#ifdef HAVE_GIT_REV_H -#include "git-revision.h" -#endif //----------------------------------------------------------------------------- /** @@ -202,18 +196,10 @@ int main(int argc, char* argv[]) if (argv[i][0] != '-') { // must be the msr-file name msrFileName = argv[i]; } else if (!strcmp(argv[i], "--version")) { -#ifdef HAVE_CONFIG_H -#ifdef HAVE_GIT_REV_H - std::cout << std::endl << "dump_nonlocal_field version: " << PROJECT_VERSION << " (" << PACKAGE_VERSION << "), git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << " (" << BUILD_TYPE << "), ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl; +#ifdef HAVE_DNLF_CONFIG_H + std::cout << std::endl << "dump_nonlocal_field version: " << PROJECT_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << ", ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl; #else - std::cout << std::endl << "dump_nonlocal_field version: " << PROJECT_VERSION << " (" << PACKAGE_VERSION << "/" << BUILD_TYPE << "), ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl; -#endif -#else -#ifdef HAVE_GIT_REV_H - std::cout << std::endl << "dump_nonlocal_field git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl; -#else - std::cout << std::endl << "dump_nonlocal_field version: unknown" << std::endl << std::endl; -#endif + std::cout << std::endl << "dump_nonlocal_field version: " << PROJECT_VERSION << ", ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl; #endif return 0; } else if (!strcmp(argv[i], "--help")) { @@ -260,14 +246,17 @@ int main(int argc, char* argv[]) // calculate field and write it to file PNL_PippardFitterGlobal pip; - pip.CalculateField(param); + if (pip.IsValid()) + pip.CalculateField(param); + else + return -3; std::ofstream fout(outFileName.c_str(), std::ofstream::out); if (!fout.is_open()) { std::cout << std::endl; std::cerr << "**ERROR** can not write to file '" << outFileName << "'." << std::endl; std::cout << std::endl; - return -3; + return -4; } // write header fout << "% z (nm), field (G)" << std::endl;