From 694eb8daabf1dafb0ca831d75715e86955b6dacd Mon Sep 17 00:00:00 2001 From: ChrisJChang Date: Thu, 14 Dec 2023 13:38:44 +0100 Subject: [PATCH 01/10] Add printers to the standalones: Currently only works for none or cout printer Will allow all standalones to build regardless of build order. Does not contain an error message when the DarkBitmodule function to pull form the postprocessor is used. --- CMakeLists.txt | 4 +--- ColliderBit/examples/solo.cpp | 10 ++++++++++ DarkBit/examples/DarkBit_standalone_MSSM.cpp | 9 +++++++++ .../DarkBit_standalone_ScalarSingletDM_Z2.cpp | 9 +++++++++ DarkBit/examples/DarkBit_standalone_WIMP.cpp | 9 +++++++++ DecayBit/examples/3bithit.cpp | 9 +++++++++ .../ExampleBit_A_standalone_example.cpp | 11 ++++++++++- .../examples/FlavBit_standalone_example.cpp | 9 +++++++++ cmake/cleaning.cmake | 1 - cmake/executables.cmake | 1 - cmake/utilities.cmake | 19 ++----------------- 11 files changed, 68 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 71916a0696..3a9067a08b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -619,8 +619,6 @@ set(MODULE_HARVESTER_FILES ${MODULE_HARVESTER_FILES} ${BACKEND_HARVESTER_FILES}) remove_build_files(models_harvested backends_harvested modules_harvested printers_harvested colliders_harvested) if(EXISTS "${PROJECT_SOURCE_DIR}/Elements/") add_gambit_custom(module_harvest modules_harvested MODULE_HARVESTER MODULE_HARVESTER_FILES ${itch_with_commas}) - # Add the elements_extras target - add_elements_extras(elements_extras) endif() if(EXISTS "${PROJECT_SOURCE_DIR}/Backends/") add_gambit_custom(backend_harvest backends_harvested BACKEND_HARVESTER BACKEND_HARVESTER_FILES ${itch_with_commas}) @@ -661,7 +659,7 @@ add_subdirectory_if_present(Printers) # Lists of different GAMBIT object files to link set(GAMBIT_BASIC_COMMON_OBJECTS "${GAMBIT_BASIC_COMMON_OBJECTS}" $ $) -set(GAMBIT_ALL_COMMON_OBJECTS "${GAMBIT_BASIC_COMMON_OBJECTS}" $ $ $) +set(GAMBIT_ALL_COMMON_OBJECTS "${GAMBIT_BASIC_COMMON_OBJECTS}" $ $ $ $) # Set compilation targets for GAMBIT modules foreach(bit ${GAMBIT_BITS}) diff --git a/ColliderBit/examples/solo.cpp b/ColliderBit/examples/solo.cpp index eb803b95eb..9aa48e1d00 100755 --- a/ColliderBit/examples/solo.cpp +++ b/ColliderBit/examples/solo.cpp @@ -22,6 +22,7 @@ #include "gambit/ColliderBit/ColliderBit_rollcall.hpp" #include "gambit/Utils/util_functions.hpp" #include "gambit/Utils/cats.hpp" +#include "gambit/Printers/printermanager.hpp" // #include "gambit/Backends/backend_rollcall.hpp" #define NULIKE_VERSION "1.0.9" @@ -188,6 +189,15 @@ int main(int argc, char* argv[]) logger().set_log_debug_messages(debug); initialise_standalone_logs("CBS_logs/"); logger()<<"Running CBS"<(-1, "seed"); diff --git a/DarkBit/examples/DarkBit_standalone_MSSM.cpp b/DarkBit/examples/DarkBit_standalone_MSSM.cpp index 731239f56b..e25e64785a 100644 --- a/DarkBit/examples/DarkBit_standalone_MSSM.cpp +++ b/DarkBit/examples/DarkBit_standalone_MSSM.cpp @@ -41,6 +41,7 @@ #include "gambit/Elements/mssm_slhahelp.hpp" #include "gambit/Models/SimpleSpectra/MSSMSimpleSpec.hpp" #include "gambit/Utils/util_functions.hpp" +#include "gambit/Printers/printermanager.hpp" using namespace DarkBit::Functown; // Functors wrapping the module's actual module functions using namespace BackendIniBit::Functown; // Functors wrapping the backend initialisation functions @@ -130,6 +131,14 @@ int main(int argc, char* argv[]) initialise_standalone_logs("runs/DarkBit_standalone_MSSM/logs/"); logger()<<"Running DarkBit standalone example"< @@ -318,6 +319,14 @@ int main(int argc, char* argv[]) initialise_standalone_logs("runs/DarkBit_standalone_WIMP/logs/"); logger()<<"Running DarkBit standalone example"< loggerinfo; loggerinfo["Default"] = "3bithit.log"; logger().initialise(loggerinfo); + + // Initialise the printer with the cout printer (required for suspicious point printing) + // TODO: Allow this to work outside of cout/none printers + YAML::Node printerNode; + printerNode["printer"] = "cout"; + printerNode["options"]["default_output_path"] = Utils::ensure_path_exists("./"); + Printers::PrinterManager printerManager(printerNode, false); + set_global_printer_manager(&printerManager); // Initialise the random number generator. Random::create_rng_engine("default"); diff --git a/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp b/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp index eb4985a65a..e79690dc7b 100644 --- a/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp +++ b/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp @@ -20,6 +20,7 @@ // Always required in any standalone module main file #include "gambit/Elements/standalone_module.hpp" #include "gambit/ExampleBit_A/ExampleBit_A_rollcall.hpp" +#include "gambit/Printers/printermanager.hpp" // Only needed here #include "gambit/Utils/util_functions.hpp" @@ -61,6 +62,14 @@ int main() // Initialise the random number generator. Random::create_rng_engine("default"); + // Initialise the printer with the cout printer (required for suspicious point printing) + // TODO: Allow this to work outside of cout/none printers + YAML::Node printerNode; + printerNode["printer"] = "cout"; + printerNode["options"]["default_output_path"] = Utils::ensure_path_exists("runs/ExampleBit_A_standalone/samples/"); + Printers::PrinterManager printerManager(printerNode, false); + set_global_printer_manager(&printerManager); + // Test message (note: we are not actually "inside" ExampleBit_A here, so the log message will not receive an 'ExampleBit_A' tag). logger()<<"Running ExampleBit_A standalone example"<) endif() if(module STREQUAL "ColliderBit") set(USES_COLLIDERBIT TRUE) @@ -493,11 +483,6 @@ function(add_standalone executablename) ${GAMBIT_ALL_COMMON_OBJECTS} HEADERS ${ARG_HEADERS}) - # Add the elements_extras target - add_elements_extras(${executablename}_elements_extras) - add_dependencies(${executablename}_elements_extras elements_extras) - add_dependencies(${executablename} ${executablename}_elements_extras) - # Add each of the declared dependencies foreach(dep ${ARG_DEPENDENCIES}) add_dependencies(${executablename} ${dep}) From 784aff57b40c48f781b8a602694d2c5d09d44fa5 Mon Sep 17 00:00:00 2001 From: ChrisJChang Date: Thu, 14 Dec 2023 13:43:23 +0100 Subject: [PATCH 02/10] Remove elements_extras.hpp from git ignore, now that it is not changed --- .gitignore | 1 - .../gambit/Elements/elements_extras.hpp | 73 +++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 Elements/include/gambit/Elements/elements_extras.hpp diff --git a/.gitignore b/.gitignore index 3ff6576818..59f3cd1142 100755 --- a/.gitignore +++ b/.gitignore @@ -60,7 +60,6 @@ ScannerBit/CMakeLists.txt */include/gambit/*/*_rollcall.hpp Backends/include/gambit/Backends/backend_functor_types.hpp Elements/include/gambit/Elements/module_functor_types.hpp -Elements/include/gambit/Elements/elements_extras.hpp Models/src/particle_database.cpp ColliderBit/include/gambit/ColliderBit/colliders/Pythia8/Py8Collider_typedefs.hpp diff --git a/Elements/include/gambit/Elements/elements_extras.hpp b/Elements/include/gambit/Elements/elements_extras.hpp new file mode 100644 index 0000000000..20bbe2653f --- /dev/null +++ b/Elements/include/gambit/Elements/elements_extras.hpp @@ -0,0 +1,73 @@ +// GAMBIT: Global and Modular BSM Inference Tool +// ********************************************* +/// \file +/// +/// Compile-time generation of extra code in Elements +/// that uses the Printers. Required to avoid the use +/// of printers in the standalones. +/// +/// Classes added: +/// - Suspicious point exception class. +/// +/// This file was automatically generated by +/// elements_extras.py. Do not modify. +/// +/// ********************************************* +/// +/// Authors: +/// +/// \author The GAMBIT Collaboration +/// \date 01:56PM on December 12, 2023 +/// +/// ********************************************* + +#ifndef __elements_extras_hpp__ +#define __elements_extras_hpp__ + +#include +#include +#include +#include +#include +#include + +#include "gambit/Utils/util_macros.hpp" +#include "gambit/Logs/log_tags.hpp" +#include "gambit/Printers/baseprinter.hpp" +#include "gambit/Printers/printermanager.hpp" + +namespace Gambit +{ + + /// Gambit suspicious point exception class. + class Suspicious_point_exception + { + + public: + + /// Constructor + Suspicious_point_exception() {} + + /// Raise the suspicious point exception. Print it with a message and a code. The default code is 1. + void raise(const std::string &msg, int code=1, bool debug=false) + { + // get the printer pointer + Printers::BasePrinter& printer = *(get_global_printer_manager()->printerptr); + printer.print(code, "Suspicious Point Code", Printers::get_main_param_id("Suspicious Point Code"), printer.getRank(), Printers::get_point_id()); + + if (debug) std::cout << "Point Suspicious (" << code << "): " << msg << std::endl; + } + + }; + + /// Postprocessor reader retrieve function + template + bool pp_reader_retrieve(T& result, str dataset) + { + return get_pp_reader().retrieve(result, dataset); + //invalid_point().raise("Reader not available in standalones."); // TODO: I want to remove this (Perhaps even put it back in DarkBit) + //return false; + } +} + +#endif From 420693595cfcfae98a2c6f8b6c14aed9a39d3022 Mon Sep 17 00:00:00 2001 From: ChrisJChang Date: Thu, 14 Dec 2023 13:44:24 +0100 Subject: [PATCH 03/10] Remove elements_extras.py script, as it is no longer needed --- Elements/scripts/elements_extras.py | 188 ---------------------------- 1 file changed, 188 deletions(-) delete mode 100644 Elements/scripts/elements_extras.py diff --git a/Elements/scripts/elements_extras.py b/Elements/scripts/elements_extras.py deleted file mode 100644 index 1359fa61be..0000000000 --- a/Elements/scripts/elements_extras.py +++ /dev/null @@ -1,188 +0,0 @@ -#!/usr/bin/env python -# -# GAMBIT: Global and Modular BSM Inference Tool -#********************************************* -# \file -# -# Script to create files containing extra code -# that should be generated at build time. -# Usually to make sure the Printers are not used -# in the standalones. -# -# Generated files: -# Elements/elements_extras.hpp -# -#********************************************* -# -# Authors (add name and date if you modify): -# -# \author Christopher Chang -# (christopher.chang@uqconnect.edu.au) -# \date 2021 Feb -# -# \author Tomas Gonzalo -# (gonzalo@physik.rwth-aachen.de) -# \date 2021 Mar -# -#********************************************* - -import pickle,sys - -toolsfile="./Utils/scripts/harvesting_tools.py" -exec(compile(open(toolsfile, "rb").read(), toolsfile, 'exec')) # Python 2/3 compatible version of 'execfile' - -# Suspicious point exception, only using printers outside of standalones -def Suspicious_Points(isStandalone): - - contents = "\ - /// Gambit suspicious point exception class.\n\ - class Suspicious_point_exception\n\ - {\n\ -\n\ - public:\n\ -\n\ - /// Constructor\n\ - Suspicious_point_exception() {}\n\ -\n\ - /// Raise the suspicious point exception. Print it with a message and a code. The default code is 1.\n\ - void raise(const std::string &msg, int code=1, bool debug=false)\n\ - {\n" - - if not isStandalone: - contents += "\ - // get the printer pointer\n\ - Printers::BaseBasePrinter& printer = *(get_global_printer_manager()->printerptr);\n\ -\n\ - printer.print(code, \"Suspicious Point Code\", Printers::get_main_param_id(\"Suspicious Point Code\"), printer.getRank(), Printers::get_point_id());\n\ -\n" - contents += "\ - if (debug) std::cout << \"Point Suspicious (\" << code << \"): \" << msg << std::endl;\n\ - }\n\ -\n\ - };\n\ -\n" - - return(contents) - -# Postprocessor reader routines, only available outside of standalones -def pp_reader(isStandalone): - - contents = "\ - /// Postprocessor reader retrieve function\n" - if not isStandalone: - contents += "\ - template\n\ - bool pp_reader_retrieve(T& result, str dataset)\n\ - {\n\ - return get_pp_reader().retrieve(result, dataset);\n\ - }\n" - else: - contents += "\ - template\n\ - bool pp_reader_retrieve(T&, str)\n\ - {\n\ - invalid_point().raise(\"Reader not available in standalones.\");\n\ - return false;\n\ - }\n" - - return(contents) - - -# Main function -def main(argv): - - # Handle command line options - verbose = False - try: - opts, args = getopt.getopt(argv,"v:",["verbose"]) - - # Extract flag for standalone - target = args[0] - isStandalone = 1 if "standalone" in target or "CBS" in target else 0 - - except : - print('Usage: elements_extras.py [flags] ') - print(' flags:') - print(' -v : More verbose output') - sys.exit(2) - - for opt, arg in opts: - if opt in ('-v','--verbose'): - verbose = True - print('elements_extras.py: verbose=True') - - contents = "\ -// GAMBIT: Global and Modular BSM Inference Tool\n\ -// *********************************************\n\ -/// \\file\n\ -///\n\ -/// Compile-time generation of extra code in Elements\n\ -/// that uses the Printers. Required to avoid the use\n\ -/// of printers in the standalones.\n\ -///\n\ -/// Classes added:\n\ -/// - Suspicious point exception class.\n\ -///\n\ -/// This file was automatically generated by \n\ -/// elements_extras.py. Do not modify. \n\ -///\n\ -/// *********************************************\n\ -///\n\ -/// Authors:\n\ -///\n\ -/// \\author The GAMBIT Collaboration \n\ -/// \date "+datetime.datetime.now().strftime("%I:%M%p on %B %d, %Y")+"\n\ -///\n\ -/// *********************************************\n\ -\n\ -#ifndef __elements_extras_hpp__\n\ -#define __elements_extras_hpp__\n\ -\n\ -#include \n\ -#include \n\ -#include \n\ -#include \n\ -#include \n\ -#include \n\ -\n\ -#include \"gambit/Utils/util_macros.hpp\"\n\ -#include \"gambit/Logs/log_tags.hpp\"\n\ -\n" - - if not isStandalone: - contents += "\ -#include \"gambit/Printers/printermanager.hpp\"\n\ -#include \"gambit/Printers/baseprinter.hpp\"\n\ -\n" - - contents += "\ -namespace Gambit\n\ -{\n\ -\n" - - # Here add calls for all functions that generate code # - ######################################################## - - # Suspicious points, avoid using the printers when building standalones - if verbose: print("Writing suspicious points code") - contents += Suspicious_Points(isStandalone) - - # Postprocessor reader routines - if verbose: print("Writing postprocessor reader routines") - contents += pp_reader(isStandalone) - - contents += "\ -}\n\ -\n\ -#endif\n" - - - # Don't touch any existing file unless it is actually different from what we will create - header = "./Elements/include/gambit/Elements/elements_extras.hpp" - candidate = "./scratch/build_time/" + target + ".hpp.candidate" - with open(candidate,"w") as f: f.write(contents) - update_only_if_different(header, candidate, verbose=False) - - -if __name__ == "__main__": - main(sys.argv[1:]) From 386973becfb04ff781024d45b48beda4267b43a0 Mon Sep 17 00:00:00 2001 From: ChrisJChang Date: Thu, 14 Dec 2023 13:47:59 +0100 Subject: [PATCH 04/10] Fix comments in elements_extras.hpp --- .../gambit/Elements/elements_extras.hpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/Elements/include/gambit/Elements/elements_extras.hpp b/Elements/include/gambit/Elements/elements_extras.hpp index 20bbe2653f..23cb8d5108 100644 --- a/Elements/include/gambit/Elements/elements_extras.hpp +++ b/Elements/include/gambit/Elements/elements_extras.hpp @@ -2,22 +2,19 @@ // ********************************************* /// \file /// -/// Compile-time generation of extra code in Elements -/// that uses the Printers. Required to avoid the use -/// of printers in the standalones. +/// Functions that require printing capabilities +/// that can be run from within module functions. +/// TODO: Perhaps move postprocessor retrieve back +/// into DarkBit, and change this file to be +/// purely for suspicious points /// /// Classes added: /// - Suspicious point exception class. /// -/// This file was automatically generated by -/// elements_extras.py. Do not modify. -/// -/// ********************************************* -/// /// Authors: /// -/// \author The GAMBIT Collaboration -/// \date 01:56PM on December 12, 2023 +/// \author Chris Chang +/// \date Dec 2023 /// /// ********************************************* @@ -65,8 +62,6 @@ namespace Gambit bool pp_reader_retrieve(T& result, str dataset) { return get_pp_reader().retrieve(result, dataset); - //invalid_point().raise("Reader not available in standalones."); // TODO: I want to remove this (Perhaps even put it back in DarkBit) - //return false; } } From a284e07d2aa4c95813abec0d8889adb672a91f50 Mon Sep 17 00:00:00 2001 From: ChrisJChang Date: Thu, 14 Dec 2023 14:42:59 +0100 Subject: [PATCH 05/10] Add a check that the right printers are being used in standalones. This will cover any of the cases known to fail. Also removed a now out of date hack for suspicious points and the standalones. --- ColliderBit/examples/solo.cpp | 9 ++------- DarkBit/examples/DarkBit_standalone_MSSM.cpp | 8 ++------ .../DarkBit_standalone_ScalarSingletDM_Z2.cpp | 8 ++------ DarkBit/examples/DarkBit_standalone_WIMP.cpp | 8 ++------ DecayBit/examples/3bithit.cpp | 8 ++------ .../gambit/Elements/standalone_module.hpp | 3 --- .../ExampleBit_A_standalone_example.cpp | 14 +++++--------- .../examples/FlavBit_standalone_example.cpp | 8 ++------ .../include/gambit/Utils/standalone_utils.hpp | 7 +++++++ Utils/src/standalone_utils.cpp | 19 +++++++++++++++++++ 10 files changed, 43 insertions(+), 49 deletions(-) diff --git a/ColliderBit/examples/solo.cpp b/ColliderBit/examples/solo.cpp index 9aa48e1d00..868887b331 100755 --- a/ColliderBit/examples/solo.cpp +++ b/ColliderBit/examples/solo.cpp @@ -22,7 +22,6 @@ #include "gambit/ColliderBit/ColliderBit_rollcall.hpp" #include "gambit/Utils/util_functions.hpp" #include "gambit/Utils/cats.hpp" -#include "gambit/Printers/printermanager.hpp" // #include "gambit/Backends/backend_rollcall.hpp" #define NULIKE_VERSION "1.0.9" @@ -190,12 +189,8 @@ int main(int argc, char* argv[]) initialise_standalone_logs("CBS_logs/"); logger()<<"Running CBS"< @@ -320,11 +319,8 @@ int main(int argc, char* argv[]) logger()<<"Running DarkBit standalone example"< Date: Thu, 14 Dec 2023 14:47:09 +0100 Subject: [PATCH 06/10] whitespace --- ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp | 2 +- Utils/src/standalone_utils.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp b/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp index 8987751859..7a9d9d296e 100644 --- a/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp +++ b/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp @@ -163,7 +163,7 @@ int main() double r1 = nevents_pred(0); int r2 = nevents_pred_rounded(0); std::cout << std::endl << "Retrieved results: " << r1 << ", " << r2 << std::endl << std::endl; - + } // Be sure to do something sensible in cases where the point was invalidated by one of functions. diff --git a/Utils/src/standalone_utils.cpp b/Utils/src/standalone_utils.cpp index 5addae54f8..8b5e63ddad 100644 --- a/Utils/src/standalone_utils.cpp +++ b/Utils/src/standalone_utils.cpp @@ -52,7 +52,7 @@ namespace Gambit { utils_error().raise(LOCAL_INFO, "Can only currently use cout or none printer in standalones."); } - + // Set the minimum required settings by the printer YAML::Node printerNode; printerNode["printer"] = printer; From 9bbe9d3d79a2485a56a47fc406c5125fabb95e8c Mon Sep 17 00:00:00 2001 From: ChrisJChang Date: Thu, 14 Dec 2023 14:58:17 +0100 Subject: [PATCH 07/10] Add printers to the tarball files --- cmake/utilities.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/utilities.cmake b/cmake/utilities.cmake index 462a72b741..2afc14750f 100644 --- a/cmake/utilities.cmake +++ b/cmake/utilities.cmake @@ -584,6 +584,7 @@ function(add_standalone_tarballs modules version) COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/${module} ${dirname}/${module} COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Logs ${dirname}/Logs COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Utils ${dirname}/Utils + COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Printers ${dirname}/Printers COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Models ${dirname}/Models COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Elements ${dirname}/Elements COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Backends ${dirname}/Backends @@ -609,6 +610,7 @@ function(add_standalone_tarballs modules version) COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/PrecisionBit ${dirname}/PrecisionBit COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Logs ${dirname}/Logs COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Utils ${dirname}/Utils + COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Printers ${dirname}/Printers COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Models ${dirname}/Models COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Elements ${dirname}/Elements COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/Backends ${dirname}/Backends From 8ef5a7438bc4da8f435bacff331cfb68d5b4dedf Mon Sep 17 00:00:00 2001 From: ChrisJChang Date: Thu, 14 Dec 2023 17:53:28 +0100 Subject: [PATCH 08/10] Allow for wider usage of the printers in standalones. using ExampleBit_A_standalone as an example. --- .../ExampleBit_A_standalone_example.cpp | 9 ++++- .../include/gambit/Printers/baseprinter.hpp | 5 +++ Printers/src/printermanager.cpp | 1 + .../printers/asciiprinter/asciiprinter.cpp | 13 +++--- .../src/printers/hdf5printer/hdf5printer.cpp | 13 +++--- .../hdf5printer_v2/hdf5printer_v2.cpp | 15 ++++--- .../printers/sqliteprinter/sqliteprinter.cpp | 40 ++++++++++--------- .../include/gambit/Utils/standalone_utils.hpp | 2 +- Utils/src/standalone_utils.cpp | 13 +++--- 9 files changed, 69 insertions(+), 42 deletions(-) diff --git a/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp b/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp index 7a9d9d296e..a39e0fdb76 100644 --- a/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp +++ b/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp @@ -55,9 +55,11 @@ int main() initialise_standalone_logs("runs/ExampleBit_A_standalone/logs/"); // Initialise settings for printer (required) - YAML::Node printerNode = get_standalone_printer("cout", "runs/ExampleBit_A_standalone/logs/"); + YAML::Node printerNode = get_standalone_printer("hdf5", "runs/ExampleBit_A_standalone/samples/", "ExampleBit_A_standalone.hdf5"); Printers::PrinterManager printerManager(printerNode, false); set_global_printer_manager(&printerManager); + (printerManager.printerptr)->addToPrintList("Suspicious Point Code"); + (printerManager.printerptr)->set_output_metadata(false); // Change the fatality of different errors and warnings from the defaults, if desired. model_warning().set_fatal(true); @@ -136,6 +138,10 @@ int main() std::cout << "Starting model scan..." << std::endl << std::endl; for (int i = 0; i<5; i++) { + // Print out some basic info for each point. + Gambit::Printers::get_point_id() = i; + (printerManager.printerptr)->print(0, "MPIrank", Printers::get_main_param_id("MPIrank"), (printerManager.printerptr)->getRank(), Printers::get_point_id()); + (printerManager.printerptr)->print(Printers::get_point_id(), "pointID", Printers::get_main_param_id("pointID"), (printerManager.printerptr)->getRank(), Printers::get_point_id()); try { @@ -174,6 +180,7 @@ int main() } + (printerManager.printerptr)->finalise(false); std::cout << "ExampleBit_A standalone example has finished successfully." << std::endl << std::endl; } diff --git a/Printers/include/gambit/Printers/baseprinter.hpp b/Printers/include/gambit/Printers/baseprinter.hpp index 6b6cda3f21..0cafe56f20 100644 --- a/Printers/include/gambit/Printers/baseprinter.hpp +++ b/Printers/include/gambit/Printers/baseprinter.hpp @@ -88,6 +88,7 @@ namespace Gambit private: BasePrinter* primary_printer; bool is_aux; + bool output_metadata; public: BasePrinter() @@ -119,6 +120,10 @@ namespace Gambit /// Set this as an auxilliary printer void set_as_aux() { is_aux = true; } + /// Set/Get whether to print the metadata + void set_output_metadata(bool use_metadata) {output_metadata = use_metadata;} + bool get_output_metadata() {return output_metadata;} + /// Helper initialisation for auxilliary printers /// Will be run when the auxilliary printer is /// created by a PrinterManager. diff --git a/Printers/src/printermanager.cpp b/Printers/src/printermanager.cpp index 8eb5b93180..e6260c573b 100644 --- a/Printers/src/printermanager.cpp +++ b/Printers/src/printermanager.cpp @@ -69,6 +69,7 @@ namespace Gambit void set_global_printer_manager(Printers::PrinterManager* pm) { global_printer_manager = pm; + (pm->printerptr)->set_output_metadata(true);// Choose to print metadata (can be overuled elsewhere) } diff --git a/Printers/src/printers/asciiprinter/asciiprinter.cpp b/Printers/src/printers/asciiprinter/asciiprinter.cpp index 4539c8440e..34d3398d71 100644 --- a/Printers/src/printers/asciiprinter/asciiprinter.cpp +++ b/Printers/src/printers/asciiprinter/asciiprinter.cpp @@ -205,11 +205,14 @@ namespace Gambit AP_DBUG( std::cout << "Buffer (of asciiPrinter with name=\""< Date: Fri, 15 Dec 2023 15:28:06 +0100 Subject: [PATCH 09/10] Add empty filenames so all printers now build with extended printing --- ColliderBit/examples/solo.cpp | 2 +- DarkBit/examples/DarkBit_standalone_MSSM.cpp | 2 +- DarkBit/examples/DarkBit_standalone_ScalarSingletDM_Z2.cpp | 2 +- DarkBit/examples/DarkBit_standalone_WIMP.cpp | 2 +- DecayBit/examples/3bithit.cpp | 2 +- FlavBit/examples/FlavBit_standalone_example.cpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ColliderBit/examples/solo.cpp b/ColliderBit/examples/solo.cpp index 868887b331..1e43c0d9f2 100755 --- a/ColliderBit/examples/solo.cpp +++ b/ColliderBit/examples/solo.cpp @@ -190,7 +190,7 @@ int main(int argc, char* argv[]) logger()<<"Running CBS"< Date: Tue, 28 May 2024 11:46:57 +0200 Subject: [PATCH 10/10] Address PR Comments --- DarkBit/src/RelicDensity.cpp | 2 +- .../gambit/Elements/elements_extras.hpp | 68 ------------------- .../Elements/module_macros_incore_defs.hpp | 1 - .../Elements/module_macros_inmodule_defs.hpp | 1 - .../gambit/Elements/standalone_module.hpp | 2 + .../ExampleBit_A_standalone_example.cpp | 1 + .../gambit/Printers/printer_id_tools.hpp | 1 + .../include/gambit/Printers/printer_utils.hpp | 41 +++++++++++ .../gambit/Printers/printermanager.hpp | 1 + Printers/src/printermanager.cpp | 1 + Utils/include/gambit/Utils/exceptions.hpp | 23 +++++++ Utils/src/exceptions.cpp | 12 ++++ Utils/src/standalone_utils.cpp | 8 +-- cmake/executables.cmake | 1 + 14 files changed, 85 insertions(+), 78 deletions(-) delete mode 100644 Elements/include/gambit/Elements/elements_extras.hpp create mode 100644 Printers/include/gambit/Printers/printer_utils.hpp diff --git a/DarkBit/src/RelicDensity.cpp b/DarkBit/src/RelicDensity.cpp index dae42835e4..c1dfdd7bd6 100644 --- a/DarkBit/src/RelicDensity.cpp +++ b/DarkBit/src/RelicDensity.cpp @@ -21,7 +21,7 @@ #include #include "gambit/Elements/gambit_module_headers.hpp" -#include "gambit/Elements/elements_extras.hpp" +#include "gambit/Printers/printer_utils.hpp" #include "gambit/DarkBit/DarkBit_rollcall.hpp" #include "gambit/DarkBit/DarkBit_utils.hpp" #include "gambit/Utils/util_functions.hpp" diff --git a/Elements/include/gambit/Elements/elements_extras.hpp b/Elements/include/gambit/Elements/elements_extras.hpp deleted file mode 100644 index 23cb8d5108..0000000000 --- a/Elements/include/gambit/Elements/elements_extras.hpp +++ /dev/null @@ -1,68 +0,0 @@ -// GAMBIT: Global and Modular BSM Inference Tool -// ********************************************* -/// \file -/// -/// Functions that require printing capabilities -/// that can be run from within module functions. -/// TODO: Perhaps move postprocessor retrieve back -/// into DarkBit, and change this file to be -/// purely for suspicious points -/// -/// Classes added: -/// - Suspicious point exception class. -/// -/// Authors: -/// -/// \author Chris Chang -/// \date Dec 2023 -/// -/// ********************************************* - -#ifndef __elements_extras_hpp__ -#define __elements_extras_hpp__ - -#include -#include -#include -#include -#include -#include - -#include "gambit/Utils/util_macros.hpp" -#include "gambit/Logs/log_tags.hpp" -#include "gambit/Printers/baseprinter.hpp" -#include "gambit/Printers/printermanager.hpp" - -namespace Gambit -{ - - /// Gambit suspicious point exception class. - class Suspicious_point_exception - { - - public: - - /// Constructor - Suspicious_point_exception() {} - - /// Raise the suspicious point exception. Print it with a message and a code. The default code is 1. - void raise(const std::string &msg, int code=1, bool debug=false) - { - // get the printer pointer - Printers::BasePrinter& printer = *(get_global_printer_manager()->printerptr); - printer.print(code, "Suspicious Point Code", Printers::get_main_param_id("Suspicious Point Code"), printer.getRank(), Printers::get_point_id()); - - if (debug) std::cout << "Point Suspicious (" << code << "): " << msg << std::endl; - } - - }; - - /// Postprocessor reader retrieve function - template - bool pp_reader_retrieve(T& result, str dataset) - { - return get_pp_reader().retrieve(result, dataset); - } -} - -#endif diff --git a/Elements/include/gambit/Elements/module_macros_incore_defs.hpp b/Elements/include/gambit/Elements/module_macros_incore_defs.hpp index 83e7af568c..dee0c4bf91 100644 --- a/Elements/include/gambit/Elements/module_macros_incore_defs.hpp +++ b/Elements/include/gambit/Elements/module_macros_incore_defs.hpp @@ -67,7 +67,6 @@ #include "gambit/Elements/module_macros_common.hpp" #include "gambit/Elements/safety_bucket.hpp" #include "gambit/Elements/ini_functions.hpp" -#include "gambit/Elements/elements_extras.hpp" #include "gambit/Elements/terminator.hpp" #include "gambit/Utils/static_members.hpp" #include "gambit/Utils/exceptions.hpp" diff --git a/Elements/include/gambit/Elements/module_macros_inmodule_defs.hpp b/Elements/include/gambit/Elements/module_macros_inmodule_defs.hpp index 84ddc079e3..528de7d2af 100644 --- a/Elements/include/gambit/Elements/module_macros_inmodule_defs.hpp +++ b/Elements/include/gambit/Elements/module_macros_inmodule_defs.hpp @@ -40,7 +40,6 @@ #include "gambit/Elements/safety_bucket.hpp" #include "gambit/Elements/module_macros_common.hpp" #include "gambit/Utils/exceptions.hpp" -#include "gambit/Elements/elements_extras.hpp" #include "gambit/Utils/util_macros.hpp" #include "gambit/Models/safe_param_map.hpp" diff --git a/Elements/include/gambit/Elements/standalone_module.hpp b/Elements/include/gambit/Elements/standalone_module.hpp index 1f3baf312c..a9521294aa 100644 --- a/Elements/include/gambit/Elements/standalone_module.hpp +++ b/Elements/include/gambit/Elements/standalone_module.hpp @@ -27,6 +27,8 @@ #include "gambit/Utils/static_members.hpp" #include "gambit/Utils/stream_overloads.hpp" #include "gambit/Elements/module_macros_incore.hpp" +#include "gambit/Printers/baseprinter.hpp" +#include "gambit/Printers/printermanager.hpp" using namespace Gambit; using std::cout; diff --git a/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp b/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp index a39e0fdb76..bc240945df 100644 --- a/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp +++ b/ExampleBit_A/examples/ExampleBit_A_standalone_example.cpp @@ -56,6 +56,7 @@ int main() // Initialise settings for printer (required) YAML::Node printerNode = get_standalone_printer("hdf5", "runs/ExampleBit_A_standalone/samples/", "ExampleBit_A_standalone.hdf5"); + printerNode["options"]["group"] = "/ExampleBit_A"; Printers::PrinterManager printerManager(printerNode, false); set_global_printer_manager(&printerManager); (printerManager.printerptr)->addToPrintList("Suspicious Point Code"); diff --git a/Printers/include/gambit/Printers/printer_id_tools.hpp b/Printers/include/gambit/Printers/printer_id_tools.hpp index 4ffed25571..b9ccfed618 100644 --- a/Printers/include/gambit/Printers/printer_id_tools.hpp +++ b/Printers/include/gambit/Printers/printer_id_tools.hpp @@ -50,6 +50,7 @@ namespace Gambit /// Extra argument returns true if new ID was assigned EXPORT_SYMBOLS int get_aux_param_id(const std::string &, bool& is_new); } + } #endif diff --git a/Printers/include/gambit/Printers/printer_utils.hpp b/Printers/include/gambit/Printers/printer_utils.hpp new file mode 100644 index 0000000000..9103589020 --- /dev/null +++ b/Printers/include/gambit/Printers/printer_utils.hpp @@ -0,0 +1,41 @@ +// GAMBIT: Global and Modular BSM Inference Tool +// ********************************************* +/// \file +/// +/// Functions that require printing capabilities +/// that can be run from within module functions. +/// +/// Authors: +/// +/// \author Chris Chang +/// \date Dec 2023 +/// +/// ********************************************* + +#ifndef __printer_utils_hpp__ +#define __printer_utils_hpp__ + +#include +#include +#include +#include +#include +#include + +#include "gambit/Utils/util_macros.hpp" +#include "gambit/Logs/log_tags.hpp" +#include "gambit/Printers/baseprinter.hpp" +#include "gambit/Printers/printermanager.hpp" + +namespace Gambit +{ + + /// Postprocessor reader retrieve function + template + bool pp_reader_retrieve(T& result, str dataset) + { + return get_pp_reader().retrieve(result, dataset); + } +} + +#endif diff --git a/Printers/include/gambit/Printers/printermanager.hpp b/Printers/include/gambit/Printers/printermanager.hpp index 802c1b8b46..b922415602 100644 --- a/Printers/include/gambit/Printers/printermanager.hpp +++ b/Printers/include/gambit/Printers/printermanager.hpp @@ -103,6 +103,7 @@ namespace Gambit } + } #endif //__printermanager_hpp__ diff --git a/Printers/src/printermanager.cpp b/Printers/src/printermanager.cpp index e6260c573b..749920840e 100644 --- a/Printers/src/printermanager.cpp +++ b/Printers/src/printermanager.cpp @@ -290,6 +290,7 @@ namespace Gambit } } + } #undef DBUG diff --git a/Utils/include/gambit/Utils/exceptions.hpp b/Utils/include/gambit/Utils/exceptions.hpp index 0cc63203a7..159ae65a46 100644 --- a/Utils/include/gambit/Utils/exceptions.hpp +++ b/Utils/include/gambit/Utils/exceptions.hpp @@ -369,6 +369,29 @@ namespace Gambit private: std::string myWhat; }; + + + /// Gambit suspicious point exception class. + class Suspicious_point_exception + { + + public: + + /// Constructor + Suspicious_point_exception() {} + + /// Raise the suspicious point exception. Print it with a message and a code. The default code is 1. + void raise(const std::string &msg, int code, bool debug); + //void raise(const std::string &msg, int code=1, bool debug=false) + //{ + // // get the printer pointer + // Printers::BasePrinter& printer = *(get_global_printer_manager()->printerptr); + // printer.print(code, "Suspicious Point Code", Printers::get_main_param_id("Suspicious Point Code"), printer.getRank(), Printers::get_point_id()); + // + // if (debug) std::cout << "Point Suspicious (" << code << "): " << msg << std::endl; + // } + + }; } diff --git a/Utils/src/exceptions.cpp b/Utils/src/exceptions.cpp index 4881ff9546..ced9439100 100644 --- a/Utils/src/exceptions.cpp +++ b/Utils/src/exceptions.cpp @@ -27,6 +27,8 @@ #include "gambit/Utils/exceptions.hpp" #include "gambit/Utils/standalone_error_handlers.hpp" #include "gambit/Logs/logger.hpp" +#include "gambit/Printers/baseprinter.hpp" +#include "gambit/Printers/printermanager.hpp" namespace Gambit { @@ -623,6 +625,16 @@ namespace Gambit /// Global instance of Piped_exceptions class for warnings. Piped_exceptions piped_warnings(1000); + + /// Raise the suspicious point exception. Print it with a message and a code. The default code is 1. + void Suspicious_point_exception::raise(const std::string &msg, int code=1, bool debug=false) + { + // get the printer pointer + Printers::BasePrinter& printer = *(get_global_printer_manager()->printerptr); + printer.print(code, "Suspicious Point Code", Printers::get_main_param_id("Suspicious Point Code"), printer.getRank(), Printers::get_point_id()); + + if (debug) std::cout << "Point Suspicious (" << code << "): " << msg << std::endl; + } } diff --git a/Utils/src/standalone_utils.cpp b/Utils/src/standalone_utils.cpp index 8bf74936e5..80e293099c 100644 --- a/Utils/src/standalone_utils.cpp +++ b/Utils/src/standalone_utils.cpp @@ -47,17 +47,11 @@ namespace Gambit /// Initialise the printers (required for suspicious point raises) YAML::Node get_standalone_printer(str printer, str prefix, str filename) { - // TODO: allow standalones to make use of other printers? // TODO: Commenting out while I fiddle - //if (printer != "cout" && printer != "none") - //{ - // utils_error().raise(LOCAL_INFO, "Can only currently use cout or none printer in standalones."); - //} - // Set the minimum required settings by the printer YAML::Node printerNode; printerNode["printer"] = printer; printerNode["options"]["default_output_path"] = Utils::ensure_path_exists(prefix); - printerNode["options"]["output_file"] = filename; // TODO: Needed for my hdf5 testing + printerNode["options"]["output_file"] = filename; return printerNode; } diff --git a/cmake/executables.cmake b/cmake/executables.cmake index 9346a821ec..15f86c3408 100644 --- a/cmake/executables.cmake +++ b/cmake/executables.cmake @@ -24,6 +24,7 @@ # \date 2021 Mar # # \author Christopher Chang +# (c.j.chang@fys.uio.no) # \date 2021 Feb # #************************************************