From 58ab025095aad9bad5c371f550befbae5dd2a81a Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 9 Nov 2022 13:11:30 +0100 Subject: [PATCH] add a rgeHandler tester which allows quickly to test rge-file related handling. --- src/tests/rgeHandler/CMakeLists.txt | 40 ++++ src/tests/rgeHandler/README | 36 ++++ src/tests/rgeHandler/cmake/config.h.in | 6 + .../rgeHandler/depth_profile_startup.xml | 37 ++++ src/tests/rgeHandler/main.cpp | 165 +++++++++++++++++ src/tests/rgeHandler/trimsp/SiC_E1000.rge | 35 ++++ src/tests/rgeHandler/trimsp/SiC_E10000.rge | 84 +++++++++ src/tests/rgeHandler/trimsp/SiC_E11000.rge | 89 +++++++++ src/tests/rgeHandler/trimsp/SiC_E12000.rge | 95 ++++++++++ src/tests/rgeHandler/trimsp/SiC_E13000.rge | 101 ++++++++++ src/tests/rgeHandler/trimsp/SiC_E14000.rge | 108 +++++++++++ src/tests/rgeHandler/trimsp/SiC_E15000.rge | 114 ++++++++++++ src/tests/rgeHandler/trimsp/SiC_E16000.rge | 120 ++++++++++++ src/tests/rgeHandler/trimsp/SiC_E17000.rge | 127 +++++++++++++ src/tests/rgeHandler/trimsp/SiC_E18000.rge | 134 ++++++++++++++ src/tests/rgeHandler/trimsp/SiC_E19000.rge | 140 ++++++++++++++ src/tests/rgeHandler/trimsp/SiC_E2000.rge | 41 ++++ src/tests/rgeHandler/trimsp/SiC_E20000.rge | 145 +++++++++++++++ src/tests/rgeHandler/trimsp/SiC_E21000.rge | 153 +++++++++++++++ src/tests/rgeHandler/trimsp/SiC_E22000.rge | 160 ++++++++++++++++ src/tests/rgeHandler/trimsp/SiC_E23000.rge | 167 +++++++++++++++++ src/tests/rgeHandler/trimsp/SiC_E24000.rge | 175 ++++++++++++++++++ src/tests/rgeHandler/trimsp/SiC_E3000.rge | 46 +++++ src/tests/rgeHandler/trimsp/SiC_E4000.rge | 51 +++++ src/tests/rgeHandler/trimsp/SiC_E5000.rge | 57 ++++++ src/tests/rgeHandler/trimsp/SiC_E6000.rge | 61 ++++++ src/tests/rgeHandler/trimsp/SiC_E7000.rge | 68 +++++++ src/tests/rgeHandler/trimsp/SiC_E8000.rge | 73 ++++++++ src/tests/rgeHandler/trimsp/SiC_E9000.rge | 79 ++++++++ 29 files changed, 2707 insertions(+) create mode 100644 src/tests/rgeHandler/CMakeLists.txt create mode 100644 src/tests/rgeHandler/README create mode 100644 src/tests/rgeHandler/cmake/config.h.in create mode 100644 src/tests/rgeHandler/depth_profile_startup.xml create mode 100644 src/tests/rgeHandler/main.cpp create mode 100644 src/tests/rgeHandler/trimsp/SiC_E1000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E10000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E11000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E12000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E13000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E14000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E15000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E16000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E17000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E18000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E19000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E2000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E20000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E21000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E22000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E23000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E24000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E3000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E4000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E5000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E6000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E7000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E8000.rge create mode 100644 src/tests/rgeHandler/trimsp/SiC_E9000.rge diff --git a/src/tests/rgeHandler/CMakeLists.txt b/src/tests/rgeHandler/CMakeLists.txt new file mode 100644 index 00000000..02caf09a --- /dev/null +++ b/src/tests/rgeHandler/CMakeLists.txt @@ -0,0 +1,40 @@ +# - rgeHandlerTest +cmake_minimum_required(VERSION 3.17) + +project(rgeHandlerTest VERSION 0.9 LANGUAGES CXX) + +#--- 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) + string(STRIP ${ROOT_VERSION} ROOT_VERSION) + 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) + +#--- all checks done -> feed config.h ----------------------------------------- +set(HAVE_CONFIG_H 1 CACHE INTERNAL "config.h is available") +configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) + +add_executable(rgeHandlerTest main.cpp) +target_compile_options(rgeHandlerTest BEFORE PRIVATE "-DHAVE_CONFIG_H") +target_include_directories(rgeHandlerTest + BEFORE PRIVATE + $ + $ + $ +) +target_link_libraries(rgeHandlerTest ${ROOT_LIBRARIES} PRgeHandler) + +#--- installation info -------------------------------------------------------- +install( + TARGETS + rgeHandlerTest + RUNTIME DESTINATION + bin +) + + diff --git a/src/tests/rgeHandler/README b/src/tests/rgeHandler/README new file mode 100644 index 00000000..5dd9eb6c --- /dev/null +++ b/src/tests/rgeHandler/README @@ -0,0 +1,36 @@ +The rge handler expects a xml-input-file which is used to identify where to +find the necessary rge-files, their names and energies. The relevant xml-tags +are: + + : path to the place of the rge-files. + +The rge-files naming has the structure
.rge, where 
 is a
+sensible string characterizing the material, e.g. 'SiC_E'. The '_E' is needed
+by convention.  is the value of the implantation energy in (eV), e.g.
+1000. This information has to be provided in the xml-file in the following way:
+
+ : is the 
 of the rge-file name.
+
+Typically one is working with a set of energies. This energy list can be 
+provided in two different ways:
+
+(i) as an list of energies
+
+    
+       1000
+       2000
+       3000
+       4500
+       ....
+    
+
+of, in case the energy are equally stepped by
+
+(ii) an energy vector
+
+    
+
+This would try to read all rge-files with energies starting from 1000 (eV)
+up to 22000 (eV) in steps of 1000 (eV).
+
+See also the file depth_profile_startup.xml in this directory.
diff --git a/src/tests/rgeHandler/cmake/config.h.in b/src/tests/rgeHandler/cmake/config.h.in
new file mode 100644
index 00000000..222314b1
--- /dev/null
+++ b/src/tests/rgeHandler/cmake/config.h.in
@@ -0,0 +1,6 @@
+// config.h
+
+#define PACKAGE_VERSION "@PROJECT_VERSION@"
+#define ROOT_VERSION_USED "@ROOT_VERSION@"
+#define BUILD_TYPE "@CMAKE_BUILD_TYPE@"
+
diff --git a/src/tests/rgeHandler/depth_profile_startup.xml b/src/tests/rgeHandler/depth_profile_startup.xml
new file mode 100644
index 00000000..28f99c65
--- /dev/null
+++ b/src/tests/rgeHandler/depth_profile_startup.xml
@@ -0,0 +1,37 @@
+
+
+    
+        TrimSp information
+    
+    
+        ./trimsp/
+        SiC_E
+        
+
+    
+
diff --git a/src/tests/rgeHandler/main.cpp b/src/tests/rgeHandler/main.cpp
new file mode 100644
index 00000000..91c2835e
--- /dev/null
+++ b/src/tests/rgeHandler/main.cpp
@@ -0,0 +1,165 @@
+/***************************************************************************
+
+  main.cpp
+
+  Author: Andreas Suter
+  e-mail: andreas.suter@psi.ch
+
+***************************************************************************/
+
+/***************************************************************************
+ *   Copyright (C) 2007-2022 by Andreas Suter                              *
+ *   andreas.suter@psi.ch                                                  *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+
+#include 
+#include 
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "PRgeHandler.h"
+
+void syntax()
+{
+  std::cout << std::endl;
+  std::cout << "usage : rgeHandlerTest [options]" << std::endl;
+  std::cout << "  -x, --xml : path-name of the xml-startup file." << std::endl;
+  std::cout << "  -d, --dump     : dump rge-infos." << std::endl;
+  std::cout << "  -s, --set  : dump rge-vector number ." << std::endl;
+  std::cout << "  -v, --version  : rgeHandlerTest version" << std::endl;
+  std::cout << "  -h, --help     : this help." << std::endl;
+  std::cout << std::endl;
+}
+
+int main(int argc, char* argv[])
+{
+  if (argc == 1) {
+    syntax();
+    return 0;
+  }
+
+  std::string fln("");
+  bool dump(false);
+  int set_no = -1;
+  for (int i=1; i= argc) {
+        std::cout << std::endl;
+        std::cout << "**ERROR** found -x/ --xml without file name." << std::endl;
+        std::cout << std::endl;
+        syntax();
+        return 1;
+      }
+      fln = argv[i+1];
+      i++;
+    } else if (!strcmp(argv[i], "-d") || !strcmp(argv[i], "--dump")) {
+      dump = true;
+    } else if (!strcmp(argv[i], "-s") || !strcmp(argv[i], "--set")) {
+      if (i+1 > argc) {
+        std::cout << std::endl;
+        std::cout << "**ERROR** found -s/--set without rge set number." << std::endl;
+        std::cout << std::endl;
+        syntax();
+        return 1;
+      }
+      try {
+        set_no = std::stoi(argv[i+1]);
+      } catch(std::invalid_argument& e) {
+        std::cout << std::endl;
+        std::cout << "**ERROR** set number '" << argv[i+1] << "' is not a number." << std::endl;
+        std::cout << std::endl;
+        return 3;
+      } catch(std::out_of_range& e) {
+        std::cout << std::endl;
+        std::cout << "**ERROR** set number '" << argv[i+1] << "' is out-of-range." << std::endl;
+        std::cout << std::endl;
+        return 3;
+      } catch(...) {
+        std::cout << std::endl;
+        std::cout << "**ERROR** set number '" << argv[i+1] << "' leads to an unexpected error." << std::endl;
+        std::cout << std::endl;
+        return 3;
+      }
+      i++;
+    } else if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--version")) {
+      std::cout << std::endl;
+#ifdef HAVE_CONFIG_H
+      std::cout << "regHandlerTest Version: " << PACKAGE_VERSION << std::endl;
+#else
+      std::cout << "regHandlerTest Version: unkown." << std::endl;
+#endif
+      std::cout << std::endl;
+      return 0;
+    } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) {
+      syntax();
+      return 0;
+    }
+  }
+
+  // read XML startup file
+  PRgeHandler *rgeHandler = new PRgeHandler(fln);
+
+  // check if everything went fine with the startup handler
+  if (!rgeHandler->IsValid()) {
+    std::cout << std::endl;
+    std::cout << std::endl << ">> **ERROR** startup handler too unhappy. Will terminate unfriendly, sorry.";
+    std::cout << std::endl;
+    delete rgeHandler;
+    return 2;
+  }
+
+  if (dump) {
+    std::cout << std::endl;
+    std::cout << "RGE info from xml-startup-file " << fln << std::endl;
+    PRgeDataList list = rgeHandler->GetRgeData();
+    std::cout << "number of rge data sets: " << list.size() << std::endl;
+    for (int i=0; iGetRgeData();
+    if (set_no > list.size()) {
+      std::cout << std::endl;
+      std::cout << "**ERROR** requested set number " << set_no << " > number of rge-data sets (" << list.size() << ")." << std::endl;
+      std::cout << std::endl;
+      delete rgeHandler;
+      return 4;
+    } else if (set_no == 0) {
+      std::cout << std::endl;
+      std::cout << "**ERROR** rge set-number count start at 1 not 0." << std::endl;
+      std::cout << std::endl;
+      delete rgeHandler;
+      return 4;
+    }
+    std::cout << "rge-data set " << set_no << ": energy: " << list[set_no-1].energy << " (eV), no-of-particles: " << list[set_no-1].noOfParticles << std::endl;
+    std::cout << "depth (nm), ampl, amplNorm" << std::endl;
+    for (int i=0; i