From e17ec814e1447e1c377206fdef95f881b8f643ef Mon Sep 17 00:00:00 2001 From: Rosen Matev <rosen.matev@cern.ch> Date: Sun, 11 Apr 2021 15:40:20 +0200 Subject: [PATCH 01/56] Modernize build and install of DDG4 from DD4hep (cherrypicked with a few modifications) --- CMakeLists.txt | 15 +----------- DD4hepDDG4Ext/CMakeLists.txt | 42 ++++++++++++++++++++++++++------- Sim/GiGaMTDD4hep/CMakeLists.txt | 8 ++----- 3 files changed, 37 insertions(+), 28 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d0547df9..ae78ca8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -CMAKE_MINIMUM_REQUIRED(VERSION 2.8.5) +CMAKE_MINIMUM_REQUIRED(VERSION 3.15) # Reduce the total number of warnings by A LOT until ROOT has been modified option(GAUDI_SUGGEST_OVERRIDE "enable warnings for missing override keyword" OFF) @@ -69,19 +69,6 @@ macro(AddHepMC3) -lHepMC3search) endmacro() -macro(AddDD4hepDDG4) - include_directories(SYSTEM ${CMAKE_INSTALL_PREFIX}/include) - link_directories(${CMAKE_INSTALL_PREFIX}/lib) - - set(DD4hepDDG4_LIBRARIES - #-lDDG4LCIO - -lDDG4Legacy - -lDDG4Plugins - -lDDG4Python - -lDDG4 - -lDDPython) -endmacro() - # make sure pkg-config looks for packages on CMAKE_PREFIX_PATH and system set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON) list(APPEND CMAKE_PREFIX_PATH /usr) diff --git a/DD4hepDDG4Ext/CMakeLists.txt b/DD4hepDDG4Ext/CMakeLists.txt index 5ed174c7..2ac78d2d 100644 --- a/DD4hepDDG4Ext/CMakeLists.txt +++ b/DD4hepDDG4Ext/CMakeLists.txt @@ -35,16 +35,42 @@ ExternalProject_Add(DD4hepDDG4Ext -DDD4HEP_USE_EXISTING_DD4HEP=${DD4hep_DIR} -DDD4HEP_BUILD_PACKAGES=DDG4 -DDD4HEP_USE_GEANT4=ON - -DLCG_USE_NATIVE_COMPILER=${LCG_USE_NATIVE_COMPILER} - -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> -DCMAKE_CXX_STANDARD=${DD4HepDDG4_CXX_STANDARD} -DDD4HEP_SELECTED_NAME=DD4hepDDG4 - -DCMAKE_INSTALL_LIBDIR=lib + "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -Wno-suggest-override" # less strict warnings + # This works around a CMake issue with the Ninja generator where it + # does not understand imported libraries, and instead needs `BUILD_BYPRODUCTS` + # explicitly set. + # https://cmake.org/pipermail/cmake/2015-April/060234.html + BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libDDG4.so CMAKE_COMMAND ${env_cmd} --xml ${env_xml} cmake BUILD_COMMAND ${env_cmd} --xml ${env_xml} cmake --build . ) - -#set(DD4hepDDG4_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "" FORCE) -#set(DD4hepDDG4_DIR "${CMAKE_INSTALL_PREFIX}/cmake" CACHE PATH "" FORCE) -#set(DD4hepDDG4_LIBRARIES "${CMAKE_INSTALL_PREFIX}/lib/libDDG4LCIO.so" "${CMAKE_INSTALL_PREFIX}/lib/libDDG4Legacy.so" "${CMAKE_INSTALL_PREFIX}/lib/libDDG4Plugins.so" "${CMAKE_INSTALL_PREFIX}/lib/libDDG4Python.so" "${CMAKE_INSTALL_PREFIX}/lib/libDDG4.so" CACHE STRING "" FORCE) -#set(DD4hepDDG4_FOUND YES CACHE BOOL "" FORCE) + +ExternalProject_Get_property(DD4hepDDG4Ext INSTALL_DIR) + +# Inspired from http://mesos.apache.org/documentation/latest/cmake-examples/#imported-libraries +add_library(DD4hep::DDG4 SHARED IMPORTED GLOBAL) +set_target_properties(DD4hep::DDG4 PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libDDG4.so) +target_include_directories(DD4hep::DDG4 SYSTEM INTERFACE ${INSTALL_DIR}/include) +# This works around a CMake issue with setting include directories of +# imported libraries built with `ExternalProject_Add`.cmake/DD4hepBuild.cmake +# https://gitlab.kitware.com/cmake/cmake/issues/15052 +file(MAKE_DIRECTORY ${INSTALL_DIR}/include) + +# The external project's install rules are not part of the main project's +# install rules, so if anything from the external project should be +# installed as part of the main build, these need to be specified in the main +# build as additional install() commands. +# https://cmake.org/cmake/help/v3.20/module/ExternalProject.html +# +# Use DD4hep's installation location (see cmake/DD4hepBuild.cmake) +# > SET(DD4HEP_PYTHON_INSTALL_DIR lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages) +install(DIRECTORY "${INSTALL_DIR}/include/" + DESTINATION include) +install(DIRECTORY "${INSTALL_DIR}/lib/" + DESTINATION lib + PATTERN "python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}" EXCLUDE) +install(DIRECTORY "${INSTALL_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/" + DESTINATION python) diff --git a/Sim/GiGaMTDD4hep/CMakeLists.txt b/Sim/GiGaMTDD4hep/CMakeLists.txt index f39be9c7..873fdb5d 100644 --- a/Sim/GiGaMTDD4hep/CMakeLists.txt +++ b/Sim/GiGaMTDD4hep/CMakeLists.txt @@ -29,7 +29,6 @@ find_package(Boost COMPONENTS system thread filesystem) include_directories(SYSTEM ${ROOT_INCLUDE_DIRS}) AddHepMC3() -AddDD4hepDDG4() message(STATUS "ROOTSYS -> ${ROOTSYS}") set(ENV{ROOTSYS} ${ROOTSYS}) @@ -41,16 +40,13 @@ endif() find_package(DD4hep REQUIRED CONFIG COMPONENTS DDCore) -message(STATUS "DD4hepDDG4_INCLUDE_DIRS: ${DD4hepDDG4_INCLUDE_DIRS}") -message(STATUS "DD4hepDDG4_LIBRARIES: ${DD4hepDDG4_LIBRARIES}") - -include_directories(SYSTEM ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${DD4hep_INCLUDE_DIRS} ${DD4hepDDG4_INCLUDE_DIRS}) +include_directories(SYSTEM ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${DD4hep_INCLUDE_DIRS}) gaudi_add_library(GiGaMTDD4hepLib src/lib/*.cpp PUBLIC_HEADERS GiGaMTDD4hep INCLUDE_DIRS LbDD4hep DD4hep - LINK_LIBRARIES DD4hep ${DD4hep_COMPONENT_LIBRARIES} ROOT GiGaMTCoreRunLib ${DD4hepDDG4_LIBRARIES}) + LINK_LIBRARIES DD4hep ${DD4hep_COMPONENT_LIBRARIES} ROOT GiGaMTCoreRunLib DD4hep::DDG4) add_dependencies(GiGaMTDD4hepLib DD4hepDDG4Ext) -- GitLab From a861b8466b65b9e5a58bc3fc831825debed7ff4c Mon Sep 17 00:00:00 2001 From: Rosen Matev <rosen.matev@cern.ch> Date: Thu, 12 Aug 2021 13:07:13 +0200 Subject: [PATCH 02/56] Add DD4hep to LD_LIBRARY_PATH (to use local build) --- Sim/GiGaMTDD4hep/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sim/GiGaMTDD4hep/CMakeLists.txt b/Sim/GiGaMTDD4hep/CMakeLists.txt index 873fdb5d..c21f5776 100644 --- a/Sim/GiGaMTDD4hep/CMakeLists.txt +++ b/Sim/GiGaMTDD4hep/CMakeLists.txt @@ -40,6 +40,11 @@ endif() find_package(DD4hep REQUIRED CONFIG COMPONENTS DDCore) +# When building our own DD4hep, we need to manually add the installation to LD_LIBRARY_PATH. +# Using gaudi_build_env() makes it so that downstream projects also have this. +# TODO Why doesn't this happen "automatically" and is there a better way? +gaudi_build_env(PREPEND LD_LIBRARY_PATH ${DD4hep_ROOT}/lib) + include_directories(SYSTEM ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${DD4hep_INCLUDE_DIRS}) gaudi_add_library(GiGaMTDD4hepLib -- GitLab From 1ddeefdef5654bcfac575f40f8f72cac3d9fa702 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Mon, 13 Dec 2021 21:08:36 +0100 Subject: [PATCH 03/56] Use dd4hep in a dedicated platform --- DD4hepDDG4Ext/CMakeLists.txt | 2 ++ Sim/GiGaMTDD4hep/CMakeLists.txt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/DD4hepDDG4Ext/CMakeLists.txt b/DD4hepDDG4Ext/CMakeLists.txt index 2ac78d2d..ce143f41 100644 --- a/DD4hepDDG4Ext/CMakeLists.txt +++ b/DD4hepDDG4Ext/CMakeLists.txt @@ -10,6 +10,7 @@ ############################################################################### gaudi_subdir(DD4hepDDG4Ext v1r0) +if(USE_DD4HEP) # Define EvtGen external project set(DD4hep_GIT_SOURCE "https://gitlab.cern.ch/Gaussino/DD4hep.git" CACHE STRING "URL of the DD4hep git repository") set(DD4hep_GIT_TAG "v01-16-01-patches" CACHE STRING "Tag of DD4hep to be used") @@ -74,3 +75,4 @@ install(DIRECTORY "${INSTALL_DIR}/lib/" PATTERN "python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}" EXCLUDE) install(DIRECTORY "${INSTALL_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/" DESTINATION python) +endif() diff --git a/Sim/GiGaMTDD4hep/CMakeLists.txt b/Sim/GiGaMTDD4hep/CMakeLists.txt index c21f5776..30aaf4b0 100644 --- a/Sim/GiGaMTDD4hep/CMakeLists.txt +++ b/Sim/GiGaMTDD4hep/CMakeLists.txt @@ -14,6 +14,7 @@ ################################################################################ gaudi_subdir(GiGaMTDD4hep v1r0) +if(USE_DD4HEP) gaudi_depends_on_subdirs(GaudiAlg Sim/GiGaMTFactories @@ -58,3 +59,4 @@ add_dependencies(GiGaMTDD4hepLib DD4hepDDG4Ext) gaudi_add_module(GiGaMTDD4hep src/components/*.cpp LINK_LIBRARIES GiGaMTDD4hepLib GaudiAlgLib) +endif() -- GitLab From de8de180cd9a094cfc13684ed98f8f2ea177c070 Mon Sep 17 00:00:00 2001 From: Rosen Matev <rosen.matev@cern.ch> Date: Wed, 23 Jun 2021 18:18:14 +0200 Subject: [PATCH 04/56] Add G4OpticalPhysics list --- Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp b/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp index 05e0ed40..4e68eb1d 100644 --- a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp +++ b/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp @@ -37,6 +37,9 @@ #include "Geant4/G4HadronPhysicsFTFP_BERT.hh" #include "Geant4/G4HadronPhysicsFTFP_BERT_HP.hh" +// Optical physics +#include "Geant4/G4OpticalPhysics.hh" + typedef GiGaMTG4PhysicsConstrFAC<G4DecayPhysics> GiGaMT_G4DecayPhysics; DECLARE_COMPONENT_WITH_ID( GiGaMT_G4DecayPhysics, "GiGaMT_G4DecayPhysics" ) @@ -117,3 +120,7 @@ DECLARE_COMPONENT_WITH_ID( GiGaMT_G4HadronPhysicsFTFP_BERT_HP, "GiGaMT_G4HadronP typedef GiGaMTG4PhysicsConstrFAC<G4NeutronTrackingCut> GiGaMT_G4NeutronTrackingCut; DECLARE_COMPONENT_WITH_ID( GiGaMT_G4NeutronTrackingCut, "GiGaMT_G4NeutronTrackingCut" ) + +// Cerenkov and Optical physics +typedef GiGaMTG4PhysicsConstrFAC<G4OpticalPhysics> GiGaMT_G4OpticalPhysics; +DECLARE_COMPONENT_WITH_ID( GiGaMT_G4OpticalPhysics, "GiGaMT_G4OpticalPhysics" ) -- GitLab From 0c117ccb70a7d6aa2c6066ef012a15b6f88e89ee Mon Sep 17 00:00:00 2001 From: Gitlab CI <noreply@cern.ch> Date: Fri, 28 Jan 2022 16:20:05 +0000 Subject: [PATCH 05/56] Fixed formatting patch generated by https://gitlab.cern.ch/Gaussino/Gaussino/-/jobs/19120601 --- .../src/phys/GiGaMTG4PhysicsConstrFAC.cpp | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp b/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp index 4e68eb1d..a25963ae 100644 --- a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp +++ b/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp @@ -58,18 +58,15 @@ typedef GiGaMTG4PhysicsConstrFAC<G4IonPhysics> GiGaMT_G4IonPhysics; DECLARE_COMPONENT_WITH_ID( GiGaMT_G4IonPhysics, "GiGaMT_G4IonPhysics" ) template <typename PhysConstr> -class GiGaMTG4PhysicsConstrFAC<PhysConstr, - typename std::enable_if<std::is_same<PhysConstr, G4StoppingPhysics>::value, - PhysConstr>::type> - : public extends<GiGaMTPhysConstr, GiGaFactoryBase<G4VPhysicsConstructor>> -{ - Gaudi::Property<bool> m_useMuonMinusCapturetool{this, "UseMuonMinusCapture", true, - "Parameter 'UseMuonMinusCapture' for the constructor of G4StoppingPhysics"}; +class GiGaMTG4PhysicsConstrFAC< + PhysConstr, typename std::enable_if<std::is_same<PhysConstr, G4StoppingPhysics>::value, PhysConstr>::type> + : public extends<GiGaMTPhysConstr, GiGaFactoryBase<G4VPhysicsConstructor>> { + Gaudi::Property<bool> m_useMuonMinusCapturetool{ + this, "UseMuonMinusCapture", true, "Parameter 'UseMuonMinusCapture' for the constructor of G4StoppingPhysics"}; public: using extends::extends; - PhysConstr* construct() const override - { + PhysConstr* construct() const override { auto tmp = new PhysConstr{name(), verbosity(), m_useMuonMinusCapturetool.value()}; return tmp; } @@ -85,22 +82,20 @@ DECLARE_COMPONENT_WITH_ID( GiGaMT_G4NeutronTrackingCut, "GiGaMT_G4NeutronTrackin // Specialization for those HadronPhysics lists with quasi elastic option template <typename PhysConstr> -class GiGaMTG4PhysicsConstrFAC<PhysConstr, - typename std::enable_if<std::is_same<PhysConstr, G4HadronPhysicsQGSP_BERT>::value || - std::is_same<PhysConstr, G4HadronPhysicsQGSP_BERT_HP>::value || - std::is_same<PhysConstr, G4HadronPhysicsQGSP_FTFP_BERT>::value || - std::is_same<PhysConstr, G4HadronPhysicsFTFP_BERT>::value || - std::is_same<PhysConstr, G4HadronPhysicsFTFP_BERT_HP>::value, - PhysConstr>::type> - : public extends<GiGaMTPhysConstr, GiGaFactoryBase<G4VPhysicsConstructor>> -{ +class GiGaMTG4PhysicsConstrFAC< + PhysConstr, typename std::enable_if<std::is_same<PhysConstr, G4HadronPhysicsQGSP_BERT>::value || + std::is_same<PhysConstr, G4HadronPhysicsQGSP_BERT_HP>::value || + std::is_same<PhysConstr, G4HadronPhysicsQGSP_FTFP_BERT>::value || + std::is_same<PhysConstr, G4HadronPhysicsFTFP_BERT>::value || + std::is_same<PhysConstr, G4HadronPhysicsFTFP_BERT_HP>::value, + PhysConstr>::type> + : public extends<GiGaMTPhysConstr, GiGaFactoryBase<G4VPhysicsConstructor>> { Gaudi::Property<bool> m_quasiElastic{this, "QuasiElastic", true, "Parameter 'quasiElastic' for the constructor of HadronPhysicsQGSP_BERT"}; public: using extends::extends; - PhysConstr* construct() const override - { + PhysConstr* construct() const override { auto tmp = new PhysConstr{name(), m_quasiElastic.value()}; tmp->SetVerboseLevel( verbosity() ); return tmp; -- GitLab From 578919dff82de320fdd9f8f314b929a4f99b768a Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Mon, 21 Feb 2022 12:14:01 +0100 Subject: [PATCH 06/56] move to gitlab pages (proposal) --- .gitlab-ci.yml | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bb016ac1..b02d5233 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -73,22 +73,17 @@ build-docs: paths: - docs/_build/html/ -# inspired by https://gitlab.cern.ch/lhcb/Moore/-/blob/master/.gitlab-ci.yml -deploy-docs: +pages: stage: deploy image: gitlab-registry.cern.ch/ci-tools/ci-web-deployer - rules: - - if: '$CI_COMMIT_REF_PROTECTED == "true" || $CI_MERGE_REQUEST_LABELS =~ /Documentation/' - variables: - EOS_PATH: "/eos/project/l/lhcbwebsites/www/projects/gaussino/$CI_COMMIT_REF_NAME" - CI_OUTPUT_DIR: "docs/_build/html" - METHOD: "rsync" - before_script: - # As the previous stage is allowed to fail, skip this stage if the previous - # did not complete successfully (i.e. did not create the html directory) - - test -d $CI_OUTPUT_DIR || { echo "WARNING docs not built, stopping"; exit 77; } script: - - deploy-eos && echo -e "Deployed at\n\n\t/eos/project/l/lhcbwebsites/www/projects/gaussino/$CI_COMMIT_REF_NAME/index.html" + - mv docs/_build/html/ public + before_script: + - test -d docs/_build/html || { echo "WARNING docs not built, stopping"; exit 77; } + artifacts: + paths: + - public allow_failure: exit_codes: 77 + -- GitLab From b7fc59383ebc4a1d1d1b7d9c6fb1284c70e06ae3 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Tue, 22 Feb 2022 11:13:12 +0100 Subject: [PATCH 07/56] Update platform in the docs --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bb016ac1..93235383 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -15,8 +15,8 @@ stages: variables: TARGET_BRANCH: master - BINARY_TAG: x86_64_v2-centos7-gcc10-opt - LCG_VERSION: 100 + BINARY_TAG: x86_64_v2-centos7-gcc11-opt + LCG_VERSION: 101 NO_LBLOGIN: "1" -- GitLab From 0ec9f67a0f596e204ef13c9285dab9037fa43224 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Tue, 22 Feb 2022 11:21:30 +0100 Subject: [PATCH 08/56] Test binary tag --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 93235383..6fe09a8c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -56,7 +56,7 @@ build-docs: - cvmfs variables: NIGHTLIES_PATH: "/cvmfs/lhcbdev.cern.ch/nightlies/lhcb-gaussino/latest" - LOCAL_PYTHON: "InstallArea/x86_64_v2-centos7-gcc10-opt/python" + LOCAL_PYTHON: "InstallArea/$BINARY_TAG/python" script: - . /cvmfs/lhcb.cern.ch/lib/LbEnv.sh - pip install myst_parser graphviz -- GitLab From ead6138bfd27641656c8d6547d93c730c109757f Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Wed, 2 Mar 2022 14:55:39 +0100 Subject: [PATCH 09/56] One missing platform --- docs/getting_started/installing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started/installing.md b/docs/getting_started/installing.md index 8b55af2c..0bfff50d 100644 --- a/docs/getting_started/installing.md +++ b/docs/getting_started/installing.md @@ -25,7 +25,7 @@ lb-set-platform x86_64_v2-centos7-gcc11-opt ```{eval-rst} .. note:: - Use `x86_64_v2-centos7-gcc10+dd4hep-opt` if you want work with Detector/DD4hep. + Use `x86_64_v2-centos7-gcc11+dd4hep-opt` if you want work with Detector/DD4hep. ``` ### Building from source -- GitLab From 5c624ef05d05f322ccc8b4861054f7f4834f1069 Mon Sep 17 00:00:00 2001 From: Marco Clemencic <marco.clemencic@cern.ch> Date: Thu, 17 Mar 2022 17:32:59 +0100 Subject: [PATCH 10/56] Fix CMAKE_PREFIX_PATH to use for a local copy of the nightlies --- docs/getting_started/installing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started/installing.md b/docs/getting_started/installing.md index 0bfff50d..9248bf52 100644 --- a/docs/getting_started/installing.md +++ b/docs/getting_started/installing.md @@ -39,7 +39,7 @@ lb-set-platform x86_64_v2-centos7-gcc11-opt ``` lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support lhcb-gaussino Today - export CMAKE_PREFIX_PATH=$PWD:${CMAKE_PREFIX_PATH} + export CMAKE_PREFIX_PATH=${PWD}/lhcb-gaussino/Today:${CMAKE_PREFIX_PATH} ``` ```{eval-rst} -- GitLab From 5c84113ad76b50e4895a6e12eb20ca0e093120a4 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Mon, 11 Apr 2022 14:32:59 +0200 Subject: [PATCH 11/56] Remove ->Geant4/<- prefix in all the headers coming from G4 --- .../ExternalDetector/Embedder.h | 2 +- .../ExternalDetector/MaterialFactory.h | 2 +- .../src/Components/CuboidEmbedder.cpp | 2 +- .../src/Components/WorldCreator.cpp | 8 ++-- Sim/ExternalDetector/src/Lib/Embedder.cpp | 14 +++--- Sim/GiGaMT/GiGaMT/GiGaActionInitializer.h | 2 +- .../src/components/GiGaActionInitializer.cpp | 8 ++-- Sim/GiGaMT/src/components/GiGaMT.cpp | 16 +++---- Sim/GiGaMT/src/components/GiGaMTISetUpSvc.cpp | 18 ++++---- .../components/HepMC3ToMCTruthConverter.cpp | 6 +-- .../src/components/HepMC3ToMCTruthConverter.h | 2 +- .../GiGaMTCoreCut/GaussinoG4UserLimits.h | 6 +-- Sim/GiGaMTCore/GiGaMTCoreDet/GaussHitBase.h | 2 +- .../GiGaMTCoreDet/GdmlDetectorConstruction.h | 4 +- .../GiGaMTDetectorConstruction.h | 4 +- Sim/GiGaMTCore/GiGaMTCoreRun/G4EventProxy.h | 4 +- .../GiGaMTCoreRun/GiGaMTRunManager.h | 2 +- .../GiGaMTCoreRun/GiGaRunActionCommand.h | 2 +- .../GiGaMTCoreRun/GiGaWorkerPilot.h | 2 +- .../GiGaMTCoreRun/GiGaWorkerRunManager.h | 2 +- .../GaussinoEventInformation.h | 4 +- .../GaussinoPrimaryParticleInformation.h | 4 +- .../GaussinoTrackInformation.h | 8 ++-- .../GiGaMTCoreTruth/LinkedParticle.h | 2 +- .../GiGaMTCoreTruth/MCTruthConverter.h | 6 +-- .../TruthFlaggingTrackAction.h | 2 +- .../GiGaMTCoreTruth/TruthStoringTrackAction.h | 4 +- Sim/GiGaMTCore/src/run/GiGaMTRunManager.cpp | 20 ++++----- .../src/run/GiGaRunActionCommand.cpp | 2 +- Sim/GiGaMTCore/src/run/GiGaWorkerPilot.cpp | 12 ++--- .../src/run/GiGaWorkerRunManager.cpp | 16 +++---- Sim/GiGaMTCore/src/truth/MCTruthConverter.cpp | 2 +- .../src/truth/TruthFlaggingTrackAction.cpp | 12 ++--- .../src/truth/TruthStoringTrackAction.cpp | 6 +-- Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepCnvSvc.h | 2 +- .../GiGaMTDD4hep/DD4hepDetectorConstruction.h | 2 +- .../DD4hepDetectorConstructionFAC.cpp | 4 +- Sim/GiGaMTDD4hep/src/lib/DD4hepCnvSvc.cpp | 2 +- .../src/lib/DD4hepDetectorConstruction.cpp | 2 +- Sim/GiGaMTDebug/src/DebugStepAction.cpp | 14 +++--- Sim/GiGaMTDebug/src/DebugTrackAction.cpp | 12 ++--- .../FCCTest/FCCTest/CalorimeterHit.h | 14 +++--- .../FCCTest/FCCTest/CalorimeterSD.h | 2 +- .../src/components/G4GdmlTestDetector.cpp | 2 +- .../src/components/G4GdmlTestDetector.h | 2 +- .../src/components/G4SaveTestCalHits.cpp | 2 +- .../FCCTest/src/lib/CalorimeterHit.cpp | 22 +++++----- .../FCCTest/src/lib/CalorimeterSD.cpp | 12 ++--- Sim/GiGaMTExamples/IronBox/src/IronBoxGeo.cpp | 10 ++--- .../GiGaMTG4PhysicsConstrFAC.h | 4 +- .../GiGaMTFactories/GiGaMTG4PhysicsFactory.h | 2 +- .../GiGaMTFactories/GiGaMTG4SensDetFactory.h | 2 +- .../GiGaMTFactories/Magnet/FieldMgrBase.h | 8 ++-- .../src/det/GDMLConstructionFactory.h | 2 +- .../src/det/GiGaMTDetectorConstructionFAC.cpp | 6 +-- .../src/det/GiGaMTDetectorConstructionFAC.h | 2 +- .../src/magnet/components/MagFieldFromSvc.cpp | 2 +- .../src/magnet/components/Steppers.cpp | 26 +++++------ .../src/magnet/components/ToolFieldMgr.cpp | 2 +- .../src/magnet/lib/FieldMgrBase.cpp | 10 ++--- .../src/phys/GiGaMTG4PhysicsConstrFAC.cpp | 34 +++++++------- .../src/phys/GiGaMTG4PhysicsFactory.cpp | 44 +++++++++---------- .../src/phys/GiGaMTModularPhysListFAC.cpp | 2 +- .../src/phys/GiGaMTModularPhysListFAC.h | 4 +- .../src/truth/TruthActionFactories.cpp | 2 +- Sim/GiGaMTGeo/src/GiGaRegionTool.cpp | 10 ++--- Sim/GiGaMTGeo/src/GiGaRegionsTool.cpp | 8 ++-- Sim/GiGaMTGeo/src/GiGaSetSimAttributes.cpp | 4 +- Sim/MCCollector/src/MCCollectorHit.h | 6 +-- Sim/MCCollector/src/MCCollectorSensDet.cpp | 18 ++++---- .../ParallelGeometry/Physics.h | 2 +- .../ParallelGeometry/PhysicsFactory.h | 2 +- Sim/ParallelGeometry/ParallelGeometry/World.h | 2 +- .../ParallelGeometry/WorldFactory.h | 8 ++-- .../ParallelGeometry/WorldFactory.icpp | 2 +- Sim/ParallelGeometry/src/Lib/Physics.cpp | 12 ++--- 76 files changed, 269 insertions(+), 269 deletions(-) diff --git a/Sim/ExternalDetector/ExternalDetector/Embedder.h b/Sim/ExternalDetector/ExternalDetector/Embedder.h index 9ea601e0..73da3250 100644 --- a/Sim/ExternalDetector/ExternalDetector/Embedder.h +++ b/Sim/ExternalDetector/ExternalDetector/Embedder.h @@ -17,7 +17,7 @@ #include "GiGaMTCoreDet/IExternalDetectorEmbedder.h" #include "GiGaMTFactories/GiGaFactoryBase.h" // Geant4 -#include "Geant4/G4VSensitiveDetector.hh" +#include "G4VSensitiveDetector.hh" class G4VSolid; class G4VPhysicalVolume; diff --git a/Sim/ExternalDetector/ExternalDetector/MaterialFactory.h b/Sim/ExternalDetector/ExternalDetector/MaterialFactory.h index 5dbf43e1..2e167cc2 100644 --- a/Sim/ExternalDetector/ExternalDetector/MaterialFactory.h +++ b/Sim/ExternalDetector/ExternalDetector/MaterialFactory.h @@ -14,7 +14,7 @@ #include "GaudiKernel/PhysicalConstants.h" #include "GaudiKernel/SystemOfUnits.h" // Geant4 -#include "Geant4/G4Material.hh" +#include "G4Material.hh" // GiGaMT #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GiGaMTFactories/GiGaTool.h" diff --git a/Sim/ExternalDetector/src/Components/CuboidEmbedder.cpp b/Sim/ExternalDetector/src/Components/CuboidEmbedder.cpp index e2fb7076..f43a547c 100644 --- a/Sim/ExternalDetector/src/Components/CuboidEmbedder.cpp +++ b/Sim/ExternalDetector/src/Components/CuboidEmbedder.cpp @@ -13,7 +13,7 @@ // Gaudi #include "GaudiKernel/SystemOfUnits.h" // G4 -#include "Geant4/G4Box.hh" +#include "G4Box.hh" namespace ExternalDetector { class CuboidEmbedder : public Embedder<G4Box> { diff --git a/Sim/ExternalDetector/src/Components/WorldCreator.cpp b/Sim/ExternalDetector/src/Components/WorldCreator.cpp index a2dede65..0bbb6097 100644 --- a/Sim/ExternalDetector/src/Components/WorldCreator.cpp +++ b/Sim/ExternalDetector/src/Components/WorldCreator.cpp @@ -10,10 +10,10 @@ \*****************************************************************************/ // G4 -#include "Geant4/G4Box.hh" -#include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4Material.hh" -#include "Geant4/G4PVPlacement.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4Material.hh" +#include "G4PVPlacement.hh" // Gaudi #include "GaudiKernel/Service.h" #include "GaudiKernel/SystemOfUnits.h" diff --git a/Sim/ExternalDetector/src/Lib/Embedder.cpp b/Sim/ExternalDetector/src/Lib/Embedder.cpp index a793ed6b..55a0e204 100644 --- a/Sim/ExternalDetector/src/Lib/Embedder.cpp +++ b/Sim/ExternalDetector/src/Lib/Embedder.cpp @@ -11,13 +11,13 @@ // local #include "ExternalDetector/Embedder.h" // G4 -#include "Geant4/G4Box.hh" -#include "Geant4/G4GDMLParser.hh" -#include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4LogicalVolumeStore.hh" -#include "Geant4/G4Material.hh" -#include "Geant4/G4PVPlacement.hh" -#include "Geant4/G4SDManager.hh" +#include "G4Box.hh" +#include "G4GDMLParser.hh" +#include "G4LogicalVolume.hh" +#include "G4LogicalVolumeStore.hh" +#include "G4Material.hh" +#include "G4PVPlacement.hh" +#include "G4SDManager.hh" namespace ExternalDetector { diff --git a/Sim/GiGaMT/GiGaMT/GiGaActionInitializer.h b/Sim/GiGaMT/GiGaMT/GiGaActionInitializer.h index 81f29515..d3702af6 100644 --- a/Sim/GiGaMT/GiGaMT/GiGaActionInitializer.h +++ b/Sim/GiGaMT/GiGaMT/GiGaActionInitializer.h @@ -11,7 +11,7 @@ #pragma once #include "GaudiAlg/GaudiTool.h" -#include "Geant4/G4VUserActionInitialization.hh" +#include "G4VUserActionInitialization.hh" #include "GiGaMTCoreMessage/IGiGaMessage.h" #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GiGaMTFactories/GiGaTool.h" diff --git a/Sim/GiGaMT/src/components/GiGaActionInitializer.cpp b/Sim/GiGaMT/src/components/GiGaActionInitializer.cpp index c4f88b06..d97267e1 100644 --- a/Sim/GiGaMT/src/components/GiGaActionInitializer.cpp +++ b/Sim/GiGaMT/src/components/GiGaActionInitializer.cpp @@ -12,10 +12,10 @@ // Using the Multi-action lists in Geant4 since 10.3 // Even though they publically inherit from std::vector -#include "Geant4/G4MultiEventAction.hh" -#include "Geant4/G4MultiRunAction.hh" -#include "Geant4/G4MultiSteppingAction.hh" -#include "Geant4/G4MultiTrackingAction.hh" +#include "G4MultiEventAction.hh" +#include "G4MultiRunAction.hh" +#include "G4MultiSteppingAction.hh" +#include "G4MultiTrackingAction.hh" DECLARE_COMPONENT( GiGaActionInitializer ) diff --git a/Sim/GiGaMT/src/components/GiGaMT.cpp b/Sim/GiGaMT/src/components/GiGaMT.cpp index a5e428a1..bb85c37e 100755 --- a/Sim/GiGaMT/src/components/GiGaMT.cpp +++ b/Sim/GiGaMT/src/components/GiGaMT.cpp @@ -24,14 +24,14 @@ #include "GaudiKernel/Stat.h" // from G4 -#include "Geant4/G4MaterialTable.hh" -#include "Geant4/G4NistManager.hh" -#include "Geant4/G4ParticlePropertyTable.hh" -#include "Geant4/G4ParticleTable.hh" -#include "Geant4/G4UIsession.hh" -#include "Geant4/G4VUserActionInitialization.hh" -#include "Geant4/G4VUserPhysicsList.hh" -#include "Geant4/G4VVisManager.hh" +#include "G4MaterialTable.hh" +#include "G4NistManager.hh" +#include "G4ParticlePropertyTable.hh" +#include "G4ParticleTable.hh" +#include "G4UIsession.hh" +#include "G4VUserActionInitialization.hh" +#include "G4VUserPhysicsList.hh" +#include "G4VVisManager.hh" // from GiGaMT #include "CLHEP/Random/RandomEngine.h" diff --git a/Sim/GiGaMT/src/components/GiGaMTISetUpSvc.cpp b/Sim/GiGaMT/src/components/GiGaMTISetUpSvc.cpp index 5549e1f1..6648397d 100755 --- a/Sim/GiGaMT/src/components/GiGaMTISetUpSvc.cpp +++ b/Sim/GiGaMT/src/components/GiGaMTISetUpSvc.cpp @@ -17,15 +17,15 @@ #include "GaudiKernel/StatusCode.h" #include "GaudiKernel/System.h" /// G4 -#include "Geant4/G4UserEventAction.hh" -#include "Geant4/G4UserRunAction.hh" -#include "Geant4/G4UserStackingAction.hh" -#include "Geant4/G4UserSteppingAction.hh" -#include "Geant4/G4UserTrackingAction.hh" -#include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4VUserDetectorConstruction.hh" -#include "Geant4/G4VUserPhysicsList.hh" -#include "Geant4/G4VUserPrimaryGeneratorAction.hh" +#include "G4UserEventAction.hh" +#include "G4UserRunAction.hh" +#include "G4UserStackingAction.hh" +#include "G4UserSteppingAction.hh" +#include "G4UserTrackingAction.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VUserDetectorConstruction.hh" +#include "G4VUserPhysicsList.hh" +#include "G4VUserPrimaryGeneratorAction.hh" /// GiGa #include "GiGaMT/GiGaException.h" diff --git a/Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.cpp b/Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.cpp index d6832a85..e6b2b1d2 100644 --- a/Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.cpp +++ b/Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.cpp @@ -17,9 +17,9 @@ #include "Kernel/ParticleProperty.h" // Geant4 -#include "Geant4/G4Event.hh" -#include "Geant4/G4SystemOfUnits.hh" -#include "Geant4/G4ParticleTable.hh" +#include "G4Event.hh" +#include "G4SystemOfUnits.hh" +#include "G4ParticleTable.hh" // HepMC3 #include "GaudiKernel/Vector4DTypes.h" diff --git a/Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.h b/Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.h index 80a2dd25..38aa093f 100644 --- a/Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.h +++ b/Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.h @@ -14,7 +14,7 @@ #include "GaudiAlg/GaudiTool.h" #include "GaudiKernel/ServiceHandle.h" #include "GaudiKernel/SystemOfUnits.h" -#include "Geant4/G4SystemOfUnits.hh" +#include "G4SystemOfUnits.hh" #include "GiGaMTTruth/IHepMC3ToMCTruthConverter.h" #include "HepMC3/GenParticle.h" diff --git a/Sim/GiGaMTCore/GiGaMTCoreCut/GaussinoG4UserLimits.h b/Sim/GiGaMTCore/GiGaMTCoreCut/GaussinoG4UserLimits.h index 3d795ee3..4da75215 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreCut/GaussinoG4UserLimits.h +++ b/Sim/GiGaMTCore/GiGaMTCoreCut/GaussinoG4UserLimits.h @@ -15,8 +15,8 @@ enum ULtype {ULMinEkine, ULMaxTime, ULMaxStepLength, ULMaxTrackLength, ULMinRange}; -#include "Geant4/globals.hh" -#include "Geant4/G4UserLimits.hh" +#include "globals.hh" +#include "G4UserLimits.hh" #include <map> class G4Track; @@ -94,7 +94,7 @@ inline bool operator!= ( const Gaussino::UserLimits& ul1 , { return !(ul1 == ul2) ; } } -#include "Geant4/G4Track.hh" +#include "G4Track.hh" inline const G4String& Gaussino::UserLimits::GetType() const { diff --git a/Sim/GiGaMTCore/GiGaMTCoreDet/GaussHitBase.h b/Sim/GiGaMTCore/GiGaMTCoreDet/GaussHitBase.h index efe69880..c8f0b278 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreDet/GaussHitBase.h +++ b/Sim/GiGaMTCore/GiGaMTCoreDet/GaussHitBase.h @@ -10,7 +10,7 @@ \*****************************************************************************/ #pragma once // Include files -#include "Geant4/G4VHit.hh" +#include "G4VHit.hh" /** @class Det/GaussHitBase Det/GaussHitBase.h GaussTools/Det/GaussHitBase.h * diff --git a/Sim/GiGaMTCore/GiGaMTCoreDet/GdmlDetectorConstruction.h b/Sim/GiGaMTCore/GiGaMTCoreDet/GdmlDetectorConstruction.h index 89899e15..d86c634b 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreDet/GdmlDetectorConstruction.h +++ b/Sim/GiGaMTCore/GiGaMTCoreDet/GdmlDetectorConstruction.h @@ -10,8 +10,8 @@ \*****************************************************************************/ #pragma once // Geant -#include "Geant4/G4GDMLParser.hh" -#include "Geant4/G4VUserDetectorConstruction.hh" +#include "G4GDMLParser.hh" +#include "G4VUserDetectorConstruction.hh" #include <functional> /** @class GDMLDetectorConstruction diff --git a/Sim/GiGaMTCore/GiGaMTCoreDet/GiGaMTDetectorConstruction.h b/Sim/GiGaMTCore/GiGaMTCoreDet/GiGaMTDetectorConstruction.h index 2e9c6c62..f107a893 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreDet/GiGaMTDetectorConstruction.h +++ b/Sim/GiGaMTCore/GiGaMTCoreDet/GiGaMTDetectorConstruction.h @@ -11,8 +11,8 @@ #pragma once // from Gaudi -#include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4VUserDetectorConstruction.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VUserDetectorConstruction.hh" #include <functional> //@class GiGaMTDetectorConstruction diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/G4EventProxy.h b/Sim/GiGaMTCore/GiGaMTCoreRun/G4EventProxy.h index 30e7be8e..66ec8fcf 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreRun/G4EventProxy.h +++ b/Sim/GiGaMTCore/GiGaMTCoreRun/G4EventProxy.h @@ -10,8 +10,8 @@ \*****************************************************************************/ #pragma once -#include "Geant4/G4Event.hh" -#include "Geant4/G4VHitsCollection.hh" +#include "G4Event.hh" +#include "G4VHitsCollection.hh" #include <memory> class GiGaWorkerPilot; diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaMTRunManager.h b/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaMTRunManager.h index 61983b8d..e3bfcfd8 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaMTRunManager.h +++ b/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaMTRunManager.h @@ -12,7 +12,7 @@ #include "GiGaMTCoreMessage/IGiGaMessage.h" // Geant4 includes -#include "Geant4/G4MTRunManager.hh" +#include "G4MTRunManager.hh" //@class GiGaMTRunManager //@brief Specilization of the G4MTRunManager class for Gaussino diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaRunActionCommand.h b/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaRunActionCommand.h index ea8764f7..cbd315cb 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaRunActionCommand.h +++ b/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaRunActionCommand.h @@ -10,7 +10,7 @@ \*****************************************************************************/ #pragma once -#include "Geant4/G4UserRunAction.hh" +#include "G4UserRunAction.hh" #include "GiGaMTCoreMessage/IGiGaMessage.h" #include <string> #include <vector> diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerPilot.h b/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerPilot.h index 02d580da..f8d7e033 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerPilot.h +++ b/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerPilot.h @@ -17,7 +17,7 @@ #include "GiGaMTCoreMessage/IGiGaMessage.h" #include "GiGaMTCoreTruth/MCTruthConverter.h" -#include "Geant4/G4Event.hh" +#include "G4Event.hh" #include "HepMC3/GenEvent.h" // Main worker thread class that is instantiated in the diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerRunManager.h b/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerRunManager.h index ed794d2b..e3f26674 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerRunManager.h +++ b/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerRunManager.h @@ -10,7 +10,7 @@ \*****************************************************************************/ #pragma once -#include "Geant4/G4WorkerRunManager.hh" +#include "G4WorkerRunManager.hh" #include "GiGaMTCoreMessage/IGiGaMessage.h" diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoEventInformation.h b/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoEventInformation.h index 9f2e4e2b..6245833d 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoEventInformation.h +++ b/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoEventInformation.h @@ -15,8 +15,8 @@ #include <string> #include <vector> /// Geant4 -#include "Geant4/G4EventManager.hh" -#include "Geant4/G4VUserEventInformation.hh" +#include "G4EventManager.hh" +#include "G4VUserEventInformation.hh" #include "GiGaMTCoreTruth/MCTruthConverter.h" /** @class GaussinoTrackInformation GaussinoTrackInformation.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h b/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h index d6250cca..bfb2704c 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h +++ b/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h @@ -9,8 +9,8 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ #pragma once -#include "Geant4/G4VUserPrimaryParticleInformation.hh" -#include "Geant4/G4PrimaryParticle.hh" +#include "G4VUserPrimaryParticleInformation.hh" +#include "G4PrimaryParticle.hh" /** @class GaussinoPrimaryParticleInformation * diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoTrackInformation.h b/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoTrackInformation.h index e9066ebf..9b6eca91 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoTrackInformation.h +++ b/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoTrackInformation.h @@ -14,10 +14,10 @@ #include <string> #include <vector> /// Geant4 -#include "Geant4/G4Allocator.hh" -#include "Geant4/G4EventManager.hh" -#include "Geant4/G4TrackingManager.hh" -#include "Geant4/G4VUserTrackInformation.hh" +#include "G4Allocator.hh" +#include "G4EventManager.hh" +#include "G4TrackingManager.hh" +#include "G4VUserTrackInformation.hh" /// GaussTools #include "GiGaMTCoreDet/GaussHitBase.h" #include "GiGaMTCoreTruth/DetTrackInfo.h" diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/LinkedParticle.h b/Sim/GiGaMTCore/GiGaMTCoreTruth/LinkedParticle.h index c5d4150c..8d9b3828 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/LinkedParticle.h +++ b/Sim/GiGaMTCore/GiGaMTCoreTruth/LinkedParticle.h @@ -11,7 +11,7 @@ #pragma once #include <set> -#include "Geant4/G4PrimaryParticle.hh" +#include "G4PrimaryParticle.hh" #include "GiGaMTCoreTruth/Common.h" #include "GiGaMTCoreTruth/G4TruthParticle.h" #include "HepMC3/FourVector.h" diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/MCTruthConverter.h b/Sim/GiGaMTCore/GiGaMTCoreTruth/MCTruthConverter.h index feafd051..dd2fe6a5 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/MCTruthConverter.h +++ b/Sim/GiGaMTCore/GiGaMTCoreTruth/MCTruthConverter.h @@ -23,9 +23,9 @@ #include "GiGaMTCoreTruth/Common.h" #include "GiGaMTCoreTruth/LinkedParticle.h" -#include "Geant4/G4Event.hh" -#include "Geant4/G4PrimaryParticle.hh" -#include "Geant4/G4PrimaryVertex.hh" +#include "G4Event.hh" +#include "G4PrimaryParticle.hh" +#include "G4PrimaryVertex.hh" #include <functional> diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthFlaggingTrackAction.h b/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthFlaggingTrackAction.h index 79ddb3ad..75720077 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthFlaggingTrackAction.h +++ b/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthFlaggingTrackAction.h @@ -15,7 +15,7 @@ #include <vector> // GiGa #include "CLHEP/Units/SystemOfUnits.h" -#include "Geant4/G4UserTrackingAction.hh" +#include "G4UserTrackingAction.hh" #include "GiGaMTCoreMessage/IGiGaMessage.h" #include "GiGaMTCoreTruth/ZMaxPlane.h" diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthStoringTrackAction.h b/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthStoringTrackAction.h index 5b296eff..b65b2397 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthStoringTrackAction.h +++ b/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthStoringTrackAction.h @@ -10,8 +10,8 @@ \*****************************************************************************/ #pragma once -#include "Geant4/G4UserTrackingAction.hh" -#include "Geant4/G4VProcess.hh" +#include "G4UserTrackingAction.hh" +#include "G4VProcess.hh" #include "GiGaMTCoreMessage/IGiGaMessage.h" #include "HepMC3/FourVector.h" diff --git a/Sim/GiGaMTCore/src/run/GiGaMTRunManager.cpp b/Sim/GiGaMTCore/src/run/GiGaMTRunManager.cpp index 3535ad61..7e4daf54 100644 --- a/Sim/GiGaMTCore/src/run/GiGaMTRunManager.cpp +++ b/Sim/GiGaMTCore/src/run/GiGaMTRunManager.cpp @@ -10,16 +10,16 @@ \*****************************************************************************/ #include "GiGaMTCoreRun/GiGaMTRunManager.h" -#include "Geant4/G4StateManager.hh" -#include "Geant4/G4GeometryManager.hh" -#include "Geant4/G4UserRunAction.hh" -#include "Geant4/G4Run.hh" -#include "Geant4/G4LogicalVolumeStore.hh" -#include "Geant4/G4MTRunManagerKernel.hh" - -#include "Geant4/G4IonTable.hh" -#include "Geant4/G4ParticleTable.hh" -#include "Geant4/G4CascadeInterface.hh" +#include "G4StateManager.hh" +#include "G4GeometryManager.hh" +#include "G4UserRunAction.hh" +#include "G4Run.hh" +#include "G4LogicalVolumeStore.hh" +#include "G4MTRunManagerKernel.hh" + +#include "G4IonTable.hh" +#include "G4ParticleTable.hh" +#include "G4CascadeInterface.hh" #include "GaudiKernel/ISvcLocator.h" #include "GaudiKernel/Bootstrap.h" diff --git a/Sim/GiGaMTCore/src/run/GiGaRunActionCommand.cpp b/Sim/GiGaMTCore/src/run/GiGaRunActionCommand.cpp index 8e5c894e..d82fcf7d 100755 --- a/Sim/GiGaMTCore/src/run/GiGaRunActionCommand.cpp +++ b/Sim/GiGaMTCore/src/run/GiGaRunActionCommand.cpp @@ -9,7 +9,7 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ #include "GiGaMTCoreRun/GiGaRunActionCommand.h" -#include "Geant4/G4UImanager.hh" +#include "G4UImanager.hh" // ============================================================================ /** performe the action at the begin of each run diff --git a/Sim/GiGaMTCore/src/run/GiGaWorkerPilot.cpp b/Sim/GiGaMTCore/src/run/GiGaWorkerPilot.cpp index 638362a8..012a9cb4 100644 --- a/Sim/GiGaMTCore/src/run/GiGaWorkerPilot.cpp +++ b/Sim/GiGaMTCore/src/run/GiGaWorkerPilot.cpp @@ -17,12 +17,12 @@ #include <string> -#include "Geant4/G4AutoDelete.hh" -#include "Geant4/G4Event.hh" -#include "Geant4/G4UImanager.hh" -#include "Geant4/G4UserWorkerThreadInitialization.hh" -#include "Geant4/G4VUserActionInitialization.hh" -#include "Geant4/G4WorkerThread.hh" +#include "G4AutoDelete.hh" +#include "G4Event.hh" +#include "G4UImanager.hh" +#include "G4UserWorkerThreadInitialization.hh" +#include "G4VUserActionInitialization.hh" +#include "G4WorkerThread.hh" GiGaWorkerPilot::GiGaWorkerPilot( GiGaWorkerPilot&& right ) : GiGaMessage( std::move( right ) ) { diff --git a/Sim/GiGaMTCore/src/run/GiGaWorkerRunManager.cpp b/Sim/GiGaMTCore/src/run/GiGaWorkerRunManager.cpp index bab58e4c..445ffb76 100644 --- a/Sim/GiGaMTCore/src/run/GiGaWorkerRunManager.cpp +++ b/Sim/GiGaMTCore/src/run/GiGaWorkerRunManager.cpp @@ -10,14 +10,14 @@ \*****************************************************************************/ #include "GiGaMTCoreRun/GiGaWorkerRunManager.h" -#include "Geant4/G4Event.hh" -#include "Geant4/G4GeometryManager.hh" -#include "Geant4/G4LogicalVolumeStore.hh" -#include "Geant4/G4MTRunManager.hh" -#include "Geant4/G4StateManager.hh" -#include "Geant4/G4TransportationManager.hh" -#include "Geant4/G4UImanager.hh" -#include "Geant4/G4VUserDetectorConstruction.hh" +#include "G4Event.hh" +#include "G4GeometryManager.hh" +#include "G4LogicalVolumeStore.hh" +#include "G4MTRunManager.hh" +#include "G4StateManager.hh" +#include "G4TransportationManager.hh" +#include "G4UImanager.hh" +#include "G4VUserDetectorConstruction.hh" #include <mutex> diff --git a/Sim/GiGaMTCore/src/truth/MCTruthConverter.cpp b/Sim/GiGaMTCore/src/truth/MCTruthConverter.cpp index 50ec76c4..a5acc2fd 100644 --- a/Sim/GiGaMTCore/src/truth/MCTruthConverter.cpp +++ b/Sim/GiGaMTCore/src/truth/MCTruthConverter.cpp @@ -11,7 +11,7 @@ #include "GiGaMTCoreTruth/MCTruthConverter.h" #include "ConverterInfo.h" #include "GaudiKernel/GaudiException.h" -#include "Geant4/G4SystemOfUnits.hh" +#include "G4SystemOfUnits.hh" #include "GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h" #include "GiGaMTCoreTruth/LinkedParticleHelpers.h" #include "GiGaMTCoreRun/SimResults.h" diff --git a/Sim/GiGaMTCore/src/truth/TruthFlaggingTrackAction.cpp b/Sim/GiGaMTCore/src/truth/TruthFlaggingTrackAction.cpp index 75ba10f6..27a6ff98 100755 --- a/Sim/GiGaMTCore/src/truth/TruthFlaggingTrackAction.cpp +++ b/Sim/GiGaMTCore/src/truth/TruthFlaggingTrackAction.cpp @@ -11,12 +11,12 @@ /// CLHEP #include "CLHEP/Geometry/Point3D.h" /// Geant4 -#include "Geant4/G4ParticleDefinition.hh" -#include "Geant4/G4ParticleTable.hh" -#include "Geant4/G4PrimaryParticle.hh" -#include "Geant4/G4Track.hh" -#include "Geant4/G4TrackVector.hh" -#include "Geant4/G4TrackingManager.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" +#include "G4PrimaryParticle.hh" +#include "G4Track.hh" +#include "G4TrackVector.hh" +#include "G4TrackingManager.hh" /// GaudiKernel #include "GaudiKernel/MsgStream.h" /// GiGa diff --git a/Sim/GiGaMTCore/src/truth/TruthStoringTrackAction.cpp b/Sim/GiGaMTCore/src/truth/TruthStoringTrackAction.cpp index a6603ce1..2549c358 100755 --- a/Sim/GiGaMTCore/src/truth/TruthStoringTrackAction.cpp +++ b/Sim/GiGaMTCore/src/truth/TruthStoringTrackAction.cpp @@ -22,9 +22,9 @@ #include "Kernel/ParticleProperty.h" // G4 -#include "Geant4/G4ParticleDefinition.hh" -#include "Geant4/G4PrimaryParticle.hh" -#include "Geant4/G4TrackingManager.hh" +#include "G4ParticleDefinition.hh" +#include "G4PrimaryParticle.hh" +#include "G4TrackingManager.hh" // Included for vertex types // FIXME: Need to reorganise when splitting LHCb diff --git a/Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepCnvSvc.h b/Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepCnvSvc.h index 875973bb..fa7ff278 100644 --- a/Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepCnvSvc.h +++ b/Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepCnvSvc.h @@ -20,7 +20,7 @@ #include "GaudiKernel/IIncidentSvc.h" #include "GaudiKernel/Service.h" #include "GaudiKernel/Transform3DTypes.h" -#include "Geant4/G4VSensitiveDetector.hh" +#include "G4VSensitiveDetector.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" #include "Kernel/IPropertyConfigSvc.h" diff --git a/Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepDetectorConstruction.h b/Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepDetectorConstruction.h index 1ed11c6e..358c4248 100644 --- a/Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepDetectorConstruction.h +++ b/Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepDetectorConstruction.h @@ -12,7 +12,7 @@ // Geant #include <functional> #include "DD4hep/Printout.h" -#include "Geant4/G4VUserDetectorConstruction.hh" +#include "G4VUserDetectorConstruction.hh" namespace dd4hep { class Detector; diff --git a/Sim/GiGaMTDD4hep/src/components/DD4hepDetectorConstructionFAC.cpp b/Sim/GiGaMTDD4hep/src/components/DD4hepDetectorConstructionFAC.cpp index 446bed5b..12b9ead8 100644 --- a/Sim/GiGaMTDD4hep/src/components/DD4hepDetectorConstructionFAC.cpp +++ b/Sim/GiGaMTDD4hep/src/components/DD4hepDetectorConstructionFAC.cpp @@ -17,8 +17,8 @@ #include "TSystem.h" // Geant4 -#include "Geant4/G4VUserDetectorConstruction.hh" -#include "Geant4/G4FieldManager.hh" +#include "G4VUserDetectorConstruction.hh" +#include "G4FieldManager.hh" /** @class DD4hepDetectorConstructionFAC SimG4Components/src/DD4hepDetectorConstructionFAC.h DD4hepDetectorConstructionFAC.h * diff --git a/Sim/GiGaMTDD4hep/src/lib/DD4hepCnvSvc.cpp b/Sim/GiGaMTDD4hep/src/lib/DD4hepCnvSvc.cpp index 45dc9e38..833f9fd3 100644 --- a/Sim/GiGaMTDD4hep/src/lib/DD4hepCnvSvc.cpp +++ b/Sim/GiGaMTDD4hep/src/lib/DD4hepCnvSvc.cpp @@ -12,7 +12,7 @@ #include "GiGaMTDD4hep/DD4hepCnvSvc.h" // Geant4 -#include "Geant4/G4SDManager.hh" +#include "G4SDManager.hh" #include "TSystem.h" // ============================================================================ diff --git a/Sim/GiGaMTDD4hep/src/lib/DD4hepDetectorConstruction.cpp b/Sim/GiGaMTDD4hep/src/lib/DD4hepDetectorConstruction.cpp index 34511c0e..f8cd63bf 100644 --- a/Sim/GiGaMTDD4hep/src/lib/DD4hepDetectorConstruction.cpp +++ b/Sim/GiGaMTDD4hep/src/lib/DD4hepDetectorConstruction.cpp @@ -17,7 +17,7 @@ #include "DDG4/Geant4Converter.h" #include "DDG4/Geant4Mapping.h" -#include "Geant4/G4VUserDetectorConstruction.hh" +#include "G4VUserDetectorConstruction.hh" DD4hepDetectorConstruction::DD4hepDetectorConstruction( const dd4hep::Detector& detector) diff --git a/Sim/GiGaMTDebug/src/DebugStepAction.cpp b/Sim/GiGaMTDebug/src/DebugStepAction.cpp index dbeda9e1..c435cbbd 100644 --- a/Sim/GiGaMTDebug/src/DebugStepAction.cpp +++ b/Sim/GiGaMTDebug/src/DebugStepAction.cpp @@ -8,8 +8,8 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "Geant4/G4UserSteppingAction.hh" -#include "Geant4/globals.hh" +#include "G4UserSteppingAction.hh" +#include "globals.hh" namespace Gaussino { @@ -24,10 +24,10 @@ namespace Gaussino }; } -#include "Geant4/G4Event.hh" -#include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4RunManager.hh" -#include "Geant4/G4Step.hh" +#include "G4Event.hh" +#include "G4LogicalVolume.hh" +#include "G4RunManager.hh" +#include "G4Step.hh" #include "HepMC3/FourVector.h" template <typename T> @@ -73,7 +73,7 @@ void Gaussino::DebugStepAction::UserSteppingAction( const G4Step* step ) #include "GaudiAlg/GaudiTool.h" #include "GiGaMTFactories/GiGaFactoryBase.h" -#include "Geant4/G4UserTrackingAction.hh" +#include "G4UserTrackingAction.hh" class DebugStepActionFAC : public extends<GaudiTool, GiGaFactoryBase<G4UserSteppingAction>> { diff --git a/Sim/GiGaMTDebug/src/DebugTrackAction.cpp b/Sim/GiGaMTDebug/src/DebugTrackAction.cpp index 5d3ce8b2..f0421223 100755 --- a/Sim/GiGaMTDebug/src/DebugTrackAction.cpp +++ b/Sim/GiGaMTDebug/src/DebugTrackAction.cpp @@ -8,8 +8,8 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "Geant4/G4UserTrackingAction.hh" -#include "Geant4/G4VProcess.hh" +#include "G4UserTrackingAction.hh" +#include "G4VProcess.hh" #include "GiGaMTCoreMessage/IGiGaMessage.h" #include "HepMC3/FourVector.h" @@ -22,9 +22,9 @@ // from Gaudi // G4 -#include "Geant4/G4ParticleDefinition.hh" -#include "Geant4/G4PrimaryParticle.hh" -#include "Geant4/G4TrackingManager.hh" +#include "G4ParticleDefinition.hh" +#include "G4PrimaryParticle.hh" +#include "G4TrackingManager.hh" // Included for vertex types // FIXME: Need to reorganise when splitting LHCb @@ -197,7 +197,7 @@ namespace Gaussino #include "GaudiAlg/GaudiTool.h" #include "GiGaMTFactories/GiGaFactoryBase.h" -#include "Geant4/G4UserTrackingAction.hh" +#include "G4UserTrackingAction.hh" class DebugTrackActionFAC : public extends<GaudiTool, GiGaFactoryBase<G4UserTrackingAction>> { diff --git a/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterHit.h b/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterHit.h index 684b5762..5f2d4680 100644 --- a/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterHit.h +++ b/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterHit.h @@ -10,13 +10,13 @@ \*****************************************************************************/ #pragma once -#include "Geant4/G4Allocator.hh" -#include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4RotationMatrix.hh" -#include "Geant4/G4THitsCollection.hh" -#include "Geant4/G4ThreeVector.hh" -#include "Geant4/G4Transform3D.hh" -#include "Geant4/G4VHit.hh" +#include "G4Allocator.hh" +#include "G4LogicalVolume.hh" +#include "G4RotationMatrix.hh" +#include "G4THitsCollection.hh" +#include "G4ThreeVector.hh" +#include "G4Transform3D.hh" +#include "G4VHit.hh" class G4AttDef; class G4AttValue; diff --git a/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterSD.h b/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterSD.h index 77f46344..4751c1c1 100644 --- a/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterSD.h +++ b/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterSD.h @@ -11,7 +11,7 @@ #pragma once #include "FCCTest/CalorimeterHit.h" -#include "Geant4/G4VSensitiveDetector.hh" +#include "G4VSensitiveDetector.hh" class G4Step; class G4HCofThisEvent; class G4TouchableHistory; diff --git a/Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.cpp b/Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.cpp index eb11c50d..475cbd69 100644 --- a/Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.cpp +++ b/Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.cpp @@ -11,7 +11,7 @@ #include "G4GdmlTestDetector.h" #include "FCCTest/CalorimeterSD.h" -#include "Geant4/G4SDManager.hh" +#include "G4SDManager.hh" #include "GiGaMTCoreDet/GdmlDetectorConstruction.h" DECLARE_COMPONENT( G4GdmlTestDetector ) diff --git a/Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.h b/Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.h index 442a545e..2fb290d5 100644 --- a/Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.h +++ b/Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.h @@ -12,7 +12,7 @@ // Gaudi #include "GaudiAlg/GaudiTool.h" -#include "Geant4/G4VUserDetectorConstruction.hh" +#include "G4VUserDetectorConstruction.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" /** @class G4GdmlTestDetector SimG4Components/src/G4GdmlTestDetector.h G4GdmlTestDetector.h diff --git a/Sim/GiGaMTExamples/FCCTest/src/components/G4SaveTestCalHits.cpp b/Sim/GiGaMTExamples/FCCTest/src/components/G4SaveTestCalHits.cpp index 4c538225..36055c1d 100644 --- a/Sim/GiGaMTExamples/FCCTest/src/components/G4SaveTestCalHits.cpp +++ b/Sim/GiGaMTExamples/FCCTest/src/components/G4SaveTestCalHits.cpp @@ -17,7 +17,7 @@ #include "GaudiKernel/ITHistSvc.h" // Geant4 -#include "Geant4/G4Event.hh" +#include "G4Event.hh" DECLARE_COMPONENT( G4SaveTestCalHits ) diff --git a/Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterHit.cpp b/Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterHit.cpp index 42d22ea4..35787b35 100644 --- a/Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterHit.cpp +++ b/Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterHit.cpp @@ -10,17 +10,17 @@ \*****************************************************************************/ #include "FCCTest/CalorimeterHit.h" -#include "Geant4/G4AttDef.hh" -#include "Geant4/G4AttDefStore.hh" -#include "Geant4/G4AttValue.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4Colour.hh" -#include "Geant4/G4SystemOfUnits.hh" -#include "Geant4/G4UIcommand.hh" -#include "Geant4/G4UnitsTable.hh" -#include "Geant4/G4VVisManager.hh" -#include "Geant4/G4VisAttributes.hh" -#include "Geant4/G4ios.hh" +#include "G4AttDef.hh" +#include "G4AttDefStore.hh" +#include "G4AttValue.hh" +#include "G4Box.hh" +#include "G4Colour.hh" +#include "G4SystemOfUnits.hh" +#include "G4UIcommand.hh" +#include "G4UnitsTable.hh" +#include "G4VVisManager.hh" +#include "G4VisAttributes.hh" +#include "G4ios.hh" namespace FCCTest { diff --git a/Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterSD.cpp b/Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterSD.cpp index c5d8f202..1abb1ede 100644 --- a/Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterSD.cpp +++ b/Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterSD.cpp @@ -11,12 +11,12 @@ #include "FCCTest/CalorimeterSD.h" #include "FCCTest/CalorimeterHit.h" -#include "Geant4/G4HCofThisEvent.hh" -#include "Geant4/G4SDManager.hh" -#include "Geant4/G4Step.hh" -#include "Geant4/G4TouchableHistory.hh" -#include "Geant4/G4Track.hh" -#include "Geant4/G4VTouchable.hh" +#include "G4HCofThisEvent.hh" +#include "G4SDManager.hh" +#include "G4Step.hh" +#include "G4TouchableHistory.hh" +#include "G4Track.hh" +#include "G4VTouchable.hh" namespace FCCTest { diff --git a/Sim/GiGaMTExamples/IronBox/src/IronBoxGeo.cpp b/Sim/GiGaMTExamples/IronBox/src/IronBoxGeo.cpp index 76e213a9..a6f188ac 100755 --- a/Sim/GiGaMTExamples/IronBox/src/IronBoxGeo.cpp +++ b/Sim/GiGaMTExamples/IronBox/src/IronBoxGeo.cpp @@ -8,11 +8,11 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "Geant4/G4Box.hh" -#include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4NistManager.hh" -#include "Geant4/G4PVPlacement.hh" -#include "Geant4/G4SystemOfUnits.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4NistManager.hh" +#include "G4PVPlacement.hh" +#include "G4SystemOfUnits.hh" // local #include "IronBoxGeo.h" diff --git a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsConstrFAC.h b/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsConstrFAC.h index b54461d3..576ec751 100755 --- a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsConstrFAC.h +++ b/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsConstrFAC.h @@ -12,8 +12,8 @@ // Include files #include "GiGaMTFactories/GiGaTool.h" -#include "Geant4/G4EmStandardPhysics_option1.hh" -#include "Geant4/G4VPhysicsConstructor.hh" +#include "G4EmStandardPhysics_option1.hh" +#include "G4VPhysicsConstructor.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" /** GiGaMTPhysConstr diff --git a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsFactory.h b/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsFactory.h index cb9bf96c..479a9805 100755 --- a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsFactory.h +++ b/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsFactory.h @@ -10,7 +10,7 @@ \*****************************************************************************/ #pragma once -#include "Geant4/G4VUserPhysicsList.hh" +#include "G4VUserPhysicsList.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GaudiAlg/GaudiTool.h" diff --git a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4SensDetFactory.h b/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4SensDetFactory.h index 10a33142..8c06330e 100755 --- a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4SensDetFactory.h +++ b/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4SensDetFactory.h @@ -11,7 +11,7 @@ #pragma once // Include files -#include "Geant4/G4VSensitiveDetector.hh" +#include "G4VSensitiveDetector.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GiGaMTFactories/GiGaTool.h" diff --git a/Sim/GiGaMTFactories/GiGaMTFactories/Magnet/FieldMgrBase.h b/Sim/GiGaMTFactories/GiGaMTFactories/Magnet/FieldMgrBase.h index dfdd37dc..cd3b01c3 100755 --- a/Sim/GiGaMTFactories/GiGaMTFactories/Magnet/FieldMgrBase.h +++ b/Sim/GiGaMTFactories/GiGaMTFactories/Magnet/FieldMgrBase.h @@ -13,10 +13,10 @@ // Include files #include "CLHEP/Units/SystemOfUnits.h" #include "GaudiKernel/ToolHandle.h" -#include "Geant4/G4Mag_EqRhs.hh" -#include "Geant4/G4FieldManager.hh" -#include "Geant4/G4MagIntegratorStepper.hh" -#include "Geant4/G4MagneticField.hh" +#include "G4Mag_EqRhs.hh" +#include "G4FieldManager.hh" +#include "G4MagIntegratorStepper.hh" +#include "G4MagneticField.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GiGaMTFactories/GiGaTool.h" diff --git a/Sim/GiGaMTFactories/src/det/GDMLConstructionFactory.h b/Sim/GiGaMTFactories/src/det/GDMLConstructionFactory.h index 0efc28c0..ff203c77 100644 --- a/Sim/GiGaMTFactories/src/det/GDMLConstructionFactory.h +++ b/Sim/GiGaMTFactories/src/det/GDMLConstructionFactory.h @@ -12,7 +12,7 @@ // Gaudi #include "GaudiAlg/GaudiTool.h" -#include "Geant4/G4VUserDetectorConstruction.hh" +#include "G4VUserDetectorConstruction.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" /** @class GDMLConstructionFactory SimG4Components/src/GDMLConstructionFactory.h GDMLConstructionFactory.h diff --git a/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.cpp b/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.cpp index 83126223..56aa9998 100644 --- a/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.cpp +++ b/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.cpp @@ -87,8 +87,8 @@ G4VUserDetectorConstruction* GiGaMTDetectorConstructionFAC::construct() const { return detconst; } -#include "Geant4/G4LogicalVolumeStore.hh" -#include "Geant4/G4SDManager.hh" +#include "G4LogicalVolumeStore.hh" +#include "G4SDManager.hh" void GiGaMTDetectorConstructionFAC::DressVolumes() const { auto sdmanager = G4SDManager::GetSDMpointer(); @@ -108,7 +108,7 @@ void GiGaMTDetectorConstructionFAC::DressVolumes() const { } } -#include "Geant4/G4GDMLParser.hh" +#include "G4GDMLParser.hh" StatusCode GiGaMTDetectorConstructionFAC::SaveGDML() const { try { diff --git a/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.h b/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.h index ed0b4e15..d9b004c8 100644 --- a/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.h +++ b/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.h @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "Geant4/G4VUserDetectorConstruction.hh" +#include "G4VUserDetectorConstruction.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GiGaMTFactories/GiGaTool.h" diff --git a/Sim/GiGaMTFactories/src/magnet/components/MagFieldFromSvc.cpp b/Sim/GiGaMTFactories/src/magnet/components/MagFieldFromSvc.cpp index de5ac762..c671eb97 100755 --- a/Sim/GiGaMTFactories/src/magnet/components/MagFieldFromSvc.cpp +++ b/Sim/GiGaMTFactories/src/magnet/components/MagFieldFromSvc.cpp @@ -21,7 +21,7 @@ #include "GaudiKernel/Vector3DTypes.h" // local -#include "Geant4/G4MagneticField.hh" +#include "G4MagneticField.hh" #include "GiGaMTCoreMessage/IGiGaMessage.h" #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GiGaMTFactories/GiGaTool.h" diff --git a/Sim/GiGaMTFactories/src/magnet/components/Steppers.cpp b/Sim/GiGaMTFactories/src/magnet/components/Steppers.cpp index e56c9311..34477831 100644 --- a/Sim/GiGaMTFactories/src/magnet/components/Steppers.cpp +++ b/Sim/GiGaMTFactories/src/magnet/components/Steppers.cpp @@ -9,22 +9,22 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ #include "GaudiAlg/GaudiTool.h" -#include "Geant4/G4EquationOfMotion.hh" -#include "Geant4/G4MagIntegratorStepper.hh" +#include "G4EquationOfMotion.hh" +#include "G4MagIntegratorStepper.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GiGaMTFactories/GiGaTool.h" -#include "Geant4/G4ExplicitEuler.hh" -#include "Geant4/G4ImplicitEuler.hh" -#include "Geant4/G4SimpleRunge.hh" -#include "Geant4/G4SimpleHeum.hh" -#include "Geant4/G4ClassicalRK4.hh" -#include "Geant4/G4CashKarpRKF45.hh" -#include "Geant4/G4RKG3_Stepper.hh" -#include "Geant4/G4HelixExplicitEuler.hh" -#include "Geant4/G4HelixImplicitEuler.hh" -#include "Geant4/G4HelixSimpleRunge.hh" -#include "Geant4/G4HelixHeum.hh" +#include "G4ExplicitEuler.hh" +#include "G4ImplicitEuler.hh" +#include "G4SimpleRunge.hh" +#include "G4SimpleHeum.hh" +#include "G4ClassicalRK4.hh" +#include "G4CashKarpRKF45.hh" +#include "G4RKG3_Stepper.hh" +#include "G4HelixExplicitEuler.hh" +#include "G4HelixImplicitEuler.hh" +#include "G4HelixSimpleRunge.hh" +#include "G4HelixHeum.hh" template <typename STEPPER> class GiGaMTMagnetStepperFAC : public extends<GaudiTool, GiGaFactoryBase<G4MagIntegratorStepper, G4Mag_EqRhs*> > diff --git a/Sim/GiGaMTFactories/src/magnet/components/ToolFieldMgr.cpp b/Sim/GiGaMTFactories/src/magnet/components/ToolFieldMgr.cpp index 8f68a3b7..42f23b42 100755 --- a/Sim/GiGaMTFactories/src/magnet/components/ToolFieldMgr.cpp +++ b/Sim/GiGaMTFactories/src/magnet/components/ToolFieldMgr.cpp @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "Geant4/G4MagneticField.hh" +#include "G4MagneticField.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GiGaMTFactories/Magnet/FieldMgrBase.h" #include "GaudiKernel/ToolHandle.h" diff --git a/Sim/GiGaMTFactories/src/magnet/lib/FieldMgrBase.cpp b/Sim/GiGaMTFactories/src/magnet/lib/FieldMgrBase.cpp index 5694c8ba..0e531e8c 100755 --- a/Sim/GiGaMTFactories/src/magnet/lib/FieldMgrBase.cpp +++ b/Sim/GiGaMTFactories/src/magnet/lib/FieldMgrBase.cpp @@ -10,11 +10,11 @@ \*****************************************************************************/ #include "GiGaMTFactories/Magnet/FieldMgrBase.h" #include "GaudiKernel/GaudiException.h" -#include "Geant4/G4ChordFinder.hh" -#include "Geant4/G4MagIntegratorStepper.hh" -#include "Geant4/G4Mag_UsualEqRhs.hh" -#include "Geant4/G4PropagatorInField.hh" -#include "Geant4/G4TransportationManager.hh" +#include "G4ChordFinder.hh" +#include "G4MagIntegratorStepper.hh" +#include "G4Mag_UsualEqRhs.hh" +#include "G4PropagatorInField.hh" +#include "G4TransportationManager.hh" namespace Gaussino { diff --git a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp b/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp index a25963ae..d6e13fd9 100644 --- a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp +++ b/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp @@ -13,32 +13,32 @@ #include "GiGaMTFactories/GiGaMTG4PhysicsConstrFAC.h" // Geant4 physics lists -#include "Geant4/G4DecayPhysics.hh" +#include "G4DecayPhysics.hh" // EM physics -#include "Geant4/G4EmExtraPhysics.hh" -#include "Geant4/G4EmStandardPhysics.hh" -#include "Geant4/G4EmStandardPhysics_option1.hh" -#include "Geant4/G4EmStandardPhysics_option2.hh" -#include "Geant4/G4EmStandardPhysics_option3.hh" +#include "G4EmExtraPhysics.hh" +#include "G4EmStandardPhysics.hh" +#include "G4EmStandardPhysics_option1.hh" +#include "G4EmStandardPhysics_option2.hh" +#include "G4EmStandardPhysics_option3.hh" // Ion and hadrons -#include "Geant4/G4HadronElasticPhysics.hh" -#include "Geant4/G4HadronElasticPhysicsHP.hh" -#include "Geant4/G4IonPhysics.hh" -#include "Geant4/G4NeutronTrackingCut.hh" -#include "Geant4/G4StoppingPhysics.hh" +#include "G4HadronElasticPhysics.hh" +#include "G4HadronElasticPhysicsHP.hh" +#include "G4IonPhysics.hh" +#include "G4NeutronTrackingCut.hh" +#include "G4StoppingPhysics.hh" -#include "Geant4/G4HadronPhysicsQGSP_BERT.hh" -#include "Geant4/G4HadronPhysicsQGSP_BERT_HP.hh" -#include "Geant4/G4HadronPhysicsQGSP_FTFP_BERT.hh" +#include "G4HadronPhysicsQGSP_BERT.hh" +#include "G4HadronPhysicsQGSP_BERT_HP.hh" +#include "G4HadronPhysicsQGSP_FTFP_BERT.hh" // FTFP hadrons -#include "Geant4/G4HadronPhysicsFTFP_BERT.hh" -#include "Geant4/G4HadronPhysicsFTFP_BERT_HP.hh" +#include "G4HadronPhysicsFTFP_BERT.hh" +#include "G4HadronPhysicsFTFP_BERT_HP.hh" // Optical physics -#include "Geant4/G4OpticalPhysics.hh" +#include "G4OpticalPhysics.hh" typedef GiGaMTG4PhysicsConstrFAC<G4DecayPhysics> GiGaMT_G4DecayPhysics; DECLARE_COMPONENT_WITH_ID( GiGaMT_G4DecayPhysics, "GiGaMT_G4DecayPhysics" ) diff --git a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsFactory.cpp b/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsFactory.cpp index 70bda93e..bd306db8 100644 --- a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsFactory.cpp +++ b/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsFactory.cpp @@ -13,28 +13,28 @@ // All includes I could find that definethe physics lists // that are directly provided by Geant4 -#include "Geant4/FTFP_BERT.hh" -#include "Geant4/FTFP_BERT_ATL.hh" -#include "Geant4/FTFP_BERT_HP.hh" -#include "Geant4/FTFP_BERT_TRV.hh" -#include "Geant4/FTFP_INCLXX.hh" -#include "Geant4/FTFP_INCLXX_HP.hh" -#include "Geant4/FTFQGSP_BERT.hh" -#include "Geant4/FTF_BIC.hh" -#include "Geant4/INCLXXPhysicsListHelper.hh" -#include "Geant4/LBE.hh" -#include "Geant4/NuBeam.hh" -#include "Geant4/QGSP_BERT.hh" -#include "Geant4/QGSP_BERT_HP.hh" -#include "Geant4/QGSP_BIC.hh" -#include "Geant4/QGSP_BIC_AllHP.hh" -#include "Geant4/QGSP_BIC_HP.hh" -#include "Geant4/QGSP_FTFP_BERT.hh" -#include "Geant4/QGSP_INCLXX.hh" -#include "Geant4/QGSP_INCLXX_HP.hh" -#include "Geant4/QGS_BIC.hh" -#include "Geant4/Shielding.hh" -#include "Geant4/ShieldingLEND.hh" +#include "FTFP_BERT.hh" +#include "FTFP_BERT_ATL.hh" +#include "FTFP_BERT_HP.hh" +#include "FTFP_BERT_TRV.hh" +#include "FTFP_INCLXX.hh" +#include "FTFP_INCLXX_HP.hh" +#include "FTFQGSP_BERT.hh" +#include "FTF_BIC.hh" +#include "INCLXXPhysicsListHelper.hh" +#include "LBE.hh" +#include "NuBeam.hh" +#include "QGSP_BERT.hh" +#include "QGSP_BERT_HP.hh" +#include "QGSP_BIC.hh" +#include "QGSP_BIC_AllHP.hh" +#include "QGSP_BIC_HP.hh" +#include "QGSP_FTFP_BERT.hh" +#include "QGSP_INCLXX.hh" +#include "QGSP_INCLXX_HP.hh" +#include "QGS_BIC.hh" +#include "Shielding.hh" +#include "ShieldingLEND.hh" typedef GiGaMTG4PhysicsFactory<FTFP_BERT> GiGaMT_FTFP_BERT; DECLARE_COMPONENT_WITH_ID( GiGaMT_FTFP_BERT, "GiGaMT_FTFP_BERT" ) diff --git a/Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.cpp b/Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.cpp index 0774d46e..825b92f0 100755 --- a/Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.cpp +++ b/Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.cpp @@ -9,7 +9,7 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ #include "GiGaMTModularPhysListFAC.h" -#include "Geant4/G4VModularPhysicsList.hh" +#include "G4VModularPhysicsList.hh" #include "GiGaMTCoreMessage/IGiGaMessage.h" DECLARE_COMPONENT( GiGaMTModularPhysListFAC ) diff --git a/Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.h b/Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.h index 183ca042..b91efad2 100755 --- a/Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.h +++ b/Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.h @@ -12,8 +12,8 @@ // G4 #include "GaudiAlg/GaudiTool.h" #include "GaudiKernel/ToolHandle.h" -#include "Geant4/G4VPhysicsConstructor.hh" -#include "Geant4/G4VUserPhysicsList.hh" +#include "G4VPhysicsConstructor.hh" +#include "G4VUserPhysicsList.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GiGaMTFactories/GiGaTool.h" diff --git a/Sim/GiGaMTFactories/src/truth/TruthActionFactories.cpp b/Sim/GiGaMTFactories/src/truth/TruthActionFactories.cpp index 992d8fe2..bb327da5 100644 --- a/Sim/GiGaMTFactories/src/truth/TruthActionFactories.cpp +++ b/Sim/GiGaMTFactories/src/truth/TruthActionFactories.cpp @@ -14,7 +14,7 @@ #include "GiGaMTCoreTruth/TruthFlaggingTrackAction.h" #include "GiGaMTCoreTruth/TruthStoringTrackAction.h" -#include "Geant4/G4UserTrackingAction.hh" +#include "G4UserTrackingAction.hh" class TruthFlaggingTrackActionFAC : public extends<GiGaTool, GiGaFactoryBase<G4UserTrackingAction>> { using extends::extends; diff --git a/Sim/GiGaMTGeo/src/GiGaRegionTool.cpp b/Sim/GiGaMTGeo/src/GiGaRegionTool.cpp index e70fc585..0eba5d31 100755 --- a/Sim/GiGaMTGeo/src/GiGaRegionTool.cpp +++ b/Sim/GiGaMTGeo/src/GiGaRegionTool.cpp @@ -9,11 +9,11 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ // G4 -#include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4LogicalVolumeStore.hh" -#include "Geant4/G4ProductionCuts.hh" -#include "Geant4/G4Region.hh" -#include "Geant4/G4RegionStore.hh" +#include "G4LogicalVolume.hh" +#include "G4LogicalVolumeStore.hh" +#include "G4ProductionCuts.hh" +#include "G4Region.hh" +#include "G4RegionStore.hh" // local #include "GiGaRegionTool.h" diff --git a/Sim/GiGaMTGeo/src/GiGaRegionsTool.cpp b/Sim/GiGaMTGeo/src/GiGaRegionsTool.cpp index 155ec92d..166011cb 100755 --- a/Sim/GiGaMTGeo/src/GiGaRegionsTool.cpp +++ b/Sim/GiGaMTGeo/src/GiGaRegionsTool.cpp @@ -15,15 +15,15 @@ #include "GiGaMTRegions/IRegionsDefinitionSvc.h" #include "GiGaMTRegions/RegionCuts.h" -#include "Geant4/G4LogicalVolumeStore.hh" +#include "G4LogicalVolumeStore.hh" // local #include "GiGaRegionsTool.h" // G4 -#include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4ProductionCuts.hh" -#include "Geant4/G4Region.hh" +#include "G4LogicalVolume.hh" +#include "G4ProductionCuts.hh" +#include "G4Region.hh" // Declaration of the Tool Factory DECLARE_COMPONENT( GiGaRegionsTool ) diff --git a/Sim/GiGaMTGeo/src/GiGaSetSimAttributes.cpp b/Sim/GiGaMTGeo/src/GiGaSetSimAttributes.cpp index 1bb73fca..03368654 100755 --- a/Sim/GiGaMTGeo/src/GiGaSetSimAttributes.cpp +++ b/Sim/GiGaMTGeo/src/GiGaSetSimAttributes.cpp @@ -14,8 +14,8 @@ // SimSvc #include "GiGaMTRegions/IRegionsDefinitionSvc.h" // Geant4 -#include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4LogicalVolumeStore.hh" +#include "G4LogicalVolume.hh" +#include "G4LogicalVolumeStore.hh" #include "GiGaMTCoreCut/GaussinoG4UserLimits.h" // local #include "GiGaSetSimAttributes.h" diff --git a/Sim/MCCollector/src/MCCollectorHit.h b/Sim/MCCollector/src/MCCollectorHit.h index f6b7bae1..250e6caf 100755 --- a/Sim/MCCollector/src/MCCollectorHit.h +++ b/Sim/MCCollector/src/MCCollectorHit.h @@ -14,9 +14,9 @@ #include "GiGaMTCoreDet/GaussHitBase.h" // G4 -#include "Geant4/G4Allocator.hh" -#include "Geant4/G4THitsCollection.hh" -#include "Geant4/G4ThreeVector.hh" +#include "G4Allocator.hh" +#include "G4THitsCollection.hh" +#include "G4ThreeVector.hh" namespace MCCollector { class Hit : public Gaussino::HitBase { diff --git a/Sim/MCCollector/src/MCCollectorSensDet.cpp b/Sim/MCCollector/src/MCCollectorSensDet.cpp index 75b314dd..52cbdc99 100755 --- a/Sim/MCCollector/src/MCCollectorSensDet.cpp +++ b/Sim/MCCollector/src/MCCollectorSensDet.cpp @@ -24,15 +24,15 @@ #include "GaudiKernel/SystemOfUnits.h" // from Geant4 -#include "Geant4/G4HCofThisEvent.hh" -#include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4SDManager.hh" -#include "Geant4/G4Step.hh" -#include "Geant4/G4TouchableHistory.hh" -#include "Geant4/G4Track.hh" -#include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4VSensitiveDetector.hh" -#include "Geant4/G4ios.hh" +#include "G4HCofThisEvent.hh" +#include "G4LogicalVolume.hh" +#include "G4SDManager.hh" +#include "G4Step.hh" +#include "G4TouchableHistory.hh" +#include "G4Track.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VSensitiveDetector.hh" +#include "G4ios.hh" namespace MCCollector { class SensDet : public G4VSensitiveDetector, public virtual GiGaMessage { diff --git a/Sim/ParallelGeometry/ParallelGeometry/Physics.h b/Sim/ParallelGeometry/ParallelGeometry/Physics.h index 5f75d4c3..762628fa 100644 --- a/Sim/ParallelGeometry/ParallelGeometry/Physics.h +++ b/Sim/ParallelGeometry/ParallelGeometry/Physics.h @@ -11,7 +11,7 @@ #pragma once // Geant4 -#include "Geant4/G4ParallelWorldPhysics.hh" +#include "G4ParallelWorldPhysics.hh" #include "GiGaMTCoreMessage/IGiGaMessage.h" namespace ParallelGeometry { diff --git a/Sim/ParallelGeometry/ParallelGeometry/PhysicsFactory.h b/Sim/ParallelGeometry/ParallelGeometry/PhysicsFactory.h index 0ae1f1e1..4661db22 100644 --- a/Sim/ParallelGeometry/ParallelGeometry/PhysicsFactory.h +++ b/Sim/ParallelGeometry/ParallelGeometry/PhysicsFactory.h @@ -10,7 +10,7 @@ \*****************************************************************************/ #pragma once // Geant4 -#include "Geant4/G4ParallelWorldPhysics.hh" +#include "G4ParallelWorldPhysics.hh" // local #include "GiGaMTFactories/GiGaMTG4PhysicsConstrFAC.h" #include "GiGaMTFactories/GiGaMTG4PhysicsFactory.h" diff --git a/Sim/ParallelGeometry/ParallelGeometry/World.h b/Sim/ParallelGeometry/ParallelGeometry/World.h index 6a29ebc8..c250d296 100644 --- a/Sim/ParallelGeometry/ParallelGeometry/World.h +++ b/Sim/ParallelGeometry/ParallelGeometry/World.h @@ -11,7 +11,7 @@ #pragma once // Geant4 -#include "Geant4/G4VUserParallelWorld.hh" +#include "G4VUserParallelWorld.hh" class G4VPhysicalVolume; diff --git a/Sim/ParallelGeometry/ParallelGeometry/WorldFactory.h b/Sim/ParallelGeometry/ParallelGeometry/WorldFactory.h index 89b04ac6..1eb6a105 100644 --- a/Sim/ParallelGeometry/ParallelGeometry/WorldFactory.h +++ b/Sim/ParallelGeometry/ParallelGeometry/WorldFactory.h @@ -11,10 +11,10 @@ #pragma once // Geant4 -#include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4Material.hh" -#include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4VUserParallelWorld.hh" +#include "G4LogicalVolume.hh" +#include "G4Material.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VUserParallelWorld.hh" // local #include "GaudiAlg/FunctionalDetails.h" #include "GiGaMTCoreDet/IExternalDetectorEmbedder.h" diff --git a/Sim/ParallelGeometry/ParallelGeometry/WorldFactory.icpp b/Sim/ParallelGeometry/ParallelGeometry/WorldFactory.icpp index a4e7945b..b19c3fef 100644 --- a/Sim/ParallelGeometry/ParallelGeometry/WorldFactory.icpp +++ b/Sim/ParallelGeometry/ParallelGeometry/WorldFactory.icpp @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "Geant4/G4GDMLParser.hh" +#include "G4GDMLParser.hh" #include <filesystem> template <class ParallelWorld> diff --git a/Sim/ParallelGeometry/src/Lib/Physics.cpp b/Sim/ParallelGeometry/src/Lib/Physics.cpp index 8d7e5ef7..3c1ee037 100644 --- a/Sim/ParallelGeometry/src/Lib/Physics.cpp +++ b/Sim/ParallelGeometry/src/Lib/Physics.cpp @@ -13,12 +13,12 @@ #include "ParallelGeometry/Physics.h" // Geant4 -#include "Geant4/G4ParallelWorldPhysics.hh" -#include "Geant4/G4ParallelWorldProcess.hh" -#include "Geant4/G4ParticleDefinition.hh" -#include "Geant4/G4ParticleTable.hh" -#include "Geant4/G4ProcessManager.hh" -#include "Geant4/G4TransportationManager.hh" +#include "G4ParallelWorldPhysics.hh" +#include "G4ParallelWorldProcess.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" +#include "G4ProcessManager.hh" +#include "G4TransportationManager.hh" ParallelGeometry::Physics::Physics( std::string parallelWorld, bool layeredMass ) : G4ParallelWorldPhysics( parallelWorld, layeredMass ), m_layeredMass( layeredMass ) {} -- GitLab From 1da472e80f50001e66b3d8b45c2951051e32e941 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 28 Apr 2022 11:47:06 +0200 Subject: [PATCH 12/56] Remove non-ASCII characters in concurrentqueue.h --- Utils/Utils/concurrentqueue.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utils/Utils/concurrentqueue.h b/Utils/Utils/concurrentqueue.h index 68f66df1..91eb9a69 100644 --- a/Utils/Utils/concurrentqueue.h +++ b/Utils/Utils/concurrentqueue.h @@ -1,4 +1,4 @@ -// Provides a C++11 implementation of a multi-producer, multi-consumer lock-free queue. +// Provides a C++11 implementation of a multi-producer, multi-consumer lock-free queue. // An overview, including benchmark results, is provided here: // http://moodycamel.com/blog/2014/a-fast-general-purpose-lock-free-queue-for-c++ // The full design is also described in excruciating detail at: -- GitLab From c90d30d9d11a5f74871cc03998dca87644988844 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 5 May 2022 16:47:12 +0200 Subject: [PATCH 13/56] set workspace instead of prepending CMAKE_PREFIX_PATH by hand --- docs/getting_started/installing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started/installing.md b/docs/getting_started/installing.md index 9248bf52..305d1968 100644 --- a/docs/getting_started/installing.md +++ b/docs/getting_started/installing.md @@ -39,7 +39,7 @@ lb-set-platform x86_64_v2-centos7-gcc11-opt ``` lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support lhcb-gaussino Today - export CMAKE_PREFIX_PATH=${PWD}/lhcb-gaussino/Today:${CMAKE_PREFIX_PATH} + lb-set-workspace ./lhcb-gaussino/Today ``` ```{eval-rst} -- GitLab From e92bbdfcba98a9e4cb718d8bdd82237d62f4476a Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Mon, 9 May 2022 14:35:43 +0200 Subject: [PATCH 14/56] Update the particle table used by Gaussino to the latest version in DDDB --- Sim/Gaussino/data/ParticleTable.txt | 746 ++++++++++++++-------------- 1 file changed, 379 insertions(+), 367 deletions(-) diff --git a/Sim/Gaussino/data/ParticleTable.txt b/Sim/Gaussino/data/ParticleTable.txt index eaffd583..9139665d 100644 --- a/Sim/Gaussino/data/ParticleTable.txt +++ b/Sim/Gaussino/data/ParticleTable.txt @@ -8,8 +8,8 @@ PARTICLE # GEANTID PDGID CHARGE MASS(GeV) TLIFE(s) EVTGENNAME PYTHIAID MAXWIDTH # gamma 1 22 0.0 0.00000000 1.000000e+16 gamma 22 0.00000000 - W+ 53 24 1.0 80.38500000 3.156893e-25 W+ 24 0.00000000 - W- 54 -24 -1.0 80.38500000 3.156893e-25 W- -24 0.00000000 + W+ 53 24 1.0 80.37900000 3.156893e-25 W+ 24 0.00000000 + W- 54 -24 -1.0 80.37900000 3.156893e-25 W- -24 0.00000000 Z0 55 23 0.0 91.18760000 2.637914e-25 Z0 23 0.00000000 e+ 2 -11 1.0 0.00051100 1.000000e+16 e+ -11 0.00000000 e- 3 11 -1.0 0.00051100 1.000000e+16 e- 11 0.00000000 @@ -19,23 +19,23 @@ PARTICLE mu- 6 13 -1.0 0.10565837 2.196981e-06 mu- 13 0.00000000 nu_mu 300 14 0.0 0.00000000 1.000000e+16 nu_mu 14 0.00000000 nu_mu~ 301 -14 0.0 0.00000000 1.000000e+16 anti-nu_mu -14 0.00000000 - tau+ 51 -15 1.0 1.77682000 2.903000e-13 tau+ -15 0.00000000 - tau- 52 15 -1.0 1.77682000 2.903000e-13 tau- 15 0.00000000 - pi0 7 111 0.0 0.13497660 8.520000e-17 pi0 111 0.00000000 - pi+ 8 211 1.0 0.13957018 2.603300e-08 pi+ 211 0.00000000 - pi- 9 -211 -1.0 0.13957018 2.603300e-08 pi- -211 0.00000000 + tau+ 51 -15 1.0 1.77686000 2.903449e-13 tau+ -15 0.00000000 + tau- 52 15 -1.0 1.77686000 2.903449e-13 tau- 15 0.00000000 + pi0 7 111 0.0 0.13497700 8.520000e-17 pi0 111 0.00000000 + pi+ 8 211 1.0 0.13957061 2.603300e-08 pi+ 211 0.00000000 + pi- 9 -211 -1.0 0.13957061 2.603300e-08 pi- -211 0.00000000 eta 17 221 0.0 0.54786200 5.063171e-19 eta 221 0.00000000 rho(770)0 33 113 0.0 0.77526000 4.414569e-24 rho0 113 0.00000000 rho(770)+ 34 213 1.0 0.77526000 4.414569e-24 rho+ 213 0.00000000 rho(770)- 35 -213 -1.0 0.77526000 4.414569e-24 rho- -213 0.00000000 omega(782) 36 223 0.0 0.78265000 7.752794e-23 omega 223 0.00000000 - eta_prime 127 331 0.0 0.95778000 3.324303e-21 eta' 331 0.00000000 + eta_prime 127 331 0.0 0.95778000 3.358224e-21 eta' 331 0.00000000 sigma_0 850 9000221 0.0 0.47500000 1.196749e-24 sigma_0 0 0.00000000 - f_0(980) 596 9010221 0.0 0.99000000 9.403031e-24 f_0 10221 0.00000000 + f_0(980) 596 9010221 0.0 0.99000000 1.097020e-23 f_0 10221 0.00000000 a_0(980)0 132 9000111 0.0 0.98000000 8.776163e-24 a_00 10111 0.00000000 a_0(980)+ 133 9000211 1.0 0.98000000 8.776163e-24 a_0+ 10211 0.00000000 a_0(980)- 134 -9000211 -1.0 0.98000000 8.776163e-24 a_0- -10211 0.00000000 - phi(1020) 37 333 0.0 1.01946100 1.545099e-22 phi 333 0.00000000 + phi(1020) 37 333 0.0 1.01946100 1.549099e-22 phi 333 0.00000000 h_1(1170) 597 10223 0.0 1.17000000 1.828367e-24 h_1 10223 0.00000000 b_1(1235)0 588 10113 0.0 1.22950000 4.635297e-24 b_10 10113 0.00000000 b_1(1235)+ 592 10213 1.0 1.22950000 4.635297e-24 b_1+ 10213 0.00000000 @@ -43,72 +43,72 @@ PARTICLE a_1(1260)0 135 20113 0.0 1.23000000 1.567172e-24 a_10 20113 0.00000000 a_1(1260)+ 42 20213 1.0 1.23000000 1.567172e-24 a_1+ 20213 0.00000000 a_1(1260)- 43 -20213 -1.0 1.23000000 1.567172e-24 a_1- -20213 0.00000000 - f_2(1270) 367 225 0.0 1.27510000 3.555982e-24 f_2 225 0.00000000 - f_1(1285) 687 20223 0.0 1.28190000 2.719885e-23 f_1 20223 0.00000000 + f_2(1270) 367 225 0.0 1.27550000 3.555982e-24 f_2 225 0.00000000 + f_1(1285) 687 20223 0.0 1.28190000 2.899612e-23 f_1 20223 0.00000000 eta(1295) 811 100221 0.0 1.29400000 1.196749e-23 eta(2S) 0 0.00000000 pi(1300)0 805 100111 0.0 1.30000000 1.645530e-24 pi(2S)0 0 0.00000000 pi(1300)+ 807 100211 1.0 1.30000000 1.645530e-24 pi(2S)+ 0 0.00000000 pi(1300)- 808 -100211 -1.0 1.30000000 1.645530e-24 pi(2S)- 0 0.00000000 - a_2(1320)0 136 115 0.0 1.31830000 6.151516e-24 a_20 115 0.00000000 - a_2(1320)+ 137 215 1.0 1.31830000 6.151516e-24 a_2+ 215 0.00000000 - a_2(1320)- 138 -215 -1.0 1.31830000 6.151516e-24 a_2- -215 0.00000000 + a_2(1320)0 136 115 0.0 1.31690000 6.151516e-24 a_20 115 0.00000000 + a_2(1320)+ 137 215 1.0 1.31690000 6.151516e-24 a_2+ 215 0.00000000 + a_2(1320)- 138 -215 -1.0 1.31690000 6.151516e-24 a_2- -215 0.00000000 f_0(1370) 686 10221 0.0 1.35000000 1.880606e-24 f'_0 10331 0.00000000 - h_1(1380) 604 10333 0.0 1.40000000 0.000000e+00 h'_1 10333 0.00000000 + h_1(1380) 604 10333 0.0 1.41600000 7.313467e-24 h'_1 10333 0.00000000 pi_1(1400)0 1021 9000113 0.0 1.35400000 1.994582e-24 pi_1(1400)0 0 0.00000000 pi_1(1400)+ 1023 9000213 1.0 1.35400000 1.994582e-24 pi_1(1400)+ 0 0.00000000 pi_1(1400)- 1024 -9000213 -1.0 1.35400000 1.994582e-24 pi_1(1400)- 0 0.00000000 - eta(1405)0 1025 9020221 0.0 1.40880000 1.290612e-23 eta(1405)0 0 0.00000000 + eta(1405)0 1025 9020221 0.0 1.40880000 1.313796e-23 eta(1405)0 0 0.00000000 omega(1420) 812 100223 0.0 1.42500000 3.061452e-24 omega(2S) 0 0.00000000 f_1(1420) 692 20333 0.0 1.42640000 1.198929e-23 f'_1 20333 0.00000000 rho(1450)0 806 100113 0.0 1.46500000 1.645530e-24 rho(2S)0 0 0.00000000 rho(1450)+ 809 100213 1.0 1.46500000 1.645530e-24 rho(2S)+ 0 0.00000000 rho(1450)- 810 -100213 -1.0 1.46500000 1.645530e-24 rho(2S)- 0 0.00000000 - a_0(1450)0 587 10111 0.0 1.47400000 2.483820e-24 unknown 0 0.00000000 - a_0(1450)+ 590 10211 1.0 1.47400000 2.483820e-24 unknown 0 0.00000000 - a_0(1450)- 591 -10211 -1.0 1.47400000 2.483820e-24 unknown 0 0.00000000 - eta(1475) 826 100331 0.0 1.47600000 7.743673e-24 unknown 0 0.00000000 - f_0(1500) 855 9030221 0.0 1.50500000 6.038644e-24 f_0(1500) 0 0.00000000 + a_0(1450)0 587 10111 0.0 1.46700000 2.483820e-24 a_0(1450)0 0 0.00000000 + a_0(1450)+ 590 10211 1.0 1.46700000 2.483820e-24 a_0(1450)+ 0 0.00000000 + a_0(1450)- 591 -10211 -1.0 1.46700000 2.483820e-24 a_0(1450)- 0 0.00000000 + eta(1475) 826 100331 0.0 1.47500000 7.743673e-24 eta(1475) 0 0.00000000 + f_0(1500) 855 9030221 0.0 1.50600000 6.038644e-24 f_0(1500) 0 0.00000000 f'_2(1525) 380 335 0.0 1.52500000 9.016605e-24 f'_2 335 0.00000000 - pi_1(1600)0 1027 9010113 0.0 1.66200000 2.742551e-24 pi_1(1600)0 0 0.00000000 - pi_1(1600)+ 1029 9010213 1.0 1.66200000 2.742551e-24 pi_1(1600)+ 0 0.00000000 - pi_1(1600)- 1030 -9010213 -1.0 1.66200000 2.742551e-24 pi_1(1600)- 0 0.00000000 - eta_2(1645) 598 10225 0.0 1.61700000 3.636531e-24 unknown 0 0.00000000 + pi_1(1600)0 1027 9010113 0.0 1.66000000 2.742551e-24 pi_1(1600)0 0 0.00000000 + pi_1(1600)+ 1029 9010213 1.0 1.66000000 2.742551e-24 pi_1(1600)+ 0 0.00000000 + pi_1(1600)- 1030 -9010213 -1.0 1.66000000 2.742551e-24 pi_1(1600)- 0 0.00000000 + eta_2(1645) 598 10225 0.0 1.61700000 3.636531e-24 eta_2(1645) 0 0.00000000 omega(1650) 746 30223 0.0 1.67000000 2.089563e-24 omega(1650) 0 0.00000000 - pi_2(1670)0 589 10115 0.0 1.67220000 2.531585e-24 unknown 0 0.00000000 - pi_2(1670)+ 594 10215 1.0 1.67220000 2.531585e-24 unknown 0 0.00000000 - pi_2(1670)- 595 -10215 -1.0 1.67220000 2.531585e-24 unknown 0 0.00000000 - omega_3(1670) 368 227 0.0 1.66700000 3.917930e-24 unknown 0 0.00000000 + pi_2(1670)0 589 10115 0.0 1.67060000 2.551209e-24 pi_2(1670)0 0 0.00000000 + pi_2(1670)+ 594 10215 1.0 1.67060000 2.551209e-24 pi_2(1670)+ 0 0.00000000 + pi_2(1670)- 595 -10215 -1.0 1.67060000 2.551209e-24 pi_2(1670)- 0 0.00000000 + omega_3(1670) 368 227 0.0 1.66700000 3.917930e-24 omega_3(1670) 0 0.00000000 phi(1680) 827 100333 0.0 1.68000000 4.388081e-24 phi(1680) 0 0.00000000 - rho_3(1690)0 361 117 0.0 1.68880000 4.088274e-24 unknown 0 0.00000000 - rho_3(1690)+ 363 217 1.0 1.68880000 4.088274e-24 unknown 0 0.00000000 - rho_3(1690)- 364 -217 -1.0 1.68880000 4.088274e-24 unknown 0 0.00000000 + rho_3(1690)0 361 117 0.0 1.68880000 4.088274e-24 rho_3(1690)0 0 0.00000000 + rho_3(1690)+ 363 217 1.0 1.68880000 4.088274e-24 rho_3(1690)+ 0 0.00000000 + rho_3(1690)- 364 -217 -1.0 1.68880000 4.088274e-24 rho_3(1690)- 0 0.00000000 rho(1700)0 743 30113 0.0 1.72000000 2.632849e-24 rho(3S)0 0 0.00000000 rho(1700)+ 744 30213 1.0 1.72000000 2.632849e-24 rho(3S)+ 0 0.00000000 rho(1700)- 745 -30213 -1.0 1.72000000 2.632849e-24 rho(3S)- 0 0.00000000 - f_0(1710) 603 10331 0.0 1.72200000 4.875646e-24 unknown 0 0.00000000 - pi(1800)0 840 9010111 0.0 1.81200000 3.164482e-24 unknown 0 0.00000000 - pi(1800)+ 841 9010211 1.0 1.81200000 3.164482e-24 unknown 0 0.00000000 - pi(1800)- 842 -9010211 -1.0 1.81200000 3.164482e-24 unknown 0 0.00000000 - phi_3(1850) 381 337 0.0 1.85400000 7.565657e-24 unknown 0 0.00000000 - eta_2(1870) 605 10335 0.0 1.85400000 0.000000e+00 unknown 0 0.00000000 - f_2(1950) 813 9050225 0.0 1.94400000 1.394517e-24 unknown 0 0.00000000 - f_2(2010) 828 9060225 0.0 2.01100000 3.291061e-24 unknown 0 0.00000000 - a_4(2040)0 362 119 0.0 1.99600000 2.581224e-24 unknown 0 0.00000000 - a_4(2040)+ 365 219 1.0 1.99600000 2.581224e-24 unknown 0 0.00000000 - a_4(2040)- 366 -219 -1.0 1.99600000 2.581224e-24 unknown 0 0.00000000 - f_4(2050) 369 229 0.0 2.01800000 2.777267e-24 unknown 0 0.00000000 - f_2(2300) 857 9080225 0.0 2.29700000 4.417530e-24 unknown 0 0.00000000 - f_2(2340) 858 9090225 0.0 2.33900000 2.063361e-24 unknown 0 0.00000000 - K0 370 311 0.0 0.49761400 0.000000e+00 K0 311 0.00000000 - K~0 371 -311 0.0 0.49761400 0.000000e+00 anti-K0 -311 0.00000000 - KS0 16 310 0.0 0.49761400 8.956400e-11 K_S0 310 0.00000000 - KL0 10 130 0.0 0.49761400 5.116000e-08 K_L0 130 0.00000000 + f_0(1710) 603 10331 0.0 1.70400000 5.351317e-24 f_0(1710) 0 0.00000000 + pi(1800)0 840 9010111 0.0 1.81000000 3.164482e-24 pi(1800)0 0 0.00000000 + pi(1800)+ 841 9010211 1.0 1.81000000 3.164482e-24 pi(1800)+ 0 0.00000000 + pi(1800)- 842 -9010211 -1.0 1.81000000 3.164482e-24 pi(1800)- 0 0.00000000 + phi_3(1850) 381 337 0.0 1.85400000 7.565657e-24 phi_3(1850) 0 0.00000000 + eta_2(1870) 605 10335 0.0 1.85400000 0.000000e+00 eta_2(1870) 0 0.00000000 + f_2(1950) 813 9050225 0.0 1.93600000 1.418560e-24 f_2(1950) 0 0.00000000 + f_2(2010) 828 9060225 0.0 2.01000000 3.291061e-24 f_2(2010) 0 0.00000000 + a_4(2040)0 362 119 0.0 1.96700000 2.581224e-24 a_4(2040)0 0 0.00000000 + a_4(2040)+ 365 219 1.0 1.96700000 2.581224e-24 a_4(2040)+ 0 0.00000000 + a_4(2040)- 366 -219 -1.0 1.96700000 2.581224e-24 a_4(2040)- 0 0.00000000 + f_4(2050) 369 229 0.0 2.01800000 2.777267e-24 f_4(2050) 0 0.00000000 + f_2(2300) 857 9080225 0.0 2.29700000 4.417530e-24 f_2(2300) 0 0.00000000 + f_2(2340) 858 9090225 0.0 2.35000000 2.063361e-24 f_2(2340) 0 0.00000000 + K0 370 311 0.0 0.49761100 0.000000e+00 K0 311 0.00000000 + K~0 371 -311 0.0 0.49761100 0.000000e+00 anti-K0 -311 0.00000000 + KS0 16 310 0.0 0.49761100 8.956400e-11 K_S0 310 0.00000000 + KL0 10 130 0.0 0.49761100 5.116000e-08 K_L0 130 0.00000000 K+ 11 321 1.0 0.49367700 1.238000e-08 K+ 321 0.00000000 K- 12 -321 -1.0 0.49367700 1.238000e-08 K- -321 0.00000000 - K*(892)0 40 313 0.0 0.89581000 1.388633e-23 K*0 313 0.00000000 - K*(892)~0 41 -313 0.0 0.89581000 1.388633e-23 anti-K*0 -313 0.00000000 - K*(892)+ 38 323 1.0 0.89166000 1.295693e-23 K*+ 323 0.00000000 - K*(892)- 39 -323 -1.0 0.89166000 1.295693e-23 K*- -323 0.00000000 + K*(892)0 40 313 0.0 0.89555000 1.391569e-23 K*0 313 0.00000000 + K*(892)~0 41 -313 0.0 0.89555000 1.391569e-23 anti-K*0 -313 0.00000000 + K*(892)+ 38 323 1.0 0.89166000 1.308573e-23 K*+ 323 0.00000000 + K*(892)- 39 -323 -1.0 0.89166000 1.308573e-23 K*- -323 0.00000000 K_1(1270)0 141 10313 0.0 1.27200000 7.313469e-24 K_10 10313 0.00000000 K_1(1270)~0 142 -10313 0.0 1.27200000 7.313469e-24 anti-K_10 -10313 0.00000000 K_1(1270)+ 139 10323 1.0 1.27200000 7.313469e-24 K_1+ 10323 0.00000000 @@ -117,70 +117,70 @@ PARTICLE K_1(1400)~0 146 -20313 0.0 1.40300000 3.782829e-24 anti-K'_10 -20313 0.00000000 K_1(1400)+ 143 20323 1.0 1.40300000 3.782829e-24 K'_1+ 20323 0.00000000 K_1(1400)- 144 -20323 -1.0 1.40300000 3.782829e-24 K'_1- -20323 0.00000000 - K*(1410)0 816 100313 0.0 1.41400000 2.837122e-24 K'*0 0 0.00000000 - K*(1410)~0 817 -100313 0.0 1.41400000 2.837122e-24 anti-K'*0 0 0.00000000 - K*(1410)+ 822 100323 1.0 1.41400000 2.837122e-24 K'*+ 0 0.00000000 - K*(1410)- 823 -100323 -1.0 1.41400000 2.837122e-24 K'*- 0 0.00000000 - K*_0(1430)0 149 10311 0.0 1.42500000 2.437823e-24 K_0*0 10311 0.00000000 - K*_0(1430)~0 150 -10311 0.0 1.42500000 2.437823e-24 anti-K_0*0 -10311 0.00000000 - K*_0(1430)+ 147 10321 1.0 1.42500000 2.437823e-24 K_0*+ 10321 0.00000000 - K*_0(1430)- 148 -10321 -1.0 1.42500000 2.437823e-24 K_0*- -10321 0.00000000 + K*(1410)0 816 100313 0.0 1.42100000 2.837122e-24 K'*0 0 0.00000000 + K*(1410)~0 817 -100313 0.0 1.42100000 2.837122e-24 anti-K'*0 0 0.00000000 + K*(1410)+ 822 100323 1.0 1.42100000 2.837122e-24 K'*+ 0 0.00000000 + K*(1410)- 823 -100323 -1.0 1.42100000 2.837122e-24 K'*- 0 0.00000000 + K*_0(1430)0 149 10311 0.0 1.43000000 2.437823e-24 K_0*0 10311 0.00000000 + K*_0(1430)~0 150 -10311 0.0 1.43000000 2.437823e-24 anti-K_0*0 -10311 0.00000000 + K*_0(1430)+ 147 10321 1.0 1.43000000 2.437823e-24 K_0*+ 10321 0.00000000 + K*_0(1430)- 148 -10321 -1.0 1.43000000 2.437823e-24 K_0*- -10321 0.00000000 K*_2(1430)0 153 315 0.0 1.43240000 6.038644e-24 K_2*0 315 0.00000000 K*_2(1430)~0 154 -315 0.0 1.43240000 6.038644e-24 anti-K_2*0 -315 0.00000000 K*_2(1430)+ 151 325 1.0 1.42560000 6.682357e-24 K_2*+ 325 0.00000000 K*_2(1430)- 152 -325 -1.0 1.42560000 6.682357e-24 K_2*- -325 0.00000000 - K(1460)0 814 100311 0.0 1.43240000 0.000000e+00 unknown 0 0.00000000 - K(1460)~0 815 -100311 0.0 1.43240000 0.000000e+00 unknown 0 0.00000000 - K(1460)+ 820 100321 1.0 1.43240000 0.000000e+00 unknown 0 0.00000000 - K(1460)- 821 -100321 -1.0 1.43240000 0.000000e+00 unknown 0 0.00000000 - K*(1680)0 747 30313 0.0 1.71700000 2.056913e-24 K''*0 0 0.00000000 - K*(1680)~0 748 -30313 0.0 1.71700000 2.056913e-24 anti-K''*0 0 0.00000000 - K*(1680)+ 749 30323 1.0 1.71700000 2.056913e-24 K''*+ 0 0.00000000 - K*(1680)- 750 -30323 -1.0 1.71700000 2.056913e-24 K''*- 0 0.00000000 - K_2(1770)0 599 10315 0.0 1.77300000 3.538775e-24 unknown 0 0.00000000 - K_2(1770)~0 600 -10315 0.0 1.77300000 3.538775e-24 unknown 0 0.00000000 - K_2(1770)+ 601 10325 1.0 1.77300000 3.538775e-24 unknown 0 0.00000000 - K_2(1770)- 602 -10325 -1.0 1.77300000 3.538775e-24 unknown 0 0.00000000 + K(1460)0 814 100311 0.0 1.43240000 0.000000e+00 K(1460)0 0 0.00000000 + K(1460)~0 815 -100311 0.0 1.43240000 0.000000e+00 anti-K(1460)0 0 0.00000000 + K(1460)+ 820 100321 1.0 1.43240000 0.000000e+00 K(1460)+ 0 0.00000000 + K(1460)- 821 -100321 -1.0 1.43240000 0.000000e+00 K(1460)- 0 0.00000000 + K*(1680)0 747 30313 0.0 1.71800000 2.056913e-24 K''*0 0 0.00000000 + K*(1680)~0 748 -30313 0.0 1.71800000 2.056913e-24 anti-K''*0 0 0.00000000 + K*(1680)+ 749 30323 1.0 1.71800000 2.056913e-24 K''*+ 0 0.00000000 + K*(1680)- 750 -30323 -1.0 1.71800000 2.056913e-24 K''*- 0 0.00000000 + K_2(1770)0 599 10315 0.0 1.77300000 3.538775e-24 K_2(1770)0 0 0.00000000 + K_2(1770)~0 600 -10315 0.0 1.77300000 3.538775e-24 anti-K_2(1770)0 0 0.00000000 + K_2(1770)+ 601 10325 1.0 1.77300000 3.538775e-24 K_2(1770)+ 0 0.00000000 + K_2(1770)- 602 -10325 -1.0 1.77300000 3.538775e-24 K_2(1770)- 0 0.00000000 K*_3(1780)0 372 317 0.0 1.77600000 4.139699e-24 K_3*0 0 0.00000000 K*_3(1780)~0 373 -317 0.0 1.77600000 4.139699e-24 anti-K_3*0 0 0.00000000 K*_3(1780)+ 376 327 1.0 1.77600000 4.139699e-24 K_3*+ 0 0.00000000 K*_3(1780)- 377 -327 -1.0 1.77600000 4.139699e-24 K_3*- 0 0.00000000 - K_2(1820)0 688 20315 0.0 1.81600000 2.384827e-24 unknown 0 0.00000000 - K_2(1820)~0 689 -20315 0.0 1.81600000 2.384827e-24 unknown 0 0.00000000 - K_2(1820)+ 690 20325 1.0 1.81600000 2.384827e-24 unknown 0 0.00000000 - K_2(1820)- 691 -20325 -1.0 1.81600000 2.384827e-24 unknown 0 0.00000000 - K*_2(1980)0 818 100315 0.0 1.97300000 0.000000e+00 unknown 0 0.00000000 - K*_2(1980)~0 819 -100315 0.0 1.97300000 0.000000e+00 unknown 0 0.00000000 - K*_2(1980)+ 824 100325 1.0 1.97300000 0.000000e+00 unknown 0 0.00000000 - K*_2(1980)- 825 -100325 -1.0 1.97300000 0.000000e+00 unknown 0 0.00000000 + K_2(1820)0 688 20315 0.0 1.81900000 2.493227e-24 K_2(1820)0 0 0.00000000 + K_2(1820)~0 689 -20315 0.0 1.81900000 2.493227e-24 anti-K_2(1820)0 0 0.00000000 + K_2(1820)+ 690 20325 1.0 1.81900000 2.493227e-24 K_2(1820)+ 0 0.00000000 + K_2(1820)- 691 -20325 -1.0 1.81900000 2.493227e-24 K_2(1820)- 0 0.00000000 + K*_2(1980)0 818 100315 0.0 1.97300000 0.000000e+00 K*_2(1980)0 0 0.00000000 + K*_2(1980)~0 819 -100315 0.0 1.97300000 0.000000e+00 anti-K*_2(1980)0 0 0.00000000 + K*_2(1980)+ 824 100325 1.0 1.97300000 0.000000e+00 K*_2(1980)+ 0 0.00000000 + K*_2(1980)- 825 -100325 -1.0 1.97300000 0.000000e+00 K*_2(1980)- 0 0.00000000 K*_4(2045)0 374 319 0.0 2.04500000 3.324304e-24 K_4*0 0 0.00000000 K*_4(2045)~0 375 -319 0.0 2.04500000 3.324304e-24 anti-K_4*0 0 0.00000000 K*_4(2045)+ 378 329 1.0 2.04500000 3.324304e-24 K_4*+ 0 0.00000000 K*_4(2045)- 379 -329 -1.0 2.04500000 3.324304e-24 K_4*- 0 0.00000000 - D0 58 421 0.0 1.86484000 4.101000e-13 D0 421 0.00000000 - D~0 59 -421 0.0 1.86484000 4.101000e-13 anti-D0 -421 0.00000000 - D+ 56 411 1.0 1.86961000 1.040000e-12 D+ 411 0.00000000 - D- 57 -411 -1.0 1.86961000 1.040000e-12 D- -411 0.00000000 - D*(2007)0 67 423 0.0 2.00696000 1.000003e-19 D*0 423 0.00000000 - D*(2007)~0 68 -423 0.0 2.00696000 1.000003e-19 anti-D*0 -423 0.00000000 + D0 58 421 0.0 1.86483000 4.101000e-13 D0 421 0.00000000 + D~0 59 -421 0.0 1.86483000 4.101000e-13 anti-D0 -421 0.00000000 + D+ 56 411 1.0 1.86965000 1.040000e-12 D+ 411 0.00000000 + D- 57 -411 -1.0 1.86965000 1.040000e-12 D- -411 0.00000000 + D*(2007)0 67 423 0.0 2.00685000 1.000003e-19 D*0 423 0.00000000 + D*(2007)~0 68 -423 0.0 2.00685000 1.000003e-19 anti-D*0 -423 0.00000000 D*(2010)+ 65 413 1.0 2.01026000 7.892230e-21 D*+ 413 0.00000000 D*(2010)- 66 -413 -1.0 2.01026000 7.892230e-21 D*- -413 0.00000000 - D*_0+ 155 10411 1.0 2.31800000 2.465213e-24 D_0*+ 10411 0.00000000 - D*_0- 159 -10411 -1.0 2.31800000 2.465213e-24 D_0*- -10411 0.00000000 - D*_00 163 10421 0.0 2.31800000 2.465213e-24 D_0*0 10421 0.00000000 - D*_0~0 167 -10421 0.0 2.31800000 2.465213e-24 anti-D_0*0 -10421 0.00000000 + D*_0+ 155 10411 1.0 2.34900000 2.978335e-24 D_0*+ 10411 0.00000000 + D*_0- 159 -10411 -1.0 2.34900000 2.978335e-24 D_0*- -10411 0.00000000 + D*_00 163 10421 0.0 2.30000000 2.402234e-24 D_0*0 10421 0.00000000 + D*_0~0 167 -10421 0.0 2.30000000 2.402234e-24 anti-D_0*0 -10421 0.00000000 D_1(H)0 164 20423 0.0 2.44500000 2.630000e-24 D'_10 20423 0.00000000 D_1(H)~0 168 -20423 0.0 2.44500000 2.630000e-24 anti-D'_10 -20423 0.00000000 D_1(H)+ 156 20413 1.0 2.44500000 2.630000e-24 D'_1+ 20413 0.00000000 D_1(H)- 160 -20413 -1.0 2.44500000 2.630000e-24 D'_1- -20413 0.00000000 - D_1(2420)0 165 10423 0.0 2.42140000 2.428827e-23 D_10 10423 0.00000000 - D_1(2420)~0 169 -10423 0.0 2.42140000 2.428827e-23 anti-D_10 -10423 0.00000000 + D_1(2420)0 165 10423 0.0 2.42080000 2.428827e-23 D_10 10423 0.00000000 + D_1(2420)~0 169 -10423 0.0 2.42080000 2.428827e-23 anti-D_10 -10423 0.00000000 D_1(2420)+ 157 10413 1.0 2.42300000 3.290000e-23 D_1+ 10413 0.00000000 D_1(2420)- 161 -10413 -1.0 2.42300000 3.290000e-23 D_1- -10413 0.00000000 - D*_2(2460)0 170 425 0.0 2.46260000 1.343290e-23 D_2*0 425 0.00000000 - D*_2(2460)~0 166 -425 0.0 2.46260000 1.343290e-23 anti-D_2*0 -425 0.00000000 - D*_2(2460)+ 162 415 1.0 2.46430000 1.778952e-23 D_2*+ 415 0.00000000 - D*_2(2460)- 158 -415 -1.0 2.46430000 1.778952e-23 D_2*- -415 0.00000000 + D*_2(2460)0 170 425 0.0 2.46070000 1.385709e-23 D_2*0 425 0.00000000 + D*_2(2460)~0 166 -425 0.0 2.46070000 1.385709e-23 anti-D_2*0 -425 0.00000000 + D*_2(2460)+ 162 415 1.0 2.46540000 1.778952e-23 D_2*+ 415 0.00000000 + D*_2(2460)- 158 -415 -1.0 2.46540000 1.778952e-23 D_2*- -415 0.00000000 D(2S)0 761 100421 0.0 2.58000000 0.000000e+00 D(2S)0 0 0.00000000 D(2S)~0 762 -100421 0.0 2.58000000 0.000000e+00 anti-D(2S)0 0 0.00000000 D(2S)+ 757 100411 1.0 2.58000000 0.000000e+00 D(2S)+ 0 0.00000000 @@ -189,28 +189,28 @@ PARTICLE D*(2640)~0 764 -100423 0.0 2.64000000 0.000000e+00 anti-D*(2S)0 0 0.00000000 D*(2640)+ 759 100413 1.0 2.64000000 0.000000e+00 D*(2S)+ 0 0.00000000 D*(2640)- 760 -100413 -1.0 2.64000000 0.000000e+00 D*(2S)- 0 0.00000000 - D_s+ 60 431 1.0 1.96830000 5.000000e-13 D_s+ 431 0.00000000 - D_s- 61 -431 -1.0 1.96830000 5.000000e-13 D_s- -431 0.00000000 - D*_s+ 69 433 1.0 2.11210000 1.000003e-19 D_s*+ 433 0.00000000 - D*_s- 70 -433 -1.0 2.11210000 1.000003e-19 D_s*- -433 0.00000000 - D*_s0+ 171 10431 1.0 2.31770000 6.582100e-22 D_s0*+ 10431 0.00000000 - D*_s0- 175 -10431 -1.0 2.31770000 6.582100e-22 D_s0*- -10431 0.00000000 + D_s+ 60 431 1.0 1.96834000 5.043770e-13 D_s+ 431 0.00000000 + D_s- 61 -431 -1.0 1.96834000 5.043770e-13 D_s- -431 0.00000000 + D*_s+ 69 433 1.0 2.11220000 1.000003e-19 D_s*+ 433 0.00000000 + D*_s- 70 -433 -1.0 2.11220000 1.000003e-19 D_s*- -433 0.00000000 + D*_s0+ 171 10431 1.0 2.31780000 6.582100e-22 D_s0*+ 10431 0.00000000 + D*_s0- 175 -10431 -1.0 2.31780000 6.582100e-22 D_s0*- -10431 0.00000000 D_s1(2460)+ 172 20433 1.0 2.45950000 6.582100e-22 D_s1+ 20433 0.00000000 D_s1(2460)- 176 -20433 -1.0 2.45950000 6.582100e-22 D_s1- -20433 0.00000000 - D_s1(2536)+ 173 10433 1.0 2.53510000 7.154480e-22 D'_s1+ 10433 0.00000000 - D_s1(2536)- 177 -10433 -1.0 2.53510000 7.154480e-22 D'_s1- -10433 0.00000000 - D*_s2+ 174 435 1.0 2.57190000 3.871836e-23 D_s2*+ 435 0.00000000 - D*_s2- 178 -435 -1.0 2.57190000 3.871836e-23 D_s2*- -435 0.00000000 - B0 73 511 0.0 5.27958000 1.519000e-12 B0 511 0.00000000 - B~0 74 -511 0.0 5.27958000 1.519000e-12 anti-B0 -511 0.00000000 + D_s1(2536)+ 173 10433 1.0 2.53511000 7.154480e-22 D'_s1+ 10433 0.00000000 + D_s1(2536)- 177 -10433 -1.0 2.53511000 7.154480e-22 D'_s1- -10433 0.00000000 + D*_s2+ 174 435 1.0 2.56910000 3.894746e-23 D_s2*+ 435 0.00000000 + D*_s2- 178 -435 -1.0 2.56910000 3.894746e-23 D_s2*- -435 0.00000000 + B0 73 511 0.0 5.27964000 1.520120e-12 B0 511 0.00000000 + B~0 74 -511 0.0 5.27964000 1.520120e-12 anti-B0 -511 0.00000000 B0H 99998 510 0.0 5.27958000 1.519000e-12 B0H 0 0.00000000 B0L 99999 150 0.0 5.27958000 1.519000e-12 B0L 0 0.00000000 - B+ 71 521 1.0 5.27926000 1.638000e-12 B+ 521 0.00000000 - B- 72 -521 -1.0 5.27926000 1.638000e-12 B- -521 0.00000000 - B*0 189 513 0.0 5.32520000 1.000019e-19 B*0 513 0.00000000 - B*~0 190 -513 0.0 5.32520000 1.000019e-19 anti-B*0 -513 0.00000000 - B*- 187 -523 -1.0 5.32520000 1.000019e-19 B*- -523 0.00000000 - B*+ 188 523 1.0 5.32520000 1.000019e-19 B*+ 523 0.00000000 + B+ 71 521 1.0 5.27933000 1.638158e-12 B+ 521 0.00000000 + B- 72 -521 -1.0 5.27933000 1.638158e-12 B- -521 0.00000000 + B*0 189 513 0.0 5.32470000 1.000019e-19 B*0 513 0.00000000 + B*~0 190 -513 0.0 5.32470000 1.000019e-19 anti-B*0 -513 0.00000000 + B*- 187 -523 -1.0 5.32470000 1.000019e-19 B*- -523 0.00000000 + B*+ 188 523 1.0 5.32470000 1.000019e-19 B*+ 523 0.00000000 B*_00 201 10511 0.0 5.73800000 4.390000e-24 B_0*0 10511 0.00000000 B*_0~0 205 -10511 0.0 5.73800000 4.390000e-24 anti-B_0*0 -10511 0.00000000 B*_0+ 193 10521 1.0 5.73800000 4.390000e-24 B_0*+ 10521 0.00000000 @@ -219,16 +219,16 @@ PARTICLE B_1(H)~0 206 -20513 0.0 5.75700000 2.630000e-24 anti-B'_10 -20513 0.00000000 B_1(H)+ 194 20523 1.0 5.75700000 2.630000e-24 B'_1+ 20523 0.00000000 B_1(H)- 198 -20523 -1.0 5.75700000 2.630000e-24 B'_1- -20523 0.00000000 - B_1(L)0 203 10513 0.0 5.72340000 3.134000e-23 B_10 10513 0.00000000 - B_1(L)~0 207 -10513 0.0 5.72340000 3.134000e-23 anti-B_10 -10513 0.00000000 - B_1(L)+ 195 10523 1.0 5.72340000 3.134000e-23 B_1+ 10523 0.00000000 - B_1(L)- 199 -10523 -1.0 5.72340000 3.134000e-23 B_1- -10523 0.00000000 - B*_20 204 515 0.0 5.74300000 2.861792e-23 B_2*0 515 0.00000000 - B*_2~0 208 -515 0.0 5.74300000 2.861792e-23 anti-B_2*0 -515 0.00000000 - B*_2+ 196 525 1.0 5.74300000 2.861792e-23 B_2*+ 525 0.00000000 - B*_2- 200 -525 -1.0 5.74300000 2.861792e-23 B_2*- -525 0.00000000 - B_s0 75 531 0.0 5.36677000 1.512000e-12 B_s0 531 0.00000000 - B_s~0 76 -531 0.0 5.36677000 1.512000e-12 anti-B_s0 -531 0.00000000 + B_1(L)0 203 10513 0.0 5.72610000 3.134000e-23 B_10 10513 0.00000000 + B_1(L)~0 207 -10513 0.0 5.72610000 3.134000e-23 anti-B_10 -10513 0.00000000 + B_1(L)+ 195 10523 1.0 5.72590000 3.134000e-23 B_1+ 10523 0.00000000 + B_1(L)- 199 -10523 -1.0 5.72590000 3.134000e-23 B_1- -10523 0.00000000 + B*_20 204 515 0.0 5.73950000 2.861792e-23 B_2*0 515 0.00000000 + B*_2~0 208 -515 0.0 5.73950000 2.861792e-23 anti-B_2*0 -515 0.00000000 + B*_2+ 196 525 1.0 5.73720000 3.291060e-23 B_2*+ 525 0.00000000 + B*_2- 200 -525 -1.0 5.73720000 3.291060e-23 B_2*- -525 0.00000000 + B_s0 75 531 0.0 5.36688000 1.512000e-12 B_s0 531 0.00000000 + B_s~0 76 -531 0.0 5.36688000 1.512000e-12 anti-B_s0 -531 0.00000000 B_s0H 99996 530 0.0 5.36677000 1.661000e-12 B_s0H 0 0.00000000 B_s0L 99997 350 0.0 5.36677000 1.405000e-12 B_s0L 0 0.00000000 B*_s0 191 533 0.0 5.41540000 1.000000e-19 B_s*0 533 0.00000000 @@ -238,39 +238,43 @@ PARTICLE B_s1(H)0 210 20533 0.0 5.85900000 2.630000e-24 B'_s10 20533 0.00000000 B_s1(H)~0 214 -20533 0.0 5.85900000 2.630000e-24 anti-B'_s10 -20533 0.00000000 B_s1(L)0 211 10533 0.0 5.82870000 1.316424e-21 B_s10 10533 0.00000000 - B_s1(L)~0 215 -10533 0.0 5.82870000 1.316424e-22 anti-B_s10 -10533 0.00000000 - B*_s20 212 535 0.0 5.83996000 4.113825e-22 B_s2*0 535 0.00000000 - B*_s2~0 216 -535 0.0 5.83996000 4.113825e-22 anti-B_s2*0 -535 0.00000000 - B_c+ 77 541 1.0 6.27370000 5.070000e-13 B_c+ 541 0.00000000 - B_c- 78 -541 -1.0 6.27370000 5.070000e-13 B_c- -541 0.00000000 - B_c*+ 382 543 1.0 6.60200000 0.000000e+00 B_c*+ 543 0.00000000 - B_c*- 383 -543 -1.0 6.60200000 0.000000e+00 B_c*- -543 0.00000000 - B_c0*+ 607 10541 1.0 7.25000000 0.000000e+00 B_c0*+ 10541 0.00000000 - B_c0*- 608 -10541 -1.0 7.25000000 0.000000e+00 B_c0*- -10541 0.00000000 - B_c1(L)+ 609 10543 1.0 7.30000000 0.000000e+00 B_c1+ 10543 0.00000000 - B_c1(L)- 610 -10543 -1.0 7.30000000 0.000000e+00 B_c1- -10543 0.00000000 - B_c1(H)+ 693 20543 1.0 7.40000000 0.000000e+00 B'_c1+ 20543 0.00000000 - B_c1(H)- 694 -20543 -1.0 7.40000000 0.000000e+00 B'_c1- -20543 0.00000000 - B_c2*+ 384 545 1.0 7.35000000 0.000000e+00 B_c2*+ 545 0.00000000 - B_c2*- 385 -545 -1.0 7.35000000 0.000000e+00 B_c2*- -545 0.00000000 - eta_c(1S) 128 441 0.0 2.98360000 2.216203e-23 eta_c 441 0.00000000 - J/psi(1S) 64 443 0.0 3.09691600 7.085169e-21 J/psi 443 0.00000000 - chi_c0(1P) 129 10441 0.0 3.41475000 6.328963e-23 chi_c0 10441 0.00000000 - chi_c1(1P) 130 20443 0.0 3.51066000 7.835857e-22 chi_c1 20443 0.00000000 + B_s1(L)~0 215 -10533 0.0 5.82870000 1.316424e-21 anti-B_s10 -10533 0.00000000 + B*_s20 212 535 0.0 5.83985000 4.477633e-22 B_s2*0 535 0.00000000 + B*_s2~0 216 -535 0.0 5.83985000 4.477633e-22 anti-B_s2*0 -535 0.00000000 + B_c+ 77 541 1.0 6.27447000 5.070971e-13 B_c+ 541 0.00000000 + B_c- 78 -541 -1.0 6.27447000 5.070971e-13 B_c- -541 0.00000000 + B_c*+ 382 543 1.0 6.33330000 0.000000e+00 B_c*+ 543 0.00000000 + B_c*- 383 -543 -1.0 6.33330000 0.000000e+00 B_c*- -543 0.00000000 + B_c0*+ 607 10541 1.0 6.70600000 0.000000e+00 B_c0*+ 10541 0.00000000 + B_c0*- 608 -10541 -1.0 6.70600000 0.000000e+00 B_c0*- -10541 0.00000000 + B_c1(L)+ 609 10543 1.0 6.74100000 0.000000e+00 B_c1+ 10543 0.00000000 + B_c1(L)- 610 -10543 -1.0 6.74100000 0.000000e+00 B_c1- -10543 0.00000000 + B_c1(H)+ 693 20543 1.0 6.75000000 0.000000e+00 B'_c1+ 20543 0.00000000 + B_c1(H)- 694 -20543 -1.0 6.75000000 0.000000e+00 B'_c1- -20543 0.00000000 + B_c2*+ 384 545 1.0 6.76800000 0.000000e+00 B_c2*+ 545 0.00000000 + B_c2*- 385 -545 -1.0 6.76800000 0.000000e+00 B_c2*- -545 0.00000000 + B_c(2S)+ 100541 100541 1.0 6.87210000 0.000000e+00 B_c(2S)+ 100541 0.00000000 + B_c(2S)- 100542 -100541 -1.0 6.87210000 0.000000e+00 B_c(2S)- -100541 0.00000000 + B_c*(2S)+ 100543 100543 1.0 6.90000000 0.000000e+00 B_c*(2S)+ 100543 0.00000000 + B_c*(2S)- 100544 -100543 -1.0 6.90000000 0.000000e+00 B_c*(2S)- -100543 0.00000000 + eta_c(1S) 128 441 0.0 2.98390000 2.216203e-23 eta_c 441 0.00000000 + J/psi(1S) 64 443 0.0 3.09690000 7.085169e-21 J/psi 443 0.00000000 + chi_c0(1P) 129 10441 0.0 3.41471000 6.328963e-23 chi_c0 10441 0.00000000 + chi_c1(1P) 130 20443 0.0 3.51067000 7.835857e-22 chi_c1 20443 0.00000000 h_c(1P) 606 10443 0.0 3.52538000 9.403029e-22 h_c 10443 0.00000000 - chi_c2(1P) 131 445 0.0 3.55620000 3.410425e-22 chi_c2 445 0.00000000 - eta_c(2S) 829 100441 0.0 3.63940000 6.582122e-23 eta_c(2S) 100441 0.00000000 - psi(2S) 126 100443 0.0 3.68610900 2.201378e-21 psi(2S) 100443 0.00000000 - psi(3770) 765 30443 0.0 3.77315000 2.419898e-23 psi(3770) 30443 0.00000000 + chi_c2(1P) 131 445 0.0 3.55617000 3.410425e-22 chi_c2 445 0.00000000 + eta_c(2S) 829 100441 0.0 3.63750000 6.582122e-23 eta_c(2S) 100441 0.00000000 + psi(2S) 126 100443 0.0 3.68609700 2.238816e-21 psi(2S) 100443 0.00000000 + psi(3770) 765 30443 0.0 3.77313000 2.419898e-23 psi(3770) 30443 0.00000000 chi_c2(2P) 1031 100445 0.0 3.92720000 2.742551e-23 chi_c2(2P) 0 0.00000000 psi(4040) 851 9000443 0.0 4.03900000 8.227652e-24 psi(4040) 0 0.00000000 psi(4160) 853 9010443 0.0 4.19100000 9.403029e-24 psi(4160) 0 0.00000000 psi(4415) 856 9020443 0.0 4.42100000 1.061633e-23 psi(4415) 0 0.00000000 X_1(3872) 1016 9920443 0.0 3.87169000 2.076340e-21 X_1(3872) 9920443 0.00000000 X_2(3872) 1017 9910445 0.0 3.87169000 2.076340e-21 X_2(3872) 9910445 0.00000000 - Z(4430)+ 1018 9042413 1.0 4.43300000 2.076340e-21 Z(4430)+ 9042413 0.00000000 - Z(4430)- 1019 -9042413 -1.0 4.43300000 2.076340e-21 Z(4430)- -9042413 0.00000000 - eta_b(1S) 386 551 0.0 9.40300000 0.000000e+00 eta_b 551 0.00000000 + Z(4430)+ 1018 9042413 1.0 4.47800000 3.630504e-24 Z(4430)+ 9042413 0.00000000 + Z(4430)- 1019 -9042413 -1.0 4.47800000 3.630504e-24 Z(4430)- -9042413 0.00000000 + eta_b(1S) 386 551 0.0 9.39870000 6.582120e-23 eta_b 551 0.00000000 eta_b(2S) 830 100551 0.0 9.99700000 0.000000e+00 eta_b(2S) 0 0.00000000 eta_b(3S) 843 200551 0.0 10.33500000 0.000000e+00 eta_b(3S) 0 0.00000000 eta_b2(1D) 613 10555 0.0 10.15700000 0.000000e+00 eta_b2(1D) 10555 0.00000000 @@ -285,13 +289,13 @@ PARTICLE Upsilon_3(1D) 389 557 0.0 10.15990000 0.000000e+00 Upsilon_3(1D) 557 0.00000000 Upsilon_3(2D) 833 100557 0.0 10.44430000 0.000000e+00 Upsilon_3(2D) 100557 0.00000000 Upsilon(4S) 849 300553 0.0 10.57940000 3.210791e-23 Upsilon(4S) 300553 0.00000000 - Upsilon(10860) 852 9000553 0.0 10.87600000 1.196749e-23 Upsilon(5S) 0 0.00000000 - Upsilon(11020) 854 9010553 0.0 11.01900000 8.331800e-24 unknown 0 0.00000000 - chi_b0(1P) 611 10551 0.0 9.85944000 0.000000e+00 chi_b0 10551 0.00000000 + Upsilon(10860) 852 9000553 0.0 10.88990000 1.290612e-23 Upsilon(5S) 0 0.00000000 + Upsilon(11020) 854 9010553 0.0 10.99290000 1.343290e-23 Upsilon(11020) 0 0.00000000 + chi_b0(1P) 611 10551 0.0 9.85940000 0.000000e+00 chi_b0 10551 0.00000000 chi_b0(2P) 834 110551 0.0 10.23250000 0.000000e+00 chi_b0(2P) 110551 0.00000000 chi_b0(3P) 846 210551 0.0 10.50040000 0.000000e+00 chi_b0(3P) 210551 0.00000000 - chi_b1(3P) 848 220553 0.0 10.51570000 0.000000e+00 chi_b1(3P) 220553 0.00000000 - chi_b1(1P) 695 20553 0.0 9.89278000 0.000000e+00 chi_b1 20553 0.00000000 + chi_b1(3P) 848 220553 0.0 10.51210000 0.000000e+00 chi_b1(3P) 220553 0.00000000 + chi_b1(1P) 695 20553 0.0 9.89287800 0.000000e+00 chi_b1 20553 0.00000000 chi_b1(2P) 837 120553 0.0 10.25546000 0.000000e+00 chi_b1(2P) 120553 0.00000000 chi_b2(1P) 388 555 0.0 9.91221000 0.000000e+00 chi_b2 555 0.00000000 chi_b2(2P) 832 100555 0.0 10.26865000 0.000000e+00 chi_b2(2P) 100555 0.00000000 @@ -299,38 +303,38 @@ PARTICLE h_b(1P) 612 10553 0.0 9.89930000 0.000000e+00 h_b 10553 0.00000000 h_b(2P) 835 110553 0.0 10.25500000 0.000000e+00 h_b(2P) 110553 0.00000000 h_b(3P) 847 210553 0.0 10.51600000 0.000000e+00 h_b(3P) 210553 0.00000000 - n0 13 2112 0.0 0.93956538 8.803000e+02 n0 2112 0.00000000 - n~0 25 -2112 0.0 0.93956538 8.803000e+02 anti-n0 -2112 0.00000000 - p+ 14 2212 1.0 0.93827205 1.000000e+16 p+ 2212 0.00000000 - p~- 15 -2212 -1.0 0.93827205 1.000000e+16 anti-p- -2212 0.00000000 - N(1440)0 624 12112 0.0 1.43000000 2.194041e-24 N(1440)0 0 0.00000000 - N(1440)~0 625 -12112 0.0 1.43000000 2.194041e-24 anti-N(1440)0 0 0.00000000 - N(1440)+ 636 12212 1.0 1.43000000 2.194041e-24 N(1440)+ 0 0.00000000 - N(1440)~- 637 -12212 -1.0 1.43000000 2.194041e-24 anti-N(1440)- 0 0.00000000 - N(1520)0 404 1214 0.0 1.51500000 5.723584e-24 N(1520)0 0 0.00000000 - N(1520)~0 405 -1214 0.0 1.51500000 5.723584e-24 anti-N(1520)0 0 0.00000000 - N(1520)+ 420 2124 1.0 1.51500000 5.723584e-24 N(1520)+ 0 0.00000000 - N(1520)~- 421 -2124 -1.0 1.51500000 5.723584e-24 anti-N(1520)- 0 0.00000000 - N(1535)0 705 22112 0.0 1.53500000 4.388081e-24 N(1535)0 0 0.00000000 - N(1535)~0 706 -22112 0.0 1.53500000 4.388081e-24 anti-N(1535)0 0 0.00000000 - N(1535)+ 713 22212 1.0 1.53500000 4.388081e-24 N(1535)+ 0 0.00000000 - N(1535)~- 714 -22212 -1.0 1.53500000 4.388081e-24 anti-N(1535)- 0 0.00000000 - N(1650)0 771 32112 0.0 1.65500000 4.701514e-24 N(1650)0 0 0.00000000 - N(1650)~0 772 -32112 0.0 1.65500000 4.701514e-24 anti-N(1650)0 0 0.00000000 - N(1650)+ 777 32212 1.0 1.65500000 4.701514e-24 N(1650)+ 0 0.00000000 - N(1650)~- 778 -32212 -1.0 1.65500000 4.701514e-24 anti-N(1650)- 0 0.00000000 - N(1675)0 414 2116 0.0 1.67500000 4.388081e-24 N(1675)0 0 0.00000000 - N(1675)~0 415 -2116 0.0 1.67500000 4.388081e-24 anti-N(1675)0 0 0.00000000 - N(1675)+ 428 2216 1.0 1.67500000 4.388081e-24 N(1675)+ 0 0.00000000 - N(1675)~- 429 -2216 -1.0 1.67500000 4.388081e-24 anti-N(1675)- 0 0.00000000 - N(1680)0 628 12116 0.0 1.68500000 5.063171e-24 N(1680)0 0 0.00000000 - N(1680)~0 629 -12116 0.0 1.68500000 5.063171e-24 anti-N(1680)0 0 0.00000000 - N(1680)+ 640 12216 1.0 1.68500000 5.063171e-24 N(1680)+ 0 0.00000000 - N(1680)~- 641 -12216 -1.0 1.68500000 5.063171e-24 anti-N(1680)- 0 0.00000000 - N(1700)+ 711 22124 1.0 1.70000000 4.388081e-24 N(1700)+ 0 0.00000000 - N(1700)~- 712 -22124 -1.0 1.70000000 4.388081e-24 anti-N(1700)- 0 0.00000000 - N(1700)0 703 21214 0.0 1.70000000 4.388081e-24 N(1700)0 0 0.00000000 - N(1700)~0 704 -21214 0.0 1.70000000 4.388081e-24 anti-N(1700)0 0 0.00000000 + n0 13 2112 0.0 0.93956541 8.803000e+02 n0 2112 0.00000000 + n~0 25 -2112 0.0 0.93956541 8.803000e+02 anti-n0 -2112 0.00000000 + p+ 14 2212 1.0 0.93827208 1.000000e+16 p+ 2212 0.00000000 + p~- 15 -2212 -1.0 0.93827208 1.000000e+16 anti-p- -2212 0.00000000 + N(1440)0 624 12112 0.0 1.44000000 2.194041e-24 N(1440)0 0 0.00000000 + N(1440)~0 625 -12112 0.0 1.44000000 2.194041e-24 anti-N(1440)0 0 0.00000000 + N(1440)+ 636 12212 1.0 1.44000000 2.194041e-24 N(1440)+ 0 0.00000000 + N(1440)~- 637 -12212 -1.0 1.44000000 2.194041e-24 anti-N(1440)- 0 0.00000000 + N(1520)0 404 1214 0.0 1.51500000 5.983745e-24 N(1520)0 0 0.00000000 + N(1520)~0 405 -1214 0.0 1.51500000 5.983745e-24 anti-N(1520)0 0 0.00000000 + N(1520)+ 420 2124 1.0 1.51500000 5.983745e-24 N(1520)+ 0 0.00000000 + N(1520)~- 421 -2124 -1.0 1.51500000 5.983745e-24 anti-N(1520)- 0 0.00000000 + N(1535)0 705 22112 0.0 1.53000000 4.388081e-24 N(1535)0 0 0.00000000 + N(1535)~0 706 -22112 0.0 1.53000000 4.388081e-24 anti-N(1535)0 0 0.00000000 + N(1535)+ 713 22212 1.0 1.53000000 4.388081e-24 N(1535)+ 0 0.00000000 + N(1535)~- 714 -22212 -1.0 1.53000000 4.388081e-24 anti-N(1535)- 0 0.00000000 + N(1650)0 771 32112 0.0 1.65000000 5.265696e-24 N(1650)0 0 0.00000000 + N(1650)~0 772 -32112 0.0 1.65000000 5.265696e-24 anti-N(1650)0 0 0.00000000 + N(1650)+ 777 32212 1.0 1.65000000 5.265696e-24 N(1650)+ 0 0.00000000 + N(1650)~- 778 -32212 -1.0 1.65000000 5.265696e-24 anti-N(1650)- 0 0.00000000 + N(1675)0 414 2116 0.0 1.67500000 4.539393e-24 N(1675)0 0 0.00000000 + N(1675)~0 415 -2116 0.0 1.67500000 4.539393e-24 anti-N(1675)0 0 0.00000000 + N(1675)+ 428 2216 1.0 1.67500000 4.539393e-24 N(1675)+ 0 0.00000000 + N(1675)~- 429 -2216 -1.0 1.67500000 4.539393e-24 anti-N(1675)- 0 0.00000000 + N(1680)0 628 12116 0.0 1.68500000 5.485100e-24 N(1680)0 0 0.00000000 + N(1680)~0 629 -12116 0.0 1.68500000 5.485100e-24 anti-N(1680)0 0 0.00000000 + N(1680)+ 640 12216 1.0 1.68500000 5.485100e-24 N(1680)+ 0 0.00000000 + N(1680)~- 641 -12216 -1.0 1.68500000 5.485100e-24 anti-N(1680)- 0 0.00000000 + N(1700)+ 711 22124 1.0 1.72000000 4.388081e-24 N(1700)+ 0 0.00000000 + N(1700)~- 712 -22124 -1.0 1.72000000 4.388081e-24 anti-N(1700)- 0 0.00000000 + N(1700)0 703 21214 0.0 1.72000000 4.388081e-24 N(1700)0 0 0.00000000 + N(1700)~0 704 -21214 0.0 1.72000000 4.388081e-24 anti-N(1700)0 0 0.00000000 N(1710)0 791 42112 0.0 1.71000000 6.582122e-24 N(1710)0 0 0.00000000 N(1710)~0 792 -42112 0.0 1.71000000 6.582122e-24 anti-N(1710)0 0 0.00000000 N(1710)+ 795 42212 1.0 1.71000000 6.582122e-24 N(1710)+ 0 0.00000000 @@ -339,10 +343,10 @@ PARTICLE N(1720)~0 770 -31214 0.0 1.72000000 2.632849e-24 anti-N(1720)0 0 0.00000000 N(1720)+ 775 32124 1.0 1.72000000 2.632849e-24 N(1720)+ 0 0.00000000 N(1720)~- 776 -32124 -1.0 1.72000000 2.632849e-24 anti-N(1720)- 0 0.00000000 - N(1900)0 789 41214 0.0 1.85000000 0.000000e+00 N(1900)0 0 0.00000000 - N(1900)~0 790 -41214 0.0 1.85000000 0.000000e+00 anti-N(1900)0 0 0.00000000 - N(1900)+ 793 42124 1.0 1.85000000 0.000000e+00 N(1900)+ 0 0.00000000 - N(1900)~- 794 -42124 -1.0 1.85000000 0.000000e+00 anti-N(1900)- 0 0.00000000 + N(1900)0 789 41214 0.0 1.89500000 5.476011e-24 N(1900)0 0 0.00000000 + N(1900)~0 790 -41214 0.0 1.89500000 5.476011e-24 anti-N(1900)0 0 0.00000000 + N(1900)+ 793 42124 1.0 1.89500000 5.476011e-24 N(1900)+ 0 0.00000000 + N(1900)~- 794 -42124 -1.0 1.89500000 5.476011e-24 anti-N(1900)- 0 0.00000000 N(1990)0 630 12118 0.0 1.95000000 0.000000e+00 N(1990)0 0 0.00000000 N(1990)~0 631 -12118 0.0 1.95000000 0.000000e+00 anti-N(1990)0 0 0.00000000 N(1990)+ 642 12218 1.0 1.95000000 0.000000e+00 N(1990)+ 0 0.00000000 @@ -351,10 +355,10 @@ PARTICLE N(2090)~0 800 -52114 0.0 2.00000000 0.000000e+00 anti-N(2090)0 0 0.00000000 N(2090)+ 801 52214 1.0 2.00000000 0.000000e+00 N(2090)+ 0 0.00000000 N(2090)~- 802 -52214 -1.0 2.00000000 0.000000e+00 anti-N(2090)- 0 0.00000000 - N(2190)0 408 1218 0.0 2.19000000 1.316424e-24 N(2190)0 0 0.00000000 - N(2190)~0 409 -1218 0.0 2.19000000 1.316424e-24 anti-N(2190)0 0 0.00000000 - N(2190)+ 424 2128 1.0 2.19000000 1.316424e-24 N(2190)+ 0 0.00000000 - N(2190)~- 425 -2128 -1.0 2.19000000 1.316424e-24 anti-N(2190)- 0 0.00000000 + N(2190)0 408 1218 0.0 2.18000000 1.645530e-24 N(2190)0 0 0.00000000 + N(2190)~0 409 -1218 0.0 2.18000000 1.645530e-24 anti-N(2190)0 0 0.00000000 + N(2190)+ 424 2128 1.0 2.18000000 1.645530e-24 N(2190)+ 0 0.00000000 + N(2190)~- 425 -2128 -1.0 2.18000000 1.645530e-24 anti-N(2190)- 0 0.00000000 Delta- 182 1114 -1.0 1.23200000 5.625745e-24 Delta- 1114 0.00000000 Delta~+ 186 -1114 1.0 1.23200000 5.625745e-24 anti-Delta+ -1114 0.00000000 Delta0 181 2114 0.0 1.23200000 5.625745e-24 Delta0 2114 0.00000000 @@ -363,38 +367,38 @@ PARTICLE Delta~- 184 -2214 -1.0 1.23200000 5.625745e-24 anti-Delta- -2214 0.00000000 Delta++ 179 2224 2.0 1.23200000 5.625745e-24 Delta++ 2224 0.00000000 Delta~-- 183 -2224 -2.0 1.23200000 5.625745e-24 anti-Delta-- -2224 0.00000000 - Delta(1600)- 767 31114 -1.0 1.60000000 2.056913e-24 Delta(1600)- 0 0.00000000 - Delta(1600)~+ 768 -31114 1.0 1.60000000 2.056913e-24 anti-Delta(1600)+ 0 0.00000000 - Delta(1600)0 773 32114 0.0 1.60000000 2.056913e-24 Delta(1600)0 0 0.00000000 - Delta(1600)~0 774 -32114 0.0 1.60000000 2.056913e-24 anti-Delta(1600)0 0 0.00000000 - Delta(1600)+ 779 32214 1.0 1.60000000 2.056913e-24 Delta(1600)+ 0 0.00000000 - Delta(1600)~- 780 -32214 -1.0 1.60000000 2.056913e-24 anti-Delta(1600)- 0 0.00000000 - Delta(1600)++ 781 32224 2.0 1.60000000 2.056913e-24 Delta(1600)++ 0 0.00000000 - Delta(1600)~-- 782 -32224 -2.0 1.60000000 2.056913e-24 anti-Delta(1600)-- 0 0.00000000 - Delta(1620)- 396 1112 -1.0 1.63000000 4.701516e-24 Delta(1620)- 0 0.00000000 - Delta(1620)~+ 397 -1112 1.0 1.63000000 4.701516e-24 anti-Delta(1620)+ 0 0.00000000 - Delta(1620)0 402 1212 0.0 1.63000000 4.701516e-24 Delta(1620)0 0 0.00000000 - Delta(1620)~0 403 -1212 0.0 1.63000000 4.701516e-24 anti-Delta(1620)0 0 0.00000000 - Delta(1620)+ 418 2122 1.0 1.63000000 4.701516e-24 Delta(1620)+ 0 0.00000000 - Delta(1620)~- 419 -2122 -1.0 1.63000000 4.701516e-24 anti-Delta(1620)- 0 0.00000000 - Delta(1620)++ 432 2222 2.0 1.63000000 4.701516e-24 Delta(1620)++ 0 0.00000000 - Delta(1620)~-- 433 -2222 -2.0 1.63000000 4.701516e-24 anti-Delta(1620)-- 0 0.00000000 - Delta(1700)- 616 11114 -1.0 1.70000000 2.194041e-24 Delta(1700)- 0 0.00000000 - Delta(1700)~+ 617 -11114 1.0 1.70000000 2.194041e-24 anti-Delta(1700)+ 0 0.00000000 - Delta(1700)0 626 12114 0.0 1.70000000 2.194041e-24 Delta(1700)0 0 0.00000000 - Delta(1700)~0 627 -12114 0.0 1.70000000 2.194041e-24 anti-Delta(1700)0 0 0.00000000 - Delta(1700)+ 638 12214 1.0 1.70000000 2.194041e-24 Delta(1700)+ 0 0.00000000 - Delta(1700)~- 639 -12214 -1.0 1.70000000 2.194041e-24 anti-Delta(1700)- 0 0.00000000 - Delta(1700)++ 646 12224 2.0 1.70000000 2.194041e-24 Delta(1700)++ 0 0.00000000 - Delta(1700)~-- 647 -12224 -2.0 1.70000000 2.194041e-24 anti-Delta(1700)-- 0 0.00000000 - Delta(1900)- 614 11112 -1.0 1.84000000 0.000000e+00 Delta(1900)- 0 0.00000000 - Delta(1900)~+ 615 -11112 1.0 1.84000000 0.000000e+00 anti-Delta(1900)+ 0 0.00000000 - Delta(1900)0 620 11212 0.0 1.93000000 1.880606e-24 Delta(1900)0 0 0.00000000 - Delta(1900)~0 621 -11212 0.0 1.93000000 1.880606e-24 anti-Delta(1900)0 0 0.00000000 - Delta(1900)+ 632 12122 1.0 1.84000000 0.000000e+00 Delta(1900)+ 0 0.00000000 - Delta(1900)~- 633 -12122 -1.0 1.84000000 0.000000e+00 anti-Delta(1900)- 0 0.00000000 - Delta(1900)++ 644 12222 2.0 1.84000000 0.000000e+00 Delta(1900)++ 0 0.00000000 - Delta(1900)~-- 645 -12222 -2.0 1.84000000 0.000000e+00 anti-Delta(1900)-- 0 0.00000000 + Delta(1600)- 767 31114 -1.0 1.57000000 2.632848e-24 Delta(1600)- 0 0.00000000 + Delta(1600)~+ 768 -31114 1.0 1.57000000 2.632848e-24 anti-Delta(1600)+ 0 0.00000000 + Delta(1600)0 773 32114 0.0 1.57000000 2.632848e-24 Delta(1600)0 0 0.00000000 + Delta(1600)~0 774 -32114 0.0 1.57000000 2.632848e-24 anti-Delta(1600)0 0 0.00000000 + Delta(1600)+ 779 32214 1.0 1.57000000 2.632848e-24 Delta(1600)+ 0 0.00000000 + Delta(1600)~- 780 -32214 -1.0 1.57000000 2.632848e-24 anti-Delta(1600)- 0 0.00000000 + Delta(1600)++ 781 32224 2.0 1.57000000 2.632848e-24 Delta(1600)++ 0 0.00000000 + Delta(1600)~-- 782 -32224 -2.0 1.57000000 2.632848e-24 anti-Delta(1600)-- 0 0.00000000 + Delta(1620)- 396 1112 -1.0 1.61000000 5.063169e-24 Delta(1620)- 0 0.00000000 + Delta(1620)~+ 397 -1112 1.0 1.61000000 5.063169e-24 anti-Delta(1620)+ 0 0.00000000 + Delta(1620)0 402 1212 0.0 1.61000000 5.063169e-24 Delta(1620)0 0 0.00000000 + Delta(1620)~0 403 -1212 0.0 1.61000000 5.063169e-24 anti-Delta(1620)0 0 0.00000000 + Delta(1620)+ 418 2122 1.0 1.61000000 5.063169e-24 Delta(1620)+ 0 0.00000000 + Delta(1620)~- 419 -2122 -1.0 1.61000000 5.063169e-24 anti-Delta(1620)- 0 0.00000000 + Delta(1620)++ 432 2222 2.0 1.61000000 5.063169e-24 Delta(1620)++ 0 0.00000000 + Delta(1620)~-- 433 -2222 -2.0 1.61000000 5.063169e-24 anti-Delta(1620)-- 0 0.00000000 + Delta(1700)- 616 11114 -1.0 1.71000000 2.194041e-24 Delta(1700)- 0 0.00000000 + Delta(1700)~+ 617 -11114 1.0 1.71000000 2.194041e-24 anti-Delta(1700)+ 0 0.00000000 + Delta(1700)0 626 12114 0.0 1.71000000 2.194041e-24 Delta(1700)0 0 0.00000000 + Delta(1700)~0 627 -12114 0.0 1.71000000 2.194041e-24 anti-Delta(1700)0 0 0.00000000 + Delta(1700)+ 638 12214 1.0 1.71000000 2.194041e-24 Delta(1700)+ 0 0.00000000 + Delta(1700)~- 639 -12214 -1.0 1.71000000 2.194041e-24 anti-Delta(1700)- 0 0.00000000 + Delta(1700)++ 646 12224 2.0 1.71000000 2.194041e-24 Delta(1700)++ 0 0.00000000 + Delta(1700)~-- 647 -12224 -2.0 1.71000000 2.194041e-24 anti-Delta(1700)-- 0 0.00000000 + Delta(1900)- 614 11112 -1.0 1.86000000 2.632848e-24 Delta(1900)- 0 0.00000000 + Delta(1900)~+ 615 -11112 1.0 1.86000000 2.632848e-24 anti-Delta(1900)+ 0 0.00000000 + Delta(1900)0 620 11212 0.0 1.86000000 2.632848e-24 Delta(1900)0 0 0.00000000 + Delta(1900)~0 621 -11212 0.0 1.86000000 2.632848e-24 anti-Delta(1900)0 0 0.00000000 + Delta(1900)+ 632 12122 1.0 1.86000000 2.632848e-24 Delta(1900)+ 0 0.00000000 + Delta(1900)~- 633 -12122 -1.0 1.86000000 2.632848e-24 anti-Delta(1900)- 0 0.00000000 + Delta(1900)++ 644 12222 2.0 1.86000000 2.632848e-24 Delta(1900)++ 0 0.00000000 + Delta(1900)~-- 645 -12222 -2.0 1.86000000 2.632848e-24 anti-Delta(1900)-- 0 0.00000000 Delta(1905)- 398 1116 -1.0 1.88000000 1.994582e-24 Delta(1905)- 0 0.00000000 Delta(1905)~+ 399 -1116 1.0 1.88000000 1.994582e-24 anti-Delta(1905)+ 0 0.00000000 Delta(1905)0 406 1216 0.0 1.88000000 1.994582e-24 Delta(1905)0 0 0.00000000 @@ -403,14 +407,14 @@ PARTICLE Delta(1905)~- 423 -2126 -1.0 1.88000000 1.994582e-24 anti-Delta(1905)- 0 0.00000000 Delta(1905)++ 434 2226 2.0 1.88000000 1.994582e-24 Delta(1905)++ 0 0.00000000 Delta(1905)~-- 435 -2226 -2.0 1.88000000 1.994582e-24 anti-Delta(1905)-- 0 0.00000000 - Delta(1910)- 697 21112 -1.0 1.89000000 2.350758e-24 Delta(1910)- 0 0.00000000 - Delta(1910)~+ 698 -21112 1.0 1.89000000 2.350758e-24 anti-Delta(1910)+ 0 0.00000000 - Delta(1910)0 701 21212 0.0 1.89000000 2.350758e-24 Delta(1910)0 0 0.00000000 - Delta(1910)~0 702 -21212 0.0 1.89000000 2.350758e-24 anti-Delta(1910)0 0 0.00000000 - Delta(1910)+ 709 22122 1.0 1.89000000 2.350758e-24 Delta(1910)+ 0 0.00000000 - Delta(1910)~- 710 -22122 -1.0 1.89000000 2.350758e-24 anti-Delta(1910)- 0 0.00000000 - Delta(1910)++ 717 22222 2.0 1.89000000 2.350758e-24 Delta(1910)++ 0 0.00000000 - Delta(1910)~-- 718 -22222 -2.0 1.89000000 2.350758e-24 anti-Delta(1910)-- 0 0.00000000 + Delta(1910)- 697 21112 -1.0 1.90000000 2.350758e-24 Delta(1910)- 0 0.00000000 + Delta(1910)~+ 698 -21112 1.0 1.90000000 2.350758e-24 anti-Delta(1910)+ 0 0.00000000 + Delta(1910)0 701 21212 0.0 1.90000000 2.350758e-24 Delta(1910)0 0 0.00000000 + Delta(1910)~0 702 -21212 0.0 1.90000000 2.350758e-24 anti-Delta(1910)0 0 0.00000000 + Delta(1910)+ 709 22122 1.0 1.90000000 2.350758e-24 Delta(1910)+ 0 0.00000000 + Delta(1910)~- 710 -22122 -1.0 1.90000000 2.350758e-24 anti-Delta(1910)- 0 0.00000000 + Delta(1910)++ 717 22222 2.0 1.90000000 2.350758e-24 Delta(1910)++ 0 0.00000000 + Delta(1910)~-- 718 -22222 -2.0 1.90000000 2.350758e-24 anti-Delta(1910)-- 0 0.00000000 Delta(1920)- 699 21114 -1.0 1.92000000 2.531585e-24 Delta(1920)- 0 0.00000000 Delta(1920)~+ 700 -21114 1.0 1.92000000 2.531585e-24 anti-Delta(1920)+ 0 0.00000000 Delta(1920)0 707 22114 0.0 1.92000000 2.531585e-24 Delta(1920)0 0 0.00000000 @@ -419,14 +423,14 @@ PARTICLE Delta(1920)~- 716 -22214 -1.0 1.92000000 2.531585e-24 anti-Delta(1920)- 0 0.00000000 Delta(1920)++ 719 22224 2.0 1.92000000 2.531585e-24 Delta(1920)++ 0 0.00000000 Delta(1920)~-- 720 -22224 -2.0 1.92000000 2.531585e-24 anti-Delta(1920)-- 0 0.00000000 - Delta(1930)- 618 11116 -1.0 1.95000000 1.828367e-24 Delta(1930)- 0 0.00000000 - Delta(1930)~+ 619 -11116 1.0 1.95000000 1.828367e-24 anti-Delta(1930)+ 0 0.00000000 - Delta(1930)0 622 11216 0.0 1.95000000 1.828367e-24 Delta(1930)0 0 0.00000000 - Delta(1930)~0 623 -11216 0.0 1.95000000 1.828367e-24 anti-Delta(1930)0 0 0.00000000 - Delta(1930)+ 634 12126 1.0 1.95000000 1.828367e-24 Delta(1930)+ 0 0.00000000 - Delta(1930)~- 635 -12126 -1.0 1.95000000 1.828367e-24 anti-Delta(1930)- 0 0.00000000 - Delta(1930)++ 648 12226 2.0 1.95000000 1.828367e-24 Delta(1930)++ 0 0.00000000 - Delta(1930)~-- 649 -12226 -2.0 1.95000000 1.828367e-24 anti-Delta(1930)-- 0 0.00000000 + Delta(1930)- 618 11116 -1.0 1.95000000 2.194040e-24 Delta(1930)- 0 0.00000000 + Delta(1930)~+ 619 -11116 1.0 1.95000000 2.194040e-24 anti-Delta(1930)+ 0 0.00000000 + Delta(1930)0 622 11216 0.0 1.95000000 2.194040e-24 Delta(1930)0 0 0.00000000 + Delta(1930)~0 623 -11216 0.0 1.95000000 2.194040e-24 anti-Delta(1930)0 0 0.00000000 + Delta(1930)+ 634 12126 1.0 1.95000000 2.194040e-24 Delta(1930)+ 0 0.00000000 + Delta(1930)~- 635 -12126 -1.0 1.95000000 2.194040e-24 anti-Delta(1930)- 0 0.00000000 + Delta(1930)++ 648 12226 2.0 1.95000000 2.194040e-24 Delta(1930)++ 0 0.00000000 + Delta(1930)~-- 649 -12226 -2.0 1.95000000 2.194040e-24 anti-Delta(1930)-- 0 0.00000000 Delta(1950)- 400 1118 -1.0 1.93000000 2.350758e-24 Delta(1950)- 0 0.00000000 Delta(1950)~+ 401 -1118 1.0 1.93000000 2.350758e-24 anti-Delta(1950)+ 0 0.00000000 Delta(1950)0 416 2118 0.0 1.93000000 2.350758e-24 Delta(1950)0 0 0.00000000 @@ -457,16 +461,16 @@ PARTICLE Lambda(1830)~0 661 -13126 0.0 1.83000000 6.928549e-24 anti-Lambda(1830)0 0 0.00000000 Lambda(1890)0 727 23124 0.0 1.89000000 6.582122e-24 Lambda(1890)0 0 0.00000000 Lambda(1890)~0 728 -23124 0.0 1.89000000 6.582122e-24 anti-Lambda(1890)0 0 0.00000000 - Lambda(2100)0 452 3128 0.0 2.10000000 3.291061e-24 unknown 0 0.00000000 - Lambda(2100)~0 453 -3128 0.0 2.10000000 3.291061e-24 unknown 0 0.00000000 - Lambda(2110)0 729 23126 0.0 2.11000000 3.291061e-24 unknown 0 0.00000000 - Lambda(2110)~0 730 -23126 0.0 2.11000000 3.291061e-24 unknown 0 0.00000000 - Sigma- 21 3112 -1.0 1.19744900 1.479000e-10 Sigma- 3112 0.00000000 - Sigma~+ 29 -3112 1.0 1.19744900 1.479000e-10 anti-Sigma+ -3112 0.00000000 + Lambda(2100)0 452 3128 0.0 2.10000000 3.291061e-24 Lambda(2100)0 0 0.00000000 + Lambda(2100)~0 453 -3128 0.0 2.10000000 3.291061e-24 anti-Lambda(2100)0 0 0.00000000 + Lambda(2110)0 729 23126 0.0 2.11000000 3.291061e-24 Lambda(2110)0 0 0.00000000 + Lambda(2110)~0 730 -23126 0.0 2.11000000 3.291061e-24 anti-Lambda(2110)0 0 0.00000000 + Sigma- 21 3112 -1.0 1.19744900 1.479128e-10 Sigma- 3112 0.00000000 + Sigma~+ 29 -3112 1.0 1.19744900 1.479128e-10 anti-Sigma+ -3112 0.00000000 Sigma0 20 3212 0.0 1.19264200 7.400000e-20 Sigma0 3212 0.00000000 Sigma~0 28 -3212 0.0 1.19264200 7.400000e-20 anti-Sigma0 -3212 0.00000000 - Sigma+ 19 3222 1.0 1.18937000 8.018000e-11 Sigma+ 3222 0.00000000 - Sigma~- 27 -3222 -1.0 1.18937000 8.018000e-11 anti-Sigma- -3222 0.00000000 + Sigma+ 19 3222 1.0 1.18937000 8.018175e-11 Sigma+ 3222 0.00000000 + Sigma~- 27 -3222 -1.0 1.18937000 8.018175e-11 anti-Sigma- -3222 0.00000000 Sigma*- 442 3114 -1.0 1.38720000 1.670589e-23 Sigma*- 3114 0.00000000 Sigma*~+ 443 -3114 1.0 1.38720000 1.670589e-23 anti-Sigma*+ -3114 0.00000000 Sigma*0 458 3214 0.0 1.38370000 1.828367e-23 Sigma*0 3214 0.00000000 @@ -509,12 +513,12 @@ PARTICLE Sigma(1940)~0 734 -23214 0.0 1.94000000 2.991874e-24 anti-Sigma(1940)0 0 0.00000000 Sigma(1940)+ 737 23224 1.0 1.94000000 2.991874e-24 Sigma(1940)+ 0 0.00000000 Sigma(1940)~- 738 -23224 -1.0 1.94000000 2.991874e-24 anti-Sigma(1940)- 0 0.00000000 - Sigma(2030)0 462 3218 0.0 2.03000000 3.656734e-24 unknown 0 0.00000000 - Sigma(2030)~0 463 -3218 0.0 2.03000000 3.656734e-24 unknown 0 0.00000000 - Sigma(2030)+ 468 3228 1.0 2.03000000 3.656734e-24 unknown 0 0.00000000 - Sigma(2030)~- 469 -3228 -1.0 2.03000000 3.656734e-24 unknown 0 0.00000000 - Sigma(2030)- 446 3118 -1.0 2.03000000 3.656734e-24 unknown 0 0.00000000 - Sigma(2030)~+ 447 -3118 1.0 2.03000000 3.656734e-24 unknown 0 0.00000000 + Sigma(2030)0 462 3218 0.0 2.03000000 3.656734e-24 Sigma(2030)0 0 0.00000000 + Sigma(2030)~0 463 -3218 0.0 2.03000000 3.656734e-24 anti-Sigma(2030)0 0 0.00000000 + Sigma(2030)+ 468 3228 1.0 2.03000000 3.656734e-24 Sigma(2030)+ 0 0.00000000 + Sigma(2030)~- 469 -3228 -1.0 2.03000000 3.656734e-24 anti-Sigma(2030)- 0 0.00000000 + Sigma(2030)- 446 3118 -1.0 2.03000000 3.656734e-24 Sigma(2030)- 0 0.00000000 + Sigma(2030)~+ 447 -3118 1.0 2.03000000 3.656734e-24 anti-Sigma(2030)+ 0 0.00000000 Sigma(2250)0 1059 103212 0.0 2.25000000 6.580000e-24 Sigma(2250)0 0 0.00000000 Sigma(2250)~0 1060 -103212 0.0 2.25000000 6.580000e-24 anti-Sigma(2250)0 0 0.00000000 Sigma(2250)+ 1061 103222 1.0 2.25000000 6.580000e-24 Sigma(2250)+ 0 0.00000000 @@ -533,10 +537,10 @@ PARTICLE Xi(1690)~+ 1034 -203312 1.0 1.69000000 0.000000e+00 anti-Xi(1690)+ 0 0.00000000 Xi(1690)0 1035 203322 0.0 1.69000000 0.000000e+00 Xi(1690)0 0 0.00000000 Xi(1690)~0 1036 -203322 0.0 1.69000000 0.000000e+00 anti-Xi(1690)0 0 0.00000000 - Xi(1820)- 674 13314 -1.0 1.82300000 2.742551e-23 unknown 0 0.00000000 - Xi(1820)~+ 675 -13314 1.0 1.82300000 2.742551e-23 unknown 0 0.00000000 - Xi(1820)0 678 13324 0.0 1.82300000 2.742551e-23 unknown 0 0.00000000 - Xi(1820)~0 679 -13324 0.0 1.82300000 2.742551e-23 unknown 0 0.00000000 + Xi(1820)- 674 13314 -1.0 1.82300000 2.742551e-23 Xi(1820)- 0 0.00000000 + Xi(1820)~+ 675 -13314 1.0 1.82300000 2.742551e-23 anti-Xi(1820)+ 0 0.00000000 + Xi(1820)0 678 13324 0.0 1.82300000 2.742551e-23 Xi(1820)0 0 0.00000000 + Xi(1820)~0 679 -13324 0.0 1.82300000 2.742551e-23 anti-Xi(1820)0 0 0.00000000 Xi(1950)- 1037 103316 -1.0 1.95000000 1.097020e-23 Xi(1950)- 0 0.00000000 Xi(1950)~+ 1038 -103316 1.0 1.95000000 1.097020e-23 anti-Xi(1950)+ 0 0.00000000 Xi(1950)0 1039 103326 0.0 1.95000000 1.097020e-23 Xi(1950)0 0 0.00000000 @@ -555,80 +559,80 @@ PARTICLE Lambda_c(2595)~- 683 -14122 -1.0 2.59225000 2.531585e-22 anti-Lambda_c(2593)- 0 0.00000000 Lambda_c(2625)+ 1047 104124 1.0 2.62811000 0.000000e+00 Lambda_c(2625)+ 0 0.00000000 Lambda_c(2625)~- 1048 -104124 -1.0 2.62811000 0.000000e+00 anti-Lambda_c(2625)- 0 0.00000000 - Lambda_c(2880)+ 1049 204126 1.0 2.88153000 1.134849e-22 Lambda_c(2880)+ 0 0.00000000 - Lambda_c(2880)~- 1050 -204126 -1.0 2.88153000 1.134849e-22 anti-Lambda_c(2880)- 0 0.00000000 - Sigma_c0 81 4112 0.0 2.45374000 3.047279e-22 Sigma_c0 4112 0.00000000 - Sigma_c~0 82 -4112 0.0 2.45374000 3.047279e-22 anti-Sigma_c0 -4112 0.00000000 + Lambda_c(2880)+ 1049 204126 1.0 2.88163000 1.175379e-22 Lambda_c(2880)+ 0 0.00000000 + Lambda_c(2880)~- 1050 -204126 -1.0 2.88163000 1.175379e-22 anti-Lambda_c(2880)- 0 0.00000000 + Sigma_c0 81 4112 0.0 2.45375000 3.596787e-22 Sigma_c0 4112 0.00000000 + Sigma_c~0 82 -4112 0.0 2.45375000 3.596787e-22 anti-Sigma_c0 -4112 0.00000000 Sigma_c+ 83 4212 1.0 2.45290000 3.999999e-22 Sigma_c+ 4212 0.00000000 Sigma_c~- 84 -4212 -1.0 2.45290000 3.999999e-22 anti-Sigma_c- -4212 0.00000000 - Sigma_c++ 85 4222 2.0 2.45398000 2.912443e-22 Sigma_c++ 4222 0.00000000 - Sigma_c~-- 86 -4222 -2.0 2.45398000 2.912443e-22 anti-Sigma_c-- -4222 0.00000000 - Sigma_c*0 480 4114 0.0 2.51880000 4.539394e-23 Sigma_c*0 4114 0.00000000 - Sigma_c*~0 481 -4114 0.0 2.51880000 4.539394e-23 anti-Sigma_c*0 -4114 0.00000000 + Sigma_c++ 85 4222 2.0 2.45397000 3.482603e-22 Sigma_c++ 4222 0.00000000 + Sigma_c~-- 86 -4222 -2.0 2.45397000 3.482603e-22 anti-Sigma_c-- -4222 0.00000000 + Sigma_c*0 480 4114 0.0 2.51848000 4.539394e-23 Sigma_c*0 4114 0.00000000 + Sigma_c*~0 481 -4114 0.0 2.51848000 4.539394e-23 anti-Sigma_c*0 -4114 0.00000000 Sigma_c*+ 486 4214 1.0 2.51750000 3.291061e-22 Sigma_c*+ 4214 0.00000000 Sigma_c*~- 487 -4214 -1.0 2.51750000 3.291061e-22 anti-Sigma_c*- -4214 0.00000000 - Sigma_c*++ 488 4224 2.0 2.51790000 4.417531e-23 Sigma_c*++ 4224 0.00000000 - Sigma_c*~-- 489 -4224 -2.0 2.51790000 4.417531e-23 anti-Sigma_c*-- -4224 0.00000000 - Xi_c0 106 4132 0.0 2.47088000 1.120000e-13 Xi_c0 4132 0.00000000 - Xi_c~0 107 -4132 0.0 2.47088000 1.120000e-13 anti-Xi_c0 -4132 0.00000000 - Xi_c+ 108 4232 1.0 2.46780000 4.420000e-13 Xi_c+ 4232 0.00000000 - Xi_c~- 109 -4232 -1.0 2.46780000 4.420000e-13 anti-Xi_c- -4232 0.00000000 - Xi'_c0 100 4312 0.0 2.57790000 0.000000e+00 Xi'_c0 4312 0.00000000 - Xi'_c~0 101 -4312 0.0 2.57790000 0.000000e+00 anti-Xi'_c0 -4312 0.00000000 - Xi'_c+ 102 4322 1.0 2.57560000 0.000000e+00 Xi'_c+ 4322 0.00000000 - Xi'_c~- 103 -4322 -1.0 2.57560000 0.000000e+00 anti-Xi'_c- -4322 0.00000000 - Xi_c*0 494 4314 0.0 2.64590000 0.000000e+00 Xi_c*0 4314 0.00000000 - Xi_c*~0 495 -4314 0.0 2.64590000 0.000000e+00 anti-Xi_c*0 -4314 0.00000000 - Xi_c*+ 496 4324 1.0 2.64590000 0.000000e+00 Xi_c*+ 4324 0.00000000 - Xi_c*~- 497 -4324 -1.0 2.64590000 0.000000e+00 anti-Xi_c*- -4324 0.00000000 - Xi_c(2790)+ 1051 104324 1.0 2.78910000 0.000000e+00 Xi_c(2790)+ 0 0.00000000 - Xi_c(2790)~- 1052 -104324 -1.0 2.78910000 0.000000e+00 anti-Xi_c(2790)- 0 0.00000000 - Xi_c(2790)0 1053 104314 0.0 2.79180000 0.000000e+00 Xi_c(2790)0 0 0.00000000 - Xi_c(2790)~0 1054 -104314 0.0 2.79180000 0.000000e+00 anti-Xi_c(2790)0 0 0.00000000 - Xi_c(2815)+ 1055 104322 1.0 2.81660000 0.000000e+00 Xi_c(2815)+ 0 0.00000000 - Xi_c(2815)~- 1056 -104322 -1.0 2.81660000 0.000000e+00 anti-Xi_c(2815)- 0 0.00000000 - Xi_c(2815)0 1057 104312 0.0 2.81960000 0.000000e+00 Xi_c(2815)0 0 0.00000000 - Xi_c(2815)~0 1058 -104312 0.0 2.81960000 0.000000e+00 anti-Xi_c(2815)0 0 0.00000000 - Omega_c0 104 4332 0.0 2.69520000 6.900000e-14 Omega_c0 4332 0.00000000 - Omega_c~0 105 -4332 0.0 2.69520000 6.900000e-14 anti-Omega_c0 -4332 0.00000000 + Sigma_c*++ 488 4224 2.0 2.51841000 4.453396e-23 Sigma_c*++ 4224 0.00000000 + Sigma_c*~-- 489 -4224 -2.0 2.51841000 4.453396e-23 anti-Sigma_c*-- -4224 0.00000000 + Xi_c0 106 4132 0.0 2.47091000 1.530726e-13 Xi_c0 4132 0.00000000 + Xi_c~0 107 -4132 0.0 2.47091000 1.530726e-13 anti-Xi_c0 -4132 0.00000000 + Xi_c+ 108 4232 1.0 2.46793000 4.420000e-13 Xi_c+ 4232 0.00000000 + Xi_c~- 109 -4232 -1.0 2.46793000 4.420000e-13 anti-Xi_c- -4232 0.00000000 + Xi'_c0 100 4312 0.0 2.57920000 0.000000e+00 Xi'_c0 4312 0.00000000 + Xi'_c~0 101 -4312 0.0 2.57920000 0.000000e+00 anti-Xi'_c0 -4312 0.00000000 + Xi'_c+ 102 4322 1.0 2.57840000 0.000000e+00 Xi'_c+ 4322 0.00000000 + Xi'_c~- 103 -4322 -1.0 2.57840000 0.000000e+00 anti-Xi'_c- -4322 0.00000000 + Xi_c*0 494 4314 0.0 2.64638000 2.800902e-22 Xi_c*0 4314 0.00000000 + Xi_c*~0 495 -4314 0.0 2.64638000 2.800902e-22 anti-Xi_c*0 -4314 0.00000000 + Xi_c*+ 496 4324 1.0 2.64557000 3.075757e-22 Xi_c*+ 4324 0.00000000 + Xi_c*~- 497 -4324 -1.0 2.64557000 3.075757e-22 anti-Xi_c*- -4324 0.00000000 + Xi_c(2790)+ 1051 104324 1.0 2.79240000 7.395640e-23 Xi_c(2790)+ 0 0.00000000 + Xi_c(2790)~- 1052 -104324 -1.0 2.79240000 7.395640e-23 anti-Xi_c(2790)- 0 0.00000000 + Xi_c(2790)0 1053 104314 0.0 2.79410000 6.582120e-23 Xi_c(2790)0 0 0.00000000 + Xi_c(2790)~0 1054 -104314 0.0 2.79410000 6.582120e-23 anti-Xi_c(2790)0 0 0.00000000 + Xi_c(2815)+ 1055 104322 1.0 2.81673000 2.708691e-22 Xi_c(2815)+ 0 0.00000000 + Xi_c(2815)~- 1056 -104322 -1.0 2.81673000 2.708691e-22 anti-Xi_c(2815)- 0 0.00000000 + Xi_c(2815)0 1057 104312 0.0 2.82026000 2.591386e-22 Xi_c(2815)0 0 0.00000000 + Xi_c(2815)~0 1058 -104312 0.0 2.82026000 2.591386e-22 anti-Xi_c(2815)0 0 0.00000000 + Omega_c0 104 4332 0.0 2.69520000 2.680000e-13 Omega_c0 4332 0.00000000 + Omega_c~0 105 -4332 0.0 2.69520000 2.680000e-13 anti-Omega_c0 -4332 0.00000000 Omega_c*0 498 4334 0.0 2.76590000 0.000000e+00 Omega_c*0 4334 0.00000000 Omega_c*~0 499 -4334 0.0 2.76590000 0.000000e+00 anti-Omega_c*0 -4334 0.00000000 - Xi_cc+ 502 4412 1.0 3.62140000 3.335641e-13 Xi_cc+ 4412 0.00000000 - Xi_cc~- 503 -4412 -1.0 3.62140000 3.335641e-13 anti-Xi_cc- -4412 0.00000000 + Xi_cc+ 502 4412 1.0 3.62140000 0.800000e-13 Xi_cc+ 4412 0.00000000 + Xi_cc~- 503 -4412 -1.0 3.62140000 0.800000e-13 anti-Xi_cc- -4412 0.00000000 Xi*_cc+ 504 4414 1.0 3.65648000 0.000000e+00 Xi_cc*+ 4414 0.00000000 Xi*_cc~- 505 -4414 -1.0 3.65648000 0.000000e+00 anti-Xi_cc*- -4414 0.00000000 - Xi_cc++ 506 4422 2.0 3.62140000 3.335641e-13 Xi_cc++ 4422 0.00000000 - Xi_cc~-- 507 -4422 -2.0 3.62140000 3.335641e-13 anti-Xi_cc-- -4422 0.00000000 + Xi_cc++ 506 4422 2.0 3.62140000 2.560000e-13 Xi_cc++ 4422 0.00000000 + Xi_cc~-- 507 -4422 -2.0 3.62140000 2.560000e-13 anti-Xi_cc-- -4422 0.00000000 Xi*_cc++ 508 4424 2.0 3.65648000 0.000000e+00 Xi_cc*++ 4424 0.00000000 Xi*_cc~-- 509 -4424 -2.0 3.65648000 0.000000e+00 anti-Xi_cc*-- -4424 0.00000000 - Omega_cc+ 510 4432 1.0 3.78663000 3.335641e-13 Omega_cc+ 4432 0.00000000 - Omega_cc~- 511 -4432 -1.0 3.78663000 3.335641e-13 anti-Omega_cc- -4432 0.00000000 + Omega_cc+ 510 4432 1.0 3.73800000 1.600000e-13 Omega_cc+ 4432 0.00000000 + Omega_cc~- 511 -4432 -1.0 3.73800000 1.600000e-13 anti-Omega_cc- -4432 0.00000000 Omega*_cc+ 512 4434 1.0 3.82466000 0.000000e+00 Omega_cc*+ 4434 0.00000000 Omega*_cc~- 513 -4434 -1.0 3.82466000 0.000000e+00 anti-Omega_cc*- -4434 0.00000000 - Omega*_ccc++ 514 4444 2.0 4.91594000 0.000000e+00 unknown 4444 0.00000000 - Omega*_ccc~-- 515 -4444 -2.0 4.91594000 0.000000e+00 unknown -4444 0.00000000 - Lambda_b0 79 5122 0.0 5.61950000 1.451000e-12 Lambda_b0 5122 0.00000000 - Lambda_b~0 80 -5122 0.0 5.61950000 1.451000e-12 anti-Lambda_b0 -5122 0.00000000 - Lambda_b(5912)0 1065 15122 0.0 5.91197000 1.316000e-21 Lambda_b(5912)0 15122 0.00000000 - Lambda_b(5912)~0 1066 -15122 0.0 5.91197000 1.316000e-21 anti-Lambda_b(5912)0 -15122 0.00000000 - Lambda_b(5920)0 1067 5124 0.0 5.91977000 1.316000e-21 Lambda_b(5920)0 5124 0.00000000 - Lambda_b(5920)~0 1068 -5124 0.0 5.91977000 1.316000e-21 anti-Lambda_b(5920)0 -5124 0.00000000 - Sigma_b- 114 5112 -1.0 5.81550000 1.343290e-22 Sigma_b- 5112 0.00000000 - Sigma_b~+ 115 -5112 1.0 5.81550000 1.343290e-22 anti-Sigma_b+ -5112 0.00000000 + Omega*_ccc++ 514 4444 2.0 4.91594000 0.000000e+00 Omega*_ccc++ 4444 0.00000000 + Omega*_ccc~-- 515 -4444 -2.0 4.91594000 0.000000e+00 anti-Omega*_ccc-- -4444 0.00000000 + Lambda_b0 79 5122 0.0 5.61960000 1.470865e-12 Lambda_b0 5122 0.00000000 + Lambda_b~0 80 -5122 0.0 5.61960000 1.470865e-12 anti-Lambda_b0 -5122 0.00000000 + Lambda_b(5912)0 1065 15122 0.0 5.91220000 1.316000e-21 Lambda_b(5912)0 15122 0.00000000 + Lambda_b(5912)~0 1066 -15122 0.0 5.91220000 1.316000e-21 anti-Lambda_b(5912)0 -15122 0.00000000 + Lambda_b(5920)0 1067 5124 0.0 5.91992000 1.316000e-21 Lambda_b(5920)0 5124 0.00000000 + Lambda_b(5920)~0 1068 -5124 0.0 5.91992000 1.316000e-21 anti-Lambda_b(5920)0 -5124 0.00000000 + Sigma_b- 114 5112 -1.0 5.81564000 1.343290e-22 Sigma_b- 5112 0.00000000 + Sigma_b~+ 115 -5112 1.0 5.81564000 1.343290e-22 anti-Sigma_b+ -5112 0.00000000 Sigma_b0 112 5212 0.0 5.80780000 1.000000e-19 Sigma_b0 5212 0.00000000 Sigma_b~0 113 -5212 0.0 5.80780000 1.000000e-19 anti-Sigma_b0 -5212 0.00000000 - Sigma_b+ 110 5222 1.0 5.81130000 6.785693e-23 Sigma_b+ 5222 0.00000000 - Sigma_b~- 111 -5222 -1.0 5.81130000 6.785693e-23 anti-Sigma_b- -5222 0.00000000 - Sigma_b*- 520 5114 -1.0 5.83510000 8.776160e-23 Sigma_b*- 5114 0.00000000 - Sigma_b*~+ 521 -5114 1.0 5.83510000 8.776160e-23 anti-Sigma_b*+ -5114 0.00000000 + Sigma_b+ 110 5222 1.0 5.81056000 1.316424e-22 Sigma_b+ 5222 0.00000000 + Sigma_b~- 111 -5222 -1.0 5.81056000 1.316424e-22 anti-Sigma_b- -5222 0.00000000 + Sigma_b*- 520 5114 -1.0 5.83474000 8.776160e-23 Sigma_b*- 5114 0.00000000 + Sigma_b*~+ 521 -5114 1.0 5.83474000 8.776160e-23 anti-Sigma_b*+ -5114 0.00000000 Sigma_b*0 528 5214 0.0 5.82900000 0.000000e+00 Sigma_b*0 5214 0.00000000 Sigma_b*~0 529 -5214 0.0 5.82900000 0.000000e+00 anti-Sigma_b*0 -5214 0.00000000 - Sigma_b*+ 530 5224 1.0 5.83210000 5.723583e-23 Sigma_b*+ 5224 0.00000000 - Sigma_b*~- 531 -5224 -1.0 5.83210000 5.723583e-23 anti-Sigma_b*- -5224 0.00000000 - Xi_b- 122 5132 -1.0 5.79490000 1.560000e-12 Xi_b- 5132 0.00000000 - Xi_b~+ 123 -5132 1.0 5.79490000 1.560000e-12 anti-Xi_b+ -5132 0.00000000 - Xi_b0 124 5232 0.0 5.79310000 1.490000e-12 Xi_b0 5232 0.00000000 - Xi_b~0 125 -5232 0.0 5.79310000 1.490000e-12 anti-Xi_b0 -5232 0.00000000 + Sigma_b*+ 530 5224 1.0 5.83032000 7.002255e-23 Sigma_b*+ 5224 0.00000000 + Sigma_b*~- 531 -5224 -1.0 5.83032000 7.002255e-23 anti-Sigma_b*- -5224 0.00000000 + Xi_b- 122 5132 -1.0 5.79700000 1.570912e-12 Xi_b- 5132 0.00000000 + Xi_b~+ 123 -5132 1.0 5.79700000 1.570912e-12 anti-Xi_b+ -5132 0.00000000 + Xi_b0 124 5232 0.0 5.79190000 1.490000e-12 Xi_b0 5232 0.00000000 + Xi_b~0 125 -5232 0.0 5.79190000 1.490000e-12 anti-Xi_b0 -5232 0.00000000 Xi'_b- 116 5312 -1.0 5.96000000 1.000000e-19 Xi'_b- 5312 0.00000000 Xi'_b~+ 117 -5312 1.0 5.96000000 1.000000e-19 anti-Xi'_b+ -5312 0.00000000 Xi'_b0 118 5322 0.0 5.96000000 1.000000e-19 Xi'_b0 5322 0.00000000 @@ -639,54 +643,54 @@ PARTICLE Xi_b*~0 541 -5324 0.0 5.97000000 0.000000e+00 anti-Xi_b*0 -5324 0.00000000 Omega_b*- 542 5334 -1.0 6.13000000 0.000000e+00 Omega_b*- 5334 0.00000000 Omega_b*~+ 543 -5334 1.0 6.13000000 0.000000e+00 anti-Omega_b*+ -5334 0.00000000 - Omega_b- 120 5332 -1.0 6.04880000 1.100000e-12 Omega_b- 5332 0.00000000 - Omega_b~+ 121 -5332 1.0 6.04880000 1.100000e-12 anti-Omega_b+ -5332 0.00000000 + Omega_b- 120 5332 -1.0 6.04610000 1.645530e-12 Omega_b- 5332 0.00000000 + Omega_b~+ 121 -5332 1.0 6.04610000 1.645530e-12 anti-Omega_b+ -5332 0.00000000 Xi_bc0 522 5142 0.0 6.90000000 0.500000e-12 Xi_bc0 5142 0.00000000 Xi_bc~0 523 -5142 0.0 6.90000000 0.500000e-12 anti-Xi_bc0 -5142 0.00000000 Xi_bc+ 532 5242 1.0 6.90000000 0.500000e-12 Xi_bc+ 5242 0.00000000 Xi_bc~- 533 -5242 -1.0 6.90000000 0.500000e-12 anti-Xi_bc- -5242 0.00000000 - Omega_bc0 544 5342 0.0 7.19099000 0.500000e-12 unknown 5342 0.00000000 - Omega_bc~0 545 -5342 0.0 7.19099000 0.500000e-12 unknown -5342 0.00000000 - Xi'_bc0 550 5412 0.0 7.03724000 0.000000e+00 unknown 5412 0.00000000 - Xi'_bc~0 551 -5412 0.0 7.03724000 0.000000e+00 unknown -5412 0.00000000 - Xi*_bc0 552 5414 0.0 7.04850000 0.000000e+00 unknown 5414 0.00000000 - Xi*_bc~0 553 -5414 0.0 7.04850000 0.000000e+00 unknown -5414 0.00000000 - Xi'_bc+ 554 5422 1.0 7.03724000 0.000000e+00 unknown 5422 0.00000000 - Xi'_bc~- 555 -5422 -1.0 7.03724000 0.000000e+00 unknown -5422 0.00000000 - Xi*_bc+ 556 5424 1.0 7.04850000 0.000000e+00 unknown 5424 0.00000000 - Xi*_bc~- 557 -5424 -1.0 7.04850000 0.000000e+00 unknown -5424 0.00000000 - Omega'_bc0 558 5432 0.0 7.21101000 0.000000e+00 unknown 5432 0.00000000 - Omega'_bc~0 559 -5432 0.0 7.21101000 0.000000e+00 unknown -5432 0.00000000 - Omega*_bc0 560 5434 0.0 7.21900000 0.000000e+00 unknown 5434 0.00000000 - Omega*_bc~0 561 -5434 0.0 7.21900000 0.000000e+00 unknown -5434 0.00000000 - Omega_bcc+ 562 5442 1.0 8.30945000 1.290893e-12 unknown 5442 0.00000000 - Omega_bcc~- 563 -5442 -1.0 8.30945000 1.290893e-12 unknown -5442 0.00000000 - Omega*_bcc+ 564 5444 1.0 8.31325000 0.000000e+00 unknown 5444 0.00000000 - Omega*_bcc~- 565 -5444 -1.0 8.31325000 0.000000e+00 unknown -5444 0.00000000 - Xi_bb- 568 5512 -1.0 10.42272000 1.290893e-12 unknown 5512 0.00000000 - Xi_bb~+ 569 -5512 1.0 10.42272000 1.290893e-12 unknown -5512 0.00000000 - Xi*_bb- 570 5514 -1.0 10.44144000 0.000000e+00 unknown 5514 0.00000000 - Xi*_bb~+ 571 -5514 1.0 10.44144000 0.000000e+00 unknown -5514 0.00000000 - Xi_bb0 572 5522 0.0 10.42272000 1.290893e-12 unknown 5522 0.00000000 - Xi_bb~0 573 -5522 0.0 10.42272000 1.290893e-12 unknown -5522 0.00000000 - Xi*_bb0 574 5524 0.0 10.44144000 0.000000e+00 unknown 5524 0.00000000 - Xi*_bb~0 575 -5524 0.0 10.44144000 0.000000e+00 unknown -5524 0.00000000 - Omega_bb- 576 5532 -1.0 10.60209000 1.290893e-12 unknown 5532 0.00000000 - Omega_bb~+ 577 -5532 1.0 10.60209000 1.290893e-12 unknown -5532 0.00000000 - Omega*_bb- 578 5534 -1.0 10.61426000 0.000000e+00 unknown 5534 0.00000000 - Omega*_bb~+ 579 -5534 1.0 10.61426000 0.000000e+00 unknown -5534 0.00000000 - Omega_bbc0 580 5542 0.0 11.70767000 1.290893e-12 unknown 5542 0.00000000 - Omega_bbc~0 581 -5542 0.0 11.70767000 1.290893e-12 unknown -5542 0.00000000 - Omega*_bbc0 582 5544 0.0 11.71147000 0.000000e+00 unknown 5544 0.00000000 - Omega*_bbc~0 583 -5544 0.0 11.71147000 0.000000e+00 unknown -5544 0.00000000 - Omega*_bbb- 584 5554 -1.0 15.11061000 0.000000e+00 unknown 5554 0.00000000 - Omega*_bbb~+ 585 -5554 1.0 15.11061000 0.000000e+00 unknown -5554 0.00000000 + Omega_bc0 544 5342 0.0 7.19099000 0.500000e-12 Omega_bc0 5342 0.00000000 + Omega_bc~0 545 -5342 0.0 7.19099000 0.500000e-12 anti-Omega_bc0 -5342 0.00000000 + Xi'_bc0 550 5412 0.0 7.03724000 0.000000e+00 Xi'_bc0 5412 0.00000000 + Xi'_bc~0 551 -5412 0.0 7.03724000 0.000000e+00 anti-Xi'_bc0 -5412 0.00000000 + Xi*_bc0 552 5414 0.0 7.04850000 0.000000e+00 Xi*_bc0 5414 0.00000000 + Xi*_bc~0 553 -5414 0.0 7.04850000 0.000000e+00 anti-Xi*_bc0 -5414 0.00000000 + Xi'_bc+ 554 5422 1.0 7.03724000 0.000000e+00 Xi'_bc+ 5422 0.00000000 + Xi'_bc~- 555 -5422 -1.0 7.03724000 0.000000e+00 anti-Xi'_bc- -5422 0.00000000 + Xi*_bc+ 556 5424 1.0 7.04850000 0.000000e+00 Xi*_bc+ 5424 0.00000000 + Xi*_bc~- 557 -5424 -1.0 7.04850000 0.000000e+00 anti-Xi*_bc+ -5424 0.00000000 + Omega'_bc0 558 5432 0.0 7.21101000 0.000000e+00 Omega'_bc0 5432 0.00000000 + Omega'_bc~0 559 -5432 0.0 7.21101000 0.000000e+00 anti-Omega'_bc0 -5432 0.00000000 + Omega*_bc0 560 5434 0.0 7.21900000 0.000000e+00 Omega*_bc0 5434 0.00000000 + Omega*_bc~0 561 -5434 0.0 7.21900000 0.000000e+00 anti-Omega*_bc0 -5434 0.00000000 + Omega_bcc+ 562 5442 1.0 8.30945000 1.290893e-12 Omega_bcc+ 5442 0.00000000 + Omega_bcc~- 563 -5442 -1.0 8.30945000 1.290893e-12 anti-Omega_bcc- -5442 0.00000000 + Omega*_bcc+ 564 5444 1.0 8.31325000 0.000000e+00 Omega*_bcc+ 5444 0.00000000 + Omega*_bcc~- 565 -5444 -1.0 8.31325000 0.000000e+00 anti-Omega*_bcc- -5444 0.00000000 + Xi_bb- 568 5512 -1.0 10.42272000 1.290893e-12 Xi_bb- 5512 0.00000000 + Xi_bb~+ 569 -5512 1.0 10.42272000 1.290893e-12 anti-Xi_bb+ -5512 0.00000000 + Xi*_bb- 570 5514 -1.0 10.44144000 0.000000e+00 Xi*_bb- 5514 0.00000000 + Xi*_bb~+ 571 -5514 1.0 10.44144000 0.000000e+00 anti-Xi*_bb+ -5514 0.00000000 + Xi_bb0 572 5522 0.0 10.42272000 1.290893e-12 Xi_bb0 5522 0.00000000 + Xi_bb~0 573 -5522 0.0 10.42272000 1.290893e-12 anti-Xi_bb0 -5522 0.00000000 + Xi*_bb0 574 5524 0.0 10.44144000 0.000000e+00 Xi*_bb0 5524 0.00000000 + Xi*_bb~0 575 -5524 0.0 10.44144000 0.000000e+00 anti-Xi*_bb0 -5524 0.00000000 + Omega_bb- 576 5532 -1.0 10.60209000 1.290893e-12 Omega_bb- 5532 0.00000000 + Omega_bb~+ 577 -5532 1.0 10.60209000 1.290893e-12 anti-Omega_bb+ -5532 0.00000000 + Omega*_bb- 578 5534 -1.0 10.61426000 0.000000e+00 Omega*_bb- 5534 0.00000000 + Omega*_bb~+ 579 -5534 1.0 10.61426000 0.000000e+00 anti-Omega*_bb+ -5534 0.00000000 + Omega_bbc0 580 5542 0.0 11.70767000 1.290893e-12 Omega_bbc0 5542 0.00000000 + Omega_bbc~0 581 -5542 0.0 11.70767000 1.290893e-12 anti-Omega_bbc0 -5542 0.00000000 + Omega*_bbc0 582 5544 0.0 11.71147000 0.000000e+00 Omega*_bbc0 5544 0.00000000 + Omega*_bbc~0 583 -5544 0.0 11.71147000 0.000000e+00 anti-Omega*_bbc0 -5544 0.00000000 + Omega*_bbb- 584 5554 -1.0 15.11061000 0.000000e+00 Omega*_bbb- 5554 0.00000000 + Omega*_bbb~+ 585 -5554 1.0 15.11061000 0.000000e+00 anti-Omega*_bbb+ -5554 0.00000000 deuteron 45 1000010020 1.0 1.87561300 1.000000e+15 deuteron 0 0.00000000 triton 46 1000010030 1.0 2.80925000 1.000000e+15 tritium 0 0.00000000 alpha 47 1000020040 2.0 3.72741700 1.000000e+15 alpha 0 0.00000000 geantino 48 480000000 0.0 0.00000000 1.000000e+15 geantino 0 0.00000000 opticalphoton 50 20022 0.0 0.00000000 1.000000e+16 Cerenkov 0 0.00000000 - H_10 87 25 0.0 125.70000000 9.400000e-26 Higgs0 25 0.00000000 + H_10 87 25 0.0 125.10000000 9.400000e-26 Higgs0 25 0.00000000 H_20 88 35 0.0 310.00000000 9.400000e-26 Higgs'0 35 0.00000000 H_30 89 36 0.0 310.00000000 9.400000e-26 A0 36 0.00000000 H+ 90 37 1.0 310.00000000 9.400000e-26 Higgs+ 37 0.00000000 @@ -749,9 +753,9 @@ PARTICLE CLUSjet 358 97 0.0 0.00000000 0.000000e+00 CLUSjet 97 0.00000000 CELLjet 359 98 0.0 0.00000000 0.000000e+00 CELLjet 98 0.00000000 table 360 99 0.0 0.00000000 0.000000e+00 table 99 0.00000000 - deutron~ 390 -1000010020 -1.0 1.87561300 0.000000e+00 anti-deuteron 0 0.00000000 - triton~ 392 -1000010030 -1.0 2.80925000 0.000000e+00 anti-tritium 0 0.00000000 - alpha~ 393 -1000020040 -2.0 3.72741700 0.000000e+00 anti-alpha 0 0.00000000 + deuteron~ 390 -1000010020 -1.0 1.87561300 1.000000e+15 anti-deuteron 0 0.00000000 + triton~ 392 -1000010030 -1.0 2.80925000 1.000000e+15 anti-tritium 0 0.00000000 + alpha~ 393 -1000020040 -2.0 3.72741700 1.000000e+15 anti-alpha 0 0.00000000 dd_1 394 1103 -0.7 0.00000000 0.000000e+00 dd_1 1103 0.00000000 anti-dd_1 395 -1103 0.7 0.00000000 0.000000e+00 anti-dd_1 -1103 0.00000000 ud_0 410 2101 0.3 0.00000000 0.000000e+00 ud_0 2101 0.00000000 @@ -891,6 +895,16 @@ PARTICLE e*bar+ 938 -4000011 1.0 400.00000000 0.000000e+00 unknown -4000011 0.00000000 nu*_e0 939 4000012 0.0 400.00000000 0.000000e+00 unknown 4000012 0.00000000 nu*_ebar0 940 -4000012 0.0 400.00000000 0.000000e+00 unknown -4000012 0.00000000 + gv 4900021 4900021 0.0 0.00000000 0.0000e+00 gv 4900021 0.00000000 + Zv 4900023 4900023 0.0 125.00000000 6.5800e-23 Zv 4900023 0.01000000 + qv 4900101 4900101 0.0 1.00000000 0.0000e+00 qv 4900101 0.00000000 + qvbar -4900101 -4900101 0.0 1.00000000 0.0000e+00 qvbar -4900101 0.00000000 + pivDiag 4900111 4900111 0.0 1.20000000 5.0000e-12 pivDiag 4900111 2.0000e-11 + pivUp 4900211 4900211 0.0 1.20000000 0.0000e+00 pivUp 4900211 0.00000000 + pivDn -4900211 -4900211 0.0 1.20000000 0.0000e+00 pivDn -4900211 0.00000000 + rhovDiag 4900113 4900113 0.0 1.20000000 0.0000e+00 rhovDiag 4900113 0.00000000 + rhovUp 4900213 4900213 0.0 1.20000000 0.0000e+00 rhovUp 4900213 0.00000000 + rhovDn -4900213 -4900213 0.0 1.20000000 0.0000e+00 rhovDn -4900213 0.00000000 Graviton* 941 5000039 0.0 1000.00000000 0.000000e+00 unknown 5000039 0.00000000 nu_Re 942 9900012 0.0 500.00000000 0.000000e+00 unknown 9900012 0.00000000 nu_Rmu 943 9900014 0.0 500.00000000 0.000000e+00 unknown 9900014 0.00000000 @@ -903,7 +917,7 @@ PARTICLE H_R++ 950 9900042 2.0 200.00000000 0.000000e+00 unknown 9900042 0.00000000 H_R-- 951 -9900042 -2.0 200.00000000 0.000000e+00 unknown -9900042 0.00000000 He3[0.0] 49 1000020030 2.0 2.80923000 1.000000e+15 He3 0 0.00000000 - He3~[0.0] 391 -1000020030 -2.0 2.80923000 0.000000e+00 anti-He3 0 0.00000000 + He3~[0.0] 391 -1000020030 -2.0 2.80923000 1.000000e+15 anti-He3 0 0.00000000 Li7[0.0] 988 1000030070 3.0 6.53536500 0.000000e+00 unknown 0 0.00000000 Be8[0.0] 992 1000040080 4.0 7.45689300 0.000000e+00 unknown 0 0.00000000 Be9[0.0] 959 1000040090 4.0 8.39479200 0.000000e+00 unknown 0 0.00000000 @@ -971,5 +985,3 @@ PARTICLE Intermediate 971 -99000000 0.0 0.00000000 0.000000e+00 unknown 0 0.00000000 # END PARTICLE -# # ParticleTable.txt file containing particle # properties for ParticlePropertySvc, EvtGen and Pythia. # Uses PDG 2014 when available. # PARTICLE # # GEANTID PDGID CHARGE MASS(GeV) TLIFE(s) EVTGENNAME PYTHIAID MAXWIDTH # gamma 1 22 0.0 0.00000000 1.000000e+16 gamma 22 0.00000000 W+ 53 24 1.0 80.38500000 3.156893e-25 W+ 24 0.00000000 W- 54 -24 -1.0 80.38500000 3.156893e-25 W- -24 0.00000000 Z0 55 23 0.0 91.18760000 2.637914e-25 Z0 23 0.00000000 e+ 2 -11 1.0 0.00051100 1.000000e+16 e+ -11 0.00000000 e- 3 11 -1.0 0.00051100 1.000000e+16 e- 11 0.00000000 nu_e 4 12 0.0 0.00000000 1.000000e+16 nu_e 12 0.00000000 nu_e~ 302 -12 0.0 0.00000000 1.000000e+16 anti-nu_e -12 0.00000000 mu+ 5 -13 1.0 0.10565837 2.196981e-06 mu+ -13 0.00000000 mu- 6 13 -1.0 0.10565837 2.196981e-06 mu- 13 0.00000000 nu_mu 300 14 0.0 0.00000000 1.000000e+16 nu_mu 14 0.00000000 nu_mu~ 301 -14 0.0 0.00000000 1.000000e+16 anti-nu_mu -14 0.00000000 tau+ 51 -15 1.0 1.77682000 2.903000e-13 tau+ -15 0.00000000 tau- 52 15 -1.0 1.77682000 2.903000e-13 tau- 15 0.00000000 pi0 7 111 0.0 0.13497660 8.520000e-17 pi0 111 0.00000000 pi+ 8 211 1.0 0.13957018 2.603300e-08 pi+ 211 0.00000000 pi- 9 -211 -1.0 0.13957018 2.603300e-08 pi- -211 0.00000000 eta 17 221 0.0 0.54786200 5.063171e-19 eta 221 0.00000000 rho(770)0 33 113 0.0 0.77526000 4.414569e-24 rho0 113 0.00000000 rho(770)+ 34 213 1.0 0.77526000 4.414569e-24 rho+ 213 0.00000000 rho(770)- 35 -213 -1.0 0.77526000 4.414569e-24 rho- -213 0.00000000 omega(782) 36 223 0.0 0.78265000 7.752794e-23 omega 223 0.00000000 eta_prime 127 331 0.0 0.95778000 3.324303e-21 eta' 331 0.00000000 sigma_0 850 9000221 0.0 0.47500000 1.196749e-24 sigma_0 0 0.00000000 f_0(980) 596 9010221 0.0 0.99000000 9.403031e-24 f_0 10221 0.00000000 a_0(980)0 132 9000111 0.0 0.98000000 8.776163e-24 a_00 10111 0.00000000 a_0(980)+ 133 9000211 1.0 0.98000000 8.776163e-24 a_0+ 10211 0.00000000 a_0(980)- 134 -9000211 -1.0 0.98000000 8.776163e-24 a_0- -10211 0.00000000 phi(1020) 37 333 0.0 1.01946100 1.545099e-22 phi 333 0.00000000 h_1(1170) 597 10223 0.0 1.17000000 1.828367e-24 h_1 10223 0.00000000 b_1(1235)0 588 10113 0.0 1.22950000 4.635297e-24 b_10 10113 0.00000000 b_1(1235)+ 592 10213 1.0 1.22950000 4.635297e-24 b_1+ 10213 0.00000000 b_1(1235)- 593 -10213 -1.0 1.22950000 4.635297e-24 b_1- -10213 0.00000000 a_1(1260)0 135 20113 0.0 1.23000000 1.567172e-24 a_10 20113 0.00000000 a_1(1260)+ 42 20213 1.0 1.23000000 1.567172e-24 a_1+ 20213 0.00000000 a_1(1260)- 43 -20213 -1.0 1.23000000 1.567172e-24 a_1- -20213 0.00000000 f_2(1270) 367 225 0.0 1.27510000 3.555982e-24 f_2 225 0.00000000 f_1(1285) 687 20223 0.0 1.28190000 2.719885e-23 f_1 20223 0.00000000 eta(1295) 811 100221 0.0 1.29400000 1.196749e-23 eta(2S) 0 0.00000000 pi(1300)0 805 100111 0.0 1.30000000 1.645530e-24 pi(2S)0 0 0.00000000 pi(1300)+ 807 100211 1.0 1.30000000 1.645530e-24 pi(2S)+ 0 0.00000000 pi(1300)- 808 -100211 -1.0 1.30000000 1.645530e-24 pi(2S)- 0 0.00000000 a_2(1320)0 136 115 0.0 1.31830000 6.151516e-24 a_20 115 0.00000000 a_2(1320)+ 137 215 1.0 1.31830000 6.151516e-24 a_2+ 215 0.00000000 a_2(1320)- 138 -215 -1.0 1.31830000 6.151516e-24 a_2- -215 0.00000000 f_0(1370) 686 10221 0.0 1.35000000 1.880606e-24 f'_0 10331 0.00000000 h_1(1380) 604 10333 0.0 1.40000000 0.000000e+00 h'_1 10333 0.00000000 pi_1(1400)0 1021 9000113 0.0 1.35400000 1.994582e-24 pi_1(1400)0 0 0.00000000 pi_1(1400)+ 1023 9000213 1.0 1.35400000 1.994582e-24 pi_1(1400)+ 0 0.00000000 pi_1(1400)- 1024 -9000213 -1.0 1.35400000 1.994582e-24 pi_1(1400)- 0 0.00000000 eta(1405)0 1025 9020221 0.0 1.40880000 1.290612e-23 eta(1405)0 0 0.00000000 omega(1420) 812 100223 0.0 1.42500000 3.061452e-24 omega(2S) 0 0.00000000 f_1(1420) 692 20333 0.0 1.42640000 1.198929e-23 f'_1 20333 0.00000000 rho(1450)0 806 100113 0.0 1.46500000 1.645530e-24 rho(2S)0 0 0.00000000 rho(1450)+ 809 100213 1.0 1.46500000 1.645530e-24 rho(2S)+ 0 0.00000000 rho(1450)- 810 -100213 -1.0 1.46500000 1.645530e-24 rho(2S)- 0 0.00000000 a_0(1450)0 587 10111 0.0 1.47400000 2.483820e-24 unknown 0 0.00000000 a_0(1450)+ 590 10211 1.0 1.47400000 2.483820e-24 unknown 0 0.00000000 a_0(1450)- 591 -10211 -1.0 1.47400000 2.483820e-24 unknown 0 0.00000000 eta(1475) 826 100331 0.0 1.47600000 7.743673e-24 unknown 0 0.00000000 f_0(1500) 855 9030221 0.0 1.50500000 6.038644e-24 f_0(1500) 0 0.00000000 f'_2(1525) 380 335 0.0 1.52500000 9.016605e-24 f'_2 335 0.00000000 pi_1(1600)0 1027 9010113 0.0 1.66200000 2.742551e-24 pi_1(1600)0 0 0.00000000 pi_1(1600)+ 1029 9010213 1.0 1.66200000 2.742551e-24 pi_1(1600)+ 0 0.00000000 pi_1(1600)- 1030 -9010213 -1.0 1.66200000 2.742551e-24 pi_1(1600)- 0 0.00000000 eta_2(1645) 598 10225 0.0 1.61700000 3.636531e-24 unknown 0 0.00000000 omega(1650) 746 30223 0.0 1.67000000 2.089563e-24 omega(1650) 0 0.00000000 pi_2(1670)0 589 10115 0.0 1.67220000 2.531585e-24 unknown 0 0.00000000 pi_2(1670)+ 594 10215 1.0 1.67220000 2.531585e-24 unknown 0 0.00000000 pi_2(1670)- 595 -10215 -1.0 1.67220000 2.531585e-24 unknown 0 0.00000000 omega_3(1670) 368 227 0.0 1.66700000 3.917930e-24 unknown 0 0.00000000 phi(1680) 827 100333 0.0 1.68000000 4.388081e-24 phi(1680) 0 0.00000000 rho_3(1690)0 361 117 0.0 1.68880000 4.088274e-24 unknown 0 0.00000000 rho_3(1690)+ 363 217 1.0 1.68880000 4.088274e-24 unknown 0 0.00000000 rho_3(1690)- 364 -217 -1.0 1.68880000 4.088274e-24 unknown 0 0.00000000 rho(1700)0 743 30113 0.0 1.72000000 2.632849e-24 rho(3S)0 0 0.00000000 rho(1700)+ 744 30213 1.0 1.72000000 2.632849e-24 rho(3S)+ 0 0.00000000 rho(1700)- 745 -30213 -1.0 1.72000000 2.632849e-24 rho(3S)- 0 0.00000000 f_0(1710) 603 10331 0.0 1.72200000 4.875646e-24 unknown 0 0.00000000 pi(1800)0 840 9010111 0.0 1.81200000 3.164482e-24 unknown 0 0.00000000 pi(1800)+ 841 9010211 1.0 1.81200000 3.164482e-24 unknown 0 0.00000000 pi(1800)- 842 -9010211 -1.0 1.81200000 3.164482e-24 unknown 0 0.00000000 phi_3(1850) 381 337 0.0 1.85400000 7.565657e-24 unknown 0 0.00000000 eta_2(1870) 605 10335 0.0 1.85400000 0.000000e+00 unknown 0 0.00000000 f_2(1950) 813 9050225 0.0 1.94400000 1.394517e-24 unknown 0 0.00000000 f_2(2010) 828 9060225 0.0 2.01100000 3.291061e-24 unknown 0 0.00000000 a_4(2040)0 362 119 0.0 1.99600000 2.581224e-24 unknown 0 0.00000000 a_4(2040)+ 365 219 1.0 1.99600000 2.581224e-24 unknown 0 0.00000000 a_4(2040)- 366 -219 -1.0 1.99600000 2.581224e-24 unknown 0 0.00000000 f_4(2050) 369 229 0.0 2.01800000 2.777267e-24 unknown 0 0.00000000 f_2(2300) 857 9080225 0.0 2.29700000 4.417530e-24 unknown 0 0.00000000 f_2(2340) 858 9090225 0.0 2.33900000 2.063361e-24 unknown 0 0.00000000 K0 370 311 0.0 0.49761400 0.000000e+00 K0 311 0.00000000 K~0 371 -311 0.0 0.49761400 0.000000e+00 anti-K0 -311 0.00000000 KS0 16 310 0.0 0.49761400 8.956400e-11 K_S0 310 0.00000000 KL0 10 130 0.0 0.49761400 5.116000e-08 K_L0 130 0.00000000 K+ 11 321 1.0 0.49367700 1.238000e-08 K+ 321 0.00000000 K- 12 -321 -1.0 0.49367700 1.238000e-08 K- -321 0.00000000 K*(892)0 40 313 0.0 0.89581000 1.388633e-23 K*0 313 0.00000000 K*(892)~0 41 -313 0.0 0.89581000 1.388633e-23 anti-K*0 -313 0.00000000 K*(892)+ 38 323 1.0 0.89166000 1.295693e-23 K*+ 323 0.00000000 K*(892)- 39 -323 -1.0 0.89166000 1.295693e-23 K*- -323 0.00000000 K_1(1270)0 141 10313 0.0 1.27200000 7.313469e-24 K_10 10313 0.00000000 K_1(1270)~0 142 -10313 0.0 1.27200000 7.313469e-24 anti-K_10 -10313 0.00000000 K_1(1270)+ 139 10323 1.0 1.27200000 7.313469e-24 K_1+ 10323 0.00000000 K_1(1270)- 140 -10323 -1.0 1.27200000 7.313469e-24 K_1- -10323 0.00000000 K_1(1400)0 145 20313 0.0 1.40300000 3.782829e-24 K'_10 20313 0.00000000 K_1(1400)~0 146 -20313 0.0 1.40300000 3.782829e-24 anti-K'_10 -20313 0.00000000 K_1(1400)+ 143 20323 1.0 1.40300000 3.782829e-24 K'_1+ 20323 0.00000000 K_1(1400)- 144 -20323 -1.0 1.40300000 3.782829e-24 K'_1- -20323 0.00000000 K*(1410)0 816 100313 0.0 1.41400000 2.837122e-24 K'*0 0 0.00000000 K*(1410)~0 817 -100313 0.0 1.41400000 2.837122e-24 anti-K'*0 0 0.00000000 K*(1410)+ 822 100323 1.0 1.41400000 2.837122e-24 K'*+ 0 0.00000000 K*(1410)- 823 -100323 -1.0 1.41400000 2.837122e-24 K'*- 0 0.00000000 K*_0(1430)0 149 10311 0.0 1.42500000 2.437823e-24 K_0*0 10311 0.00000000 K*_0(1430)~0 150 -10311 0.0 1.42500000 2.437823e-24 anti-K_0*0 -10311 0.00000000 K*_0(1430)+ 147 10321 1.0 1.42500000 2.437823e-24 K_0*+ 10321 0.00000000 K*_0(1430)- 148 -10321 -1.0 1.42500000 2.437823e-24 K_0*- -10321 0.00000000 K*_2(1430)0 153 315 0.0 1.43240000 6.038644e-24 K_2*0 315 0.00000000 K*_2(1430)~0 154 -315 0.0 1.43240000 6.038644e-24 anti-K_2*0 -315 0.00000000 K*_2(1430)+ 151 325 1.0 1.42560000 6.682357e-24 K_2*+ 325 0.00000000 K*_2(1430)- 152 -325 -1.0 1.42560000 6.682357e-24 K_2*- -325 0.00000000 K(1460)0 814 100311 0.0 1.43240000 0.000000e+00 unknown 0 0.00000000 K(1460)~0 815 -100311 0.0 1.43240000 0.000000e+00 unknown 0 0.00000000 K(1460)+ 820 100321 1.0 1.43240000 0.000000e+00 unknown 0 0.00000000 K(1460)- 821 -100321 -1.0 1.43240000 0.000000e+00 unknown 0 0.00000000 K*(1680)0 747 30313 0.0 1.71700000 2.056913e-24 K''*0 0 0.00000000 K*(1680)~0 748 -30313 0.0 1.71700000 2.056913e-24 anti-K''*0 0 0.00000000 K*(1680)+ 749 30323 1.0 1.71700000 2.056913e-24 K''*+ 0 0.00000000 K*(1680)- 750 -30323 -1.0 1.71700000 2.056913e-24 K''*- 0 0.00000000 K_2(1770)0 599 10315 0.0 1.77300000 3.538775e-24 unknown 0 0.00000000 K_2(1770)~0 600 -10315 0.0 1.77300000 3.538775e-24 unknown 0 0.00000000 K_2(1770)+ 601 10325 1.0 1.77300000 3.538775e-24 unknown 0 0.00000000 K_2(1770)- 602 -10325 -1.0 1.77300000 3.538775e-24 unknown 0 0.00000000 K*_3(1780)0 372 317 0.0 1.77600000 4.139699e-24 K_3*0 0 0.00000000 K*_3(1780)~0 373 -317 0.0 1.77600000 4.139699e-24 anti-K_3*0 0 0.00000000 K*_3(1780)+ 376 327 1.0 1.77600000 4.139699e-24 K_3*+ 0 0.00000000 K*_3(1780)- 377 -327 -1.0 1.77600000 4.139699e-24 K_3*- 0 0.00000000 K_2(1820)0 688 20315 0.0 1.81600000 2.384827e-24 unknown 0 0.00000000 K_2(1820)~0 689 -20315 0.0 1.81600000 2.384827e-24 unknown 0 0.00000000 K_2(1820)+ 690 20325 1.0 1.81600000 2.384827e-24 unknown 0 0.00000000 K_2(1820)- 691 -20325 -1.0 1.81600000 2.384827e-24 unknown 0 0.00000000 K*_2(1980)0 818 100315 0.0 1.97300000 0.000000e+00 unknown 0 0.00000000 K*_2(1980)~0 819 -100315 0.0 1.97300000 0.000000e+00 unknown 0 0.00000000 K*_2(1980)+ 824 100325 1.0 1.97300000 0.000000e+00 unknown 0 0.00000000 K*_2(1980)- 825 -100325 -1.0 1.97300000 0.000000e+00 unknown 0 0.00000000 K*_4(2045)0 374 319 0.0 2.04500000 3.324304e-24 K_4*0 0 0.00000000 K*_4(2045)~0 375 -319 0.0 2.04500000 3.324304e-24 anti-K_4*0 0 0.00000000 K*_4(2045)+ 378 329 1.0 2.04500000 3.324304e-24 K_4*+ 0 0.00000000 K*_4(2045)- 379 -329 -1.0 2.04500000 3.324304e-24 K_4*- 0 0.00000000 D0 58 421 0.0 1.86484000 4.101000e-13 D0 421 0.00000000 D~0 59 -421 0.0 1.86484000 4.101000e-13 anti-D0 -421 0.00000000 D+ 56 411 1.0 1.86961000 1.040000e-12 D+ 411 0.00000000 D- 57 -411 -1.0 1.86961000 1.040000e-12 D- -411 0.00000000 D*(2007)0 67 423 0.0 2.00696000 1.000003e-19 D*0 423 0.00000000 D*(2007)~0 68 -423 0.0 2.00696000 1.000003e-19 anti-D*0 -423 0.00000000 D*(2010)+ 65 413 1.0 2.01026000 7.892230e-21 D*+ 413 0.00000000 D*(2010)- 66 -413 -1.0 2.01026000 7.892230e-21 D*- -413 0.00000000 D*_0+ 155 10411 1.0 2.31800000 2.465213e-24 D_0*+ 10411 0.00000000 D*_0- 159 -10411 -1.0 2.31800000 2.465213e-24 D_0*- -10411 0.00000000 D*_00 163 10421 0.0 2.31800000 2.465213e-24 D_0*0 10421 0.00000000 D*_0~0 167 -10421 0.0 2.31800000 2.465213e-24 anti-D_0*0 -10421 0.00000000 D_1(H)0 164 20423 0.0 2.44500000 2.630000e-24 D'_10 20423 0.00000000 D_1(H)~0 168 -20423 0.0 2.44500000 2.630000e-24 anti-D'_10 -20423 0.00000000 D_1(H)+ 156 20413 1.0 2.44500000 2.630000e-24 D'_1+ 20413 0.00000000 D_1(H)- 160 -20413 -1.0 2.44500000 2.630000e-24 D'_1- -20413 0.00000000 D_1(2420)0 165 10423 0.0 2.42140000 2.428827e-23 D_10 10423 0.00000000 D_1(2420)~0 169 -10423 0.0 2.42140000 2.428827e-23 anti-D_10 -10423 0.00000000 D_1(2420)+ 157 10413 1.0 2.42300000 3.290000e-23 D_1+ 10413 0.00000000 D_1(2420)- 161 -10413 -1.0 2.42300000 3.290000e-23 D_1- -10413 0.00000000 D*_2(2460)0 170 425 0.0 2.46260000 1.343290e-23 D_2*0 425 0.00000000 D*_2(2460)~0 166 -425 0.0 2.46260000 1.343290e-23 anti-D_2*0 -425 0.00000000 D*_2(2460)+ 162 415 1.0 2.46430000 1.778952e-23 D_2*+ 415 0.00000000 D*_2(2460)- 158 -415 -1.0 2.46430000 1.778952e-23 D_2*- -415 0.00000000 D(2S)0 761 100421 0.0 2.58000000 0.000000e+00 D(2S)0 0 0.00000000 D(2S)~0 762 -100421 0.0 2.58000000 0.000000e+00 anti-D(2S)0 0 0.00000000 D(2S)+ 757 100411 1.0 2.58000000 0.000000e+00 D(2S)+ 0 0.00000000 D(2S)- 758 -100411 -1.0 2.58000000 0.000000e+00 D(2S)- 0 0.00000000 D*(2640)0 763 100423 0.0 2.64000000 0.000000e+00 D*(2S)0 0 0.00000000 D*(2640)~0 764 -100423 0.0 2.64000000 0.000000e+00 anti-D*(2S)0 0 0.00000000 D*(2640)+ 759 100413 1.0 2.64000000 0.000000e+00 D*(2S)+ 0 0.00000000 D*(2640)- 760 -100413 -1.0 2.64000000 0.000000e+00 D*(2S)- 0 0.00000000 D_s+ 60 431 1.0 1.96830000 5.000000e-13 D_s+ 431 0.00000000 D_s- 61 -431 -1.0 1.96830000 5.000000e-13 D_s- -431 0.00000000 D*_s+ 69 433 1.0 2.11210000 1.000003e-19 D_s*+ 433 0.00000000 D*_s- 70 -433 -1.0 2.11210000 1.000003e-19 D_s*- -433 0.00000000 D*_s0+ 171 10431 1.0 2.31770000 6.582100e-22 D_s0*+ 10431 0.00000000 D*_s0- 175 -10431 -1.0 2.31770000 6.582100e-22 D_s0*- -10431 0.00000000 D_s1(2460)+ 172 20433 1.0 2.45950000 6.582100e-22 D_s1+ 20433 0.00000000 D_s1(2460)- 176 -20433 -1.0 2.45950000 6.582100e-22 D_s1- -20433 0.00000000 D_s1(2536)+ 173 10433 1.0 2.53510000 7.154480e-22 D'_s1+ 10433 0.00000000 D_s1(2536)- 177 -10433 -1.0 2.53510000 7.154480e-22 D'_s1- -10433 0.00000000 D*_s2+ 174 435 1.0 2.57190000 3.871836e-23 D_s2*+ 435 0.00000000 D*_s2- 178 -435 -1.0 2.57190000 3.871836e-23 D_s2*- -435 0.00000000 B0 73 511 0.0 5.27958000 1.519000e-12 B0 511 0.00000000 B~0 74 -511 0.0 5.27958000 1.519000e-12 anti-B0 -511 0.00000000 B0H 99998 510 0.0 5.27958000 1.519000e-12 B0H 0 0.00000000 B0L 99999 150 0.0 5.27958000 1.519000e-12 B0L 0 0.00000000 B+ 71 521 1.0 5.27926000 1.638000e-12 B+ 521 0.00000000 B- 72 -521 -1.0 5.27926000 1.638000e-12 B- -521 0.00000000 B*0 189 513 0.0 5.32520000 1.000019e-19 B*0 513 0.00000000 B*~0 190 -513 0.0 5.32520000 1.000019e-19 anti-B*0 -513 0.00000000 B*- 187 -523 -1.0 5.32520000 1.000019e-19 B*- -523 0.00000000 B*+ 188 523 1.0 5.32520000 1.000019e-19 B*+ 523 0.00000000 B*_00 201 10511 0.0 5.73800000 4.390000e-24 B_0*0 10511 0.00000000 B*_0~0 205 -10511 0.0 5.73800000 4.390000e-24 anti-B_0*0 -10511 0.00000000 B*_0+ 193 10521 1.0 5.73800000 4.390000e-24 B_0*+ 10521 0.00000000 B*_0- 197 -10521 -1.0 5.73800000 4.390000e-24 B_0*- -10521 0.00000000 B_1(H)0 202 20513 0.0 5.75700000 2.630000e-24 B'_10 20513 0.00000000 B_1(H)~0 206 -20513 0.0 5.75700000 2.630000e-24 anti-B'_10 -20513 0.00000000 B_1(H)+ 194 20523 1.0 5.75700000 2.630000e-24 B'_1+ 20523 0.00000000 B_1(H)- 198 -20523 -1.0 5.75700000 2.630000e-24 B'_1- -20523 0.00000000 B_1(L)0 203 10513 0.0 5.72340000 3.134000e-23 B_10 10513 0.00000000 B_1(L)~0 207 -10513 0.0 5.72340000 3.134000e-23 anti-B_10 -10513 0.00000000 B_1(L)+ 195 10523 1.0 5.72340000 3.134000e-23 B_1+ 10523 0.00000000 B_1(L)- 199 -10523 -1.0 5.72340000 3.134000e-23 B_1- -10523 0.00000000 B*_20 204 515 0.0 5.74300000 2.861792e-23 B_2*0 515 0.00000000 B*_2~0 208 -515 0.0 5.74300000 2.861792e-23 anti-B_2*0 -515 0.00000000 B*_2+ 196 525 1.0 5.74300000 2.861792e-23 B_2*+ 525 0.00000000 B*_2- 200 -525 -1.0 5.74300000 2.861792e-23 B_2*- -525 0.00000000 B_s0 75 531 0.0 5.36677000 1.512000e-12 B_s0 531 0.00000000 B_s~0 76 -531 0.0 5.36677000 1.512000e-12 anti-B_s0 -531 0.00000000 B_s0H 99996 530 0.0 5.36677000 1.661000e-12 B_s0H 0 0.00000000 B_s0L 99997 350 0.0 5.36677000 1.405000e-12 B_s0L 0 0.00000000 B*_s0 191 533 0.0 5.41540000 1.000000e-19 B_s*0 533 0.00000000 B*_s~0 192 -533 0.0 5.41540000 1.000000e-19 anti-B_s*0 -533 0.00000000 B*_s00 209 10531 0.0 5.84100000 4.390000e-24 B_s0*0 10531 0.00000000 B*_s0~0 213 -10531 0.0 5.84100000 4.390000e-24 anti-B_s0*0 -10531 0.00000000 B_s1(H)0 210 20533 0.0 5.85900000 2.630000e-24 B'_s10 20533 0.00000000 B_s1(H)~0 214 -20533 0.0 5.85900000 2.630000e-24 anti-B'_s10 -20533 0.00000000 B_s1(L)0 211 10533 0.0 5.82870000 1.316424e-21 B_s10 10533 0.00000000 B_s1(L)~0 215 -10533 0.0 5.82870000 1.316424e-22 anti-B_s10 -10533 0.00000000 B*_s20 212 535 0.0 5.83996000 4.113825e-22 B_s2*0 535 0.00000000 B*_s2~0 216 -535 0.0 5.83996000 4.113825e-22 anti-B_s2*0 -535 0.00000000 B_c+ 77 541 1.0 6.27370000 5.070000e-13 B_c+ 541 0.00000000 B_c- 78 -541 -1.0 6.27370000 5.070000e-13 B_c- -541 0.00000000 B_c*+ 382 543 1.0 6.60200000 0.000000e+00 B_c*+ 543 0.00000000 B_c*- 383 -543 -1.0 6.60200000 0.000000e+00 B_c*- -543 0.00000000 B_c0*+ 607 10541 1.0 7.25000000 0.000000e+00 B_c0*+ 10541 0.00000000 B_c0*- 608 -10541 -1.0 7.25000000 0.000000e+00 B_c0*- -10541 0.00000000 B_c1(L)+ 609 10543 1.0 7.30000000 0.000000e+00 B_c1+ 10543 0.00000000 B_c1(L)- 610 -10543 -1.0 7.30000000 0.000000e+00 B_c1- -10543 0.00000000 B_c1(H)+ 693 20543 1.0 7.40000000 0.000000e+00 B'_c1+ 20543 0.00000000 B_c1(H)- 694 -20543 -1.0 7.40000000 0.000000e+00 B'_c1- -20543 0.00000000 B_c2*+ 384 545 1.0 7.35000000 0.000000e+00 B_c2*+ 545 0.00000000 B_c2*- 385 -545 -1.0 7.35000000 0.000000e+00 B_c2*- -545 0.00000000 eta_c(1S) 128 441 0.0 2.98360000 2.216203e-23 eta_c 441 0.00000000 J/psi(1S) 64 443 0.0 3.09691600 7.085169e-21 J/psi 443 0.00000000 chi_c0(1P) 129 10441 0.0 3.41475000 6.328963e-23 chi_c0 10441 0.00000000 chi_c1(1P) 130 20443 0.0 3.51066000 7.835857e-22 chi_c1 20443 0.00000000 h_c(1P) 606 10443 0.0 3.52538000 9.403029e-22 h_c 10443 0.00000000 chi_c2(1P) 131 445 0.0 3.55620000 3.410425e-22 chi_c2 445 0.00000000 eta_c(2S) 829 100441 0.0 3.63940000 6.582122e-23 eta_c(2S) 100441 0.00000000 psi(2S) 126 100443 0.0 3.68610900 2.201378e-21 psi(2S) 100443 0.00000000 psi(3770) 765 30443 0.0 3.77315000 2.419898e-23 psi(3770) 30443 0.00000000 chi_c2(2P) 1031 100445 0.0 3.92720000 2.742551e-23 chi_c2(2P) 0 0.00000000 psi(4040) 851 9000443 0.0 4.03900000 8.227652e-24 psi(4040) 0 0.00000000 psi(4160) 853 9010443 0.0 4.19100000 9.403029e-24 psi(4160) 0 0.00000000 psi(4415) 856 9020443 0.0 4.42100000 1.061633e-23 psi(4415) 0 0.00000000 X_1(3872) 1016 9920443 0.0 3.87169000 2.076340e-21 X_1(3872) 9920443 0.00000000 X_2(3872) 1017 9910445 0.0 3.87169000 2.076340e-21 X_2(3872) 9910445 0.00000000 Z(4430)+ 1018 9042413 1.0 4.43300000 2.076340e-21 Z(4430)+ 9042413 0.00000000 Z(4430)- 1019 -9042413 -1.0 4.43300000 2.076340e-21 Z(4430)- -9042413 0.00000000 eta_b(1S) 386 551 0.0 9.40300000 0.000000e+00 eta_b 551 0.00000000 eta_b(2S) 830 100551 0.0 9.99700000 0.000000e+00 eta_b(2S) 0 0.00000000 eta_b(3S) 843 200551 0.0 10.33500000 0.000000e+00 eta_b(3S) 0 0.00000000 eta_b2(1D) 613 10555 0.0 10.15700000 0.000000e+00 eta_b2(1D) 10555 0.00000000 eta_b2(2D) 836 110555 0.0 10.44100000 0.000000e+00 eta_b2(2D) 110555 0.00000000 Upsilon(1S) 387 553 0.0 9.46030000 1.218911e-20 Upsilon 553 0.00000000 Upsilon(2S) 831 100553 0.0 10.02326000 2.058199e-20 Upsilon(2S) 100553 0.00000000 Upsilon(3S) 844 200553 0.0 10.35520000 3.242425e-20 Upsilon(3S) 200553 0.00000000 Upsilon_1(1D) 766 30553 0.0 10.16370000 0.000000e+00 Upsilon_1(1D) 30553 0.00000000 Upsilon_1(2D) 839 130553 0.0 10.43490000 0.000000e+00 Upsilon_1(2D) 130553 0.00000000 Upsilon_2(1D) 696 20555 0.0 10.15620000 0.000000e+00 Upsilon_2(1D) 20555 0.00000000 Upsilon_2(2D) 838 120555 0.0 10.44060000 0.000000e+00 Upsilon_2(2D) 120555 0.00000000 Upsilon_3(1D) 389 557 0.0 10.15990000 0.000000e+00 Upsilon_3(1D) 557 0.00000000 Upsilon_3(2D) 833 100557 0.0 10.44430000 0.000000e+00 Upsilon_3(2D) 100557 0.00000000 Upsilon(4S) 849 300553 0.0 10.57940000 3.210791e-23 Upsilon(4S) 300553 0.00000000 Upsilon(10860) 852 9000553 0.0 10.87600000 1.196749e-23 Upsilon(5S) 0 0.00000000 Upsilon(11020) 854 9010553 0.0 11.01900000 8.331800e-24 unknown 0 0.00000000 chi_b0(1P) 611 10551 0.0 9.85944000 0.000000e+00 chi_b0 10551 0.00000000 chi_b0(2P) 834 110551 0.0 10.23250000 0.000000e+00 chi_b0(2P) 110551 0.00000000 chi_b0(3P) 846 210551 0.0 10.50040000 0.000000e+00 chi_b0(3P) 210551 0.00000000 chi_b1(3P) 848 220553 0.0 10.51570000 0.000000e+00 chi_b1(3P) 220553 0.00000000 chi_b1(1P) 695 20553 0.0 9.89278000 0.000000e+00 chi_b1 20553 0.00000000 chi_b1(2P) 837 120553 0.0 10.25546000 0.000000e+00 chi_b1(2P) 120553 0.00000000 chi_b2(1P) 388 555 0.0 9.91221000 0.000000e+00 chi_b2 555 0.00000000 chi_b2(2P) 832 100555 0.0 10.26865000 0.000000e+00 chi_b2(2P) 100555 0.00000000 chi_b2(3P) 845 200555 0.0 10.52620000 0.000000e+00 chi_b2(3P) 200555 0.00000000 h_b(1P) 612 10553 0.0 9.89930000 0.000000e+00 h_b 10553 0.00000000 h_b(2P) 835 110553 0.0 10.25500000 0.000000e+00 h_b(2P) 110553 0.00000000 h_b(3P) 847 210553 0.0 10.51600000 0.000000e+00 h_b(3P) 210553 0.00000000 n0 13 2112 0.0 0.93956538 8.803000e+02 n0 2112 0.00000000 n~0 25 -2112 0.0 0.93956538 8.803000e+02 anti-n0 -2112 0.00000000 p+ 14 2212 1.0 0.93827205 1.000000e+16 p+ 2212 0.00000000 p~- 15 -2212 -1.0 0.93827205 1.000000e+16 anti-p- -2212 0.00000000 N(1440)0 624 12112 0.0 1.43000000 2.194041e-24 N(1440)0 0 0.00000000 N(1440)~0 625 -12112 0.0 1.43000000 2.194041e-24 anti-N(1440)0 0 0.00000000 N(1440)+ 636 12212 1.0 1.43000000 2.194041e-24 N(1440)+ 0 0.00000000 N(1440)~- 637 -12212 -1.0 1.43000000 2.194041e-24 anti-N(1440)- 0 0.00000000 N(1520)0 404 1214 0.0 1.51500000 5.723584e-24 N(1520)0 0 0.00000000 N(1520)~0 405 -1214 0.0 1.51500000 5.723584e-24 anti-N(1520)0 0 0.00000000 N(1520)+ 420 2124 1.0 1.51500000 5.723584e-24 N(1520)+ 0 0.00000000 N(1520)~- 421 -2124 -1.0 1.51500000 5.723584e-24 anti-N(1520)- 0 0.00000000 N(1535)0 705 22112 0.0 1.53500000 4.388081e-24 N(1535)0 0 0.00000000 N(1535)~0 706 -22112 0.0 1.53500000 4.388081e-24 anti-N(1535)0 0 0.00000000 N(1535)+ 713 22212 1.0 1.53500000 4.388081e-24 N(1535)+ 0 0.00000000 N(1535)~- 714 -22212 -1.0 1.53500000 4.388081e-24 anti-N(1535)- 0 0.00000000 N(1650)0 771 32112 0.0 1.65500000 4.701514e-24 N(1650)0 0 0.00000000 N(1650)~0 772 -32112 0.0 1.65500000 4.701514e-24 anti-N(1650)0 0 0.00000000 N(1650)+ 777 32212 1.0 1.65500000 4.701514e-24 N(1650)+ 0 0.00000000 N(1650)~- 778 -32212 -1.0 1.65500000 4.701514e-24 anti-N(1650)- 0 0.00000000 N(1675)0 414 2116 0.0 1.67500000 4.388081e-24 N(1675)0 0 0.00000000 N(1675)~0 415 -2116 0.0 1.67500000 4.388081e-24 anti-N(1675)0 0 0.00000000 N(1675)+ 428 2216 1.0 1.67500000 4.388081e-24 N(1675)+ 0 0.00000000 N(1675)~- 429 -2216 -1.0 1.67500000 4.388081e-24 anti-N(1675)- 0 0.00000000 N(1680)0 628 12116 0.0 1.68500000 5.063171e-24 N(1680)0 0 0.00000000 N(1680)~0 629 -12116 0.0 1.68500000 5.063171e-24 anti-N(1680)0 0 0.00000000 N(1680)+ 640 12216 1.0 1.68500000 5.063171e-24 N(1680)+ 0 0.00000000 N(1680)~- 641 -12216 -1.0 1.68500000 5.063171e-24 anti-N(1680)- 0 0.00000000 N(1700)+ 711 22124 1.0 1.70000000 4.388081e-24 N(1700)+ 0 0.00000000 N(1700)~- 712 -22124 -1.0 1.70000000 4.388081e-24 anti-N(1700)- 0 0.00000000 N(1700)0 703 21214 0.0 1.70000000 4.388081e-24 N(1700)0 0 0.00000000 N(1700)~0 704 -21214 0.0 1.70000000 4.388081e-24 anti-N(1700)0 0 0.00000000 N(1710)0 791 42112 0.0 1.71000000 6.582122e-24 N(1710)0 0 0.00000000 N(1710)~0 792 -42112 0.0 1.71000000 6.582122e-24 anti-N(1710)0 0 0.00000000 N(1710)+ 795 42212 1.0 1.71000000 6.582122e-24 N(1710)+ 0 0.00000000 N(1710)~- 796 -42212 -1.0 1.71000000 6.582122e-24 anti-N(1710)- 0 0.00000000 N(1720)0 769 31214 0.0 1.72000000 2.632849e-24 N(1720)0 0 0.00000000 N(1720)~0 770 -31214 0.0 1.72000000 2.632849e-24 anti-N(1720)0 0 0.00000000 N(1720)+ 775 32124 1.0 1.72000000 2.632849e-24 N(1720)+ 0 0.00000000 N(1720)~- 776 -32124 -1.0 1.72000000 2.632849e-24 anti-N(1720)- 0 0.00000000 N(1900)0 789 41214 0.0 1.85000000 0.000000e+00 N(1900)0 0 0.00000000 N(1900)~0 790 -41214 0.0 1.85000000 0.000000e+00 anti-N(1900)0 0 0.00000000 N(1900)+ 793 42124 1.0 1.85000000 0.000000e+00 N(1900)+ 0 0.00000000 N(1900)~- 794 -42124 -1.0 1.85000000 0.000000e+00 anti-N(1900)- 0 0.00000000 N(1990)0 630 12118 0.0 1.95000000 0.000000e+00 N(1990)0 0 0.00000000 N(1990)~0 631 -12118 0.0 1.95000000 0.000000e+00 anti-N(1990)0 0 0.00000000 N(1990)+ 642 12218 1.0 1.95000000 0.000000e+00 N(1990)+ 0 0.00000000 N(1990)~- 643 -12218 -1.0 1.95000000 0.000000e+00 anti-N(1990)- 0 0.00000000 N(2090)0 799 52114 0.0 2.00000000 0.000000e+00 N(2090)0 0 0.00000000 N(2090)~0 800 -52114 0.0 2.00000000 0.000000e+00 anti-N(2090)0 0 0.00000000 N(2090)+ 801 52214 1.0 2.00000000 0.000000e+00 N(2090)+ 0 0.00000000 N(2090)~- 802 -52214 -1.0 2.00000000 0.000000e+00 anti-N(2090)- 0 0.00000000 N(2190)0 408 1218 0.0 2.19000000 1.316424e-24 N(2190)0 0 0.00000000 N(2190)~0 409 -1218 0.0 2.19000000 1.316424e-24 anti-N(2190)0 0 0.00000000 N(2190)+ 424 2128 1.0 2.19000000 1.316424e-24 N(2190)+ 0 0.00000000 N(2190)~- 425 -2128 -1.0 2.19000000 1.316424e-24 anti-N(2190)- 0 0.00000000 Delta- 182 1114 -1.0 1.23200000 5.625745e-24 Delta- 1114 0.00000000 Delta~+ 186 -1114 1.0 1.23200000 5.625745e-24 anti-Delta+ -1114 0.00000000 Delta0 181 2114 0.0 1.23200000 5.625745e-24 Delta0 2114 0.00000000 Delta~0 185 -2114 0.0 1.23200000 5.625745e-24 anti-Delta0 -2114 0.00000000 Delta+ 180 2214 1.0 1.23200000 5.625745e-24 Delta+ 2214 0.00000000 Delta~- 184 -2214 -1.0 1.23200000 5.625745e-24 anti-Delta- -2214 0.00000000 Delta++ 179 2224 2.0 1.23200000 5.625745e-24 Delta++ 2224 0.00000000 Delta~-- 183 -2224 -2.0 1.23200000 5.625745e-24 anti-Delta-- -2224 0.00000000 Delta(1600)- 767 31114 -1.0 1.60000000 2.056913e-24 Delta(1600)- 0 0.00000000 Delta(1600)~+ 768 -31114 1.0 1.60000000 2.056913e-24 anti-Delta(1600)+ 0 0.00000000 Delta(1600)0 773 32114 0.0 1.60000000 2.056913e-24 Delta(1600)0 0 0.00000000 Delta(1600)~0 774 -32114 0.0 1.60000000 2.056913e-24 anti-Delta(1600)0 0 0.00000000 Delta(1600)+ 779 32214 1.0 1.60000000 2.056913e-24 Delta(1600)+ 0 0.00000000 Delta(1600)~- 780 -32214 -1.0 1.60000000 2.056913e-24 anti-Delta(1600)- 0 0.00000000 Delta(1600)++ 781 32224 2.0 1.60000000 2.056913e-24 Delta(1600)++ 0 0.00000000 Delta(1600)~-- 782 -32224 -2.0 1.60000000 2.056913e-24 anti-Delta(1600)-- 0 0.00000000 Delta(1620)- 396 1112 -1.0 1.63000000 4.701516e-24 Delta(1620)- 0 0.00000000 Delta(1620)~+ 397 -1112 1.0 1.63000000 4.701516e-24 anti-Delta(1620)+ 0 0.00000000 Delta(1620)0 402 1212 0.0 1.63000000 4.701516e-24 Delta(1620)0 0 0.00000000 Delta(1620)~0 403 -1212 0.0 1.63000000 4.701516e-24 anti-Delta(1620)0 0 0.00000000 Delta(1620)+ 418 2122 1.0 1.63000000 4.701516e-24 Delta(1620)+ 0 0.00000000 Delta(1620)~- 419 -2122 -1.0 1.63000000 4.701516e-24 anti-Delta(1620)- 0 0.00000000 Delta(1620)++ 432 2222 2.0 1.63000000 4.701516e-24 Delta(1620)++ 0 0.00000000 Delta(1620)~-- 433 -2222 -2.0 1.63000000 4.701516e-24 anti-Delta(1620)-- 0 0.00000000 Delta(1700)- 616 11114 -1.0 1.70000000 2.194041e-24 Delta(1700)- 0 0.00000000 Delta(1700)~+ 617 -11114 1.0 1.70000000 2.194041e-24 anti-Delta(1700)+ 0 0.00000000 Delta(1700)0 626 12114 0.0 1.70000000 2.194041e-24 Delta(1700)0 0 0.00000000 Delta(1700)~0 627 -12114 0.0 1.70000000 2.194041e-24 anti-Delta(1700)0 0 0.00000000 Delta(1700)+ 638 12214 1.0 1.70000000 2.194041e-24 Delta(1700)+ 0 0.00000000 Delta(1700)~- 639 -12214 -1.0 1.70000000 2.194041e-24 anti-Delta(1700)- 0 0.00000000 Delta(1700)++ 646 12224 2.0 1.70000000 2.194041e-24 Delta(1700)++ 0 0.00000000 Delta(1700)~-- 647 -12224 -2.0 1.70000000 2.194041e-24 anti-Delta(1700)-- 0 0.00000000 Delta(1900)- 614 11112 -1.0 1.84000000 0.000000e+00 Delta(1900)- 0 0.00000000 Delta(1900)~+ 615 -11112 1.0 1.84000000 0.000000e+00 anti-Delta(1900)+ 0 0.00000000 Delta(1900)0 620 11212 0.0 1.93000000 1.880606e-24 Delta(1900)0 0 0.00000000 Delta(1900)~0 621 -11212 0.0 1.93000000 1.880606e-24 anti-Delta(1900)0 0 0.00000000 Delta(1900)+ 632 12122 1.0 1.84000000 0.000000e+00 Delta(1900)+ 0 0.00000000 Delta(1900)~- 633 -12122 -1.0 1.84000000 0.000000e+00 anti-Delta(1900)- 0 0.00000000 Delta(1900)++ 644 12222 2.0 1.84000000 0.000000e+00 Delta(1900)++ 0 0.00000000 Delta(1900)~-- 645 -12222 -2.0 1.84000000 0.000000e+00 anti-Delta(1900)-- 0 0.00000000 Delta(1905)- 398 1116 -1.0 1.88000000 1.994582e-24 Delta(1905)- 0 0.00000000 Delta(1905)~+ 399 -1116 1.0 1.88000000 1.994582e-24 anti-Delta(1905)+ 0 0.00000000 Delta(1905)0 406 1216 0.0 1.88000000 1.994582e-24 Delta(1905)0 0 0.00000000 Delta(1905)~0 407 -1216 0.0 1.88000000 1.994582e-24 anti-Delta(1905)0 0 0.00000000 Delta(1905)+ 422 2126 1.0 1.88000000 1.994582e-24 Delta(1905)+ 0 0.00000000 Delta(1905)~- 423 -2126 -1.0 1.88000000 1.994582e-24 anti-Delta(1905)- 0 0.00000000 Delta(1905)++ 434 2226 2.0 1.88000000 1.994582e-24 Delta(1905)++ 0 0.00000000 Delta(1905)~-- 435 -2226 -2.0 1.88000000 1.994582e-24 anti-Delta(1905)-- 0 0.00000000 Delta(1910)- 697 21112 -1.0 1.89000000 2.350758e-24 Delta(1910)- 0 0.00000000 Delta(1910)~+ 698 -21112 1.0 1.89000000 2.350758e-24 anti-Delta(1910)+ 0 0.00000000 Delta(1910)0 701 21212 0.0 1.89000000 2.350758e-24 Delta(1910)0 0 0.00000000 Delta(1910)~0 702 -21212 0.0 1.89000000 2.350758e-24 anti-Delta(1910)0 0 0.00000000 Delta(1910)+ 709 22122 1.0 1.89000000 2.350758e-24 Delta(1910)+ 0 0.00000000 Delta(1910)~- 710 -22122 -1.0 1.89000000 2.350758e-24 anti-Delta(1910)- 0 0.00000000 Delta(1910)++ 717 22222 2.0 1.89000000 2.350758e-24 Delta(1910)++ 0 0.00000000 Delta(1910)~-- 718 -22222 -2.0 1.89000000 2.350758e-24 anti-Delta(1910)-- 0 0.00000000 Delta(1920)- 699 21114 -1.0 1.92000000 2.531585e-24 Delta(1920)- 0 0.00000000 Delta(1920)~+ 700 -21114 1.0 1.92000000 2.531585e-24 anti-Delta(1920)+ 0 0.00000000 Delta(1920)0 707 22114 0.0 1.92000000 2.531585e-24 Delta(1920)0 0 0.00000000 Delta(1920)~0 708 -22114 0.0 1.92000000 2.531585e-24 anti-Delta(1920)0 0 0.00000000 Delta(1920)+ 715 22214 1.0 1.92000000 2.531585e-24 Delta(1920)+ 0 0.00000000 Delta(1920)~- 716 -22214 -1.0 1.92000000 2.531585e-24 anti-Delta(1920)- 0 0.00000000 Delta(1920)++ 719 22224 2.0 1.92000000 2.531585e-24 Delta(1920)++ 0 0.00000000 Delta(1920)~-- 720 -22224 -2.0 1.92000000 2.531585e-24 anti-Delta(1920)-- 0 0.00000000 Delta(1930)- 618 11116 -1.0 1.95000000 1.828367e-24 Delta(1930)- 0 0.00000000 Delta(1930)~+ 619 -11116 1.0 1.95000000 1.828367e-24 anti-Delta(1930)+ 0 0.00000000 Delta(1930)0 622 11216 0.0 1.95000000 1.828367e-24 Delta(1930)0 0 0.00000000 Delta(1930)~0 623 -11216 0.0 1.95000000 1.828367e-24 anti-Delta(1930)0 0 0.00000000 Delta(1930)+ 634 12126 1.0 1.95000000 1.828367e-24 Delta(1930)+ 0 0.00000000 Delta(1930)~- 635 -12126 -1.0 1.95000000 1.828367e-24 anti-Delta(1930)- 0 0.00000000 Delta(1930)++ 648 12226 2.0 1.95000000 1.828367e-24 Delta(1930)++ 0 0.00000000 Delta(1930)~-- 649 -12226 -2.0 1.95000000 1.828367e-24 anti-Delta(1930)-- 0 0.00000000 Delta(1950)- 400 1118 -1.0 1.93000000 2.350758e-24 Delta(1950)- 0 0.00000000 Delta(1950)~+ 401 -1118 1.0 1.93000000 2.350758e-24 anti-Delta(1950)+ 0 0.00000000 Delta(1950)0 416 2118 0.0 1.93000000 2.350758e-24 Delta(1950)0 0 0.00000000 Delta(1950)~0 417 -2118 0.0 1.93000000 2.350758e-24 anti-Delta(1950)0 0 0.00000000 Delta(1950)+ 430 2218 1.0 1.93000000 2.350758e-24 Delta(1950)+ 0 0.00000000 Delta(1950)~- 431 -2218 -1.0 1.93000000 2.350758e-24 anti-Delta(1950)- 0 0.00000000 Delta(1950)++ 436 2228 2.0 1.93000000 2.350758e-24 Delta(1950)++ 0 0.00000000 Delta(1950)~-- 437 -2228 -2.0 1.93000000 2.350758e-24 anti-Delta(1950)-- 0 0.00000000 Lambda0 18 3122 0.0 1.11568300 2.632000e-10 Lambda0 3122 0.00000000 Lambda~0 26 -3122 0.0 1.11568300 2.632000e-10 anti-Lambda0 -3122 0.00000000 Lambda(1405)0 656 13122 0.0 1.40510000 1.316424e-23 Lambda(1405)0 0 0.00000000 Lambda(1405)~0 657 -13122 0.0 1.40510000 1.316424e-23 anti-Lambda(1405)0 0 0.00000000 Lambda(1520)0 448 3124 0.0 1.51950000 4.219309e-23 Lambda(1520)0 0 0.00000000 Lambda(1520)~0 449 -3124 0.0 1.51950000 4.219309e-23 anti-Lambda(1520)0 0 0.00000000 Lambda(1600)0 725 23122 0.0 1.60000000 4.388081e-24 Lambda(1600)0 0 0.00000000 Lambda(1600)~0 726 -23122 0.0 1.60000000 4.388081e-24 anti-Lambda(1600)0 0 0.00000000 Lambda(1670)0 783 33122 0.0 1.67000000 1.880606e-23 Lambda(1670)0 0 0.00000000 Lambda(1670)~0 784 -33122 0.0 1.67000000 1.880606e-23 anti-Lambda(1670)0 0 0.00000000 Lambda(1690)0 658 13124 0.0 1.69000000 1.097020e-23 Lambda(1690)0 0 0.00000000 Lambda(1690)~0 659 -13124 0.0 1.69000000 1.097020e-23 anti-Lambda(1690)0 0 0.00000000 Lambda(1800)0 797 43122 0.0 1.80000000 2.194041e-24 Lambda(1800)0 0 0.00000000 Lambda(1800)~0 798 -43122 0.0 1.80000000 2.194041e-24 anti-Lambda(1800)0 0 0.00000000 Lambda(1810)0 803 53122 0.0 1.81000000 4.388081e-24 Lambda(1810)0 0 0.00000000 Lambda(1810)~0 804 -53122 0.0 1.81000000 4.388081e-24 anti-Lambda(1810)0 0 0.00000000 Lambda(1820)0 450 3126 0.0 1.82000000 8.227652e-24 Lambda(1820)0 0 0.00000000 Lambda(1820)~0 451 -3126 0.0 1.82000000 8.227652e-24 anti-Lambda(1820)0 0 0.00000000 Lambda(1830)0 660 13126 0.0 1.83000000 6.928549e-24 Lambda(1830)0 0 0.00000000 Lambda(1830)~0 661 -13126 0.0 1.83000000 6.928549e-24 anti-Lambda(1830)0 0 0.00000000 Lambda(1890)0 727 23124 0.0 1.89000000 6.582122e-24 Lambda(1890)0 0 0.00000000 Lambda(1890)~0 728 -23124 0.0 1.89000000 6.582122e-24 anti-Lambda(1890)0 0 0.00000000 Lambda(2100)0 452 3128 0.0 2.10000000 3.291061e-24 unknown 0 0.00000000 Lambda(2100)~0 453 -3128 0.0 2.10000000 3.291061e-24 unknown 0 0.00000000 Lambda(2110)0 729 23126 0.0 2.11000000 3.291061e-24 unknown 0 0.00000000 Lambda(2110)~0 730 -23126 0.0 2.11000000 3.291061e-24 unknown 0 0.00000000 Sigma- 21 3112 -1.0 1.19744900 1.479000e-10 Sigma- 3112 0.00000000 Sigma~+ 29 -3112 1.0 1.19744900 1.479000e-10 anti-Sigma+ -3112 0.00000000 Sigma0 20 3212 0.0 1.19264200 7.400000e-20 Sigma0 3212 0.00000000 Sigma~0 28 -3212 0.0 1.19264200 7.400000e-20 anti-Sigma0 -3212 0.00000000 Sigma+ 19 3222 1.0 1.18937000 8.018000e-11 Sigma+ 3222 0.00000000 Sigma~- 27 -3222 -1.0 1.18937000 8.018000e-11 anti-Sigma- -3222 0.00000000 Sigma*- 442 3114 -1.0 1.38720000 1.670589e-23 Sigma*- 3114 0.00000000 Sigma*~+ 443 -3114 1.0 1.38720000 1.670589e-23 anti-Sigma*+ -3114 0.00000000 Sigma*0 458 3214 0.0 1.38370000 1.828367e-23 Sigma*0 3214 0.00000000 Sigma*~0 459 -3214 0.0 1.38370000 1.828367e-23 anti-Sigma*0 -3214 0.00000000 Sigma*+ 464 3224 1.0 1.38280000 1.828367e-23 Sigma*+ 3224 0.00000000 Sigma*~- 465 -3224 -1.0 1.38280000 1.828367e-23 anti-Sigma*- -3224 0.00000000 Sigma(1660)- 650 13112 -1.0 1.66000000 6.582122e-24 Sigma(1660)- 0 0.00000000 Sigma(1660)~+ 651 -13112 1.0 1.66000000 6.582122e-24 anti-Sigma(1660)+ 0 0.00000000 Sigma(1660)0 662 13212 0.0 1.66000000 6.582122e-24 Sigma(1660)0 0 0.00000000 Sigma(1660)~0 663 -13212 0.0 1.66000000 6.582122e-24 anti-Sigma(1660)0 0 0.00000000 Sigma(1660)+ 668 13222 1.0 1.66000000 6.582122e-24 Sigma(1660)+ 0 0.00000000 Sigma(1660)~- 669 -13222 -1.0 1.66000000 6.582122e-24 anti-Sigma(1660)- 0 0.00000000 Sigma(1670)- 652 13114 -1.0 1.67000000 1.097020e-23 Sigma(1670)- 0 0.00000000 Sigma(1670)~+ 653 -13114 1.0 1.67000000 1.097020e-23 anti-Sigma(1670)+ 0 0.00000000 Sigma(1670)0 664 13214 0.0 1.67000000 1.097020e-23 Sigma(1670)0 0 0.00000000 Sigma(1670)~0 665 -13214 0.0 1.67000000 1.097020e-23 anti-Sigma(1670)0 0 0.00000000 Sigma(1670)+ 670 13224 1.0 1.67000000 1.097020e-23 Sigma(1670)+ 0 0.00000000 Sigma(1670)~- 671 -13224 -1.0 1.67000000 1.097020e-23 anti-Sigma(1670)- 0 0.00000000 Sigma(1750)- 721 23112 -1.0 1.75000000 7.313469e-24 Sigma(1750)- 0 0.00000000 Sigma(1750)~+ 722 -23112 1.0 1.75000000 7.313469e-24 anti-Sigma(1750)+ 0 0.00000000 Sigma(1750)0 731 23212 0.0 1.75000000 7.313469e-24 Sigma(1750)0 0 0.00000000 Sigma(1750)~0 732 -23212 0.0 1.75000000 7.313469e-24 anti-Sigma(1750)0 0 0.00000000 Sigma(1750)+ 735 23222 1.0 1.75000000 7.313469e-24 Sigma(1750)+ 0 0.00000000 Sigma(1750)~- 736 -23222 -1.0 1.75000000 7.313469e-24 anti-Sigma(1750)- 0 0.00000000 Sigma(1775)- 444 3116 -1.0 1.77500000 5.485102e-24 Sigma(1775)- 0 0.00000000 Sigma(1775)~+ 445 -3116 1.0 1.77500000 5.485102e-24 anti-Sigma(1775)+ 0 0.00000000 Sigma(1775)0 460 3216 0.0 1.77500000 5.485102e-24 Sigma(1775)0 0 0.00000000 Sigma(1775)~0 461 -3216 0.0 1.77500000 5.485102e-24 anti-Sigma(1775)0 0 0.00000000 Sigma(1775)+ 466 3226 1.0 1.77500000 5.485102e-24 Sigma(1775)+ 0 0.00000000 Sigma(1775)~- 467 -3226 -1.0 1.77500000 5.485102e-24 anti-Sigma(1775)- 0 0.00000000 Sigma(1915)- 654 13116 -1.0 1.91500000 5.485102e-24 Sigma(1915)- 0 0.00000000 Sigma(1915)~+ 655 -13116 1.0 1.91500000 5.485102e-24 anti-Sigma(1915)+ 0 0.00000000 Sigma(1915)0 666 13216 0.0 1.91500000 5.485102e-24 Sigma(1915)0 0 0.00000000 Sigma(1915)~0 667 -13216 0.0 1.91500000 5.485102e-24 anti-Sigma(1915)0 0 0.00000000 Sigma(1915)+ 672 13226 1.0 1.91500000 5.485102e-24 Sigma(1915)+ 0 0.00000000 Sigma(1915)~- 673 -13226 -1.0 1.91500000 5.485102e-24 anti-Sigma(1915)- 0 0.00000000 Sigma(1940)- 723 23114 -1.0 1.94000000 2.991874e-24 Sigma(1940)- 0 0.00000000 Sigma(1940)~+ 724 -23114 1.0 1.94000000 2.991874e-24 anti-Sigma(1940)+ 0 0.00000000 Sigma(1940)0 733 23214 0.0 1.94000000 2.991874e-24 Sigma(1940)0 0 0.00000000 Sigma(1940)~0 734 -23214 0.0 1.94000000 2.991874e-24 anti-Sigma(1940)0 0 0.00000000 Sigma(1940)+ 737 23224 1.0 1.94000000 2.991874e-24 Sigma(1940)+ 0 0.00000000 Sigma(1940)~- 738 -23224 -1.0 1.94000000 2.991874e-24 anti-Sigma(1940)- 0 0.00000000 Sigma(2030)0 462 3218 0.0 2.03000000 3.656734e-24 unknown 0 0.00000000 Sigma(2030)~0 463 -3218 0.0 2.03000000 3.656734e-24 unknown 0 0.00000000 Sigma(2030)+ 468 3228 1.0 2.03000000 3.656734e-24 unknown 0 0.00000000 Sigma(2030)~- 469 -3228 -1.0 2.03000000 3.656734e-24 unknown 0 0.00000000 Sigma(2030)- 446 3118 -1.0 2.03000000 3.656734e-24 unknown 0 0.00000000 Sigma(2030)~+ 447 -3118 1.0 2.03000000 3.656734e-24 unknown 0 0.00000000 Sigma(2250)0 1059 103212 0.0 2.25000000 6.580000e-24 Sigma(2250)0 0 0.00000000 Sigma(2250)~0 1060 -103212 0.0 2.25000000 6.580000e-24 anti-Sigma(2250)0 0 0.00000000 Sigma(2250)+ 1061 103222 1.0 2.25000000 6.580000e-24 Sigma(2250)+ 0 0.00000000 Sigma(2250)~- 1062 -103222 -1.0 2.25000000 6.580000e-24 anti-Sigma(2250)- 0 0.00000000 Sigma(2250)- 1063 103112 -1.0 2.25000000 6.580000e-24 Sigma(2250)- 0 0.00000000 Sigma(2250)~+ 1064 -103112 1.0 2.25000000 6.580000e-24 anti-Sigma(2250)+ 0 0.00000000 Xi- 23 3312 -1.0 1.32171000 1.639000e-10 Xi- 3312 0.00000000 Xi~+ 31 -3312 1.0 1.32171000 1.639000e-10 anti-Xi+ -3312 0.00000000 Xi0 22 3322 0.0 1.31486000 2.900000e-10 Xi0 3322 0.00000000 Xi~0 30 -3322 0.0 1.31486000 2.900000e-10 anti-Xi0 -3322 0.00000000 Xi*- 472 3314 -1.0 1.53500000 6.648608e-23 Xi*- 3314 0.00000000 Xi*~+ 473 -3314 1.0 1.53500000 6.648608e-23 anti-Xi*+ -3314 0.00000000 Xi*0 474 3324 0.0 1.53180000 7.233101e-23 Xi*0 3324 0.00000000 Xi*~0 475 -3324 0.0 1.53180000 7.233101e-23 anti-Xi*0 -3324 0.00000000 Xi(1690)- 1033 203312 -1.0 1.69000000 0.000000e+00 Xi(1690)- 0 0.00000000 Xi(1690)~+ 1034 -203312 1.0 1.69000000 0.000000e+00 anti-Xi(1690)+ 0 0.00000000 Xi(1690)0 1035 203322 0.0 1.69000000 0.000000e+00 Xi(1690)0 0 0.00000000 Xi(1690)~0 1036 -203322 0.0 1.69000000 0.000000e+00 anti-Xi(1690)0 0 0.00000000 Xi(1820)- 674 13314 -1.0 1.82300000 2.742551e-23 unknown 0 0.00000000 Xi(1820)~+ 675 -13314 1.0 1.82300000 2.742551e-23 unknown 0 0.00000000 Xi(1820)0 678 13324 0.0 1.82300000 2.742551e-23 unknown 0 0.00000000 Xi(1820)~0 679 -13324 0.0 1.82300000 2.742551e-23 unknown 0 0.00000000 Xi(1950)- 1037 103316 -1.0 1.95000000 1.097020e-23 Xi(1950)- 0 0.00000000 Xi(1950)~+ 1038 -103316 1.0 1.95000000 1.097020e-23 anti-Xi(1950)+ 0 0.00000000 Xi(1950)0 1039 103326 0.0 1.95000000 1.097020e-23 Xi(1950)0 0 0.00000000 Xi(1950)~0 1040 -103326 0.0 1.95000000 1.097020e-23 anti-Xi(1950)0 0 0.00000000 Xi(2030)- 1041 203316 -1.0 2.02500000 3.291061e-23 Xi(2030)- 0 0.00000000 Xi(2030)~+ 1042 -203316 1.0 2.02500000 3.291061e-23 anti-Xi(2030)+ 0 0.00000000 Xi(2030)0 1043 203326 0.0 2.02500000 3.291061e-23 Xi(2030)0 0 0.00000000 Xi(2030)~0 1044 -203326 0.0 2.02500000 3.291061e-23 anti-Xi(2030)0 0 0.00000000 Omega- 24 3334 -1.0 1.67245000 8.210000e-11 Omega- 3334 0.00000000 Omega~+ 32 -3334 1.0 1.67245000 8.210000e-11 anti-Omega+ -3334 0.00000000 Omega(2250)- 1045 203338 -1.0 2.25200000 1.196749e-23 Omega(2250)- 0 0.00000000 Omega(2250)~+ 1046 -203338 1.0 2.25200000 1.196749e-23 anti-Omega(2250)+ 0 0.00000000 Lambda_c+ 62 4122 1.0 2.28646000 2.000000e-13 Lambda_c+ 4122 0.00000000 Lambda_c~- 63 -4122 -1.0 2.28646000 2.000000e-13 anti-Lambda_c- -4122 0.00000000 Lambda_c(2595)+ 682 14122 1.0 2.59225000 2.531585e-22 Lambda_c(2593)+ 0 0.00000000 Lambda_c(2595)~- 683 -14122 -1.0 2.59225000 2.531585e-22 anti-Lambda_c(2593)- 0 0.00000000 Lambda_c(2625)+ 1047 104124 1.0 2.62811000 0.000000e+00 Lambda_c(2625)+ 0 0.00000000 Lambda_c(2625)~- 1048 -104124 -1.0 2.62811000 0.000000e+00 anti-Lambda_c(2625)- 0 0.00000000 Lambda_c(2880)+ 1049 204126 1.0 2.88153000 1.134849e-22 Lambda_c(2880)+ 0 0.00000000 Lambda_c(2880)~- 1050 -204126 -1.0 2.88153000 1.134849e-22 anti-Lambda_c(2880)- 0 0.00000000 Sigma_c0 81 4112 0.0 2.45374000 3.047279e-22 Sigma_c0 4112 0.00000000 Sigma_c~0 82 -4112 0.0 2.45374000 3.047279e-22 anti-Sigma_c0 -4112 0.00000000 Sigma_c+ 83 4212 1.0 2.45290000 3.999999e-22 Sigma_c+ 4212 0.00000000 Sigma_c~- 84 -4212 -1.0 2.45290000 3.999999e-22 anti-Sigma_c- -4212 0.00000000 Sigma_c++ 85 4222 2.0 2.45398000 2.912443e-22 Sigma_c++ 4222 0.00000000 Sigma_c~-- 86 -4222 -2.0 2.45398000 2.912443e-22 anti-Sigma_c-- -4222 0.00000000 Sigma_c*0 480 4114 0.0 2.51880000 4.539394e-23 Sigma_c*0 4114 0.00000000 Sigma_c*~0 481 -4114 0.0 2.51880000 4.539394e-23 anti-Sigma_c*0 -4114 0.00000000 Sigma_c*+ 486 4214 1.0 2.51750000 3.291061e-22 Sigma_c*+ 4214 0.00000000 Sigma_c*~- 487 -4214 -1.0 2.51750000 3.291061e-22 anti-Sigma_c*- -4214 0.00000000 Sigma_c*++ 488 4224 2.0 2.51790000 4.417531e-23 Sigma_c*++ 4224 0.00000000 Sigma_c*~-- 489 -4224 -2.0 2.51790000 4.417531e-23 anti-Sigma_c*-- -4224 0.00000000 Xi_c0 106 4132 0.0 2.47088000 1.120000e-13 Xi_c0 4132 0.00000000 Xi_c~0 107 -4132 0.0 2.47088000 1.120000e-13 anti-Xi_c0 -4132 0.00000000 Xi_c+ 108 4232 1.0 2.46780000 4.420000e-13 Xi_c+ 4232 0.00000000 Xi_c~- 109 -4232 -1.0 2.46780000 4.420000e-13 anti-Xi_c- -4232 0.00000000 Xi'_c0 100 4312 0.0 2.57790000 0.000000e+00 Xi'_c0 4312 0.00000000 Xi'_c~0 101 -4312 0.0 2.57790000 0.000000e+00 anti-Xi'_c0 -4312 0.00000000 Xi'_c+ 102 4322 1.0 2.57560000 0.000000e+00 Xi'_c+ 4322 0.00000000 Xi'_c~- 103 -4322 -1.0 2.57560000 0.000000e+00 anti-Xi'_c- -4322 0.00000000 Xi_c*0 494 4314 0.0 2.64590000 0.000000e+00 Xi_c*0 4314 0.00000000 Xi_c*~0 495 -4314 0.0 2.64590000 0.000000e+00 anti-Xi_c*0 -4314 0.00000000 Xi_c*+ 496 4324 1.0 2.64590000 0.000000e+00 Xi_c*+ 4324 0.00000000 Xi_c*~- 497 -4324 -1.0 2.64590000 0.000000e+00 anti-Xi_c*- -4324 0.00000000 Xi_c(2790)+ 1051 104324 1.0 2.78910000 0.000000e+00 Xi_c(2790)+ 0 0.00000000 Xi_c(2790)~- 1052 -104324 -1.0 2.78910000 0.000000e+00 anti-Xi_c(2790)- 0 0.00000000 Xi_c(2790)0 1053 104314 0.0 2.79180000 0.000000e+00 Xi_c(2790)0 0 0.00000000 Xi_c(2790)~0 1054 -104314 0.0 2.79180000 0.000000e+00 anti-Xi_c(2790)0 0 0.00000000 Xi_c(2815)+ 1055 104322 1.0 2.81660000 0.000000e+00 Xi_c(2815)+ 0 0.00000000 Xi_c(2815)~- 1056 -104322 -1.0 2.81660000 0.000000e+00 anti-Xi_c(2815)- 0 0.00000000 Xi_c(2815)0 1057 104312 0.0 2.81960000 0.000000e+00 Xi_c(2815)0 0 0.00000000 Xi_c(2815)~0 1058 -104312 0.0 2.81960000 0.000000e+00 anti-Xi_c(2815)0 0 0.00000000 Omega_c0 104 4332 0.0 2.69520000 6.900000e-14 Omega_c0 4332 0.00000000 Omega_c~0 105 -4332 0.0 2.69520000 6.900000e-14 anti-Omega_c0 -4332 0.00000000 Omega_c*0 498 4334 0.0 2.76590000 0.000000e+00 Omega_c*0 4334 0.00000000 Omega_c*~0 499 -4334 0.0 2.76590000 0.000000e+00 anti-Omega_c*0 -4334 0.00000000 Xi_cc+ 502 4412 1.0 3.62140000 3.335641e-13 Xi_cc+ 4412 0.00000000 Xi_cc~- 503 -4412 -1.0 3.62140000 3.335641e-13 anti-Xi_cc- -4412 0.00000000 Xi*_cc+ 504 4414 1.0 3.65648000 0.000000e+00 Xi_cc*+ 4414 0.00000000 Xi*_cc~- 505 -4414 -1.0 3.65648000 0.000000e+00 anti-Xi_cc*- -4414 0.00000000 Xi_cc++ 506 4422 2.0 3.62140000 3.335641e-13 Xi_cc++ 4422 0.00000000 Xi_cc~-- 507 -4422 -2.0 3.62140000 3.335641e-13 anti-Xi_cc-- -4422 0.00000000 Xi*_cc++ 508 4424 2.0 3.65648000 0.000000e+00 Xi_cc*++ 4424 0.00000000 Xi*_cc~-- 509 -4424 -2.0 3.65648000 0.000000e+00 anti-Xi_cc*-- -4424 0.00000000 Omega_cc+ 510 4432 1.0 3.78663000 3.335641e-13 Omega_cc+ 4432 0.00000000 Omega_cc~- 511 -4432 -1.0 3.78663000 3.335641e-13 anti-Omega_cc- -4432 0.00000000 Omega*_cc+ 512 4434 1.0 3.82466000 0.000000e+00 Omega_cc*+ 4434 0.00000000 Omega*_cc~- 513 -4434 -1.0 3.82466000 0.000000e+00 anti-Omega_cc*- -4434 0.00000000 Omega*_ccc++ 514 4444 2.0 4.91594000 0.000000e+00 unknown 4444 0.00000000 Omega*_ccc~-- 515 -4444 -2.0 4.91594000 0.000000e+00 unknown -4444 0.00000000 Lambda_b0 79 5122 0.0 5.61950000 1.451000e-12 Lambda_b0 5122 0.00000000 Lambda_b~0 80 -5122 0.0 5.61950000 1.451000e-12 anti-Lambda_b0 -5122 0.00000000 Lambda_b(5912)0 1065 15122 0.0 5.91197000 1.316000e-21 Lambda_b(5912)0 15122 0.00000000 Lambda_b(5912)~0 1066 -15122 0.0 5.91197000 1.316000e-21 anti-Lambda_b(5912)0 -15122 0.00000000 Lambda_b(5920)0 1067 5124 0.0 5.91977000 1.316000e-21 Lambda_b(5920)0 5124 0.00000000 Lambda_b(5920)~0 1068 -5124 0.0 5.91977000 1.316000e-21 anti-Lambda_b(5920)0 -5124 0.00000000 Sigma_b- 114 5112 -1.0 5.81550000 1.343290e-22 Sigma_b- 5112 0.00000000 Sigma_b~+ 115 -5112 1.0 5.81550000 1.343290e-22 anti-Sigma_b+ -5112 0.00000000 Sigma_b0 112 5212 0.0 5.80780000 1.000000e-19 Sigma_b0 5212 0.00000000 Sigma_b~0 113 -5212 0.0 5.80780000 1.000000e-19 anti-Sigma_b0 -5212 0.00000000 Sigma_b+ 110 5222 1.0 5.81130000 6.785693e-23 Sigma_b+ 5222 0.00000000 Sigma_b~- 111 -5222 -1.0 5.81130000 6.785693e-23 anti-Sigma_b- -5222 0.00000000 Sigma_b*- 520 5114 -1.0 5.83510000 8.776160e-23 Sigma_b*- 5114 0.00000000 Sigma_b*~+ 521 -5114 1.0 5.83510000 8.776160e-23 anti-Sigma_b*+ -5114 0.00000000 Sigma_b*0 528 5214 0.0 5.82900000 0.000000e+00 Sigma_b*0 5214 0.00000000 Sigma_b*~0 529 -5214 0.0 5.82900000 0.000000e+00 anti-Sigma_b*0 -5214 0.00000000 Sigma_b*+ 530 5224 1.0 5.83210000 5.723583e-23 Sigma_b*+ 5224 0.00000000 Sigma_b*~- 531 -5224 -1.0 5.83210000 5.723583e-23 anti-Sigma_b*- -5224 0.00000000 Xi_b- 122 5132 -1.0 5.79490000 1.560000e-12 Xi_b- 5132 0.00000000 Xi_b~+ 123 -5132 1.0 5.79490000 1.560000e-12 anti-Xi_b+ -5132 0.00000000 Xi_b0 124 5232 0.0 5.79310000 1.490000e-12 Xi_b0 5232 0.00000000 Xi_b~0 125 -5232 0.0 5.79310000 1.490000e-12 anti-Xi_b0 -5232 0.00000000 Xi'_b- 116 5312 -1.0 5.96000000 1.000000e-19 Xi'_b- 5312 0.00000000 Xi'_b~+ 117 -5312 1.0 5.96000000 1.000000e-19 anti-Xi'_b+ -5312 0.00000000 Xi'_b0 118 5322 0.0 5.96000000 1.000000e-19 Xi'_b0 5322 0.00000000 Xi'_b~0 119 -5322 0.0 5.96000000 1.000000e-19 anti-Xi'_b0 -5322 0.00000000 Xi_b*- 538 5314 -1.0 5.97000000 0.000000e+00 Xi_b*- 5314 0.00000000 Xi_b*~+ 539 -5314 1.0 5.97000000 0.000000e+00 anti-Xi_b*+ -5314 0.00000000 Xi_b*0 540 5324 0.0 5.97000000 0.000000e+00 Xi_b*0 5324 0.00000000 Xi_b*~0 541 -5324 0.0 5.97000000 0.000000e+00 anti-Xi_b*0 -5324 0.00000000 Omega_b*- 542 5334 -1.0 6.13000000 0.000000e+00 Omega_b*- 5334 0.00000000 Omega_b*~+ 543 -5334 1.0 6.13000000 0.000000e+00 anti-Omega_b*+ -5334 0.00000000 Omega_b- 120 5332 -1.0 6.04880000 1.100000e-12 Omega_b- 5332 0.00000000 Omega_b~+ 121 -5332 1.0 6.04880000 1.100000e-12 anti-Omega_b+ -5332 0.00000000 Xi_bc0 522 5142 0.0 6.90000000 0.500000e-12 Xi_bc0 5142 0.00000000 Xi_bc~0 523 -5142 0.0 6.90000000 0.500000e-12 anti-Xi_bc0 -5142 0.00000000 Xi_bc+ 532 5242 1.0 6.90000000 0.500000e-12 Xi_bc+ 5242 0.00000000 Xi_bc~- 533 -5242 -1.0 6.90000000 0.500000e-12 anti-Xi_bc- -5242 0.00000000 Omega_bc0 544 5342 0.0 7.19099000 0.500000e-12 unknown 5342 0.00000000 Omega_bc~0 545 -5342 0.0 7.19099000 0.500000e-12 unknown -5342 0.00000000 Xi'_bc0 550 5412 0.0 7.03724000 0.000000e+00 unknown 5412 0.00000000 Xi'_bc~0 551 -5412 0.0 7.03724000 0.000000e+00 unknown -5412 0.00000000 Xi*_bc0 552 5414 0.0 7.04850000 0.000000e+00 unknown 5414 0.00000000 Xi*_bc~0 553 -5414 0.0 7.04850000 0.000000e+00 unknown -5414 0.00000000 Xi'_bc+ 554 5422 1.0 7.03724000 0.000000e+00 unknown 5422 0.00000000 Xi'_bc~- 555 -5422 -1.0 7.03724000 0.000000e+00 unknown -5422 0.00000000 Xi*_bc+ 556 5424 1.0 7.04850000 0.000000e+00 unknown 5424 0.00000000 Xi*_bc~- 557 -5424 -1.0 7.04850000 0.000000e+00 unknown -5424 0.00000000 Omega'_bc0 558 5432 0.0 7.21101000 0.000000e+00 unknown 5432 0.00000000 Omega'_bc~0 559 -5432 0.0 7.21101000 0.000000e+00 unknown -5432 0.00000000 Omega*_bc0 560 5434 0.0 7.21900000 0.000000e+00 unknown 5434 0.00000000 Omega*_bc~0 561 -5434 0.0 7.21900000 0.000000e+00 unknown -5434 0.00000000 Omega_bcc+ 562 5442 1.0 8.30945000 1.290893e-12 unknown 5442 0.00000000 Omega_bcc~- 563 -5442 -1.0 8.30945000 1.290893e-12 unknown -5442 0.00000000 Omega*_bcc+ 564 5444 1.0 8.31325000 0.000000e+00 unknown 5444 0.00000000 Omega*_bcc~- 565 -5444 -1.0 8.31325000 0.000000e+00 unknown -5444 0.00000000 Xi_bb- 568 5512 -1.0 10.42272000 1.290893e-12 unknown 5512 0.00000000 Xi_bb~+ 569 -5512 1.0 10.42272000 1.290893e-12 unknown -5512 0.00000000 Xi*_bb- 570 5514 -1.0 10.44144000 0.000000e+00 unknown 5514 0.00000000 Xi*_bb~+ 571 -5514 1.0 10.44144000 0.000000e+00 unknown -5514 0.00000000 Xi_bb0 572 5522 0.0 10.42272000 1.290893e-12 unknown 5522 0.00000000 Xi_bb~0 573 -5522 0.0 10.42272000 1.290893e-12 unknown -5522 0.00000000 Xi*_bb0 574 5524 0.0 10.44144000 0.000000e+00 unknown 5524 0.00000000 Xi*_bb~0 575 -5524 0.0 10.44144000 0.000000e+00 unknown -5524 0.00000000 Omega_bb- 576 5532 -1.0 10.60209000 1.290893e-12 unknown 5532 0.00000000 Omega_bb~+ 577 -5532 1.0 10.60209000 1.290893e-12 unknown -5532 0.00000000 Omega*_bb- 578 5534 -1.0 10.61426000 0.000000e+00 unknown 5534 0.00000000 Omega*_bb~+ 579 -5534 1.0 10.61426000 0.000000e+00 unknown -5534 0.00000000 Omega_bbc0 580 5542 0.0 11.70767000 1.290893e-12 unknown 5542 0.00000000 Omega_bbc~0 581 -5542 0.0 11.70767000 1.290893e-12 unknown -5542 0.00000000 Omega*_bbc0 582 5544 0.0 11.71147000 0.000000e+00 unknown 5544 0.00000000 Omega*_bbc~0 583 -5544 0.0 11.71147000 0.000000e+00 unknown -5544 0.00000000 Omega*_bbb- 584 5554 -1.0 15.11061000 0.000000e+00 unknown 5554 0.00000000 Omega*_bbb~+ 585 -5554 1.0 15.11061000 0.000000e+00 unknown -5554 0.00000000 deuteron 45 1000010020 1.0 1.87561300 1.000000e+15 deuteron 0 0.00000000 triton 46 1000010030 1.0 2.80925000 1.000000e+15 tritium 0 0.00000000 alpha 47 1000020040 2.0 3.72741700 1.000000e+15 alpha 0 0.00000000 geantino 48 480000000 0.0 0.00000000 1.000000e+15 geantino 0 0.00000000 opticalphoton 50 20022 0.0 0.00000000 1.000000e+16 Cerenkov 0 0.00000000 H_10 87 25 0.0 125.70000000 9.400000e-26 Higgs0 25 0.00000000 H_20 88 35 0.0 310.00000000 9.400000e-26 Higgs'0 35 0.00000000 H_30 89 36 0.0 310.00000000 9.400000e-26 A0 36 0.00000000 H+ 90 37 1.0 310.00000000 9.400000e-26 Higgs+ 37 0.00000000 H- 91 -37 -1.0 310.00000000 9.400000e-26 Higgs- -37 0.00000000 d 303 1 -0.3 0.00990000 0.000000e+00 d 1 0.00000000 anti-d 304 -1 0.3 0.00990000 0.000000e+00 anti-d -1 0.00000000 u 305 2 0.7 0.00560000 0.000000e+00 u 2 0.00000000 anti-u 306 -2 -0.7 0.00560000 0.000000e+00 anti-u -2 0.00000000 s 307 3 -0.3 0.19900000 0.000000e+00 s 3 0.00000000 anti-s 308 -3 0.3 0.19900000 0.000000e+00 anti-s -3 0.00000000 c 309 4 0.7 1.35000000 0.000000e+00 c 4 0.00000000 anti-c 310 -4 -0.7 1.35000000 0.000000e+00 anti-c -4 0.00000000 b 311 5 -0.3 5.00000000 0.000000e+00 b 5 0.00000000 anti-b 312 -5 0.3 5.00000000 0.000000e+00 anti-b -5 0.00000000 t 313 6 0.7 173.50000000 3.291061e-25 t 6 0.00000000 anti-t 314 -6 -0.7 173.50000000 3.291061e-25 anti-t -6 0.00000000 b' 315 7 -0.3 400.00000000 0.000000e+00 b' 7 0.00000000 anti-b' 316 -7 0.3 400.00000000 0.000000e+00 anti-b' -7 0.00000000 t' 317 8 0.7 500.00000000 0.000000e+00 t' 8 0.00000000 anti-t' 318 -8 -0.7 500.00000000 0.000000e+00 anti-t' -8 0.00000000 nu_tau 319 16 0.0 0.00000000 1.000000e+16 nu_tau 16 0.00000000 nu_tau~ 320 -16 0.0 0.00000000 1.000000e+16 anti-nu_tau -16 0.00000000 L- 321 17 -1.0 400.00000000 0.000000e+00 L- 17 0.00000000 L+ 322 -17 1.0 400.00000000 0.000000e+00 L+ -17 0.00000000 nu_L 323 18 0.0 0.00000000 0.000000e+00 nu_L 18 0.00000000 anti-nu_L 324 -18 0.0 0.00000000 0.000000e+00 anti-nu_L -18 0.00000000 g 325 21 0.0 0.00000000 1.000000e+16 g 21 0.00000000 Z'0 326 32 0.0 500.00000000 0.000000e+00 Z'0 32 0.00000000 Z''0 327 33 0.0 900.00000000 0.000000e+00 Z''0 33 0.00000000 W'+ 328 34 1.0 500.00000000 0.000000e+00 W'+ 34 0.00000000 W'- 329 -34 -1.0 500.00000000 0.000000e+00 W'- -34 0.00000000 Graviton 330 39 0.0 0.00000000 0.000000e+00 unknown 39 0.00000000 R0 331 41 0.0 5000.00000000 0.000000e+00 R0 41 0.00000000 anti-R0 332 -41 0.0 5000.00000000 0.000000e+00 anti-R0 -41 0.00000000 LQ_ue 333 42 -0.3 200.00000000 0.000000e+00 unknown 42 0.00000000 LQ_uebar 334 -42 0.3 200.00000000 0.000000e+00 unknown -42 0.00000000 Xu0 335 43 0.0 1.00000000 0.000000e+00 Xu0 43 0.00000000 Xu+ 336 44 1.0 1.00000000 0.000000e+00 Xu+ 44 0.00000000 Xu- 337 -44 -1.0 1.00000000 0.000000e+00 Xu- -44 0.00000000 specflav 338 81 0.0 0.00000000 0.000000e+00 specflav 81 0.00000000 rndmflav 339 82 0.0 0.00000000 0.000000e+00 rndmflav 82 0.00000000 anti-rndmflav 340 -82 0.0 0.00000000 0.000000e+00 anti-rndmflav -82 0.00000000 phasespa 341 83 0.0 1.00000000 0.000000e+00 phasespa 83 0.00000000 c-hadron 342 84 0.7 2.00000000 3.335641e-13 c-hadron 84 0.00000000 anti-c-hadron 343 -84 -0.7 2.00000000 3.335641e-13 anti-c-hadron -84 0.00000000 b-hadron 344 85 -0.3 5.00000000 1.290893e-12 b-hadron 85 0.00000000 anti-b-hadron 345 -85 0.3 5.00000000 1.290893e-12 anti-b-hadron -85 0.00000000 t-hadron 346 86 0.7 175.00000000 0.000000e+00 t-hadron 0 0.00000000 anti-t-hadron 347 -86 -0.7 175.00000000 0.000000e+00 anti-t-hadron 0 0.00000000 b'-hadron 348 87 -0.3 400.00000000 0.000000e+00 b'-hadron 0 0.00000000 anti-b'-hadron 349 -87 0.3 400.00000000 0.000000e+00 anti-b'-hadron 0 0.00000000 junction 350 88 0.0 0.00000000 0.000000e+00 junction 88 0.00000000 system 351 90 0.0 0.00000000 0.000000e+00 system 90 0.00000000 cluster 352 91 0.0 0.00000000 0.000000e+00 cluster 91 0.00000000 string 353 92 0.0 0.00000000 0.000000e+00 string 92 0.00000000 indep 354 93 0.0 0.00000000 0.000000e+00 indep 93 0.00000000 CMshower 355 94 0.0 0.00000000 0.000000e+00 CMshower 94 0.00000000 SPHEaxis 356 95 0.0 0.00000000 0.000000e+00 SPHEaxis 95 0.00000000 THRUaxis 357 96 0.0 0.00000000 0.000000e+00 THRUaxis 96 0.00000000 CLUSjet 358 97 0.0 0.00000000 0.000000e+00 CLUSjet 97 0.00000000 CELLjet 359 98 0.0 0.00000000 0.000000e+00 CELLjet 98 0.00000000 table 360 99 0.0 0.00000000 0.000000e+00 table 99 0.00000000 deutron~ 390 -1000010020 -1.0 1.87561300 0.000000e+00 anti-deuteron 0 0.00000000 triton~ 392 -1000010030 -1.0 2.80925000 0.000000e+00 anti-tritium 0 0.00000000 alpha~ 393 -1000020040 -2.0 3.72741700 0.000000e+00 anti-alpha 0 0.00000000 dd_1 394 1103 -0.7 0.00000000 0.000000e+00 dd_1 1103 0.00000000 anti-dd_1 395 -1103 0.7 0.00000000 0.000000e+00 anti-dd_1 -1103 0.00000000 ud_0 410 2101 0.3 0.00000000 0.000000e+00 ud_0 2101 0.00000000 anti-ud_0 411 -2101 -0.3 0.00000000 0.000000e+00 anti-ud_0 -2101 0.00000000 ud_1 412 2103 0.3 0.00000000 0.000000e+00 ud_1 2103 0.00000000 anti-ud_1 413 -2103 -0.3 0.00000000 0.000000e+00 anti-ud_1 -2103 0.00000000 uu_1 426 2203 1.3 0.00000000 0.000000e+00 uu_1 2203 0.00000000 anti-uu_1 427 -2203 -1.3 0.00000000 0.000000e+00 anti-uu_1 -2203 0.00000000 sd_0 438 3101 -0.7 0.00000000 0.000000e+00 sd_0 3101 0.00000000 anti-sd_0 439 -3101 0.7 0.00000000 0.000000e+00 anti-sd_0 -3101 0.00000000 sd_1 440 3103 -0.7 0.00000000 0.000000e+00 sd_1 3103 0.00000000 anti-sd_1 441 -3103 0.7 0.00000000 0.000000e+00 anti-sd_1 -3103 0.00000000 su_0 454 3201 0.3 0.00000000 0.000000e+00 su_0 3201 0.00000000 anti-su_0 455 -3201 -0.3 0.00000000 0.000000e+00 anti-su_0 -3201 0.00000000 su_1 456 3203 0.3 0.00000000 0.000000e+00 su_1 3203 0.00000000 anti-su_1 457 -3203 -0.3 0.00000000 0.000000e+00 anti-su_1 -3203 0.00000000 ss_1 470 3303 -0.7 0.00000000 0.000000e+00 ss_1 3303 0.00000000 anti-ss_1 471 -3303 0.7 0.00000000 0.000000e+00 anti-ss_1 -3303 0.00000000 cd_0 476 4101 0.3 0.00000000 0.000000e+00 cd_0 4101 0.00000000 anti-cd_0 477 -4101 -0.3 0.00000000 0.000000e+00 anti-cd_0 -4101 0.00000000 cd_1 478 4103 0.3 0.00000000 0.000000e+00 cd_1 4103 0.00000000 anti-cd_1 479 -4103 -0.3 0.00000000 0.000000e+00 anti-cd_1 -4103 0.00000000 cu_0 482 4201 1.3 0.00000000 0.000000e+00 cu_0 4201 0.00000000 anti-cu_0 483 -4201 -1.3 0.00000000 0.000000e+00 anti-cu_0 -4201 0.00000000 cu_1 484 4203 1.3 0.00000000 0.000000e+00 cu_1 4203 0.00000000 anti-cu_1 485 -4203 -1.3 0.00000000 0.000000e+00 anti-cu_1 -4203 0.00000000 cs_0 490 4301 0.3 0.00000000 0.000000e+00 cs_0 4301 0.00000000 anti-cs_0 491 -4301 -0.3 0.00000000 0.000000e+00 anti-cs_0 -4301 0.00000000 cs_1 492 4303 0.3 0.00000000 0.000000e+00 cs_1 4303 0.00000000 anti-cs_1 493 -4303 -0.3 0.00000000 0.000000e+00 anti-cs_1 -4303 0.00000000 cc_1 500 4403 1.3 0.00000000 0.000000e+00 cc_1 4403 0.00000000 anti-cc_1 501 -4403 -1.3 0.00000000 0.000000e+00 anti-cc_1 -4403 0.00000000 bd_0 516 5101 -0.7 0.00000000 0.000000e+00 bd_0 5101 0.00000000 anti-bd_0 517 -5101 0.7 0.00000000 0.000000e+00 anti-bd_0 -5101 0.00000000 bd_1 518 5103 -0.7 0.00000000 0.000000e+00 bd_1 5103 0.00000000 anti-bd_1 519 -5103 0.7 0.00000000 0.000000e+00 anti-bd_1 -5103 0.00000000 bu_0 524 5201 0.3 0.00000000 0.000000e+00 bu_0 5201 0.00000000 anti-bu_0 525 -5201 -0.3 0.00000000 0.000000e+00 anti-bu_0 -5201 0.00000000 bu_1 526 5203 0.3 0.00000000 0.000000e+00 bu_1 5203 0.00000000 anti-bu_1 527 -5203 -0.3 0.00000000 0.000000e+00 anti-bu_1 -5203 0.00000000 bs_0 534 5301 -0.7 0.00000000 0.000000e+00 bs_0 5301 0.00000000 anti-bs_0 535 -5301 0.7 0.00000000 0.000000e+00 anti-bs_0 -5301 0.00000000 bs_1 536 5303 -0.7 0.00000000 0.000000e+00 bs_1 5303 0.00000000 anti-bs_1 537 -5303 0.7 0.00000000 0.000000e+00 anti-bs_1 -5303 0.00000000 bc_0 546 5401 0.3 0.00000000 0.000000e+00 bc_0 5401 0.00000000 anti-bc_0 547 -5401 -0.3 0.00000000 0.000000e+00 anti-bc_0 -5401 0.00000000 bc_1 548 5403 0.3 0.00000000 0.000000e+00 bc_1 5403 0.00000000 anti-bc_1 549 -5403 -0.3 0.00000000 0.000000e+00 anti-bc_1 -5403 0.00000000 bb_1 566 5503 -0.7 0.00000000 0.000000e+00 bb_1 5503 0.00000000 anti-bb_1 567 -5503 0.7 0.00000000 0.000000e+00 anti-bb_1 -5503 0.00000000 vpho 586 10022 0.0 0.00000000 0.000000e+00 vpho 0 0.00000000 Xsd 751 30343 0.0 1.60000000 0.000000e+00 Xsd 30343 0.00000000 anti-Xsd 752 -30343 0.0 1.60000000 0.000000e+00 anti-Xsd -30343 0.00000000 Xsu 753 30353 1.0 1.60000000 0.000000e+00 Xsu 30353 0.00000000 anti-Xsu 754 -30353 -1.0 1.60000000 0.000000e+00 anti-Xsu -30353 0.00000000 Xss 755 30363 0.0 1.80000000 0.000000e+00 Xss 30363 0.00000000 anti-Xss 756 -30363 0.0 1.80000000 0.000000e+00 anti-Xss -30363 0.00000000 ~d_L 859 1000001 -0.3 500.00000000 0.000000e+00 unknown 1000001 0.00000000 ~d_Lbar 860 -1000001 0.3 500.00000000 0.000000e+00 unknown -1000001 0.00000000 ~u_L 861 1000002 0.7 500.00000000 0.000000e+00 unknown 1000002 0.00000000 ~u_Lbar 862 -1000002 -0.7 500.00000000 0.000000e+00 unknown -1000002 0.00000000 ~s_L 863 1000003 -0.3 500.00000000 0.000000e+00 unknown 1000003 0.00000000 ~s_Lbar 864 -1000003 0.3 500.00000000 0.000000e+00 unknown -1000003 0.00000000 ~c_L 865 1000004 0.7 500.00000000 0.000000e+00 unknown 1000004 0.00000000 ~c_Lbar 866 -1000004 -0.7 500.00000000 0.000000e+00 unknown -1000004 0.00000000 ~b_1 867 1000005 -0.3 500.00000000 0.000000e+00 unknown 1000005 0.00000000 ~b_1bar 868 -1000005 0.3 500.00000000 0.000000e+00 unknown -1000005 0.00000000 ~t_1 869 1000006 0.7 500.00000000 0.000000e+00 unknown 1000006 0.00000000 ~t_1bar 870 -1000006 -0.7 500.00000000 0.000000e+00 unknown -1000006 0.00000000 ~e_L- 871 1000011 -1.0 500.00000000 0.000000e+00 unknown 1000011 0.00000000 ~e_L+ 872 -1000011 1.0 500.00000000 0.000000e+00 unknown -1000011 0.00000000 ~nu_eL 873 1000012 0.0 500.00000000 0.000000e+00 unknown 1000012 0.00000000 ~nu_eLbar 874 -1000012 0.0 500.00000000 0.000000e+00 unknown -1000012 0.00000000 ~mu_L- 875 1000013 -1.0 500.00000000 0.000000e+00 unknown 1000013 0.00000000 ~mu_L+ 876 -1000013 1.0 500.00000000 0.000000e+00 unknown -1000013 0.00000000 ~nu_muL 877 1000014 0.0 500.00000000 0.000000e+00 unknown 1000014 0.00000000 ~nu_muLbar 878 -1000014 0.0 500.00000000 0.000000e+00 unknown -1000014 0.00000000 ~tau_1- 879 1000015 -1.0 500.00000000 0.000000e+00 unknown 1000015 0.00000000 ~tau_1+ 880 -1000015 1.0 500.00000000 0.000000e+00 unknown -1000015 0.00000000 ~nu_tauL 881 1000016 0.0 500.00000000 0.000000e+00 unknown 1000016 0.00000000 ~nu_tauLbar 882 -1000016 0.0 500.00000000 0.000000e+00 unknown -1000016 0.00000000 ~g 883 1000021 0.0 500.00000000 0.000000e+00 unknown 1000021 0.00000000 ~chi_10 884 1000022 0.0 500.00000000 0.000000e+00 unknown 1000022 0.00000000 ~chi_20 885 1000023 0.0 500.00000000 0.000000e+00 unknown 1000023 0.00000000 ~chi_1+ 886 1000024 1.0 500.00000000 0.000000e+00 unknown 1000024 0.00000000 ~chi_1- 887 -1000024 -1.0 500.00000000 0.000000e+00 unknown -1000024 0.00000000 ~chi_30 888 1000025 0.0 500.00000000 0.000000e+00 unknown 1000025 0.00000000 ~chi_40 889 1000035 0.0 500.00000000 0.000000e+00 unknown 1000035 0.00000000 ~chi_2+ 890 1000037 1.0 500.00000000 0.000000e+00 unknown 1000037 0.00000000 ~chi_2- 891 -1000037 -1.0 500.00000000 0.000000e+00 unknown -1000037 0.00000000 ~Gravitino 892 1000039 0.0 500.00000000 0.000000e+00 unknown 1000039 0.00000000 ~d_R 893 2000001 -0.3 500.00000000 0.000000e+00 unknown 2000001 0.00000000 ~d_Rbar 894 -2000001 0.3 500.00000000 0.000000e+00 unknown -2000001 0.00000000 ~u_R 895 2000002 0.7 500.00000000 0.000000e+00 unknown 2000002 0.00000000 ~u_Rbar 896 -2000002 -0.7 500.00000000 0.000000e+00 unknown -2000002 0.00000000 ~s_R 897 2000003 -0.3 500.00000000 0.000000e+00 unknown 2000003 0.00000000 ~s_Rbar 898 -2000003 0.3 500.00000000 0.000000e+00 unknown -2000003 0.00000000 ~c_R 899 2000004 0.7 500.00000000 0.000000e+00 unknown 2000004 0.00000000 ~c_Rbar 900 -2000004 -0.7 500.00000000 0.000000e+00 unknown -2000004 0.00000000 ~b_2 901 2000005 -0.3 500.00000000 0.000000e+00 unknown 2000005 0.00000000 ~b_2bar 902 -2000005 0.3 500.00000000 0.000000e+00 unknown -2000005 0.00000000 ~t_2 903 2000006 0.7 500.00000000 0.000000e+00 unknown 2000006 0.00000000 ~t_2bar 904 -2000006 -0.7 500.00000000 0.000000e+00 unknown -2000006 0.00000000 ~e_R- 905 2000011 -1.0 500.00000000 0.000000e+00 unknown 2000011 0.00000000 ~e_R+ 906 -2000011 1.0 500.00000000 0.000000e+00 unknown -2000011 0.00000000 ~nu_eR 907 2000012 0.0 500.00000000 0.000000e+00 unknown 2000012 0.00000000 ~nu_eRbar 908 -2000012 0.0 500.00000000 0.000000e+00 unknown -2000012 0.00000000 ~mu_R- 909 2000013 -1.0 500.00000000 0.000000e+00 unknown 2000013 0.00000000 ~mu_R+ 910 -2000013 1.0 500.00000000 0.000000e+00 unknown -2000013 0.00000000 ~nu_muR 911 2000014 0.0 500.00000000 0.000000e+00 unknown 2000014 0.00000000 ~nu_muRbar 912 -2000014 0.0 500.00000000 0.000000e+00 unknown -2000014 0.00000000 ~tau_2- 913 2000015 -1.0 500.00000000 0.000000e+00 unknown 2000015 0.00000000 ~tau_2+ 914 -2000015 1.0 500.00000000 0.000000e+00 unknown -2000015 0.00000000 ~nu_tauR 915 2000016 0.0 500.00000000 0.000000e+00 unknown 2000016 0.00000000 ~nu_tauRbar 916 -2000016 0.0 500.00000000 0.000000e+00 unknown -2000016 0.00000000 pi_tc0 917 3000111 0.0 110.00000000 0.000000e+00 unknown 3000111 0.00000000 rho_tc0 918 3000113 0.0 210.00000000 0.000000e+00 unknown 3000113 0.00000000 pi_tc+ 919 3000211 1.0 110.00000000 0.000000e+00 unknown 3000211 0.00000000 pi_tc- 920 -3000211 -1.0 110.00000000 0.000000e+00 unknown -3000211 0.00000000 rho_tc+ 921 3000213 1.0 210.00000000 0.000000e+00 unknown 3000213 0.00000000 rho_tc- 922 -3000213 -1.0 210.00000000 0.000000e+00 unknown -3000213 0.00000000 pi'_tc0 923 3000221 0.0 110.00000000 0.000000e+00 unknown 3000221 0.00000000 omega_tc 924 3000223 0.0 210.00000000 0.000000e+00 unknown 3000223 0.00000000 eta_tc0 925 3000331 0.0 350.00000000 0.000000e+00 unknown 3000331 0.00000000 V8_tc 926 3100021 0.0 500.00000000 0.000000e+00 unknown 3100021 0.00000000 pi_22_1_tc 927 3100111 0.0 125.00000000 0.000000e+00 unknown 3100111 0.00000000 rho_11_tc 928 3100113 0.0 400.00000000 0.000000e+00 unknown 3100113 0.00000000 pi_22_8_tc 929 3200111 0.0 250.00000000 0.000000e+00 unknown 3200111 0.00000000 rho_12_tc 930 3200113 0.0 350.00000000 0.000000e+00 unknown 3200113 0.00000000 rho_21_tc 931 3300113 0.0 350.00000000 0.000000e+00 unknown 3300113 0.00000000 rho_22_tc 932 3400113 0.0 300.00000000 0.000000e+00 unknown 3400113 0.00000000 d* 933 4000001 -0.3 400.00000000 0.000000e+00 unknown 4000001 0.00000000 d*bar 934 -4000001 0.3 400.00000000 0.000000e+00 unknown -4000001 0.00000000 u* 935 4000002 0.7 400.00000000 0.000000e+00 unknown 4000002 0.00000000 u*bar 936 -4000002 -0.7 400.00000000 0.000000e+00 unknown -4000002 0.00000000 e*- 937 4000011 -1.0 400.00000000 0.000000e+00 unknown 4000011 0.00000000 e*bar+ 938 -4000011 1.0 400.00000000 0.000000e+00 unknown -4000011 0.00000000 nu*_e0 939 4000012 0.0 400.00000000 0.000000e+00 unknown 4000012 0.00000000 nu*_ebar0 940 -4000012 0.0 400.00000000 0.000000e+00 unknown -4000012 0.00000000 Graviton* 941 5000039 0.0 1000.00000000 0.000000e+00 unknown 5000039 0.00000000 nu_Re 942 9900012 0.0 500.00000000 0.000000e+00 unknown 9900012 0.00000000 nu_Rmu 943 9900014 0.0 500.00000000 0.000000e+00 unknown 9900014 0.00000000 nu_Rtau 944 9900016 0.0 500.00000000 0.000000e+00 unknown 9900016 0.00000000 Z_R0 945 9900023 0.0 1200.00000000 0.000000e+00 unknown 9900023 0.00000000 W_R+ 946 9900024 1.0 750.00000000 0.000000e+00 unknown 9900024 0.00000000 W_R- 947 -9900024 -1.0 750.00000000 0.000000e+00 unknown -9900024 0.00000000 H_L++ 948 9900041 2.0 200.00000000 0.000000e+00 unknown 9900041 0.00000000 H_L-- 949 -9900041 -2.0 200.00000000 0.000000e+00 unknown -9900041 0.00000000 H_R++ 950 9900042 2.0 200.00000000 0.000000e+00 unknown 9900042 0.00000000 H_R-- 951 -9900042 -2.0 200.00000000 0.000000e+00 unknown -9900042 0.00000000 He3[0.0] 49 1000020030 2.0 2.80923000 1.000000e+15 He3 0 0.00000000 He3~[0.0] 391 -1000020030 -2.0 2.80923000 0.000000e+00 anti-He3 0 0.00000000 Li7[0.0] 988 1000030070 3.0 6.53536500 0.000000e+00 unknown 0 0.00000000 Be8[0.0] 992 1000040080 4.0 7.45689300 0.000000e+00 unknown 0 0.00000000 Be9[0.0] 959 1000040090 4.0 8.39479200 0.000000e+00 unknown 0 0.00000000 Be10[0.0] 993 1000040100 4.0 9.32754500 0.000000e+00 unknown 0 0.00000000 B10[0.0] 994 1000050100 5.0 9.32698900 0.000000e+00 unknown 0 0.00000000 B11[0.0] 974 1000050110 5.0 10.25510100 0.000000e+00 unknown 0 0.00000000 B12[0.0] 975 1000050120 5.0 11.19129500 0.000000e+00 unknown 0 0.00000000 C12[0.0] 953 1000060120 6.0 11.17490000 0.000000e+00 unknown 0 0.00000000 C13[0.0] 976 1000060130 6.0 12.11254500 0.000000e+00 unknown 0 0.00000000 C14[0.0] 977 1000060140 6.0 13.04393400 0.000000e+00 unknown 0 0.00000000 N14[0.0] 955 1000070140 7.0 13.04378000 0.000000e+00 unknown 0 0.00000000 N15[0.0] 982 1000070150 7.0 13.04377800 0.000000e+00 unknown 0 0.00000000 N16[0.0] 995 1000070160 7.0 14.90958500 0.000000e+00 unknown 0 0.00000000 O16[0.0] 956 1000080160 8.0 14.89510000 0.000000e+00 unknown 0 0.00000000 O17[0.0] 996 1000080170 8.0 15.83458700 0.000000e+00 unknown 0 0.00000000 O18[0.0] 967 1000080180 8.0 16.76610800 0.000000e+00 unknown 0 0.00000000 O19[0.0] 997 1000080190 8.0 17.70171700 0.000000e+00 unknown 0 0.00000000 F19[0.0] 960 1000090190 9.0 17.69689600 0.000000e+00 unknown 0 0.00000000 Ne22[0.0] 983 1000100220 10.0 20.48484100 0.000000e+00 unknown 0 0.00000000 Ne23[0.0] 998 1000100230 10.0 21.41920500 0.000000e+00 unknown 0 0.00000000 Na24[0.0] 999 1000110240 11.0 22.34743500 0.000000e+00 unknown 0 0.00000000 Mg24[0.0] 979 1000120240 12.0 22.34192000 0.000000e+00 unknown 0 0.00000000 Mg25[0.0] 989 1000120250 12.0 23.27415400 0.000000e+00 unknown 0 0.00000000 Mg26[0.0] 980 1000120260 12.0 24.20262600 0.000000e+00 unknown 0 0.00000000 Mg27[0.0] 981 1000120270 12.0 25.13574800 0.000000e+00 unknown 0 0.00000000 Al27[0.0] 952 1000130270 13.0 25.12650000 0.000000e+00 unknown 0 0.00000000 Al28[0.0] 972 1000130280 13.0 26.06497800 0.000000e+00 unknown 0 0.00000000 Si28[0.0] 957 1000140280 14.0 26.05320000 0.000000e+00 unknown 0 0.00000000 Si29[0.0] 964 1000140290 14.0 26.99142700 0.000000e+00 unknown 0 0.00000000 Si30[0.0] 968 1000140300 14.0 27.92038300 0.000000e+00 unknown 0 0.00000000 P31[0.0] 1000 1000150310 15.0 28.85186900 0.000000e+00 unknown 0 0.00000000 Cl39[0.0] 1001 1000170390 17.0 36.29846000 0.000000e+00 unknown 0 0.00000000 Cl40[0.0] 1002 1000170400 17.0 37.23220100 0.000000e+00 unknown 0 0.00000000 Ar36[0.0] 1003 1000180360 18.0 33.50354900 0.000000e+00 unknown 0 0.00000000 Ar40[0.0] 973 1000180400 18.0 37.22471500 0.000000e+00 unknown 0 0.00000000 Cr50[0.0] 1004 1000240500 24.0 46.52443900 0.000000e+00 unknown 0 0.00000000 Cr52[0.0] 978 1000240520 24.0 48.37010000 0.000000e+00 unknown 0 0.00000000 Cr53[0.0] 990 1000240530 24.0 49.31389400 0.000000e+00 unknown 0 0.00000000 Cr54[0.0] 1005 1000240540 24.0 50.24374100 0.000000e+00 unknown 0 0.00000000 Mn55[0.0] 991 1000250550 25.0 51.17445700 0.000000e+00 unknown 0 0.00000000 Fe54[0.0] 966 1000260540 26.0 50.24442100 0.000000e+00 unknown 0 0.00000000 Fe56[0.0] 961 1000260560 26.0 52.10305600 0.000000e+00 unknown 0 0.00000000 Fe57[0.0] 969 1000260570 26.0 53.03497500 0.000000e+00 unknown 0 0.00000000 Fe59[0.0] 1006 1000260590 26.0 54.89748000 0.000000e+00 unknown 0 0.00000000 Ni58[0.0] 984 1000280580 28.0 53.96642200 0.000000e+00 unknown 0 0.00000000 Ni60[0.0] 985 1000280600 28.0 55.82516400 0.000000e+00 unknown 0 0.00000000 Ni61[0.0] 1007 1000280610 28.0 56.75690900 0.000000e+00 unknown 0 0.00000000 Ni62[0.0] 986 1000280620 28.0 57.68587700 0.000000e+00 unknown 0 0.00000000 Ni63[0.0] 1008 1000280630 28.0 58.61860500 0.000000e+00 unknown 0 0.00000000 Ni64[0.0] 987 1000280640 28.0 59.54851200 0.000000e+00 unknown 0 0.00000000 Cu63[0.0] 954 1000290630 29.0 58.61860000 0.000000e+00 unknown 0 0.00000000 Cu65[0.0] 958 1000290650 29.0 60.47984200 0.000000e+00 unknown 0 0.00000000 Mo92[0.0] 1009 1000420920 42.0 85.61063000 0.000000e+00 unknown 0 0.00000000 Mo95[0.0] 1010 1000420950 42.0 88.40421000 0.000000e+00 unknown 0 0.00000000 Mo96[0.0] 1011 1000420960 42.0 89.33462100 0.000000e+00 unknown 0 0.00000000 Mo97[0.0] 1012 1000420970 42.0 90.26736500 0.000000e+00 unknown 0 0.00000000 Mo98[0.0] 1013 1000420980 42.0 91.19828700 0.000000e+00 unknown 0 0.00000000 Mo100[0.0] 1014 1000421000 42.0 93.06320300 0.000000e+00 unknown 0 0.00000000 Pd108[0.0] 1015 1000461080 46.0 100.51181600 0.000000e+00 unknown 0 0.00000000 Au197[0.0] 1020 1000791970 79.0 183.43336000 0.000000e+00 unknown 0 0.00000000 Pb207[0.0] 962 1000822070 82.0 192.79676500 0.000000e+00 unknown 0 0.00000000 Pb208[0.0] 963 1000822080 82.0 193.72896200 0.000000e+00 unknown 0 0.00000000 Pb206[0.0] 965 1000822060 82.0 191.86393700 0.000000e+00 unknown 0 0.00000000 Pb204[0.0] 970 1000822040 82.0 189.99962700 0.000000e+00 unknown 0 0.00000000 Intermediate 971 -99000000 0.0 0.00000000 0.000000e+00 unknown 0 0.00000000 # END PARTICLE - -- GitLab From 4f2886b431130e63f14cbc796c9f128bc73b0e57 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 16 Jun 2022 14:38:56 +0200 Subject: [PATCH 15/56] Accumulated content in gitlab pages --- .gitlab-ci.yml | 66 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b02d5233..8cd3428a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -15,8 +15,7 @@ stages: variables: TARGET_BRANCH: master - BINARY_TAG: x86_64_v2-centos7-gcc10-opt - LCG_VERSION: 100 + BINARY_TAG: x86_64_v2-centos7-gcc11-opt NO_LBLOGIN: "1" @@ -46,44 +45,71 @@ check-formatting: when: on_failure expire_in: 1 week -# inspired by https://gitlab.cern.ch/lhcb/Moore/-/blob/master/.gitlab-ci.yml -build-docs: +.docs-base: stage: docs image: gitlab-registry.cern.ch/lhcb-core/lbdocker/centos7-build:latest + variables: + DOCS_VERSION: $CI_COMMIT_REF_NAME rules: - - if: '$CI_COMMIT_REF_PROTECTED == "true" || $CI_MERGE_REQUEST_LABELS =~ /Documentation/' + - if: $CI_COMMIT_REF_PROTECTED == "true" + - if: $CI_MERGE_REQUEST_LABELS =~ /Python Documentation/ + - if: $CI_COMMIT_TAG =~ /^v?[0-9]+[.][0-9]+([.][0-9]+)?$/ tags: - cvmfs + +# inspired by https://gitlab.cern.ch/lhcb/Moore/-/blob/master/.gitlab-ci.yml +build-docs: + extends: .docs-base variables: NIGHTLIES_PATH: "/cvmfs/lhcbdev.cern.ch/nightlies/lhcb-gaussino/latest" - LOCAL_PYTHON: "InstallArea/x86_64_v2-centos7-gcc10-opt/python" + LOCAL_PYTHON: "InstallArea/$BINARY_TAG/python" script: - . /cvmfs/lhcb.cern.ch/lib/LbEnv.sh - pip install myst_parser graphviz - - reasons= + # -> adding python directories of the upstream projects - export PYTHONPATHBKP=$PYTHONPATH - - export PYTHONPATHBKP=$NIGHTLIES_PATH/Run2Support/$LOCAL_PYTHON:$NIGHTLIES_PATH/LHCb/$LOCAL_PYTHON:$NIGHTLIES_PATH/Gaudi/$LOCAL_PYTHON:$PYTHONPATHBKP + - export PYTHONPATHBKP=$NIGHTLIES_PATH/Gaudi/$LOCAL_PYTHON:$PYTHONPATHBKP + - export PYTHONPATHBKP=$NIGHTLIES_PATH/LHCb/$LOCAL_PYTHON:$PYTHONPATHBKP + - export PYTHONPATHBKP=$NIGHTLIES_PATH/Run2Support/$LOCAL_PYTHON:$PYTHONPATHBKP + # -> adding python directories of Gaussino - export PYTHONPATHBKP=$(find $PWD -type d \( -path ./InstallArea -o -path ./build \) -prune -false -o -name "python" -print | paste -sd ":" - ):$PYTHONPATHBKP - echo "$PYTHONPATHBKP" - - PYTHONPATH=$PYTHONPATHBKP make -C docs html || reasons+='ERROR failed html generation\n' - - if [ -n "$reasons" ]; then echo -e $reasons; exit 1; fi - allow_failure: - exit_codes: 77 + # -> building the docs with a custom pythonpath + - PYTHONPATH=$PYTHONPATHBKP make -C docs html + - test -f docs/_build/html/index.html || exit 2 artifacts: paths: - docs/_build/html/ + expire_in: 1 month pages: - stage: deploy - image: gitlab-registry.cern.ch/ci-tools/ci-web-deployer + extends: .docs-base + needs: + - build-docs + variables: + # I found CI_PAGES_URL sometimes pointing to the wrong addresss + GAUSSINO_PAGES_URL: https://mimazure-gaussino.docs.cern.ch/ script: - - mv docs/_build/html/ public - before_script: - - test -d docs/_build/html || { echo "WARNING docs not built, stopping"; exit 77; } + # accumulating content as in https://gitlab.com/gitlab-org/gitlab/-/issues/15156#note_214784368 + # -> get the archive from the website with the accumulated content and copy it to public/ + - echo "Deploying docs for ${DOCS_VERSION}" + - echo "Getting the latest versions from ${GAUSSINO_PAGES_URL}" + # -> curl will create content.tar.gz even if it does not exists + - curl -fkL "$GAUSSINO_PAGES_URL/content.tar.gz" -o "content.tar.gz" || echo "Could not get the archive, skipping..." + # -> ignore any unpacking errors, the history will be erased + # note: this might need a bit of rethinking or to be blocked later + - tar -xzf content.tar.gz public/ || echo "Archive with other versions in a bad format or not found, skipping..." + # -> add only the new contents of the current version + - mkdir -p public/$DOCS_VERSION/ + - rsync -a docs/_build/html/ public/$DOCS_VERSION/ + # -> add all the necessary redirects + # - rm -f public/_redirects + # - echo "/ /master/index.html" >> public/_redirects + # -> create a new archive and put it on the website + - tar -zcf content.tar.gz public/ + - cp content.tar.gz public/ artifacts: paths: - public - allow_failure: - exit_codes: 77 - + expire_in: 1 month -- GitLab From 33fa7760cb697e6d47d9ee076b516dd747b97e01 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 16 Jun 2022 14:39:59 +0200 Subject: [PATCH 16/56] Change the pages url --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8cd3428a..c6d867b1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -88,7 +88,7 @@ pages: - build-docs variables: # I found CI_PAGES_URL sometimes pointing to the wrong addresss - GAUSSINO_PAGES_URL: https://mimazure-gaussino.docs.cern.ch/ + GAUSSINO_PAGES_URL: https://gaussino.docs.cern.ch/ script: # accumulating content as in https://gitlab.com/gitlab-org/gitlab/-/issues/15156#note_214784368 # -> get the archive from the website with the accumulated content and copy it to public/ -- GitLab From a5ecc5be52058949d44eb6c3b20c5fd76eb3ed73 Mon Sep 17 00:00:00 2001 From: Gloria Corti <gloria.corti@cern.ch> Date: Thu, 16 Jun 2022 14:54:09 +0200 Subject: [PATCH 17/56] Add logo to main documentation page --- Gaussino.png | Bin 0 -> 66519 bytes docs/index.rst | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 Gaussino.png diff --git a/Gaussino.png b/Gaussino.png new file mode 100644 index 0000000000000000000000000000000000000000..d40702f6b116e26f4cea73496d1ac01a2954ed9b GIT binary patch literal 66519 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 literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst index 84dd8ae1..e1e0b605 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,7 +3,7 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to Gaussino's documentation! +![logo](/images/Gaussino.png) Welcome to the Gaussino's documentation! ==================================== .. toctree:: :caption: About -- GitLab From 490ff6a1c08c47bd80de72b0008215ded053cc0a Mon Sep 17 00:00:00 2001 From: Gloria Corti <gloria.corti@cern.ch> Date: Thu, 16 Jun 2022 16:19:11 +0200 Subject: [PATCH 18/56] put logo in all pages on the side --- docs/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index 08c20735..5f29a725 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -55,6 +55,8 @@ master_doc = 'index' # html_theme = 'sphinx_rtd_theme' +html_logo = 'gaussinologo.png' + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -- GitLab From f9dea5181192af34df0b6f59df805f0b7cdcd994 Mon Sep 17 00:00:00 2001 From: Gloria Corti <gloria.corti@cern.ch> Date: Thu, 16 Jun 2022 16:21:56 +0200 Subject: [PATCH 19/56] rename logo image --- Gaussino.png => docs/gaussinologo.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename Gaussino.png => docs/gaussinologo.png (100%) diff --git a/Gaussino.png b/docs/gaussinologo.png similarity index 100% rename from Gaussino.png rename to docs/gaussinologo.png -- GitLab From daa59cb932bb0111273ac6cb23e21b94834ddd81 Mon Sep 17 00:00:00 2001 From: Gloria Corti <gloria.corti@cern.ch> Date: Thu, 16 Jun 2022 16:23:39 +0200 Subject: [PATCH 20/56] Update docs/index.rst --- docs/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.rst b/docs/index.rst index e1e0b605..f3272d34 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,7 +3,7 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -![logo](/images/Gaussino.png) Welcome to the Gaussino's documentation! +Welcome to the Gaussino's documentation! ==================================== .. toctree:: :caption: About -- GitLab From dd603ad5d4596f503d8af8cd0724e7e5286125c5 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Fri, 17 Jun 2022 10:53:54 +0200 Subject: [PATCH 21/56] Infer the current version from the DOCS_VERSION variable from gitlab CI, update the year in the copyright, add FASTSIM in the list of visible versions --- docs/conf.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 08c20735..42572989 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,7 +17,7 @@ # -- Project information ----------------------------------------------------- project = 'Gaussino' -copyright = '2021, LHCb Collaboration' +copyright = '2022, LHCb Collaboration' author = 'LHCb Collaboration' # The full version, including alpha/beta/rc tags @@ -83,12 +83,10 @@ html_context['display_lower_left'] = True versions = [ 'master', 'v0r1', + 'FASTSIM', ] -# from git import Repo -# repo = Repo(search_parent_directories=True) -# current_version = repo.active_branch.name -current_version = 'master' +current_version = os.getenv("DOCS_VERSION", "master") # tell the theme which version we're currently on ('current_version' affects # the lower-left rtd menu and 'version' affects the logo-area version) -- GitLab From a5b6e0e04d8e01fff2a897ef7a411c6c89055645 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Fri, 17 Jun 2022 11:00:48 +0200 Subject: [PATCH 22/56] Missing import & update the regex for commit tags --- .gitlab-ci.yml | 2 +- docs/conf.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c6d867b1..0ce59ca4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -53,7 +53,7 @@ check-formatting: rules: - if: $CI_COMMIT_REF_PROTECTED == "true" - if: $CI_MERGE_REQUEST_LABELS =~ /Python Documentation/ - - if: $CI_COMMIT_TAG =~ /^v?[0-9]+[.][0-9]+([.][0-9]+)?$/ + - if: $CI_COMMIT_TAG =~ /^v?[0-9]+[r][0-9]+([p][0-9]+)?$/ tags: - cvmfs diff --git a/docs/conf.py b/docs/conf.py index 42572989..611448b5 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -10,7 +10,7 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # -# import os +import os # import sys # sys.path.insert(0, os.path.abspath('.')) -- GitLab From 739b1cbf626d70750c9f7c7305d56c88f54c73c9 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Fri, 17 Jun 2022 11:48:35 +0200 Subject: [PATCH 23/56] Add redirects from root to master --- .gitlab-ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0ce59ca4..aab16a28 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -103,8 +103,9 @@ pages: - mkdir -p public/$DOCS_VERSION/ - rsync -a docs/_build/html/ public/$DOCS_VERSION/ # -> add all the necessary redirects - # - rm -f public/_redirects - # - echo "/ /master/index.html" >> public/_redirects + - rm -f public/_redirects + - echo "/index.html /master/index.html 301" >> public/_redirects + - echo "/ /master/index.html 301" >> public/_redirects # -> create a new archive and put it on the website - tar -zcf content.tar.gz public/ - cp content.tar.gz public/ -- GitLab From 5cc3726c0f911c8267de5c85903d1d00fdd50218 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Mon, 20 Jun 2022 13:35:27 +0200 Subject: [PATCH 24/56] Add "/gaussino" to the list of redirects --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aab16a28..f3e4f6f7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -106,6 +106,7 @@ pages: - rm -f public/_redirects - echo "/index.html /master/index.html 301" >> public/_redirects - echo "/ /master/index.html 301" >> public/_redirects + - echo "/gaussino /master/index.html 301" >> public/_redirects # -> create a new archive and put it on the website - tar -zcf content.tar.gz public/ - cp content.tar.gz public/ -- GitLab From 0592c6d0266440ea6d2b18cc8e0f06ecc7caa666 Mon Sep 17 00:00:00 2001 From: Gloria Corti <gloria.corti@cern.ch> Date: Mon, 20 Jun 2022 16:14:14 +0200 Subject: [PATCH 25/56] Apply 1 suggestion(s) to 1 file(s) --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 611448b5..715cbc49 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,7 +17,7 @@ import os # -- Project information ----------------------------------------------------- project = 'Gaussino' -copyright = '2022, LHCb Collaboration' +copyright = '2017-2022, CERN for the benefit of the LHCb and FCC collaborations' author = 'LHCb Collaboration' # The full version, including alpha/beta/rc tags -- GitLab From d53b36161e89e0c20cd187ba24ac03cb19d96e28 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Fri, 13 May 2022 12:45:21 +0200 Subject: [PATCH 26/56] More verbose docs --- docs/conf.py | 3 + docs/getting_started/contributing.md | 26 +++- docs/getting_started/gauss.md | 165 +++++++++++++++++++++ docs/getting_started/gaussino.md | 210 +++++++++++++++++++++++++++ docs/getting_started/installing.md | 184 ----------------------- docs/index.rst | 3 +- 6 files changed, 404 insertions(+), 187 deletions(-) create mode 100644 docs/getting_started/gauss.md create mode 100644 docs/getting_started/gaussino.md delete mode 100644 docs/getting_started/installing.md diff --git a/docs/conf.py b/docs/conf.py index 826b409c..03f8b5b7 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -98,6 +98,9 @@ html_context['version'] = current_version # POPULATE LINKS TO OTHER VERSIONS html_context['versions'] = list() +# Auto-generated header anchors +myst_heading_anchors = 3 + for version in versions: html_context['versions'].append((version, '/' + website_root + '/' + version + '/')) diff --git a/docs/getting_started/contributing.md b/docs/getting_started/contributing.md index 793616dc..d093cacf 100644 --- a/docs/getting_started/contributing.md +++ b/docs/getting_started/contributing.md @@ -1,8 +1,30 @@ # Contributing -The future framework (for LHCb) consists of two components, Gaussino and Gauss. Gaussino contains all core functionality which should be independent of LHCb. It should incorporate all framework related issues and define all necessary interfaces and implement the interplay between them. Gauss itself is based on Gaussino and should only contain the specific implementations of the interfaces defined in Gaussino and the necessary configuration to setup the application. Changes should be introduced via merge requests targetting the `master` branch. Adding the label `lhcb-gaussino` will include them in the nightly build. +The future framework (for LHCb) consists of two components, Gaussino and Gauss. Gaussino contains all core functionality which should be independent of LHCb. It should incorporate all framework related issues and define all necessary interfaces and implement the interplay between them. Gauss itself is based on Gaussino and should only contain the specific implementations of the interfaces defined in Gaussino and the necessary configuration to setup the application. -## Documenting +## Developing Gaussino + +Please make sure that you followed the recipe described in [](./gaussino.md#working-with-gaussino) and make sure that you work on your local development branch. + +Changes should be introduced via merge requests targeting the `master` branch. If you wish to open a MR with your local branch (the name of the branch should start with your username, e.g. `username-some-changes`), then you can directly push the changes to the branch in the remote repository: + +```shell +git add file1 file2 +git commit -m "The description of your commit" +git push origin username-some-changes +``` + +In gitlab, open a MR targeting the `master` branch. Adding the `lhcb-gaussino` label will include your changes in the next nightly build of `lhcb-gaussino`. + +## Developing Gauss-on-Gaussino + +The instructions are almost the same as for Gaussino in the previous section: [](./contributing.md#developing-gaussino). The only difference is that the MR should be targeting `Futurev4` branch. + +## Fast simulation developments with Geant4 10.7 + +All the developments related to fast simulations with Geant4 10.7 are tested in the `lhcb-gaussino-fastsim` nightly slot. We have a dedicated target branch in Gaussino and Gauss-on-Gaussino for these developments: `FASTSIM`. Therefore, you can follow the instructions as in [](./gaussino.md#working-with-gaussino), [](./gauss.md#working-with-gauss-on-gaussino-to-be-moved), [](./contributing.md#developing-gaussino) and [](./contributing.md#developing-gauss-on-gaussino) and change `lhcb-gaussino` to `lhcb-gaussino-fastsim` and `master` to `FASTSIM` (in Gauss: `Futurev4` to `FASTSIM`). + +## Documentation 1. Add a `Documentation` label to your MR. This will activate the gitlab CI pipeline. diff --git a/docs/getting_started/gauss.md b/docs/getting_started/gauss.md new file mode 100644 index 00000000..811f912f --- /dev/null +++ b/docs/getting_started/gauss.md @@ -0,0 +1,165 @@ +# Working with Gauss-on-Gaussino [TO BE MOVED] +```{eval-rst} +.. attention:: + This section will be moved to a new documentation website dedicated to Gauss. +``` + +## Using the LHCb nightly build system + +### Building Gauss and Gaussino from source + +If you wish to work with Gauss (LHCb simulation framework) based on Gaussino's core functionalities, follow the recipe in the section dedicated to Gaussino (see: [](./gaussino.md#working-with-gaussino)) and go back to the directory where your local copy of the nighly slot resides. + +```{eval-rst} +.. tip:: + If you do not have any changes in Gaussino, you can use Gaussino directly from the nightlies. Just follow the same recipe up to the section `Fetch the nightlies locally <./gaussino.md#fetch-the-nightlies-locally>`_ and add Gaussino to the list of copied projects: + + .. code-block:: shell + + lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,Gaussino lhcb-gaussino Today +``` + + +#### Clone Gauss and prepare your local development branch +```shell +git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss +cd Gauss +``` + +As Gauss-on-Gaussino is not yet on `master` we have to base all our developments on a dedicated branch: `Futurev4`. + +```shell +git checkout -b your_local_dev_branch Futurev4 +``` +The rest is very similar to the development in Gaussino: + +```{eval-rst} +.. attention:: + Don't forget to merge all pending merge requests with a label ``lhcb-gaussino`` (or any other MR that was picked up in the nightly)! +``` + +In order to get the list of pending merge requests check the checkout report by clicking on the **black arrow** next to the **Gauss project** on the [website](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino). You will get a list of the MR ids that are needed to work with this build of Gauss. For example, if the MRs are Gauss!800 and Gauss!845, you can do the following: + +```shell +git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +git merge --no-edit 800 845 +``` + + +#### Configure, build and install Gauss-on-Gaussino + +```shell +cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build +cd build +make -j4 install +``` + +#### Run Gauss + +```shell +./run gaudirun.py your_options.py +``` + +### Example 1: building Gauss only + +Below you will find a summary of the commands that should cover the majority of the use cases. + +```shell +source /cvmfs/lhcb.cern.ch/lib/LbEnv +lb-set-platform x86_64_v2-centos7-gcc11-opt +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,Gaussino lhcb-gaussino Today +cd lhcb-gaussino/Today +lb-set-workspace . +git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss +cd Gauss +git checkout -b your_local_dev_branch Futurev4 +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 800 845 +cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build +cd build +make -j4 install +``` + +### Example 2: building Gauss & Gaussino + +Below you will find a summary of the commands that should cover the majority of the use cases in which we need to modify both Gauss & Gaussino. + +```shell +source /cvmfs/lhcb.cern.ch/lib/LbEnv +lb-set-platform x86_64_v2-centos7-gcc11-opt +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,Gaussino lhcb-gaussino Today +cd lhcb-gaussino/Today +lb-set-workspace . +git clone ssh://git@gitlab.cern.ch:7999/Gaussino/Gaussino.git +cd Gaussino +git checkout -b your_local_dev_branch +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 23 45 +cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build +cd build +make -j4 install +cd ../.. +git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss +cd Gauss +git checkout -b your_local_dev_branch Futurev4 +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 800 845 +cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build +cd build +make -j4 install +``` + +### Example 3: working with DD4hep/Detector + +Below you will find a summary of the commands needed to work with DD4hep/Detector. There should be ne need to change anything in Gaussino, so we will only build Gauss. + +```shell +source /cvmfs/lhcb.cern.ch/lib/LbEnv +lb-set-platform x86_64_v2-centos7-gcc11+dd4hep-opt +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,Gaussino lhcb-gaussino Today +cd lhcb-gaussino/Today +lb-set-workspace . +git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss +cd Gauss +git checkout -b your_local_dev_branch Futurev4 +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 800 845 +cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build +cd build +make -j4 install +``` + +### Example 4: working with fast simulations with Geant4 10.7 + +Below you will find a summary of the commands needed to work with fast simulations with Geant4 10.7. In this example we will also build Gaussino as there might be some changes required in the generic fast simulation interface. + +```shell +source /cvmfs/lhcb.cern.ch/lib/LbEnv +lb-set-platform x86_64_v2-centos7-gcc11-opt +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support lhcb-gaussino-fastsim Today +cd lhcb-gaussino-fastsim/Today +lb-set-workspace . +git clone ssh://git@gitlab.cern.ch:7999/Gaussino/Gaussino.git +cd Gaussino +git checkout -b your_local_dev_branch FASTSIM +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 23 45 +cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build +cd build +make -j4 install +cd ../.. +git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss +cd Gauss +git checkout -b your_local_dev_branch FASTSIM +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 800 845 +cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build +cd build +make -j4 install +``` diff --git a/docs/getting_started/gaussino.md b/docs/getting_started/gaussino.md new file mode 100644 index 00000000..a37e134b --- /dev/null +++ b/docs/getting_started/gaussino.md @@ -0,0 +1,210 @@ +# Working with Gaussino + +Please note that Gaussino is an experiment-independent package. If you are looking for a concrete experiment implementation, here is the list: +- Gauss-on-Gaussino (LHCb Experiment, for now using the nightly build system) + +## Using the LHCb nightly build system + +### About the nightly system + +You can check the nighlty build status by visiting https://lhcb-nightlies.web.cern.ch/nightly/. There are a few nightly slots currently available for Gaussino: +- [```lhcb-gaussino```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino/) standard slot for the majority of developments, +- [```lhcb-gaussino-fastsim```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino-fastsim/) nightly slot dedicated to fast simulation developments with Geant4 10.7, +- [```lhcb-gaussino-prerelease```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino-prerelease/) the most stable version of Gaussino used to prepare beta releases with LHCb stack, +- [```lhcb-gaussino-new-cmake```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino-new-cmake/) a temporary nightly slot testing the modernized CMake + +Gaussino is built in each nightly slots on 3 platforms: +- ```x86_64_v2-centos7-gcc11-opt``` release build with DetDesc geometry, +- ```x86_64_v2-centos7-gcc11-dbg``` debug build with DetDesc geometry, +- ```x86_64_v2-centos7-gcc11+dd4hep-opt``` release build with DD4Hep geometry, + +### Configuring the environment + +Make sure that you are using LbEnv on lxplus or similar. You can run this to be sure: + +```shell +source /cvmfs/lhcb.cern.ch/lib/LbEnv +``` + +### Configure the platform + +The following will make sure that you have the most recent platform. + +```shell +lb-set-platform x86_64_v2-centos7-gcc11-opt +``` + +```{eval-rst} +.. tip:: + Use ``x86_64_v2-centos7-gcc11+dd4hep-opt`` if you want to work with **Detector/DD4hep**. +``` + +### Building Gaussino from source + +```{eval-rst} +.. note:: + This is the recommended way for now. +``` + +#### Fetch the nightlies locally + +We're going to create a local copy of the projects used in the nightly slot. Gaussino requires Gaudi, Detector, LHCb and Run2Support. LHCb and Run2Support are used when building Gaussino in the LHCb stack. + + +```shell +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support lhcb-gaussino Today +cd lhcb-gaussino/Today +lb-set-workspace . +``` + +```{eval-rst} +.. tip:: + Use ``x86_64_v2-centos7-gcc11+dd4hep-opt`` if you want to work with Detector/DD4hep. +``` + +```{eval-rst} +.. attention:: + The ``Today`` version of the nightly slot might not always be available. Please, always check directly on the website if the build of Gaussino & Gauss was successful (cells in the `table <https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino/>`_ should be either orange or green, but not red!). Always use the latest version that was successful (``yesterday``, ``1222`` etc.). +``` + +#### Clone Gaussino and prepare your local development branch + +```shell +git clone ssh://git@gitlab.cern.ch:7999/Gaussino/Gaussino.git +cd Gaussino +git checkout -b your_local_dev_branch +``` + +```{eval-rst} +.. attention:: + Don't forget to merge all pending merge requests with a label ``lhcb-gaussino`` (or any other MR that was picked up in the nightly)! +``` + +In order to get the list of pending merge requests check the checkout report by clicking on the **black arrow** next to the **Gaussino project** on the [website](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino). You will get a list of the MR ids that are needed to work with this build of Gaussino. For example, if the MRs are Gaussino!24 and Gaussino!51, you can do the following: + +```shell +git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +git merge --no-edit 24 51 +``` + +#### Configure, build and install Gaussino + +```shell +cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build +cd build +make -j4 install +``` + +#### Run Gaussino + +```shell +./run gaudirun.py your_options.py +``` + +### Working on a satellite project + +```{eval-rst} +.. error:: + This is not working yet and has to be updated. +``` + +#### Get a skeleton of your project + +```shell +lb-dev --nightly lhcb-gaussino/Today Gaussino/HEAD -c x86_64-centos7-gcc9-opt +``` +#### Additional configuration. + +```shell +cd GaussinoDev_HEAD +``` + +```shell +git lb-use Gaussino https://gitlab.cern.ch/Gaussino/Gaussino +``` + +#### Configure the package +Conifure the package you'd like to develop. Here `Sim/Gaussino` + +```shell +git lb-checkout Gaussino/master Sim/Gaussino +``` + +#### Build + +```shell +make +``` + +### Working on a satellite project with nightlies locally + +```{eval-rst} +.. error:: + This is not working yet and has to be updated. +``` + +This might be useful if you want a local copy of the projects in the nighlt slot or if you're looking for a nightly slot that is no longer present in `/cvmfs/lhcbdev.cern.ch/nightlies/lhcb-gaussino` + + +```shell +ll /cvmfs/lhcbdev.cern.ch/nightlies/lhcb-gaussino +``` + +Here is an exemplary list of nighlty slots: + +``` +total 5.0K +drwxr-xr-x. 12 cvmfs cvmfs 224 Apr 24 01:44 931 +drwxr-xr-x. 12 cvmfs cvmfs 224 Apr 26 01:05 932 +drwxr-xr-x. 12 cvmfs cvmfs 224 Apr 27 01:43 933 +drwxr-xr-x. 12 cvmfs cvmfs 224 Apr 29 01:20 934 +drwxr-xr-x. 12 cvmfs cvmfs 224 Apr 30 02:30 935 +drwxr-xr-x. 12 cvmfs cvmfs 224 May 2 02:53 936 +lrwxrwxrwx. 1 cvmfs cvmfs 3 Apr 30 01:11 Fri -> 935 +lrwxrwxrwx. 1 cvmfs cvmfs 3 May 2 00:10 latest -> 936 +lrwxrwxrwx. 1 cvmfs cvmfs 3 May 2 00:10 Sun -> 936 +lrwxrwxrwx. 1 cvmfs cvmfs 3 Apr 29 00:35 Thu -> 934 +``` + +`Today` nighlty slot will be used in further steps. + +#### Create a base directory for your nighlties + +```shell +mkdir gaussino_base +``` + +#### Install the nightlies in your base directory + +```shell +lbn-install --verbose --projects Gaussino --platforms x86_64-centos7-gcc9-opt --dest gaussino_base/lhcb-gaussino/Today lhcb-gaussino Today +``` + +#### Use the nightlies in your base directory + +```shell +lb-dev --nightly-base gaussino_base --nightly lhcb-gaussino/Today Gaussino/HEAD -c x86_64-centos7-gcc9-opt +``` + +#### Additional configuration + +```shell +cd GaussinoDev_HEAD +``` + +```shell +git lb-use Gaussino https://gitlab.cern.ch/Gaussino/Gaussino +``` + +#### Configure the package +Configure the package you'd like to develop. Here ```Sim/Gaussino``` + +```shell +git lb-checkout Gaussino/master Sim/Gaussino +``` + +#### Build + +```shell +make +``` diff --git a/docs/getting_started/installing.md b/docs/getting_started/installing.md deleted file mode 100644 index 305d1968..00000000 --- a/docs/getting_started/installing.md +++ /dev/null @@ -1,184 +0,0 @@ -# Running Gaussino - -Please note that Gaussino is an experiment-independent package. If you are looking for a concrete experiment implementation, here is the list: -- Gauss-on-Gaussino (LHCb Experiment) - -## Running from the nighlties - -Currently it is only possible to build Gaussino with the help of nightly builds. - -You can check the nighlty build status by visiting https://lhcb-nightlies.web.cern.ch/nightly/. The nightly slot currently available for Gaussino is ```lhcb-gaussino```. You can either install the latest build or one from the past in case the current one is failed. - -### Configuring the environment - -1. Make sure you're using LbEnv on lxplus or similar. You can run this to be sure: - -``` -source /cvmfs/lhcb.cern.ch/lib/LbEnv -``` - -2. Configure the platform - -``` -lb-set-platform x86_64_v2-centos7-gcc11-opt -``` - -```{eval-rst} -.. note:: - Use `x86_64_v2-centos7-gcc11+dd4hep-opt` if you want work with Detector/DD4hep. -``` - -### Building from source - -```{eval-rst} -.. note:: - This is the recommended way for now. -``` - -1. Fetch the nightlies locally - - ``` - lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support lhcb-gaussino Today - lb-set-workspace ./lhcb-gaussino/Today - ``` - - ```{eval-rst} - .. note:: - Use `x86_64_v2-centos7-gcc11+dd4hep-opt` if you want work with Detector/DD4hep. - ``` - - OR (less recommended) add the nightlies path to ```CMAKE_PREFIX_PATH``` directly from the destination - - ``` - export CMAKE_PREFIX_PATH=/cvmfs/lhcbdev.cern.ch/nightlies/lhcb-gaussino/latest:${CMAKE_PREFIX_PATH} - ``` - -2. Clone the repository. - - ``` - git clone ssh://git@gitlab.cern.ch:7999/Gaussino/Gaussino.git - cd Gaussino - ``` - - ```{eval-rst} - .. note:: - Don't forget to merge all pending merge requests with a label ```lhcb-gaussino```! - ``` - - -3. Configure, build and install: - ``` - cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build - make -C build -j4 install - ``` - -4. Run - - ``` - ./build/run gaudirun.py your_options.py - ``` - -### Working on a satellite project - -```{eval-rst} -.. warning:: - This is not working yet. -``` - -1. Get a skeleton of your project by typing: - - ```bash - lb-dev --nightly lhcb-gaussino/Today Gaussino/HEAD -c x86_64-centos7-gcc9-opt - ``` -2. Additional configuration. - - ```bash - cd GaussinoDev_HEAD - ``` - - ```bash - git lb-use Gaussino https://gitlab.cern.ch/Gaussino/Gaussino - ``` - -3. Configure the package you'd like to develop. Here ```Sim/Gaussino``` - - ```bash - git lb-checkout Gaussino/master Sim/Gaussino - ``` - -4. Build. - - ``` - make - ``` - -### Working on a satellite project with nightlies locally - -```{eval-rst} -.. warning:: - This is not working yet. -``` - -This might be useful if you want a local copy of the projects in the nighlt slot or if you're looking for a nightly slot that is no longer present in ```/cvmfs/lhcbdev.cern.ch/nightlies/lhcb-gaussino``` - - -```bash -ll /cvmfs/lhcbdev.cern.ch/nightlies/lhcb-gaussino -``` - -Here is an exemplary list of nighlty slots: - -``` -total 5.0K -drwxr-xr-x. 12 cvmfs cvmfs 224 Apr 24 01:44 931 -drwxr-xr-x. 12 cvmfs cvmfs 224 Apr 26 01:05 932 -drwxr-xr-x. 12 cvmfs cvmfs 224 Apr 27 01:43 933 -drwxr-xr-x. 12 cvmfs cvmfs 224 Apr 29 01:20 934 -drwxr-xr-x. 12 cvmfs cvmfs 224 Apr 30 02:30 935 -drwxr-xr-x. 12 cvmfs cvmfs 224 May 2 02:53 936 -lrwxrwxrwx. 1 cvmfs cvmfs 3 Apr 30 01:11 Fri -> 935 -lrwxrwxrwx. 1 cvmfs cvmfs 3 May 2 00:10 latest -> 936 -lrwxrwxrwx. 1 cvmfs cvmfs 3 May 2 00:10 Sun -> 936 -lrwxrwxrwx. 1 cvmfs cvmfs 3 Apr 29 00:35 Thu -> 934 -``` - -```Today```` nighlty slot will be used in further steps. - -1. Create a base directory for your nighlties. - - ```bash - mkdir gaussino_base - ``` - -2. Install the nightlies in your base directory. - - ```bash - lbn-install --verbose --projects Gaussino --platforms x86_64-centos7-gcc9-opt --dest gaussino_base/lhcb-gaussino/Today lhcb-gaussino Today - ``` - -3. Use the nightlies in your base directory to work on a satellite project. - - ```bash - lb-dev --nightly-base gaussino_base --nightly lhcb-gaussino/Today Gaussino/HEAD -c x86_64-centos7-gcc9-opt - ``` -4. Additional configuration. - - ```bash - cd GaussinoDev_HEAD - ``` - - ```bash - git lb-use Gaussino https://gitlab.cern.ch/Gaussino/Gaussino - ``` - -5. Configure the package you'd like to develop. Here ```Sim/Gaussino``` - - ```bash - git lb-checkout Gaussino/master Sim/Gaussino - ``` - -6. Build. - - ``` - make - ``` diff --git a/docs/index.rst b/docs/index.rst index f3272d34..10e42e95 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -17,7 +17,8 @@ Welcome to the Gaussino's documentation! :hidden: :maxdepth: 2 - getting_started/installing.md + getting_started/gaussino.md + getting_started/gauss.md getting_started/contributing.md .. toctree:: -- GitLab From 6f10139bbfbf3cc7490d8ba54e629d1a9d1c8476 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Wed, 18 May 2022 10:05:10 +0200 Subject: [PATCH 27/56] Fix the checkout of the target branch --- docs/getting_started/gauss.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/getting_started/gauss.md b/docs/getting_started/gauss.md index 811f912f..a23f5024 100644 --- a/docs/getting_started/gauss.md +++ b/docs/getting_started/gauss.md @@ -29,7 +29,8 @@ cd Gauss As Gauss-on-Gaussino is not yet on `master` we have to base all our developments on a dedicated branch: `Futurev4`. ```shell -git checkout -b your_local_dev_branch Futurev4 +git checkout Futurev4 +git checkout -b your_local_dev_branch ``` The rest is very similar to the development in Gaussino: @@ -72,7 +73,8 @@ cd lhcb-gaussino/Today lb-set-workspace . git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss -git checkout -b your_local_dev_branch Futurev4 +git checkout Futurev4 +git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 800 845 @@ -103,7 +105,8 @@ make -j4 install cd ../.. git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss -git checkout -b your_local_dev_branch Futurev4 +git checkout Futurev4 +git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 800 845 @@ -124,7 +127,8 @@ cd lhcb-gaussino/Today lb-set-workspace . git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss -git checkout -b your_local_dev_branch Futurev4 +git checkout Futurev4 +git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 800 845 @@ -145,7 +149,8 @@ cd lhcb-gaussino-fastsim/Today lb-set-workspace . git clone ssh://git@gitlab.cern.ch:7999/Gaussino/Gaussino.git cd Gaussino -git checkout -b your_local_dev_branch FASTSIM +git checkout FASTSIM +git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 23 45 @@ -155,7 +160,8 @@ make -j4 install cd ../.. git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss -git checkout -b your_local_dev_branch FASTSIM +git checkout FASTSIM +git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 800 845 -- GitLab From ce9dbf7f4b87f67bca92080d3d9cb255798edfc7 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Wed, 18 May 2022 10:39:43 +0200 Subject: [PATCH 28/56] Add instructions for DD4hep integration --- docs/examples/adding_subdetector_in_dd4hep.md | 6 + .../adding_subdetector_in_detector.md | 187 ++++++++++++++++++ docs/getting_started/contributing.md | 5 + docs/getting_started/gauss.md | 69 ++++++- docs/index.rst | 4 +- 5 files changed, 264 insertions(+), 7 deletions(-) create mode 100644 docs/examples/adding_subdetector_in_dd4hep.md create mode 100644 docs/examples/adding_subdetector_in_detector.md diff --git a/docs/examples/adding_subdetector_in_dd4hep.md b/docs/examples/adding_subdetector_in_dd4hep.md new file mode 100644 index 00000000..17a8578d --- /dev/null +++ b/docs/examples/adding_subdetector_in_dd4hep.md @@ -0,0 +1,6 @@ +# Adding a new sub-detector with DD4hep standalone + +```{eval-rst} +.. attention:: + The generic way of doing this is a work-in-progress. +``` diff --git a/docs/examples/adding_subdetector_in_detector.md b/docs/examples/adding_subdetector_in_detector.md new file mode 100644 index 00000000..717493dd --- /dev/null +++ b/docs/examples/adding_subdetector_in_detector.md @@ -0,0 +1,187 @@ +# Adding a new sub-detector with Detector [TO BE MOVED] + +## Preparing Gauss for adding new sub-detectors + +```{eval-rst} +.. attention:: + This section will be moved to a new documentation website dedicated to Gauss. +``` + +Make sure that before you start this tutorial you have followed the examples that show how to build Gaussino with DD4hep support. In particular, the decision has to be made if you want work with your local copy of the Detector or the Detector project built in the nightly system: + +- [](../getting_started/gauss.md#example-3-working-with-dd4hep-and-detector-from-the-nightlies) +- [](../getting_started/gauss.md#example-4-working-with-dd4hep-and-detector-built-locally) + +```{eval-rst} +.. tip:: + Use ``x86_64_v2-centos7-gcc11+dd4hep-opt`` if you want to work with **Detector/DD4hep**. +``` + +## Checklist to activate a sub-detector + +Once you have correctly configured Gauss, you can start integrating your sub-detector with the simulation framework. We have prepared a list of the required tasks: + +1. [](./adding_subdetector_in_detector.md#modify-the-xml-geometry-description) +2. [](./adding_subdetector_in_detector.md#implement-python-configuration) +3. [](./adding_subdetector_in_detector.md#check-if-extra-modifications-are-needed) +4. [](./adding_subdetector_in_detector.md#create-a-mr-in-gauss-targeting-futurev4-branch) +5. [](./adding_subdetector_in_detector.md#put-the-sub-detector-in-the-nighlty-and-lhcbpr-tests) + +### Modify the XML geometry description + +In order to load the geometry in Gauss from the Detector project, you have to make sure that your sub-detector is completely described in XML files in `Detector/compact/trunk` directory of the Detector project. Therefore, Gauss has to know what is the hiararchy of the volumes in the geometry and this has to be implemented in [xml_writer.py](https://gitlab.cern.ch/lhcb/Gauss/-/blob/Futurev4/Sim/Gauss/python/Gauss/Geometry/xml_writer.py). We will use `VP` as an example. `VP` has to be added in `/world/BeforeMagnetRegion` and therefore the following changes + +```diff ++ ET.SubElement(define, "constant", name="VP:parent", ++ value="/world/BeforeMagnetRegion", type="string") +``` + +are needed in the `xml_writer.py`: + +```python +# Combine the includes into a valid LHCb DD4hep xml and return name of temporary +# file +def create_xml(includesfiles): + unique_includes = list(OrderedDict.fromkeys(includesfiles)) + detectorroot = os.path.join(os.environ['DETECTOR_PROJECT_ROOT'], 'compact/trunk/') + + def addroot(p): + if p[0] != '.' and p[0] != '/': + return detectorroot + p + return p + + root = ET.Element("lccdd") + ET.SubElement(root, "std_conditions", type="STP") + debug = ET.SubElement(root, "debug") + ET.SubElement(debug, "type", name="includes", value="0") + ET.SubElement(debug, "type", name="materials", value="0") + includes = ET.SubElement(root, "includes") + ET.SubElement(includes, "gdmlFile", ref=addroot("defaults.xml")) + define = ET.SubElement(root, "define") + ET.SubElement(define, "constant", name="Bls:parent", + value="/world/BeforeMagnetRegion/BeforeVelo", type="string") + ET.SubElement(define, "constant", name="BcmUp:parent", + value="/world/BeforeMagnetRegion/BeforeVelo", type="string") + ET.SubElement(define, "constant", name="BcmDown:parent", + value="/world/DownstreamRegion/AfterMuon", type="string") + ET.SubElement(define, "constant", name="GValve:parent", + value="/world/BeforeMagnetRegion/BeforeVelo", type="string") + ET.SubElement(define, "constant", name="MBXWUp:parent", + value="/world/UpstreamRegion", type="string") + ET.SubElement(define, "constant", name="Cavern:parent", + value="/world/Infrastructure", type="string") + ET.SubElement(define, "constant", name="Tunnel:parent", + value="/world/Infrastructure", type="string") + ET.SubElement(define, "constant", name="Bunker:parent", + value="/world/Infrastructure", type="string") + # here we added VP + ET.SubElement(define, "constant", name="VP:parent", + value="/world/BeforeMagnetRegion", type="string") + ET.SubElement(define, "constant", name="UT:parent", + value="/world/BeforeMagnetRegion", type="string") + ET.SubElement(define, "constant", name="FT:parent", + value="/world/AfterMagnetRegion/T", type="string") + ET.SubElement(define, "constant", name="Magnet:parent", + value="/world/MagnetRegion", type="string") + ET.SubElement(define, "constant", name="Magnet:ignore", value="0") + ET.SubElement(define, "constant", name="UpstreamRegion:ignore", value="0") + ET.SubElement(define, "constant", name="BeforeMagnetRegion:ignore", value="0") # NOQA + ET.SubElement(define, "constant", name="MagnetRegion:ignore", value="0") + ET.SubElement(define, "constant", name="AfterMagnetRegion:ignore", value="0") # NOQA + ET.SubElement(define, "constant", name="DownstreamRegion:ignore", value="0") + + ET.SubElement(root, "include", ref=addroot("global/conditions.xml")) + + # FIXME: Regions need something from this file + ET.SubElement(root, "include", ref=addroot("T/parameters.xml")) + ET.SubElement(root, "include", ref=addroot("Regions/detector.xml")) + + for inc in unique_includes: + ET.SubElement(root, "include", ref=addroot(inc)) + + _, tmpfile = tempfile.mkstemp('.xml') + xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml(indent=" ") + with open(tmpfile, "w") as f: + f.write(xmlstr) + log.info('Wrote xml file to {}'.format(tmpfile)) + return tempfile.tempdir, tmpfile.replace(tempfile.tempdir + '/', '') +``` + +A temporary XML file will be created in `/tmp` on your local machine. + + +### Implement python configuration + + +What happens in Gauss is that we use the python configuration to decide which sub-detectors should be included and which not. If a sub-detector is added, then all of its XML files have to be imported. Please note that Gauss has to support both DD4hep and DetDesc geometries and therefore we need a separate configuration for each of them. Python configuration of each sub-detector should be handled in a separate python file in `Sim/Gauss/python/Gauss/Geometry/`. We will use `VP` again as an example. In this case, a file `VP.py` is already there. If the sub-detector is completely new, you should create a new file and add the following import in [__init__.py](https://gitlab.cern.ch/lhcb/Gauss/-/blob/Futurev4/Sim/Gauss/python/Gauss/Geometry/__init__.py): + +```diff ++ from Gauss.Geometry.VP import * +``` + +You have to make sure that you sub-detector class inherits from `det_base` and uses the `subdetector` decorator. There is also a set of functions that have to be implemented. For `VP`: + +```python +from Gauss.Geometry.det_base import det_base +from Gauss.Geometry.Helpers import subdetector + +@subdetector +class VP(det_base): + + def ApplyDetectorDetDesc(self, basePieces, detPieces): + # Add the necessary detector pieces for DetDesc + + def ApplyDetectorDD4hep(self, basePieces, detPieces): + # Add a list of all the necessary DD4hep includes + + def SetupExtractionImpl(self, slot=''): + # Configure the hit getter that transforms the Geant4 hit collection + # to our event model. Wrapping function in base class configures SimConf. + + def SetupMonitor(self, slot=''): + # Setup any necessary monitoring algorithms +``` + +Therefore, in order to use the DD4hep implementation of your sub-detector you have to implement `ApplyDetectorDetDesc` and populate the `LHCbGeo._listOfXMLIncludes_` list with the XML files required for your sub-detector. If your sub-detector is registering hits, then you should also provide a mapping between the name of the sensitive volume and the name of the factory used to construct the sensitive detector object. For `VP` we have: + +```python +def ApplyDetectorDD4hep(self, basePieces, detPieces): + # Configuring the DD4hep detector conversion. + # 1. Add the mapping to have the LHCbDD4hepCnvSvc instrument + # the G4 volume with the correct sensdet factory if marked with a + # dd4hep sensitive detector named VP + from Configurables import LHCbDD4hepCnvSvc + mappings = LHCbDD4hepCnvSvc().getProp('SensDetMappings') + mappings['VP'] = 'GiGaSensDetTrackerDD4hep/VPSDet' + LHCbDD4hepCnvSvc().SensDetMappings = mappings + + # Add the necessary dd4hep includes for the VP. Also added all the + # dependencies for material definitions that were identified using + # trial and error. As the list is made unique before being added to + # the xml this should be fine if they appear in multiple places + from Gauss.Geometry import LHCbGeo + go = LHCbGeo._listOfXMLIncludes_ + + go += ["Pipe/parameters.xml"] + go += ["Rich1/DetElem/RichRun3PropertySpecParam.xml"] + go += ["Rich1/RichMatDir/RichMaterials.xml"] + go += ["VP/parameters.xml"] + go += ["VP/visualization.xml"] + go += ["VP/detector.xml"] + go += ["VP/conditions.xml"] +``` + +### Check if extra modifications are needed + +This is more as a reminder. You have to make sure that the extraction hits classes and monitoring classes are implemented or modernized. Moreover, some sub-detectors use non-standard classes that might need additional changes for the Detector/DD4hep implementation. This has to be checked. + +### Create a MR in Gauss targeting Futurev4 branch + +Simply follow the same procedure as in: [](../getting_started/contributing.md#developing-gauss-on-gaussino). + +### Put the sub-detector in the nighlty and LHCbPR tests + +```{eval-rst} +.. attention:: + The generic way of doing this is a work-in-progress. +``` diff --git a/docs/getting_started/contributing.md b/docs/getting_started/contributing.md index d093cacf..ccfd7d2a 100644 --- a/docs/getting_started/contributing.md +++ b/docs/getting_started/contributing.md @@ -18,6 +18,11 @@ In gitlab, open a MR targeting the `master` branch. Adding the `lhcb-gaussino` l ## Developing Gauss-on-Gaussino +```{eval-rst} +.. attention:: + This sub-section will be moved to a new documentation website dedicated to Gauss. +``` + The instructions are almost the same as for Gaussino in the previous section: [](./contributing.md#developing-gaussino). The only difference is that the MR should be targeting `Futurev4` branch. ## Fast simulation developments with Geant4 10.7 diff --git a/docs/getting_started/gauss.md b/docs/getting_started/gauss.md index a23f5024..d93fb6a6 100644 --- a/docs/getting_started/gauss.md +++ b/docs/getting_started/gauss.md @@ -61,7 +61,7 @@ make -j4 install ./run gaudirun.py your_options.py ``` -### Example 1: building Gauss only +### Example 1 building Gauss only Below you will find a summary of the commands that should cover the majority of the use cases. @@ -83,7 +83,7 @@ cd build make -j4 install ``` -### Example 2: building Gauss & Gaussino +### Example 2 building Gauss and Gaussino Below you will find a summary of the commands that should cover the majority of the use cases in which we need to modify both Gauss & Gaussino. @@ -115,9 +115,9 @@ cd build make -j4 install ``` -### Example 3: working with DD4hep/Detector +### Example 3 working with DD4hep and Detector from the nightlies -Below you will find a summary of the commands needed to work with DD4hep/Detector. There should be ne need to change anything in Gaussino, so we will only build Gauss. +Below you will find a summary of the commands needed to work with DD4hep/Detector that is taken from the nightlies. There should be ne need to change anything in Gaussino, so we will only build Gauss. ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv @@ -137,7 +137,66 @@ cd build make -j4 install ``` -### Example 4: working with fast simulations with Geant4 10.7 +### Example 4 working with DD4hep and Detector built locally + +Below you will find a summary of the commands needed to work with DD4hep/Detector that is built locally. In this case, we have to rebuild all the projects downstream with respect to the Detector. + +```shell +source /cvmfs/lhcb.cern.ch/lib/LbEnv +lb-set-platform x86_64_v2-centos7-gcc11+dd4hep-opt +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE lhcb-gaussino Today +cd lhcb-gaussino/Today +lb-set-workspace . +git clone ssh://git@gitlab.cern.ch:7999/lhcb/Detector.git +cd Detector +git checkout -b your_local_dev_branch +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 800 845 +lb-project-init . +make -j4 install +cd .. +git clone ssh://git@gitlab.cern.ch:7999/lhcb/LHCb.git +cd LHCb +git checkout -b your_local_dev_branch +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 800 845 +lb-project-init . +make -j4 install +cd .. +git clone ssh://git@gitlab.cern.ch:7999/lhcb/Run2Support.git +cd Run2Support +git checkout -b your_local_dev_branch +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 800 845 +lb-project-init . +make -j4 install +cd .. +git clone ssh://git@gitlab.cern.ch:7999/Gaussino/Gaussino.git +cd Gaussino +git checkout -b your_local_dev_branch +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 23 45 +cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build +cd build +make -j4 install +cd ../.. +git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss +cd Gauss +git checkout Futurev4 +git checkout -b your_local_dev_branch +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 800 845 +cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build +cd build +make -j4 install +``` + +### Example 5: working with fast simulations with Geant4 10.7 Below you will find a summary of the commands needed to work with fast simulations with Geant4 10.7. In this example we will also build Gaussino as there might be some changes required in the generic fast simulation interface. diff --git a/docs/index.rst b/docs/index.rst index 10e42e95..7ec6d026 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -14,7 +14,6 @@ Welcome to the Gaussino's documentation! .. toctree:: :caption: Getting started - :hidden: :maxdepth: 2 getting_started/gaussino.md @@ -33,11 +32,12 @@ Welcome to the Gaussino's documentation! .. toctree:: :caption: Examples - :hidden: :maxdepth: 2 examples/external_detector examples/parallel_geometry + examples/adding_subdetector_in_detector + examples/adding_subdetector_in_dd4hep Indices and tables -- GitLab From e622213348711f946d3ea518a7f4e7ec5ad7d797 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Wed, 18 May 2022 14:42:38 +0200 Subject: [PATCH 29/56] Change to lb-project-init . --- docs/getting_started/gauss.md | 35 ++++++++++++-------------------- docs/getting_started/gaussino.md | 5 ++--- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/docs/getting_started/gauss.md b/docs/getting_started/gauss.md index d93fb6a6..175285c1 100644 --- a/docs/getting_started/gauss.md +++ b/docs/getting_started/gauss.md @@ -50,15 +50,14 @@ git merge --no-edit 800 845 #### Configure, build and install Gauss-on-Gaussino ```shell -cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build -cd build +lb-project-init . make -j4 install ``` #### Run Gauss ```shell -./run gaudirun.py your_options.py +./build.x86_64_v2-centos7-gcc11-opt/run gaudirun.py your_options.py ``` ### Example 1 building Gauss only @@ -78,8 +77,7 @@ git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 800 845 -cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build -cd build +lb-project-init . make -j4 install ``` @@ -99,10 +97,9 @@ git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 23 45 -cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build -cd build +lb-project-init . make -j4 install -cd ../.. +cd .. git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss git checkout Futurev4 @@ -110,8 +107,7 @@ git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 800 845 -cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build -cd build +lb-project-init . make -j4 install ``` @@ -132,8 +128,7 @@ git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 800 845 -cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build -cd build +lb-project-init . make -j4 install ``` @@ -180,10 +175,9 @@ git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 23 45 -cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build -cd build +lb-project-init . make -j4 install -cd ../.. +cd .. git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss git checkout Futurev4 @@ -191,8 +185,7 @@ git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 800 845 -cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build -cd build +lb-project-init . make -j4 install ``` @@ -213,10 +206,9 @@ git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 23 45 -cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build -cd build +lb-project-init . make -j4 install -cd ../.. +cd .. git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss git checkout FASTSIM @@ -224,7 +216,6 @@ git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' # git merge --no-edit 800 845 -cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build -cd build +lb-project-init . make -j4 install ``` diff --git a/docs/getting_started/gaussino.md b/docs/getting_started/gaussino.md index a37e134b..2a935506 100644 --- a/docs/getting_started/gaussino.md +++ b/docs/getting_started/gaussino.md @@ -90,15 +90,14 @@ git merge --no-edit 24 51 #### Configure, build and install Gaussino ```shell -cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -B build -cd build +lb-project-init . make -j4 install ``` #### Run Gaussino ```shell -./run gaudirun.py your_options.py +./build.x86_64_v2-centos7-gcc11-opt/run gaudirun.py your_options.py ``` ### Working on a satellite project -- GitLab From 1bf60150c196dabea7425648e5dc23e43c2708fc Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Wed, 18 May 2022 15:44:54 +0200 Subject: [PATCH 30/56] Rewording --- docs/examples/adding_subdetector_in_detector.md | 2 +- docs/getting_started/gauss.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/examples/adding_subdetector_in_detector.md b/docs/examples/adding_subdetector_in_detector.md index 717493dd..fe07406d 100644 --- a/docs/examples/adding_subdetector_in_detector.md +++ b/docs/examples/adding_subdetector_in_detector.md @@ -1,4 +1,4 @@ -# Adding a new sub-detector with Detector [TO BE MOVED] +# Adding a new DD4hep sub-detector with Detector [TO BE MOVED] ## Preparing Gauss for adding new sub-detectors diff --git a/docs/getting_started/gauss.md b/docs/getting_started/gauss.md index 175285c1..e0ad24a3 100644 --- a/docs/getting_started/gauss.md +++ b/docs/getting_started/gauss.md @@ -17,6 +17,8 @@ If you wish to work with Gauss (LHCb simulation framework) based on Gaussino's c .. code-block:: shell lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,Gaussino lhcb-gaussino Today + +We really encourage you to use `lbn-install` as it generates a local copy of the nightly build directly on your machine and will create the most stable environment for your developments. ``` @@ -26,7 +28,7 @@ git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss ``` -As Gauss-on-Gaussino is not yet on `master` we have to base all our developments on a dedicated branch: `Futurev4`. +Gauss-on-Gaussino is develped on a dedicated branch: `Futurev4`. So your development has to start from this branch. ```shell git checkout Futurev4 -- GitLab From 7384e170fc0e6a32b42efdfd3302f92098341422 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Tue, 21 Jun 2022 09:42:59 +0200 Subject: [PATCH 31/56] Remove /gaussino as the docs root --- docs/conf.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 03f8b5b7..658ed1fe 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -78,7 +78,6 @@ napoleon_numpy_docstring = True # -- Custom Versioning settings ----------------------------------------------- # Implemented manually as READTHEDOCS handle them once already hosted -website_root = 'gaussino' html_context['display_lower_left'] = True # visible versions @@ -102,8 +101,7 @@ html_context['versions'] = list() myst_heading_anchors = 3 for version in versions: - html_context['versions'].append((version, - '/' + website_root + '/' + version + '/')) + html_context['versions'].append((version, '/' + version + '/')) from importlib import import_module from pprint import pformat -- GitLab From 3a8b3091b27ee52debfbaa589591883363e6a0d2 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Fri, 1 Jul 2022 16:33:11 +0200 Subject: [PATCH 32/56] Port GDMLReader from Gauss --- Sim/Gaussino/python/Gaussino/Simulation.py | 30 ++++- .../src/det/GiGaMTDetectorConstructionFAC.cpp | 35 +++++- .../src/det/GiGaMTDetectorConstructionFAC.h | 14 ++- Sim/GiGaMTGeo/CMakeLists.txt | 1 + Sim/GiGaMTGeo/GiGaMTGeo/IGDMLReader.h | 27 +++++ Sim/GiGaMTGeo/src/GDMLReader.cpp | 101 ++++++++++++++++ Sim/GiGaMTGeo/tests/data/cube_to_import.gdml | 69 +++++++++++ .../tests/options/cube_import_export.py | 111 ++++++++++++++++++ .../tests/qmtest/cube_import_export.qmt | 39 ++++++ docs/configuration/gdml.md | 84 +++++++++++++ docs/index.rst | 1 + 11 files changed, 499 insertions(+), 13 deletions(-) create mode 100644 Sim/GiGaMTGeo/GiGaMTGeo/IGDMLReader.h create mode 100644 Sim/GiGaMTGeo/src/GDMLReader.cpp create mode 100644 Sim/GiGaMTGeo/tests/data/cube_to_import.gdml create mode 100644 Sim/GiGaMTGeo/tests/options/cube_import_export.py create mode 100644 Sim/GiGaMTGeo/tests/qmtest/cube_import_export.qmt create mode 100644 docs/configuration/gdml.md diff --git a/Sim/Gaussino/python/Gaussino/Simulation.py b/Sim/Gaussino/python/Gaussino/Simulation.py index 19b66d70..c358dbbc 100644 --- a/Sim/Gaussino/python/Gaussino/Simulation.py +++ b/Sim/Gaussino/python/Gaussino/Simulation.py @@ -74,6 +74,9 @@ class SimPhase(ConfigurableUser): :var ExportGDML: default: ``{}`` :vartype ExportGDML: dict, optional + :var ImportGDML: default: ``[]`` + :vartype ImportGDML: list, optional + :var ExternalDetectorEmbedder: default: ``""``, name of the embedder used when creating external geometry :vartype ExternalDetectorEmbedder: str, optional @@ -99,6 +102,7 @@ class SimPhase(ConfigurableUser): "SensDetMap": {}, "ExtraGeoTools": [], "ExportGDML": {}, + "ImportGDML": [], "ExternalDetectorEmbedder": "", "ParallelGeometry": False, } @@ -211,14 +215,28 @@ class SimPhase(ConfigurableUser): # self._external_embedders.append(par_ext_emd) #par_geo.world_to_gdml(giga.RunSeq) + self._setup_gdml_import(dettool) + # Save as a GDML File gdml_export = self.getProp("ExportGDML") if type(gdml_export) is not dict: raise RuntimeError("ExportGDML should be a dictionary of options") - else: - for name, value in gdml_export.items(): - if name.startswith('GDML'): - setattr(dettool, name, value) - else: - raise RuntimeError("GDML options start with GDML") + for name, value in gdml_export.items(): + if name.startswith('GDML'): + setattr(dettool, name, value) + else: + raise RuntimeError("GDML options start with GDML") return algs + + def _setup_gdml_import(self, dettool): + gdml_imports = self.getProp("ImportGDML") + if type(gdml_imports) is not list: + raise RuntimeError("ImportGDML should be a list of dicts") + from Configurables import GDMLReader + for gdml_import in gdml_imports: + if type(gdml_import) is not dict: + raise RuntimeError("Elements of ImportGDML should be dicts") + name = gdml_import["GDMLFileName"] + "Reader" + reader = GDMLReader(name, **gdml_import) + dettool.addTool(reader, name=name) + dettool.GDMLReaders.append('GDMLReader/' + name) diff --git a/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.cpp b/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.cpp index 56aa9998..6477f404 100644 --- a/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.cpp +++ b/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.cpp @@ -11,6 +11,7 @@ #include "GiGaMTDetectorConstructionFAC.h" #include "GiGaMTCoreDet/GiGaMTDetectorConstruction.h" #include "GiGaMTCoreDet/IExternalDetectorEmbedder.h" +#include "GiGaMTGeo/IGDMLReader.h" #include "GiGaMTGeo/IGiGaMTGeoSvc.h" #include "SimInterfaces/IGaussinoTool.h" #include <filesystem> @@ -60,9 +61,21 @@ G4VUserDetectorConstruction* GiGaMTDetectorConstructionFAC::construct() const { auto world = m_geoSvc->constructWorld(); for ( auto& tool : m_afterGeo ) { tool->process().ignore(); } + // Import GDML geometry + debug() << "Setting up volumes from GDML in mass geometry" << endmsg; + for ( auto& reader : m_gdml_readers ) { + if ( reader->import( world ).isFailure() ) { + throw GaudiException( "Failed to import the GDML geometry", "GDMLReader", StatusCode::FAILURE ); + } + } + // Import external geometry debug() << "Setting up external embedder volumes in mass geometry" << endmsg; - for ( auto& embedder : m_ext_dets ) { embedder->embed( world ).ignore(); } + for ( auto& embedder : m_ext_dets ) { + if ( embedder->embed( world ).isFailure() ) { + throw GaudiException( "Failed to embed external geometry", "ExternalGeometry", StatusCode::FAILURE ); + } + } return world; } ); @@ -72,9 +85,15 @@ G4VUserDetectorConstruction* GiGaMTDetectorConstructionFAC::construct() const { // Import external SD debug() << "Setting up external embedder SD in mass geometry" << endmsg; - for ( auto& embedder : m_ext_dets ) { embedder->embedSD().ignore(); } + for ( auto& embedder : m_ext_dets ) { + if ( embedder->embedSD().isFailure() ) { + throw GaudiException( "Failed to embed external sensitive detectors", "ExternalGeometry", StatusCode::FAILURE ); + } + } - DressVolumes(); + if ( DressVolumes().isFailure() ) { + throw GaudiException( "Failed to attach sensitive detector classes", "DressVolumes", StatusCode::FAILURE ); + } } ); // Setup parallel worlds @@ -90,7 +109,7 @@ G4VUserDetectorConstruction* GiGaMTDetectorConstructionFAC::construct() const { #include "G4LogicalVolumeStore.hh" #include "G4SDManager.hh" -void GiGaMTDetectorConstructionFAC::DressVolumes() const { +StatusCode GiGaMTDetectorConstructionFAC::DressVolumes() const { auto sdmanager = G4SDManager::GetSDMpointer(); for ( auto& [name, volumes] : m_namemap ) { auto& tool = m_sens_dets.at( name ); @@ -103,9 +122,11 @@ void GiGaMTDetectorConstructionFAC::DressVolumes() const { vol->SetSensitiveDetector( sensdet ); } else { error() << "Couldn't find " << volname << endmsg; + return StatusCode::FAILURE; } } } + return StatusCode::SUCCESS; } #include "G4GDMLParser.hh" @@ -116,7 +137,11 @@ StatusCode GiGaMTDetectorConstructionFAC::SaveGDML() const { g4writer.SetSDExport( m_exportSD.value() ); g4writer.SetEnergyCutsExport( m_exportEnergyCuts.value() ); G4LogicalVolume* world = nullptr; - g4writer.Write( m_outfile.value(), world, m_refs.value(), m_schema.value() ); + if ( !m_schema.value().empty() ) { + g4writer.Write( m_outfile.value(), world, m_refs.value(), m_schema.value() ); + } else { + g4writer.Write( m_outfile.value(), world, m_refs.value() ); + } } catch ( std::exception& err ) { error() << "Caught an exception while writing a GDML file: " << err.what() << endmsg; return StatusCode::FAILURE; diff --git a/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.h b/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.h index d9b004c8..ae8fec0b 100644 --- a/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.h +++ b/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.h @@ -20,6 +20,7 @@ class IGiGaMTGeoSvc; class IGaussinoTool; class G4Material; class G4VUserParallelWorld; +class IGDMLReader; namespace ExternalDetector { class IEmbedder; @@ -42,7 +43,7 @@ protected: typedef ToolHandle<GiGaFactoryBase<G4VSensitiveDetector>> SensDetFac; typedef std::map<std::string, SensDetFac> SensDetVolumeMap; - void DressVolumes() const; + StatusCode DressVolumes() const; StatusCode SaveGDML() const; ServiceHandle<IGiGaMTGeoSvc> m_geoSvc{this, "GiGaMTGeoSvc", "GiGaMTGeo"}; ToolHandleArray<IGaussinoTool> m_afterGeo{this}; @@ -63,7 +64,7 @@ private: Gaudi::Details::Property::ImmediatelyInvokeHandler{true}}; // GDML Export - Gaudi::Property<std::string> m_schema{this, "GDMLSchema", "$GDML_base/src/GDMLSchema/gdml.xsd"}; + Gaudi::Property<std::string> m_schema{this, "GDMLSchema", ""}; Gaudi::Property<bool> m_refs{this, "GDMLAddReferences", true}; Gaudi::Property<std::string> m_outfile{this, "GDMLFileName", ""}; Gaudi::Property<bool> m_outfileOverwrite{this, "GDMLFileNameOverwrite", false, @@ -72,6 +73,15 @@ private: Gaudi::Property<bool> m_exportSD{this, "GDMLExportSD", false}; Gaudi::Property<bool> m_exportEnergyCuts{this, "GDMLExportEnergyCuts", false}; + // GDML Import + ToolHandleArray<IGDMLReader> m_gdml_readers{this}; + using GDMLReaders = std::vector<std::string>; + Gaudi::Property<GDMLReaders> m_gdml_readers_names{this, + "GDMLReaders", + {}, + tool_array_setter( m_gdml_readers, m_gdml_readers_names ), + Gaudi::Details::Property::ImmediatelyInvokeHandler{true}}; + SensDetVolumeMap m_sens_dets; Gaudi::Property<SensDetNameVolumesMap> m_namemap{this, "SensDetVolumeMap", diff --git a/Sim/GiGaMTGeo/CMakeLists.txt b/Sim/GiGaMTGeo/CMakeLists.txt index e873fe02..a9a52724 100644 --- a/Sim/GiGaMTGeo/CMakeLists.txt +++ b/Sim/GiGaMTGeo/CMakeLists.txt @@ -37,3 +37,4 @@ gaudi_add_module(GiGaMTGeoUtils gaudi_install_headers(GiGaMTGeo) gaudi_install_headers(GiGaMTRegions) +gaudi_add_test(QMTest QMTEST) diff --git a/Sim/GiGaMTGeo/GiGaMTGeo/IGDMLReader.h b/Sim/GiGaMTGeo/GiGaMTGeo/IGDMLReader.h new file mode 100644 index 00000000..a216af1a --- /dev/null +++ b/Sim/GiGaMTGeo/GiGaMTGeo/IGDMLReader.h @@ -0,0 +1,27 @@ +/*****************************************************************************\ +* (c) Copyright 2022 CERN for the benefit of the LHCb and FCC Collaborations * +* * +* This software is distributed under the terms of the Apache License * +* version 2 (Apache-2.0), copied verbatim in the file "COPYING". * +* * +* In applying this licence, CERN does not waive the privileges and immunities * +* granted to it by virtue of its status as an Intergovernmental Organization * +* or submit itself to any jurisdiction. * +\*****************************************************************************/ +#pragma once + +#include "GaudiKernel/IAlgTool.h" + +class G4VPhysicalVolume; + +/** @class IGDMLReader IGDMLReader.h + * Interface class for importing GDML files + * + */ + +class IGDMLReader : virtual public IAlgTool { +public: + DeclareInterfaceID( IGDMLReader, 1, 0 ); + + virtual StatusCode import( G4VPhysicalVolume* world ) const = 0; +}; diff --git a/Sim/GiGaMTGeo/src/GDMLReader.cpp b/Sim/GiGaMTGeo/src/GDMLReader.cpp new file mode 100644 index 00000000..81f206ba --- /dev/null +++ b/Sim/GiGaMTGeo/src/GDMLReader.cpp @@ -0,0 +1,101 @@ +/*****************************************************************************\ +* (c) Copyright 2022 CERN for the benefit of the LHCb and FCC Collaborations * +* * +* This software is distributed under the terms of the Apache License * +* version 2 (Apache-2.0), copied verbatim in the file "COPYING". * +* * +* In applying this licence, CERN does not waive the privileges and immunities * +* granted to it by virtue of its status as an Intergovernmental Organization * +* or submit itself to any jurisdiction. * +\*****************************************************************************/ + +// Gaudi +#include "GaudiAlg/GaudiTool.h" +#include "GaudiKernel/SystemOfUnits.h" +// Interface +#include "GiGaMTGeo/IGDMLReader.h" +// Geant4 +#include "G4AssemblyVolume.hh" +#include "G4GDMLParser.hh" +#include "G4LogicalVolume.hh" +#include "G4LogicalVolumeStore.hh" +#include "G4PVPlacement.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VisAttributes.hh" + +/** @class GDMLReader GDMLReader.h + * + * Tool to import geometry from GDML file + * + */ + +class GDMLReader : public extends<GaudiTool, IGDMLReader> { + +public: + using extends::extends; + + StatusCode import( G4VPhysicalVolume* world ) const override; + +private: + Gaudi::Property<std::string> m_gdmlfile{this, "GDMLFileName", "", "Name of the GDML file to be loaded"}; + Gaudi::Property<double> m_tx{this, "GDMLTranslationX", 0. * Gaudi::Units::mm}; + Gaudi::Property<double> m_ty{this, "GDMLTranslationY", 0. * Gaudi::Units::mm}; + Gaudi::Property<double> m_tz{this, "GDMLTranslationZ", 0. * Gaudi::Units::mm}; + Gaudi::Property<double> m_rx{this, "GDMLRotationX", 0. * Gaudi::Units::deg}; + Gaudi::Property<double> m_ry{this, "GDMLRotationY", 0. * Gaudi::Units::deg}; + Gaudi::Property<double> m_rz{this, "GDMLRotationZ", 0. * Gaudi::Units::deg}; +}; + +DECLARE_COMPONENT( GDMLReader ) + +StatusCode GDMLReader::import( G4VPhysicalVolume* world ) const { + + info() << "Loading GDML geometry description from file " << m_gdmlfile.value() << "." << endmsg; + /// Read the GDML file. + G4GDMLParser g4parser; + g4parser.Read( m_gdmlfile.value(), true ); + /// Get the world volume. + auto gdmlWorldPV = g4parser.GetWorldVolume(); + if ( !gdmlWorldPV ) { + error() << "Could not retrieve world volume from file " << m_gdmlfile.value() << "." << endmsg; + return StatusCode::FAILURE; + } + auto gdmlWorldLV = gdmlWorldPV->GetLogicalVolume(); + + if ( gdmlWorldLV->GetName() == world->GetLogicalVolume()->GetName() ) { + error() << "The name of the imported world from GDML is the same " + << "as the name of the already exisiting world! " + << "GDMLReader will not work correctly in this case." << endmsg; + return StatusCode::FAILURE; + } + + /// Make an assembly volume to hold the daughter volumes of the GDML world. + auto gdmlAssembly = new G4AssemblyVolume(); + // Loop over the daughter volumes. + const int nDaughters = gdmlWorldLV->GetNoDaughters(); + info() << "GDML world volume " << gdmlWorldLV->GetName() << " has " << nDaughters << " daughter(s)" << endmsg; + for ( int i = nDaughters; i--; ) { + auto gdmlDaughterPV = gdmlWorldLV->GetDaughter( i ); + auto nameDaughter = gdmlDaughterPV->GetName(); + info() << "Picking up volume " << nameDaughter << " from " << m_gdmlfile.value() << endmsg; + auto transDaughter = gdmlDaughterPV->GetTranslation(); + auto rotDaughter = gdmlDaughterPV->GetRotation(); + auto gdmlDaughterLV = gdmlDaughterPV->GetLogicalVolume(); + /// Give the GDML volume a different colour (to better distinguish it + /// in the G4 visualization) + auto gdmlDaughterVisAtt = new G4VisAttributes( G4Colour( 0, 1, 1 ) ); + gdmlDaughterLV->SetVisAttributes( gdmlDaughterVisAtt ); + + /// Add the volume to the assembly + gdmlAssembly->AddPlacedVolume( gdmlDaughterLV, transDaughter, rotDaughter ); + } + /// Set the position of the GDML assembly in the LHCb world. + G4ThreeVector transAssembly( m_tx.value(), m_ty.value(), m_tz.value() ); + auto rotAssembly = new G4RotationMatrix(); + rotAssembly->rotateX( m_rx.value() * Gaudi::Units::deg ); + rotAssembly->rotateY( m_ry.value() * Gaudi::Units::deg ); + rotAssembly->rotateZ( m_rz.value() * Gaudi::Units::deg ); + /// Place the assembly volume in the LHCb world. + gdmlAssembly->MakeImprint( world->GetLogicalVolume(), transAssembly, rotAssembly ); + return StatusCode::SUCCESS; +} diff --git a/Sim/GiGaMTGeo/tests/data/cube_to_import.gdml b/Sim/GiGaMTGeo/tests/data/cube_to_import.gdml new file mode 100644 index 00000000..0836816c --- /dev/null +++ b/Sim/GiGaMTGeo/tests/data/cube_to_import.gdml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<gdml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd"> +<!-- + (c) Copyright 2022 CERN for the benefit of the LHCb and FCC Collaborations + + This software is distributed under the terms of the Apache License + version 2 (Apache-2.0), copied verbatim in the file "COPYING". + + In applying this licence, CERN does not waive the privileges and immunities + granted to it by virtue of its status as an Intergovernmental Organization + or submit itself to any jurisdiction. +--> + + <define/> + + <materials> + <isotope N="1" Z="1" name="H10x1ee5e10"> + <atom unit="g/mole" value="1.00782503081372"/> + </isotope> + <isotope N="2" Z="1" name="H20x1ee5e80"> + <atom unit="g/mole" value="2.01410199966617"/> + </isotope> + <element name="H0x1ee5ef0"> + <fraction n="0.999885" ref="H10x1ee5e10"/> + <fraction n="0.000115" ref="H20x1ee5e80"/> + </element> + <material name="OuterSpace0x1ee5ce0" state="gas"> + <T unit="K" value="2.73"/> + <P unit="pascal" value="1.87245306593404e-14"/> + <MEE unit="eV" value="19.2"/> + <D unit="g/cm3" value="6.24151021978012e-07"/> + <fraction n="1" ref="H0x1ee5ef0"/> + </material> + </materials> + + <solids> + <box lunit="mm" name="Cuboid0x1eef200" x="1000" y="1000" z="1000"/> + <box lunit="mm" name="WorldBox0x1eeecd0" x="100000" y="100000" z="100000"/> + </solids> + + <structure> + <volume name="CubeToImportLVol0x1eefa70"> + <materialref ref="OuterSpace0x1ee5ce0"/> + <solidref ref="Cuboid0x1eef200"/> + <auxiliary auxtype="gammaECut" auxunit="MeV" auxvalue="0"/> + <auxiliary auxtype="electronECut" auxunit="MeV" auxvalue="0"/> + <auxiliary auxtype="positronECut" auxunit="MeV" auxvalue="0"/> + <auxiliary auxtype="protonECut" auxunit="MeV" auxvalue="0"/> + <auxiliary auxtype="SensDet" auxvalue="MyCubeSDet"/> + </volume> + <volume name="WorldLVol0x1eef630"> + <materialref ref="OuterSpace0x1ee5ce0"/> + <solidref ref="WorldBox0x1eeecd0"/> + <physvol name="CubeToImportPVol0x1eefa10"> + <volumeref ref="CubeToImportLVol0x1eefa70"/> + <position name="CubeToImportPVol0x1eefa10_pos" unit="mm" x="0" y="0" z="10000"/> + </physvol> + <auxiliary auxtype="gammaECut" auxunit="MeV" auxvalue="0"/> + <auxiliary auxtype="electronECut" auxunit="MeV" auxvalue="0"/> + <auxiliary auxtype="positronECut" auxunit="MeV" auxvalue="0"/> + <auxiliary auxtype="protonECut" auxunit="MeV" auxvalue="0"/> + </volume> + </structure> + + <setup name="Default" version="1.0"> + <world ref="WorldLVol0x1eef630"/> + </setup> + +</gdml> diff --git a/Sim/GiGaMTGeo/tests/options/cube_import_export.py b/Sim/GiGaMTGeo/tests/options/cube_import_export.py new file mode 100644 index 00000000..e72c06a1 --- /dev/null +++ b/Sim/GiGaMTGeo/tests/options/cube_import_export.py @@ -0,0 +1,111 @@ +############################################################################### +# (c) Copyright 2022 CERN for the benefit of the LHCb and FCC Collaborations # +# # +# This software is distributed under the terms of the Apache License # +# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +# standard Gaussino +from Configurables import Gaussino +Gaussino().EvtMax = 1 +Gaussino().EnableHive = True +Gaussino().ThreadPoolSize = 1 +Gaussino().EventSlots = 1 + +from Configurables import GiGaMT +GiGaMT().NumberOfWorkerThreads = 1 + +# some dumb generation, not important, just fast +from Gaussino.Generation import GenPhase +GenPhase().ParticleGun = True +GenPhase().ParticleGunUseDefault = False + +# Particle Gun On +# shoots one 1 GeV e- along z-axis +from Gaussino.Generation import GenPhase +GenPhase().ParticleGun = True +GenPhase().ParticleGunUseDefault = False +from Configurables import ParticleGun +pgun = ParticleGun("ParticleGun") +from Configurables import FixedMomentum +pgun.ParticleGunTool = "FixedMomentum" +pgun.addTool(FixedMomentum, name="FixedMomentum") +from GaudiKernel.SystemOfUnits import GeV +pgun.FixedMomentum.px = 0. * GeV +pgun.FixedMomentum.py = 0. * GeV +pgun.FixedMomentum.pz = 1. * GeV +pgun.FixedMomentum.PdgCodes = [11] +from Configurables import FlatNParticles +pgun.NumberOfParticlesTool = "FlatNParticles" +pgun.addTool(FlatNParticles, name="FlatNParticles") +pgun.FlatNParticles.MinNParticles = 1 +pgun.FlatNParticles.MaxNParticles = 1 + +from Gaussino.Simulation import SimPhase +SimPhase().PhysicsConstructors = [ + "GiGaMT_G4EmStandardPhysics", +] + +# adding external detectors +from Configurables import ExternalDetectorEmbedder +external = ExternalDetectorEmbedder("Testing") +from GaudiKernel.SystemOfUnits import m +from Gaudi.Configuration import DEBUG + +# plain/testing geometry service +external.World = { + "WorldMaterial": "OuterSpace", + "Type": "ExternalWorldCreator", + "WorldLogicalVolumeName": "NewWorldLvol", + "WorldPhysicalVolumeName": "NewWorldPvol", + "OutputLevel": DEBUG, +} + +# material needed for the external world +from GaudiKernel.SystemOfUnits import g, cm3, pascal, mole, kelvin +external.Materials = { + "OuterSpace": { + "AtomicNumber": 1., + "MassNumber": 1.01 * g / mole, + "Density": 1.e-25 * g / cm3, + "Pressure": 3.e-18 * pascal, + "Temperature": 2.73 * kelvin, + }, +} + +# here embedding of the geometry takes place +from Gaussino.Simulation import SimPhase +SimPhase().ExternalDetectorEmbedder = "Testing" + +# Import GDML +import os +root = os.getenv("GAUSSINO_PROJECT_ROOT") +SimPhase().ImportGDML = [ + { + "GDMLFileName": root + "/Sim/GiGaMTGeo/tests/data/cube_to_import.gdml", + "OutputLevel": DEBUG, + }, +] + +SimPhase().SensDetMap = { + "MCCollectorSensDet/CubeToImportSDet": ["CubeToImportLVol"], +} + +from Configurables import MCCollectorSensDet +MCCollectorSensDet( + "GiGaMT.DetConst.CubeToImportSDet", + OutputLevel=DEBUG, + PrintStats=True, +) + +# Export GDML +SimPhase().ExportGDML = { + "GDMLFileName": "cube_to_export.gdml", + "GDMLFileNameOverwrite": True, + "GDMLExportEnergyCuts": True, + "GDMLExportSD": True, + "GDMLAddReferences": True, +} diff --git a/Sim/GiGaMTGeo/tests/qmtest/cube_import_export.qmt b/Sim/GiGaMTGeo/tests/qmtest/cube_import_export.qmt new file mode 100644 index 00000000..2b141269 --- /dev/null +++ b/Sim/GiGaMTGeo/tests/qmtest/cube_import_export.qmt @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension PUBLIC '-//QM/2.3/Extension//EN' 'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'> +<!-- + (c) Copyright 2022 CERN for the benefit of the LHCb and FCC Collaborations + + This software is distributed under the terms of the Apache License + version 2 (Apache-2.0), copied verbatim in the file "COPYING". + + In applying this licence, CERN does not waive the privileges and immunities + granted to it by virtue of its status as an Intergovernmental Organization + or submit itself to any jurisdiction. +--> +<extension class="GaudiTest.GaudiExeTest" kind="test"> +<argument name="program"><text>gaudirun.py</text></argument> +<argument name="timeout"><integer>600</integer></argument> +<argument name="args"><set> + <text>../options/cube_import_export.py</text>a +</set></argument> +<argument name="validator"><text> +import re + +# check if import/export is successful +try: + with open('cube_to_export.gdml') as gdml: + data = gdml.read() + if data.find("CubeToImportLVol") == -1: + causes.append('Imported GDML volumes were not correctly exported.') + if data.find("CubeToImportSDet") == -1: + causes.append('Sensitive information not exported correctly.') +except FileNotFoundError: + causes.append('GDML not exported') + +# check if sensitive detector is attached correctly to the imported volume +hits_reg = "Hits= 1 Energy=-?[\d.]+(?:e-?\d+)?\[GeV\] #Particles= 1 in CubeToImportSDet" +matches = re.findall(hits_reg, stdout) +if not matches: + causes.append('Imported sensitive detector class not activated!') + result['GaudiTest.expected_string'] = result.Quote(option) +</text></argument> +</extension> diff --git a/docs/configuration/gdml.md b/docs/configuration/gdml.md new file mode 100644 index 00000000..f4533141 --- /dev/null +++ b/docs/configuration/gdml.md @@ -0,0 +1,84 @@ + +# Handling GDML files + +Handling of GDML files is performed via the `SimPhase()` configurable (this might change in the nearest future). + +## GDML import + +If you wish to import the logical volumes from the GDML file you have to provide all the necessary options in the `ImportGDML` property of `SimPhase`. All the imported volumes will be embedded in a `G4Assembly` that can be translated and rotated with respect to the existing world. For example: + +```python +from Gaudi.Configuration import DEBUG +from GaudiKernel.SystemOfUnits import m, deg +from Gaussino.Simulation import SimPhase +SimPhase().ImportGDML = [ + { + "GDMLFileName": "path_to_your_gdml_file_1.gdml", + "OutputLevel": DEBUG, + "GDMLTranslationX": 10. * mm, + "GDMLRotationX": 45. * deg, + }, + { + "GDMLFileName": "path_to_your_gdml_file_2.gdml", + "OutputLevel": DEBUG, + }, +] +``` + +It will import the volumes from the two files: `path_to_your_gdml_file_1.gdml` and `path_to_your_gdml_file_2.gdml`. Volumes from the first files will be embedded in a rotated and translated assembly. + + +### Making the imported volumes sensitive + +The sensitve detector classes have to be added manually to the imported sensitive volumes. Below you will find an example of how to add a generic `MCCollectorSensDet` factory to an imported volume `ImportedLVol`: + +```python +from Gaussino.Simulation import SimPhase +SimPhase().SensDetMap = { + "MCCollectorSensDet/ImportedSDet": ["ImportedLVol"], +} + +# and if you wish to change the default properties of the factory + +from Configurables import MCCollectorSensDet +MCCollectorSensDet( + "GiGaMT.DetConst.CubeToImportSDet", + OutputLevel=DEBUG, + PrintStats=True, +) +``` + +## GDML export + +If you wish to export the whole world to aGDML file you have to provide all the necessary options in the `ExportGDML` property of `SimPhase`. For example: + +```python +SimPhase().ExportGDML = { + "GDMLFileName": "export.gdml", + # G4 will crash if the file with same name already exists + "GDMLFileNameOverwrite": True, + # add unique references to the names + "GDMLAddReferences": True, + # export auxilliary information + "GDMLExportEnergyCuts": True, + "GDMLExportSD": True, +} +``` + +### GDML exporting of a parallel world + +Parallel worlds follow the same configuration as in the mass geometry case, but it has to be provided in the properties of you parallel world. For example: + +```python +ParallelGeometry().ParallelWorlds = { + 'ParallelWorld1': { + 'ExternalDetectorEmbedder': 'ParallelEmbedder', + 'ExportGDML': { + 'GDMLFileName': 'ParallelWorld1.gdml', + 'GDMLFileNameOverwrite': True, + 'GDMLExportSD': True, + 'GDMLExportEnergyCuts': True, + }, + }, +} +``` diff --git a/docs/index.rst b/docs/index.rst index 7ec6d026..d9fb3a66 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -29,6 +29,7 @@ Welcome to the Gaussino's documentation! configuration/simulation configuration/external_detector configuration/parallel_geometry + configuration/gdml .. toctree:: :caption: Examples -- GitLab From 3976c951d299e54311b999b99ff5c44ca83399c0 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Fri, 1 Jul 2022 16:36:14 +0200 Subject: [PATCH 33/56] Update logo --- docs/conf.py | 7 ++++++- docs/gaussinologo.png | Bin 66519 -> 0 bytes docs/images/gaussino_logo.png | Bin 0 -> 147972 bytes 3 files changed, 6 insertions(+), 1 deletion(-) delete mode 100644 docs/gaussinologo.png create mode 100644 docs/images/gaussino_logo.png diff --git a/docs/conf.py b/docs/conf.py index 658ed1fe..9138aa28 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -55,7 +55,12 @@ master_doc = 'index' # html_theme = 'sphinx_rtd_theme' -html_logo = 'gaussinologo.png' +html_logo = 'images/gaussino_logo.png' + +html_theme_options = { + 'logo_only': True, + 'style_nav_header_background': '#343131', +} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, diff --git a/docs/gaussinologo.png b/docs/gaussinologo.png deleted file mode 100644 index d40702f6b116e26f4cea73496d1ac01a2954ed9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66519 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 diff --git a/docs/images/gaussino_logo.png b/docs/images/gaussino_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..918a4f11d406b9ce40da51c87a72252a13d14af6 GIT binary patch literal 147972 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 literal 0 HcmV?d00001 -- GitLab From 3b595218d052dc4982f341cb3b9a776bac98141a Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 22 Sep 2022 11:43:32 +0200 Subject: [PATCH 34/56] New CMake & moving HepMC3 & DDG4 to ExtLibs --- .gitlab-ci.yml | 3 +- CMakeLists.txt | 118 +++---- DD4hepDDG4Ext/CMakeLists.txt | 78 ----- DD4hepDDG4Ext/dd4hepddg4_toolchain.cmake | 41 --- Defaults/CMakeLists.txt | 12 +- .../{ => include}/Defaults/HepMCAttributes.h | 0 Defaults/{ => include}/Defaults/Locations.h | 0 EDMdev/MCTruthToEDM/CMakeLists.txt | 40 ++- .../LinkedParticleMCParticleLink.h | 0 .../{ => include}/MCTruthToEDM/MCTruthToEDM.h | 2 +- .../{ => include}/MCTruthToEDM/VertexType.h | 2 +- .../CheckMCStructure.cpp | 0 .../CheckMCStructure.h | 0 .../MCTruthToEDMComp.cpp | 0 .../src/{lib => Lib}/MCTruthToEDM.cpp | 0 .../src/{lib => Lib}/VertexType.cpp | 0 Gen/GenBeam/CMakeLists.txt | 38 +-- .../{ => include}/GenBeam/IBeamInfoSvc.h | 4 +- .../src/{ => Components}/BeamInfoSvc.cpp | 0 .../src/{ => Components}/BeamInfoSvc.h | 0 .../BeamSpotSmearVertexWithSvc.cpp | 0 .../BeamSpotSmearVertexWithSvc.h | 0 .../CollidingBeamsWithSvc.cpp | 0 .../{ => Components}/CollidingBeamsWithSvc.h | 6 +- .../FixedLuminosityWithSvc.cpp | 0 .../{ => Components}/FixedLuminosityWithSvc.h | 8 +- Gen/GenInterfaces/CMakeLists.txt | 17 +- .../{ => include}/Event/GenFSRMTManager.h | 0 .../{ => include}/GenInterfaces/IBeamTool.h | 0 .../GenInterfaces/ICounterLogFile.h | 0 .../{ => include}/GenInterfaces/IDecayTool.h | 0 .../GenInterfaces/IFullGenEventCutTool.h | 0 .../{ => include}/GenInterfaces/IGenCutTool.h | 0 .../{ => include}/GenInterfaces/IPileUpTool.h | 0 .../GenInterfaces/IProductionTool.h | 0 .../GenInterfaces/ISampleGenerationTool.h | 0 .../GenInterfaces/IVertexSmearingTool.h | 0 Gen/Generators/CMakeLists.txt | 99 ++++-- .../Generators/ExternalGenerator.h | 4 +- .../{ => include}/Generators/F77Utils.h | 0 .../{ => include}/Generators/GenCounters.h | 0 .../{ => include}/Generators/Generation.h | 0 .../{ => include}/Generators/HepMCUtils.h | 0 .../Generators/LHAPDFCommonBlocks.h | 0 .../{ => include}/Generators/LbPhotos.h | 0 .../{ => include}/Generators/LbTaula.h | 0 .../{ => include}/Generators/LhaPdf.h | 0 .../{ => include}/Generators/Scale.h | 0 .../{ => include}/Generators/Signal.h | 4 +- .../Generators/StreamForGenerator.h | 0 .../{ => include}/Generators/StringParse.h | 0 .../AsymmetricCollidingBeams.cpp | 0 .../AsymmetricCollidingBeams.h | 0 .../BeamSpotMarkovChainSampleVertex.cpp | 0 .../BeamSpotMarkovChainSampleVertex.h | 0 .../BeamSpotSmearVertex.cpp | 0 .../BeamSpotSmearVertex.h | 4 +- .../CollidingBeams.cpp | 0 .../CollidingBeams.h | 4 +- .../FixedLuminosity.cpp | 0 .../FixedLuminosity.h | 8 +- .../FixedLuminosityForRareProcess.cpp | 0 .../FixedLuminosityForRareProcess.h | 0 .../FixedLuminosityForSpillOver.cpp | 0 .../FixedLuminosityForSpillOver.h | 8 +- .../FixedNInteractions.cpp | 0 .../FixedNInteractions.h | 6 +- .../{component => Components}/FixedTarget.cpp | 0 .../{component => Components}/FixedTarget.h | 6 +- .../FlatSmearVertex.cpp | 0 .../FlatSmearVertex.h | 0 .../FlatZSmearVertex.cpp | 0 .../FlatZSmearVertex.h | 0 .../GenerationComp.cpp | 0 .../{component => Components}/HepMCWriter.cpp | 0 .../HistoSmearVertex.cpp | 0 .../HistoSmearVertex.h | 0 .../{component => Components}/Inclusive.cpp | 0 .../src/{component => Components}/Inclusive.h | 0 .../MergedEventsFilter.cpp | 0 .../MergedEventsFilter.h | 0 .../{component => Components}/MinimumBias.cpp | 0 .../{component => Components}/MinimumBias.h | 0 .../PoissonPileUp.cpp | 0 .../{component => Components}/PoissonPileUp.h | 0 .../ReadHepMCAsciiFile.cpp | 36 +- .../SaveSignalBInformation.cpp | 0 .../SaveSignalBInformation.h | 0 .../SignalForcedFragmentation.cpp | 0 .../SignalForcedFragmentation.h | 0 .../{component => Components}/SignalPlain.cpp | 0 .../{component => Components}/SignalPlain.h | 0 .../SignalRepeatedHadronization.cpp | 0 .../SignalRepeatedHadronization.h | 0 .../StandAloneDecayTool.cpp | 0 .../StandAloneDecayTool.h | 0 .../UniformSmearVertex.cpp | 0 .../UniformSmearVertex.h | 4 +- .../VariableLuminosity.cpp | 0 .../VariableLuminosity.h | 8 +- .../XmlCounterLogFile.cpp | 0 .../XmlCounterLogFile.h | 20 +- .../not_yet_ported/Special.cpp | 0 .../not_yet_ported/Special.h | 0 .../scrapyard/ApplyPhotos.cpp | 0 .../scrapyard/ApplyPhotos.h | 0 .../scrapyard/RepeatDecay.cpp | 0 .../scrapyard/RepeatDecay.h | 0 Gen/LbPGuns/CMakeLists.txt | 47 ++- .../{ => include}/LbPGuns/IParticleGunTool.h | 0 .../src/{ => Components}/BeamShape.cpp | 0 Gen/LbPGuns/src/{ => Components}/BeamShape.h | 6 +- Gen/LbPGuns/src/{ => Components}/Cosmics.cpp | 0 Gen/LbPGuns/src/{ => Components}/Cosmics.h | 6 +- .../src/{ => Components}/FixedMomentum.cpp | 0 .../src/{ => Components}/FixedMomentum.h | 6 +- .../src/{ => Components}/FlatNParticles.cpp | 0 .../src/{ => Components}/FlatNParticles.h | 6 +- .../src/{ => Components}/FlatPtRapidity.cpp | 0 .../src/{ => Components}/FlatPtRapidity.h | 6 +- .../src/{ => Components}/GaussianTheta.cpp | 0 .../src/{ => Components}/GaussianTheta.h | 6 +- .../src/{ => Components}/GenericGun.cpp | 0 Gen/LbPGuns/src/{ => Components}/GenericGun.h | 6 +- .../src/{ => Components}/MaterialEval.cpp | 0 .../src/{ => Components}/MaterialEval.h | 6 +- .../src/{ => Components}/MomentumRange.cpp | 0 .../src/{ => Components}/MomentumRange.h | 6 +- .../src/{ => Components}/MomentumSpectrum.cpp | 0 .../src/{ => Components}/MomentumSpectrum.h | 6 +- .../src/{ => Components}/ParticleGun.cpp | 0 .../src/{ => Components}/ParticleGun.h | 0 Gen/LbPythia8/CMakeLists.txt | 85 ++--- Gen/LbPythia8/{src => }/exec/convtest.cxx | 0 Gen/LbPythia8/{src => }/exec/minimal.cxx | 2 +- .../LbPythia8/BeamToolForPythia8.h | 0 .../{ => include}/LbPythia8/LhcbHooks.h | 0 .../LbPythia8/Pythia8Production.h | 2 +- .../LbPythia8/Pythia8ProductionMT.h | 2 +- .../Pythia8ProductionFactory.cpp | 0 Gen/RndInit/CMakeLists.txt | 38 ++- .../{ => include}/RndInit/GenRndInit.h | 0 .../{ => include}/RndInit/IRndSeedingTool.h | 0 .../GenRndInitComp.cpp | 0 .../SeedingTool.cpp | 0 .../{components => Components}/SeedingTool.h | 0 Gen/RndInit/src/{lib => Lib}/GenRndInit.cpp | 0 HepMC3/CMakeLists.txt | 48 --- HepMC3/hepmc3_toolchain.cmake | 41 --- HepMCUser/CMakeLists.txt | 58 ++-- .../HepMCUser/ParticleAttribute.h | 6 +- HepMCUser/{ => include}/HepMCUser/Status.h | 0 .../HepMCUser/TemplateAttribute.h | 0 .../{ => include}/HepMCUser/VertexAttribute.h | 0 HepMCUser/{ => include}/HepMCUser/typedefs.h | 0 .../HepMCUtils/CompareGenEvent.h | 0 .../{ => include}/HepMCUtils/HepMCUtils.h | 0 .../{ => include}/HepMCUtils/PrintDecayTree.h | 0 .../{ => include}/HepMCUtils/Relatives.h | 0 .../src/{utils => Lib}/CompareGenEvent.cpp | 0 .../src/{utils => Lib}/PrintDecayTree.cpp | 0 HepMCUser/src/{utils => Lib}/Relatives.cpp | 0 Moni/GaussMonitor/CMakeLists.txt | 34 +- .../src/{ => Components}/GaussGenUtil.cpp | 0 .../src/{ => Components}/GaussGenUtil.h | 0 .../src/{ => Components}/GenMonitorAlg.cpp | 0 .../src/{ => Components}/GenMonitorAlg.h | 0 .../src/{ => Components}/MCTruthMonitor.cpp | 0 .../src/{ => Components}/MCTruthMonitor.h | 0 NewRnd/CMakeLists.txt | 60 ++-- NewRnd/{ => include}/NewRnd/RndAlgSeeder.h | 0 NewRnd/{ => include}/NewRnd/RndCommon.h | 0 NewRnd/{ => include}/NewRnd/RndGlobal.h | 0 .../{components => Components}/Engines.cpp | 0 NewRnd/src/{ => Lib}/RndAlgSeeder.cpp | 0 NewRnd/src/{ => Lib}/RndCommon.cpp | 0 NewRnd/src/{ => Lib}/RndGlobal.cpp | 0 Sim/ExternalDetector/CMakeLists.txt | 52 +-- .../{ => include}/ExternalDetector/Embedder.h | 0 .../ExternalDetector/MaterialFactory.h | 0 Sim/Gaussino/CMakeLists.txt | 13 +- .../tests/scripts/pgun_reproducibility.sh | 2 +- Sim/GiGaMT/CMakeLists.txt | 57 ++-- .../GiGaMT/GiGaActionInitializer.h | 0 .../{ => include}/GiGaMT/GiGaException.h | 0 Sim/GiGaMT/{ => include}/GiGaMT/GiGaUtil.h | 0 .../{ => include}/GiGaMT/IGiGaMTSetUpSvc.h | 4 +- Sim/GiGaMT/{ => include}/GiGaMT/IGiGaMTSvc.h | 6 +- .../GiGaActionInitializer.cpp | 0 .../{components => Components}/GiGaAlg.cpp | 0 .../src/{components => Components}/GiGaAlg.h | 0 .../src/{components => Components}/GiGaMT.cpp | 0 .../src/{components => Components}/GiGaMT.h | 0 .../GiGaMTISetUpSvc.cpp | 0 .../HepMC3ToMCTruthConverter.cpp | 0 .../HepMC3ToMCTruthConverter.h | 0 .../{components => Components}/SkipSimAlg.cpp | 2 +- .../{components => Components}/SkipSimAlg.h | 0 Sim/GiGaMTCore/CMakeLists.txt | 113 ++++--- .../GiGaMTCoreCut/GaussinoG4UserLimits.h | 0 .../GiGaMTCoreDet/GaussHitBase.h | 0 .../GiGaMTCoreDet/GdmlDetectorConstruction.h | 0 .../GiGaMTDetectorConstruction.h | 0 .../GiGaMTCoreDet/IExternalDetectorEmbedder.h | 0 .../GiGaMTCoreMessage/IGiGaMessage.h | 0 .../GiGaMTCoreRun}/Common.h | 0 .../GiGaMTCoreRun}/DetTrackInfo.h | 0 .../GiGaMTCoreRun/G4EventProxy.h | 0 .../GiGaMTCoreRun/G4EventProxyAttribute.h | 2 +- .../GiGaMTCoreRun}/G4TruthParticle.h | 0 .../GiGaMTCoreRun}/GaussinoEventInformation.h | 2 +- .../GaussinoPrimaryParticleInformation.h | 0 .../GiGaMTCoreRun}/GaussinoTrackInformation.h | 2 +- .../GiGaMTCoreRun/GiGaMTRunManager.h | 0 .../GiGaMTCoreRun/GiGaRunActionCommand.h | 0 .../GiGaMTCoreRun/GiGaWorkerPayload.h | 2 +- .../GiGaMTCoreRun/GiGaWorkerPilot.h | 2 +- .../GiGaMTCoreRun/GiGaWorkerRunManager.h | 0 .../GiGaMTCoreRun}/LinkedParticle.h | 4 +- .../GiGaMTCoreRun}/LinkedParticleHelpers.h | 2 +- .../GiGaMTCoreRun}/MCTruthAttribute.h | 6 +- .../GiGaMTCoreRun}/MCTruthConverter.h | 4 +- .../{ => include}/GiGaMTCoreRun/SimResults.h | 2 +- .../GiGaMTCoreRun/SimResultsProxyAttribute.h | 4 +- .../GiGaMTCoreRun}/TruthFlaggingTrackAction.h | 2 +- .../TruthFlaggingTrackAction.icpp | 0 .../GiGaMTCoreRun}/TruthStoringTrackAction.h | 0 .../GiGaMTCoreRun}/ZMaxPlane.h | 0 .../GiGaMTCoreUtils/GiGaMTUtils.h | 0 Sim/GiGaMTCore/src/{truth => Lib}/Common.cpp | 2 +- .../src/{truth => Lib}/ConverterInfo.cpp | 0 .../src/{truth => Lib}/ConverterInfo.h | 2 +- .../src/{run => Lib}/G4EventProxy.cpp | 0 .../{run => Lib}/G4EventProxyAttribute.cpp | 2 +- .../GaussinoEventInformation.cpp | 2 +- .../src/{cut => Lib}/GaussinoG4UserLimits.cpp | 0 .../GaussinoPrimaryParticleInformation.cpp | 2 +- .../GaussinoTrackInformation.cpp | 2 +- .../src/{run => Lib}/GiGaMTRunManager.cpp | 0 .../src/{message => Lib}/GiGaMessage.cpp | 0 .../src/{run => Lib}/GiGaRunActionCommand.cpp | 0 .../src/{run => Lib}/GiGaWorkerPayload.cpp | 0 .../src/{run => Lib}/GiGaWorkerPilot.cpp | 2 +- .../src/{run => Lib}/GiGaWorkerRunManager.cpp | 0 Sim/GiGaMTCore/src/{truth => Lib}/Helpers.cpp | 2 +- Sim/GiGaMTCore/src/{truth => Lib}/Helpers.h | 0 .../src/{truth => Lib}/LinkedParticle.cpp | 6 +- .../{truth => Lib}/LinkedParticleHelpers.cpp | 2 +- .../src/{truth => Lib}/MCTruthAttribute.cpp | 2 +- .../src/{truth => Lib}/MCTruthConverter.cpp | 7 +- .../src/{run => Lib}/SimResultsAttribute.cpp | 0 .../TruthFlaggingTrackAction.cpp | 6 +- .../TruthStoringTrackAction.cpp | 17 +- .../src/{truth => Lib}/ZMaxPlane.cpp | 2 +- .../tests/{src => }/test_zMaxTilt.cpp | 2 +- Sim/GiGaMTDD4hep/CMakeLists.txt | 71 ++-- .../{ => include}/GiGaMTDD4hep/DD4hepCnvSvc.h | 0 .../GiGaMTDD4hep/DD4hepDetectorConstruction.h | 0 .../{ => include}/GiGaMTDD4hep/Utilities.h | 0 .../DD4hepCnvSvcConf.cpp | 0 .../DD4hepDetectorConstructionFAC.cpp | 0 .../src/{lib => Lib}/DD4hepCnvSvc.cpp | 0 .../DD4hepDetectorConstruction.cpp | 0 .../src/{lib => Lib}/Utilities.cpp | 0 Sim/GiGaMTDebug/CMakeLists.txt | 35 +- .../src/{ => Components}/DebugStepAction.cpp | 0 .../src/{ => Components}/DebugTrackAction.cpp | 8 +- Sim/GiGaMTExamples/FCCTest/CMakeLists.txt | 63 ++-- .../{ => include}/FCCTest/CalorimeterHit.h | 0 .../{ => include}/FCCTest/CalorimeterSD.h | 4 +- .../G4GdmlTestDetector.cpp | 0 .../G4GdmlTestDetector.h | 0 .../G4SaveTestCalHits.cpp | 0 .../G4SaveTestCalHits.h | 0 .../src/{lib => Lib}/CalorimeterHit.cpp | 0 .../src/{lib => Lib}/CalorimeterSD.cpp | 0 Sim/GiGaMTExamples/IronBox/CMakeLists.txt | 32 +- .../LHCbFromGDML/CMakeLists.txt | 27 +- Sim/GiGaMTFactories/CMakeLists.txt | 105 ++++-- .../GiGaMTG4SensDetFactory.h | 0 .../GiGaMTFactories/GiGaFactoryBase.h | 0 .../{ => include}/GiGaMTFactories/GiGaTool.h | 0 .../GiGaMTMagnetFactories}/FieldMgrBase.h | 0 .../GiGaMTG4PhysicsConstrFAC.h | 0 .../GiGaMTG4PhysicsFactory.h | 0 .../GDMLConstructionFactory.cpp | 0 .../GDMLConstructionFactory.h | 0 .../GiGaMTDetectorConstructionFAC.cpp | 0 .../GiGaMTDetectorConstructionFAC.h | 0 .../GiGaMTG4PhysicsConstrFAC.cpp | 2 +- .../GiGaMTG4PhysicsFactory.cpp | 2 +- .../GiGaMTModularPhysListFAC.cpp | 0 .../GiGaMTModularPhysListFAC.h | 0 .../GiGaMTRunManagerFAC.cpp | 0 .../{run => Components}/GiGaMTRunManagerFAC.h | 0 .../GiGaRunActionCommandFAC.cpp | 0 .../GiGaRunActionCommandFAC.h | 0 .../GiGaWorkerPilotFAC.cpp | 0 .../{run => Components}/GiGaWorkerPilotFAC.h | 0 .../MagFieldFromSvc.cpp | 0 .../components => Components}/Steppers.cpp | 0 .../ToolFieldMgr.cpp | 2 +- .../TruthActionFactories.cpp | 4 +- .../ZeroFieldMgr.cpp | 2 +- .../src/{magnet/lib => Lib}/FieldMgrBase.cpp | 2 +- Sim/GiGaMTGeo/CMakeLists.txt | 40 ++- .../{ => include}/GiGaMTGeo/IGDMLReader.h | 0 .../{ => include}/GiGaMTGeo/IGiGaMTGeoSvc.h | 0 .../GiGaMTRegions/IRegionsDefinitionSvc.h | 0 .../{ => include}/GiGaMTRegions/RegionCuts.h | 0 .../GiGaMTRegions/SimAttribute.h | 0 .../src/{ => Components}/GDMLReader.cpp | 0 .../src/{ => Components}/GiGaRegionTool.cpp | 0 .../src/{ => Components}/GiGaRegionTool.h | 0 .../src/{ => Components}/GiGaRegionsTool.cpp | 0 .../src/{ => Components}/GiGaRegionsTool.h | 0 .../{ => Components}/GiGaSetSimAttributes.cpp | 0 .../{ => Components}/GiGaSetSimAttributes.h | 0 .../tests/options/cube_import_export.py | 4 +- Sim/GiGaMTReDecay/CMakeLists.txt | 73 ++--- .../GiGaMTReDecay/IReDecaySorter.h | 0 .../{ => include}/GiGaMTReDecay/IRedecaySvc.h | 2 +- .../{ => include}/GiGaMTReDecay/Token.h | 0 .../{ => include}/GiGaMTReDecay/typedefs.h | 4 +- .../ReDecayInit.cpp | 0 .../backup/ReDecaySampleGenerationTool.cpp | 0 .../edm/ReDecayMCTruthToEDM.cpp | 2 +- .../gen_tools/ReDecayGeneration.cpp | 0 .../gen_tools/ReDecayPileUp.cpp | 0 .../gen_tools/ReDecayProduction.cpp | 0 .../gen_tools/ReDecaySignalGeneration.cpp | 0 .../service/ReDecaySvc.cpp | 0 .../sim/ReDecaySimAlg.cpp | 0 .../sim/ReDecaySimAlg.h | 0 .../sim/ReDecaySkipSimAlg.cpp | 0 .../sim/ReDecaySkipSimAlg.h | 0 .../sorters/BaseSorter.cpp | 0 .../sorters/BaseSorter.h | 0 .../sorters/SignalOnly.cpp | 0 .../src/{lib/token => Lib}/Token.cpp | 0 Sim/GiGaMTTruth/CMakeLists.txt | 31 +- .../GiGaMTTruth/IHepMC3ToMCTruthConverter.h | 2 +- Sim/MCCollector/CMakeLists.txt | 32 +- .../GetMCCollectorHitsAlg.cpp | 2 +- .../src/{ => Components}/MCCollectorHit.cpp | 0 .../src/{ => Components}/MCCollectorHit.h | 0 .../{ => Components}/MCCollectorSensDet.cpp | 4 +- Sim/ParallelGeometry/CMakeLists.txt | 47 +-- .../{ => include}/ParallelGeometry/Physics.h | 0 .../ParallelGeometry/PhysicsFactory.h | 4 +- .../ParallelGeometry/PhysicsFactory.icpp | 0 .../{ => include}/ParallelGeometry/World.h | 0 .../ParallelGeometry/WorldFactory.h | 0 .../ParallelGeometry/WorldFactory.icpp | 0 Sim/SimInterfaces/CMakeLists.txt | 11 +- .../SimInterfaces/IG4MonitoringTool.h | 0 .../SimInterfaces/IGaussinoTool.h | 0 .../{ => include}/SimInterfaces/ISimSvc.h | 0 Utils/CMakeLists.txt | 11 +- Utils/{ => include}/Utils/LocalTL.h | 0 Utils/{ => include}/Utils/ToolProperty.h | 0 .../Utils/blockingconcurrentqueue.h | 0 Utils/{ => include}/Utils/concurrentqueue.h | 0 cmake/FindALPGEN.cmake | 60 ---- cmake/FindCRMC.cmake | 44 --- cmake/FindHIJING.cmake | 51 --- cmake/FindHepMC3.cmake | 61 ++++ cmake/FindHerwig++.cmake | 51 --- cmake/FindLHAPDF.cmake | 39 --- cmake/FindPOWHEG-BOX.cmake | 25 -- cmake/FindPhotos++.cmake | 62 ---- cmake/FindPythia6.cmake | 56 ---- cmake/FindPythia8.cmake | 5 + cmake/FindRivet.cmake | 42 --- cmake/FindTauola++.cmake | 63 ---- cmake/FindThePEG.cmake | 40 --- cmake/FindYODA.cmake | 43 --- cmake/GaussinoConfig.cmake.in | 41 +++ cmake/GaussinoConfigUtils.cmake | 309 ++++++++++++++++++ cmake/GaussinoDependencies.cmake | 59 ++++ docs/getting_started/contributing.md | 4 +- docs/getting_started/gauss.md | 37 ++- docs/getting_started/gaussino.md | 6 +- lhcbproject.yml | 4 + toolchain.cmake | 55 ---- 385 files changed, 1427 insertions(+), 1764 deletions(-) delete mode 100644 DD4hepDDG4Ext/CMakeLists.txt delete mode 100644 DD4hepDDG4Ext/dd4hepddg4_toolchain.cmake rename Defaults/{ => include}/Defaults/HepMCAttributes.h (100%) rename Defaults/{ => include}/Defaults/Locations.h (100%) rename EDMdev/MCTruthToEDM/{ => include}/MCTruthToEDM/LinkedParticleMCParticleLink.h (100%) rename EDMdev/MCTruthToEDM/{ => include}/MCTruthToEDM/MCTruthToEDM.h (98%) rename EDMdev/MCTruthToEDM/{ => include}/MCTruthToEDM/VertexType.h (95%) rename EDMdev/MCTruthToEDM/src/{components => Components}/CheckMCStructure.cpp (100%) rename EDMdev/MCTruthToEDM/src/{components => Components}/CheckMCStructure.h (100%) rename EDMdev/MCTruthToEDM/src/{components => Components}/MCTruthToEDMComp.cpp (100%) rename EDMdev/MCTruthToEDM/src/{lib => Lib}/MCTruthToEDM.cpp (100%) rename EDMdev/MCTruthToEDM/src/{lib => Lib}/VertexType.cpp (100%) rename Gen/GenBeam/{ => include}/GenBeam/IBeamInfoSvc.h (96%) rename Gen/GenBeam/src/{ => Components}/BeamInfoSvc.cpp (100%) rename Gen/GenBeam/src/{ => Components}/BeamInfoSvc.h (100%) rename Gen/GenBeam/src/{ => Components}/BeamSpotSmearVertexWithSvc.cpp (100%) rename Gen/GenBeam/src/{ => Components}/BeamSpotSmearVertexWithSvc.h (100%) rename Gen/GenBeam/src/{ => Components}/CollidingBeamsWithSvc.cpp (100%) rename Gen/GenBeam/src/{ => Components}/CollidingBeamsWithSvc.h (91%) rename Gen/GenBeam/src/{ => Components}/FixedLuminosityWithSvc.cpp (100%) rename Gen/GenBeam/src/{ => Components}/FixedLuminosityWithSvc.h (94%) rename Gen/GenInterfaces/{ => include}/Event/GenFSRMTManager.h (100%) rename Gen/GenInterfaces/{ => include}/GenInterfaces/IBeamTool.h (100%) rename Gen/GenInterfaces/{ => include}/GenInterfaces/ICounterLogFile.h (100%) rename Gen/GenInterfaces/{ => include}/GenInterfaces/IDecayTool.h (100%) rename Gen/GenInterfaces/{ => include}/GenInterfaces/IFullGenEventCutTool.h (100%) rename Gen/GenInterfaces/{ => include}/GenInterfaces/IGenCutTool.h (100%) rename Gen/GenInterfaces/{ => include}/GenInterfaces/IPileUpTool.h (100%) rename Gen/GenInterfaces/{ => include}/GenInterfaces/IProductionTool.h (100%) rename Gen/GenInterfaces/{ => include}/GenInterfaces/ISampleGenerationTool.h (100%) rename Gen/GenInterfaces/{ => include}/GenInterfaces/IVertexSmearingTool.h (100%) rename Gen/Generators/{ => include}/Generators/ExternalGenerator.h (98%) rename Gen/Generators/{ => include}/Generators/F77Utils.h (100%) rename Gen/Generators/{ => include}/Generators/GenCounters.h (100%) rename Gen/Generators/{ => include}/Generators/Generation.h (100%) rename Gen/Generators/{ => include}/Generators/HepMCUtils.h (100%) rename Gen/Generators/{ => include}/Generators/LHAPDFCommonBlocks.h (100%) rename Gen/Generators/{ => include}/Generators/LbPhotos.h (100%) rename Gen/Generators/{ => include}/Generators/LbTaula.h (100%) rename Gen/Generators/{ => include}/Generators/LhaPdf.h (100%) rename Gen/Generators/{ => include}/Generators/Scale.h (100%) rename Gen/Generators/{ => include}/Generators/Signal.h (98%) rename Gen/Generators/{ => include}/Generators/StreamForGenerator.h (100%) rename Gen/Generators/{ => include}/Generators/StringParse.h (100%) rename Gen/Generators/src/{component => Components}/AsymmetricCollidingBeams.cpp (100%) rename Gen/Generators/src/{component => Components}/AsymmetricCollidingBeams.h (100%) rename Gen/Generators/src/{component => Components}/BeamSpotMarkovChainSampleVertex.cpp (100%) rename Gen/Generators/src/{component => Components}/BeamSpotMarkovChainSampleVertex.h (100%) rename Gen/Generators/src/{component => Components}/BeamSpotSmearVertex.cpp (100%) rename Gen/Generators/src/{component => Components}/BeamSpotSmearVertex.h (96%) rename Gen/Generators/src/{component => Components}/CollidingBeams.cpp (100%) rename Gen/Generators/src/{component => Components}/CollidingBeams.h (93%) rename Gen/Generators/src/{component => Components}/FixedLuminosity.cpp (100%) rename Gen/Generators/src/{component => Components}/FixedLuminosity.h (94%) rename Gen/Generators/src/{component => Components}/FixedLuminosityForRareProcess.cpp (100%) rename Gen/Generators/src/{component => Components}/FixedLuminosityForRareProcess.h (100%) rename Gen/Generators/src/{component => Components}/FixedLuminosityForSpillOver.cpp (100%) rename Gen/Generators/src/{component => Components}/FixedLuminosityForSpillOver.h (92%) rename Gen/Generators/src/{component => Components}/FixedNInteractions.cpp (100%) rename Gen/Generators/src/{component => Components}/FixedNInteractions.h (92%) rename Gen/Generators/src/{component => Components}/FixedTarget.cpp (100%) rename Gen/Generators/src/{component => Components}/FixedTarget.h (91%) rename Gen/Generators/src/{component => Components}/FlatSmearVertex.cpp (100%) rename Gen/Generators/src/{component => Components}/FlatSmearVertex.h (100%) rename Gen/Generators/src/{component => Components}/FlatZSmearVertex.cpp (100%) rename Gen/Generators/src/{component => Components}/FlatZSmearVertex.h (100%) rename Gen/Generators/src/{component => Components}/GenerationComp.cpp (100%) rename Gen/Generators/src/{component => Components}/HepMCWriter.cpp (100%) rename Gen/Generators/src/{component => Components}/HistoSmearVertex.cpp (100%) rename Gen/Generators/src/{component => Components}/HistoSmearVertex.h (100%) rename Gen/Generators/src/{component => Components}/Inclusive.cpp (100%) rename Gen/Generators/src/{component => Components}/Inclusive.h (100%) rename Gen/Generators/src/{component => Components}/MergedEventsFilter.cpp (100%) rename Gen/Generators/src/{component => Components}/MergedEventsFilter.h (100%) rename Gen/Generators/src/{component => Components}/MinimumBias.cpp (100%) rename Gen/Generators/src/{component => Components}/MinimumBias.h (100%) rename Gen/Generators/src/{component => Components}/PoissonPileUp.cpp (100%) rename Gen/Generators/src/{component => Components}/PoissonPileUp.h (100%) rename Gen/Generators/src/{component => Components}/ReadHepMCAsciiFile.cpp (89%) rename Gen/Generators/src/{component => Components}/SaveSignalBInformation.cpp (100%) rename Gen/Generators/src/{component => Components}/SaveSignalBInformation.h (100%) rename Gen/Generators/src/{component => Components}/SignalForcedFragmentation.cpp (100%) rename Gen/Generators/src/{component => Components}/SignalForcedFragmentation.h (100%) rename Gen/Generators/src/{component => Components}/SignalPlain.cpp (100%) rename Gen/Generators/src/{component => Components}/SignalPlain.h (100%) rename Gen/Generators/src/{component => Components}/SignalRepeatedHadronization.cpp (100%) rename Gen/Generators/src/{component => Components}/SignalRepeatedHadronization.h (100%) rename Gen/Generators/src/{component => Components}/StandAloneDecayTool.cpp (100%) rename Gen/Generators/src/{component => Components}/StandAloneDecayTool.h (100%) rename Gen/Generators/src/{component => Components}/UniformSmearVertex.cpp (100%) rename Gen/Generators/src/{component => Components}/UniformSmearVertex.h (97%) rename Gen/Generators/src/{component => Components}/VariableLuminosity.cpp (100%) rename Gen/Generators/src/{component => Components}/VariableLuminosity.h (95%) rename Gen/Generators/src/{component => Components}/XmlCounterLogFile.cpp (100%) rename Gen/Generators/src/{component => Components}/XmlCounterLogFile.h (81%) rename Gen/Generators/src/{component => Components}/not_yet_ported/Special.cpp (100%) rename Gen/Generators/src/{component => Components}/not_yet_ported/Special.h (100%) rename Gen/Generators/src/{component => Components}/scrapyard/ApplyPhotos.cpp (100%) rename Gen/Generators/src/{component => Components}/scrapyard/ApplyPhotos.h (100%) rename Gen/Generators/src/{component => Components}/scrapyard/RepeatDecay.cpp (100%) rename Gen/Generators/src/{component => Components}/scrapyard/RepeatDecay.h (100%) rename Gen/LbPGuns/{ => include}/LbPGuns/IParticleGunTool.h (100%) rename Gen/LbPGuns/src/{ => Components}/BeamShape.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/BeamShape.h (95%) rename Gen/LbPGuns/src/{ => Components}/Cosmics.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/Cosmics.h (95%) rename Gen/LbPGuns/src/{ => Components}/FixedMomentum.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/FixedMomentum.h (95%) rename Gen/LbPGuns/src/{ => Components}/FlatNParticles.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/FlatNParticles.h (95%) rename Gen/LbPGuns/src/{ => Components}/FlatPtRapidity.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/FlatPtRapidity.h (95%) rename Gen/LbPGuns/src/{ => Components}/GaussianTheta.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/GaussianTheta.h (95%) rename Gen/LbPGuns/src/{ => Components}/GenericGun.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/GenericGun.h (96%) rename Gen/LbPGuns/src/{ => Components}/MaterialEval.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/MaterialEval.h (95%) rename Gen/LbPGuns/src/{ => Components}/MomentumRange.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/MomentumRange.h (95%) rename Gen/LbPGuns/src/{ => Components}/MomentumSpectrum.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/MomentumSpectrum.h (96%) rename Gen/LbPGuns/src/{ => Components}/ParticleGun.cpp (100%) rename Gen/LbPGuns/src/{ => Components}/ParticleGun.h (100%) rename Gen/LbPythia8/{src => }/exec/convtest.cxx (100%) rename Gen/LbPythia8/{src => }/exec/minimal.cxx (99%) rename Gen/LbPythia8/{ => include}/LbPythia8/BeamToolForPythia8.h (100%) rename Gen/LbPythia8/{ => include}/LbPythia8/LhcbHooks.h (100%) rename Gen/LbPythia8/{ => include}/LbPythia8/Pythia8Production.h (99%) rename Gen/LbPythia8/{ => include}/LbPythia8/Pythia8ProductionMT.h (99%) rename Gen/LbPythia8/src/{component => Components}/Pythia8ProductionFactory.cpp (100%) rename Gen/RndInit/{ => include}/RndInit/GenRndInit.h (100%) rename Gen/RndInit/{ => include}/RndInit/IRndSeedingTool.h (100%) rename Gen/RndInit/src/{components => Components}/GenRndInitComp.cpp (100%) rename Gen/RndInit/src/{components => Components}/SeedingTool.cpp (100%) rename Gen/RndInit/src/{components => Components}/SeedingTool.h (100%) rename Gen/RndInit/src/{lib => Lib}/GenRndInit.cpp (100%) delete mode 100644 HepMC3/CMakeLists.txt delete mode 100644 HepMC3/hepmc3_toolchain.cmake rename HepMCUser/{ => include}/HepMCUser/ParticleAttribute.h (95%) rename HepMCUser/{ => include}/HepMCUser/Status.h (100%) rename HepMCUser/{ => include}/HepMCUser/TemplateAttribute.h (100%) rename HepMCUser/{ => include}/HepMCUser/VertexAttribute.h (100%) rename HepMCUser/{ => include}/HepMCUser/typedefs.h (100%) rename HepMCUser/{ => include}/HepMCUtils/CompareGenEvent.h (100%) rename HepMCUser/{ => include}/HepMCUtils/HepMCUtils.h (100%) rename HepMCUser/{ => include}/HepMCUtils/PrintDecayTree.h (100%) rename HepMCUser/{ => include}/HepMCUtils/Relatives.h (100%) rename HepMCUser/src/{utils => Lib}/CompareGenEvent.cpp (100%) rename HepMCUser/src/{utils => Lib}/PrintDecayTree.cpp (100%) rename HepMCUser/src/{utils => Lib}/Relatives.cpp (100%) rename Moni/GaussMonitor/src/{ => Components}/GaussGenUtil.cpp (100%) rename Moni/GaussMonitor/src/{ => Components}/GaussGenUtil.h (100%) rename Moni/GaussMonitor/src/{ => Components}/GenMonitorAlg.cpp (100%) rename Moni/GaussMonitor/src/{ => Components}/GenMonitorAlg.h (100%) rename Moni/GaussMonitor/src/{ => Components}/MCTruthMonitor.cpp (100%) rename Moni/GaussMonitor/src/{ => Components}/MCTruthMonitor.h (100%) rename NewRnd/{ => include}/NewRnd/RndAlgSeeder.h (100%) rename NewRnd/{ => include}/NewRnd/RndCommon.h (100%) rename NewRnd/{ => include}/NewRnd/RndGlobal.h (100%) rename NewRnd/src/{components => Components}/Engines.cpp (100%) rename NewRnd/src/{ => Lib}/RndAlgSeeder.cpp (100%) rename NewRnd/src/{ => Lib}/RndCommon.cpp (100%) rename NewRnd/src/{ => Lib}/RndGlobal.cpp (100%) rename Sim/ExternalDetector/{ => include}/ExternalDetector/Embedder.h (100%) rename Sim/ExternalDetector/{ => include}/ExternalDetector/MaterialFactory.h (100%) rename Sim/GiGaMT/{ => include}/GiGaMT/GiGaActionInitializer.h (100%) rename Sim/GiGaMT/{ => include}/GiGaMT/GiGaException.h (100%) rename Sim/GiGaMT/{ => include}/GiGaMT/GiGaUtil.h (100%) rename Sim/GiGaMT/{ => include}/GiGaMT/IGiGaMTSetUpSvc.h (94%) rename Sim/GiGaMT/{ => include}/GiGaMT/IGiGaMTSvc.h (94%) rename Sim/GiGaMT/src/{components => Components}/GiGaActionInitializer.cpp (100%) rename Sim/GiGaMT/src/{components => Components}/GiGaAlg.cpp (100%) rename Sim/GiGaMT/src/{components => Components}/GiGaAlg.h (100%) rename Sim/GiGaMT/src/{components => Components}/GiGaMT.cpp (100%) rename Sim/GiGaMT/src/{components => Components}/GiGaMT.h (100%) rename Sim/GiGaMT/src/{components => Components}/GiGaMTISetUpSvc.cpp (100%) rename Sim/GiGaMT/src/{components => Components}/HepMC3ToMCTruthConverter.cpp (100%) rename Sim/GiGaMT/src/{components => Components}/HepMC3ToMCTruthConverter.h (100%) rename Sim/GiGaMT/src/{components => Components}/SkipSimAlg.cpp (97%) rename Sim/GiGaMT/src/{components => Components}/SkipSimAlg.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreCut/GaussinoG4UserLimits.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreDet/GaussHitBase.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreDet/GdmlDetectorConstruction.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreDet/GiGaMTDetectorConstruction.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreDet/IExternalDetectorEmbedder.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreMessage/IGiGaMessage.h (100%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/Common.h (100%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/DetTrackInfo.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreRun/G4EventProxy.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreRun/G4EventProxyAttribute.h (97%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/G4TruthParticle.h (100%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/GaussinoEventInformation.h (98%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/GaussinoPrimaryParticleInformation.h (100%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/GaussinoTrackInformation.h (99%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreRun/GiGaMTRunManager.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreRun/GiGaRunActionCommand.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreRun/GiGaWorkerPayload.h (97%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreRun/GiGaWorkerPilot.h (98%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreRun/GiGaWorkerRunManager.h (100%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/LinkedParticle.h (98%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/LinkedParticleHelpers.h (96%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/MCTruthAttribute.h (89%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/MCTruthConverter.h (99%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreRun/SimResults.h (95%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreRun/SimResultsProxyAttribute.h (92%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/TruthFlaggingTrackAction.h (99%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/TruthFlaggingTrackAction.icpp (100%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/TruthStoringTrackAction.h (100%) rename Sim/GiGaMTCore/{GiGaMTCoreTruth => include/GiGaMTCoreRun}/ZMaxPlane.h (100%) rename Sim/GiGaMTCore/{ => include}/GiGaMTCoreUtils/GiGaMTUtils.h (100%) rename Sim/GiGaMTCore/src/{truth => Lib}/Common.cpp (97%) rename Sim/GiGaMTCore/src/{truth => Lib}/ConverterInfo.cpp (100%) rename Sim/GiGaMTCore/src/{truth => Lib}/ConverterInfo.h (96%) rename Sim/GiGaMTCore/src/{run => Lib}/G4EventProxy.cpp (100%) rename Sim/GiGaMTCore/src/{run => Lib}/G4EventProxyAttribute.cpp (94%) rename Sim/GiGaMTCore/src/{truth => Lib}/GaussinoEventInformation.cpp (93%) rename Sim/GiGaMTCore/src/{cut => Lib}/GaussinoG4UserLimits.cpp (100%) rename Sim/GiGaMTCore/src/{truth => Lib}/GaussinoPrimaryParticleInformation.cpp (93%) rename Sim/GiGaMTCore/src/{truth => Lib}/GaussinoTrackInformation.cpp (96%) rename Sim/GiGaMTCore/src/{run => Lib}/GiGaMTRunManager.cpp (100%) rename Sim/GiGaMTCore/src/{message => Lib}/GiGaMessage.cpp (100%) rename Sim/GiGaMTCore/src/{run => Lib}/GiGaRunActionCommand.cpp (100%) rename Sim/GiGaMTCore/src/{run => Lib}/GiGaWorkerPayload.cpp (100%) rename Sim/GiGaMTCore/src/{run => Lib}/GiGaWorkerPilot.cpp (99%) rename Sim/GiGaMTCore/src/{run => Lib}/GiGaWorkerRunManager.cpp (100%) rename Sim/GiGaMTCore/src/{truth => Lib}/Helpers.cpp (96%) rename Sim/GiGaMTCore/src/{truth => Lib}/Helpers.h (100%) rename Sim/GiGaMTCore/src/{truth => Lib}/LinkedParticle.cpp (98%) rename Sim/GiGaMTCore/src/{truth => Lib}/LinkedParticleHelpers.cpp (97%) rename Sim/GiGaMTCore/src/{truth => Lib}/MCTruthAttribute.cpp (94%) rename Sim/GiGaMTCore/src/{truth => Lib}/MCTruthConverter.cpp (99%) rename Sim/GiGaMTCore/src/{run => Lib}/SimResultsAttribute.cpp (100%) rename Sim/GiGaMTCore/src/{truth => Lib}/TruthFlaggingTrackAction.cpp (98%) rename Sim/GiGaMTCore/src/{truth => Lib}/TruthStoringTrackAction.cpp (95%) rename Sim/GiGaMTCore/src/{truth => Lib}/ZMaxPlane.cpp (97%) rename Sim/GiGaMTCore/tests/{src => }/test_zMaxTilt.cpp (98%) rename Sim/GiGaMTDD4hep/{ => include}/GiGaMTDD4hep/DD4hepCnvSvc.h (100%) rename Sim/GiGaMTDD4hep/{ => include}/GiGaMTDD4hep/DD4hepDetectorConstruction.h (100%) rename Sim/GiGaMTDD4hep/{ => include}/GiGaMTDD4hep/Utilities.h (100%) rename Sim/GiGaMTDD4hep/src/{components => Components}/DD4hepCnvSvcConf.cpp (100%) rename Sim/GiGaMTDD4hep/src/{components => Components}/DD4hepDetectorConstructionFAC.cpp (100%) rename Sim/GiGaMTDD4hep/src/{lib => Lib}/DD4hepCnvSvc.cpp (100%) rename Sim/GiGaMTDD4hep/src/{lib => Lib}/DD4hepDetectorConstruction.cpp (100%) rename Sim/GiGaMTDD4hep/src/{lib => Lib}/Utilities.cpp (100%) rename Sim/GiGaMTDebug/src/{ => Components}/DebugStepAction.cpp (100%) rename Sim/GiGaMTDebug/src/{ => Components}/DebugTrackAction.cpp (97%) rename Sim/GiGaMTExamples/FCCTest/{ => include}/FCCTest/CalorimeterHit.h (100%) rename Sim/GiGaMTExamples/FCCTest/{ => include}/FCCTest/CalorimeterSD.h (95%) rename Sim/GiGaMTExamples/FCCTest/src/{components => Components}/G4GdmlTestDetector.cpp (100%) rename Sim/GiGaMTExamples/FCCTest/src/{components => Components}/G4GdmlTestDetector.h (100%) rename Sim/GiGaMTExamples/FCCTest/src/{components => Components}/G4SaveTestCalHits.cpp (100%) rename Sim/GiGaMTExamples/FCCTest/src/{components => Components}/G4SaveTestCalHits.h (100%) rename Sim/GiGaMTExamples/FCCTest/src/{lib => Lib}/CalorimeterHit.cpp (100%) rename Sim/GiGaMTExamples/FCCTest/src/{lib => Lib}/CalorimeterSD.cpp (100%) rename Sim/GiGaMTFactories/{GiGaMTFactories => include/GiGaMTDetFactories}/GiGaMTG4SensDetFactory.h (100%) rename Sim/GiGaMTFactories/{ => include}/GiGaMTFactories/GiGaFactoryBase.h (100%) rename Sim/GiGaMTFactories/{ => include}/GiGaMTFactories/GiGaTool.h (100%) rename Sim/GiGaMTFactories/{GiGaMTFactories/Magnet => include/GiGaMTMagnetFactories}/FieldMgrBase.h (100%) rename Sim/GiGaMTFactories/{GiGaMTFactories => include/GiGaMTPhysFactories}/GiGaMTG4PhysicsConstrFAC.h (100%) rename Sim/GiGaMTFactories/{GiGaMTFactories => include/GiGaMTPhysFactories}/GiGaMTG4PhysicsFactory.h (100%) rename Sim/GiGaMTFactories/src/{det => Components}/GDMLConstructionFactory.cpp (100%) rename Sim/GiGaMTFactories/src/{det => Components}/GDMLConstructionFactory.h (100%) rename Sim/GiGaMTFactories/src/{det => Components}/GiGaMTDetectorConstructionFAC.cpp (100%) rename Sim/GiGaMTFactories/src/{det => Components}/GiGaMTDetectorConstructionFAC.h (100%) rename Sim/GiGaMTFactories/src/{phys => Components}/GiGaMTG4PhysicsConstrFAC.cpp (99%) rename Sim/GiGaMTFactories/src/{phys => Components}/GiGaMTG4PhysicsFactory.cpp (98%) rename Sim/GiGaMTFactories/src/{phys => Components}/GiGaMTModularPhysListFAC.cpp (100%) rename Sim/GiGaMTFactories/src/{phys => Components}/GiGaMTModularPhysListFAC.h (100%) rename Sim/GiGaMTFactories/src/{run => Components}/GiGaMTRunManagerFAC.cpp (100%) rename Sim/GiGaMTFactories/src/{run => Components}/GiGaMTRunManagerFAC.h (100%) rename Sim/GiGaMTFactories/src/{run => Components}/GiGaRunActionCommandFAC.cpp (100%) rename Sim/GiGaMTFactories/src/{run => Components}/GiGaRunActionCommandFAC.h (100%) rename Sim/GiGaMTFactories/src/{run => Components}/GiGaWorkerPilotFAC.cpp (100%) rename Sim/GiGaMTFactories/src/{run => Components}/GiGaWorkerPilotFAC.h (100%) rename Sim/GiGaMTFactories/src/{magnet/components => Components}/MagFieldFromSvc.cpp (100%) rename Sim/GiGaMTFactories/src/{magnet/components => Components}/Steppers.cpp (100%) rename Sim/GiGaMTFactories/src/{magnet/components => Components}/ToolFieldMgr.cpp (96%) rename Sim/GiGaMTFactories/src/{truth => Components}/TruthActionFactories.cpp (98%) rename Sim/GiGaMTFactories/src/{magnet/components => Components}/ZeroFieldMgr.cpp (96%) rename Sim/GiGaMTFactories/src/{magnet/lib => Lib}/FieldMgrBase.cpp (98%) rename Sim/GiGaMTGeo/{ => include}/GiGaMTGeo/IGDMLReader.h (100%) rename Sim/GiGaMTGeo/{ => include}/GiGaMTGeo/IGiGaMTGeoSvc.h (100%) rename Sim/GiGaMTGeo/{ => include}/GiGaMTRegions/IRegionsDefinitionSvc.h (100%) rename Sim/GiGaMTGeo/{ => include}/GiGaMTRegions/RegionCuts.h (100%) rename Sim/GiGaMTGeo/{ => include}/GiGaMTRegions/SimAttribute.h (100%) rename Sim/GiGaMTGeo/src/{ => Components}/GDMLReader.cpp (100%) rename Sim/GiGaMTGeo/src/{ => Components}/GiGaRegionTool.cpp (100%) rename Sim/GiGaMTGeo/src/{ => Components}/GiGaRegionTool.h (100%) rename Sim/GiGaMTGeo/src/{ => Components}/GiGaRegionsTool.cpp (100%) rename Sim/GiGaMTGeo/src/{ => Components}/GiGaRegionsTool.h (100%) rename Sim/GiGaMTGeo/src/{ => Components}/GiGaSetSimAttributes.cpp (100%) rename Sim/GiGaMTGeo/src/{ => Components}/GiGaSetSimAttributes.h (100%) rename Sim/GiGaMTReDecay/{ => include}/GiGaMTReDecay/IReDecaySorter.h (100%) rename Sim/GiGaMTReDecay/{ => include}/GiGaMTReDecay/IRedecaySvc.h (98%) rename Sim/GiGaMTReDecay/{ => include}/GiGaMTReDecay/Token.h (100%) rename Sim/GiGaMTReDecay/{ => include}/GiGaMTReDecay/typedefs.h (91%) rename Sim/GiGaMTReDecay/src/{components => Components}/ReDecayInit.cpp (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/backup/ReDecaySampleGenerationTool.cpp (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/edm/ReDecayMCTruthToEDM.cpp (99%) rename Sim/GiGaMTReDecay/src/{components => Components}/gen_tools/ReDecayGeneration.cpp (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/gen_tools/ReDecayPileUp.cpp (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/gen_tools/ReDecayProduction.cpp (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/gen_tools/ReDecaySignalGeneration.cpp (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/service/ReDecaySvc.cpp (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/sim/ReDecaySimAlg.cpp (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/sim/ReDecaySimAlg.h (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/sim/ReDecaySkipSimAlg.cpp (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/sim/ReDecaySkipSimAlg.h (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/sorters/BaseSorter.cpp (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/sorters/BaseSorter.h (100%) rename Sim/GiGaMTReDecay/src/{components => Components}/sorters/SignalOnly.cpp (100%) rename Sim/GiGaMTReDecay/src/{lib/token => Lib}/Token.cpp (100%) rename Sim/GiGaMTTruth/{ => include}/GiGaMTTruth/IHepMC3ToMCTruthConverter.h (97%) rename Sim/MCCollector/src/{ => Components}/GetMCCollectorHitsAlg.cpp (98%) rename Sim/MCCollector/src/{ => Components}/MCCollectorHit.cpp (100%) rename Sim/MCCollector/src/{ => Components}/MCCollectorHit.h (100%) rename Sim/MCCollector/src/{ => Components}/MCCollectorSensDet.cpp (98%) rename Sim/ParallelGeometry/{ => include}/ParallelGeometry/Physics.h (100%) rename Sim/ParallelGeometry/{ => include}/ParallelGeometry/PhysicsFactory.h (94%) rename Sim/ParallelGeometry/{ => include}/ParallelGeometry/PhysicsFactory.icpp (100%) rename Sim/ParallelGeometry/{ => include}/ParallelGeometry/World.h (100%) rename Sim/ParallelGeometry/{ => include}/ParallelGeometry/WorldFactory.h (100%) rename Sim/ParallelGeometry/{ => include}/ParallelGeometry/WorldFactory.icpp (100%) rename Sim/SimInterfaces/{ => include}/SimInterfaces/IG4MonitoringTool.h (100%) rename Sim/SimInterfaces/{ => include}/SimInterfaces/IGaussinoTool.h (100%) rename Sim/SimInterfaces/{ => include}/SimInterfaces/ISimSvc.h (100%) rename Utils/{ => include}/Utils/LocalTL.h (100%) rename Utils/{ => include}/Utils/ToolProperty.h (100%) rename Utils/{ => include}/Utils/blockingconcurrentqueue.h (100%) rename Utils/{ => include}/Utils/concurrentqueue.h (100%) delete mode 100644 cmake/FindALPGEN.cmake delete mode 100644 cmake/FindCRMC.cmake delete mode 100644 cmake/FindHIJING.cmake create mode 100644 cmake/FindHepMC3.cmake delete mode 100644 cmake/FindHerwig++.cmake delete mode 100644 cmake/FindLHAPDF.cmake delete mode 100644 cmake/FindPOWHEG-BOX.cmake delete mode 100644 cmake/FindPhotos++.cmake delete mode 100644 cmake/FindPythia6.cmake delete mode 100644 cmake/FindRivet.cmake delete mode 100644 cmake/FindTauola++.cmake delete mode 100644 cmake/FindThePEG.cmake delete mode 100644 cmake/FindYODA.cmake create mode 100644 cmake/GaussinoConfig.cmake.in create mode 100644 cmake/GaussinoConfigUtils.cmake create mode 100644 cmake/GaussinoDependencies.cmake create mode 100644 lhcbproject.yml delete mode 100644 toolchain.cmake diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f3e4f6f7..38767faf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,7 +25,7 @@ check-copyright: only: [merge_requests] script: - curl -o lb-check-copyright "https://gitlab.cern.ch/lhcb-core/LbDevTools/raw/master/LbDevTools/SourceTools.py?inline=false" - - python lb-check-copyright origin/${TARGET_BRANCH} + - python lb-check-copyright origin/${TARGET_BRANCH} --exclude lhcbproject.yml check-formatting: image: gitlab-registry.cern.ch/lhcb-docker/style-checker @@ -44,6 +44,7 @@ check-formatting: - apply-formatting.patch when: on_failure expire_in: 1 week + allow_failure: true .docs-base: stage: docs diff --git a/CMakeLists.txt b/CMakeLists.txt index ae78ca8d..c117f27d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,77 +8,67 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -CMAKE_MINIMUM_REQUIRED(VERSION 3.15) +cmake_minimum_required(VERSION 3.15) -# Reduce the total number of warnings by A LOT until ROOT has been modified -option(GAUDI_SUGGEST_OVERRIDE "enable warnings for missing override keyword" OFF) -# Create the compile commands json for YCM superpowers -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(GEANT4_BUILD_MULTITHREADED ON) +set(LCG_LAYER LHCB_7 CACHE STRING "Specific set of version to use") +option(LCG_USE_GENERATORS "enable/disable use of LCG generators" ON) -#--------------------------------------------------------------- -# Load macros and functions for Gaudi-based projects -find_package(GaudiProject) -#--------------------------------------------------------------- +project(Gaussino VERSION 0.1 + LANGUAGES CXX Fortran) -# Set the CMP0074 policy that dictates how the packages are looked up -# this should allow overriding the LCG versions of package XXX, -# provided, XXX_ROOT is set -if (POLICY CMP0074) - cmake_policy(SET CMP0074 NEW) - message(STATUS "Setting the policy CMP0074 to NEW") -else() - message(STATUS "Policy CMP0074 not available: LCG packages NOT overriden by _ROOT environment variable") -endif() +# Enable testing with CTest/CDash +include(CTest) -# hide warnings from some external projects -find_package(Boost) -find_package(ROOT) -find_package(CLHEP) -include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} - ${CLHEP_INCLUDE_DIRS}) +list(PREPEND CMAKE_MODULE_PATH + ${PROJECT_SOURCE_DIR}/cmake +) -# Add -O0 to remove optimizations when using gcc -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0" CACHE STRING "bla" FORCE) -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0" CACHE STRING "bla" FORCE) +set(WITH_Gaussino_PRIVATE_DEPENDENCIES TRUE) +include(GaussinoDependencies) -macro(FindG4libs) - # FIXME: this should be an imported target - foreach(name ${ARGN}) - find_library(GEANT4_${name}_LIBRARY - G4${name} - HINTS ${Geant4_DIR}/lib - PATHS ${Geant4_LIBRARY_DIRS}) - list(APPEND GEANT4_LIBS ${GEANT4_${name}_LIBRARY}) - endforeach() - link_directories(${Geant4_LIBRARY_DIRS}) -endmacro() +gaussino_initialize_configuration() -macro(AddHepMC3) - # FIXME: This is just an work-around to include the locally compiled HepMC3 as the HepMC3Config.cmake - # is not yet available during configuration. - include_directories(SYSTEM ${CMAKE_INSTALL_PREFIX}/include ${CMAKE_INSTALL_PREFIX}/share/HepMC3/interfaces) - link_directories(${CMAKE_INSTALL_PREFIX}/lib64) - link_directories(${CMAKE_INSTALL_PREFIX}/lib) - #add_dependencies(HepMC3Ext) +if (NOT USE_DD4HEP) + set(GAUSSINO_IGNORE_SUBDIRS Sim/GiGaMTDD4hep) +endif() - set(HEPMC3_LIBRARIES - -lHepMC3 - # FIXME: disabled because of HepMC & HepMC3 namespace collision - # -lHepMC3rootIO - -lHepMC3search) -endmacro() +gaussino_add_subdirectories( + Defaults + EDMdev/MCTruthToEDM + Gen/GenBeam + Gen/Generators + Gen/GenInterfaces + Gen/LbPGuns + Gen/LbPythia8 + Gen/RndInit + HepMCUser + Moni/GaussMonitor + NewRnd + Sim/ExternalDetector + Sim/Gaussino + Sim/GiGaMT + Sim/GiGaMTCore + Sim/GiGaMTDD4hep + Sim/GiGaMTDebug + Sim/GiGaMTExamples/FCCTest + Sim/GiGaMTExamples/IronBox + Sim/GiGaMTExamples/LHCbFromGDML + Sim/GiGaMTFactories + Sim/GiGaMTGeo + Sim/GiGaMTReDecay + Sim/GiGaMTTruth + Sim/MCCollector + Sim/ParallelGeometry + Sim/SimInterfaces + Utils +) -# make sure pkg-config looks for packages on CMAKE_PREFIX_PATH and system -set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON) -list(APPEND CMAKE_PREFIX_PATH /usr) +gaudi_install(CMAKE + # helpers to find external projects + cmake/FindHepMC3.cmake + cmake/FindPythia8.cmake + cmake/GaussinoConfigUtils.cmake + cmake/GaussinoConfig.cmake.in +) -# Declare project name and version -gaudi_project(Gaussino v1r0 - FORTRAN - USE Run2Support v0r0 - Geant4 v104r1 - DATA Gen/PGunsData VERSION v1r* - Gen/DecFiles VERSION v30r* - LHAPDFSets VERSION v2r* - Vis/XmlVis VERSION v2r*) +gaussino_finalize_configuration() diff --git a/DD4hepDDG4Ext/CMakeLists.txt b/DD4hepDDG4Ext/CMakeLists.txt deleted file mode 100644 index ce143f41..00000000 --- a/DD4hepDDG4Ext/CMakeLists.txt +++ /dev/null @@ -1,78 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -gaudi_subdir(DD4hepDDG4Ext v1r0) - -if(USE_DD4HEP) -# Define EvtGen external project -set(DD4hep_GIT_SOURCE "https://gitlab.cern.ch/Gaussino/DD4hep.git" CACHE STRING "URL of the DD4hep git repository") -set(DD4hep_GIT_TAG "v01-16-01-patches" CACHE STRING "Tag of DD4hep to be used") - -find_package(ROOT) -find_package(Boost) -find_package(DD4hep REQUIRED) -find_package(LCIO REQUIRED) - -include(ExternalProject) -message(STATUS "DDG4 from DD4hep will use tag \"${DD4hep_GIT_TAG}\" from repository ${DD4hep_GIT_SOURCE}") -string(REPLACE "c++" "" DD4HepDDG4_CXX_STANDARD "${GAUDI_CXX_STANDARD}") -message(STATUS "Setting CMAKE_CXX_STANDARD to \"${DD4HepDDG4_CXX_STANDARD}\"") - -ExternalProject_Add(DD4hepDDG4Ext - GIT_REPOSITORY ${DD4hep_GIT_SOURCE} - GIT_TAG ${DD4hep_GIT_TAG} - CMAKE_ARGS - -Dheptools_version=${heptools_version} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_LIST_DIR}/dd4hepddg4_toolchain.cmake - -DDD4HEP_USE_EXISTING_DD4HEP=${DD4hep_DIR} - -DDD4HEP_BUILD_PACKAGES=DDG4 - -DDD4HEP_USE_GEANT4=ON - -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> - -DCMAKE_CXX_STANDARD=${DD4HepDDG4_CXX_STANDARD} - -DDD4HEP_SELECTED_NAME=DD4hepDDG4 - "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -Wno-suggest-override" # less strict warnings - # This works around a CMake issue with the Ninja generator where it - # does not understand imported libraries, and instead needs `BUILD_BYPRODUCTS` - # explicitly set. - # https://cmake.org/pipermail/cmake/2015-April/060234.html - BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libDDG4.so - CMAKE_COMMAND ${env_cmd} --xml ${env_xml} cmake - BUILD_COMMAND ${env_cmd} --xml ${env_xml} cmake --build . -) - -ExternalProject_Get_property(DD4hepDDG4Ext INSTALL_DIR) - -# Inspired from http://mesos.apache.org/documentation/latest/cmake-examples/#imported-libraries -add_library(DD4hep::DDG4 SHARED IMPORTED GLOBAL) -set_target_properties(DD4hep::DDG4 PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libDDG4.so) -target_include_directories(DD4hep::DDG4 SYSTEM INTERFACE ${INSTALL_DIR}/include) -# This works around a CMake issue with setting include directories of -# imported libraries built with `ExternalProject_Add`.cmake/DD4hepBuild.cmake -# https://gitlab.kitware.com/cmake/cmake/issues/15052 -file(MAKE_DIRECTORY ${INSTALL_DIR}/include) - -# The external project's install rules are not part of the main project's -# install rules, so if anything from the external project should be -# installed as part of the main build, these need to be specified in the main -# build as additional install() commands. -# https://cmake.org/cmake/help/v3.20/module/ExternalProject.html -# -# Use DD4hep's installation location (see cmake/DD4hepBuild.cmake) -# > SET(DD4HEP_PYTHON_INSTALL_DIR lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages) -install(DIRECTORY "${INSTALL_DIR}/include/" - DESTINATION include) -install(DIRECTORY "${INSTALL_DIR}/lib/" - DESTINATION lib - PATTERN "python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}" EXCLUDE) -install(DIRECTORY "${INSTALL_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/" - DESTINATION python) -endif() diff --git a/DD4hepDDG4Ext/dd4hepddg4_toolchain.cmake b/DD4hepDDG4Ext/dd4hepddg4_toolchain.cmake deleted file mode 100644 index 1321282c..00000000 --- a/DD4hepDDG4Ext/dd4hepddg4_toolchain.cmake +++ /dev/null @@ -1,41 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# Special toolchain file that inherits the same heptools version as the -# used projects. -# -# -# this check is needed because the toolchain is called when checking the -# compiler (without the proper cache) -if(NOT CMAKE_SOURCE_DIR MATCHES "CMakeTmp") - find_path(heptools_mod_dir UseHEPTools.cmake) - message(INFO heptools_mod_dir = ${heptools_mod_dir}) - set(CMAKE_MODULE_PATH ${heptools_mod_dir} ${CMAKE_MODULE_PATH}) - if(heptools_version) - include(UseHEPTools) - use_heptools(${heptools_version}) - else() - include(InheritHEPTools) - inherit_heptools() - endif() - - # FIXME: make sure we do not pick up unwanted/problematic projects from LCG - if(CMAKE_PREFIX_PATH) - # - ninja (it requires LD_LIBRARY_PATH set to run) - # - Gaudi (we do not want to use it from LCG) - # - xenv (conflicts with the version in the build environment) - list(FILTER CMAKE_PREFIX_PATH EXCLUDE REGEX "(LCG_|lcg/nightlies).*(ninja|Gaudi|xenv)") - endif() - - # FIXME: make sure we do not pick up geant from LCG (it requires LD_LIBRARY_PATH set) - if(CMAKE_PREFIX_PATH AND CMAKE_VERSION VERSION_GREATER "3.6.0") - list(FILTER CMAKE_PREFIX_PATH EXCLUDE REGEX "(LCG_|lcg/nightlies).*Geant4") - endif() -endif() diff --git a/Defaults/CMakeLists.txt b/Defaults/CMakeLists.txt index 38cccc3a..db4eed0a 100644 --- a/Defaults/CMakeLists.txt +++ b/Defaults/CMakeLists.txt @@ -8,11 +8,9 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: Defaults -# -################################################################################# +#[=======================================================================[.rst: +Defaults +-------- +#]=======================================================================] -gaudi_subdir(Defaults v1r0) - -gaudi_install_headers(Defaults) +gaudi_add_header_only_library(Defaults) diff --git a/Defaults/Defaults/HepMCAttributes.h b/Defaults/include/Defaults/HepMCAttributes.h similarity index 100% rename from Defaults/Defaults/HepMCAttributes.h rename to Defaults/include/Defaults/HepMCAttributes.h diff --git a/Defaults/Defaults/Locations.h b/Defaults/include/Defaults/Locations.h similarity index 100% rename from Defaults/Defaults/Locations.h rename to Defaults/include/Defaults/Locations.h diff --git a/EDMdev/MCTruthToEDM/CMakeLists.txt b/EDMdev/MCTruthToEDM/CMakeLists.txt index ba1510f5..3ecacbef 100644 --- a/EDMdev/MCTruthToEDM/CMakeLists.txt +++ b/EDMdev/MCTruthToEDM/CMakeLists.txt @@ -8,28 +8,26 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -gaudi_subdir(MCTruthToEDM v1r0) - -gaudi_depends_on_subdirs(Event/GenEvent - Event/MCEvent - Sim/GiGaMTCore - Defaults - HepMC3 - HepMCUser) - -AddHepMC3() -find_package(HepMC) - +#[=======================================================================[.rst: +EDMdev/MCTruthToEDM +------------------- +#]=======================================================================] gaudi_add_library(MCTruthToEDMLib - src/lib/*.cpp - PUBLIC_HEADERS MCTruthToEDM - INCLUDE_DIRS HepMC - LINK_LIBRARIES GiGaMTCoreTruthLib MCEvent) + SOURCES + src/Lib/MCTruthToEDM.cpp + src/Lib/VertexType.cpp + LINK + PUBLIC + LHCb::GenEvent # TODO: [LHCb DEPENDENCY] + Gaussino::GiGaMTCoreRunLib + Gaussino::GiGaMTTruthLib +) gaudi_add_module(MCTruthToEDM - src/components/*.cpp - INCLUDE_DIRS ${HEPMC_INCLUDE_DIR} Defaults - LINK_LIBRARIES MCTruthToEDMLib) - -add_dependencies(MCTruthToEDM HepMC3Ext) + SOURCES + src/Components/CheckMCStructure.cpp + src/Components/MCTruthToEDMComp.cpp + LINK + Gaussino::MCTruthToEDMLib +) diff --git a/EDMdev/MCTruthToEDM/MCTruthToEDM/LinkedParticleMCParticleLink.h b/EDMdev/MCTruthToEDM/include/MCTruthToEDM/LinkedParticleMCParticleLink.h similarity index 100% rename from EDMdev/MCTruthToEDM/MCTruthToEDM/LinkedParticleMCParticleLink.h rename to EDMdev/MCTruthToEDM/include/MCTruthToEDM/LinkedParticleMCParticleLink.h diff --git a/EDMdev/MCTruthToEDM/MCTruthToEDM/MCTruthToEDM.h b/EDMdev/MCTruthToEDM/include/MCTruthToEDM/MCTruthToEDM.h similarity index 98% rename from EDMdev/MCTruthToEDM/MCTruthToEDM/MCTruthToEDM.h rename to EDMdev/MCTruthToEDM/include/MCTruthToEDM/MCTruthToEDM.h index 50f49030..36b503c2 100755 --- a/EDMdev/MCTruthToEDM/MCTruthToEDM/MCTruthToEDM.h +++ b/EDMdev/MCTruthToEDM/include/MCTruthToEDM/MCTruthToEDM.h @@ -24,7 +24,7 @@ #include "Event/MCVertex.h" #include "MCTruthToEDM/LinkedParticleMCParticleLink.h" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include "Defaults/Locations.h" diff --git a/EDMdev/MCTruthToEDM/MCTruthToEDM/VertexType.h b/EDMdev/MCTruthToEDM/include/MCTruthToEDM/VertexType.h similarity index 95% rename from EDMdev/MCTruthToEDM/MCTruthToEDM/VertexType.h rename to EDMdev/MCTruthToEDM/include/MCTruthToEDM/VertexType.h index 7002c11c..66d0ab5c 100644 --- a/EDMdev/MCTruthToEDM/MCTruthToEDM/VertexType.h +++ b/EDMdev/MCTruthToEDM/include/MCTruthToEDM/VertexType.h @@ -9,7 +9,7 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ #include "Event/MCVertex.h" -#include "GiGaMTCoreTruth/LinkedParticle.h" +#include "GiGaMTCoreRun/LinkedParticle.h" #include "GaudiKernel/MsgStream.h" namespace Gaussino { diff --git a/EDMdev/MCTruthToEDM/src/components/CheckMCStructure.cpp b/EDMdev/MCTruthToEDM/src/Components/CheckMCStructure.cpp similarity index 100% rename from EDMdev/MCTruthToEDM/src/components/CheckMCStructure.cpp rename to EDMdev/MCTruthToEDM/src/Components/CheckMCStructure.cpp diff --git a/EDMdev/MCTruthToEDM/src/components/CheckMCStructure.h b/EDMdev/MCTruthToEDM/src/Components/CheckMCStructure.h similarity index 100% rename from EDMdev/MCTruthToEDM/src/components/CheckMCStructure.h rename to EDMdev/MCTruthToEDM/src/Components/CheckMCStructure.h diff --git a/EDMdev/MCTruthToEDM/src/components/MCTruthToEDMComp.cpp b/EDMdev/MCTruthToEDM/src/Components/MCTruthToEDMComp.cpp similarity index 100% rename from EDMdev/MCTruthToEDM/src/components/MCTruthToEDMComp.cpp rename to EDMdev/MCTruthToEDM/src/Components/MCTruthToEDMComp.cpp diff --git a/EDMdev/MCTruthToEDM/src/lib/MCTruthToEDM.cpp b/EDMdev/MCTruthToEDM/src/Lib/MCTruthToEDM.cpp similarity index 100% rename from EDMdev/MCTruthToEDM/src/lib/MCTruthToEDM.cpp rename to EDMdev/MCTruthToEDM/src/Lib/MCTruthToEDM.cpp diff --git a/EDMdev/MCTruthToEDM/src/lib/VertexType.cpp b/EDMdev/MCTruthToEDM/src/Lib/VertexType.cpp similarity index 100% rename from EDMdev/MCTruthToEDM/src/lib/VertexType.cpp rename to EDMdev/MCTruthToEDM/src/Lib/VertexType.cpp diff --git a/Gen/GenBeam/CMakeLists.txt b/Gen/GenBeam/CMakeLists.txt index 1a9b2f2a..6fca1072 100644 --- a/Gen/GenBeam/CMakeLists.txt +++ b/Gen/GenBeam/CMakeLists.txt @@ -8,24 +8,24 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: GenBeam -################################################################################ -gaudi_subdir(GenBeam v1r0) - -gaudi_depends_on_subdirs(GaudiAlg - Event/GenEvent - NewRnd - HepMCUser - Gen/GenInterfaces - #FIXME: For platform and kernel streaming, I think ?!?! - Kernel/LHCbKernel) - -AddHepMC3() +#[=======================================================================[.rst: +Gen/GenBeam +----------- +#]=======================================================================] +gaudi_add_header_only_library(GenBeamLib) gaudi_add_module(GenBeam - src/*.cpp - INCLUDE_DIRS Gen/GenInterfaces ${HEPMC3_INCLUDE_DIR} HepMCUser - LINK_LIBRARIES GaudiAlgLib GenEvent LHCbKernel NewRnd ${HEPMC3_LIBRARIES}) - -add_dependencies(GenBeam HepMC3Ext) + SOURCES + src/Components/BeamInfoSvc.cpp + src/Components/BeamSpotSmearVertexWithSvc.cpp + src/Components/CollidingBeamsWithSvc.cpp + src/Components/FixedLuminosityWithSvc.cpp + LINK + HepMC3::HepMC3 + Gaudi::GaudiAlgLib + LHCb::GenEvent # TODO: [LHCb DEPENDENCY] + Gaussino::HepMCUserLib + Gaussino::NewRndLib + Gaussino::GenBeamLib + Gaussino::GenInterfacesLib +) diff --git a/Gen/GenBeam/GenBeam/IBeamInfoSvc.h b/Gen/GenBeam/include/GenBeam/IBeamInfoSvc.h similarity index 96% rename from Gen/GenBeam/GenBeam/IBeamInfoSvc.h rename to Gen/GenBeam/include/GenBeam/IBeamInfoSvc.h index 1a5b56d5..c18da5d8 100644 --- a/Gen/GenBeam/GenBeam/IBeamInfoSvc.h +++ b/Gen/GenBeam/include/GenBeam/IBeamInfoSvc.h @@ -28,9 +28,9 @@ class GAUDI_API IBeamInfoSvc : virtual public IService { public: DeclareInterfaceID(IBeamInfoSvc, 1, 0); - virtual StatusCode initialize() = 0; + virtual StatusCode initialize() override = 0; - virtual StatusCode finalize() = 0; + virtual StatusCode finalize() override = 0; /// Mean number of interactions per event (nu) virtual double nu() const = 0; diff --git a/Gen/GenBeam/src/BeamInfoSvc.cpp b/Gen/GenBeam/src/Components/BeamInfoSvc.cpp similarity index 100% rename from Gen/GenBeam/src/BeamInfoSvc.cpp rename to Gen/GenBeam/src/Components/BeamInfoSvc.cpp diff --git a/Gen/GenBeam/src/BeamInfoSvc.h b/Gen/GenBeam/src/Components/BeamInfoSvc.h similarity index 100% rename from Gen/GenBeam/src/BeamInfoSvc.h rename to Gen/GenBeam/src/Components/BeamInfoSvc.h diff --git a/Gen/GenBeam/src/BeamSpotSmearVertexWithSvc.cpp b/Gen/GenBeam/src/Components/BeamSpotSmearVertexWithSvc.cpp similarity index 100% rename from Gen/GenBeam/src/BeamSpotSmearVertexWithSvc.cpp rename to Gen/GenBeam/src/Components/BeamSpotSmearVertexWithSvc.cpp diff --git a/Gen/GenBeam/src/BeamSpotSmearVertexWithSvc.h b/Gen/GenBeam/src/Components/BeamSpotSmearVertexWithSvc.h similarity index 100% rename from Gen/GenBeam/src/BeamSpotSmearVertexWithSvc.h rename to Gen/GenBeam/src/Components/BeamSpotSmearVertexWithSvc.h diff --git a/Gen/GenBeam/src/CollidingBeamsWithSvc.cpp b/Gen/GenBeam/src/Components/CollidingBeamsWithSvc.cpp similarity index 100% rename from Gen/GenBeam/src/CollidingBeamsWithSvc.cpp rename to Gen/GenBeam/src/Components/CollidingBeamsWithSvc.cpp diff --git a/Gen/GenBeam/src/CollidingBeamsWithSvc.h b/Gen/GenBeam/src/Components/CollidingBeamsWithSvc.h similarity index 91% rename from Gen/GenBeam/src/CollidingBeamsWithSvc.h rename to Gen/GenBeam/src/Components/CollidingBeamsWithSvc.h index e414adc7..801b3846 100755 --- a/Gen/GenBeam/src/CollidingBeamsWithSvc.h +++ b/Gen/GenBeam/src/Components/CollidingBeamsWithSvc.h @@ -36,12 +36,12 @@ class CollidingBeamsWithSvc : public GaudiTool, virtual public IBeamTool { virtual ~CollidingBeamsWithSvc( ); ///< Destructor /// Initialize method - virtual StatusCode initialize( ) ; + virtual StatusCode initialize( ) override; /** Implements IBeamTool::getMeanBeams */ virtual void getMeanBeams( Gaudi::XYZVector & pBeam1 , - Gaudi::XYZVector & pBeam2 ) const ; + Gaudi::XYZVector & pBeam2 ) const override; /** Implements IBeamTool::getBeams * Compute beam 3-momentum taking into account the horizontal and vertical @@ -49,7 +49,7 @@ class CollidingBeamsWithSvc : public GaudiTool, virtual public IBeamTool { * with an angular smearing equal to (emittance/beta*)^1/2. */ virtual void getBeams( Gaudi::XYZVector & pBeam1 , - Gaudi::XYZVector & pBeam2 ) ; + Gaudi::XYZVector & pBeam2 ) override; private: IBeamInfoSvc *m_beaminfosvc; diff --git a/Gen/GenBeam/src/FixedLuminosityWithSvc.cpp b/Gen/GenBeam/src/Components/FixedLuminosityWithSvc.cpp similarity index 100% rename from Gen/GenBeam/src/FixedLuminosityWithSvc.cpp rename to Gen/GenBeam/src/Components/FixedLuminosityWithSvc.cpp diff --git a/Gen/GenBeam/src/FixedLuminosityWithSvc.h b/Gen/GenBeam/src/Components/FixedLuminosityWithSvc.h similarity index 94% rename from Gen/GenBeam/src/FixedLuminosityWithSvc.h rename to Gen/GenBeam/src/Components/FixedLuminosityWithSvc.h index df96f58d..0b02e625 100755 --- a/Gen/GenBeam/src/FixedLuminosityWithSvc.h +++ b/Gen/GenBeam/src/Components/FixedLuminosityWithSvc.h @@ -39,10 +39,10 @@ public: virtual ~FixedLuminosityWithSvc( ); ///< Destructor /// Initialize method - virtual StatusCode initialize( ) ; + virtual StatusCode initialize( ) override; /// Finalize method - virtual StatusCode finalize( ) ; + virtual StatusCode finalize( ) override; /** Implements IPileUpTool::numberOfPileUp * Returns the number of pile-up interactions in one event. It follows @@ -50,10 +50,10 @@ public: * mean = Luminosity * cross_section / crossing_rate. * The fixed luminosity is returned in the GenHeader. */ - virtual unsigned int numberOfPileUp( HepRandomEnginePtr & engine ) ; + virtual unsigned int numberOfPileUp( HepRandomEnginePtr & engine ) override; /// Implements IPileUpTool::printPileUpCounters - virtual void printPileUpCounters( ) ; + virtual void printPileUpCounters( ) override; protected: diff --git a/Gen/GenInterfaces/CMakeLists.txt b/Gen/GenInterfaces/CMakeLists.txt index 02957990..36ae32b8 100644 --- a/Gen/GenInterfaces/CMakeLists.txt +++ b/Gen/GenInterfaces/CMakeLists.txt @@ -8,17 +8,12 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### +#[=======================================================================[.rst: +Gen/GenInterfaces +----------------- +#]=======================================================================] ################################################################################ # Package: GenInterface ################################################################################ -gaudi_subdir(GenInterfaces v1r0) - -gaudi_depends_on_subdirs(HepMC3 - NewRnd) - -AddHepMC3() - -gaudi_install_headers(GenInterfaces) - -gaudi_install_headers( - Event) +gaudi_add_header_only_library(GenInterfacesLib) +gaudi_add_header_only_library(EventLib) diff --git a/Gen/GenInterfaces/Event/GenFSRMTManager.h b/Gen/GenInterfaces/include/Event/GenFSRMTManager.h similarity index 100% rename from Gen/GenInterfaces/Event/GenFSRMTManager.h rename to Gen/GenInterfaces/include/Event/GenFSRMTManager.h diff --git a/Gen/GenInterfaces/GenInterfaces/IBeamTool.h b/Gen/GenInterfaces/include/GenInterfaces/IBeamTool.h similarity index 100% rename from Gen/GenInterfaces/GenInterfaces/IBeamTool.h rename to Gen/GenInterfaces/include/GenInterfaces/IBeamTool.h diff --git a/Gen/GenInterfaces/GenInterfaces/ICounterLogFile.h b/Gen/GenInterfaces/include/GenInterfaces/ICounterLogFile.h similarity index 100% rename from Gen/GenInterfaces/GenInterfaces/ICounterLogFile.h rename to Gen/GenInterfaces/include/GenInterfaces/ICounterLogFile.h diff --git a/Gen/GenInterfaces/GenInterfaces/IDecayTool.h b/Gen/GenInterfaces/include/GenInterfaces/IDecayTool.h similarity index 100% rename from Gen/GenInterfaces/GenInterfaces/IDecayTool.h rename to Gen/GenInterfaces/include/GenInterfaces/IDecayTool.h diff --git a/Gen/GenInterfaces/GenInterfaces/IFullGenEventCutTool.h b/Gen/GenInterfaces/include/GenInterfaces/IFullGenEventCutTool.h similarity index 100% rename from Gen/GenInterfaces/GenInterfaces/IFullGenEventCutTool.h rename to Gen/GenInterfaces/include/GenInterfaces/IFullGenEventCutTool.h diff --git a/Gen/GenInterfaces/GenInterfaces/IGenCutTool.h b/Gen/GenInterfaces/include/GenInterfaces/IGenCutTool.h similarity index 100% rename from Gen/GenInterfaces/GenInterfaces/IGenCutTool.h rename to Gen/GenInterfaces/include/GenInterfaces/IGenCutTool.h diff --git a/Gen/GenInterfaces/GenInterfaces/IPileUpTool.h b/Gen/GenInterfaces/include/GenInterfaces/IPileUpTool.h similarity index 100% rename from Gen/GenInterfaces/GenInterfaces/IPileUpTool.h rename to Gen/GenInterfaces/include/GenInterfaces/IPileUpTool.h diff --git a/Gen/GenInterfaces/GenInterfaces/IProductionTool.h b/Gen/GenInterfaces/include/GenInterfaces/IProductionTool.h similarity index 100% rename from Gen/GenInterfaces/GenInterfaces/IProductionTool.h rename to Gen/GenInterfaces/include/GenInterfaces/IProductionTool.h diff --git a/Gen/GenInterfaces/GenInterfaces/ISampleGenerationTool.h b/Gen/GenInterfaces/include/GenInterfaces/ISampleGenerationTool.h similarity index 100% rename from Gen/GenInterfaces/GenInterfaces/ISampleGenerationTool.h rename to Gen/GenInterfaces/include/GenInterfaces/ISampleGenerationTool.h diff --git a/Gen/GenInterfaces/GenInterfaces/IVertexSmearingTool.h b/Gen/GenInterfaces/include/GenInterfaces/IVertexSmearingTool.h similarity index 100% rename from Gen/GenInterfaces/GenInterfaces/IVertexSmearingTool.h rename to Gen/GenInterfaces/include/GenInterfaces/IVertexSmearingTool.h diff --git a/Gen/Generators/CMakeLists.txt b/Gen/Generators/CMakeLists.txt index 0d28c247..96e90c1a 100644 --- a/Gen/Generators/CMakeLists.txt +++ b/Gen/Generators/CMakeLists.txt @@ -8,43 +8,72 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: Generators -################################################################################ -gaudi_subdir(Generators v16r0) - -gaudi_depends_on_subdirs(Event/GenEvent - GaudiAlg - NewRnd - #FIXME: Gen/EvtGen - #FIXME: Gen/EvtGenExtras - #FIXME: Kernel/MCInterfaces - #FIXME: Kernel/LHCbKernel - Kernel/PartProp - Defaults - HepMC3 - HepMCUser - Gen/GenInterfaces) - -find_package(Boost COMPONENTS filesystem system) -find_package(Photos++) -AddHepMC3() - -string(REPLACE "-pedantic" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") -string(REPLACE "-Wall" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") -string(REPLACE "-Wextra" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") -string(REPLACE "-Werror=return-type" "" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") +#[=======================================================================[.rst: +Gen/Generators +-------------- +#]=======================================================================] gaudi_add_library(GeneratorsLib - src/Lib/*.cpp src/Lib/*.F - PUBLIC_HEADERS Generators - INCLUDE_DIRS Kernel/MCInterfaces Gen/GenInterfaces HepMCUser ${HEPMC3_INCLUDE_DIR} - LINK_LIBRARIES GenEvent GaudiAlgLib PartPropLib ${HEPMC3_LIBRARIES} NewRnd) + SOURCES + src/Lib/f77units.F + src/Lib/getaddr.cpp + src/Lib/pythiaoutput_utils.F + src/Lib/ExternalGenerator.cpp + src/Lib/F77Utils.cpp + src/Lib/Generation.cpp + src/Lib/GenCounters.cpp + src/Lib/LbPhotos.cpp + src/Lib/LbTaula.cpp + src/Lib/LhaPdf.cpp + src/Lib/LBPHOTOS.F + src/Lib/LBTAULA.F + src/Lib/LHAPDFCommonBlocks.cpp + src/Lib/LHAPDFUtils.F + src/Lib/Scale.cpp + src/Lib/Signal.cpp + src/Lib/StreamForGenerator.cpp + src/Lib/StringParse.cpp + LINK + PUBLIC + Gaudi::GaudiAlgLib + LHCb::GenEvent # TODO: [LHCb DEPENDENCY] + Gaussino::HepMCUtilsLib + Gaussino::NewRndLib + Gaussino::UtilsLib + Gaussino::GenInterfacesLib + Gaussino::EventLib -add_dependencies(GeneratorsLib HepMC3Ext) +) gaudi_add_module(Generators - src/component/*.cpp - INCLUDE_DIRS Boost Kernel/MCInterfaces Gen/GenInterfaces Photos++ - LINK_LIBRARIES Boost GenEvent GaudiAlgLib LHCbKernel GeneratorsLib Photos++) - + SOURCES + src/Components/AsymmetricCollidingBeams.cpp + src/Components/BeamSpotMarkovChainSampleVertex.cpp + src/Components/BeamSpotSmearVertex.cpp + src/Components/CollidingBeams.cpp + src/Components/FixedLuminosity.cpp + src/Components/FixedLuminosityForRareProcess.cpp + src/Components/FixedLuminosityForSpillOver.cpp + src/Components/FixedNInteractions.cpp + src/Components/FixedTarget.cpp + src/Components/FlatSmearVertex.cpp + src/Components/FlatZSmearVertex.cpp + src/Components/GenerationComp.cpp + src/Components/HepMCWriter.cpp + src/Components/HistoSmearVertex.cpp + src/Components/Inclusive.cpp + src/Components/MergedEventsFilter.cpp + src/Components/MinimumBias.cpp + src/Components/PoissonPileUp.cpp + src/Components/ReadHepMCAsciiFile.cpp + src/Components/SaveSignalBInformation.cpp + src/Components/SignalForcedFragmentation.cpp + src/Components/SignalPlain.cpp + src/Components/SignalRepeatedHadronization.cpp + src/Components/StandAloneDecayTool.cpp + src/Components/UniformSmearVertex.cpp + src/Components/VariableLuminosity.cpp + src/Components/XmlCounterLogFile.cpp + LINK + Gaussino::GeneratorsLib +) diff --git a/Gen/Generators/Generators/ExternalGenerator.h b/Gen/Generators/include/Generators/ExternalGenerator.h similarity index 98% rename from Gen/Generators/Generators/ExternalGenerator.h rename to Gen/Generators/include/Generators/ExternalGenerator.h index 0c3011a6..43797e5d 100755 --- a/Gen/Generators/Generators/ExternalGenerator.h +++ b/Gen/Generators/include/Generators/ExternalGenerator.h @@ -75,13 +75,13 @@ class ExternalGenerator : public GaudiTool , * and declare them stable for the production tool if they are known * by the decay tool. */ - virtual StatusCode initialize( ) ; + virtual StatusCode initialize( ) override; /** Finalization funtion. * This function closes the file used to redirect LHAPDF output messages * in case the output is disabled. */ - virtual StatusCode finalize( ) ; + virtual StatusCode finalize( ) override; protected: /** Decay heavy excited particles. diff --git a/Gen/Generators/Generators/F77Utils.h b/Gen/Generators/include/Generators/F77Utils.h similarity index 100% rename from Gen/Generators/Generators/F77Utils.h rename to Gen/Generators/include/Generators/F77Utils.h diff --git a/Gen/Generators/Generators/GenCounters.h b/Gen/Generators/include/Generators/GenCounters.h similarity index 100% rename from Gen/Generators/Generators/GenCounters.h rename to Gen/Generators/include/Generators/GenCounters.h diff --git a/Gen/Generators/Generators/Generation.h b/Gen/Generators/include/Generators/Generation.h similarity index 100% rename from Gen/Generators/Generators/Generation.h rename to Gen/Generators/include/Generators/Generation.h diff --git a/Gen/Generators/Generators/HepMCUtils.h b/Gen/Generators/include/Generators/HepMCUtils.h similarity index 100% rename from Gen/Generators/Generators/HepMCUtils.h rename to Gen/Generators/include/Generators/HepMCUtils.h diff --git a/Gen/Generators/Generators/LHAPDFCommonBlocks.h b/Gen/Generators/include/Generators/LHAPDFCommonBlocks.h similarity index 100% rename from Gen/Generators/Generators/LHAPDFCommonBlocks.h rename to Gen/Generators/include/Generators/LHAPDFCommonBlocks.h diff --git a/Gen/Generators/Generators/LbPhotos.h b/Gen/Generators/include/Generators/LbPhotos.h similarity index 100% rename from Gen/Generators/Generators/LbPhotos.h rename to Gen/Generators/include/Generators/LbPhotos.h diff --git a/Gen/Generators/Generators/LbTaula.h b/Gen/Generators/include/Generators/LbTaula.h similarity index 100% rename from Gen/Generators/Generators/LbTaula.h rename to Gen/Generators/include/Generators/LbTaula.h diff --git a/Gen/Generators/Generators/LhaPdf.h b/Gen/Generators/include/Generators/LhaPdf.h similarity index 100% rename from Gen/Generators/Generators/LhaPdf.h rename to Gen/Generators/include/Generators/LhaPdf.h diff --git a/Gen/Generators/Generators/Scale.h b/Gen/Generators/include/Generators/Scale.h similarity index 100% rename from Gen/Generators/Generators/Scale.h rename to Gen/Generators/include/Generators/Scale.h diff --git a/Gen/Generators/Generators/Signal.h b/Gen/Generators/include/Generators/Signal.h similarity index 98% rename from Gen/Generators/Generators/Signal.h rename to Gen/Generators/include/Generators/Signal.h index f1dc607b..a3cd9bf1 100755 --- a/Gen/Generators/Generators/Signal.h +++ b/Gen/Generators/include/Generators/Signal.h @@ -47,10 +47,10 @@ class Signal : public ExternalGenerator { virtual ~Signal( ); ///< Destructor /// Initialize - virtual StatusCode initialize( ) ; + virtual StatusCode initialize( ) override; /// Print counters and cut efficiencies at the end of the job. - virtual void printCounters( ) const ; + virtual void printCounters( ) const override; protected: /// PID of the signal particle for this job (set by job options) diff --git a/Gen/Generators/Generators/StreamForGenerator.h b/Gen/Generators/include/Generators/StreamForGenerator.h similarity index 100% rename from Gen/Generators/Generators/StreamForGenerator.h rename to Gen/Generators/include/Generators/StreamForGenerator.h diff --git a/Gen/Generators/Generators/StringParse.h b/Gen/Generators/include/Generators/StringParse.h similarity index 100% rename from Gen/Generators/Generators/StringParse.h rename to Gen/Generators/include/Generators/StringParse.h diff --git a/Gen/Generators/src/component/AsymmetricCollidingBeams.cpp b/Gen/Generators/src/Components/AsymmetricCollidingBeams.cpp similarity index 100% rename from Gen/Generators/src/component/AsymmetricCollidingBeams.cpp rename to Gen/Generators/src/Components/AsymmetricCollidingBeams.cpp diff --git a/Gen/Generators/src/component/AsymmetricCollidingBeams.h b/Gen/Generators/src/Components/AsymmetricCollidingBeams.h similarity index 100% rename from Gen/Generators/src/component/AsymmetricCollidingBeams.h rename to Gen/Generators/src/Components/AsymmetricCollidingBeams.h diff --git a/Gen/Generators/src/component/BeamSpotMarkovChainSampleVertex.cpp b/Gen/Generators/src/Components/BeamSpotMarkovChainSampleVertex.cpp similarity index 100% rename from Gen/Generators/src/component/BeamSpotMarkovChainSampleVertex.cpp rename to Gen/Generators/src/Components/BeamSpotMarkovChainSampleVertex.cpp diff --git a/Gen/Generators/src/component/BeamSpotMarkovChainSampleVertex.h b/Gen/Generators/src/Components/BeamSpotMarkovChainSampleVertex.h similarity index 100% rename from Gen/Generators/src/component/BeamSpotMarkovChainSampleVertex.h rename to Gen/Generators/src/Components/BeamSpotMarkovChainSampleVertex.h diff --git a/Gen/Generators/src/component/BeamSpotSmearVertex.cpp b/Gen/Generators/src/Components/BeamSpotSmearVertex.cpp similarity index 100% rename from Gen/Generators/src/component/BeamSpotSmearVertex.cpp rename to Gen/Generators/src/Components/BeamSpotSmearVertex.cpp diff --git a/Gen/Generators/src/component/BeamSpotSmearVertex.h b/Gen/Generators/src/Components/BeamSpotSmearVertex.h similarity index 96% rename from Gen/Generators/src/component/BeamSpotSmearVertex.h rename to Gen/Generators/src/Components/BeamSpotSmearVertex.h index c762524c..d8d86bcd 100755 --- a/Gen/Generators/src/component/BeamSpotSmearVertex.h +++ b/Gen/Generators/src/Components/BeamSpotSmearVertex.h @@ -36,13 +36,13 @@ public: virtual ~BeamSpotSmearVertex( ); ///< Destructor /// Initialize function - virtual StatusCode initialize( ) ; + virtual StatusCode initialize( ) override; /** Implementation of IVertexSmearingTool::smearVertex. * Gaussian smearing of spatial position of primary event truncated * at a given number of sigma. */ - virtual StatusCode smearVertex( HepMC3::GenEventPtr theEvent , HepRandomEnginePtr & engine ) ; + virtual StatusCode smearVertex( HepMC3::GenEventPtr theEvent , HepRandomEnginePtr & engine ) override; private: /// Number of sigma above which to cut for x-axis smearing (set by options) diff --git a/Gen/Generators/src/component/CollidingBeams.cpp b/Gen/Generators/src/Components/CollidingBeams.cpp similarity index 100% rename from Gen/Generators/src/component/CollidingBeams.cpp rename to Gen/Generators/src/Components/CollidingBeams.cpp diff --git a/Gen/Generators/src/component/CollidingBeams.h b/Gen/Generators/src/Components/CollidingBeams.h similarity index 93% rename from Gen/Generators/src/component/CollidingBeams.h rename to Gen/Generators/src/Components/CollidingBeams.h index 067f72d4..ffb48b06 100755 --- a/Gen/Generators/src/component/CollidingBeams.h +++ b/Gen/Generators/src/Components/CollidingBeams.h @@ -37,7 +37,7 @@ class CollidingBeams : public GaudiTool, virtual public IBeamTool { /** Implements IBeamTool::getMeanBeams */ virtual void getMeanBeams( Gaudi::XYZVector & pBeam1 , - Gaudi::XYZVector & pBeam2 ) const ; + Gaudi::XYZVector & pBeam2 ) const override; /** Implements IBeamTool::getBeams * Compute beam 3-momentum taking into account the horizontal and vertical @@ -45,7 +45,7 @@ class CollidingBeams : public GaudiTool, virtual public IBeamTool { * with an angular smearing equal to (emittance/beta*)^1/2. */ virtual void getBeams( Gaudi::XYZVector & pBeam1 , - Gaudi::XYZVector & pBeam2 ) ; + Gaudi::XYZVector & pBeam2 ) override; private: std::string m_beamParameters ; ///< Location of beam parameters (set by options) diff --git a/Gen/Generators/src/component/FixedLuminosity.cpp b/Gen/Generators/src/Components/FixedLuminosity.cpp similarity index 100% rename from Gen/Generators/src/component/FixedLuminosity.cpp rename to Gen/Generators/src/Components/FixedLuminosity.cpp diff --git a/Gen/Generators/src/component/FixedLuminosity.h b/Gen/Generators/src/Components/FixedLuminosity.h similarity index 94% rename from Gen/Generators/src/component/FixedLuminosity.h rename to Gen/Generators/src/Components/FixedLuminosity.h index ad8b0c84..2f9f100e 100755 --- a/Gen/Generators/src/component/FixedLuminosity.h +++ b/Gen/Generators/src/Components/FixedLuminosity.h @@ -38,10 +38,10 @@ public: virtual ~FixedLuminosity( ); ///< Destructor /// Initialize method - virtual StatusCode initialize( ) ; + virtual StatusCode initialize( ) override; /// Finalize method - virtual StatusCode finalize( ) ; + virtual StatusCode finalize( ) override; /** Implements IPileUpTool::numberOfPileUp * Returns the number of pile-up interactions in one event. It follows @@ -49,10 +49,10 @@ public: * mean = Luminosity * cross_section / crossing_rate. * The fixed luminosity is returned in the GenHeader. */ - virtual unsigned int numberOfPileUp( HepRandomEnginePtr & engine ) ; + virtual unsigned int numberOfPileUp( HepRandomEnginePtr & engine ) override; /// Implements IPileUpTool::printPileUpCounters - virtual void printPileUpCounters( ) ; + virtual void printPileUpCounters( ) override; protected: diff --git a/Gen/Generators/src/component/FixedLuminosityForRareProcess.cpp b/Gen/Generators/src/Components/FixedLuminosityForRareProcess.cpp similarity index 100% rename from Gen/Generators/src/component/FixedLuminosityForRareProcess.cpp rename to Gen/Generators/src/Components/FixedLuminosityForRareProcess.cpp diff --git a/Gen/Generators/src/component/FixedLuminosityForRareProcess.h b/Gen/Generators/src/Components/FixedLuminosityForRareProcess.h similarity index 100% rename from Gen/Generators/src/component/FixedLuminosityForRareProcess.h rename to Gen/Generators/src/Components/FixedLuminosityForRareProcess.h diff --git a/Gen/Generators/src/component/FixedLuminosityForSpillOver.cpp b/Gen/Generators/src/Components/FixedLuminosityForSpillOver.cpp similarity index 100% rename from Gen/Generators/src/component/FixedLuminosityForSpillOver.cpp rename to Gen/Generators/src/Components/FixedLuminosityForSpillOver.cpp diff --git a/Gen/Generators/src/component/FixedLuminosityForSpillOver.h b/Gen/Generators/src/Components/FixedLuminosityForSpillOver.h similarity index 92% rename from Gen/Generators/src/component/FixedLuminosityForSpillOver.h rename to Gen/Generators/src/Components/FixedLuminosityForSpillOver.h index e39d55ef..9398193c 100644 --- a/Gen/Generators/src/component/FixedLuminosityForSpillOver.h +++ b/Gen/Generators/src/Components/FixedLuminosityForSpillOver.h @@ -40,10 +40,10 @@ public: virtual ~FixedLuminosityForSpillOver( ); ///< Destructor /// Initialize method - virtual StatusCode initialize( ) ; + virtual StatusCode initialize( ) override; /// Finalize method - virtual StatusCode finalize( ) ; + virtual StatusCode finalize( ) override; /** Implements IPileUpTool::numberOfPileUp * Returns the number of pile-up interactions in one event. It follows @@ -51,10 +51,10 @@ public: * mean = Luminosity * cross_section / crossing_rate. * The fixed luminosity is returned as the currentLuminosity. */ - virtual unsigned int numberOfPileUp( HepRandomEnginePtr & ) ; + virtual unsigned int numberOfPileUp( HepRandomEnginePtr & ) override; /// Implements IPileUpTool::printPileUpCounters - virtual void printPileUpCounters( ) ; + virtual void printPileUpCounters( ) override; protected: diff --git a/Gen/Generators/src/component/FixedNInteractions.cpp b/Gen/Generators/src/Components/FixedNInteractions.cpp similarity index 100% rename from Gen/Generators/src/component/FixedNInteractions.cpp rename to Gen/Generators/src/Components/FixedNInteractions.cpp diff --git a/Gen/Generators/src/component/FixedNInteractions.h b/Gen/Generators/src/Components/FixedNInteractions.h similarity index 92% rename from Gen/Generators/src/component/FixedNInteractions.h rename to Gen/Generators/src/Components/FixedNInteractions.h index 6dc24e6c..72ec8cd2 100755 --- a/Gen/Generators/src/component/FixedNInteractions.h +++ b/Gen/Generators/src/Components/FixedNInteractions.h @@ -36,16 +36,16 @@ class FixedNInteractions : public GaudiTool, virtual public IPileUpTool { virtual ~FixedNInteractions( ); ///< Destructor /// Initialize method - virtual StatusCode initialize( ) ; + virtual StatusCode initialize( ) override; /** Returns a constant number of pile-up interactions. * Implementation of IPileUpTool::numberOfPileUp. * Returns a luminosity equal to 0. */ - virtual unsigned int numberOfPileUp( HepRandomEnginePtr & ) ; + virtual unsigned int numberOfPileUp( HepRandomEnginePtr & ) override; /// Implementation of IPileUpTool::printPileUpCounters - virtual void printPileUpCounters( ) ; + virtual void printPileUpCounters( ) override; private: /// Number of interactions to generate (set by job options) diff --git a/Gen/Generators/src/component/FixedTarget.cpp b/Gen/Generators/src/Components/FixedTarget.cpp similarity index 100% rename from Gen/Generators/src/component/FixedTarget.cpp rename to Gen/Generators/src/Components/FixedTarget.cpp diff --git a/Gen/Generators/src/component/FixedTarget.h b/Gen/Generators/src/Components/FixedTarget.h similarity index 91% rename from Gen/Generators/src/component/FixedTarget.h rename to Gen/Generators/src/Components/FixedTarget.h index ea9ebe92..3cb81c8f 100755 --- a/Gen/Generators/src/component/FixedTarget.h +++ b/Gen/Generators/src/Components/FixedTarget.h @@ -35,15 +35,15 @@ class FixedTarget : public GaudiTool, virtual public IBeamTool { virtual ~FixedTarget( ); ///< Destructor /// Initialize method - virtual StatusCode initialize( ) ; + virtual StatusCode initialize( ) override; /// Implements IBeamTool::getMeanBeams. See CollidingBeams::getMeanBeams virtual void getMeanBeams( Gaudi::XYZVector & pBeam1 , - Gaudi::XYZVector & pBeam2 ) const ; + Gaudi::XYZVector & pBeam2 ) const override; /// Implements IBeamTool::getBeams. See CollidingBeams::getBeams virtual void getBeams( Gaudi::XYZVector & pBeam1 , - Gaudi::XYZVector & pBeam2 ) ; + Gaudi::XYZVector & pBeam2 ) override; private: std::string m_beamParameters ; ///< Location of beam parameters (set by options) diff --git a/Gen/Generators/src/component/FlatSmearVertex.cpp b/Gen/Generators/src/Components/FlatSmearVertex.cpp similarity index 100% rename from Gen/Generators/src/component/FlatSmearVertex.cpp rename to Gen/Generators/src/Components/FlatSmearVertex.cpp diff --git a/Gen/Generators/src/component/FlatSmearVertex.h b/Gen/Generators/src/Components/FlatSmearVertex.h similarity index 100% rename from Gen/Generators/src/component/FlatSmearVertex.h rename to Gen/Generators/src/Components/FlatSmearVertex.h diff --git a/Gen/Generators/src/component/FlatZSmearVertex.cpp b/Gen/Generators/src/Components/FlatZSmearVertex.cpp similarity index 100% rename from Gen/Generators/src/component/FlatZSmearVertex.cpp rename to Gen/Generators/src/Components/FlatZSmearVertex.cpp diff --git a/Gen/Generators/src/component/FlatZSmearVertex.h b/Gen/Generators/src/Components/FlatZSmearVertex.h similarity index 100% rename from Gen/Generators/src/component/FlatZSmearVertex.h rename to Gen/Generators/src/Components/FlatZSmearVertex.h diff --git a/Gen/Generators/src/component/GenerationComp.cpp b/Gen/Generators/src/Components/GenerationComp.cpp similarity index 100% rename from Gen/Generators/src/component/GenerationComp.cpp rename to Gen/Generators/src/Components/GenerationComp.cpp diff --git a/Gen/Generators/src/component/HepMCWriter.cpp b/Gen/Generators/src/Components/HepMCWriter.cpp similarity index 100% rename from Gen/Generators/src/component/HepMCWriter.cpp rename to Gen/Generators/src/Components/HepMCWriter.cpp diff --git a/Gen/Generators/src/component/HistoSmearVertex.cpp b/Gen/Generators/src/Components/HistoSmearVertex.cpp similarity index 100% rename from Gen/Generators/src/component/HistoSmearVertex.cpp rename to Gen/Generators/src/Components/HistoSmearVertex.cpp diff --git a/Gen/Generators/src/component/HistoSmearVertex.h b/Gen/Generators/src/Components/HistoSmearVertex.h similarity index 100% rename from Gen/Generators/src/component/HistoSmearVertex.h rename to Gen/Generators/src/Components/HistoSmearVertex.h diff --git a/Gen/Generators/src/component/Inclusive.cpp b/Gen/Generators/src/Components/Inclusive.cpp similarity index 100% rename from Gen/Generators/src/component/Inclusive.cpp rename to Gen/Generators/src/Components/Inclusive.cpp diff --git a/Gen/Generators/src/component/Inclusive.h b/Gen/Generators/src/Components/Inclusive.h similarity index 100% rename from Gen/Generators/src/component/Inclusive.h rename to Gen/Generators/src/Components/Inclusive.h diff --git a/Gen/Generators/src/component/MergedEventsFilter.cpp b/Gen/Generators/src/Components/MergedEventsFilter.cpp similarity index 100% rename from Gen/Generators/src/component/MergedEventsFilter.cpp rename to Gen/Generators/src/Components/MergedEventsFilter.cpp diff --git a/Gen/Generators/src/component/MergedEventsFilter.h b/Gen/Generators/src/Components/MergedEventsFilter.h similarity index 100% rename from Gen/Generators/src/component/MergedEventsFilter.h rename to Gen/Generators/src/Components/MergedEventsFilter.h diff --git a/Gen/Generators/src/component/MinimumBias.cpp b/Gen/Generators/src/Components/MinimumBias.cpp similarity index 100% rename from Gen/Generators/src/component/MinimumBias.cpp rename to Gen/Generators/src/Components/MinimumBias.cpp diff --git a/Gen/Generators/src/component/MinimumBias.h b/Gen/Generators/src/Components/MinimumBias.h similarity index 100% rename from Gen/Generators/src/component/MinimumBias.h rename to Gen/Generators/src/Components/MinimumBias.h diff --git a/Gen/Generators/src/component/PoissonPileUp.cpp b/Gen/Generators/src/Components/PoissonPileUp.cpp similarity index 100% rename from Gen/Generators/src/component/PoissonPileUp.cpp rename to Gen/Generators/src/Components/PoissonPileUp.cpp diff --git a/Gen/Generators/src/component/PoissonPileUp.h b/Gen/Generators/src/Components/PoissonPileUp.h similarity index 100% rename from Gen/Generators/src/component/PoissonPileUp.h rename to Gen/Generators/src/Components/PoissonPileUp.h diff --git a/Gen/Generators/src/component/ReadHepMCAsciiFile.cpp b/Gen/Generators/src/Components/ReadHepMCAsciiFile.cpp similarity index 89% rename from Gen/Generators/src/component/ReadHepMCAsciiFile.cpp rename to Gen/Generators/src/Components/ReadHepMCAsciiFile.cpp index b59cb966..030809d0 100755 --- a/Gen/Generators/src/component/ReadHepMCAsciiFile.cpp +++ b/Gen/Generators/src/Components/ReadHepMCAsciiFile.cpp @@ -57,8 +57,7 @@ class ReadHepMCAsciiFile { public: /// initialization of the tool - virtual StatusCode initialize () - { + virtual StatusCode initialize () override { StatusCode sc = GaudiTool::initialize () ; if ( sc.isFailure() ) { return sc ; } /// check the output file @@ -69,15 +68,14 @@ public: return StatusCode::SUCCESS ; } /// finalization of the tool - virtual StatusCode finalize () - { + virtual StatusCode finalize () override { // delete the stream (close the file!) if ( 0 != m_file ) { delete m_file ; m_file = 0 ; } // finalize the base class ; return GaudiTool::finalize() ; } public: - virtual StatusCode initializeGenerator() { return StatusCode::SUCCESS ; } + virtual StatusCode initializeGenerator() override { return StatusCode::SUCCESS ; } // =================================================================== /** Generate a primary interaction. @@ -91,24 +89,22 @@ public: */ virtual StatusCode generateEvent ( HepMC3::GenEventPtr theEvent , - LHCb::GenCollision * theInfo , HepRandomEnginePtr & ) const; + LHCb::GenCollision * theInfo , HepRandomEnginePtr & ) const override; // =================================================================== /// Declare a particle stable to the production generator. - virtual void setStable - ( const LHCb::ParticleProperty * /* thePP */ ) { } + virtual void setStable( const LHCb::ParticleProperty* /* thePP */ ) override {}; // =================================================================== /** Update the properties of the particle in the production generator * with values from the particle property service. */ // =================================================================== - virtual void updateParticleProperties - ( const LHCb::ParticleProperty * /* thePP */ ) {}; + virtual void updateParticleProperties( const LHCb::ParticleProperty * /* thePP */ ) override {}; // =================================================================== /// Turn off the fragmentation step in the generation. - virtual void turnOffFragmentation ( ) {} ; + virtual void turnOffFragmentation() override {}; // =================================================================== /// Turn on the fragmentation step in the generation. - virtual void turnOnFragmentation ( ) {} ; + virtual void turnOnFragmentation() override {}; // =================================================================== /** Hadronize the event. * @param[in,out] theEvent Unfragmented event to hadronize. @@ -118,28 +114,24 @@ public: virtual StatusCode hadronize ( HepMC3::GenEventPtr /* theEvent */ , LHCb::GenCollision * /* theInfo */, - HepRandomEnginePtr & ) { return StatusCode::SUCCESS ; } + HepRandomEnginePtr & ) override { return StatusCode::SUCCESS; }; // =================================================================== /// Save the parton level event (when the fragmentation is turned off) - virtual void savePartonEvent - ( HepMC3::GenEventPtr /* theEvent */ ) {} ; + virtual void savePartonEvent( HepMC3::GenEventPtr /* theEvent */ ) override {}; // =================================================================== /// Retrieve the previously saved parton event to re-hadronize it. - virtual void retrievePartonEvent - ( HepMC3::GenEventPtr /* theEvent */ ) {} ; + virtual void retrievePartonEvent( HepMC3::GenEventPtr /* theEvent */ ) override {}; // =================================================================== /// Print configuration of production generator - virtual void printRunningConditions( ) const {} ; + virtual void printRunningConditions( ) const override {}; // =================================================================== /** Define special particles whose properties must not be updated from * the particle property service (like mass of top quark, ...) */ - virtual bool isSpecialParticle - ( const LHCb::ParticleProperty* /* thePP */ ) const { return true ; } + virtual bool isSpecialParticle( const LHCb::ParticleProperty* /* thePP */ ) const override { return true; }; // =================================================================== /// Prepare the generator to force fragmentationto in the thePdgId flavour. - virtual StatusCode setupForcedFragmentation - ( const int /* thePdgId */ ) { return StatusCode::SUCCESS ; }; + virtual StatusCode setupForcedFragmentation( const int /* thePdgId */ ) override { return StatusCode::SUCCESS; }; // =================================================================== /** standard constructor * @param type tool type(?) diff --git a/Gen/Generators/src/component/SaveSignalBInformation.cpp b/Gen/Generators/src/Components/SaveSignalBInformation.cpp similarity index 100% rename from Gen/Generators/src/component/SaveSignalBInformation.cpp rename to Gen/Generators/src/Components/SaveSignalBInformation.cpp diff --git a/Gen/Generators/src/component/SaveSignalBInformation.h b/Gen/Generators/src/Components/SaveSignalBInformation.h similarity index 100% rename from Gen/Generators/src/component/SaveSignalBInformation.h rename to Gen/Generators/src/Components/SaveSignalBInformation.h diff --git a/Gen/Generators/src/component/SignalForcedFragmentation.cpp b/Gen/Generators/src/Components/SignalForcedFragmentation.cpp similarity index 100% rename from Gen/Generators/src/component/SignalForcedFragmentation.cpp rename to Gen/Generators/src/Components/SignalForcedFragmentation.cpp diff --git a/Gen/Generators/src/component/SignalForcedFragmentation.h b/Gen/Generators/src/Components/SignalForcedFragmentation.h similarity index 100% rename from Gen/Generators/src/component/SignalForcedFragmentation.h rename to Gen/Generators/src/Components/SignalForcedFragmentation.h diff --git a/Gen/Generators/src/component/SignalPlain.cpp b/Gen/Generators/src/Components/SignalPlain.cpp similarity index 100% rename from Gen/Generators/src/component/SignalPlain.cpp rename to Gen/Generators/src/Components/SignalPlain.cpp diff --git a/Gen/Generators/src/component/SignalPlain.h b/Gen/Generators/src/Components/SignalPlain.h similarity index 100% rename from Gen/Generators/src/component/SignalPlain.h rename to Gen/Generators/src/Components/SignalPlain.h diff --git a/Gen/Generators/src/component/SignalRepeatedHadronization.cpp b/Gen/Generators/src/Components/SignalRepeatedHadronization.cpp similarity index 100% rename from Gen/Generators/src/component/SignalRepeatedHadronization.cpp rename to Gen/Generators/src/Components/SignalRepeatedHadronization.cpp diff --git a/Gen/Generators/src/component/SignalRepeatedHadronization.h b/Gen/Generators/src/Components/SignalRepeatedHadronization.h similarity index 100% rename from Gen/Generators/src/component/SignalRepeatedHadronization.h rename to Gen/Generators/src/Components/SignalRepeatedHadronization.h diff --git a/Gen/Generators/src/component/StandAloneDecayTool.cpp b/Gen/Generators/src/Components/StandAloneDecayTool.cpp similarity index 100% rename from Gen/Generators/src/component/StandAloneDecayTool.cpp rename to Gen/Generators/src/Components/StandAloneDecayTool.cpp diff --git a/Gen/Generators/src/component/StandAloneDecayTool.h b/Gen/Generators/src/Components/StandAloneDecayTool.h similarity index 100% rename from Gen/Generators/src/component/StandAloneDecayTool.h rename to Gen/Generators/src/Components/StandAloneDecayTool.h diff --git a/Gen/Generators/src/component/UniformSmearVertex.cpp b/Gen/Generators/src/Components/UniformSmearVertex.cpp similarity index 100% rename from Gen/Generators/src/component/UniformSmearVertex.cpp rename to Gen/Generators/src/Components/UniformSmearVertex.cpp diff --git a/Gen/Generators/src/component/UniformSmearVertex.h b/Gen/Generators/src/Components/UniformSmearVertex.h similarity index 97% rename from Gen/Generators/src/component/UniformSmearVertex.h rename to Gen/Generators/src/Components/UniformSmearVertex.h index 9ad1c792..b3f80ab0 100755 --- a/Gen/Generators/src/component/UniformSmearVertex.h +++ b/Gen/Generators/src/Components/UniformSmearVertex.h @@ -42,14 +42,14 @@ class UniformSmearVertex : public GaudiTool, virtual ~UniformSmearVertex( ); ///< Destructor /// Initialize method - virtual StatusCode initialize( ) ; + virtual StatusCode initialize() override; /** Implements IVertexSmearingTool::smearVertex. * Does the same than BeamSpotSmearVertex::smearVertex for the x and y * direction but generates flat distribution for the z-coordinate of * the primary vertex. */ - virtual StatusCode smearVertex( HepMC3::GenEventPtr theEvent , HepRandomEnginePtr & engine ) ; + virtual StatusCode smearVertex( HepMC3::GenEventPtr theEvent , HepRandomEnginePtr & engine ) override; private: /// Maximum value for the r coordinate of the vertex (set by options) diff --git a/Gen/Generators/src/component/VariableLuminosity.cpp b/Gen/Generators/src/Components/VariableLuminosity.cpp similarity index 100% rename from Gen/Generators/src/component/VariableLuminosity.cpp rename to Gen/Generators/src/Components/VariableLuminosity.cpp diff --git a/Gen/Generators/src/component/VariableLuminosity.h b/Gen/Generators/src/Components/VariableLuminosity.h similarity index 95% rename from Gen/Generators/src/component/VariableLuminosity.h rename to Gen/Generators/src/Components/VariableLuminosity.h index fdb9edd3..86e466a3 100755 --- a/Gen/Generators/src/component/VariableLuminosity.h +++ b/Gen/Generators/src/Components/VariableLuminosity.h @@ -39,10 +39,10 @@ public: virtual ~VariableLuminosity( ); ///< Destructor /// Initialize method - virtual StatusCode initialize( ) ; + virtual StatusCode initialize() override; /// Finalize method - virtual StatusCode finalize( ) ; + virtual StatusCode finalize() override; /** Compute number of interactions and returns luminosity * Implements IPileUpTool::numberOfPileUp. @@ -52,10 +52,10 @@ public: * The mean luminosity is given in options so the maximum luminosity * (at t=0) is computed using the fill duration. */ - virtual unsigned int numberOfPileUp( HepRandomEnginePtr & engine ) ; + virtual unsigned int numberOfPileUp( HepRandomEnginePtr & engine ) override; /// Implements IPileUpTool::printPileUpCounters - virtual void printPileUpCounters( ) ; + virtual void printPileUpCounters() override; private: /// Location where to store FSR counters (set by options) diff --git a/Gen/Generators/src/component/XmlCounterLogFile.cpp b/Gen/Generators/src/Components/XmlCounterLogFile.cpp similarity index 100% rename from Gen/Generators/src/component/XmlCounterLogFile.cpp rename to Gen/Generators/src/Components/XmlCounterLogFile.cpp diff --git a/Gen/Generators/src/component/XmlCounterLogFile.h b/Gen/Generators/src/Components/XmlCounterLogFile.h similarity index 81% rename from Gen/Generators/src/component/XmlCounterLogFile.h rename to Gen/Generators/src/Components/XmlCounterLogFile.h index dd78957b..92c9ff30 100644 --- a/Gen/Generators/src/component/XmlCounterLogFile.h +++ b/Gen/Generators/src/Components/XmlCounterLogFile.h @@ -37,34 +37,34 @@ public: virtual ~XmlCounterLogFile( ); ///< Destructor /// Initialize method - virtual StatusCode initialize( ) ; + virtual StatusCode initialize() override; /// Finalize method - virtual StatusCode finalize( ) ; + virtual StatusCode finalize() override; /// Add efficiency number virtual void addEfficiency( const std::string & name , const unsigned int after , const unsigned int before , const double fraction , - const double err_fraction ) ; + const double err_fraction ) override; - virtual void addCounter( const std::string & name , const unsigned int value ) ; + virtual void addCounter( const std::string & name , const unsigned int value ) override; virtual void addFraction( const std::string & name , const unsigned int number , - const double fraction , const double err_fraction ) ; + const double fraction , const double err_fraction ) override; virtual void addCrossSection( const std::string & name , const unsigned int processId , const unsigned int number , - const double value ) ; + const double value ) override; - virtual void addEventType( const unsigned int evType ) ; + virtual void addEventType( const unsigned int evType ) override; /// Add the Gauss version - virtual void addGaussVersion( const std::string & version ) ; + virtual void addGaussVersion( const std::string & version ) override; - virtual void addMethod( const std::string & type ) ; + virtual void addMethod( const std::string & type ) override; - virtual void addGenerator( const std::string & generator ) ; + virtual void addGenerator( const std::string & generator ) override; protected: diff --git a/Gen/Generators/src/component/not_yet_ported/Special.cpp b/Gen/Generators/src/Components/not_yet_ported/Special.cpp similarity index 100% rename from Gen/Generators/src/component/not_yet_ported/Special.cpp rename to Gen/Generators/src/Components/not_yet_ported/Special.cpp diff --git a/Gen/Generators/src/component/not_yet_ported/Special.h b/Gen/Generators/src/Components/not_yet_ported/Special.h similarity index 100% rename from Gen/Generators/src/component/not_yet_ported/Special.h rename to Gen/Generators/src/Components/not_yet_ported/Special.h diff --git a/Gen/Generators/src/component/scrapyard/ApplyPhotos.cpp b/Gen/Generators/src/Components/scrapyard/ApplyPhotos.cpp similarity index 100% rename from Gen/Generators/src/component/scrapyard/ApplyPhotos.cpp rename to Gen/Generators/src/Components/scrapyard/ApplyPhotos.cpp diff --git a/Gen/Generators/src/component/scrapyard/ApplyPhotos.h b/Gen/Generators/src/Components/scrapyard/ApplyPhotos.h similarity index 100% rename from Gen/Generators/src/component/scrapyard/ApplyPhotos.h rename to Gen/Generators/src/Components/scrapyard/ApplyPhotos.h diff --git a/Gen/Generators/src/component/scrapyard/RepeatDecay.cpp b/Gen/Generators/src/Components/scrapyard/RepeatDecay.cpp similarity index 100% rename from Gen/Generators/src/component/scrapyard/RepeatDecay.cpp rename to Gen/Generators/src/Components/scrapyard/RepeatDecay.cpp diff --git a/Gen/Generators/src/component/scrapyard/RepeatDecay.h b/Gen/Generators/src/Components/scrapyard/RepeatDecay.h similarity index 100% rename from Gen/Generators/src/component/scrapyard/RepeatDecay.h rename to Gen/Generators/src/Components/scrapyard/RepeatDecay.h diff --git a/Gen/LbPGuns/CMakeLists.txt b/Gen/LbPGuns/CMakeLists.txt index 9aa292f3..fc239984 100644 --- a/Gen/LbPGuns/CMakeLists.txt +++ b/Gen/LbPGuns/CMakeLists.txt @@ -8,29 +8,28 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: LbPGuns -################################################################################ -gaudi_subdir(LbPGuns v6r1) - -gaudi_depends_on_subdirs( - #FIXME: Det/DetDesc - Event/GenEvent - GaudiAlg - Kernel/LHCbKernel - Gen/GenInterfaces - Gen/Generators - HepMC3 - ) - -AddHepMC3() +#[=======================================================================[.rst: +Gen/LbPGuns +----------- +#]=======================================================================] +gaudi_add_header_only_library(LbPGunsLib) gaudi_add_module(LbPGuns - src/*.cpp - INCLUDE_DIRS Gen/GenInterfaces ${HEPMC3_INCLUDE_DIR} - LINK_LIBRARIES GenEvent GaudiAlgLib LHCbKernel GeneratorsLib ${HEPMC3_LIBRARIES}) - -add_dependencies(LbPGuns HepMC3Ext) - -gaudi_install_headers(LbPGuns) - + SOURCES + src/Components/BeamShape.cpp + src/Components/Cosmics.cpp + src/Components/FixedMomentum.cpp + src/Components/FlatNParticles.cpp + src/Components/FlatPtRapidity.cpp + src/Components/GaussianTheta.cpp + src/Components/GenericGun.cpp + src/Components/MaterialEval.cpp + src/Components/MomentumRange.cpp + src/Components/MomentumSpectrum.cpp + src/Components/ParticleGun.cpp + LINK + Gaussino::GeneratorsLib + Gaussino::Defaults + Gaussino::HepMCUserLib + Gaussino::LbPGunsLib +) diff --git a/Gen/LbPGuns/LbPGuns/IParticleGunTool.h b/Gen/LbPGuns/include/LbPGuns/IParticleGunTool.h similarity index 100% rename from Gen/LbPGuns/LbPGuns/IParticleGunTool.h rename to Gen/LbPGuns/include/LbPGuns/IParticleGunTool.h diff --git a/Gen/LbPGuns/src/BeamShape.cpp b/Gen/LbPGuns/src/Components/BeamShape.cpp similarity index 100% rename from Gen/LbPGuns/src/BeamShape.cpp rename to Gen/LbPGuns/src/Components/BeamShape.cpp diff --git a/Gen/LbPGuns/src/BeamShape.h b/Gen/LbPGuns/src/Components/BeamShape.h similarity index 95% rename from Gen/LbPGuns/src/BeamShape.h rename to Gen/LbPGuns/src/Components/BeamShape.h index 3abc6b1d..3a64ca8c 100755 --- a/Gen/LbPGuns/src/BeamShape.h +++ b/Gen/LbPGuns/src/Components/BeamShape.h @@ -33,15 +33,15 @@ class BeamShape : public GaudiTool , virtual public IParticleGunTool { virtual ~BeamShape() ; ///< Destructor /// Initialize method - virtual StatusCode initialize(); + virtual StatusCode initialize() override; /// Generate the particle virtual void generateParticle( Gaudi::LorentzVector & fourMomentum , Gaudi::LorentzVector & origin , - int & pdgId , HepRandomEnginePtr& engine ) ; + int & pdgId , HepRandomEnginePtr& engine ) override; /// Print counters - virtual void printCounters( ) { ; } ; + virtual void printCounters( ) override {}; private: // Setable Properties diff --git a/Gen/LbPGuns/src/Cosmics.cpp b/Gen/LbPGuns/src/Components/Cosmics.cpp similarity index 100% rename from Gen/LbPGuns/src/Cosmics.cpp rename to Gen/LbPGuns/src/Components/Cosmics.cpp diff --git a/Gen/LbPGuns/src/Cosmics.h b/Gen/LbPGuns/src/Components/Cosmics.h similarity index 95% rename from Gen/LbPGuns/src/Cosmics.h rename to Gen/LbPGuns/src/Components/Cosmics.h index feb32a3b..f71a5cab 100755 --- a/Gen/LbPGuns/src/Cosmics.h +++ b/Gen/LbPGuns/src/Components/Cosmics.h @@ -38,16 +38,16 @@ class Cosmics : public GaudiTool , virtual public IParticleGunTool { virtual ~Cosmics(); /// Initialize particle gun parameters - virtual StatusCode initialize(); + virtual StatusCode initialize() override; /// Generation of particles virtual void generateParticle( Gaudi::LorentzVector & fourMomentum , Gaudi::LorentzVector & origin , int & pdgId , - HepRandomEnginePtr & engine ) ; + HepRandomEnginePtr & engine ) override; /// Print counters - virtual void printCounters( ) { ; } ; + virtual void printCounters( ) override {}; private: diff --git a/Gen/LbPGuns/src/FixedMomentum.cpp b/Gen/LbPGuns/src/Components/FixedMomentum.cpp similarity index 100% rename from Gen/LbPGuns/src/FixedMomentum.cpp rename to Gen/LbPGuns/src/Components/FixedMomentum.cpp diff --git a/Gen/LbPGuns/src/FixedMomentum.h b/Gen/LbPGuns/src/Components/FixedMomentum.h similarity index 95% rename from Gen/LbPGuns/src/FixedMomentum.h rename to Gen/LbPGuns/src/Components/FixedMomentum.h index 7dd841b0..38a8e1bb 100755 --- a/Gen/LbPGuns/src/FixedMomentum.h +++ b/Gen/LbPGuns/src/Components/FixedMomentum.h @@ -37,15 +37,15 @@ class FixedMomentum : public GaudiTool , virtual public IParticleGunTool { virtual ~FixedMomentum(); /// Initialize particle gun parameters - virtual StatusCode initialize(); + virtual StatusCode initialize() override; /// Generation of particles virtual void generateParticle( Gaudi::LorentzVector & momentum , Gaudi::LorentzVector & origin , - int & pdgId , HepRandomEnginePtr& engine ) ; + int & pdgId , HepRandomEnginePtr& engine ) override; /// Print counters - virtual void printCounters( ) { ; } ; + virtual void printCounters( ) override {}; private: double m_px; ///< px (Set by options) diff --git a/Gen/LbPGuns/src/FlatNParticles.cpp b/Gen/LbPGuns/src/Components/FlatNParticles.cpp similarity index 100% rename from Gen/LbPGuns/src/FlatNParticles.cpp rename to Gen/LbPGuns/src/Components/FlatNParticles.cpp diff --git a/Gen/LbPGuns/src/FlatNParticles.h b/Gen/LbPGuns/src/Components/FlatNParticles.h similarity index 95% rename from Gen/LbPGuns/src/FlatNParticles.h rename to Gen/LbPGuns/src/Components/FlatNParticles.h index e6b87ae0..2f5631c4 100755 --- a/Gen/LbPGuns/src/FlatNParticles.h +++ b/Gen/LbPGuns/src/Components/FlatNParticles.h @@ -39,16 +39,16 @@ public: virtual ~FlatNParticles( ); ///< Destructor /// Initialize method - virtual StatusCode initialize( ) ; + virtual StatusCode initialize( ) override; /** Implements IPileUpTool::numberOfPileUp * Returns the number of particles in one event. It follows * a flat distribution */ - virtual unsigned int numberOfPileUp( HepRandomEnginePtr& engine ) ; + virtual unsigned int numberOfPileUp( HepRandomEnginePtr& engine ) override; /// Implements IPileUpTool::printPileUpCounters - virtual void printPileUpCounters( ) { ; } ; + virtual void printPileUpCounters( ) override {}; protected: diff --git a/Gen/LbPGuns/src/FlatPtRapidity.cpp b/Gen/LbPGuns/src/Components/FlatPtRapidity.cpp similarity index 100% rename from Gen/LbPGuns/src/FlatPtRapidity.cpp rename to Gen/LbPGuns/src/Components/FlatPtRapidity.cpp diff --git a/Gen/LbPGuns/src/FlatPtRapidity.h b/Gen/LbPGuns/src/Components/FlatPtRapidity.h similarity index 95% rename from Gen/LbPGuns/src/FlatPtRapidity.h rename to Gen/LbPGuns/src/Components/FlatPtRapidity.h index de7263c8..8630f4c4 100755 --- a/Gen/LbPGuns/src/FlatPtRapidity.h +++ b/Gen/LbPGuns/src/Components/FlatPtRapidity.h @@ -37,15 +37,15 @@ class FlatPtRapidity : public GaudiTool , virtual public IParticleGunTool { virtual ~FlatPtRapidity(); /// Initialize particle gun parameters - virtual StatusCode initialize(); + virtual StatusCode initialize() override; /// Generation of particles virtual void generateParticle( Gaudi::LorentzVector & momentum , Gaudi::LorentzVector & origin , - int & pdgId , HepRandomEnginePtr& engine ) ; + int & pdgId , HepRandomEnginePtr& engine ) override; /// Print counters - virtual void printCounters( ) { ; } ; + virtual void printCounters( ) override {}; private: double m_minPt; ///< Minimum pT (Set by options) diff --git a/Gen/LbPGuns/src/GaussianTheta.cpp b/Gen/LbPGuns/src/Components/GaussianTheta.cpp similarity index 100% rename from Gen/LbPGuns/src/GaussianTheta.cpp rename to Gen/LbPGuns/src/Components/GaussianTheta.cpp diff --git a/Gen/LbPGuns/src/GaussianTheta.h b/Gen/LbPGuns/src/Components/GaussianTheta.h similarity index 95% rename from Gen/LbPGuns/src/GaussianTheta.h rename to Gen/LbPGuns/src/Components/GaussianTheta.h index 7b8e78e5..653b7579 100755 --- a/Gen/LbPGuns/src/GaussianTheta.h +++ b/Gen/LbPGuns/src/Components/GaussianTheta.h @@ -37,15 +37,15 @@ class GaussianTheta : public GaudiTool , virtual public IParticleGunTool { virtual ~GaussianTheta() ; ///< Destructor /// Initialize method - virtual StatusCode initialize(); + virtual StatusCode initialize() override; /// Generate the particle virtual void generateParticle( Gaudi::LorentzVector & fourMomentum , Gaudi::LorentzVector & origin , - int & pdgId , HepRandomEnginePtr & engine ) ; + int & pdgId , HepRandomEnginePtr & engine ) override; /// Print counters - virtual void printCounters( ) { ; } ; + virtual void printCounters( ) override {}; private: double m_mass ; diff --git a/Gen/LbPGuns/src/GenericGun.cpp b/Gen/LbPGuns/src/Components/GenericGun.cpp similarity index 100% rename from Gen/LbPGuns/src/GenericGun.cpp rename to Gen/LbPGuns/src/Components/GenericGun.cpp diff --git a/Gen/LbPGuns/src/GenericGun.h b/Gen/LbPGuns/src/Components/GenericGun.h similarity index 96% rename from Gen/LbPGuns/src/GenericGun.h rename to Gen/LbPGuns/src/Components/GenericGun.h index 9b7b3764..4933c339 100755 --- a/Gen/LbPGuns/src/GenericGun.h +++ b/Gen/LbPGuns/src/Components/GenericGun.h @@ -49,15 +49,15 @@ class GenericGun : public GaudiTool , virtual public IParticleGunTool { virtual ~GenericGun() ; ///< Destructor /// Initialize method - virtual StatusCode initialize(); + virtual StatusCode initialize() override; /// Generate the particle virtual void generateParticle( Gaudi::LorentzVector & fourMomentum , Gaudi::LorentzVector & origin , - int & pdgId , HepRandomEnginePtr & engine ) ; + int & pdgId , HepRandomEnginePtr & engine ) override; /// Print counters - virtual void printCounters( ) { ; } ; + virtual void printCounters( ) override {}; private: // Setable Properties:- diff --git a/Gen/LbPGuns/src/MaterialEval.cpp b/Gen/LbPGuns/src/Components/MaterialEval.cpp similarity index 100% rename from Gen/LbPGuns/src/MaterialEval.cpp rename to Gen/LbPGuns/src/Components/MaterialEval.cpp diff --git a/Gen/LbPGuns/src/MaterialEval.h b/Gen/LbPGuns/src/Components/MaterialEval.h similarity index 95% rename from Gen/LbPGuns/src/MaterialEval.h rename to Gen/LbPGuns/src/Components/MaterialEval.h index fb69e05f..0b349d73 100755 --- a/Gen/LbPGuns/src/MaterialEval.h +++ b/Gen/LbPGuns/src/Components/MaterialEval.h @@ -40,15 +40,15 @@ public: virtual ~MaterialEval(); ///< Destructor - virtual StatusCode initialize(); ///< Algorithm initialization + virtual StatusCode initialize() override; ///< Algorithm initialization /// Specialized method called by base class in execute virtual void generateParticle( Gaudi::LorentzVector & fourMomentum , Gaudi::LorentzVector & origin , int & pdgId , - HepRandomEnginePtr & engine ) ; + HepRandomEnginePtr & engine ) override; /// Print counters - virtual void printCounters( ) { ; } ; + virtual void printCounters( ) override {}; protected: diff --git a/Gen/LbPGuns/src/MomentumRange.cpp b/Gen/LbPGuns/src/Components/MomentumRange.cpp similarity index 100% rename from Gen/LbPGuns/src/MomentumRange.cpp rename to Gen/LbPGuns/src/Components/MomentumRange.cpp diff --git a/Gen/LbPGuns/src/MomentumRange.h b/Gen/LbPGuns/src/Components/MomentumRange.h similarity index 95% rename from Gen/LbPGuns/src/MomentumRange.h rename to Gen/LbPGuns/src/Components/MomentumRange.h index 362e07f1..85e2838c 100755 --- a/Gen/LbPGuns/src/MomentumRange.h +++ b/Gen/LbPGuns/src/Components/MomentumRange.h @@ -37,15 +37,15 @@ class MomentumRange : public GaudiTool , virtual public IParticleGunTool { virtual ~MomentumRange(); /// Initialize particle gun parameters - virtual StatusCode initialize(); + virtual StatusCode initialize() override; /// Generation of particles virtual void generateParticle( Gaudi::LorentzVector & momentum , Gaudi::LorentzVector & origin , - int & pdgId , HepRandomEnginePtr & engine ) ; + int & pdgId , HepRandomEnginePtr & engine ) override; /// Print counters - virtual void printCounters( ) { ; } ; + virtual void printCounters( ) override {}; private: double m_minMom; ///< Minimum momentum (Set by options) diff --git a/Gen/LbPGuns/src/MomentumSpectrum.cpp b/Gen/LbPGuns/src/Components/MomentumSpectrum.cpp similarity index 100% rename from Gen/LbPGuns/src/MomentumSpectrum.cpp rename to Gen/LbPGuns/src/Components/MomentumSpectrum.cpp diff --git a/Gen/LbPGuns/src/MomentumSpectrum.h b/Gen/LbPGuns/src/Components/MomentumSpectrum.h similarity index 96% rename from Gen/LbPGuns/src/MomentumSpectrum.h rename to Gen/LbPGuns/src/Components/MomentumSpectrum.h index 612ce918..e6ff8d38 100644 --- a/Gen/LbPGuns/src/MomentumSpectrum.h +++ b/Gen/LbPGuns/src/Components/MomentumSpectrum.h @@ -50,15 +50,15 @@ class MomentumSpectrum : public GaudiTool , virtual public IParticleGunTool { virtual ~MomentumSpectrum(); /// Initialize particle gun parameters - virtual StatusCode initialize(); + virtual StatusCode initialize() override; /// Generation of particles virtual void generateParticle( Gaudi::LorentzVector & momentum , Gaudi::LorentzVector & origin , - int & pdgId , HepRandomEnginePtr & engine ) ; + int & pdgId , HepRandomEnginePtr & engine ) override; /// Print counters - virtual void printCounters( ) { ; } ; + virtual void printCounters( ) override {}; private: /// Pdg Codes of particles to generate (Set by options) diff --git a/Gen/LbPGuns/src/ParticleGun.cpp b/Gen/LbPGuns/src/Components/ParticleGun.cpp similarity index 100% rename from Gen/LbPGuns/src/ParticleGun.cpp rename to Gen/LbPGuns/src/Components/ParticleGun.cpp diff --git a/Gen/LbPGuns/src/ParticleGun.h b/Gen/LbPGuns/src/Components/ParticleGun.h similarity index 100% rename from Gen/LbPGuns/src/ParticleGun.h rename to Gen/LbPGuns/src/Components/ParticleGun.h diff --git a/Gen/LbPythia8/CMakeLists.txt b/Gen/LbPythia8/CMakeLists.txt index a696e4a1..04b3cf5a 100644 --- a/Gen/LbPythia8/CMakeLists.txt +++ b/Gen/LbPythia8/CMakeLists.txt @@ -8,52 +8,55 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: LbPythia8 -################################################################################ -gaudi_subdir(LbPythia8 v12r0) - -gaudi_depends_on_subdirs(Gen/GenInterfaces - Event/GenEvent - Kernel/PartProp - GaudiAlg - NewRnd - HepMC3 - HepMCUser - Utils - Defaults) - -find_package(Pythia8 COMPONENTS pythia8 pythia8tohepmc) -AddHepMC3() -find_package(LHAPDF) -find_package(Boost COMPONENTS filesystem system) -find_package(ROOT) -find_package(CLHEP) - -include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ${HEPMC3_INCLUDE_DIRS} ${PYTHIA8_INCLUDE_DIRS}) - +#[=======================================================================[.rst: +Gen/LbPytha8 +------------ +#]=======================================================================] gaudi_add_library(LbPythia8Lib - src/Lib/*.cpp - NO_PUBLIC_HEADERS - INCLUDE_DIRS Boost Pythia8 ROOT ${HEPMC3_INCLUDE_DIR} Gen/GenInterfaces Defaults HepMCUser Utils NewRnd - LINK_LIBRARIES Boost GaudiAlgLib Pythia8 ${HEPMC3_LIBRARIES} ROOT PartPropLib LHAPDF GenEvent) - -add_dependencies(LbPythia8Lib HepMC3Ext) + SOURCES + src/Lib/BeamToolForPythia8.cpp + src/Lib/LhcbHooks.cpp + src/Lib/Pythia8Production.cpp + src/Lib/Pythia8ProductionMT.cpp + LINK + PUBLIC + Pythia8::Pythia8 + HepMC3::HepMC3 + Gaudi::GaudiAlgLib + LHCb::GenEvent # TODO: [LHCb DEPENDENCY] + LHCb::PartPropLib # TODO: [LHCb DEPENDENCY] + Gaussino::GenInterfacesLib + Gaussino::UtilsLib + Gaussino::NewRndLib + Gaussino::HepMCUserLib + Gaussino::Defaults +) gaudi_add_module(LbPythia8 - src/component/*.cpp - LINK_LIBRARIES LbPythia8Lib) + SOURCES + src/Components/Pythia8ProductionFactory.cpp + LINK + Gaussino::LbPythia8Lib +) -gaudi_env(SET PYTHIA8XML ${PYTHIA8_XML}) +# TODO: [NEW CMAKE] needed? +#gaudi_env(SET PYTHIA8XML ${PYTHIA8_XML}) gaudi_add_executable(Pythia8Reproducibility - exec/minimal.cxx - INCLUDE_DIRS Pythia8 ${HEPMC3_INCLUDE_DIR} CLHEP HepMCUtils - LINK_LIBRARIES Pythia8 ${HEPMC3_LIBRARIES} CLHEP HepMCUtils) - -find_package(HepMC) + SOURCES + exec/minimal.cxx + LINK + Pythia8::Pythia8 + HepMC3::HepMC3 + Gaussino::HepMCUtilsLib +) gaudi_add_executable(HepMCConverterTest - exec/convtest.cxx - INCLUDE_DIRS Pythia8 ${HEPMC3_INCLUDE_DIR} CLHEP HepMCUtils HepMC - LINK_LIBRARIES Pythia8 ${HEPMC3_LIBRARIES} CLHEP HepMCUtils HepMC) + SOURCES + exec/convtest.cxx + LINK + Pythia8::Pythia8 + HepMC3::HepMC3 + HepMC::HepMC + Gaussino::HepMCUtilsLib +) diff --git a/Gen/LbPythia8/src/exec/convtest.cxx b/Gen/LbPythia8/exec/convtest.cxx similarity index 100% rename from Gen/LbPythia8/src/exec/convtest.cxx rename to Gen/LbPythia8/exec/convtest.cxx diff --git a/Gen/LbPythia8/src/exec/minimal.cxx b/Gen/LbPythia8/exec/minimal.cxx similarity index 99% rename from Gen/LbPythia8/src/exec/minimal.cxx rename to Gen/LbPythia8/exec/minimal.cxx index 10493248..3a69487e 100644 --- a/Gen/LbPythia8/src/exec/minimal.cxx +++ b/Gen/LbPythia8/exec/minimal.cxx @@ -27,7 +27,7 @@ class RndForPythia : public Pythia8::RndmEngine { public: RndForPythia( CLHEP::HepRandomEngine& engine ) : m_gen( engine, 0, 1 ) {} - virtual double flat() + virtual double flat() override { auto val = m_gen(); return val; diff --git a/Gen/LbPythia8/LbPythia8/BeamToolForPythia8.h b/Gen/LbPythia8/include/LbPythia8/BeamToolForPythia8.h similarity index 100% rename from Gen/LbPythia8/LbPythia8/BeamToolForPythia8.h rename to Gen/LbPythia8/include/LbPythia8/BeamToolForPythia8.h diff --git a/Gen/LbPythia8/LbPythia8/LhcbHooks.h b/Gen/LbPythia8/include/LbPythia8/LhcbHooks.h similarity index 100% rename from Gen/LbPythia8/LbPythia8/LhcbHooks.h rename to Gen/LbPythia8/include/LbPythia8/LhcbHooks.h diff --git a/Gen/LbPythia8/LbPythia8/Pythia8Production.h b/Gen/LbPythia8/include/LbPythia8/Pythia8Production.h similarity index 99% rename from Gen/LbPythia8/LbPythia8/Pythia8Production.h rename to Gen/LbPythia8/include/LbPythia8/Pythia8Production.h index 95f79fe4..7bc0ad13 100755 --- a/Gen/LbPythia8/LbPythia8/Pythia8Production.h +++ b/Gen/LbPythia8/include/LbPythia8/Pythia8Production.h @@ -187,7 +187,7 @@ protected: class RndForPythia : public Pythia8::RndmEngine { public: RndForPythia(CLHEP::HepRandomEngine & engine ):m_gen(engine, 0, 1){} - virtual double flat(){return m_gen();} + virtual double flat() override { return m_gen(); } private: CLHEP::RandFlat m_gen; diff --git a/Gen/LbPythia8/LbPythia8/Pythia8ProductionMT.h b/Gen/LbPythia8/include/LbPythia8/Pythia8ProductionMT.h similarity index 99% rename from Gen/LbPythia8/LbPythia8/Pythia8ProductionMT.h rename to Gen/LbPythia8/include/LbPythia8/Pythia8ProductionMT.h index dfdd6db0..34555813 100755 --- a/Gen/LbPythia8/LbPythia8/Pythia8ProductionMT.h +++ b/Gen/LbPythia8/include/LbPythia8/Pythia8ProductionMT.h @@ -205,7 +205,7 @@ protected: { public: RndForPythia( CLHEP::HepRandomEngine& engine ) : m_gen( engine, 0, 1 ) {} - virtual double flat() { return m_gen(); } + virtual double flat() override { return m_gen(); } private: CLHEP::RandFlat m_gen; diff --git a/Gen/LbPythia8/src/component/Pythia8ProductionFactory.cpp b/Gen/LbPythia8/src/Components/Pythia8ProductionFactory.cpp similarity index 100% rename from Gen/LbPythia8/src/component/Pythia8ProductionFactory.cpp rename to Gen/LbPythia8/src/Components/Pythia8ProductionFactory.cpp diff --git a/Gen/RndInit/CMakeLists.txt b/Gen/RndInit/CMakeLists.txt index 2e070390..a2ce1924 100644 --- a/Gen/RndInit/CMakeLists.txt +++ b/Gen/RndInit/CMakeLists.txt @@ -8,25 +8,27 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: GaussAlgs -################################################################################ -gaudi_subdir(RndInit v1r0) - -gaudi_depends_on_subdirs(GaudiAlg - NewRnd - Gen/GenBeam - Event/GenEvent - #FIXME: For platform and kernel streaming, I think ?!?! - Kernel/LHCbKernel - Defaults) +#[=======================================================================[.rst: +Gen/RndInit +----------- +#]=======================================================================] gaudi_add_library(RndInitLib - src/lib/*.cpp - PUBLIC_HEADERS RndInit - INCLUDE_DIRS GenBeam - LINK_LIBRARIES GaudiAlgLib GenEvent LHCbKernel NewRnd) + SOURCES + src/Lib/GenRndInit.cpp + LINK + PUBLIC + Gaudi::GaudiAlgLib + LHCb::GenEvent # TODO: [LHCb DEPENDENCY] + Gaussino::Defaults + Gaussino::NewRndLib + Gaussino::GenBeamLib +) gaudi_add_module(RndInit - src/components/*.cpp - LINK_LIBRARIES RndInitLib) + SOURCES + src/Components/GenRndInitComp.cpp + src/Components/SeedingTool.cpp + LINK + Gaussino::RndInitLib +) diff --git a/Gen/RndInit/RndInit/GenRndInit.h b/Gen/RndInit/include/RndInit/GenRndInit.h similarity index 100% rename from Gen/RndInit/RndInit/GenRndInit.h rename to Gen/RndInit/include/RndInit/GenRndInit.h diff --git a/Gen/RndInit/RndInit/IRndSeedingTool.h b/Gen/RndInit/include/RndInit/IRndSeedingTool.h similarity index 100% rename from Gen/RndInit/RndInit/IRndSeedingTool.h rename to Gen/RndInit/include/RndInit/IRndSeedingTool.h diff --git a/Gen/RndInit/src/components/GenRndInitComp.cpp b/Gen/RndInit/src/Components/GenRndInitComp.cpp similarity index 100% rename from Gen/RndInit/src/components/GenRndInitComp.cpp rename to Gen/RndInit/src/Components/GenRndInitComp.cpp diff --git a/Gen/RndInit/src/components/SeedingTool.cpp b/Gen/RndInit/src/Components/SeedingTool.cpp similarity index 100% rename from Gen/RndInit/src/components/SeedingTool.cpp rename to Gen/RndInit/src/Components/SeedingTool.cpp diff --git a/Gen/RndInit/src/components/SeedingTool.h b/Gen/RndInit/src/Components/SeedingTool.h similarity index 100% rename from Gen/RndInit/src/components/SeedingTool.h rename to Gen/RndInit/src/Components/SeedingTool.h diff --git a/Gen/RndInit/src/lib/GenRndInit.cpp b/Gen/RndInit/src/Lib/GenRndInit.cpp similarity index 100% rename from Gen/RndInit/src/lib/GenRndInit.cpp rename to Gen/RndInit/src/Lib/GenRndInit.cpp diff --git a/HepMC3/CMakeLists.txt b/HepMC3/CMakeLists.txt deleted file mode 100644 index 0bf895c5..00000000 --- a/HepMC3/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -gaudi_subdir(HepMC3 v3r1) - -find_package(ROOT) - -# Define EvtGen external project -include(ExternalProject) -set(HEPMC3_GIT_SOURCE "https://gitlab.cern.ch/Gaussino/HepMC3.git" CACHE STRING "URL of the HepMC3 git repository") -set(HEPMC3_GIT_TAG "official_patched" CACHE STRING "Tag of HepMC3 to be used") -message(STATUS "HepMC3 will use tag \"${HEPMC3_GIT_TAG}\" from repository ${HEPMC3_GIT_SOURCE}") -message(STATUS "Binary dir = ${PROJECT_BINARY_DIR}") -message(STATUS "Build command = ${BUILD_COMMAND}") -message(STATUS "CMake command = ${CMAKE_COMMAND}") -string(REPLACE "c++" "" HEPMC_CXX_STANDARD "${GAUDI_CXX_STANDARD}") - -ExternalProject_Add(HepMC3Ext - GIT_REPOSITORY ${HEPMC3_GIT_SOURCE} - GIT_TAG ${HEPMC3_GIT_TAG} - CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_LIST_DIR}/hepmc3_toolchain.cmake - -DHEPMC3_ENABLE_PYTHON=OFF - -DHEPMC3_ENABLE_ROOTIO=OFF # FIXME: disabled because of HepMC & HepMC3 namespace collision - -DHEPMC3_INSTALL_INTERFACES=ON - # Do not install examples (installed directories are detected as - # packages by the old Gaudi toolchain): - -DHEPMC3_INSTALL_EXAMPLES=OFF - -DCMAKE_BUILD_TYPE=Debug - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON - #-DROOT_DIR=${ROOTSYS} - -DCMAKE_INSTALL_LIBDIR=lib - -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} - -DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_STANDARD=${HEPMC_CXX_STANDARD} - CMAKE_COMMAND ${env_cmd} --xml ${env_xml} cmake - BUILD_COMMAND ${env_cmd} --xml ${env_xml} cmake --build . -) diff --git a/HepMC3/hepmc3_toolchain.cmake b/HepMC3/hepmc3_toolchain.cmake deleted file mode 100644 index 1321282c..00000000 --- a/HepMC3/hepmc3_toolchain.cmake +++ /dev/null @@ -1,41 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# Special toolchain file that inherits the same heptools version as the -# used projects. -# -# -# this check is needed because the toolchain is called when checking the -# compiler (without the proper cache) -if(NOT CMAKE_SOURCE_DIR MATCHES "CMakeTmp") - find_path(heptools_mod_dir UseHEPTools.cmake) - message(INFO heptools_mod_dir = ${heptools_mod_dir}) - set(CMAKE_MODULE_PATH ${heptools_mod_dir} ${CMAKE_MODULE_PATH}) - if(heptools_version) - include(UseHEPTools) - use_heptools(${heptools_version}) - else() - include(InheritHEPTools) - inherit_heptools() - endif() - - # FIXME: make sure we do not pick up unwanted/problematic projects from LCG - if(CMAKE_PREFIX_PATH) - # - ninja (it requires LD_LIBRARY_PATH set to run) - # - Gaudi (we do not want to use it from LCG) - # - xenv (conflicts with the version in the build environment) - list(FILTER CMAKE_PREFIX_PATH EXCLUDE REGEX "(LCG_|lcg/nightlies).*(ninja|Gaudi|xenv)") - endif() - - # FIXME: make sure we do not pick up geant from LCG (it requires LD_LIBRARY_PATH set) - if(CMAKE_PREFIX_PATH AND CMAKE_VERSION VERSION_GREATER "3.6.0") - list(FILTER CMAKE_PREFIX_PATH EXCLUDE REGEX "(LCG_|lcg/nightlies).*Geant4") - endif() -endif() diff --git a/HepMCUser/CMakeLists.txt b/HepMCUser/CMakeLists.txt index f23511b0..44744f62 100644 --- a/HepMCUser/CMakeLists.txt +++ b/HepMCUser/CMakeLists.txt @@ -8,37 +8,31 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: HepMCUser -# -################################################################################# - -gaudi_subdir(HepMCUser v1r0) - -gaudi_depends_on_subdirs(Defaults - GaudiAlg - HepMC3) - -gaudi_install_headers(HepMCUser) - -find_package(ROOT) -AddHepMC3() - -gaudi_add_library(HepMCUtils - src/utils/*.cpp - PUBLIC_HEADERS HepMCUtils - INCLUDE_DIRS HepMCUser Defaults ${RANGEV3_INCLUDE_DIRS} ROOT - LINK_LIBRARIES ${HEPMC3_LIBRARIES} GaudiAlgLib ROOT PartPropLib) - -#gaudi_add_library(HepMCUser - #src/user/*.cpp - #PUBLIC_HEADERS HepMCUtils - #INCLUDE_DIRS HepMCUser Defaults ${RANGEV3_INCLUDE_DIRS} ROOT - #LINK_LIBRARIES ${HEPMC3_LIBRARIES} GaudiAlgLib ROOT) - -# FIXME: Force the external build before the Utils here. Hack it time -add_dependencies(HepMCUtils HepMC3Ext) +#[=======================================================================[.rst: +HepMCUser +--------- +#]=======================================================================] + +gaudi_add_header_only_library(HepMCUserLib) + +gaudi_add_library(HepMCUtilsLib + SOURCES + src/Lib/CompareGenEvent.cpp + src/Lib/PrintDecayTree.cpp + src/Lib/Relatives.cpp + LINK + PUBLIC + HepMC3::HepMC3 + HepMC3::HepMC3search + Gaudi::GaudiAlgLib + LHCb::PartPropLib # TODO: [LHCb DEPENDENCY] + Gaussino::Defaults + Gaussino::HepMCUserLib +) gaudi_add_executable(compareHepMCEvents - exec/*.cpp - LINK_LIBRARIES HepMCUtils) + SOURCES + exec/compare.cpp + LINK + HepMCUtilsLib +) diff --git a/HepMCUser/HepMCUser/ParticleAttribute.h b/HepMCUser/include/HepMCUser/ParticleAttribute.h similarity index 95% rename from HepMCUser/HepMCUser/ParticleAttribute.h rename to HepMCUser/include/HepMCUser/ParticleAttribute.h index c10582f8..72a84aa7 100644 --- a/HepMCUser/HepMCUser/ParticleAttribute.h +++ b/HepMCUser/include/HepMCUser/ParticleAttribute.h @@ -20,8 +20,7 @@ namespace HepMC3 ParticleAttribute() : Attribute(), m_val( nullptr ) {} ParticleAttribute( GenParticlePtr val ) : Attribute(), m_val( val ) {} - bool from_string( const string& att ) - { + bool from_string( const string& att ) override { #ifdef HEPMC_HAS_CXX11 index = std::stoi( att ); #else @@ -30,8 +29,7 @@ namespace HepMC3 return true; } - bool to_string( string& att ) const - { + bool to_string( string& att ) const override { att = std::to_string( m_val->id() ); return true; } diff --git a/HepMCUser/HepMCUser/Status.h b/HepMCUser/include/HepMCUser/Status.h similarity index 100% rename from HepMCUser/HepMCUser/Status.h rename to HepMCUser/include/HepMCUser/Status.h diff --git a/HepMCUser/HepMCUser/TemplateAttribute.h b/HepMCUser/include/HepMCUser/TemplateAttribute.h similarity index 100% rename from HepMCUser/HepMCUser/TemplateAttribute.h rename to HepMCUser/include/HepMCUser/TemplateAttribute.h diff --git a/HepMCUser/HepMCUser/VertexAttribute.h b/HepMCUser/include/HepMCUser/VertexAttribute.h similarity index 100% rename from HepMCUser/HepMCUser/VertexAttribute.h rename to HepMCUser/include/HepMCUser/VertexAttribute.h diff --git a/HepMCUser/HepMCUser/typedefs.h b/HepMCUser/include/HepMCUser/typedefs.h similarity index 100% rename from HepMCUser/HepMCUser/typedefs.h rename to HepMCUser/include/HepMCUser/typedefs.h diff --git a/HepMCUser/HepMCUtils/CompareGenEvent.h b/HepMCUser/include/HepMCUtils/CompareGenEvent.h similarity index 100% rename from HepMCUser/HepMCUtils/CompareGenEvent.h rename to HepMCUser/include/HepMCUtils/CompareGenEvent.h diff --git a/HepMCUser/HepMCUtils/HepMCUtils.h b/HepMCUser/include/HepMCUtils/HepMCUtils.h similarity index 100% rename from HepMCUser/HepMCUtils/HepMCUtils.h rename to HepMCUser/include/HepMCUtils/HepMCUtils.h diff --git a/HepMCUser/HepMCUtils/PrintDecayTree.h b/HepMCUser/include/HepMCUtils/PrintDecayTree.h similarity index 100% rename from HepMCUser/HepMCUtils/PrintDecayTree.h rename to HepMCUser/include/HepMCUtils/PrintDecayTree.h diff --git a/HepMCUser/HepMCUtils/Relatives.h b/HepMCUser/include/HepMCUtils/Relatives.h similarity index 100% rename from HepMCUser/HepMCUtils/Relatives.h rename to HepMCUser/include/HepMCUtils/Relatives.h diff --git a/HepMCUser/src/utils/CompareGenEvent.cpp b/HepMCUser/src/Lib/CompareGenEvent.cpp similarity index 100% rename from HepMCUser/src/utils/CompareGenEvent.cpp rename to HepMCUser/src/Lib/CompareGenEvent.cpp diff --git a/HepMCUser/src/utils/PrintDecayTree.cpp b/HepMCUser/src/Lib/PrintDecayTree.cpp similarity index 100% rename from HepMCUser/src/utils/PrintDecayTree.cpp rename to HepMCUser/src/Lib/PrintDecayTree.cpp diff --git a/HepMCUser/src/utils/Relatives.cpp b/HepMCUser/src/Lib/Relatives.cpp similarity index 100% rename from HepMCUser/src/utils/Relatives.cpp rename to HepMCUser/src/Lib/Relatives.cpp diff --git a/Moni/GaussMonitor/CMakeLists.txt b/Moni/GaussMonitor/CMakeLists.txt index 7acba270..eb56aa88 100644 --- a/Moni/GaussMonitor/CMakeLists.txt +++ b/Moni/GaussMonitor/CMakeLists.txt @@ -8,24 +8,20 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: GaussMonitor -################################################################################ -gaudi_subdir(GaussMonitor v8r2) - -gaudi_depends_on_subdirs(Event/GenEvent - Event/MCEvent - GaudiAlg - Defaults - HepMC3 - HepMCUser - Kernel/PartProp) - -AddHepMC3() +#[=======================================================================[.rst: +Moni/GaussMonitor +----------------- +#]=======================================================================] gaudi_add_module(GaussMonitor - src/*.cpp - INCLUDE_DIRS AIDA ${HEPMC3_INCLUDE_DIR} HepMCUser - LINK_LIBRARIES GaudiAlgLib GenEvent PartPropLib ${HEPMC3_LIBRARIES} MCEvent) - -add_dependencies(GaussMonitor HepMC3Ext) + SOURCES + src/Components/GaussGenUtil.cpp + src/Components/GenMonitorAlg.cpp + src/Components/MCTruthMonitor.cpp + LINK + HepMC3::HepMC3 + LHCb::MCEvent # TODO: [LHCb DEPENDENCY] + LHCb::PartPropLib # TODO: [LHCb DEPENDENCY] + Gaussino::Defaults + Gaussino::HepMCUserLib +) diff --git a/Moni/GaussMonitor/src/GaussGenUtil.cpp b/Moni/GaussMonitor/src/Components/GaussGenUtil.cpp similarity index 100% rename from Moni/GaussMonitor/src/GaussGenUtil.cpp rename to Moni/GaussMonitor/src/Components/GaussGenUtil.cpp diff --git a/Moni/GaussMonitor/src/GaussGenUtil.h b/Moni/GaussMonitor/src/Components/GaussGenUtil.h similarity index 100% rename from Moni/GaussMonitor/src/GaussGenUtil.h rename to Moni/GaussMonitor/src/Components/GaussGenUtil.h diff --git a/Moni/GaussMonitor/src/GenMonitorAlg.cpp b/Moni/GaussMonitor/src/Components/GenMonitorAlg.cpp similarity index 100% rename from Moni/GaussMonitor/src/GenMonitorAlg.cpp rename to Moni/GaussMonitor/src/Components/GenMonitorAlg.cpp diff --git a/Moni/GaussMonitor/src/GenMonitorAlg.h b/Moni/GaussMonitor/src/Components/GenMonitorAlg.h similarity index 100% rename from Moni/GaussMonitor/src/GenMonitorAlg.h rename to Moni/GaussMonitor/src/Components/GenMonitorAlg.h diff --git a/Moni/GaussMonitor/src/MCTruthMonitor.cpp b/Moni/GaussMonitor/src/Components/MCTruthMonitor.cpp similarity index 100% rename from Moni/GaussMonitor/src/MCTruthMonitor.cpp rename to Moni/GaussMonitor/src/Components/MCTruthMonitor.cpp diff --git a/Moni/GaussMonitor/src/MCTruthMonitor.h b/Moni/GaussMonitor/src/Components/MCTruthMonitor.h similarity index 100% rename from Moni/GaussMonitor/src/MCTruthMonitor.h rename to Moni/GaussMonitor/src/Components/MCTruthMonitor.h diff --git a/NewRnd/CMakeLists.txt b/NewRnd/CMakeLists.txt index 89c6a45f..d5c3e09c 100644 --- a/NewRnd/CMakeLists.txt +++ b/NewRnd/CMakeLists.txt @@ -8,40 +8,36 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: NewRnd -################################################################################ -gaudi_subdir(NewRnd v1r0) -gaudi_depends_on_subdirs(GaudiAlg) - -gaudi_depends_on_subdirs(Utils) - -find_package(CLHEP) -find_package(ROOT) - -# Decide whether to link against CLHEP: -set( clhep_lib ) -if( CLHEP_FOUND ) - set( clhep_lib CLHEP ) -endif() - -if( CLHEP_FOUND ) - include_directories( SYSTEM ${CLHEP_INCLUDE_DIRS} ) -endif() - - -gaudi_add_library(NewRnd - src/*.cpp - PUBLIC_HEADERS NewRnd - INCLUDE_DIRS ${clhep_lib} ROOT Utils - LINK_LIBRARIES GaudiAlgLib ${clhep_lib} ROOT GaudiKernel) +#[=======================================================================[.rst: +NewRnd +------ +#]=======================================================================] + +gaudi_add_library(NewRndLib + SOURCES + src/Lib/RndAlgSeeder.cpp + src/Lib/RndCommon.cpp + src/Lib/RndGlobal.cpp + LINK + PUBLIC + CLHEP::Random + Gaudi::GaudiKernel + Gaudi::GaudiAlgLib + Gaussino::UtilsLib +) gaudi_add_module(NewRndComponents - src/components/*.cpp - LINK_LIBRARIES NewRnd) + SOURCES + src/Components/Engines.cpp + LINK + NewRndLib +) gaudi_add_executable(GaussinoTestgRandom - exec/GaussinoTestgRandom.cxx - LINK_LIBRARIES NewRnd) + SOURCES + exec/GaussinoTestgRandom.cxx + LINK + NewRndLib +) -gaudi_add_test(QMTest QMTEST) +gaudi_add_tests(QMTest) diff --git a/NewRnd/NewRnd/RndAlgSeeder.h b/NewRnd/include/NewRnd/RndAlgSeeder.h similarity index 100% rename from NewRnd/NewRnd/RndAlgSeeder.h rename to NewRnd/include/NewRnd/RndAlgSeeder.h diff --git a/NewRnd/NewRnd/RndCommon.h b/NewRnd/include/NewRnd/RndCommon.h similarity index 100% rename from NewRnd/NewRnd/RndCommon.h rename to NewRnd/include/NewRnd/RndCommon.h diff --git a/NewRnd/NewRnd/RndGlobal.h b/NewRnd/include/NewRnd/RndGlobal.h similarity index 100% rename from NewRnd/NewRnd/RndGlobal.h rename to NewRnd/include/NewRnd/RndGlobal.h diff --git a/NewRnd/src/components/Engines.cpp b/NewRnd/src/Components/Engines.cpp similarity index 100% rename from NewRnd/src/components/Engines.cpp rename to NewRnd/src/Components/Engines.cpp diff --git a/NewRnd/src/RndAlgSeeder.cpp b/NewRnd/src/Lib/RndAlgSeeder.cpp similarity index 100% rename from NewRnd/src/RndAlgSeeder.cpp rename to NewRnd/src/Lib/RndAlgSeeder.cpp diff --git a/NewRnd/src/RndCommon.cpp b/NewRnd/src/Lib/RndCommon.cpp similarity index 100% rename from NewRnd/src/RndCommon.cpp rename to NewRnd/src/Lib/RndCommon.cpp diff --git a/NewRnd/src/RndGlobal.cpp b/NewRnd/src/Lib/RndGlobal.cpp similarity index 100% rename from NewRnd/src/RndGlobal.cpp rename to NewRnd/src/Lib/RndGlobal.cpp diff --git a/Sim/ExternalDetector/CMakeLists.txt b/Sim/ExternalDetector/CMakeLists.txt index 1cbfa4d8..3d42eac4 100644 --- a/Sim/ExternalDetector/CMakeLists.txt +++ b/Sim/ExternalDetector/CMakeLists.txt @@ -8,31 +8,37 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: ExternalDetector -################################################################################ -gaudi_subdir(ExternalDetector v1r0) - -gaudi_depends_on_subdirs(GaudiAlg - Sim/GiGaMTCore - Sim/GiGaMTFactories) - - -AddHepMC3() -find_package(Boost) -find_package(CLHEP) - -include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${Geant4_INCLUDE_DIRS}) +#[=======================================================================[.rst: +Sim/ExternalDetector +-------------------- +Author: Michał Mazurek +#]=======================================================================] gaudi_add_library(ExternalDetectorLib - src/Lib/*.cpp - PUBLIC_HEADERS ExternalDetector - INCLUDE_DIRS GiGaMTFactories XercesC ${HEPMC3_INCLUDE_DIR} - LINK_LIBRARIES GaudiAlgLib GiGaMTCoreRunLib XercesC ${HEPMC3_LIBRARIES} ${GEANT4_LIBS}) + SOURCES + src/Lib/Embedder.cpp + src/Lib/MaterialFactory.cpp + LINK + PUBLIC + Gaudi::GaudiAlgLib + XercesC::XercesC + Geant4::G4digits_hits + Geant4::G4geometry + Gaussino::GiGaMTFactoriesLib + Gaussino::GiGaMTCoreDetLib +) gaudi_add_module(ExternalDetector - src/Components/*.cpp - LINK_LIBRARIES ExternalDetectorLib) + SOURCES + src/Components/CuboidEmbedder.cpp + src/Components/MaterialFromChemicalPropertiesFactory.cpp + src/Components/MaterialFromElements.cpp + src/Components/WorldCreator.cpp + LINK + Gaussino::ExternalDetectorLib + Gaussino::GiGaMTGeoLib +) -gaudi_install_python_modules() -gaudi_add_test(QMTest QMTEST) +gaudi_install(PYTHON) +gaudi_generate_confuserdb() +gaudi_add_tests(QMTest) diff --git a/Sim/ExternalDetector/ExternalDetector/Embedder.h b/Sim/ExternalDetector/include/ExternalDetector/Embedder.h similarity index 100% rename from Sim/ExternalDetector/ExternalDetector/Embedder.h rename to Sim/ExternalDetector/include/ExternalDetector/Embedder.h diff --git a/Sim/ExternalDetector/ExternalDetector/MaterialFactory.h b/Sim/ExternalDetector/include/ExternalDetector/MaterialFactory.h similarity index 100% rename from Sim/ExternalDetector/ExternalDetector/MaterialFactory.h rename to Sim/ExternalDetector/include/ExternalDetector/MaterialFactory.h diff --git a/Sim/Gaussino/CMakeLists.txt b/Sim/Gaussino/CMakeLists.txt index 55e68e50..4efc63fd 100644 --- a/Sim/Gaussino/CMakeLists.txt +++ b/Sim/Gaussino/CMakeLists.txt @@ -8,9 +8,10 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -gaudi_subdir(Gaussino v1r0) - -gaudi_depends_on_subdirs(Kernel/PartProp) - -gaudi_install_python_modules() -gaudi_add_test(QMTest QMTEST) +#[=======================================================================[.rst: +Sim/Gaussino +------------ +#]=======================================================================] +gaudi_install(PYTHON) +gaudi_generate_confuserdb() +gaudi_add_tests(QMTest) diff --git a/Sim/Gaussino/tests/scripts/pgun_reproducibility.sh b/Sim/Gaussino/tests/scripts/pgun_reproducibility.sh index b73bd19e..41157018 100755 --- a/Sim/Gaussino/tests/scripts/pgun_reproducibility.sh +++ b/Sim/Gaussino/tests/scripts/pgun_reproducibility.sh @@ -12,4 +12,4 @@ gaudirun.py $GAUSSINOROOT/tests/options/pgun_reproducibility_A.py gaudirun.py $GAUSSINOROOT/tests/options/pgun_reproducibility_B.py -compareHepMCEvents.exe FirstRun-HepMC.txt SecondRun-HepMC.txt +compareHepMCEvents FirstRun-HepMC.txt SecondRun-HepMC.txt diff --git a/Sim/GiGaMT/CMakeLists.txt b/Sim/GiGaMT/CMakeLists.txt index 04fa8ffb..2c141617 100644 --- a/Sim/GiGaMT/CMakeLists.txt +++ b/Sim/GiGaMT/CMakeLists.txt @@ -8,37 +8,36 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: GiGaMT -# This contains the fundamental GiGaMT service that sets up the entire mess in -# its initialization and provides the function to call that handles the simulation. -# Also there is the main simulation algorithm that actually uses the service -################################################################################# -gaudi_subdir(GiGaMT v1r0) +#[=======================================================================[.rst: +Sim/GiGaMT +---------- -gaudi_depends_on_subdirs(GaudiAlg - HepMCUser - NewRnd - Sim/SimInterfaces - Sim/GiGaMTFactories - Sim/GiGaMTTruth - Sim/GiGaMTCore) - -AddHepMC3() -find_package(ROOT COMPONENTS MathCore GenVector) - -if(${Geant4_config_version} VERSION_LESS "10.06") - add_definitions(-DG4MULTITHREADED) - add_definitions(-DG4USE_STD11) -endif() +This contains the fundamental GiGaMT service that sets up the entire mess in +its initialization and provides the function to call that handles the simulation. +Also there is the main simulation algorithm that actually uses the service +#]=======================================================================] gaudi_add_library(GiGaMTLib - src/Lib/*.cpp - PUBLIC_HEADERS GiGaMT - INCLUDE_DIRS HepMC GiGaMTFactories SimInterfaces HepMCUser GiGaMTTruth ${HEPMC3_INCLUDE_DIR} - LINK_LIBRARIES GaudiAlgLib GiGaMTCoreRunLib ${HEPMC3_LIBRARIES} NewRnd ) -add_dependencies(GiGaMTLib HepMC3Ext) + SOURCES + src/Lib/GiGaException.cpp + src/Lib/GiGaUtil.cpp + LINK + PUBLIC + Gaussino::GiGaMTFactoriesLib + Gaussino::HepMCUserLib + Gaussino::SimInterfacesLib +) gaudi_add_module(GiGaMT - src/components/*.cpp - LINK_LIBRARIES GiGaMTLib ROOT) + SOURCES + src/Components/GiGaActionInitializer.cpp + src/Components/GiGaAlg.cpp + src/Components/GiGaMT.cpp + src/Components/GiGaMTISetUpSvc.cpp + src/Components/HepMC3ToMCTruthConverter.cpp + src/Components/SkipSimAlg.cpp + LINK + Gaussino::GiGaMTCoreRunLib + Gaussino::GiGaMTTruthLib + Gaussino::GiGaMTLib +) diff --git a/Sim/GiGaMT/GiGaMT/GiGaActionInitializer.h b/Sim/GiGaMT/include/GiGaMT/GiGaActionInitializer.h similarity index 100% rename from Sim/GiGaMT/GiGaMT/GiGaActionInitializer.h rename to Sim/GiGaMT/include/GiGaMT/GiGaActionInitializer.h diff --git a/Sim/GiGaMT/GiGaMT/GiGaException.h b/Sim/GiGaMT/include/GiGaMT/GiGaException.h similarity index 100% rename from Sim/GiGaMT/GiGaMT/GiGaException.h rename to Sim/GiGaMT/include/GiGaMT/GiGaException.h diff --git a/Sim/GiGaMT/GiGaMT/GiGaUtil.h b/Sim/GiGaMT/include/GiGaMT/GiGaUtil.h similarity index 100% rename from Sim/GiGaMT/GiGaMT/GiGaUtil.h rename to Sim/GiGaMT/include/GiGaMT/GiGaUtil.h diff --git a/Sim/GiGaMT/GiGaMT/IGiGaMTSetUpSvc.h b/Sim/GiGaMT/include/GiGaMT/IGiGaMTSetUpSvc.h similarity index 94% rename from Sim/GiGaMT/GiGaMT/IGiGaMTSetUpSvc.h rename to Sim/GiGaMT/include/GiGaMT/IGiGaMTSetUpSvc.h index fee9ab0d..e8ca5002 100755 --- a/Sim/GiGaMT/GiGaMT/IGiGaMTSetUpSvc.h +++ b/Sim/GiGaMT/include/GiGaMT/IGiGaMTSetUpSvc.h @@ -41,12 +41,12 @@ public: /** initialize method * @return status code */ - virtual StatusCode initialize() = 0; + virtual StatusCode initialize() override = 0; /** finalize method * @return status code */ - virtual StatusCode finalize() = 0; + virtual StatusCode finalize() override = 0; public: diff --git a/Sim/GiGaMT/GiGaMT/IGiGaMTSvc.h b/Sim/GiGaMT/include/GiGaMT/IGiGaMTSvc.h similarity index 94% rename from Sim/GiGaMT/GiGaMT/IGiGaMTSvc.h rename to Sim/GiGaMT/include/GiGaMT/IGiGaMTSvc.h index 420b8cf8..8e0c7f40 100755 --- a/Sim/GiGaMT/GiGaMT/IGiGaMTSvc.h +++ b/Sim/GiGaMT/include/GiGaMT/IGiGaMTSvc.h @@ -16,7 +16,7 @@ #include "GaudiKernel/StatusCode.h" #include "GiGaMTCoreRun/G4EventProxy.h" #include "NewRnd/RndCommon.h" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include "HepMCUser/typedefs.h" @@ -51,12 +51,12 @@ public: /** initialize * @return status code */ - virtual StatusCode initialize() = 0; + virtual StatusCode initialize() override = 0; /** initialize * @return status code */ - virtual StatusCode finalize() = 0; + virtual StatusCode finalize() override = 0; /** initialize * TODO: Simulate HepMC events. Currently does not return anything, diff --git a/Sim/GiGaMT/src/components/GiGaActionInitializer.cpp b/Sim/GiGaMT/src/Components/GiGaActionInitializer.cpp similarity index 100% rename from Sim/GiGaMT/src/components/GiGaActionInitializer.cpp rename to Sim/GiGaMT/src/Components/GiGaActionInitializer.cpp diff --git a/Sim/GiGaMT/src/components/GiGaAlg.cpp b/Sim/GiGaMT/src/Components/GiGaAlg.cpp similarity index 100% rename from Sim/GiGaMT/src/components/GiGaAlg.cpp rename to Sim/GiGaMT/src/Components/GiGaAlg.cpp diff --git a/Sim/GiGaMT/src/components/GiGaAlg.h b/Sim/GiGaMT/src/Components/GiGaAlg.h similarity index 100% rename from Sim/GiGaMT/src/components/GiGaAlg.h rename to Sim/GiGaMT/src/Components/GiGaAlg.h diff --git a/Sim/GiGaMT/src/components/GiGaMT.cpp b/Sim/GiGaMT/src/Components/GiGaMT.cpp similarity index 100% rename from Sim/GiGaMT/src/components/GiGaMT.cpp rename to Sim/GiGaMT/src/Components/GiGaMT.cpp diff --git a/Sim/GiGaMT/src/components/GiGaMT.h b/Sim/GiGaMT/src/Components/GiGaMT.h similarity index 100% rename from Sim/GiGaMT/src/components/GiGaMT.h rename to Sim/GiGaMT/src/Components/GiGaMT.h diff --git a/Sim/GiGaMT/src/components/GiGaMTISetUpSvc.cpp b/Sim/GiGaMT/src/Components/GiGaMTISetUpSvc.cpp similarity index 100% rename from Sim/GiGaMT/src/components/GiGaMTISetUpSvc.cpp rename to Sim/GiGaMT/src/Components/GiGaMTISetUpSvc.cpp diff --git a/Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.cpp b/Sim/GiGaMT/src/Components/HepMC3ToMCTruthConverter.cpp similarity index 100% rename from Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.cpp rename to Sim/GiGaMT/src/Components/HepMC3ToMCTruthConverter.cpp diff --git a/Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.h b/Sim/GiGaMT/src/Components/HepMC3ToMCTruthConverter.h similarity index 100% rename from Sim/GiGaMT/src/components/HepMC3ToMCTruthConverter.h rename to Sim/GiGaMT/src/Components/HepMC3ToMCTruthConverter.h diff --git a/Sim/GiGaMT/src/components/SkipSimAlg.cpp b/Sim/GiGaMT/src/Components/SkipSimAlg.cpp similarity index 97% rename from Sim/GiGaMT/src/components/SkipSimAlg.cpp rename to Sim/GiGaMT/src/Components/SkipSimAlg.cpp index 8589681a..785836bf 100755 --- a/Sim/GiGaMT/src/components/SkipSimAlg.cpp +++ b/Sim/GiGaMT/src/Components/SkipSimAlg.cpp @@ -10,7 +10,7 @@ \*****************************************************************************/ // local #include "SkipSimAlg.h" -#include "GiGaMTCoreTruth/GaussinoEventInformation.h" +#include "GiGaMTCoreRun/GaussinoEventInformation.h" #include "GiGaMTTruth/IHepMC3ToMCTruthConverter.h" #include "Kernel/IParticlePropertySvc.h" #include "Kernel/ParticleProperty.h" diff --git a/Sim/GiGaMT/src/components/SkipSimAlg.h b/Sim/GiGaMT/src/Components/SkipSimAlg.h similarity index 100% rename from Sim/GiGaMT/src/components/SkipSimAlg.h rename to Sim/GiGaMT/src/Components/SkipSimAlg.h diff --git a/Sim/GiGaMTCore/CMakeLists.txt b/Sim/GiGaMTCore/CMakeLists.txt index 8a3310ff..97c6be3c 100644 --- a/Sim/GiGaMTCore/CMakeLists.txt +++ b/Sim/GiGaMTCore/CMakeLists.txt @@ -15,54 +15,81 @@ # run managers). While the Gaudi cmake plugins are used to handle this package, # none of the modified classes should depend on anything Gaudi related. ################################################################################# -gaudi_subdir(GiGaMTCore v1r0) -gaudi_depends_on_subdirs(NewRnd - Event/MCEvent # FIXME: Don't like this - HepMC3 - HepMCUser) - -find_package(CLHEP COMPONENTS Random Vector) -find_package(XercesC) -AddHepMC3() -find_package(ROOT COMPONENTS MathCore GenVector) - -FindG4libs(digits_hits event geometry global graphics_reps materials persistency - particles processes run tracking track intercoms physicslists) - -if(${Geant4_config_version} VERSION_LESS "10.06") - add_definitions(-DG4MULTITHREADED) - add_definitions(-DG4USE_STD11) -endif() +#[=======================================================================[.rst: +Sim/GiGaMTCore +-------------- +#]=======================================================================] +gaudi_add_header_only_library(GiGaMTCoreUtilsLib) +gaudi_add_header_only_library(GiGaMTCoreDetLib) gaudi_add_library(GiGaMTCoreMessageLib - src/message/*.cpp - PUBLIC_HEADERS GiGaMTCoreMessage) - -gaudi_add_library(GiGaMTCoreTruthLib - src/truth/*.cpp - PUBLIC_HEADERS GiGaMTCoreTruth - INCLUDE_DIRS ${HEPMC3_INCLUDE_DIR} CLHEP Geant4 XercesC NewRnd HepMCUtils - LINK_LIBRARIES ${HEPMC3_LIBRARIES} CLHEP ${GEANT4_LIBS} XercesC ${ROOT_LIBRARIES} HepMCUtils MCEvent GiGaMTCoreMessageLib) + SOURCES + src/Lib/GiGaMessage.cpp +) -add_dependencies(GiGaMTCoreTruthLib HepMC3Ext) - -gaudi_add_unit_test(test_zMaxTilt tests/src/test_zMaxTilt.cpp - LINK_LIBRARIES GaudiKernel GiGaMTCoreTruthLib - TYPE Boost) +gaudi_add_library(GiGaMTCoreCutLib + SOURCES + src/Lib/GaussinoG4UserLimits.cpp + LINK + PUBLIC + CLHEP::Vector + CLHEP::Random + Geant4::G4global + Gaussino::GiGaMTCoreMessageLib +) gaudi_add_library(GiGaMTCoreRunLib - src/run/*.cpp - PUBLIC_HEADERS GiGaMTCoreRun - INCLUDE_DIRS ${HEPMC3_INCLUDE_DIR} CLHEP Geant4 XercesC NewRnd - LINK_LIBRARIES ${HEPMC3_LIBRARIES} CLHEP ${GEANT4_LIBS} XercesC GiGaMTCoreTruthLib GiGaMTCoreMessageLib) - -gaudi_add_library(GiGaMTCoreCutLib - src/cut/*.cpp - PUBLIC_HEADERS GiGaMTCoreCut - INCLUDE_DIRS CLHEP Geant4 - LINK_LIBRARIES CLHEP ${GEANT4_LIBS} GiGaMTCoreMessageLib) + SOURCES + src/Lib/Common.cpp + src/Lib/ConverterInfo.cpp + src/Lib/G4EventProxy.cpp + src/Lib/G4EventProxyAttribute.cpp + src/Lib/GaussinoEventInformation.cpp + src/Lib/GaussinoPrimaryParticleInformation.cpp + src/Lib/GaussinoTrackInformation.cpp + src/Lib/GiGaMTRunManager.cpp + src/Lib/GiGaRunActionCommand.cpp + src/Lib/GiGaWorkerPayload.cpp + src/Lib/GiGaWorkerPilot.cpp + src/Lib/GiGaWorkerRunManager.cpp + src/Lib/Helpers.cpp + src/Lib/LinkedParticle.cpp + src/Lib/LinkedParticleHelpers.cpp + src/Lib/MCTruthAttribute.cpp + src/Lib/MCTruthConverter.cpp + src/Lib/SimResultsAttribute.cpp + src/Lib/TruthFlaggingTrackAction.cpp + src/Lib/TruthStoringTrackAction.cpp + src/Lib/ZMaxPlane.cpp + LINK + PUBLIC + HepMC3::HepMC3 + HepMC3::HepMC3search + Geant4::G4event + Geant4::G4geometry + Geant4::G4global + Geant4::G4intercoms + Geant4::G4particles + Geant4::G4processes + Geant4::G4run + Geant4::G4track + Geant4::G4tracking + LHCb::MCEvent # TODO: [LHCb DEPENDENCY] + Gaussino::HepMCUtilsLib + Gaussino::NewRndLib + Gaussino::GiGaMTCoreUtilsLib + Gaussino::GiGaMTCoreMessageLib + Gaussino::GiGaMTCoreDetLib +) -gaudi_install_headers(GiGaMTCoreDet) +gaudi_add_tests(QMTest) -gaudi_add_test(QMTest QMTEST) +gaudi_add_executable(test_zMaxTilt + SOURCES tests/test_zMaxTilt.cpp + LINK + Boost::unit_test_framework + Gaudi::GaudiKernel + Gaussino::GiGaMTCoreRunLib + TEST +) diff --git a/Sim/GiGaMTCore/GiGaMTCoreCut/GaussinoG4UserLimits.h b/Sim/GiGaMTCore/include/GiGaMTCoreCut/GaussinoG4UserLimits.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreCut/GaussinoG4UserLimits.h rename to Sim/GiGaMTCore/include/GiGaMTCoreCut/GaussinoG4UserLimits.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreDet/GaussHitBase.h b/Sim/GiGaMTCore/include/GiGaMTCoreDet/GaussHitBase.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreDet/GaussHitBase.h rename to Sim/GiGaMTCore/include/GiGaMTCoreDet/GaussHitBase.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreDet/GdmlDetectorConstruction.h b/Sim/GiGaMTCore/include/GiGaMTCoreDet/GdmlDetectorConstruction.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreDet/GdmlDetectorConstruction.h rename to Sim/GiGaMTCore/include/GiGaMTCoreDet/GdmlDetectorConstruction.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreDet/GiGaMTDetectorConstruction.h b/Sim/GiGaMTCore/include/GiGaMTCoreDet/GiGaMTDetectorConstruction.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreDet/GiGaMTDetectorConstruction.h rename to Sim/GiGaMTCore/include/GiGaMTCoreDet/GiGaMTDetectorConstruction.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreDet/IExternalDetectorEmbedder.h b/Sim/GiGaMTCore/include/GiGaMTCoreDet/IExternalDetectorEmbedder.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreDet/IExternalDetectorEmbedder.h rename to Sim/GiGaMTCore/include/GiGaMTCoreDet/IExternalDetectorEmbedder.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreMessage/IGiGaMessage.h b/Sim/GiGaMTCore/include/GiGaMTCoreMessage/IGiGaMessage.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreMessage/IGiGaMessage.h rename to Sim/GiGaMTCore/include/GiGaMTCoreMessage/IGiGaMessage.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/Common.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/Common.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/Common.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/Common.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/DetTrackInfo.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/DetTrackInfo.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/DetTrackInfo.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/DetTrackInfo.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/G4EventProxy.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/G4EventProxy.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreRun/G4EventProxy.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/G4EventProxy.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/G4EventProxyAttribute.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/G4EventProxyAttribute.h similarity index 97% rename from Sim/GiGaMTCore/GiGaMTCoreRun/G4EventProxyAttribute.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/G4EventProxyAttribute.h index e5dd41d8..c2b01d31 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreRun/G4EventProxyAttribute.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/G4EventProxyAttribute.h @@ -9,7 +9,7 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ #include "HepMC3/Attribute.h" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include <string> namespace HepMC3 diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/G4TruthParticle.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/G4TruthParticle.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/G4TruthParticle.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/G4TruthParticle.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoEventInformation.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GaussinoEventInformation.h similarity index 98% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoEventInformation.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/GaussinoEventInformation.h index 6245833d..3ebbea1c 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoEventInformation.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GaussinoEventInformation.h @@ -17,7 +17,7 @@ /// Geant4 #include "G4EventManager.hh" #include "G4VUserEventInformation.hh" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" /** @class GaussinoTrackInformation GaussinoTrackInformation.h * diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GaussinoPrimaryParticleInformation.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/GaussinoPrimaryParticleInformation.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoTrackInformation.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GaussinoTrackInformation.h similarity index 99% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoTrackInformation.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/GaussinoTrackInformation.h index 9b6eca91..1b828899 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/GaussinoTrackInformation.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GaussinoTrackInformation.h @@ -20,7 +20,7 @@ #include "G4VUserTrackInformation.hh" /// GaussTools #include "GiGaMTCoreDet/GaussHitBase.h" -#include "GiGaMTCoreTruth/DetTrackInfo.h" +#include "GiGaMTCoreRun/DetTrackInfo.h" /** @class GaussinoTrackInformation GaussinoTrackInformation.h * diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaMTRunManager.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaMTRunManager.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreRun/GiGaMTRunManager.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaMTRunManager.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaRunActionCommand.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaRunActionCommand.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreRun/GiGaRunActionCommand.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaRunActionCommand.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerPayload.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaWorkerPayload.h similarity index 97% rename from Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerPayload.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaWorkerPayload.h index 87bdc9e5..b8085084 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerPayload.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaWorkerPayload.h @@ -11,7 +11,7 @@ #pragma once #include "GiGaMTCoreRun/G4EventProxy.h" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include "Utils/blockingconcurrentqueue.h" #include <future> #include <vector> diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerPilot.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaWorkerPilot.h similarity index 98% rename from Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerPilot.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaWorkerPilot.h index f8d7e033..7a3c1531 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerPilot.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaWorkerPilot.h @@ -15,7 +15,7 @@ #include "GiGaMTCoreUtils/GiGaMTUtils.h" #include "GiGaMTCoreRun/GiGaWorkerPayload.h" #include "GiGaMTCoreMessage/IGiGaMessage.h" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include "G4Event.hh" #include "HepMC3/GenEvent.h" diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerRunManager.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaWorkerRunManager.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreRun/GiGaWorkerRunManager.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/GiGaWorkerRunManager.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/LinkedParticle.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/LinkedParticle.h similarity index 98% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/LinkedParticle.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/LinkedParticle.h index 8d9b3828..51e44844 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/LinkedParticle.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/LinkedParticle.h @@ -12,8 +12,8 @@ #include <set> #include "G4PrimaryParticle.hh" -#include "GiGaMTCoreTruth/Common.h" -#include "GiGaMTCoreTruth/G4TruthParticle.h" +#include "GiGaMTCoreRun/Common.h" +#include "GiGaMTCoreRun/G4TruthParticle.h" #include "HepMC3/FourVector.h" #include "HepMC3/GenParticle.h" #include "HepMC3/GenVertex.h" diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/LinkedParticleHelpers.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/LinkedParticleHelpers.h similarity index 96% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/LinkedParticleHelpers.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/LinkedParticleHelpers.h index a8947eec..9233439d 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/LinkedParticleHelpers.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/LinkedParticleHelpers.h @@ -10,7 +10,7 @@ \*****************************************************************************/ #pragma once -#include "GiGaMTCoreTruth/LinkedParticle.h" +#include "GiGaMTCoreRun/LinkedParticle.h" namespace Gaussino::LPUtils { bool ShouldHaveButWasNotSimulated( const LinkedParticle* lp ); diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/MCTruthAttribute.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/MCTruthAttribute.h similarity index 89% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/MCTruthAttribute.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/MCTruthAttribute.h index e5dd41d8..675caa0a 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/MCTruthAttribute.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/MCTruthAttribute.h @@ -9,7 +9,7 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ #include "HepMC3/Attribute.h" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include <string> namespace HepMC3 @@ -20,9 +20,9 @@ namespace HepMC3 MCTruthAttribute() : Attribute(), m_val( nullptr ) {} MCTruthAttribute( Gaussino::MCTruthPtr val ) : Attribute(), m_val( val ) {} - bool from_string( const string& ){ return true;}; + bool from_string( const string& ) override { return true; }; - bool to_string( string& ) const { return true;}; + bool to_string( string& ) const override { return true; }; Gaussino::MCTruthPtr value() const { return m_val; } diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/MCTruthConverter.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/MCTruthConverter.h similarity index 99% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/MCTruthConverter.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/MCTruthConverter.h index dd2fe6a5..63722904 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/MCTruthConverter.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/MCTruthConverter.h @@ -20,8 +20,8 @@ #include "HepMCUtils/PrintDecayTree.h" #include "HepMC3/GenEvent.h" -#include "GiGaMTCoreTruth/Common.h" -#include "GiGaMTCoreTruth/LinkedParticle.h" +#include "GiGaMTCoreRun/Common.h" +#include "GiGaMTCoreRun/LinkedParticle.h" #include "G4Event.hh" #include "G4PrimaryParticle.hh" diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/SimResults.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/SimResults.h similarity index 95% rename from Sim/GiGaMTCore/GiGaMTCoreRun/SimResults.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/SimResults.h index b6ee1851..f427e47c 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreRun/SimResults.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/SimResults.h @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include "GiGaMTCoreRun/G4EventProxy.h" namespace Gaussino { diff --git a/Sim/GiGaMTCore/GiGaMTCoreRun/SimResultsProxyAttribute.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/SimResultsProxyAttribute.h similarity index 92% rename from Sim/GiGaMTCore/GiGaMTCoreRun/SimResultsProxyAttribute.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/SimResultsProxyAttribute.h index ce89de59..6ca2dec6 100644 --- a/Sim/GiGaMTCore/GiGaMTCoreRun/SimResultsProxyAttribute.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/SimResultsProxyAttribute.h @@ -19,9 +19,9 @@ namespace HepMC3 { SimResultsAttribute( Gaussino::GiGaSimReturn val ) : Attribute(), m_val( val ) {} SimResultsAttribute( Gaussino::MCTruthPtr val, G4EventProxyPtr val2 ) : Attribute(), m_val{val2, val} {} - bool from_string( const string& ) { return true; }; + bool from_string( const string& ) override { return true; }; - bool to_string( string& ) const { return true; }; + bool to_string( string& ) const override { return true; }; Gaussino::GiGaSimReturn value() const { return m_val; } diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthFlaggingTrackAction.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/TruthFlaggingTrackAction.h similarity index 99% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/TruthFlaggingTrackAction.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/TruthFlaggingTrackAction.h index 75720077..18418180 100755 --- a/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthFlaggingTrackAction.h +++ b/Sim/GiGaMTCore/include/GiGaMTCoreRun/TruthFlaggingTrackAction.h @@ -17,7 +17,7 @@ #include "CLHEP/Units/SystemOfUnits.h" #include "G4UserTrackingAction.hh" #include "GiGaMTCoreMessage/IGiGaMessage.h" -#include "GiGaMTCoreTruth/ZMaxPlane.h" +#include "GiGaMTCoreRun/ZMaxPlane.h" #include <unordered_set> // forward declarations diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthFlaggingTrackAction.icpp b/Sim/GiGaMTCore/include/GiGaMTCoreRun/TruthFlaggingTrackAction.icpp similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/TruthFlaggingTrackAction.icpp rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/TruthFlaggingTrackAction.icpp diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/TruthStoringTrackAction.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/TruthStoringTrackAction.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/TruthStoringTrackAction.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/TruthStoringTrackAction.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreTruth/ZMaxPlane.h b/Sim/GiGaMTCore/include/GiGaMTCoreRun/ZMaxPlane.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreTruth/ZMaxPlane.h rename to Sim/GiGaMTCore/include/GiGaMTCoreRun/ZMaxPlane.h diff --git a/Sim/GiGaMTCore/GiGaMTCoreUtils/GiGaMTUtils.h b/Sim/GiGaMTCore/include/GiGaMTCoreUtils/GiGaMTUtils.h similarity index 100% rename from Sim/GiGaMTCore/GiGaMTCoreUtils/GiGaMTUtils.h rename to Sim/GiGaMTCore/include/GiGaMTCoreUtils/GiGaMTUtils.h diff --git a/Sim/GiGaMTCore/src/truth/Common.cpp b/Sim/GiGaMTCore/src/Lib/Common.cpp similarity index 97% rename from Sim/GiGaMTCore/src/truth/Common.cpp rename to Sim/GiGaMTCore/src/Lib/Common.cpp index c735d15a..061ed5be 100644 --- a/Sim/GiGaMTCore/src/truth/Common.cpp +++ b/Sim/GiGaMTCore/src/Lib/Common.cpp @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/Common.h" +#include "GiGaMTCoreRun/Common.h" std::ostream& operator<<( std::ostream& out, const Gaussino::ConversionType& type ) { diff --git a/Sim/GiGaMTCore/src/truth/ConverterInfo.cpp b/Sim/GiGaMTCore/src/Lib/ConverterInfo.cpp similarity index 100% rename from Sim/GiGaMTCore/src/truth/ConverterInfo.cpp rename to Sim/GiGaMTCore/src/Lib/ConverterInfo.cpp diff --git a/Sim/GiGaMTCore/src/truth/ConverterInfo.h b/Sim/GiGaMTCore/src/Lib/ConverterInfo.h similarity index 96% rename from Sim/GiGaMTCore/src/truth/ConverterInfo.h rename to Sim/GiGaMTCore/src/Lib/ConverterInfo.h index 6c99f2d1..bbdee09c 100644 --- a/Sim/GiGaMTCore/src/truth/ConverterInfo.h +++ b/Sim/GiGaMTCore/src/Lib/ConverterInfo.h @@ -12,7 +12,7 @@ #include "HepMC3/GenEvent.h" #include "HepMC3/GenParticle.h" -#include "GiGaMTCoreTruth/Common.h" +#include "GiGaMTCoreRun/Common.h" namespace Gaussino { diff --git a/Sim/GiGaMTCore/src/run/G4EventProxy.cpp b/Sim/GiGaMTCore/src/Lib/G4EventProxy.cpp similarity index 100% rename from Sim/GiGaMTCore/src/run/G4EventProxy.cpp rename to Sim/GiGaMTCore/src/Lib/G4EventProxy.cpp diff --git a/Sim/GiGaMTCore/src/run/G4EventProxyAttribute.cpp b/Sim/GiGaMTCore/src/Lib/G4EventProxyAttribute.cpp similarity index 94% rename from Sim/GiGaMTCore/src/run/G4EventProxyAttribute.cpp rename to Sim/GiGaMTCore/src/Lib/G4EventProxyAttribute.cpp index 24932661..c6f5cb02 100644 --- a/Sim/GiGaMTCore/src/run/G4EventProxyAttribute.cpp +++ b/Sim/GiGaMTCore/src/Lib/G4EventProxyAttribute.cpp @@ -8,4 +8,4 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/MCTruthAttribute.h" +#include "GiGaMTCoreRun/MCTruthAttribute.h" diff --git a/Sim/GiGaMTCore/src/truth/GaussinoEventInformation.cpp b/Sim/GiGaMTCore/src/Lib/GaussinoEventInformation.cpp similarity index 93% rename from Sim/GiGaMTCore/src/truth/GaussinoEventInformation.cpp rename to Sim/GiGaMTCore/src/Lib/GaussinoEventInformation.cpp index 6cda1748..a02ef3be 100755 --- a/Sim/GiGaMTCore/src/truth/GaussinoEventInformation.cpp +++ b/Sim/GiGaMTCore/src/Lib/GaussinoEventInformation.cpp @@ -8,4 +8,4 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/GaussinoEventInformation.h" +#include "GiGaMTCoreRun/GaussinoEventInformation.h" diff --git a/Sim/GiGaMTCore/src/cut/GaussinoG4UserLimits.cpp b/Sim/GiGaMTCore/src/Lib/GaussinoG4UserLimits.cpp similarity index 100% rename from Sim/GiGaMTCore/src/cut/GaussinoG4UserLimits.cpp rename to Sim/GiGaMTCore/src/Lib/GaussinoG4UserLimits.cpp diff --git a/Sim/GiGaMTCore/src/truth/GaussinoPrimaryParticleInformation.cpp b/Sim/GiGaMTCore/src/Lib/GaussinoPrimaryParticleInformation.cpp similarity index 93% rename from Sim/GiGaMTCore/src/truth/GaussinoPrimaryParticleInformation.cpp rename to Sim/GiGaMTCore/src/Lib/GaussinoPrimaryParticleInformation.cpp index b809e6ac..4981f11b 100644 --- a/Sim/GiGaMTCore/src/truth/GaussinoPrimaryParticleInformation.cpp +++ b/Sim/GiGaMTCore/src/Lib/GaussinoPrimaryParticleInformation.cpp @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h" +#include "GiGaMTCoreRun/GaussinoPrimaryParticleInformation.h" std::ostream& operator<<( std::ostream& out, const GaussinoPrimaryParticleInformation& lp ) { diff --git a/Sim/GiGaMTCore/src/truth/GaussinoTrackInformation.cpp b/Sim/GiGaMTCore/src/Lib/GaussinoTrackInformation.cpp similarity index 96% rename from Sim/GiGaMTCore/src/truth/GaussinoTrackInformation.cpp rename to Sim/GiGaMTCore/src/Lib/GaussinoTrackInformation.cpp index 7e5d8ab0..9b944147 100755 --- a/Sim/GiGaMTCore/src/truth/GaussinoTrackInformation.cpp +++ b/Sim/GiGaMTCore/src/Lib/GaussinoTrackInformation.cpp @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/GaussinoTrackInformation.h" +#include "GiGaMTCoreRun/GaussinoTrackInformation.h" // ============================================================================ /** @file diff --git a/Sim/GiGaMTCore/src/run/GiGaMTRunManager.cpp b/Sim/GiGaMTCore/src/Lib/GiGaMTRunManager.cpp similarity index 100% rename from Sim/GiGaMTCore/src/run/GiGaMTRunManager.cpp rename to Sim/GiGaMTCore/src/Lib/GiGaMTRunManager.cpp diff --git a/Sim/GiGaMTCore/src/message/GiGaMessage.cpp b/Sim/GiGaMTCore/src/Lib/GiGaMessage.cpp similarity index 100% rename from Sim/GiGaMTCore/src/message/GiGaMessage.cpp rename to Sim/GiGaMTCore/src/Lib/GiGaMessage.cpp diff --git a/Sim/GiGaMTCore/src/run/GiGaRunActionCommand.cpp b/Sim/GiGaMTCore/src/Lib/GiGaRunActionCommand.cpp similarity index 100% rename from Sim/GiGaMTCore/src/run/GiGaRunActionCommand.cpp rename to Sim/GiGaMTCore/src/Lib/GiGaRunActionCommand.cpp diff --git a/Sim/GiGaMTCore/src/run/GiGaWorkerPayload.cpp b/Sim/GiGaMTCore/src/Lib/GiGaWorkerPayload.cpp similarity index 100% rename from Sim/GiGaMTCore/src/run/GiGaWorkerPayload.cpp rename to Sim/GiGaMTCore/src/Lib/GiGaWorkerPayload.cpp diff --git a/Sim/GiGaMTCore/src/run/GiGaWorkerPilot.cpp b/Sim/GiGaMTCore/src/Lib/GiGaWorkerPilot.cpp similarity index 99% rename from Sim/GiGaMTCore/src/run/GiGaWorkerPilot.cpp rename to Sim/GiGaMTCore/src/Lib/GiGaWorkerPilot.cpp index 012a9cb4..e6f5930c 100644 --- a/Sim/GiGaMTCore/src/run/GiGaWorkerPilot.cpp +++ b/Sim/GiGaMTCore/src/Lib/GiGaWorkerPilot.cpp @@ -13,7 +13,7 @@ #include "GiGaMTCoreRun/GiGaWorkerRunManager.h" #include "GaudiKernel/GaudiException.h" -#include "GiGaMTCoreTruth/GaussinoEventInformation.h" +#include "GiGaMTCoreRun/GaussinoEventInformation.h" #include <string> diff --git a/Sim/GiGaMTCore/src/run/GiGaWorkerRunManager.cpp b/Sim/GiGaMTCore/src/Lib/GiGaWorkerRunManager.cpp similarity index 100% rename from Sim/GiGaMTCore/src/run/GiGaWorkerRunManager.cpp rename to Sim/GiGaMTCore/src/Lib/GiGaWorkerRunManager.cpp diff --git a/Sim/GiGaMTCore/src/truth/Helpers.cpp b/Sim/GiGaMTCore/src/Lib/Helpers.cpp similarity index 96% rename from Sim/GiGaMTCore/src/truth/Helpers.cpp rename to Sim/GiGaMTCore/src/Lib/Helpers.cpp index b52843c6..f3662dfc 100644 --- a/Sim/GiGaMTCore/src/truth/Helpers.cpp +++ b/Sim/GiGaMTCore/src/Lib/Helpers.cpp @@ -9,7 +9,7 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ #include "Helpers.h" -#include "GiGaMTCoreTruth/LinkedParticle.h" +#include "GiGaMTCoreRun/LinkedParticle.h" namespace Gaussino::LinkedParticleHelpers { diff --git a/Sim/GiGaMTCore/src/truth/Helpers.h b/Sim/GiGaMTCore/src/Lib/Helpers.h similarity index 100% rename from Sim/GiGaMTCore/src/truth/Helpers.h rename to Sim/GiGaMTCore/src/Lib/Helpers.h diff --git a/Sim/GiGaMTCore/src/truth/LinkedParticle.cpp b/Sim/GiGaMTCore/src/Lib/LinkedParticle.cpp similarity index 98% rename from Sim/GiGaMTCore/src/truth/LinkedParticle.cpp rename to Sim/GiGaMTCore/src/Lib/LinkedParticle.cpp index 5859dae0..77ca94be 100644 --- a/Sim/GiGaMTCore/src/truth/LinkedParticle.cpp +++ b/Sim/GiGaMTCore/src/Lib/LinkedParticle.cpp @@ -8,11 +8,11 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/LinkedParticle.h" +#include "GiGaMTCoreRun/LinkedParticle.h" #include "CLHEP/Units/PhysicalConstants.h" -#include "GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h" -#include "GiGaMTCoreTruth/LinkedParticleHelpers.h" +#include "GiGaMTCoreRun/GaussinoPrimaryParticleInformation.h" +#include "GiGaMTCoreRun/LinkedParticleHelpers.h" #include "Helpers.h" #include "Math/GenVector/Boost.h" #include "Math/Vector4D.h" diff --git a/Sim/GiGaMTCore/src/truth/LinkedParticleHelpers.cpp b/Sim/GiGaMTCore/src/Lib/LinkedParticleHelpers.cpp similarity index 97% rename from Sim/GiGaMTCore/src/truth/LinkedParticleHelpers.cpp rename to Sim/GiGaMTCore/src/Lib/LinkedParticleHelpers.cpp index 3ba8757d..92f564dc 100644 --- a/Sim/GiGaMTCore/src/truth/LinkedParticleHelpers.cpp +++ b/Sim/GiGaMTCore/src/Lib/LinkedParticleHelpers.cpp @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/LinkedParticleHelpers.h" +#include "GiGaMTCoreRun/LinkedParticleHelpers.h" namespace Gaussino::LPUtils { bool ShouldHaveButWasNotSimulated( const LinkedParticle* lp ) { diff --git a/Sim/GiGaMTCore/src/truth/MCTruthAttribute.cpp b/Sim/GiGaMTCore/src/Lib/MCTruthAttribute.cpp similarity index 94% rename from Sim/GiGaMTCore/src/truth/MCTruthAttribute.cpp rename to Sim/GiGaMTCore/src/Lib/MCTruthAttribute.cpp index 24932661..c6f5cb02 100644 --- a/Sim/GiGaMTCore/src/truth/MCTruthAttribute.cpp +++ b/Sim/GiGaMTCore/src/Lib/MCTruthAttribute.cpp @@ -8,4 +8,4 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/MCTruthAttribute.h" +#include "GiGaMTCoreRun/MCTruthAttribute.h" diff --git a/Sim/GiGaMTCore/src/truth/MCTruthConverter.cpp b/Sim/GiGaMTCore/src/Lib/MCTruthConverter.cpp similarity index 99% rename from Sim/GiGaMTCore/src/truth/MCTruthConverter.cpp rename to Sim/GiGaMTCore/src/Lib/MCTruthConverter.cpp index a5acc2fd..217e6385 100644 --- a/Sim/GiGaMTCore/src/truth/MCTruthConverter.cpp +++ b/Sim/GiGaMTCore/src/Lib/MCTruthConverter.cpp @@ -8,13 +8,12 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include "ConverterInfo.h" #include "GaudiKernel/GaudiException.h" #include "G4SystemOfUnits.hh" -#include "GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h" -#include "GiGaMTCoreTruth/LinkedParticleHelpers.h" -#include "GiGaMTCoreRun/SimResults.h" +#include "GiGaMTCoreRun/GaussinoPrimaryParticleInformation.h" +#include "GiGaMTCoreRun/LinkedParticleHelpers.h" #include "GiGaMTCoreRun/SimResultsProxyAttribute.h" #include "Defaults/HepMCAttributes.h" #include "Helpers.h" diff --git a/Sim/GiGaMTCore/src/run/SimResultsAttribute.cpp b/Sim/GiGaMTCore/src/Lib/SimResultsAttribute.cpp similarity index 100% rename from Sim/GiGaMTCore/src/run/SimResultsAttribute.cpp rename to Sim/GiGaMTCore/src/Lib/SimResultsAttribute.cpp diff --git a/Sim/GiGaMTCore/src/truth/TruthFlaggingTrackAction.cpp b/Sim/GiGaMTCore/src/Lib/TruthFlaggingTrackAction.cpp similarity index 98% rename from Sim/GiGaMTCore/src/truth/TruthFlaggingTrackAction.cpp rename to Sim/GiGaMTCore/src/Lib/TruthFlaggingTrackAction.cpp index 27a6ff98..c37b34fd 100755 --- a/Sim/GiGaMTCore/src/truth/TruthFlaggingTrackAction.cpp +++ b/Sim/GiGaMTCore/src/Lib/TruthFlaggingTrackAction.cpp @@ -23,10 +23,10 @@ //#include "GiGaCnv/GiGaPrimaryParticleInformation.h" // GaussTools //#include "GaussTools/GaussTrajectory.h" -#include "GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h" -#include "GiGaMTCoreTruth/GaussinoTrackInformation.h" +#include "GiGaMTCoreRun/GaussinoTrackInformation.h" +#include "GiGaMTCoreRun/GaussinoPrimaryParticleInformation.h" /// local -#include "GiGaMTCoreTruth/TruthFlaggingTrackAction.h" +#include "GiGaMTCoreRun/TruthFlaggingTrackAction.h" // ============================================================================ /** initialize the track action diff --git a/Sim/GiGaMTCore/src/truth/TruthStoringTrackAction.cpp b/Sim/GiGaMTCore/src/Lib/TruthStoringTrackAction.cpp similarity index 95% rename from Sim/GiGaMTCore/src/truth/TruthStoringTrackAction.cpp rename to Sim/GiGaMTCore/src/Lib/TruthStoringTrackAction.cpp index 2549c358..9ad4fac3 100755 --- a/Sim/GiGaMTCore/src/truth/TruthStoringTrackAction.cpp +++ b/Sim/GiGaMTCore/src/Lib/TruthStoringTrackAction.cpp @@ -31,11 +31,11 @@ #include "Event/MCVertex.h" // local -#include "GiGaMTCoreTruth/G4TruthParticle.h" -#include "GiGaMTCoreTruth/GaussinoEventInformation.h" -#include "GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h" -#include "GiGaMTCoreTruth/GaussinoTrackInformation.h" -#include "GiGaMTCoreTruth/TruthStoringTrackAction.h" +#include "GiGaMTCoreRun/G4TruthParticle.h" +#include "GiGaMTCoreRun/GaussinoEventInformation.h" +#include "GiGaMTCoreRun/GaussinoPrimaryParticleInformation.h" +#include "GiGaMTCoreRun/GaussinoTrackInformation.h" +#include "GiGaMTCoreRun/TruthStoringTrackAction.h" /*static*/ std::unordered_set<std::string> TruthStoringTrackAction::m_hadronicProcesses = { "KaonPlusInelastic", @@ -174,9 +174,12 @@ void TruthStoringTrackAction::PostUserTrackingAction( const G4Track* track ) { // and continued later on. If the track is not in suspended state, it is the true end of the // processing if(addEndVertices && track->GetTrackStatus() != G4TrackStatus::fSuspend){ - int type = 0; + // int type = 0; if(auto stepproc = track->GetStep()->GetPostStepPoint()->GetProcessDefinedStep();stepproc){ - type = processID(stepproc); + // type = processID(stepproc); + // FIXME: commented out to remove the warning about unused varaible, + // what does it do anyway? + processID(stepproc); } event_info->TruthTracker()->BufferEnd(endpos, 0, track->GetTrackID()); } diff --git a/Sim/GiGaMTCore/src/truth/ZMaxPlane.cpp b/Sim/GiGaMTCore/src/Lib/ZMaxPlane.cpp similarity index 97% rename from Sim/GiGaMTCore/src/truth/ZMaxPlane.cpp rename to Sim/GiGaMTCore/src/Lib/ZMaxPlane.cpp index 5a41abca..e9af8ad0 100644 --- a/Sim/GiGaMTCore/src/truth/ZMaxPlane.cpp +++ b/Sim/GiGaMTCore/src/Lib/ZMaxPlane.cpp @@ -12,7 +12,7 @@ #include "GaudiKernel/SystemOfUnits.h" #include "GaudiKernel/Transform3DTypes.h" // local -#include "GiGaMTCoreTruth/ZMaxPlane.h" +#include "GiGaMTCoreRun/ZMaxPlane.h" void ZMaxPlane::prepare( double zMax, double tilt, double yShift ) { // apply a rotation around X axis by tilt (radians) diff --git a/Sim/GiGaMTCore/tests/src/test_zMaxTilt.cpp b/Sim/GiGaMTCore/tests/test_zMaxTilt.cpp similarity index 98% rename from Sim/GiGaMTCore/tests/src/test_zMaxTilt.cpp rename to Sim/GiGaMTCore/tests/test_zMaxTilt.cpp index 0fed173b..974959db 100644 --- a/Sim/GiGaMTCore/tests/src/test_zMaxTilt.cpp +++ b/Sim/GiGaMTCore/tests/test_zMaxTilt.cpp @@ -11,7 +11,7 @@ #define BOOST_TEST_DYN_LINK #define BOOST_TEST_MODULE utestZMaxTilt #include "GaudiKernel/SystemOfUnits.h" -#include "GiGaMTCoreTruth/ZMaxPlane.h" +#include "GiGaMTCoreRun/ZMaxPlane.h" #include <boost/test/unit_test.hpp> #include <iostream> diff --git a/Sim/GiGaMTDD4hep/CMakeLists.txt b/Sim/GiGaMTDD4hep/CMakeLists.txt index 30aaf4b0..19effac1 100644 --- a/Sim/GiGaMTDD4hep/CMakeLists.txt +++ b/Sim/GiGaMTDD4hep/CMakeLists.txt @@ -8,55 +8,36 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### +#[=======================================================================[.rst: +Sim/GiGaMTDD4hep +---------------- +#]=======================================================================] ################################################################################ # Package: GiGaMTDD4hep # Interfaces to load the detector from the DD4hep geometry service ################################################################################ -gaudi_subdir(GiGaMTDD4hep v1r0) if(USE_DD4HEP) - -gaudi_depends_on_subdirs(GaudiAlg - Sim/GiGaMTFactories - Sim/GiGaMTCore - Sim/SimInterfaces - Sim/GiGaMTGeo - DD4hepDDG4Ext - Det/LbDD4hep) - -find_package(ROOT COMPONENTS Geom Core GenVector Matrix Physics) - -find_package(Boost COMPONENTS system thread filesystem) - -include_directories(SYSTEM ${ROOT_INCLUDE_DIRS}) -AddHepMC3() - -message(STATUS "ROOTSYS -> ${ROOTSYS}") -set(ENV{ROOTSYS} ${ROOTSYS}) - -if(${Geant4_config_version} VERSION_LESS "10.06") - add_definitions(-DG4MULTITHREADED) - add_definitions(-DG4USE_STD11) -endif() - -find_package(DD4hep REQUIRED CONFIG COMPONENTS DDCore) - -# When building our own DD4hep, we need to manually add the installation to LD_LIBRARY_PATH. -# Using gaudi_build_env() makes it so that downstream projects also have this. -# TODO Why doesn't this happen "automatically" and is there a better way? -gaudi_build_env(PREPEND LD_LIBRARY_PATH ${DD4hep_ROOT}/lib) - -include_directories(SYSTEM ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${DD4hep_INCLUDE_DIRS}) - -gaudi_add_library(GiGaMTDD4hepLib - src/lib/*.cpp - PUBLIC_HEADERS GiGaMTDD4hep - INCLUDE_DIRS LbDD4hep DD4hep - LINK_LIBRARIES DD4hep ${DD4hep_COMPONENT_LIBRARIES} ROOT GiGaMTCoreRunLib DD4hep::DDG4) - -add_dependencies(GiGaMTDD4hepLib DD4hepDDG4Ext) - -gaudi_add_module(GiGaMTDD4hep - src/components/*.cpp - LINK_LIBRARIES GiGaMTDD4hepLib GaudiAlgLib) + gaudi_add_library(GiGaMTDD4hepLib + SOURCES + src/Lib/DD4hepCnvSvc.cpp + src/Lib/DD4hepDetectorConstruction.cpp + src/Lib/Utilities.cpp + LINK + PUBLIC + DD4hep::DDCore + DD4hep::DDG4 + Gaussino::GiGaMTFactoriesLib + Gaussino::GiGaMTGeoLib + Gaussino::GiGaMTCoreRunLib + ) + + gaudi_add_module(GiGaMTDD4hep + SOURCES + src/Components/DD4hepCnvSvcConf.cpp + src/Components/DD4hepDetectorConstructionFAC.cpp + LINK + LHCb::LbDD4hepLib # FIXME: [LHCb DEPENDENCY] + Gaussino::GiGaMTDD4hepLib + ) endif() diff --git a/Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepCnvSvc.h b/Sim/GiGaMTDD4hep/include/GiGaMTDD4hep/DD4hepCnvSvc.h similarity index 100% rename from Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepCnvSvc.h rename to Sim/GiGaMTDD4hep/include/GiGaMTDD4hep/DD4hepCnvSvc.h diff --git a/Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepDetectorConstruction.h b/Sim/GiGaMTDD4hep/include/GiGaMTDD4hep/DD4hepDetectorConstruction.h similarity index 100% rename from Sim/GiGaMTDD4hep/GiGaMTDD4hep/DD4hepDetectorConstruction.h rename to Sim/GiGaMTDD4hep/include/GiGaMTDD4hep/DD4hepDetectorConstruction.h diff --git a/Sim/GiGaMTDD4hep/GiGaMTDD4hep/Utilities.h b/Sim/GiGaMTDD4hep/include/GiGaMTDD4hep/Utilities.h similarity index 100% rename from Sim/GiGaMTDD4hep/GiGaMTDD4hep/Utilities.h rename to Sim/GiGaMTDD4hep/include/GiGaMTDD4hep/Utilities.h diff --git a/Sim/GiGaMTDD4hep/src/components/DD4hepCnvSvcConf.cpp b/Sim/GiGaMTDD4hep/src/Components/DD4hepCnvSvcConf.cpp similarity index 100% rename from Sim/GiGaMTDD4hep/src/components/DD4hepCnvSvcConf.cpp rename to Sim/GiGaMTDD4hep/src/Components/DD4hepCnvSvcConf.cpp diff --git a/Sim/GiGaMTDD4hep/src/components/DD4hepDetectorConstructionFAC.cpp b/Sim/GiGaMTDD4hep/src/Components/DD4hepDetectorConstructionFAC.cpp similarity index 100% rename from Sim/GiGaMTDD4hep/src/components/DD4hepDetectorConstructionFAC.cpp rename to Sim/GiGaMTDD4hep/src/Components/DD4hepDetectorConstructionFAC.cpp diff --git a/Sim/GiGaMTDD4hep/src/lib/DD4hepCnvSvc.cpp b/Sim/GiGaMTDD4hep/src/Lib/DD4hepCnvSvc.cpp similarity index 100% rename from Sim/GiGaMTDD4hep/src/lib/DD4hepCnvSvc.cpp rename to Sim/GiGaMTDD4hep/src/Lib/DD4hepCnvSvc.cpp diff --git a/Sim/GiGaMTDD4hep/src/lib/DD4hepDetectorConstruction.cpp b/Sim/GiGaMTDD4hep/src/Lib/DD4hepDetectorConstruction.cpp similarity index 100% rename from Sim/GiGaMTDD4hep/src/lib/DD4hepDetectorConstruction.cpp rename to Sim/GiGaMTDD4hep/src/Lib/DD4hepDetectorConstruction.cpp diff --git a/Sim/GiGaMTDD4hep/src/lib/Utilities.cpp b/Sim/GiGaMTDD4hep/src/Lib/Utilities.cpp similarity index 100% rename from Sim/GiGaMTDD4hep/src/lib/Utilities.cpp rename to Sim/GiGaMTDD4hep/src/Lib/Utilities.cpp diff --git a/Sim/GiGaMTDebug/CMakeLists.txt b/Sim/GiGaMTDebug/CMakeLists.txt index dc96bd3a..765a973b 100644 --- a/Sim/GiGaMTDebug/CMakeLists.txt +++ b/Sim/GiGaMTDebug/CMakeLists.txt @@ -8,27 +8,16 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: GiGaMTDebug -# -# Collection of G4 objects used for debugging -################################################################################# -gaudi_subdir(GiGaMTDebug v1r0) -gaudi_depends_on_subdirs(Sim/GiGaMTCore - Sim/GiGaMTFactories) - -AddHepMC3() -find_package(ROOT COMPONENTS MathCore GenVector) - -FindG4libs(digits_hits event geometry global graphics_reps materials persistency - particles processes run tracking track intercoms physicslists) - -if(${Geant4_config_version} VERSION_LESS "10.06") - add_definitions(-DG4MULTITHREADED) - add_definitions(-DG4USE_STD11) -endif() - +#[=======================================================================[.rst: +Sim/GiGaMTDebug +--------------- +#]=======================================================================] +# ./Sim/GiGaMTDebug/CMakeLists.txt gaudi_add_module(GiGaMTDebug - src/*.cpp - INCLUDE_DIRS GiGaMTFactories - LINK_LIBRARIES GaudiAlgLib GiGaMTCoreTruthLib) + SOURCES + src/Components/DebugStepAction.cpp + src/Components/DebugTrackAction.cpp + LINK + Gaussino::GiGaMTCoreRunLib + Gaussino::GiGaMTFactoriesLib +) diff --git a/Sim/GiGaMTDebug/src/DebugStepAction.cpp b/Sim/GiGaMTDebug/src/Components/DebugStepAction.cpp similarity index 100% rename from Sim/GiGaMTDebug/src/DebugStepAction.cpp rename to Sim/GiGaMTDebug/src/Components/DebugStepAction.cpp diff --git a/Sim/GiGaMTDebug/src/DebugTrackAction.cpp b/Sim/GiGaMTDebug/src/Components/DebugTrackAction.cpp similarity index 97% rename from Sim/GiGaMTDebug/src/DebugTrackAction.cpp rename to Sim/GiGaMTDebug/src/Components/DebugTrackAction.cpp index f0421223..c0c706e8 100755 --- a/Sim/GiGaMTDebug/src/DebugTrackAction.cpp +++ b/Sim/GiGaMTDebug/src/Components/DebugTrackAction.cpp @@ -31,10 +31,10 @@ #include "Event/MCVertex.h" // local -#include "GiGaMTCoreTruth/G4TruthParticle.h" -#include "GiGaMTCoreTruth/GaussinoEventInformation.h" -#include "GiGaMTCoreTruth/GaussinoPrimaryParticleInformation.h" -#include "GiGaMTCoreTruth/GaussinoTrackInformation.h" +#include "GiGaMTCoreRun/G4TruthParticle.h" +#include "GiGaMTCoreRun/GaussinoEventInformation.h" +#include "GiGaMTCoreRun/GaussinoPrimaryParticleInformation.h" +#include "GiGaMTCoreRun/GaussinoTrackInformation.h" // namespace LHCb { // class IParticlePropertySvc; diff --git a/Sim/GiGaMTExamples/FCCTest/CMakeLists.txt b/Sim/GiGaMTExamples/FCCTest/CMakeLists.txt index 5f693c59..0859f1b9 100644 --- a/Sim/GiGaMTExamples/FCCTest/CMakeLists.txt +++ b/Sim/GiGaMTExamples/FCCTest/CMakeLists.txt @@ -8,48 +8,39 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### +#[=======================================================================[.rst: +Sim/GiGaMTExamples/FCCTest +-------------------------- +#]=======================================================================] ################################################################################ # Package: FCCTest # Adapted from Gaussino FCC TestGeometry package: https://gitlab.cern.ch/jlingema/Gauss/tree/refactor/ # Original author: Anna Zaborowska # ################################################################################ -gaudi_subdir(FCCTest v1r0) -gaudi_depends_on_subdirs(GaudiKernel - GaudiAlg - Sim/GiGaMTFactories - Sim/GiGaMTCore - Sim/SimInterfaces - Sim/GiGaMTGeo) - -if(${Geant4_config_version} VERSION_LESS "10.06") - add_definitions(-DG4MULTITHREADED) - add_definitions(-DG4USE_STD11) -endif() - -AddHepMC3() - -find_package(XercesC) -#find_package(ROOT) - -#find_package(ROOT COMPONENTS MathCore GenVector Geom RIO Hist REQUIRED) - -#gaudi_install_headers(TestGeometry) - -gaudi_add_library(FCCTest - src/lib/*.cpp - INCLUDE_DIRS Geant4 ROOT XercesC SimInterfaces AIDA - LINK_LIBRARIES GaudiKernel GaudiAlgLib Geant4 ROOT XercesC GiGaMTCoreRunLib - PUBLIC_HEADERS FCCTest) -add_dependencies(FCCTest HepMC3Ext) +gaudi_add_library(FCCTestLib + SOURCES + src/Lib/CalorimeterHit.cpp + src/Lib/CalorimeterSD.cpp + LINK + PUBLIC + Gaussino::GiGaMTCoreRunLib + Gaussino::SimInterfacesLib +) gaudi_add_module(FCCTestPlugins - src/components/*.cpp - INCLUDE_DIRS Geant4 FCCTest GaudiKernel - LINK_LIBRARIES GaudiKernel Geant4 FCCTest ROOT) - -include(CTest) -gaudi_add_test(GeantGdmlWithSD - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - FRAMEWORK tests/options/geant_fullsim_gdml.py) + SOURCES + src/Components/G4GdmlTestDetector.cpp + src/Components/G4SaveTestCalHits.cpp + LINK + Geant4::G4persistency + Gaussino::FCCTestLib + Gaussino::GiGaMTFactoriesLib +) + +# FIXME: this test is stupid, what does it test? +#gaudi_add_tests(GeantGdmlWithSD +# WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +# FRAMEWORK tests/options/geant_fullsim_gdml.py +# #) diff --git a/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterHit.h b/Sim/GiGaMTExamples/FCCTest/include/FCCTest/CalorimeterHit.h similarity index 100% rename from Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterHit.h rename to Sim/GiGaMTExamples/FCCTest/include/FCCTest/CalorimeterHit.h diff --git a/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterSD.h b/Sim/GiGaMTExamples/FCCTest/include/FCCTest/CalorimeterSD.h similarity index 95% rename from Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterSD.h rename to Sim/GiGaMTExamples/FCCTest/include/FCCTest/CalorimeterSD.h index 4751c1c1..f256bef7 100644 --- a/Sim/GiGaMTExamples/FCCTest/FCCTest/CalorimeterSD.h +++ b/Sim/GiGaMTExamples/FCCTest/include/FCCTest/CalorimeterSD.h @@ -38,8 +38,8 @@ namespace FCCTest CalorimeterSD( G4String name ); CalorimeterSD( G4String name, G4int aCellNoInAxis ); virtual ~CalorimeterSD(); - virtual void Initialize( G4HCofThisEvent* HCE ); - virtual G4bool ProcessHits( G4Step* aStep, G4TouchableHistory* ROhist ); + virtual void Initialize( G4HCofThisEvent* HCE ) override; + virtual G4bool ProcessHits( G4Step* aStep, G4TouchableHistory* ROhist ) override; private: CalorimeterHitsCollection* fHitsCollection; diff --git a/Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.cpp b/Sim/GiGaMTExamples/FCCTest/src/Components/G4GdmlTestDetector.cpp similarity index 100% rename from Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.cpp rename to Sim/GiGaMTExamples/FCCTest/src/Components/G4GdmlTestDetector.cpp diff --git a/Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.h b/Sim/GiGaMTExamples/FCCTest/src/Components/G4GdmlTestDetector.h similarity index 100% rename from Sim/GiGaMTExamples/FCCTest/src/components/G4GdmlTestDetector.h rename to Sim/GiGaMTExamples/FCCTest/src/Components/G4GdmlTestDetector.h diff --git a/Sim/GiGaMTExamples/FCCTest/src/components/G4SaveTestCalHits.cpp b/Sim/GiGaMTExamples/FCCTest/src/Components/G4SaveTestCalHits.cpp similarity index 100% rename from Sim/GiGaMTExamples/FCCTest/src/components/G4SaveTestCalHits.cpp rename to Sim/GiGaMTExamples/FCCTest/src/Components/G4SaveTestCalHits.cpp diff --git a/Sim/GiGaMTExamples/FCCTest/src/components/G4SaveTestCalHits.h b/Sim/GiGaMTExamples/FCCTest/src/Components/G4SaveTestCalHits.h similarity index 100% rename from Sim/GiGaMTExamples/FCCTest/src/components/G4SaveTestCalHits.h rename to Sim/GiGaMTExamples/FCCTest/src/Components/G4SaveTestCalHits.h diff --git a/Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterHit.cpp b/Sim/GiGaMTExamples/FCCTest/src/Lib/CalorimeterHit.cpp similarity index 100% rename from Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterHit.cpp rename to Sim/GiGaMTExamples/FCCTest/src/Lib/CalorimeterHit.cpp diff --git a/Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterSD.cpp b/Sim/GiGaMTExamples/FCCTest/src/Lib/CalorimeterSD.cpp similarity index 100% rename from Sim/GiGaMTExamples/FCCTest/src/lib/CalorimeterSD.cpp rename to Sim/GiGaMTExamples/FCCTest/src/Lib/CalorimeterSD.cpp diff --git a/Sim/GiGaMTExamples/IronBox/CMakeLists.txt b/Sim/GiGaMTExamples/IronBox/CMakeLists.txt index 1ba1e5a5..7b0fc29e 100644 --- a/Sim/GiGaMTExamples/IronBox/CMakeLists.txt +++ b/Sim/GiGaMTExamples/IronBox/CMakeLists.txt @@ -8,28 +8,22 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### +#[=======================================================================[.rst: +Sim/GiGaMTExamples/IronBox +-------------------------- +#]=======================================================================] ################################################################################ # Package: GiGaMTExamples/IronBox # All GiGa extensions to create a simple running example to test MT prototype. # Detector is a 1m^3 iron cube in the center. ################################################################################# -gaudi_subdir(IronBox v1r0) - -gaudi_depends_on_subdirs(GaudiAlg - Gen/GenInterfaces - Event/GenEvent - Sim/GiGaMTFactories - Sim/GiGaMTCore - Sim/GiGaMTGeo) -AddHepMC3() -if(${Geant4_config_version} VERSION_LESS "10.06") - add_definitions(-DG4MULTITHREADED) - add_definitions(-DG4USE_STD11) -endif() - - gaudi_add_module(IronBoxExample - src/*.cpp - INCLUDE_DIRS GiGaMTFactories GenInterfaces ${HEPMC3_INCLUDE_DIR} - LINK_LIBRARIES GaudiAlgLib GiGaMTCoreRunLib ${HEPMC3_LIBRARIES} GenEvent) -add_dependencies(IronBoxExample HepMC3Ext) + SOURCES + src/IronBoxGeo.cpp + src/MinimalParticles.cpp + LINK + HepMC::HepMC + Gaussino::GiGaMTCoreRunLib + Gaussino::GiGaMTGeoLib + Gaussino::GenInterfacesLib +) diff --git a/Sim/GiGaMTExamples/LHCbFromGDML/CMakeLists.txt b/Sim/GiGaMTExamples/LHCbFromGDML/CMakeLists.txt index 25b799ca..2542bb82 100644 --- a/Sim/GiGaMTExamples/LHCbFromGDML/CMakeLists.txt +++ b/Sim/GiGaMTExamples/LHCbFromGDML/CMakeLists.txt @@ -8,6 +8,10 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### +#[=======================================================================[.rst: +Sim/GiGaMTExamples/LHCbFromGDML +------------------------------- +#]=======================================================================] ################################################################################ # Package: LHCbFromGDML # Simple setup to add the frozen LHCb geometry from a GDML file to Gaussino. @@ -15,18 +19,13 @@ # Author: Dominik Muller, GDML file from Ben Couturier # ################################################################################ -gaudi_subdir(LHCbFromGDML v1r0) - -gaudi_depends_on_subdirs(GaudiKernel - GaudiAlg - HepMC3 - HepMCUser - Gen/GenInterfaces) - -AddHepMC3() - gaudi_add_module(LHCbFromGDML - src/*.cpp - INCLUDE_DIRS GenInterfaces ${HEPMC3_INCLUDE_DIR} HepMCUser - LINK_LIBRARIES GaudiAlgLib ${HEPMC3_LIBRARIES} GenEvent) -add_dependencies(LHCbFromGDML HepMC3Ext) + SOURCES + src/MinimalStableInLHCb.cpp + LINK + HepMC3::HepMC3 + Gaudi::GaudiAlgLib + LHCb::GenEvent # TODO: [LHCb DEPENDENCY] + Gaussino::GenInterfacesLib + Gaussino::HepMCUserLib +) diff --git a/Sim/GiGaMTFactories/CMakeLists.txt b/Sim/GiGaMTFactories/CMakeLists.txt index e2fb57e2..f2cf7656 100644 --- a/Sim/GiGaMTFactories/CMakeLists.txt +++ b/Sim/GiGaMTFactories/CMakeLists.txt @@ -18,44 +18,95 @@ # FIXME: This requirement should probably be enforced somehow... # ################################################################################# -gaudi_subdir(GiGaMTFactories v1r0) +#[=======================================================================[.rst: +Sim/GiGaMTFactories +--------------------------- +#]=======================================================================] -gaudi_depends_on_subdirs(GaudiAlg - Sim/GiGaMTCore - Sim/SimInterfaces - HepMC3 - Sim/GiGaMTGeo) +gaudi_add_header_only_library(GiGaMTFactoriesLib + LINK + Gaudi::GaudiKernel +) -if(${Geant4_config_version} VERSION_LESS "10.06") - add_definitions(-DG4MULTITHREADED) - add_definitions(-DG4USE_STD11) -endif() -AddHepMC3() - -# GigaMTCoreLib should pull in all the dependencies on Geant 4 etc gaudi_add_module(GiGaMTRunFactories - src/run/*.cpp - LINK_LIBRARIES GiGaMTCoreRunLib GaudiAlgLib) + SOURCES + src/Components/GiGaMTRunManagerFAC.cpp + src/Components/GiGaRunActionCommandFAC.cpp + src/Components/GiGaWorkerPilotFAC.cpp + LINK + HepMC3::HepMC3 + Gaussino::GiGaMTFactoriesLib + Gaussino::GiGaMTCoreRunLib +) + +gaudi_add_header_only_library(GiGaMTPhysFactoriesLib) + gaudi_add_module(GiGaMTPhysFactories - src/phys/*.cpp - LINK_LIBRARIES GiGaMTCoreRunLib GaudiAlgLib) + SOURCES + src/Components/GiGaMTModularPhysListFAC.cpp + src/Components/GiGaMTG4PhysicsConstrFAC.cpp + src/Components/GiGaMTG4PhysicsFactory.cpp + LINK + CLHEP::CLHEP + Geant4::G4run + Geant4::G4physicslists + Gaudi::GaudiAlgLib + Gaussino::GiGaMTFactoriesLib + Gaussino::GiGaMTCoreMessageLib +) + +gaudi_add_header_only_library(GiGaMTDetFactoriesLib) + gaudi_add_module(GiGaMTDetFactories - src/det/*.cpp - INCLUDE_DIRS SimInterfaces - LINK_LIBRARIES GiGaMTCoreRunLib GaudiAlgLib) + SOURCES + src/Components/GiGaMTDetectorConstructionFAC.cpp + src/Components/GDMLConstructionFactory.cpp + LINK + CLHEP::Vector + Geant4::G4digits_hits + Geant4::G4geometry + Geant4::G4global + Geant4::G4persistency + Geant4::G4run + Gaudi::GaudiAlgLib + XercesC::XercesC + Gaussino::UtilsLib + Gaussino::GiGaMTCoreDetLib + Gaussino::GiGaMTFactoriesLib + Gaussino::GiGaMTGeoLib + Gaussino::SimInterfacesLib +) gaudi_add_module(GiGaMTTruthFactories - src/truth/*.cpp - LINK_LIBRARIES GiGaMTCoreTruthLib GaudiAlgLib) + SOURCES + src/Components/TruthActionFactories.cpp + LINK + Gaussino::GiGaMTFactoriesLib + Gaussino::GiGaMTCoreMessageLib + Gaussino::GiGaMTCoreRunLib +) gaudi_add_library(GiGaMTMagnetFactoriesLib - src/magnet/lib/*.cpp - PUBLIC_HEADERS GiGaMTFactories - LINK_LIBRARIES GiGaMTCoreRunLib GaudiAlgLib GaudiKernel) + SOURCES + src/Lib/FieldMgrBase.cpp + LINK + PUBLIC + CLHEP::CLHEP + Geant4::G4geometry + Gaudi::GaudiKernel + Gaudi::GaudiAlgLib + Gaussino::GiGaMTCoreMessageLib +) gaudi_add_module(GiGaMTMagnetFactories - src/magnet/components/*.cpp - LINK_LIBRARIES GiGaMTMagnetFactoriesLib) + SOURCES + src/Components/MagFieldFromSvc.cpp + src/Components/Steppers.cpp + src/Components/ToolFieldMgr.cpp + src/Components/ZeroFieldMgr.cpp + LINK + Gaussino::GiGaMTMagnetFactoriesLib +) diff --git a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4SensDetFactory.h b/Sim/GiGaMTFactories/include/GiGaMTDetFactories/GiGaMTG4SensDetFactory.h similarity index 100% rename from Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4SensDetFactory.h rename to Sim/GiGaMTFactories/include/GiGaMTDetFactories/GiGaMTG4SensDetFactory.h diff --git a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaFactoryBase.h b/Sim/GiGaMTFactories/include/GiGaMTFactories/GiGaFactoryBase.h similarity index 100% rename from Sim/GiGaMTFactories/GiGaMTFactories/GiGaFactoryBase.h rename to Sim/GiGaMTFactories/include/GiGaMTFactories/GiGaFactoryBase.h diff --git a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaTool.h b/Sim/GiGaMTFactories/include/GiGaMTFactories/GiGaTool.h similarity index 100% rename from Sim/GiGaMTFactories/GiGaMTFactories/GiGaTool.h rename to Sim/GiGaMTFactories/include/GiGaMTFactories/GiGaTool.h diff --git a/Sim/GiGaMTFactories/GiGaMTFactories/Magnet/FieldMgrBase.h b/Sim/GiGaMTFactories/include/GiGaMTMagnetFactories/FieldMgrBase.h similarity index 100% rename from Sim/GiGaMTFactories/GiGaMTFactories/Magnet/FieldMgrBase.h rename to Sim/GiGaMTFactories/include/GiGaMTMagnetFactories/FieldMgrBase.h diff --git a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsConstrFAC.h b/Sim/GiGaMTFactories/include/GiGaMTPhysFactories/GiGaMTG4PhysicsConstrFAC.h similarity index 100% rename from Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsConstrFAC.h rename to Sim/GiGaMTFactories/include/GiGaMTPhysFactories/GiGaMTG4PhysicsConstrFAC.h diff --git a/Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsFactory.h b/Sim/GiGaMTFactories/include/GiGaMTPhysFactories/GiGaMTG4PhysicsFactory.h similarity index 100% rename from Sim/GiGaMTFactories/GiGaMTFactories/GiGaMTG4PhysicsFactory.h rename to Sim/GiGaMTFactories/include/GiGaMTPhysFactories/GiGaMTG4PhysicsFactory.h diff --git a/Sim/GiGaMTFactories/src/det/GDMLConstructionFactory.cpp b/Sim/GiGaMTFactories/src/Components/GDMLConstructionFactory.cpp similarity index 100% rename from Sim/GiGaMTFactories/src/det/GDMLConstructionFactory.cpp rename to Sim/GiGaMTFactories/src/Components/GDMLConstructionFactory.cpp diff --git a/Sim/GiGaMTFactories/src/det/GDMLConstructionFactory.h b/Sim/GiGaMTFactories/src/Components/GDMLConstructionFactory.h similarity index 100% rename from Sim/GiGaMTFactories/src/det/GDMLConstructionFactory.h rename to Sim/GiGaMTFactories/src/Components/GDMLConstructionFactory.h diff --git a/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.cpp b/Sim/GiGaMTFactories/src/Components/GiGaMTDetectorConstructionFAC.cpp similarity index 100% rename from Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.cpp rename to Sim/GiGaMTFactories/src/Components/GiGaMTDetectorConstructionFAC.cpp diff --git a/Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.h b/Sim/GiGaMTFactories/src/Components/GiGaMTDetectorConstructionFAC.h similarity index 100% rename from Sim/GiGaMTFactories/src/det/GiGaMTDetectorConstructionFAC.h rename to Sim/GiGaMTFactories/src/Components/GiGaMTDetectorConstructionFAC.h diff --git a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp b/Sim/GiGaMTFactories/src/Components/GiGaMTG4PhysicsConstrFAC.cpp similarity index 99% rename from Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp rename to Sim/GiGaMTFactories/src/Components/GiGaMTG4PhysicsConstrFAC.cpp index d6e13fd9..2396111a 100644 --- a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsConstrFAC.cpp +++ b/Sim/GiGaMTFactories/src/Components/GiGaMTG4PhysicsConstrFAC.cpp @@ -10,7 +10,7 @@ \*****************************************************************************/ // Include files -#include "GiGaMTFactories/GiGaMTG4PhysicsConstrFAC.h" +#include "GiGaMTPhysFactories/GiGaMTG4PhysicsConstrFAC.h" // Geant4 physics lists #include "G4DecayPhysics.hh" diff --git a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsFactory.cpp b/Sim/GiGaMTFactories/src/Components/GiGaMTG4PhysicsFactory.cpp similarity index 98% rename from Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsFactory.cpp rename to Sim/GiGaMTFactories/src/Components/GiGaMTG4PhysicsFactory.cpp index bd306db8..6f335415 100644 --- a/Sim/GiGaMTFactories/src/phys/GiGaMTG4PhysicsFactory.cpp +++ b/Sim/GiGaMTFactories/src/Components/GiGaMTG4PhysicsFactory.cpp @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTFactories/GiGaMTG4PhysicsFactory.h" +#include "GiGaMTPhysFactories/GiGaMTG4PhysicsFactory.h" // All includes I could find that definethe physics lists // that are directly provided by Geant4 diff --git a/Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.cpp b/Sim/GiGaMTFactories/src/Components/GiGaMTModularPhysListFAC.cpp similarity index 100% rename from Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.cpp rename to Sim/GiGaMTFactories/src/Components/GiGaMTModularPhysListFAC.cpp diff --git a/Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.h b/Sim/GiGaMTFactories/src/Components/GiGaMTModularPhysListFAC.h similarity index 100% rename from Sim/GiGaMTFactories/src/phys/GiGaMTModularPhysListFAC.h rename to Sim/GiGaMTFactories/src/Components/GiGaMTModularPhysListFAC.h diff --git a/Sim/GiGaMTFactories/src/run/GiGaMTRunManagerFAC.cpp b/Sim/GiGaMTFactories/src/Components/GiGaMTRunManagerFAC.cpp similarity index 100% rename from Sim/GiGaMTFactories/src/run/GiGaMTRunManagerFAC.cpp rename to Sim/GiGaMTFactories/src/Components/GiGaMTRunManagerFAC.cpp diff --git a/Sim/GiGaMTFactories/src/run/GiGaMTRunManagerFAC.h b/Sim/GiGaMTFactories/src/Components/GiGaMTRunManagerFAC.h similarity index 100% rename from Sim/GiGaMTFactories/src/run/GiGaMTRunManagerFAC.h rename to Sim/GiGaMTFactories/src/Components/GiGaMTRunManagerFAC.h diff --git a/Sim/GiGaMTFactories/src/run/GiGaRunActionCommandFAC.cpp b/Sim/GiGaMTFactories/src/Components/GiGaRunActionCommandFAC.cpp similarity index 100% rename from Sim/GiGaMTFactories/src/run/GiGaRunActionCommandFAC.cpp rename to Sim/GiGaMTFactories/src/Components/GiGaRunActionCommandFAC.cpp diff --git a/Sim/GiGaMTFactories/src/run/GiGaRunActionCommandFAC.h b/Sim/GiGaMTFactories/src/Components/GiGaRunActionCommandFAC.h similarity index 100% rename from Sim/GiGaMTFactories/src/run/GiGaRunActionCommandFAC.h rename to Sim/GiGaMTFactories/src/Components/GiGaRunActionCommandFAC.h diff --git a/Sim/GiGaMTFactories/src/run/GiGaWorkerPilotFAC.cpp b/Sim/GiGaMTFactories/src/Components/GiGaWorkerPilotFAC.cpp similarity index 100% rename from Sim/GiGaMTFactories/src/run/GiGaWorkerPilotFAC.cpp rename to Sim/GiGaMTFactories/src/Components/GiGaWorkerPilotFAC.cpp diff --git a/Sim/GiGaMTFactories/src/run/GiGaWorkerPilotFAC.h b/Sim/GiGaMTFactories/src/Components/GiGaWorkerPilotFAC.h similarity index 100% rename from Sim/GiGaMTFactories/src/run/GiGaWorkerPilotFAC.h rename to Sim/GiGaMTFactories/src/Components/GiGaWorkerPilotFAC.h diff --git a/Sim/GiGaMTFactories/src/magnet/components/MagFieldFromSvc.cpp b/Sim/GiGaMTFactories/src/Components/MagFieldFromSvc.cpp similarity index 100% rename from Sim/GiGaMTFactories/src/magnet/components/MagFieldFromSvc.cpp rename to Sim/GiGaMTFactories/src/Components/MagFieldFromSvc.cpp diff --git a/Sim/GiGaMTFactories/src/magnet/components/Steppers.cpp b/Sim/GiGaMTFactories/src/Components/Steppers.cpp similarity index 100% rename from Sim/GiGaMTFactories/src/magnet/components/Steppers.cpp rename to Sim/GiGaMTFactories/src/Components/Steppers.cpp diff --git a/Sim/GiGaMTFactories/src/magnet/components/ToolFieldMgr.cpp b/Sim/GiGaMTFactories/src/Components/ToolFieldMgr.cpp similarity index 96% rename from Sim/GiGaMTFactories/src/magnet/components/ToolFieldMgr.cpp rename to Sim/GiGaMTFactories/src/Components/ToolFieldMgr.cpp index 42f23b42..c25208f8 100755 --- a/Sim/GiGaMTFactories/src/magnet/components/ToolFieldMgr.cpp +++ b/Sim/GiGaMTFactories/src/Components/ToolFieldMgr.cpp @@ -10,7 +10,7 @@ \*****************************************************************************/ #include "G4MagneticField.hh" #include "GiGaMTFactories/GiGaFactoryBase.h" -#include "GiGaMTFactories/Magnet/FieldMgrBase.h" +#include "GiGaMTMagnetFactories/FieldMgrBase.h" #include "GaudiKernel/ToolHandle.h" /** @class ToolFieldMgr diff --git a/Sim/GiGaMTFactories/src/truth/TruthActionFactories.cpp b/Sim/GiGaMTFactories/src/Components/TruthActionFactories.cpp similarity index 98% rename from Sim/GiGaMTFactories/src/truth/TruthActionFactories.cpp rename to Sim/GiGaMTFactories/src/Components/TruthActionFactories.cpp index bb327da5..978436a5 100644 --- a/Sim/GiGaMTFactories/src/truth/TruthActionFactories.cpp +++ b/Sim/GiGaMTFactories/src/Components/TruthActionFactories.cpp @@ -11,8 +11,8 @@ #include "GiGaMTFactories/GiGaFactoryBase.h" #include "GiGaMTFactories/GiGaTool.h" -#include "GiGaMTCoreTruth/TruthFlaggingTrackAction.h" -#include "GiGaMTCoreTruth/TruthStoringTrackAction.h" +#include "GiGaMTCoreRun/TruthFlaggingTrackAction.h" +#include "GiGaMTCoreRun/TruthStoringTrackAction.h" #include "G4UserTrackingAction.hh" diff --git a/Sim/GiGaMTFactories/src/magnet/components/ZeroFieldMgr.cpp b/Sim/GiGaMTFactories/src/Components/ZeroFieldMgr.cpp similarity index 96% rename from Sim/GiGaMTFactories/src/magnet/components/ZeroFieldMgr.cpp rename to Sim/GiGaMTFactories/src/Components/ZeroFieldMgr.cpp index af961ed3..2936ec3e 100755 --- a/Sim/GiGaMTFactories/src/magnet/components/ZeroFieldMgr.cpp +++ b/Sim/GiGaMTFactories/src/Components/ZeroFieldMgr.cpp @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTFactories/Magnet/FieldMgrBase.h" +#include "GiGaMTMagnetFactories/FieldMgrBase.h" class G4ChordFinder; /** @class ZeroFieldMgr diff --git a/Sim/GiGaMTFactories/src/magnet/lib/FieldMgrBase.cpp b/Sim/GiGaMTFactories/src/Lib/FieldMgrBase.cpp similarity index 98% rename from Sim/GiGaMTFactories/src/magnet/lib/FieldMgrBase.cpp rename to Sim/GiGaMTFactories/src/Lib/FieldMgrBase.cpp index 0e531e8c..4f4d6095 100755 --- a/Sim/GiGaMTFactories/src/magnet/lib/FieldMgrBase.cpp +++ b/Sim/GiGaMTFactories/src/Lib/FieldMgrBase.cpp @@ -8,7 +8,7 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTFactories/Magnet/FieldMgrBase.h" +#include "GiGaMTMagnetFactories/FieldMgrBase.h" #include "GaudiKernel/GaudiException.h" #include "G4ChordFinder.hh" #include "G4MagIntegratorStepper.hh" diff --git a/Sim/GiGaMTGeo/CMakeLists.txt b/Sim/GiGaMTGeo/CMakeLists.txt index a9a52724..94283c0e 100644 --- a/Sim/GiGaMTGeo/CMakeLists.txt +++ b/Sim/GiGaMTGeo/CMakeLists.txt @@ -8,7 +8,11 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ +#[=======================================================================[.rst: +Sim/GiGaMTGeo +------------- +#]=======================================================================] +############################################################################### # Package: GiGaMTGeo # # This package will contain the factories to construct the various G4 objects. @@ -17,24 +21,24 @@ # and returns the constructed type by value. # FIXME: This requirement should probably be enforced somehow... # -################################################################################# -gaudi_subdir(GiGaMTGeo v1r0) - -gaudi_depends_on_subdirs(GaudiAlg - Sim/SimInterfaces - Sim/GiGaMTCore) +############################################################################### -AddHepMC3() -if(${Geant4_config_version} VERSION_LESS "10.06") - add_definitions(-DG4MULTITHREADED) - add_definitions(-DG4USE_STD11) -endif() +gaudi_add_header_only_library(GiGaMTGeoLib) +gaudi_add_header_only_library(GiGaMTRegionsLib) gaudi_add_module(GiGaMTGeoUtils - src/*.cpp - INCLUDE_DIRS SimInterfaces - LINK_LIBRARIES GiGaMTCoreRunLib GaudiAlgLib GiGaMTCoreCutLib) + SOURCES + src/Components/GDMLReader.cpp + src/Components/GiGaRegionsTool.cpp + src/Components/GiGaRegionTool.cpp + src/Components/GiGaSetSimAttributes.cpp + LINK + Gaudi::GaudiAlgLib + Gaussino::GiGaMTRegionsLib + Gaussino::SimInterfacesLib + Gaussino::GiGaMTCoreCutLib + Gaussino::GiGaMTCoreRunLib + Geant4::G4persistency +) -gaudi_install_headers(GiGaMTGeo) -gaudi_install_headers(GiGaMTRegions) -gaudi_add_test(QMTest QMTEST) +gaudi_add_tests(QMTest) diff --git a/Sim/GiGaMTGeo/GiGaMTGeo/IGDMLReader.h b/Sim/GiGaMTGeo/include/GiGaMTGeo/IGDMLReader.h similarity index 100% rename from Sim/GiGaMTGeo/GiGaMTGeo/IGDMLReader.h rename to Sim/GiGaMTGeo/include/GiGaMTGeo/IGDMLReader.h diff --git a/Sim/GiGaMTGeo/GiGaMTGeo/IGiGaMTGeoSvc.h b/Sim/GiGaMTGeo/include/GiGaMTGeo/IGiGaMTGeoSvc.h similarity index 100% rename from Sim/GiGaMTGeo/GiGaMTGeo/IGiGaMTGeoSvc.h rename to Sim/GiGaMTGeo/include/GiGaMTGeo/IGiGaMTGeoSvc.h diff --git a/Sim/GiGaMTGeo/GiGaMTRegions/IRegionsDefinitionSvc.h b/Sim/GiGaMTGeo/include/GiGaMTRegions/IRegionsDefinitionSvc.h similarity index 100% rename from Sim/GiGaMTGeo/GiGaMTRegions/IRegionsDefinitionSvc.h rename to Sim/GiGaMTGeo/include/GiGaMTRegions/IRegionsDefinitionSvc.h diff --git a/Sim/GiGaMTGeo/GiGaMTRegions/RegionCuts.h b/Sim/GiGaMTGeo/include/GiGaMTRegions/RegionCuts.h similarity index 100% rename from Sim/GiGaMTGeo/GiGaMTRegions/RegionCuts.h rename to Sim/GiGaMTGeo/include/GiGaMTRegions/RegionCuts.h diff --git a/Sim/GiGaMTGeo/GiGaMTRegions/SimAttribute.h b/Sim/GiGaMTGeo/include/GiGaMTRegions/SimAttribute.h similarity index 100% rename from Sim/GiGaMTGeo/GiGaMTRegions/SimAttribute.h rename to Sim/GiGaMTGeo/include/GiGaMTRegions/SimAttribute.h diff --git a/Sim/GiGaMTGeo/src/GDMLReader.cpp b/Sim/GiGaMTGeo/src/Components/GDMLReader.cpp similarity index 100% rename from Sim/GiGaMTGeo/src/GDMLReader.cpp rename to Sim/GiGaMTGeo/src/Components/GDMLReader.cpp diff --git a/Sim/GiGaMTGeo/src/GiGaRegionTool.cpp b/Sim/GiGaMTGeo/src/Components/GiGaRegionTool.cpp similarity index 100% rename from Sim/GiGaMTGeo/src/GiGaRegionTool.cpp rename to Sim/GiGaMTGeo/src/Components/GiGaRegionTool.cpp diff --git a/Sim/GiGaMTGeo/src/GiGaRegionTool.h b/Sim/GiGaMTGeo/src/Components/GiGaRegionTool.h similarity index 100% rename from Sim/GiGaMTGeo/src/GiGaRegionTool.h rename to Sim/GiGaMTGeo/src/Components/GiGaRegionTool.h diff --git a/Sim/GiGaMTGeo/src/GiGaRegionsTool.cpp b/Sim/GiGaMTGeo/src/Components/GiGaRegionsTool.cpp similarity index 100% rename from Sim/GiGaMTGeo/src/GiGaRegionsTool.cpp rename to Sim/GiGaMTGeo/src/Components/GiGaRegionsTool.cpp diff --git a/Sim/GiGaMTGeo/src/GiGaRegionsTool.h b/Sim/GiGaMTGeo/src/Components/GiGaRegionsTool.h similarity index 100% rename from Sim/GiGaMTGeo/src/GiGaRegionsTool.h rename to Sim/GiGaMTGeo/src/Components/GiGaRegionsTool.h diff --git a/Sim/GiGaMTGeo/src/GiGaSetSimAttributes.cpp b/Sim/GiGaMTGeo/src/Components/GiGaSetSimAttributes.cpp similarity index 100% rename from Sim/GiGaMTGeo/src/GiGaSetSimAttributes.cpp rename to Sim/GiGaMTGeo/src/Components/GiGaSetSimAttributes.cpp diff --git a/Sim/GiGaMTGeo/src/GiGaSetSimAttributes.h b/Sim/GiGaMTGeo/src/Components/GiGaSetSimAttributes.h similarity index 100% rename from Sim/GiGaMTGeo/src/GiGaSetSimAttributes.h rename to Sim/GiGaMTGeo/src/Components/GiGaSetSimAttributes.h diff --git a/Sim/GiGaMTGeo/tests/options/cube_import_export.py b/Sim/GiGaMTGeo/tests/options/cube_import_export.py index e72c06a1..89ad9ba7 100644 --- a/Sim/GiGaMTGeo/tests/options/cube_import_export.py +++ b/Sim/GiGaMTGeo/tests/options/cube_import_export.py @@ -82,10 +82,10 @@ SimPhase().ExternalDetectorEmbedder = "Testing" # Import GDML import os -root = os.getenv("GAUSSINO_PROJECT_ROOT") +root = os.getenv("GIGAMTGEOROOT") SimPhase().ImportGDML = [ { - "GDMLFileName": root + "/Sim/GiGaMTGeo/tests/data/cube_to_import.gdml", + "GDMLFileName": root + "/tests/data/cube_to_import.gdml", "OutputLevel": DEBUG, }, ] diff --git a/Sim/GiGaMTReDecay/CMakeLists.txt b/Sim/GiGaMTReDecay/CMakeLists.txt index 6386e125..dc6ee11c 100644 --- a/Sim/GiGaMTReDecay/CMakeLists.txt +++ b/Sim/GiGaMTReDecay/CMakeLists.txt @@ -8,48 +8,41 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: GiGaMTReDecay -# -# This package contains all the optional ReDecay configuration to coordinate -# the re-use of parts over the event between multiple events. -# -################################################################################# -gaudi_subdir(GiGaMTReDecay v1r0) +#[=======================================================================[.rst: +Sim/GiGaMTReDecay +----------------- -gaudi_depends_on_subdirs(NewRnd - Gen/GenBeam - Gen/Generators - EDMdev/MCTruthToEDM - Gen/RndInit - Sim/GiGaMTTruth - Sim/GiGaMT) - -if(${Geant4_config_version} VERSION_LESS "10.06") - add_definitions(-DG4MULTITHREADED) - add_definitions(-DG4USE_STD11) -endif() - -AddHepMC3() -find_package(ROOT COMPONENTS MathCore GenVector) +This package contains all the optional ReDecay configuration to coordinate +the re-use of parts over the event between multiple events. +#]=======================================================================] gaudi_add_library(GiGaMTReDecayLib - src/lib/token/*.cpp - PUBLIC_HEADERS GiGaMTReDecay - INCLUDE_DIRS GenBeam RndInit GiGaMTTruth - LINK_LIBRARIES GiGaMTLib NewRnd GeneratorsLib) + SOURCES + src/Lib/Token.cpp + LINK + PUBLIC + Gaussino::RndInitLib + Gaussino::GiGaMTLib + Gaussino::NewRndLib + Gaussino::GiGaMTCoreRunLib + Gaussino::GeneratorsLib +) gaudi_add_module(GiGaMTReDecay - src/components/service/*.cpp - src/components/gen_tools/*.cpp - src/components/*.cpp - src/components/sorters/*.cpp - src/components/sim/*.cpp - src/components/edm/*.cpp - LINK_LIBRARIES GiGaMTReDecayLib ROOT RndInitLib MCTruthToEDMLib) - -add_dependencies(GiGaMTReDecayLib HepMC3Ext) - -#gaudi_add_module(GiGaMT - #src/components/*.cpp - #LINK_LIBRARIES GiGaMTLib ROOT) + SOURCES + src/Components/ReDecayInit.cpp + src/Components/service/ReDecaySvc.cpp + src/Components/gen_tools/ReDecayGeneration.cpp + src/Components/gen_tools/ReDecayPileUp.cpp + src/Components/gen_tools/ReDecayProduction.cpp + src/Components/gen_tools/ReDecaySignalGeneration.cpp + src/Components/service/ReDecaySvc.cpp + src/Components/sorters/BaseSorter.cpp + src/Components/sorters/SignalOnly.cpp + src/Components/sim/ReDecaySimAlg.cpp + src/Components/sim/ReDecaySkipSimAlg.cpp + src/Components/edm/ReDecayMCTruthToEDM.cpp + LINK + Gaussino::GiGaMTReDecayLib + Gaussino::MCTruthToEDMLib +) diff --git a/Sim/GiGaMTReDecay/GiGaMTReDecay/IReDecaySorter.h b/Sim/GiGaMTReDecay/include/GiGaMTReDecay/IReDecaySorter.h similarity index 100% rename from Sim/GiGaMTReDecay/GiGaMTReDecay/IReDecaySorter.h rename to Sim/GiGaMTReDecay/include/GiGaMTReDecay/IReDecaySorter.h diff --git a/Sim/GiGaMTReDecay/GiGaMTReDecay/IRedecaySvc.h b/Sim/GiGaMTReDecay/include/GiGaMTReDecay/IRedecaySvc.h similarity index 98% rename from Sim/GiGaMTReDecay/GiGaMTReDecay/IRedecaySvc.h rename to Sim/GiGaMTReDecay/include/GiGaMTReDecay/IRedecaySvc.h index 17cb596e..5a496ac6 100755 --- a/Sim/GiGaMTReDecay/GiGaMTReDecay/IRedecaySvc.h +++ b/Sim/GiGaMTReDecay/include/GiGaMTReDecay/IRedecaySvc.h @@ -24,7 +24,7 @@ #include "Event/GenCollision.h" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include "GiGaMTCoreRun/SimResults.h" // GiGa diff --git a/Sim/GiGaMTReDecay/GiGaMTReDecay/Token.h b/Sim/GiGaMTReDecay/include/GiGaMTReDecay/Token.h similarity index 100% rename from Sim/GiGaMTReDecay/GiGaMTReDecay/Token.h rename to Sim/GiGaMTReDecay/include/GiGaMTReDecay/Token.h diff --git a/Sim/GiGaMTReDecay/GiGaMTReDecay/typedefs.h b/Sim/GiGaMTReDecay/include/GiGaMTReDecay/typedefs.h similarity index 91% rename from Sim/GiGaMTReDecay/GiGaMTReDecay/typedefs.h rename to Sim/GiGaMTReDecay/include/GiGaMTReDecay/typedefs.h index ed4b5856..18511113 100644 --- a/Sim/GiGaMTReDecay/GiGaMTReDecay/typedefs.h +++ b/Sim/GiGaMTReDecay/include/GiGaMTReDecay/typedefs.h @@ -8,9 +8,9 @@ * granted to it by virtue of its status as an Intergovernmental Organization * * or submit itself to any jurisdiction. * \*****************************************************************************/ -#include "GiGaMTCoreTruth/LinkedParticle.h" +#include "GiGaMTCoreRun/LinkedParticle.h" #include <map> -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" namespace Gaussino::ReDecay { typedef std::map<const LinkedParticle*, MCTruthPtr> SignalTruths; diff --git a/Sim/GiGaMTReDecay/src/components/ReDecayInit.cpp b/Sim/GiGaMTReDecay/src/Components/ReDecayInit.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/ReDecayInit.cpp rename to Sim/GiGaMTReDecay/src/Components/ReDecayInit.cpp diff --git a/Sim/GiGaMTReDecay/src/components/backup/ReDecaySampleGenerationTool.cpp b/Sim/GiGaMTReDecay/src/Components/backup/ReDecaySampleGenerationTool.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/backup/ReDecaySampleGenerationTool.cpp rename to Sim/GiGaMTReDecay/src/Components/backup/ReDecaySampleGenerationTool.cpp diff --git a/Sim/GiGaMTReDecay/src/components/edm/ReDecayMCTruthToEDM.cpp b/Sim/GiGaMTReDecay/src/Components/edm/ReDecayMCTruthToEDM.cpp similarity index 99% rename from Sim/GiGaMTReDecay/src/components/edm/ReDecayMCTruthToEDM.cpp rename to Sim/GiGaMTReDecay/src/Components/edm/ReDecayMCTruthToEDM.cpp index be06682e..caff8145 100755 --- a/Sim/GiGaMTReDecay/src/components/edm/ReDecayMCTruthToEDM.cpp +++ b/Sim/GiGaMTReDecay/src/Components/edm/ReDecayMCTruthToEDM.cpp @@ -47,7 +47,7 @@ #include "Event/MCVertex.h" #include "MCTruthToEDM/LinkedParticleMCParticleLink.h" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include "Defaults/Locations.h" #include "GiGaMTReDecay/typedefs.h" diff --git a/Sim/GiGaMTReDecay/src/components/gen_tools/ReDecayGeneration.cpp b/Sim/GiGaMTReDecay/src/Components/gen_tools/ReDecayGeneration.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/gen_tools/ReDecayGeneration.cpp rename to Sim/GiGaMTReDecay/src/Components/gen_tools/ReDecayGeneration.cpp diff --git a/Sim/GiGaMTReDecay/src/components/gen_tools/ReDecayPileUp.cpp b/Sim/GiGaMTReDecay/src/Components/gen_tools/ReDecayPileUp.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/gen_tools/ReDecayPileUp.cpp rename to Sim/GiGaMTReDecay/src/Components/gen_tools/ReDecayPileUp.cpp diff --git a/Sim/GiGaMTReDecay/src/components/gen_tools/ReDecayProduction.cpp b/Sim/GiGaMTReDecay/src/Components/gen_tools/ReDecayProduction.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/gen_tools/ReDecayProduction.cpp rename to Sim/GiGaMTReDecay/src/Components/gen_tools/ReDecayProduction.cpp diff --git a/Sim/GiGaMTReDecay/src/components/gen_tools/ReDecaySignalGeneration.cpp b/Sim/GiGaMTReDecay/src/Components/gen_tools/ReDecaySignalGeneration.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/gen_tools/ReDecaySignalGeneration.cpp rename to Sim/GiGaMTReDecay/src/Components/gen_tools/ReDecaySignalGeneration.cpp diff --git a/Sim/GiGaMTReDecay/src/components/service/ReDecaySvc.cpp b/Sim/GiGaMTReDecay/src/Components/service/ReDecaySvc.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/service/ReDecaySvc.cpp rename to Sim/GiGaMTReDecay/src/Components/service/ReDecaySvc.cpp diff --git a/Sim/GiGaMTReDecay/src/components/sim/ReDecaySimAlg.cpp b/Sim/GiGaMTReDecay/src/Components/sim/ReDecaySimAlg.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/sim/ReDecaySimAlg.cpp rename to Sim/GiGaMTReDecay/src/Components/sim/ReDecaySimAlg.cpp diff --git a/Sim/GiGaMTReDecay/src/components/sim/ReDecaySimAlg.h b/Sim/GiGaMTReDecay/src/Components/sim/ReDecaySimAlg.h similarity index 100% rename from Sim/GiGaMTReDecay/src/components/sim/ReDecaySimAlg.h rename to Sim/GiGaMTReDecay/src/Components/sim/ReDecaySimAlg.h diff --git a/Sim/GiGaMTReDecay/src/components/sim/ReDecaySkipSimAlg.cpp b/Sim/GiGaMTReDecay/src/Components/sim/ReDecaySkipSimAlg.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/sim/ReDecaySkipSimAlg.cpp rename to Sim/GiGaMTReDecay/src/Components/sim/ReDecaySkipSimAlg.cpp diff --git a/Sim/GiGaMTReDecay/src/components/sim/ReDecaySkipSimAlg.h b/Sim/GiGaMTReDecay/src/Components/sim/ReDecaySkipSimAlg.h similarity index 100% rename from Sim/GiGaMTReDecay/src/components/sim/ReDecaySkipSimAlg.h rename to Sim/GiGaMTReDecay/src/Components/sim/ReDecaySkipSimAlg.h diff --git a/Sim/GiGaMTReDecay/src/components/sorters/BaseSorter.cpp b/Sim/GiGaMTReDecay/src/Components/sorters/BaseSorter.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/sorters/BaseSorter.cpp rename to Sim/GiGaMTReDecay/src/Components/sorters/BaseSorter.cpp diff --git a/Sim/GiGaMTReDecay/src/components/sorters/BaseSorter.h b/Sim/GiGaMTReDecay/src/Components/sorters/BaseSorter.h similarity index 100% rename from Sim/GiGaMTReDecay/src/components/sorters/BaseSorter.h rename to Sim/GiGaMTReDecay/src/Components/sorters/BaseSorter.h diff --git a/Sim/GiGaMTReDecay/src/components/sorters/SignalOnly.cpp b/Sim/GiGaMTReDecay/src/Components/sorters/SignalOnly.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/components/sorters/SignalOnly.cpp rename to Sim/GiGaMTReDecay/src/Components/sorters/SignalOnly.cpp diff --git a/Sim/GiGaMTReDecay/src/lib/token/Token.cpp b/Sim/GiGaMTReDecay/src/Lib/Token.cpp similarity index 100% rename from Sim/GiGaMTReDecay/src/lib/token/Token.cpp rename to Sim/GiGaMTReDecay/src/Lib/Token.cpp diff --git a/Sim/GiGaMTTruth/CMakeLists.txt b/Sim/GiGaMTTruth/CMakeLists.txt index c97d6f38..20e679ae 100644 --- a/Sim/GiGaMTTruth/CMakeLists.txt +++ b/Sim/GiGaMTTruth/CMakeLists.txt @@ -8,28 +8,11 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: GiGaMTTruth -# -# This package contains all code related to the tracking and extraction of truth -# information from the Geant4 propagation -################################################################################# -gaudi_subdir(GiGaMTTruth v1r0) -gaudi_depends_on_subdirs(NewRnd - GaudiAlg - HepMCUser - Kernel/PartProp - Sim/GiGaMTCore) +#[=======================================================================[.rst: +Sim/GiGaMTTruth +--------------- -if(${Geant4_config_version} VERSION_LESS "10.06") - add_definitions(-DG4MULTITHREADED) - add_definitions(-DG4USE_STD11) -endif() - - -AddHepMC3() - -FindG4libs(digits_hits event geometry global graphics_reps materials persistency - particles processes run tracking track intercoms physicslists) - -gaudi_install_headers(GiGaMTTruth) +This package contains all code related to the tracking and extraction of truth +information from the Geant4 propagation +#]=======================================================================] +gaudi_add_header_only_library(GiGaMTTruthLib) diff --git a/Sim/GiGaMTTruth/GiGaMTTruth/IHepMC3ToMCTruthConverter.h b/Sim/GiGaMTTruth/include/GiGaMTTruth/IHepMC3ToMCTruthConverter.h similarity index 97% rename from Sim/GiGaMTTruth/GiGaMTTruth/IHepMC3ToMCTruthConverter.h rename to Sim/GiGaMTTruth/include/GiGaMTTruth/IHepMC3ToMCTruthConverter.h index cc20f8d4..d06d2ecd 100644 --- a/Sim/GiGaMTTruth/GiGaMTTruth/IHepMC3ToMCTruthConverter.h +++ b/Sim/GiGaMTTruth/include/GiGaMTTruth/IHepMC3ToMCTruthConverter.h @@ -13,7 +13,7 @@ // from Gaudi #include "GaudiKernel/IAlgTool.h" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include "HepMCUser/typedefs.h" class G4Event; diff --git a/Sim/MCCollector/CMakeLists.txt b/Sim/MCCollector/CMakeLists.txt index 48c55967..a737225a 100644 --- a/Sim/MCCollector/CMakeLists.txt +++ b/Sim/MCCollector/CMakeLists.txt @@ -8,22 +8,20 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: MCCollector -################################################################################ -gaudi_subdir(MCCollector v1r0) - -gaudi_depends_on_subdirs(Sim/GiGaMTCore - Sim/GiGaMTFactories - Sim/GiGaMTCore - EDMdev/MCTruthToEDM) - -AddHepMC3() -find_package(Boost) -find_package(CLHEP) -include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${Geant4_INCLUDE_DIRS}) +#[=======================================================================[.rst: +Sim/MCCollector +--------------- +Author: Michał Mazurek +#]=======================================================================] gaudi_add_module(MCCollector - src/*.cpp - INCLUDE_DIRS GiGaMTFactories - LINK_LIBRARIES GiGaMTCoreTruthLib MCTruthToEDMLib) + SOURCES + src/Components/GetMCCollectorHitsAlg.cpp + src/Components/MCCollectorHit.cpp + src/Components/MCCollectorSensDet.cpp + LINK + Gaussino::GiGaMTCoreRunLib + Gaussino::GiGaMTFactoriesLib + Gaussino::GiGaMTDetFactoriesLib + Gaussino::MCTruthToEDMLib +) diff --git a/Sim/MCCollector/src/GetMCCollectorHitsAlg.cpp b/Sim/MCCollector/src/Components/GetMCCollectorHitsAlg.cpp similarity index 98% rename from Sim/MCCollector/src/GetMCCollectorHitsAlg.cpp rename to Sim/MCCollector/src/Components/GetMCCollectorHitsAlg.cpp index c52ea89d..2438c4b8 100755 --- a/Sim/MCCollector/src/GetMCCollectorHitsAlg.cpp +++ b/Sim/MCCollector/src/Components/GetMCCollectorHitsAlg.cpp @@ -15,7 +15,7 @@ // GiGaMT #include "Defaults/Locations.h" #include "GiGaMTCoreRun/G4EventProxy.h" -#include "GiGaMTCoreTruth/MCTruthConverter.h" +#include "GiGaMTCoreRun/MCTruthConverter.h" #include "MCTruthToEDM/LinkedParticleMCParticleLink.h" // local #include "MCCollectorHit.h" diff --git a/Sim/MCCollector/src/MCCollectorHit.cpp b/Sim/MCCollector/src/Components/MCCollectorHit.cpp similarity index 100% rename from Sim/MCCollector/src/MCCollectorHit.cpp rename to Sim/MCCollector/src/Components/MCCollectorHit.cpp diff --git a/Sim/MCCollector/src/MCCollectorHit.h b/Sim/MCCollector/src/Components/MCCollectorHit.h similarity index 100% rename from Sim/MCCollector/src/MCCollectorHit.h rename to Sim/MCCollector/src/Components/MCCollectorHit.h diff --git a/Sim/MCCollector/src/MCCollectorSensDet.cpp b/Sim/MCCollector/src/Components/MCCollectorSensDet.cpp similarity index 98% rename from Sim/MCCollector/src/MCCollectorSensDet.cpp rename to Sim/MCCollector/src/Components/MCCollectorSensDet.cpp index 52cbdc99..5b21473a 100755 --- a/Sim/MCCollector/src/MCCollectorSensDet.cpp +++ b/Sim/MCCollector/src/Components/MCCollectorSensDet.cpp @@ -12,8 +12,8 @@ // local #include "GiGaMTCoreMessage/IGiGaMessage.h" -#include "GiGaMTCoreTruth/GaussinoTrackInformation.h" -#include "GiGaMTFactories/GiGaMTG4SensDetFactory.h" +#include "GiGaMTCoreRun/GaussinoTrackInformation.h" +#include "GiGaMTDetFactories/GiGaMTG4SensDetFactory.h" #include "MCCollectorHit.h" // from CLHEP diff --git a/Sim/ParallelGeometry/CMakeLists.txt b/Sim/ParallelGeometry/CMakeLists.txt index 0b28dbb7..652050de 100644 --- a/Sim/ParallelGeometry/CMakeLists.txt +++ b/Sim/ParallelGeometry/CMakeLists.txt @@ -8,30 +8,31 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: ParallelGeometry -################################################################################ -gaudi_subdir(ParallelGeometry v1r0) - -gaudi_depends_on_subdirs(GaudiAlg - Sim/GiGaMTCore - Sim/GiGaMTFactories) - -AddHepMC3() -find_package(Boost) -find_package(CLHEP) - -include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${Geant4_INCLUDE_DIRS}) - +#[=======================================================================[.rst: +Sim/ParallelGeometry +-------------------- +#]=======================================================================] gaudi_add_library(ParallelGeometryLib - src/Lib/*.cpp - PUBLIC_HEADERS ParallelGeometry - INCLUDE_DIRS Sim/GiGaMTFactories ${RANGEV3_INCLUDE_DIRS} - LINK_LIBRARIES GaudiAlgLib GiGaMTCoreRunLib ${HEPMC3_LIBRARIES} ${GEANT4_LIBS}) + SOURCES + src/Lib/Physics.cpp + src/Lib/World.cpp + LINK + PUBLIC + XercesC::XercesC + Geant4::G4physicslists + Gaussino::GiGaMTPhysFactoriesLib + Gaussino::GiGaMTCoreRunLib +) gaudi_add_module(ParallelGeometry - src/Components/*.cpp - LINK_LIBRARIES ParallelGeometryLib) + SOURCES + src/Components/DefaultPhysicsFactory.cpp + src/Components/DefaultWorldFactory.cpp + LINK + Geant4::G4persistency + Gaussino::ParallelGeometryLib +) -gaudi_install_python_modules() -gaudi_add_test(QMTest QMTEST) +gaudi_install(PYTHON) +gaudi_generate_confuserdb() +gaudi_add_tests(QMTest) diff --git a/Sim/ParallelGeometry/ParallelGeometry/Physics.h b/Sim/ParallelGeometry/include/ParallelGeometry/Physics.h similarity index 100% rename from Sim/ParallelGeometry/ParallelGeometry/Physics.h rename to Sim/ParallelGeometry/include/ParallelGeometry/Physics.h diff --git a/Sim/ParallelGeometry/ParallelGeometry/PhysicsFactory.h b/Sim/ParallelGeometry/include/ParallelGeometry/PhysicsFactory.h similarity index 94% rename from Sim/ParallelGeometry/ParallelGeometry/PhysicsFactory.h rename to Sim/ParallelGeometry/include/ParallelGeometry/PhysicsFactory.h index 4661db22..7eac945f 100644 --- a/Sim/ParallelGeometry/ParallelGeometry/PhysicsFactory.h +++ b/Sim/ParallelGeometry/include/ParallelGeometry/PhysicsFactory.h @@ -12,8 +12,8 @@ // Geant4 #include "G4ParallelWorldPhysics.hh" // local -#include "GiGaMTFactories/GiGaMTG4PhysicsConstrFAC.h" -#include "GiGaMTFactories/GiGaMTG4PhysicsFactory.h" +#include "GiGaMTPhysFactories/GiGaMTG4PhysicsConstrFAC.h" +#include "GiGaMTPhysFactories/GiGaMTG4PhysicsFactory.h" #include "ParallelGeometry/Physics.h" namespace ParallelGeometry { diff --git a/Sim/ParallelGeometry/ParallelGeometry/PhysicsFactory.icpp b/Sim/ParallelGeometry/include/ParallelGeometry/PhysicsFactory.icpp similarity index 100% rename from Sim/ParallelGeometry/ParallelGeometry/PhysicsFactory.icpp rename to Sim/ParallelGeometry/include/ParallelGeometry/PhysicsFactory.icpp diff --git a/Sim/ParallelGeometry/ParallelGeometry/World.h b/Sim/ParallelGeometry/include/ParallelGeometry/World.h similarity index 100% rename from Sim/ParallelGeometry/ParallelGeometry/World.h rename to Sim/ParallelGeometry/include/ParallelGeometry/World.h diff --git a/Sim/ParallelGeometry/ParallelGeometry/WorldFactory.h b/Sim/ParallelGeometry/include/ParallelGeometry/WorldFactory.h similarity index 100% rename from Sim/ParallelGeometry/ParallelGeometry/WorldFactory.h rename to Sim/ParallelGeometry/include/ParallelGeometry/WorldFactory.h diff --git a/Sim/ParallelGeometry/ParallelGeometry/WorldFactory.icpp b/Sim/ParallelGeometry/include/ParallelGeometry/WorldFactory.icpp similarity index 100% rename from Sim/ParallelGeometry/ParallelGeometry/WorldFactory.icpp rename to Sim/ParallelGeometry/include/ParallelGeometry/WorldFactory.icpp diff --git a/Sim/SimInterfaces/CMakeLists.txt b/Sim/SimInterfaces/CMakeLists.txt index 51218c09..7ee25dfc 100644 --- a/Sim/SimInterfaces/CMakeLists.txt +++ b/Sim/SimInterfaces/CMakeLists.txt @@ -8,9 +8,8 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: SimInterface -################################################################################ -gaudi_subdir(SimInterfaces v1r0) - -gaudi_install_headers(SimInterfaces) +#[=======================================================================[.rst: +Sim/SimInterfaces +----------------- +#]=======================================================================] +gaudi_add_header_only_library(SimInterfacesLib) diff --git a/Sim/SimInterfaces/SimInterfaces/IG4MonitoringTool.h b/Sim/SimInterfaces/include/SimInterfaces/IG4MonitoringTool.h similarity index 100% rename from Sim/SimInterfaces/SimInterfaces/IG4MonitoringTool.h rename to Sim/SimInterfaces/include/SimInterfaces/IG4MonitoringTool.h diff --git a/Sim/SimInterfaces/SimInterfaces/IGaussinoTool.h b/Sim/SimInterfaces/include/SimInterfaces/IGaussinoTool.h similarity index 100% rename from Sim/SimInterfaces/SimInterfaces/IGaussinoTool.h rename to Sim/SimInterfaces/include/SimInterfaces/IGaussinoTool.h diff --git a/Sim/SimInterfaces/SimInterfaces/ISimSvc.h b/Sim/SimInterfaces/include/SimInterfaces/ISimSvc.h similarity index 100% rename from Sim/SimInterfaces/SimInterfaces/ISimSvc.h rename to Sim/SimInterfaces/include/SimInterfaces/ISimSvc.h diff --git a/Utils/CMakeLists.txt b/Utils/CMakeLists.txt index eb2d7f85..8292b246 100644 --- a/Utils/CMakeLists.txt +++ b/Utils/CMakeLists.txt @@ -8,9 +8,8 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### -################################################################################ -# Package: Utils -################################################################################ -gaudi_subdir(Utils v1r0) - -gaudi_install_headers(Utils) +#[=======================================================================[.rst: +Utils +----- +#]=======================================================================] +gaudi_add_header_only_library(UtilsLib) diff --git a/Utils/Utils/LocalTL.h b/Utils/include/Utils/LocalTL.h similarity index 100% rename from Utils/Utils/LocalTL.h rename to Utils/include/Utils/LocalTL.h diff --git a/Utils/Utils/ToolProperty.h b/Utils/include/Utils/ToolProperty.h similarity index 100% rename from Utils/Utils/ToolProperty.h rename to Utils/include/Utils/ToolProperty.h diff --git a/Utils/Utils/blockingconcurrentqueue.h b/Utils/include/Utils/blockingconcurrentqueue.h similarity index 100% rename from Utils/Utils/blockingconcurrentqueue.h rename to Utils/include/Utils/blockingconcurrentqueue.h diff --git a/Utils/Utils/concurrentqueue.h b/Utils/include/Utils/concurrentqueue.h similarity index 100% rename from Utils/Utils/concurrentqueue.h rename to Utils/include/Utils/concurrentqueue.h diff --git a/cmake/FindALPGEN.cmake b/cmake/FindALPGEN.cmake deleted file mode 100644 index 24d22f6f..00000000 --- a/cmake/FindALPGEN.cmake +++ /dev/null @@ -1,60 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find ALPGEN -# Defines: -# -# ALPGEN_FOUND -# ALPGEN_INCLUDE_DIR -# ALPGEN_INCLUDE_DIRS (not cached) -# ALPGEN_<component>_LIBRARY -# ALPGEN_<component>_FOUND -# ALPGEN_LIBRARIES (not cached) -# ALPGEN_LIBRARY_DIRS (not cached) -# ALPGEN_PYTHON_PATH -# ALPGEN_BINARY_PATH (not cached) - -# Enforce a minimal list if none is explicitly requested -if(NOT ALPGEN_FIND_COMPONENTS) - set(ALPGEN_FIND_COMPONENTS alpgen alpsho) -endif() - -foreach(component ${ALPGEN_FIND_COMPONENTS}) - find_library(ALPGEN_${component}_LIBRARY NAMES ${component}) - if (ALPGEN_${component}_LIBRARY) - set(ALPGEN_${component}_FOUND 1) - list(APPEND ALPGEN_LIBRARIES ${ALPGEN_${component}_LIBRARY}) - - get_filename_component(libdir ${ALPGEN_${component}_LIBRARY} PATH) - list(APPEND ALPGEN_LIBRARY_DIRS ${libdir}) - else() - set(ALPGEN_${component}_FOUND 0) - endif() - mark_as_advanced(ALPGEN_${component}_LIBRARY) -endforeach() - -if(ALPGEN_LIBRARY_DIRS) - list(REMOVE_DUPLICATES ALPGEN_LIBRARY_DIRS) -endif() - -find_file(ALPGEN_AUTHOR_DIR alpgen-author - HINTS ${ALPGEN_LIBRARY_DIRS} - PATH_SUFFIXES share ../../share) -mark_as_advanced(ALPGEN_AUTHOR_DIR) -set(ALPGEN_INCLUDE_DIRS ${ALPGEN_AUTHOR_DIR} ${ALPGEN_AUTHOR_DIR}/alplib) - -# handle the QUIETLY and REQUIRED arguments and set ALPGEN_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALPGEN DEFAULT_MSG ALPGEN_LIBRARY_DIRS ALPGEN_LIBRARIES ALPGEN_AUTHOR_DIR) - -mark_as_advanced(ALPGEN_FOUND) - -set(ALPGEN_ENVIRONMENT SET ALPGEN_AUTHOR_DIR "${ALPGEN_AUTHOR_DIR}") diff --git a/cmake/FindCRMC.cmake b/cmake/FindCRMC.cmake deleted file mode 100644 index a5ca3a18..00000000 --- a/cmake/FindCRMC.cmake +++ /dev/null @@ -1,44 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find CRMC -# Defines: -# -# CRMC_FOUND -# CRMC_HOME (not cached) -# CRMC_INCLUDE_DIR -# CRMC_INCLUDE_DIRS (not cached) -# CRMC_LIBRARY -# CRMC_LIBRARIES (not cached) -# CRMC_LIBRARY_DIRS (not cached) - - -find_path(CRMC_INCLUDE_DIR CRMCconfig.h - HINTS $ENV{CRMC_ROOT_DIR}/src - PATH_SUFFIXES src) - -if(CRMC_INCLUDE_DIR) - get_filename_component(CRMC_HOME "${CRMC_INCLUDE_DIR}" DIRECTORY) - set(CRMC_INCLUDE_DIRS "${CRMC_INCLUDE_DIR}") - set(CRMC_LIBRARY_DIRS "${CRMC_HOME}/lib") - set(CRMC_LIBRARIES "${CRMC_LIBRARY_DIRS}/libCrmcBasic.so" "${CRMC_LIBRARY_DIRS}/libHepEvtDummy.so") - -endif() - -mark_as_advanced(CRMC_INCLUDE_DIR) - -# handle the QUIETLY and REQUIRED arguments and set CRMC_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(CRMC DEFAULT_MSG CRMC_INCLUDE_DIR) - -mark_as_advanced(CRMC_FOUND) - -set(CRMC_ENVIRONMENT SET CRMC_TABS ${CRMC_HOME}/tabs) diff --git a/cmake/FindHIJING.cmake b/cmake/FindHIJING.cmake deleted file mode 100644 index 1a5037f3..00000000 --- a/cmake/FindHIJING.cmake +++ /dev/null @@ -1,51 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find HIJING -# Defines: -# -# HIJING_FOUND -# HIJING_INCLUDE_DIR -# HIJING_INCLUDE_DIRS (not cached) -# HIJING_<component>_LIBRARY -# HIJING_<component>_FOUND -# HIJING_LIBRARIES (not cached) -# HIJING_LIBRARY_DIRS (not cached) - -# Enforce a minimal list if none is explicitly requested -if(NOT HIJING_FIND_COMPONENTS) - set(HIJING_FIND_COMPONENTS hijing hijing_dummy) -endif() - -foreach(component ${HIJING_FIND_COMPONENTS}) - find_library(HIJING_${component}_LIBRARY NAMES ${component} - HINTS $ENV{HIJING_ROOT_DIR}/lib ${HIJING_ROOT_DIR}/lib) - if (HIJING_${component}_LIBRARY) - set(HIJING_${component}_FOUND 1) - list(APPEND HIJING_LIBRARIES ${HIJING_${component}_LIBRARY}) - - get_filename_component(libdir ${HIJING_${component}_LIBRARY} PATH) - list(APPEND HIJING_LIBRARY_DIRS ${libdir}) - else() - set(HIJING_${component}_FOUND 0) - endif() - mark_as_advanced(HIJING_${component}_LIBRARY) -endforeach() - -if(HIJING_LIBRARY_DIRS) - list(REMOVE_DUPLICATES HIJING_LIBRARY_DIRS) -endif() - -# handle the QUIETLY and REQUIRED arguments and set HIJING_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(HIJING DEFAULT_MSG HIJING_LIBRARIES CMAKE_Fortran_COMPILER) - -mark_as_advanced(HIJING_FOUND) diff --git a/cmake/FindHepMC3.cmake b/cmake/FindHepMC3.cmake new file mode 100644 index 00000000..3e1c5f2e --- /dev/null +++ b/cmake/FindHepMC3.cmake @@ -0,0 +1,61 @@ +############################################################################### +# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # +# # +# This software is distributed under the terms of the Apache License # +# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +# - Locate HepMC3 library +# Defines: +# Variables: +# HepMC3_FOUND +# HepMC3_INCLUDE_DIR +# HepMC3_INCLUDE_DIRS (not cached) +# HepMC3_<component>_LIBRARY +# HepMC3_LIBRARIES (not cached) +# HepMC3_LIBRARY_DIRS (not cached) +# Targets: +# HepMC3::HepMC3 (default) +# HepMC3::HepMC3search + +if(NOT HepMC3_FIND_COMPONENTS) + set(HepMC3_FIND_COMPONENTS "HepMC3" "HepMC3search") +endif() + +set(HepMC3_INCLUDE_DIR ${GAUSSINOEXTLIBS_PREFIX_DIR}/include) +mark_as_advanced(HepMC3_INCLUDE_DIR) + +foreach(component IN LISTS HepMC3_FIND_COMPONENTS) + find_library(HepMC3_${component}_LIBRARY + ${component} + PATHS ${GAUSSINOEXTLIBS_PREFIX_DIR}/lib) + mark_as_advanced(HepMC3_${component}_LIBRARY) + if(HepMC3_${component}_LIBRARY) + set(HepMC3_${component}_FOUND ${HepMC3_${component}_LIBRARY}) + list(APPEND HepMC3_LIBRARIES ${HepMC3_${component}_LIBRARY}) + get_filename_component(_comp_dir ${HepMC3_${component}_LIBRARY} DIRECTORY) + list(APPEND HepMC3_LIBRARY_DIRS ${_comp_dir}) + endif() +endforeach() + +# handle the QUIETLY and REQUIRED arguments and set HepMC_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +find_package_handle_standard_args(HepMC3 + HANDLE_COMPONENTS + VERSION_VAR 0.1 + REQUIRED_VARS HepMC3_INCLUDE_DIR HepMC3_LIBRARIES +) + +foreach(component IN LISTS HepMC3_FIND_COMPONENTS) + if(NOT TARGET HepMC3::${component}) + add_library(HepMC3::${component} UNKNOWN IMPORTED) + set_target_properties(HepMC3::${component} PROPERTIES IMPORTED_LOCATION ${HepMC3_${component}_LIBRARY}) + target_include_directories(HepMC3::${component} + SYSTEM INTERFACE "${GAUSSINOEXTLIBS_PREFIX_DIR}/include" + "${GAUSSINOEXTLIBS_PREFIX_DIR}/share/HepMC3/interfaces") + endif() +endforeach() diff --git a/cmake/FindHerwig++.cmake b/cmake/FindHerwig++.cmake deleted file mode 100644 index dfd61d6d..00000000 --- a/cmake/FindHerwig++.cmake +++ /dev/null @@ -1,51 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find Herwig++ -# Defines: -# -# HERWIG++_FOUND -# HERWIG++_EXECUTABLE -# HERWIG++_BINARY_PATH (not cached) -# HERWIG++_HOME (not cached) -# HERWIG++_INCLUDE_DIR -# HERWIG++_INCLUDE_DIRS (not cached) -# HERWIG++_LIBRARY_DIR -# HERWIG++_LIBRARY_DIRS (not cached) - -find_program(HERWIG++_EXECUTABLE Herwig++ - HINTS ${HERWIG++_ROOT_DIR}/bin - $ENV{HERWIGPP_ROOT_DIR}/bin - ${HERWIGPP_ROOT_DIR}/bin) -if(HERWIG++_EXECUTABLE) - get_filename_component(HERWIG++_BINARY_PATH ${HERWIG++_EXECUTABLE} PATH) -endif() - -find_file(HERWIG++_INCLUDE_DIR Herwig++ - HINTS ${HERWIG++_ROOT_DIR}/include - $ENV{HERWIGPP_ROOT_DIR}/include - ${HERWIGPP_ROOT_DIR}/include - PATH_SUFFIXES include) -set(HERWIG++_INCLUDE_DIRS ${HERWIG++_INCLUDE_DIR}) -find_file(HERWIG++_LIBRARY_DIR Herwig++ - HINTS ${HERWIG++_ROOT_DIR}/lib - $ENV{HERWIGPP_ROOT_DIR}/lib - ${HERWIGPP_ROOT_DIR}/lib - PATH_SUFFIXES lib) -set(HERWIG++_LIBRARY_DIRS ${HERWIG++_LIBRARY_DIR}) - -mark_as_advanced(HERWIG++_EXECUTABLE HERWIG++_INCLUDE_DIR HERWIG++_LIBRARY_DIR HERWIG++_EXECUTABLE) - -# handle the QUIETLY and REQUIRED arguments and set HERWIG++_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Herwig++ DEFAULT_MSG HERWIG++_INCLUDE_DIR HERWIG++_LIBRARY_DIR) - -mark_as_advanced(HERWIG++_FOUND) diff --git a/cmake/FindLHAPDF.cmake b/cmake/FindLHAPDF.cmake deleted file mode 100644 index 9db74a98..00000000 --- a/cmake/FindLHAPDF.cmake +++ /dev/null @@ -1,39 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find LHAPDF -# Defines: -# -# LHAPDF_FOUND -# LHAPDF_INCLUDE_DIR -# LHAPDF_INCLUDE_DIRS (not cached) -# LHAPDF_LIBRARY -# LHAPDF_LIBRARIES (not cached) -# LHAPDF_LIBRARY_DIRS (not cached) - -find_library(LHAPDF_LIBRARY NAMES LHAPDF - HINTS $ENV{LHAPDF_ROOT_DIR}/lib ${LHAPDF_ROOT_DIR}/lib) - -find_path(LHAPDF_INCLUDE_DIR LHAPDF/LHAPDF.h - HINTS $ENV{LHAPDF_ROOT_DIR}/include ${LHAPDF_ROOT_DIR}/include) - -mark_as_advanced(LHAPDF_INCLUDE_DIR LHAPDF_LIBRARY) - -# handle the QUIETLY and REQUIRED arguments and set LHAPDF_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(LHAPDF DEFAULT_MSG LHAPDF_INCLUDE_DIR LHAPDF_LIBRARY) - -set(LHAPDF_LIBRARIES ${LHAPDF_LIBRARY}) -get_filename_component(LHAPDF_LIBRARY_DIRS ${LHAPDF_LIBRARY} PATH) - -set(LHAPDF_INCLUDE_DIRS ${LHAPDF_INCLUDE_DIR}) - -mark_as_advanced(LHAPDF_FOUND) diff --git a/cmake/FindPOWHEG-BOX.cmake b/cmake/FindPOWHEG-BOX.cmake deleted file mode 100644 index 7d073cfc..00000000 --- a/cmake/FindPOWHEG-BOX.cmake +++ /dev/null @@ -1,25 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# Try to find POWHEG-BOX -# Defines: -# -# POWHEG-BOX_BINARY_PATH - -find_path(POWHEG-BOX_BINARY_PATH NAMES ZZ Dijet - HINTS ${powhegbox_home}/bin - PATH_SUFFIXES bin) - -# handle the QUIETLY and REQUIRED arguments and set POWHEG-BOX_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(POWHEG-BOX DEFAULT_MSG POWHEG-BOX_BINARY_PATH) - -mark_as_advanced(POWHEG-BOX_FOUND) diff --git a/cmake/FindPhotos++.cmake b/cmake/FindPhotos++.cmake deleted file mode 100644 index 2095a0ec..00000000 --- a/cmake/FindPhotos++.cmake +++ /dev/null @@ -1,62 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find Photos++ -# Defines: -# -# PHOTOS++_FOUND -# PHOTOS++_INCLUDE_DIR -# PHOTOS++_INCLUDE_DIRS (not cached) -# PHOTOS++_<component>_LIBRARY -# PHOTOS++_<component>_FOUND -# PHOTOS++_LIBRARIES (not cached) -# PHOTOS++_LIBRARY_DIRS (not cached) - -# Enforce a minimal list if none is explicitly requested -if(NOT PHOTOS++_FIND_COMPONENTS) - set(PHOTOS++_FIND_COMPONENTS Fortran CxxInterface # versions <3.58 - pp HEPEVT ppHepMC) # versions >=3.58 -endif() - -foreach(component ${PHOTOS++_FIND_COMPONENTS}) - find_library(PHOTOS++_${component}_LIBRARY NAMES Photos${component} - HINTS ${PHOTOS++_ROOT_DIR}/lib - $ENV{PHOTOSPP_ROOT_DIR}/lib - ${PHOTOSPP_ROOT_DIR}/lib) - if (PHOTOS++_${component}_LIBRARY) - set(PHOTOS++_${component}_FOUND 1) - list(APPEND PHOTOS++_LIBRARIES ${PHOTOS++_${component}_LIBRARY}) - - get_filename_component(libdir ${PHOTOS++_${component}_LIBRARY} PATH) - list(APPEND PHOTOS++_LIBRARY_DIRS ${libdir}) - else() - set(PHOTOS++_${component}_FOUND 0) - endif() - mark_as_advanced(PHOTOS++_${component}_LIBRARY) -endforeach() - -if(PHOTOS++_LIBRARY_DIRS) - list(REMOVE_DUPLICATES PHOTOS++_LIBRARY_DIRS) -endif() - -find_path(PHOTOS++_INCLUDE_DIR Photos/Photos.h - HINTS ${PHOTOS++_ROOT_DIR}/include - $ENV{PHOTOSPP_ROOT_DIR}/include - ${PHOTOSPP_ROOT_DIR}/include) - -set(PHOTOS++_INCLUDE_DIRS ${PHOTOS++_INCLUDE_DIR}) -mark_as_advanced(PHOTOS++_INCLUDE_DIR) - -# handle the QUIETLY and REQUIRED arguments and set PHOTOS++_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Photos++ DEFAULT_MSG PHOTOS++_INCLUDE_DIR PHOTOS++_LIBRARIES) - -mark_as_advanced(PHOTOS++_FOUND) diff --git a/cmake/FindPythia6.cmake b/cmake/FindPythia6.cmake deleted file mode 100644 index 18837644..00000000 --- a/cmake/FindPythia6.cmake +++ /dev/null @@ -1,56 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find Pythia6 -# Defines: -# -# PYTHIA6_FOUND -# PYTHIA6_INCLUDE_DIR -# PYTHIA6_INCLUDE_DIRS (not cached) -# PYTHIA6_<component>_LIBRARY -# PYTHIA6_<component>_FOUND -# PYTHIA6_LIBRARIES (not cached) -# PYTHIA6_LIBRARY_DIRS (not cached) - -# Enforce a minimal list if none is explicitly requested -if(NOT Pythia6_FIND_COMPONENTS) - set(Pythia6_FIND_COMPONENTS pythia6 pythia6_dummy) -endif() - -foreach(component ${Pythia6_FIND_COMPONENTS}) - find_library(PYTHIA6_${component}_LIBRARY NAMES ${component} - HINTS $ENV{PYTHIA6_ROOT_DIR}/lib ${PYTHIA6_ROOT_DIR}/lib) - if (PYTHIA6_${component}_LIBRARY) - set(PYTHIA6_${component}_FOUND 1) - list(APPEND PYTHIA6_LIBRARIES ${PYTHIA6_${component}_LIBRARY}) - - get_filename_component(libdir ${PYTHIA6_${component}_LIBRARY} PATH) - list(APPEND PYTHIA6_LIBRARY_DIRS ${libdir}) - else() - set(PYTHIA6_${component}_FOUND 0) - endif() - mark_as_advanced(PYTHIA6_${component}_LIBRARY) -endforeach() - -if(PYTHIA6_LIBRARY_DIRS) - list(REMOVE_DUPLICATES PYTHIA6_LIBRARY_DIRS) -endif() - -find_path(PYTHIA6_INCLUDE_DIR general_pythia.inc - HINTS $ENV{PYTHIA6_ROOT_DIR}/include ${PYTHIA6_ROOT_DIR}/include) -set(PYTHIA6_INCLUDE_DIRS ${PYTHIA6_INCLUDE_DIR}) -mark_as_advanced(PYTHIA6_INCLUDE_DIR) - -# handle the QUIETLY and REQUIRED arguments and set PYTHIA6_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Pythia6 DEFAULT_MSG PYTHIA6_INCLUDE_DIR PYTHIA6_LIBRARIES CMAKE_Fortran_COMPILER) - -mark_as_advanced(PYTHIA6_FOUND) diff --git a/cmake/FindPythia8.cmake b/cmake/FindPythia8.cmake index d485487d..477d83bf 100644 --- a/cmake/FindPythia8.cmake +++ b/cmake/FindPythia8.cmake @@ -71,3 +71,8 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Pythia8 DEFAULT_MSG PYTHIA8_INCLUDE_DIR PYTHIA set(PYTHIA8_INCLUDE_DIRS ${PYTHIA8_INCLUDE_DIR}) mark_as_advanced(PYTHIA8_FOUND) + +# FIXME: well-defined target +add_library(Pythia8::Pythia8 UNKNOWN IMPORTED) +set_target_properties(Pythia8::Pythia8 PROPERTIES IMPORTED_LOCATION ${PYTHIA8_LIBRARIES}) +target_include_directories(Pythia8::Pythia8 SYSTEM INTERFACE ${PYTHIA8_INCLUDE_DIR}) diff --git a/cmake/FindRivet.cmake b/cmake/FindRivet.cmake deleted file mode 100644 index 0610aadc..00000000 --- a/cmake/FindRivet.cmake +++ /dev/null @@ -1,42 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find Rivet -# Defines: -# -# RIVET_FOUND -# RIVET_INCLUDE_DIR -# RIVET_INCLUDE_DIRS (not cached) -# RIVET_LIBRARY -# RIVET_LIBRARIES (not cached) -# RIVET_LIBRARY_DIRS (not cached) - -find_library(RIVET_LIBRARY NAMES Rivet) - -find_path(RIVET_INCLUDE_DIR Rivet/Rivet.hh) - -find_program(RIVET_EXECUTABLE NAMES rivet) -find_program(RIVET_buildplugin_EXECUTABLE NAMES rivet-buildplugin) - -mark_as_advanced(RIVET_INCLUDE_DIR RIVET_LIBRARY RIVET_EXECUTABLE RIVET_buildplugin_EXECUTABLE) - -# handle the QUIETLY and REQUIRED arguments and set Rivet_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Rivet DEFAULT_MSG RIVET_INCLUDE_DIR RIVET_LIBRARY RIVET_EXECUTABLE RIVET_buildplugin_EXECUTABLE) - -set(RIVET_LIBRARIES ${RIVET_LIBRARY}) -get_filename_component(RIVET_LIBRARY_DIRS ${RIVET_LIBRARY} PATH) - -set(RIVET_INCLUDE_DIRS ${RIVET_INCLUDE_DIR}) - -get_filename_component(RIVET_BINARY_PATH ${RIVET_EXECUTABLE} PATH) - -mark_as_advanced(Rivet_FOUND) diff --git a/cmake/FindTauola++.cmake b/cmake/FindTauola++.cmake deleted file mode 100644 index 33eccf9c..00000000 --- a/cmake/FindTauola++.cmake +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find Tauola++ -# Defines: -# -# TAUOLA++_FOUND -# TAUOLA++_INCLUDE_DIR -# TAUOLA++_INCLUDE_DIRS (not cached) -# TAUOLA++_<component>_LIBRARY -# TAUOLA++_<component>_FOUND -# TAUOLA++_LIBRARIES (not cached) -# TAUOLA++_LIBRARY_DIRS (not cached) - -# Enforce a minimal list if none is explicitly requested -if(NOT Tauola++_FIND_COMPONENTS) - set(Tauola++_FIND_COMPONENTS Fortran CxxInterface) -endif() - -#message(STATUS "Tauola++ CMAKE_PREFIX_PATH") -#foreach(_x ${CMAKE_PREFIX_PATH}) -# message(STATUS "Tauola++ -- ${_x}") -#endforeach() - -foreach(component ${Tauola++_FIND_COMPONENTS}) - find_library(TAUOLA++_${component}_LIBRARY NAMES Tauola${component} - HINTS ${TAUOLA++_ROOT_DIR}/lib - $ENV{TAUOLAPP_ROOT_DIR}/lib ${TAUOLAPP_ROOT_DIR}/lib) - if (TAUOLA++_${component}_LIBRARY) - set(TAUOLA++_${component}_FOUND 1) - list(APPEND TAUOLA++_LIBRARIES ${TAUOLA++_${component}_LIBRARY}) - - get_filename_component(libdir ${TAUOLA++_${component}_LIBRARY} PATH) - list(APPEND TAUOLA++_LIBRARY_DIRS ${libdir}) - else() - set(TAUOLA++_${component}_FOUND 0) - endif() - mark_as_advanced(TAUOLA++_${component}_LIBRARY) -endforeach() - -if(TAUOLA++_LIBRARY_DIRS) - list(REMOVE_DUPLICATES TAUOLA++_LIBRARY_DIRS) -endif() - -find_path(TAUOLA++_INCLUDE_DIR Tauola/Tauola.h - HINTS ${TAUOLA++_ROOT_DIR}/include - $ENV{TAUOLAPP_ROOT_DIR}/include ${TAUOLAPP_ROOT_DIR}/include) -set(TAUOLA++_INCLUDE_DIRS ${TAUOLA++_INCLUDE_DIR}) -mark_as_advanced(TAUOLA++_INCLUDE_DIR) - -# handle the QUIETLY and REQUIRED arguments and set TAUOLA++_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Tauola++ DEFAULT_MSG TAUOLA++_INCLUDE_DIR TAUOLA++_LIBRARIES) - -mark_as_advanced(TAUOLA++_FOUND) diff --git a/cmake/FindThePEG.cmake b/cmake/FindThePEG.cmake deleted file mode 100644 index c1a4e440..00000000 --- a/cmake/FindThePEG.cmake +++ /dev/null @@ -1,40 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find ThePEG -# Defines: -# -# THEPEG_FOUND -# THEPEG_INCLUDE_DIR -# THEPEG_INCLUDE_DIRS (not cached) -# THEPEG_LIBRARY -# THEPEG_LIBRARIES (not cached) -# THEPEG_LIBRARY_DIRS (not cached) - -find_path(THEPEG_INCLUDE_DIR ThePEG/Config/ThePEG.h - HINTS $ENV{THEPEG_ROOT_DIR}/include ${THEPEG_ROOT_DIR}/include) - -find_library(THEPEG_LIBRARY NAMES ThePEG - HINTS $ENV{THEPEG_ROOT_DIR}/lib ${THEPEG_ROOT_DIR}/lib - PATH_SUFFIXES ThePEG) - -mark_as_advanced(THEPEG_INCLUDE_DIR THEPEG_LIBRARY) - -# handle the QUIETLY and REQUIRED arguments and set ThePEG_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(ThePEG DEFAULT_MSG THEPEG_INCLUDE_DIR THEPEG_LIBRARY) - -mark_as_advanced(THEPEG_FOUND) - -set(THEPEG_LIBRARIES ${THEPEG_LIBRARY}) -get_filename_component(THEPEG_LIBRARY_DIRS ${THEPEG_LIBRARY} PATH) - -set(THEPEG_INCLUDE_DIRS ${THEPEG_INCLUDE_DIR}) diff --git a/cmake/FindYODA.cmake b/cmake/FindYODA.cmake deleted file mode 100644 index 6e3f042f..00000000 --- a/cmake/FindYODA.cmake +++ /dev/null @@ -1,43 +0,0 @@ -############################################################################### -# (c) Copyright 2021 CERN for the benefit of the LHCb and FCC Collaborations # -# # -# This software is distributed under the terms of the Apache License # -# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -# - Try to find YODA -# Defines: -# -# YODA_FOUND -# YODA_HOME (not cached) -# YODA_INCLUDE_DIRS (not cached) -# YODA_LIBRARY -# YODA_LIBRARIES (not cached) -# YODA_LIBRARY_DIRS (not cached) - - -find_library(YODA_LIBRARY YODA - HINTS $ENV{YODA_ROOT_DIR}/lib) - -if(YODA_LIBRARY) - get_filename_component(YODA_LIBRARY_DIRS "${YODA_LIBRARY}" DIRECTORY) - get_filename_component(YODA_HOME "${YODA_LIBRARY_DIRS}" DIRECTORY) - set(YODA_INCLUDE_DIRS "${YODA_HOME}/include") - set(YODA_LIBRARIES "${YODA_LIBRARY}") - -endif() - -mark_as_advanced(YODA_LIBRARY) - -# handle the QUIETLY and REQUIRED arguments and set YODA_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(YODA DEFAULT_MSG YODA_LIBRARY) - -mark_as_advanced(YODA_FOUND) - -set(YODA_PYTHON_PATH ${YODA_HOME}/lib/python${Python_config_version_twodigit}/site-packages) -set(YODA_BINARY_PATH ${YODA_HOME}/bin) diff --git a/cmake/GaussinoConfig.cmake.in b/cmake/GaussinoConfig.cmake.in new file mode 100644 index 00000000..105ef0b4 --- /dev/null +++ b/cmake/GaussinoConfig.cmake.in @@ -0,0 +1,41 @@ +cmake_policy(PUSH) +cmake_policy(VERSION 3.15) + +@PACKAGE_INIT@ + +set(@PROJECT_NAME_UPCASE@_PREFIX_DIR "${PACKAGE_PREFIX_DIR}") + +if(PACKAGE_PREFIX_DIR MATCHES "/InstallArea/") + get_filename_component(@PROJECT_NAME_UPCASE@_PROJECT_ROOT "${PACKAGE_PREFIX_DIR}/../.." ABSOLUTE) +else() + set(@PROJECT_NAME_UPCASE@_PROJECT_ROOT "${PACKAGE_PREFIX_DIR}") +endif() +@CONFIG_OPTIONS@ +list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) +include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Dependencies.cmake) +@CONFIG_IMPORT_TARGETS@ +# environment +gaussino_env(@ENVIRONMENT@) + +if(NOT TARGET target_runtime_paths) + add_custom_target(target_runtime_paths) +endif() +if(EXISTS "${@PROJECT_NAME_UPCASE@_PREFIX_DIR}/bin") + _gaudi_runtime_prepend(path ${@PROJECT_NAME_UPCASE@_PREFIX_DIR}/bin) +endif() +if(EXISTS "${@PROJECT_NAME_UPCASE@_PREFIX_DIR}/lib") + _gaudi_runtime_prepend(ld_library_path ${@PROJECT_NAME_UPCASE@_PREFIX_DIR}/lib) +endif() +if(EXISTS "${@PROJECT_NAME_UPCASE@_PREFIX_DIR}/python") + _gaudi_runtime_prepend(pythonpath ${@PROJECT_NAME_UPCASE@_PREFIX_DIR}/python) +endif() +if(EXISTS "${@PROJECT_NAME_UPCASE@_PREFIX_DIR}/include") + _gaudi_runtime_prepend(root_include_path ${@PROJECT_NAME_UPCASE@_PREFIX_DIR}/include) +endif() + +if(NOT @PROJECT_NAME@_FIND_QUIETLY) + message(STATUS "Found @PROJECT_NAME@: ${CMAKE_CURRENT_LIST_DIR} (found version @PROJECT_VERSION@)") +endif() + +cmake_policy(POP) + diff --git a/cmake/GaussinoConfigUtils.cmake b/cmake/GaussinoConfigUtils.cmake new file mode 100644 index 00000000..1b9070a2 --- /dev/null +++ b/cmake/GaussinoConfigUtils.cmake @@ -0,0 +1,309 @@ +############################################################################### +# (c) Copyright 2022 CERN for the benefit of the LHCb and FCC Collaborations # +# # +# This software is distributed under the terms of the Apache License # +# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### + + +# copied & modified from LHCbConfigUtils.cmake +set(GAUSSINO_UNUSED_SUBDIR_MESSAGE_TYPE "WARNING" + CACHE STRING "Message type for detected unused subdirs") +# copied & modified from LHCbConfigUtils.cmake +set(GAUSSINO_UNUSED_SOURCE_MESSAGE_TYPE "WARNING" + CACHE STRING "Message type for detected unused source files") + + +function(gaussino_env) + # copied & modified from lhcb_env in LHCbConfigUtils.cmake + message(DEBUG "gaussino_env(${ARGV})") + if(ARGC GREATER 0 AND ARGV0 STREQUAL "PRIVATE") + # drop the flag and do not propagate the change downstream + list(REMOVE_AT ARGV 0) + else() + # not PRIVATE, so propagate the change downstream + set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_ENVIRONMENT ${ARGV}) + endif() + if(NOT TARGET target_runtime_paths) + # this usually means we are not using GaudiToolbox.cmake, like in old + # style projects + return() + endif() + while(ARGV) + list(POP_FRONT ARGV action variable value) + if(action STREQUAL "SET") + set_property(TARGET target_runtime_paths APPEND_STRING + PROPERTY extra_commands "export ${variable}=${value}\n") + elseif(action STREQUAL "PREPEND") + set_property(TARGET target_runtime_paths APPEND_STRING + PROPERTY extra_commands "export ${variable}=${value}:\$${variable}\n") + elseif(action STREQUAL "APPEND") + set_property(TARGET target_runtime_paths APPEND_STRING + PROPERTY extra_commands "export ${variable}=\$${variable}:${value}\n") + elseif(action STREQUAL "DEFAULT") + set_property(TARGET target_runtime_paths APPEND_STRING + PROPERTY extra_commands "export ${variable}=\${${variable}:-${value}}\n") + else() + message(FATAL_ERROR "invalid environment action ${action}") + endif() + endwhile() +endfunction() + +macro(gaussino_add_subdirectories) + # copied & modified from lhcb_add_subdirectories in LHCbConfigUtils.cmake + message(STATUS "Adding ${ARGC} subdirectories:") + set(gaussino_add_subdirectories_index 0) + foreach(subdir IN ITEMS ${ARGN}) + math(EXPR gaussino_add_subdirectories_index "${gaussino_add_subdirectories_index} + 1") + math(EXPR gaussino_add_subdirectories_progress "${gaussino_add_subdirectories_index} * 100 / ${ARGC}") + if(gaussino_add_subdirectories_progress LESS 10) + set(gaussino_add_subdirectories_progress " ${gaussino_add_subdirectories_progress}") + elseif(gaussino_add_subdirectories_progress LESS 100) + set(gaussino_add_subdirectories_progress " ${gaussino_add_subdirectories_progress}") + endif() + message(STATUS " (${gaussino_add_subdirectories_progress}%) ${subdir}") + add_subdirectory(${subdir}) + string(TOUPPER "${subdir}ROOT" root_var) + string(REGEX REPLACE ".*/" "" root_var "${root_var}") + gaussino_env(SET "${root_var}" "${CMAKE_CURRENT_SOURCE_DIR}/${subdir}") + endforeach() +endmacro() + +function(gaussino_initialize_configuration) + # copied & modified from lhcb_env in LHCbConfigUtils.cmake + + # Optionally enable compatibility with old-style CMake configurations, via helper module + option(GAUDI_LEGACY_CMAKE_SUPPORT "Enable compatibility with old-style CMake builds" "$ENV{GAUDI_LEGACY_CMAKE_SUPPORT}") + + # default install prefix when building in legacy mode + # note: this doplicates a bit of code in LegacyGaudiCMakeSupport.cmake, but we need to set CMAKE_INSTALL_PREFIX + # before we use it later in this macro (and before we can include LegacyGaudiCMakeSupport.cmake) + if(GAUDI_LEGACY_CMAKE_SUPPORT) + # make sure we have a BINARY_TAG CMake variable set + if(NOT BINARY_TAG) + if(NOT "$ENV{BINARY_TAG}" STREQUAL "") + set(BINARY_TAG $ENV{BINARY_TAG}) + elseif(LHCB_PLATFORM) + set(BINARY_TAG ${LHCB_PLATFORM}) + else() + message(AUTHOR_WARNING "BINARY_TAG not set") + endif() + endif() + + if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/InstallArea/${BINARY_TAG}" + CACHE PATH "Install prefix" FORCE) + endif() + endif() + + # environment for the project + gaussino_env(PREPEND PATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}") + gaussino_env(PREPEND LD_LIBRARY_PATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") + if(NOT CMAKE_INSTALL_LIBDIR STREQUAL GAUDI_INSTALL_PLUGINDIR) + gaussino_env(PREPEND LD_LIBRARY_PATH "${CMAKE_INSTALL_PREFIX}/${GAUDI_INSTALL_PLUGINDIR}") + endif() + gaussino_env(PREPEND PYTHONPATH "${CMAKE_INSTALL_PREFIX}/${GAUDI_INSTALL_PYTHONDIR}") + gaussino_env(PREPEND ROOT_INCLUDE_PATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") + + # override GaudiToolbox internal macro to use gaussino_env + macro(_gaudi_runtime_prepend runtime value) + string(TOUPPER "${runtime}" _runtime_var) + gaussino_env(PRIVATE PREPEND "${_runtime_var}" "${value}") + endmacro() +endfunction() + +function(gaussino_finalize_configuration) + # copied & modified from gaussino_finalize_configuration in LHCbConfigUtils.cmake + # environment for data packages + get_property(data_packages_found GLOBAL PROPERTY DATA_PACKAGES_FOUND) + foreach(data_package IN LISTS data_packages_found) + if(data_package MATCHES "^([^:]*):(.*)\$") + set(data_package ${CMAKE_MATCH_1}) + endif() + string(TOUPPER "${data_package}" DP_NAME) + string(REGEX REPLACE ".*/" "" DP_NAME "${DP_NAME}") + gaussino_env(PRIVATE DEFAULT "${DP_NAME}ROOT" "${${data_package}_ROOT_DIR}") + if(IS_DIRECTORY "${${data_package}_ROOT_DIR}/options") + gaussino_env(PRIVATE SET "${DP_NAME}OPTS" "\${${DP_NAME}ROOT}/options") + string(APPEND datapkg_env "export ${DP_NAME}OPTS=${${data_package}_ROOT_DIR}/options\n") + endif() + if(IS_DIRECTORY "${${data_package}_ROOT_DIR}/python") + gaussino_env(PRIVATE PREPEND "PYTHONPATH" "\${${DP_NAME}ROOT}/python") + endif() + endforeach() + + # environment used by lbexec + gaussino_env(PRIVATE DEFAULT "GAUDIAPPNAME" "${CMAKE_PROJECT_NAME}") + gaussino_env(PRIVATE DEFAULT "GAUDIAPPVERSION" "${CMAKE_PROJECT_VERSION}") + + set_property(TARGET target_runtime_paths APPEND_STRING + PROPERTY extra_commands "# remove duplicates\neval $(python3 -c \"import os; print(*('export {}={} ;'.format(n, ':'.join(dict.fromkeys(os.environ.get(n,'').split(':')))) for n in ('PATH','PYTHONPATH','LD_LIBRARY_PATH','ROOT_INCLUDE_PATH')),sep='\\n')\")\n") + + include(CMakePackageConfigHelpers) + # special variables needed in the config file + string(TOUPPER "${PROJECT_NAME}" PROJECT_NAME_UPCASE) + get_property(packages_found GLOBAL PROPERTY PACKAGES_FOUND) + get_property(ENVIRONMENT GLOBAL PROPERTY ${PROJECT_NAME}_ENVIRONMENT) + string(REPLACE "${PROJECT_SOURCE_DIR}" "\${${PROJECT_NAME_UPCASE}_PROJECT_ROOT}" + ENVIRONMENT "${ENVIRONMENT}") + foreach(pack IN LISTS packages_found) + string(TOUPPER "${pack}" PROJ) + if(DEFINED ${PROJ}_PROJECT_ROOT) + string(REPLACE "${${PROJ}_PROJECT_ROOT}" "\${${PROJ}_PROJECT_ROOT}" + ENVIRONMENT "${ENVIRONMENT}") + endif() + endforeach() + # record "persistent options" for downstream projects + set(CONFIG_OPTIONS "") + foreach(option IN LISTS ${PROJECT_NAME}_PERSISTENT_OPTIONS) + if(DEFINED ${option}) + string(APPEND CONFIG_OPTIONS "set(${option} ${${option}} CACHE BOOL \"value used at compile time for ${option}\" FORCE)\n") + endif() + endforeach() + if(CONFIG_OPTIONS) # this is just to make the generated file nicer + string(PREPEND CONFIG_OPTIONS "\n# Options used when compiling\n") + endif() + # record versions of upstream LHCb projects + set(DEPS_VERSIONS "") + foreach(pack IN LISTS packages_found) + # we want to record the versions of projects with /InstallArea/ + # as we usually have multiple versions available in the search path + # and we want to pick up the same version that was used during the build + if("${${pack}_DIR}${${pack}_ROOT_DIR}" MATCHES "/InstallArea/" AND "${${pack}_VERSION}" MATCHES "^[0-9.]+$") + string(APPEND DEPS_VERSIONS + "if(NOT DEFINED ${pack}_EXACT_VERSION)\n" + " set(${pack}_EXACT_VERSION ${${pack}_VERSION} CACHE STRING \"Version of ${pack} used in upstream builds\")\n" + " mark_as_advanced(${pack}_EXACT_VERSION)\n" + "elseif(NOT ${pack}_EXACT_VERSION STREQUAL \"${${pack}_VERSION}\")\n" + " message(WARNING \"Requested version of ${pack} (\${${pack}_EXACT_VERSION}) differs from that used for build (${${pack}_VERSION})\")\n" + "endif()\n") + endif() + endforeach() + if(DEPS_VERSIONS) + string(APPEND CONFIG_OPTIONS "\n# Versions of upstream projects used for the build\n${DEPS_VERSIONS}") + endif() + + if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND NOT "${ARGV0}" STREQUAL "NO_EXPORT") + # install exports only if we are a master project we were not given the "NO_EXPORT" option + install(EXPORT ${PROJECT_NAME} NAMESPACE ${PROJECT_NAME}:: + FILE "${PROJECT_NAME}Targets.cmake" + DESTINATION "${GAUDI_INSTALL_CONFIGDIR}") + set(CONFIG_IMPORT_TARGETS "include(\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake)\n") + endif() + + # generate config files + configure_package_config_file( + ${PROJECT_SOURCE_DIR}/cmake/GaussinoConfig.cmake.in ${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION "${GAUDI_INSTALL_CONFIGDIR}" + PATH_VARS + CMAKE_INSTALL_BINDIR + CMAKE_INSTALL_LIBDIR + CMAKE_INSTALL_INCLUDEDIR + GAUDI_INSTALL_PLUGINDIR + GAUDI_INSTALL_PYTHONDIR + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) + write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake + COMPATIBILITY AnyNewerVersion) + + gaudi_generate_version_header_file() + + gaudi_install(CMAKE + cmake/${PROJECT_NAME}Dependencies.cmake + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + ) + if(EXISTS lhcbproject.yml) + gaudi_install(CMAKE lhcbproject.yml) + endif() + + # check that we actually build everything in the project + # - check all subdirs are included (except for those listed in GAUSSINO_IGNORE_SUBDIRS) + get_property(added_subdirs DIRECTORY PROPERTY SUBDIRECTORIES) + file(GLOB_RECURSE detected_subdirs "*/CMakeLists.txt") + if(detected_subdirs) + set(missed_subdirs) + list(TRANSFORM detected_subdirs REPLACE "/CMakeLists.txt" "") + list(SORT detected_subdirs) + foreach(subdir IN LISTS detected_subdirs) + list(FIND added_subdirs ${subdir} idx) + if(idx STREQUAL "-1" AND NOT subdir MATCHES "^${CMAKE_BINARY_DIR}/.*") + file(GLOB subdir RELATIVE "${PROJECT_SOURCE_DIR}" ${subdir}) + list(APPEND missed_subdirs ${subdir}) + endif() + endforeach() + if(missed_subdirs AND GAUSSINO_IGNORE_SUBDIRS) + list(REMOVE_ITEM missed_subdirs ${GAUSSINO_IGNORE_SUBDIRS}) + endif() + if(missed_subdirs) + list(JOIN missed_subdirs "\n - " missed_subdirs) + message(${GAUSSINO_UNUSED_SUBDIR_MESSAGE_TYPE} + "Project ${PROJECT_NAME} contains subdirectories that are not used:\n - ${missed_subdirs}\n") + endif() + endif() + # - check for all files (*.cpp and *.cxx in source directories) + if(NOT GAUSSINO_UNUSED_SOURCE_MESSAGE_TYPE STREQUAL "IGNORE") + # for each directory (including the top one) we get the targets and for + # each target we get the source files excluding absolute paths + # (which means also those in the build directory), then we prefix the subdir + # path + set(used_sources) + list(PREPEND added_subdirs ${PROJECT_SOURCE_DIR}) + foreach(subdir IN LISTS added_subdirs) + get_property(targets DIRECTORY ${subdir} PROPERTY BUILDSYSTEM_TARGETS) + foreach(target IN LISTS targets) + get_target_property(target_type ${target} TYPE) + if(target_type STREQUAL "INTERFACE_LIBRARY" AND CMAKE_VERSION VERSION_LESS "3.19") + continue() # sources for interface libraries were introduced only in cmake 3.19 + endif() + get_target_property(sources ${target} SOURCES) + list(FILTER sources EXCLUDE REGEX "^/") + list(TRANSFORM sources PREPEND "${subdir}/") + list(APPEND used_sources ${sources}) + endforeach() + endforeach() + list(REMOVE_DUPLICATES used_sources) + # from the list of of source files we guess the directories meant to contain + # source files + list(TRANSFORM used_sources REPLACE "/[^/]*$" "" + OUTPUT_VARIABLE source_dirs) + list(REMOVE_DUPLICATES source_dirs) + # and we look for all *.cpp and *.cxx files in these directories + list(TRANSFORM source_dirs APPEND "/*.cpp" OUTPUT_VARIABLE source_cpp_globs) + list(TRANSFORM source_dirs APPEND "/*.cxx" OUTPUT_VARIABLE source_cxx_globs) + file(GLOB all_sources ${source_cpp_globs} ${source_cxx_globs}) + # check if they are all used + set(missed_sources) + foreach(src IN LISTS all_sources) + list(FIND used_sources ${src} idx) + if(idx STREQUAL "-1") + file(GLOB src RELATIVE "${PROJECT_SOURCE_DIR}" ${src}) + list(APPEND missed_sources ${src}) + endif() + endforeach() + # and report any missing file + if(missed_sources) + list(JOIN missed_sources "\n - " missed_sources) + message(${GAUSSINO_UNUSED_SOURCE_MESSAGE_TYPE} + "Project ${PROJECT_NAME} contains source files which are not used in any target:\n - ${missed_sources}\n") + endif() + endif() + + + # Set the version of the project as a cache variable to be seen by other + # projects in the same super-project. + set(${PROJECT_NAME}_VERSION "${PROJECT_VERSION}" CACHE STRING "Version of ${PROJECT_NAME}" FORCE) + + if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND GAUDI_LEGACY_CMAKE_SUPPORT) + find_file(legacy_cmake_config_support NAMES LegacyGaudiCMakeSupport.cmake) + if(legacy_cmake_config_support) + include(${legacy_cmake_config_support}) + else() + message(FATAL_ERROR "GAUDI_LEGACY_CMAKE_SUPPORT set to TRUE, but cannot find LegacyGaudiCMakeSupport.cmake") + endif() + endif() +endfunction() diff --git a/cmake/GaussinoDependencies.cmake b/cmake/GaussinoDependencies.cmake new file mode 100644 index 00000000..08d0f009 --- /dev/null +++ b/cmake/GaussinoDependencies.cmake @@ -0,0 +1,59 @@ +############################################################################### +# (c) Copyright 2022 CERN for the benefit of the LHCb and FCC Collaborations # +# # +# This software is distributed under the terms of the Apache License # +# version 2 (Apache-2.0), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +include(${CMAKE_CURRENT_LIST_DIR}/GaussinoConfigUtils.cmake) + +# TODO: [LHCb DEPENDENCY] +if(NOT COMMAND lhcb_find_package) + # Look for LHCb find_package wrapper + find_file(LHCbFindPackage_FILE LHCbFindPackage.cmake) + if(LHCbFindPackage_FILE) + include(${LHCbFindPackage_FILE}) + else() + # if not found, use the standard find_package + macro(lhcb_find_package) + find_package(${ARGV}) + endmacro() + endif() +endif() + +# -- Public dependencies +lhcb_find_package(GaussinoExtLibs REQUIRED) # TODO: [NEW CMAKE] temporary project + +if(Geant4_FOUND) + get_cmake_property(variables VARIABLES) + foreach(var ${variables}) + string(REGEX MATCH "Geant4_DATASET_([A-Za-z0-9]+)_ENVVAR" _ ${var}) + if(NOT CMAKE_MATCH_1 STREQUAL "") + # copy the Geant4Data variables using GaudiToolbox.cmake + lhcb_env(SET ${Geant4_DATASET_${CMAKE_MATCH_1}_ENVVAR} ${Geant4_DATASET_${CMAKE_MATCH_1}_PATH}) + endif() + endforeach() +endif() + +find_package(HepMC3 REQUIRED) +find_package(Pythia8 REQUIRED) + +if(USE_DD4HEP) + set(CMAKE_CXX_STANDARD ${GAUDI_CXX_STANDARD}) + find_package(DD4hep REQUIRED DDCore) + find_package(DD4hepDDG4 + REQUIRED + PATHS ${GAUSSINOEXTLIBS_PREFIX_DIR}/cmake + NO_DEFAULT_PATH + ) +endif() + +# -- Private dependencies +if(WITH_Gaussino_PRIVATE_DEPENDENCIES) + if(BUILD_TESTING) + find_package(Boost REQUIRED unit_test_framework) + endif() +endif() diff --git a/docs/getting_started/contributing.md b/docs/getting_started/contributing.md index ccfd7d2a..c07af06a 100644 --- a/docs/getting_started/contributing.md +++ b/docs/getting_started/contributing.md @@ -23,11 +23,11 @@ In gitlab, open a MR targeting the `master` branch. Adding the `lhcb-gaussino` l This sub-section will be moved to a new documentation website dedicated to Gauss. ``` -The instructions are almost the same as for Gaussino in the previous section: [](./contributing.md#developing-gaussino). The only difference is that the MR should be targeting `Futurev4` branch. +The instructions are almost the same as for Gaussino in the previous section: [](./contributing.md#developing-gaussino). The only difference is that the MR should be targeting `Futurev5` branch. ## Fast simulation developments with Geant4 10.7 -All the developments related to fast simulations with Geant4 10.7 are tested in the `lhcb-gaussino-fastsim` nightly slot. We have a dedicated target branch in Gaussino and Gauss-on-Gaussino for these developments: `FASTSIM`. Therefore, you can follow the instructions as in [](./gaussino.md#working-with-gaussino), [](./gauss.md#working-with-gauss-on-gaussino-to-be-moved), [](./contributing.md#developing-gaussino) and [](./contributing.md#developing-gauss-on-gaussino) and change `lhcb-gaussino` to `lhcb-gaussino-fastsim` and `master` to `FASTSIM` (in Gauss: `Futurev4` to `FASTSIM`). +All the developments related to fast simulations with Geant4 10.7 are tested in the `lhcb-gaussino-fastsim` nightly slot. We have a dedicated target branch in Gaussino and Gauss-on-Gaussino for these developments: `FASTSIM`. Therefore, you can follow the instructions as in [](./gaussino.md#working-with-gaussino), [](./gauss.md#working-with-gauss-on-gaussino-to-be-moved), [](./contributing.md#developing-gaussino) and [](./contributing.md#developing-gauss-on-gaussino) and change `lhcb-gaussino` to `lhcb-gaussino-fastsim` and `master` to `FASTSIM` (in Gauss: `Futurev5` to `FASTSIM`). ## Documentation diff --git a/docs/getting_started/gauss.md b/docs/getting_started/gauss.md index e0ad24a3..cd4c5aff 100644 --- a/docs/getting_started/gauss.md +++ b/docs/getting_started/gauss.md @@ -16,7 +16,7 @@ If you wish to work with Gauss (LHCb simulation framework) based on Gaussino's c .. code-block:: shell - lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,Gaussino lhcb-gaussino Today + lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,Gaussino, GaussinoExtLibs lhcb-gaussino Today We really encourage you to use `lbn-install` as it generates a local copy of the nightly build directly on your machine and will create the most stable environment for your developments. ``` @@ -28,10 +28,10 @@ git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss ``` -Gauss-on-Gaussino is develped on a dedicated branch: `Futurev4`. So your development has to start from this branch. +Gauss-on-Gaussino is develped on a dedicated branch: `Futurev5`. So your development has to start from this branch. ```shell -git checkout Futurev4 +git checkout Futurev5 git checkout -b your_local_dev_branch ``` The rest is very similar to the development in Gaussino: @@ -69,12 +69,13 @@ Below you will find a summary of the commands that should cover the majority of ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11-opt -lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,Gaussino lhcb-gaussino Today +export LCG_VERSION=101 +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss -git checkout Futurev4 +git checkout Futurev5 git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' @@ -90,7 +91,8 @@ Below you will find a summary of the commands that should cover the majority of ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11-opt -lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,Gaussino lhcb-gaussino Today +export LCG_VERSION=101 +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . git clone ssh://git@gitlab.cern.ch:7999/Gaussino/Gaussino.git @@ -104,7 +106,7 @@ make -j4 install cd .. git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss -git checkout Futurev4 +git checkout Futurev5 git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' @@ -120,12 +122,13 @@ Below you will find a summary of the commands needed to work with DD4hep/Detecto ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11+dd4hep-opt -lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,Gaussino lhcb-gaussino Today +export LCG_VERSION=101 +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss -git checkout Futurev4 +git checkout Futurev5 git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' @@ -141,6 +144,7 @@ Below you will find a summary of the commands needed to work with DD4hep/Detecto ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11+dd4hep-opt +export LCG_VERSION=101 lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . @@ -171,6 +175,15 @@ git checkout -b your_local_dev_branch lb-project-init . make -j4 install cd .. +git clone ssh://git@gitlab.cern.ch:7999/Gaussino/GaussinoExtLibs.git +cd GaussinoExtLibs +git checkout -b your_local_dev_branch +# check the MRs! +# git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' +# git merge --no-edit 23 45 +lb-project-init . +make -j4 install +cd .. git clone ssh://git@gitlab.cern.ch:7999/Gaussino/Gaussino.git cd Gaussino git checkout -b your_local_dev_branch @@ -182,7 +195,7 @@ make -j4 install cd .. git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss -git checkout Futurev4 +git checkout Futurev5 git checkout -b your_local_dev_branch # check the MRs! # git fetch && git fetch origin '+refs/merge-requests/*/head:refs/remotes/*' @@ -198,7 +211,9 @@ Below you will find a summary of the commands needed to work with fast simulatio ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11-opt -lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support lhcb-gaussino-fastsim Today +export LCG_VERSION=101 +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs +lhcb-gaussino-fastsim Today cd lhcb-gaussino-fastsim/Today lb-set-workspace . git clone ssh://git@gitlab.cern.ch:7999/Gaussino/Gaussino.git diff --git a/docs/getting_started/gaussino.md b/docs/getting_started/gaussino.md index 2a935506..44f8e2d7 100644 --- a/docs/getting_started/gaussino.md +++ b/docs/getting_started/gaussino.md @@ -11,7 +11,6 @@ You can check the nighlty build status by visiting https://lhcb-nightlies.web.ce - [```lhcb-gaussino```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino/) standard slot for the majority of developments, - [```lhcb-gaussino-fastsim```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino-fastsim/) nightly slot dedicated to fast simulation developments with Geant4 10.7, - [```lhcb-gaussino-prerelease```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino-prerelease/) the most stable version of Gaussino used to prepare beta releases with LHCb stack, -- [```lhcb-gaussino-new-cmake```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino-new-cmake/) a temporary nightly slot testing the modernized CMake Gaussino is built in each nightly slots on 3 platforms: - ```x86_64_v2-centos7-gcc11-opt``` release build with DetDesc geometry, @@ -32,6 +31,7 @@ The following will make sure that you have the most recent platform. ```shell lb-set-platform x86_64_v2-centos7-gcc11-opt +export LCG_VERSION=101 ``` ```{eval-rst} @@ -48,11 +48,11 @@ lb-set-platform x86_64_v2-centos7-gcc11-opt #### Fetch the nightlies locally -We're going to create a local copy of the projects used in the nightly slot. Gaussino requires Gaudi, Detector, LHCb and Run2Support. LHCb and Run2Support are used when building Gaussino in the LHCb stack. +We're going to create a local copy of the projects used in the nightly slot. Gaussino requires Gaudi, Detector, LHCb, Run2Support and GaussinoExtLibs. LHCb and Run2Support are used when building Gaussino in the LHCb stack. ```shell -lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support lhcb-gaussino Today +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . ``` diff --git a/lhcbproject.yml b/lhcbproject.yml new file mode 100644 index 00000000..43f57351 --- /dev/null +++ b/lhcbproject.yml @@ -0,0 +1,4 @@ +name: Gaussino +licence: Apache-2.0 +dependencies: + - GaussinoExtLibs diff --git a/toolchain.cmake b/toolchain.cmake deleted file mode 100644 index e5fd2055..00000000 --- a/toolchain.cmake +++ /dev/null @@ -1,55 +0,0 @@ -############################################################################### -# (c) Copyright 2018 CERN # -# # -# This software is distributed under the terms of the GNU General Public # -# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # -# # -# In applying this licence, CERN does not waive the privileges and immunities # -# granted to it by virtue of its status as an Intergovernmental Organization # -# or submit itself to any jurisdiction. # -############################################################################### -cmake_minimum_required(VERSION 3.6) - -set(LCG_LAYER LHCB_7 CACHE STRING "Specific set of version to use") -option(LCG_USE_GENERATORS "enable/disable use of LCG generators" ON) - - -# this check is needed because the toolchain is called when checking the -# compiler (without the proper cache) -if(NOT CMAKE_SOURCE_DIR MATCHES "CMakeTmp") - # Avoid using Gaudi's get_host_binary_tag.py script as it doesn't support Python 3.8 - # https://gitlab.cern.ch/gaudi/Gaudi/-/issues/123 - execute_process(COMMAND "lb-host-binary-tag" - OUTPUT_VARIABLE HOST_BINARY_TAG - RESULT_VARIABLE HOST_BINARY_RETURN - ERROR_VARIABLE HOST_BINARY_ERROR - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(HOST_BINARY_TAG ${HOST_BINARY_TAG} CACHE STRING "BINARY_TAG of the host") - if(HOST_BINARY_RETURN OR NOT HOST_BINARY_TAG) - message(FATAL_ERROR "Error getting host binary tag\nFailed to execute ${HOST_BINARY_TAG_COMMAND}\n" - "HOST_BINARY_TAG value: ${HOST_BINARY_TAG}\n" - "Program Return Value: ${HOST_BINARY_RETURN}\n" - "Error Message: ${HOST_BINARY_ERROR}\n") - endif() - - find_file(default_toolchain NAMES GaudiDefaultToolchain.cmake - HINTS ${CMAKE_SOURCE_DIR}/cmake - ${CMAKE_CURRENT_LIST_DIR}/cmake) - if(default_toolchain) - include(${default_toolchain}) - if(NOT DEFINED CMAKE_USE_CCACHE) - set(CMAKE_USE_CCACHE "YES" CACHE BOOL "...") - endif() - else() - message(FATAL_ERROR "Cannot find GaudiDefaultToolchain.cmake") - endif() - - # FIXME: make sure we do not pick up unwanted/problematic projects from LCG - if(CMAKE_PREFIX_PATH) - # - ninja (it requires LD_LIBRARY_PATH set to run) - # - Gaudi (we do not want to use it from LCG) - # - Geant4 (we do not want to use it from LCG) - # - xenv (conflicts with the version in the build environment) - list(FILTER CMAKE_PREFIX_PATH EXCLUDE REGEX "(LCG_|lcg/nightlies).*(ninja|Gaudi|Geant4|xenv|git)/") - endif() -endif() -- GitLab From 4f98d10718fee49c1e2215dd337ab940bf8a8e45 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Tue, 27 Sep 2022 17:23:58 +0200 Subject: [PATCH 35/56] Fix production cuts not set in the modular physics list --- Sim/Gaussino/python/Gaussino/Simulation.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sim/Gaussino/python/Gaussino/Simulation.py b/Sim/Gaussino/python/Gaussino/Simulation.py index c358dbbc..8a7b95b0 100644 --- a/Sim/Gaussino/python/Gaussino/Simulation.py +++ b/Sim/Gaussino/python/Gaussino/Simulation.py @@ -169,6 +169,11 @@ class SimPhase(ConfigurableUser): gmpl.PhysicsConstructors = phys_list self._addConstructorsWithNames(gmpl, phys_list) + gmpl.CutForElectron = self.getProp("CutForElectron") + gmpl.CutForGamma = self.getProp("CutForGamma") + gmpl.CutForPositron = self.getProp("CutForPositron") + gmpl.DumpCutsTable = self.getProp("DumpCutsTable") + # Add parallel physics par_geo = self.getProp("ParallelGeometry") if par_geo: -- GitLab From 136ee3bf5ffb3f24c034e333c1a911a5f09f9b96 Mon Sep 17 00:00:00 2001 From: Adam Morris <adam.morris@cern.ch> Date: Tue, 4 Oct 2022 14:40:02 +0200 Subject: [PATCH 36/56] Document getting list of MRs from GitLab API --- docs/getting_started/gauss.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/getting_started/gauss.md b/docs/getting_started/gauss.md index cd4c5aff..c0448cdc 100644 --- a/docs/getting_started/gauss.md +++ b/docs/getting_started/gauss.md @@ -41,6 +41,15 @@ The rest is very similar to the development in Gaussino: Don't forget to merge all pending merge requests with a label ``lhcb-gaussino`` (or any other MR that was picked up in the nightly)! ``` +```{eval-rst} +.. hint:: + The list of open merge requests with the label ``lhcb-gaussino`` can be acquired automatically with this command: + + .. code-block:: shell-session + + curl -s "https://gitlab.cern.ch/api/v4/projects/2606/merge_requests?state=opened&labels=lhcb-gaussino" | jq '.[].iid' +``` + In order to get the list of pending merge requests check the checkout report by clicking on the **black arrow** next to the **Gauss project** on the [website](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino). You will get a list of the MR ids that are needed to work with this build of Gauss. For example, if the MRs are Gauss!800 and Gauss!845, you can do the following: ```shell -- GitLab From 6694ae9ab35e2b86971e49601f413d1c7dd3ccda Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Tue, 4 Oct 2022 17:55:32 +0200 Subject: [PATCH 37/56] Update LCG version to 101x in the docs --- docs/getting_started/gauss.md | 10 +++++----- docs/getting_started/gaussino.md | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/getting_started/gauss.md b/docs/getting_started/gauss.md index c0448cdc..2614f49c 100644 --- a/docs/getting_started/gauss.md +++ b/docs/getting_started/gauss.md @@ -78,7 +78,7 @@ Below you will find a summary of the commands that should cover the majority of ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11-opt -export LCG_VERSION=101 +export LCG_VERSION=101x lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . @@ -100,7 +100,7 @@ Below you will find a summary of the commands that should cover the majority of ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11-opt -export LCG_VERSION=101 +export LCG_VERSION=101x lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . @@ -131,7 +131,7 @@ Below you will find a summary of the commands needed to work with DD4hep/Detecto ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11+dd4hep-opt -export LCG_VERSION=101 +export LCG_VERSION=101x lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . @@ -153,7 +153,7 @@ Below you will find a summary of the commands needed to work with DD4hep/Detecto ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11+dd4hep-opt -export LCG_VERSION=101 +export LCG_VERSION=101x lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . @@ -220,7 +220,7 @@ Below you will find a summary of the commands needed to work with fast simulatio ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11-opt -export LCG_VERSION=101 +export LCG_VERSION=101x lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs lhcb-gaussino-fastsim Today cd lhcb-gaussino-fastsim/Today diff --git a/docs/getting_started/gaussino.md b/docs/getting_started/gaussino.md index 44f8e2d7..8b6882c4 100644 --- a/docs/getting_started/gaussino.md +++ b/docs/getting_started/gaussino.md @@ -31,7 +31,7 @@ The following will make sure that you have the most recent platform. ```shell lb-set-platform x86_64_v2-centos7-gcc11-opt -export LCG_VERSION=101 +export LCG_VERSION=101x ``` ```{eval-rst} -- GitLab From d0958cbb64e52722a00c24eb2e45232f112a10af Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Mon, 10 Oct 2022 16:51:51 +0200 Subject: [PATCH 38/56] Updates the docs to use lhcb-dd4hep for DD4hep developments --- docs/getting_started/gauss.md | 8 ++++---- docs/getting_started/gaussino.md | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/getting_started/gauss.md b/docs/getting_started/gauss.md index 2614f49c..6304cdcd 100644 --- a/docs/getting_started/gauss.md +++ b/docs/getting_started/gauss.md @@ -132,8 +132,8 @@ Below you will find a summary of the commands needed to work with DD4hep/Detecto source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11+dd4hep-opt export LCG_VERSION=101x -lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-gaussino Today -cd lhcb-gaussino/Today +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-dd4hep Today +cd lhcb-dd4hep/Today lb-set-workspace . git clone ssh://git@gitlab.cern.ch:7999/lhcb/Gauss cd Gauss @@ -154,8 +154,8 @@ Below you will find a summary of the commands needed to work with DD4hep/Detecto source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11+dd4hep-opt export LCG_VERSION=101x -lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE lhcb-gaussino Today -cd lhcb-gaussino/Today +lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE lhcb-dd4hep Today +cd lhcb-dd4hep/Today lb-set-workspace . git clone ssh://git@gitlab.cern.ch:7999/lhcb/Detector.git cd Detector diff --git a/docs/getting_started/gaussino.md b/docs/getting_started/gaussino.md index 8b6882c4..e4086d9c 100644 --- a/docs/getting_started/gaussino.md +++ b/docs/getting_started/gaussino.md @@ -9,6 +9,7 @@ Please note that Gaussino is an experiment-independent package. If you are looki You can check the nighlty build status by visiting https://lhcb-nightlies.web.cern.ch/nightly/. There are a few nightly slots currently available for Gaussino: - [```lhcb-gaussino```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino/) standard slot for the majority of developments, +- [```lhcb-dd4hep```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino/) the nightly slot used for the integration of DD4hep sub-detectors, - [```lhcb-gaussino-fastsim```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino-fastsim/) nightly slot dedicated to fast simulation developments with Geant4 10.7, - [```lhcb-gaussino-prerelease```](https://lhcb-nightlies.web.cern.ch/nightly/lhcb-gaussino-prerelease/) the most stable version of Gaussino used to prepare beta releases with LHCb stack, @@ -36,7 +37,7 @@ export LCG_VERSION=101x ```{eval-rst} .. tip:: - Use ``x86_64_v2-centos7-gcc11+dd4hep-opt`` if you want to work with **Detector/DD4hep**. + Use ``x86_64_v2-centos7-gcc11+dd4hep-opt`` on ``lhcb-dd4hep`` if you want to work with **Detector/DD4hep**. ``` ### Building Gaussino from source @@ -59,7 +60,7 @@ lb-set-workspace . ```{eval-rst} .. tip:: - Use ``x86_64_v2-centos7-gcc11+dd4hep-opt`` if you want to work with Detector/DD4hep. + Use ``x86_64_v2-centos7-gcc11+dd4hep-opt`` on ``lhcb-dd4hep`` if you want to work with **Detector/DD4hep**. ``` ```{eval-rst} -- GitLab From 2e6cb8bf4b91bb7a07b43357f89ceaa184b03b80 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Tue, 11 Oct 2022 16:51:11 +0200 Subject: [PATCH 39/56] Python Conf Part 1.1a: Adapt options for G-on-G tests --- Sim/Gaussino/python/Gaussino/Configuration.py | 27 ++++++++++++------- Sim/GiGaMT/src/Components/GiGaMT.h | 2 +- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Sim/Gaussino/python/Gaussino/Configuration.py b/Sim/Gaussino/python/Gaussino/Configuration.py index f24d865f..f3be3547 100644 --- a/Sim/Gaussino/python/Gaussino/Configuration.py +++ b/Sim/Gaussino/python/Gaussino/Configuration.py @@ -79,16 +79,16 @@ class Gaussino(ConfigurableUser): :var EvtMax: default: ``-1`` :vartype EvtMax: int, optional - :var EnableHive: default: ``False`` + :var EnableHive: default: ``True`` :vartype EnableHive: bool, optional :var ReDecay: default: ``False`` :vartype ReDecay: bool, optional - :var ThreadPoolSize: default: ``2`` + :var ThreadPoolSize: default: ``1`` :vartype ThreadPoolSize: int, optional - :var EventSlots: default: ``2`` + :var EventSlots: default: ``1`` :vartype EventSlots: int, optional :var ConvertEDM: default: ``False`` @@ -154,16 +154,16 @@ class Gaussino(ConfigurableUser): -1 # NOQA , "EnableHive": - False # NOQA + True # NOQA , "ReDecay": False # NOQA , "ThreadPoolSize": - 2 # NOQA + 1 # NOQA , "EventSlots": - 2 # NOQA + 1 # NOQA , "ConvertEDM": False # NOQA @@ -196,7 +196,17 @@ class Gaussino(ConfigurableUser): self.propagateProperties(names, other) def setupHive(self): - '''Enable Hive event loop manager''' + '''Enable Hive event loop manager + this is a very similar method as in LHCbApp + ''' + if not self.getProp("EnableHive"): + # FIXME: Running without GaudiHive has not been tested + # and may lead to unexpected behaviour + # this is disabled for now + log.error("EnableHive must be set. Running without " + "GaudiHive has not been tested and may lead to" + "unexpected behaviour") + raise ValueError("EnableHive must be set.") from Configurables import HiveWhiteBoard whiteboard = HiveWhiteBoard("EventDataSvc") whiteboard.EventSlots = self.getProp('EventSlots') @@ -213,8 +223,7 @@ class Gaussino(ConfigurableUser): # appendPostConfigAction(self.co) def __apply_configuration__(self): - if self.getProp("EnableHive"): - self.setupHive() + self.setupHive() ppService(self.getProp('ParticleTable')) dataService() auditorService() diff --git a/Sim/GiGaMT/src/Components/GiGaMT.h b/Sim/GiGaMT/src/Components/GiGaMT.h index 1de56acb..59c939f4 100755 --- a/Sim/GiGaMT/src/Components/GiGaMT.h +++ b/Sim/GiGaMT/src/Components/GiGaMT.h @@ -85,7 +85,7 @@ class GiGaMT : public Service, virtual public IGiGaMTSvc, virtual public IGiGaMT Gaudi::Property<std::vector<std::string>> m_MoniToolNames{ this, "MonitorTools", {}, tool_array_setter( m_MoniTools, m_MoniToolNames )}; - Gaudi::Property<size_t> m_nWorkerThreads{this, "NumberOfWorkerThreads", 0}; + Gaudi::Property<size_t> m_nWorkerThreads{this, "NumberOfWorkerThreads", 1}; Gaudi::Property<bool> m_splitPileUp{this, "SplitPileUp", false}; Gaudi::Property<bool> m_printParticles{this, "PrintG4Particles", false}; Gaudi::Property<bool> m_printMaterials{this, "PrintG4Materials", false}; -- GitLab From bbb4b78d7b1e5025b69cec7d5724b2cc9244b096 Mon Sep 17 00:00:00 2001 From: Michal Kreps <michal.kreps@cern.ch> Date: Fri, 14 Oct 2022 14:43:29 +0200 Subject: [PATCH 40/56] Fix crash for inclusive B events due to null pointer --- Gen/Generators/src/Lib/GenCounters.cpp | 709 +++++++++++-------------- 1 file changed, 306 insertions(+), 403 deletions(-) diff --git a/Gen/Generators/src/Lib/GenCounters.cpp b/Gen/Generators/src/Lib/GenCounters.cpp index 3e7f1100..e3e28249 100755 --- a/Gen/Generators/src/Lib/GenCounters.cpp +++ b/Gen/Generators/src/Lib/GenCounters.cpp @@ -15,8 +15,8 @@ #include "Generators/GenCounters.h" // Generators -#include "HepMCUtils/HepMCUtils.h" #include "HepMCUser/Status.h" +#include "HepMCUtils/HepMCUtils.h" // HepMC #include "HepMC3/GenEvent.h" @@ -27,8 +27,8 @@ #include "Defaults/HepMCAttributes.h" // Event -#include "Event/GenFSR.h" #include "Event/GenCountersFSR.h" +#include "Event/GenFSR.h" // LHCb #include "Kernel/ParticleID.h" @@ -36,127 +36,123 @@ //============================================================================= // Function to test if a HepMC3::GenParticle is a B hadron at root of decay //============================================================================= -struct isRootB : std::unary_function< const HepMC3::ConstGenParticlePtr &, bool > { +struct isRootB : std::unary_function<const HepMC3::ConstGenParticlePtr&, bool> { /// test operator, returns true if it is a root B - bool operator() ( const HepMC3::ConstGenParticlePtr & part ) const { + bool operator()( const HepMC3::ConstGenParticlePtr& part ) const { // Do not consider documentation and special particles - if ( part -> status() == HepMC3::Status::DocumentationParticle ) - return false ; - + if ( part->status() == HepMC3::Status::DocumentationParticle ) return false; + // Check if particle has a b quark - LHCb::ParticleID thePid( part -> pdg_id() ) ; - if ( ! thePid.hasBottom() ) return false ; + LHCb::ParticleID thePid( part->pdg_id() ); + if ( !thePid.hasBottom() ) return false; // Check if particle has a mother - if ( ! part -> production_vertex() ) return true ; + if ( !part->production_vertex() ) return true; - // Check all parents of the B - for ( auto & parent : HepMC3::Relatives::PARENTS(part) ) { - LHCb::ParticleID parentID( parent -> pdg_id() ) ; - if ( parentID.hasBottom() && (thePid.abspid()==5 || parentID.abspid()!=5)) return false ; + // Check all parents of the B + for ( auto& parent : HepMC3::Relatives::PARENTS( part ) ) { + LHCb::ParticleID parentID( parent->pdg_id() ); + if ( parentID.hasBottom() && ( thePid.abspid() == 5 || parentID.abspid() != 5 ) ) return false; } // If no parent is a B, then it is a root B - return true ; + return true; } }; //============================================================================= // Function to test if a HepMC3::GenParticle is a D hadron at root of decay //============================================================================= -struct isRootD : std::unary_function< const HepMC3::ConstGenParticlePtr &, bool > { +struct isRootD : std::unary_function<const HepMC3::ConstGenParticlePtr&, bool> { /// test operator, returns true if it is a root D - bool operator() ( const HepMC3::ConstGenParticlePtr & part ) const { + bool operator()( const HepMC3::ConstGenParticlePtr& part ) const { // Do not consider documentation and special particles - if ( part -> status() == HepMC3::Status::DocumentationParticle ) - return false ; + if ( part->status() == HepMC3::Status::DocumentationParticle ) return false; // Check if particle has a c quark - LHCb::ParticleID thePid( part -> pdg_id() ) ; - if ( ! thePid.hasCharm() ) return false ; - if ( thePid.hasBottom() ) return false ; + LHCb::ParticleID thePid( part->pdg_id() ); + if ( !thePid.hasCharm() ) return false; + if ( thePid.hasBottom() ) return false; // Check if particle has a mother - if ( ! part -> production_vertex() ) return true ; + if ( !part->production_vertex() ) return true; // Check all parents of the D - for ( auto & parent : HepMC3::Relatives::PARENTS(part) ) { - LHCb::ParticleID parentID( parent -> pdg_id() ) ; - if ( parentID.hasCharm() && (parentID.abspid()!=4 || thePid.abspid()==4)) return false ; + for ( auto& parent : HepMC3::Relatives::PARENTS( part ) ) { + LHCb::ParticleID parentID( parent->pdg_id() ); + if ( parentID.hasCharm() && ( parentID.abspid() != 4 || thePid.abspid() == 4 ) ) return false; } // If no parent is a D, then it is a root D - return true ; + return true; } }; //============================================================================= // Function to test if a HepMC3::GenParticle is a B hadron at end of decay tree //============================================================================= -struct isEndB : std::unary_function< const HepMC3::ConstGenParticlePtr &, bool > { +struct isEndB : std::unary_function<const HepMC3::ConstGenParticlePtr&, bool> { /// Test operator. Returns true if particle is the last B - bool operator() ( const HepMC3::ConstGenParticlePtr & part ) const { + bool operator()( const HepMC3::ConstGenParticlePtr& part ) const { // Do not look at special particles - if ( part -> status() == HepMC3::Status::DocumentationParticle ) - return false ; + if ( part->status() == HepMC3::Status::DocumentationParticle ) return false; // Test if particle has a b quark - LHCb::ParticleID thePid( part -> pdg_id() ) ; - if ( ! thePid.hasBottom() ) return false ; + LHCb::ParticleID thePid( part->pdg_id() ); + if ( !thePid.hasBottom() ) return false; // test oscillation - if ( ! HepMCUtils::IsBAtProduction( part ) ) return false ; + if ( !HepMCUtils::IsBAtProduction( part ) ) return false; // Test if the B has daughters (here we are sure it has not oscillated) - if ( ! part -> end_vertex() ) return true ; - + if ( !part->end_vertex() ) return true; + // Loop over daughters to check if they are B hadrons - for ( auto & child : HepMC3::Relatives::CHILDREN(part) ){ - LHCb::ParticleID childID( child -> pdg_id() ) ; + for ( auto& child : HepMC3::Relatives::CHILDREN( part ) ) { + LHCb::ParticleID childID( child->pdg_id() ); if ( childID.hasBottom() ) { - if ( child -> pdg_id() == - part -> pdg_id() ) return true ; - return false ; + if ( child->pdg_id() == -part->pdg_id() ) return true; + return false; } } // If not, then it is a end B - return true ; + return true; } }; //============================================================================= // Function to test if a HepMC3::GenParticle is a D hadron at end of decay tree //============================================================================= -struct isEndD : std::unary_function< const HepMC3::ConstGenParticlePtr &, bool > { +struct isEndD : std::unary_function<const HepMC3::ConstGenParticlePtr&, bool> { /// Test operator. Returns true if it is the last D - bool operator() ( const HepMC3::ConstGenParticlePtr & part ) const { + bool operator()( const HepMC3::ConstGenParticlePtr& part ) const { // Do not look at special particles - if ( part -> status() == HepMC3::Status::DocumentationParticle ) - return false ; + if ( part->status() == HepMC3::Status::DocumentationParticle ) return false; // Check if it has a c quark - LHCb::ParticleID thePid( part -> pdg_id() ) ; - if ( ! thePid.hasCharm() ) return false ; + LHCb::ParticleID thePid( part->pdg_id() ); + if ( !thePid.hasCharm() ) return false; // Check if it has daughters - if ( ! part -> end_vertex() ) return true ; + if ( !part->end_vertex() ) return true; // Loop over the daughters to find a D hadron - for ( auto & child : HepMC3::Relatives::CHILDREN(part) ) { - LHCb::ParticleID childID( child -> pdg_id() ) ; - if ( childID.hasCharm() ) return false ; + for ( auto& child : HepMC3::Relatives::CHILDREN( part ) ) { + LHCb::ParticleID childID( child->pdg_id() ); + if ( childID.hasCharm() ) return false; } // If not, then it is a End D - return true ; + return true; } }; @@ -169,452 +165,359 @@ struct isEndD : std::unary_function< const HepMC3::ConstGenParticlePtr &, bool > //============================================================================= // Setup names of B hadron counters //============================================================================= -void GenCounters::setupBHadronCountersNames( BHadronCNames & BC , - BHadronCNames & antiBC ) { - BC[ Bd ] = "B0" ; - BC[ Bu ] = "B+" ; - BC[ Bs ] = "Bs0" ; - BC[ Bc ] = "Bc+" ; - BC[ bBaryon ] = "b-Baryon" ; - - antiBC[ Bd ] = "anti-B0" ; - antiBC[ Bu ] = "B-" ; - antiBC[ Bs ] = "anti-Bs0" ; - antiBC[ Bc ] = "Bc-" ; - antiBC[ bBaryon ] = "anti-b-Baryon" ; +void GenCounters::setupBHadronCountersNames( BHadronCNames& BC, BHadronCNames& antiBC ) { + BC[Bd] = "B0"; + BC[Bu] = "B+"; + BC[Bs] = "Bs0"; + BC[Bc] = "Bc+"; + BC[bBaryon] = "b-Baryon"; + + antiBC[Bd] = "anti-B0"; + antiBC[Bu] = "B-"; + antiBC[Bs] = "anti-Bs0"; + antiBC[Bc] = "Bc-"; + antiBC[bBaryon] = "anti-b-Baryon"; } //============================================================================= // Setup names of D hadron counters //============================================================================= -void GenCounters::setupDHadronCountersNames( DHadronCNames & DC , - DHadronCNames & antiDC ) { - DC[ D0 ] = "D0" ; - DC[ Dch ] = "D+" ; - DC[ Ds ] = "Ds+" ; - DC[ cBaryon ] = "c-Baryon" ; - - antiDC[ D0 ] = "anti-D0" ; - antiDC[ Dch ] = "D-" ; - antiDC[ Ds ] = "Ds-" ; - antiDC[ cBaryon ] = "anti-c-Baryon" ; +void GenCounters::setupDHadronCountersNames( DHadronCNames& DC, DHadronCNames& antiDC ) { + DC[D0] = "D0"; + DC[Dch] = "D+"; + DC[Ds] = "Ds+"; + DC[cBaryon] = "c-Baryon"; + + antiDC[D0] = "anti-D0"; + antiDC[Dch] = "D-"; + antiDC[Ds] = "Ds-"; + antiDC[cBaryon] = "anti-c-Baryon"; } //============================================================================= // Setup names of B excited states //============================================================================= -void GenCounters::setupExcitedCountersNames( ExcitedCNames & B , - const std::string & root ) { - B[ _0star ] = root + "(L=0,J=0)"; - B[ _1star ] = root + "* (L=0, J=1)" ; - B[ _2star ] = root + "** (L=1, J=0,1,2)" ; +void GenCounters::setupExcitedCountersNames( ExcitedCNames& B, const std::string& root ) { + B[_0star] = root + "(L=0,J=0)"; + B[_1star] = root + "* (L=0, J=1)"; + B[_2star] = root + "** (L=1, J=0,1,2)"; } //============================================================================= // Count excited states counters //============================================================================= -void GenCounters::updateExcitedStatesCounters -( const HepMC3::GenEvent* theEvent , ExcitedCounter & thebExcitedC , - ExcitedCounter & thecExcitedC ) { +void GenCounters::updateExcitedStatesCounters( const HepMC3::GenEvent* theEvent, ExcitedCounter& thebExcitedC, + ExcitedCounter& thecExcitedC ) { // Signal Vertex // In HepMC3 now stored as an event attribute. If it does not exist, the default // constructor is used to construct the attribute. This will yield a GenVertexPtr // pointing to nullptr. - auto signal_process_vertex = - theEvent->attribute<HepMC3::VertexAttribute>( Gaussino::HepMC::Attributes::SignalProcessVertex )->value(); + auto signal_process_vertex_attribute = + theEvent->attribute<HepMC3::VertexAttribute>( Gaussino::HepMC::Attributes::SignalProcessVertex ); + HepMC3::ConstGenVertexPtr signal_process_vertex{nullptr}; + if ( signal_process_vertex_attribute ) { signal_process_vertex = signal_process_vertex_attribute->value(); } // Count B : - std::vector< HepMC3::ConstGenParticlePtr > rootB ; - HepMC3::copy_if( std::begin(theEvent->particles()) , std::end(theEvent->particles()) , - std::back_inserter( rootB ) , isRootB() ) ; + std::vector<HepMC3::ConstGenParticlePtr> rootB; + HepMC3::copy_if( std::begin( theEvent->particles() ), std::end( theEvent->particles() ), std::back_inserter( rootB ), + isRootB() ); - std::vector< HepMC3::ConstGenParticlePtr >::const_iterator iter ; + std::vector<HepMC3::ConstGenParticlePtr>::const_iterator iter; - for ( iter = rootB.begin() ; iter != rootB.end() ; ++iter ) { + for ( iter = rootB.begin(); iter != rootB.end(); ++iter ) { if ( signal_process_vertex ) { - if ( ! HepMCUtils::commonTrees( signal_process_vertex, - (*iter) -> end_vertex() ) ) - continue ; + if ( !HepMCUtils::commonTrees( signal_process_vertex, ( *iter )->end_vertex() ) ) continue; } - LHCb::ParticleID thePid( (*iter) -> pdg_id() ) ; + LHCb::ParticleID thePid( ( *iter )->pdg_id() ); if ( thePid.isMeson() ) { if ( 0 == thePid.lSpin() ) { - if ( 1 == thePid.jSpin() ) ++thebExcitedC[ _0star ] ; - else ++thebExcitedC[ _1star ] ; - } else ++thebExcitedC[ _2star ] ; + if ( 1 == thePid.jSpin() ) + ++thebExcitedC[_0star]; + else + ++thebExcitedC[_1star]; + } else + ++thebExcitedC[_2star]; } } // Count D : - std::vector< HepMC3::ConstGenParticlePtr > rootD ; - HepMC3::copy_if( std::begin(theEvent->particles()) , std::end(theEvent->particles()), - std::back_inserter( rootD ) , isRootD() ) ; - - for ( iter = rootD.begin() ; iter != rootD.end() ; ++iter ) { - if ( signal_process_vertex) { - if ( ! HepMCUtils::commonTrees( signal_process_vertex, - (*iter) -> end_vertex() ) ) - continue ; + std::vector<HepMC3::ConstGenParticlePtr> rootD; + HepMC3::copy_if( std::begin( theEvent->particles() ), std::end( theEvent->particles() ), std::back_inserter( rootD ), + isRootD() ); + + for ( iter = rootD.begin(); iter != rootD.end(); ++iter ) { + if ( signal_process_vertex ) { + if ( !HepMCUtils::commonTrees( signal_process_vertex, ( *iter )->end_vertex() ) ) continue; } - - LHCb::ParticleID thePid( (*iter) -> pdg_id() ) ; + + LHCb::ParticleID thePid( ( *iter )->pdg_id() ); if ( thePid.isMeson() ) { if ( 0 == thePid.lSpin() ) { - if ( 1 == thePid.jSpin() ) ++thecExcitedC[ _0star ] ; - else ++thecExcitedC[ _1star ] ; - } else ++thecExcitedC[ _2star ] ; + if ( 1 == thePid.jSpin() ) + ++thecExcitedC[_0star]; + else + ++thecExcitedC[_1star]; + } else + ++thecExcitedC[_2star]; } - } + } } //============================================================================= // Update the counters of number of different hadrons in selected events //============================================================================= -void GenCounters::updateHadronCounters( const HepMC3::GenEvent* theEvent , - BHadronCounter & thebHadC , - BHadronCounter & theantibHadC , - DHadronCounter & thecHadC , - DHadronCounter & theanticHadC , - std::atomic_uint & thebbCounter , - std::atomic_uint & theccCounter ) { +void GenCounters::updateHadronCounters( const HepMC3::GenEvent* theEvent, BHadronCounter& thebHadC, + BHadronCounter& theantibHadC, DHadronCounter& thecHadC, + DHadronCounter& theanticHadC, std::atomic_uint& thebbCounter, + std::atomic_uint& theccCounter ) { // Signal vertex // In HepMC3 now stored as an event attribute. If it does not exist, the default // constructor is used to construct the attribute. This will yield a GenVertexPtr // pointing to nullptr. - auto signal_process_vertex = - theEvent->attribute<HepMC3::VertexAttribute>( Gaussino::HepMC::Attributes::SignalProcessVertex )->value(); + auto signal_process_vertex_attribute = + theEvent->attribute<HepMC3::VertexAttribute>( Gaussino::HepMC::Attributes::SignalProcessVertex ); + HepMC3::ConstGenVertexPtr signal_process_vertex{nullptr}; + if ( signal_process_vertex_attribute ) { signal_process_vertex = signal_process_vertex_attribute->value(); } // Count B: - std::vector< HepMC3::ConstGenParticlePtr > endB ; - HepMC3::copy_if( std::begin(theEvent->particles()) , std::end(theEvent->particles()), - std::back_inserter( endB ) , isEndB() ) ; - std::vector< HepMC3::ConstGenParticlePtr >::const_iterator iter ; - - for ( iter = endB.begin() ; iter != endB.end() ; ++iter ) { + std::vector<HepMC3::ConstGenParticlePtr> endB; + HepMC3::copy_if( std::begin( theEvent->particles() ), std::end( theEvent->particles() ), std::back_inserter( endB ), + isEndB() ); + std::vector<HepMC3::ConstGenParticlePtr>::const_iterator iter; + + for ( iter = endB.begin(); iter != endB.end(); ++iter ) { if ( signal_process_vertex ) { - if ( HepMCUtils::commonTrees( signal_process_vertex, - (*iter) -> end_vertex() ) ) - continue ; + if ( HepMCUtils::commonTrees( signal_process_vertex, ( *iter )->end_vertex() ) ) continue; } - - LHCb::ParticleID thePid( (*iter) -> pdg_id() ) ; - + + LHCb::ParticleID thePid( ( *iter )->pdg_id() ); + if ( thePid.isMeson() ) { if ( thePid.pid() > 0 ) { - if ( thePid.hasUp() ) ++thebHadC[ Bu ] ; - else if ( thePid.hasDown() ) ++thebHadC[ Bd ] ; - else if ( thePid.hasStrange() ) ++thebHadC[ Bs ] ; - else if ( thePid.hasCharm() ) ++thebHadC[ Bc ] ; - else ++thebbCounter ; + if ( thePid.hasUp() ) + ++thebHadC[Bu]; + else if ( thePid.hasDown() ) + ++thebHadC[Bd]; + else if ( thePid.hasStrange() ) + ++thebHadC[Bs]; + else if ( thePid.hasCharm() ) + ++thebHadC[Bc]; + else + ++thebbCounter; } else { - if ( thePid.hasUp() ) ++theantibHadC[ Bu ] ; - else if ( thePid.hasDown() ) ++theantibHadC[ Bd ] ; - else if ( thePid.hasStrange() ) ++theantibHadC[ Bs ] ; - else if ( thePid.hasCharm() ) ++theantibHadC[ Bc ] ; - else ++thebbCounter ; + if ( thePid.hasUp() ) + ++theantibHadC[Bu]; + else if ( thePid.hasDown() ) + ++theantibHadC[Bd]; + else if ( thePid.hasStrange() ) + ++theantibHadC[Bs]; + else if ( thePid.hasCharm() ) + ++theantibHadC[Bc]; + else + ++thebbCounter; } } else if ( thePid.isBaryon() ) { - if ( thePid.pid() < 0 ) ++thebHadC[ bBaryon ] ; - else ++theantibHadC[ bBaryon ] ; + if ( thePid.pid() < 0 ) + ++thebHadC[bBaryon]; + else + ++theantibHadC[bBaryon]; } } - - std::vector< HepMC3::ConstGenParticlePtr > endD ; - HepMC3::copy_if( std::begin(theEvent->particles()) , std::end(theEvent->particles()), - std::back_inserter( endD ) , isEndD() ) ; - - for ( iter = endD.begin() ; iter != endD.end() ; ++iter ) { + + std::vector<HepMC3::ConstGenParticlePtr> endD; + HepMC3::copy_if( std::begin( theEvent->particles() ), std::end( theEvent->particles() ), std::back_inserter( endD ), + isEndD() ); + + for ( iter = endD.begin(); iter != endD.end(); ++iter ) { if ( signal_process_vertex ) { - if ( HepMCUtils::commonTrees( signal_process_vertex, - (*iter) -> end_vertex() ) ) - continue ; + if ( HepMCUtils::commonTrees( signal_process_vertex, ( *iter )->end_vertex() ) ) continue; } - - LHCb::ParticleID thePid( (*iter) -> pdg_id() ) ; - + + LHCb::ParticleID thePid( ( *iter )->pdg_id() ); + if ( thePid.isMeson() ) { if ( thePid.pid() > 0 ) { - if ( thePid.hasUp() ) ++thecHadC[ D0 ] ; - else if ( thePid.hasDown() ) ++thecHadC[ Dch ] ; - else if ( thePid.hasStrange() ) ++thecHadC[ Ds ] ; - else ++theccCounter ; + if ( thePid.hasUp() ) + ++thecHadC[D0]; + else if ( thePid.hasDown() ) + ++thecHadC[Dch]; + else if ( thePid.hasStrange() ) + ++thecHadC[Ds]; + else + ++theccCounter; } else { - if ( thePid.hasUp() ) ++theanticHadC[ D0 ] ; - else if ( thePid.hasDown() ) ++theanticHadC[ Dch ] ; - else if ( thePid.hasStrange() ) ++theanticHadC[ Ds ] ; - else ++theccCounter ; + if ( thePid.hasUp() ) + ++theanticHadC[D0]; + else if ( thePid.hasDown() ) + ++theanticHadC[Dch]; + else if ( thePid.hasStrange() ) + ++theanticHadC[Ds]; + else + ++theccCounter; } } else if ( thePid.isBaryon() ) { - if ( thePid.pid() > 0 ) ++thecHadC[ cBaryon ] ; - else ++theanticHadC[ cBaryon ] ; + if ( thePid.pid() > 0 ) + ++thecHadC[cBaryon]; + else + ++theanticHadC[cBaryon]; } - } + } } - -//============================================================================= -// Update the genFRS in selected events -//============================================================================= -void GenCounters::updateHadronFSR( const HepMC3::GenEvent* theEvent , - LHCb::GenFSR* genFSR, - const std::string option) -{ - if(!genFSR) return; - // Signal Vertex +//============================================================================= +// Update the genFRS in selected events +//============================================================================= +void GenCounters::updateHadronFSR( const HepMC3::GenEvent* theEvent, LHCb::GenFSR* genFSR, const std::string option ) { + if ( !genFSR ) return; + // Signal Vertex // In HepMC3 now stored as an event attribute. If it does not exist, the default // constructor is used to construct the attribute. This will yield a GenVertexPtr // pointing to nullptr. - auto signal_process_vertex = - theEvent->attribute<HepMC3::VertexAttribute>( Gaussino::HepMC::Attributes::SignalProcessVertex )->value(); - - // Count B : - std::vector< HepMC3::ConstGenParticlePtr > rootB ; - HepMC3::copy_if( std::begin(theEvent->particles()) , std::end(theEvent->particles()) , - std::back_inserter( rootB ) , isRootB() ) ; - - std::vector< HepMC3::ConstGenParticlePtr >::const_iterator iter ; - - for ( iter = rootB.begin() ; iter != rootB.end() ; ++iter ) - { - if ( signal_process_vertex ) - { - if ( ! HepMCUtils::commonTrees( signal_process_vertex , - (*iter) -> end_vertex() ) ) - continue ; - } - LHCb::ParticleID thePid( (*iter) -> pdg_id() ) ; - - if (thePid.isMeson()) - { - if (0 == thePid.lSpin()) - { - if (1 == thePid.jSpin()) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("B"+option), 1); + auto signal_process_vertex_attribute = + theEvent->attribute<HepMC3::VertexAttribute>( Gaussino::HepMC::Attributes::SignalProcessVertex ); + HepMC3::ConstGenVertexPtr signal_process_vertex{nullptr}; + if ( signal_process_vertex_attribute ) { signal_process_vertex = signal_process_vertex_attribute->value(); } + + // Count B : + std::vector<HepMC3::ConstGenParticlePtr> rootB; + HepMC3::copy_if( std::begin( theEvent->particles() ), std::end( theEvent->particles() ), std::back_inserter( rootB ), + isRootB() ); + + std::vector<HepMC3::ConstGenParticlePtr>::const_iterator iter; + + for ( iter = rootB.begin(); iter != rootB.end(); ++iter ) { + if ( signal_process_vertex ) { + if ( !HepMCUtils::commonTrees( signal_process_vertex, ( *iter )->end_vertex() ) ) continue; + } + LHCb::ParticleID thePid( ( *iter )->pdg_id() ); + + if ( thePid.isMeson() ) { + if ( 0 == thePid.lSpin() ) { + if ( 1 == thePid.jSpin() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "B" + option ), 1 ); + } else { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Bstar" + option ), 1 ); } - else - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Bstar"+option), 1); - } + } else { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "B2star" + option ), 1 ); } - else - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("B2star"+option), 1); - } - } + } } - // Count D : - std::vector< HepMC3::ConstGenParticlePtr > rootD ; - HepMC3::copy_if( std::begin(theEvent->particles()) , std::end(theEvent->particles()), - std::back_inserter( rootD ) , isRootD() ) ; - - for ( iter = rootD.begin() ; iter != rootD.end() ; ++iter ) - { - if ( signal_process_vertex) - { - if ( ! HepMCUtils::commonTrees( signal_process_vertex , - (*iter) -> end_vertex() ) ) - continue ; + // Count D : + std::vector<HepMC3::ConstGenParticlePtr> rootD; + HepMC3::copy_if( std::begin( theEvent->particles() ), std::end( theEvent->particles() ), std::back_inserter( rootD ), + isRootD() ); + + for ( iter = rootD.begin(); iter != rootD.end(); ++iter ) { + if ( signal_process_vertex ) { + if ( !HepMCUtils::commonTrees( signal_process_vertex, ( *iter )->end_vertex() ) ) continue; } - LHCb::ParticleID thePid( (*iter) -> pdg_id() ); + LHCb::ParticleID thePid( ( *iter )->pdg_id() ); - if (thePid.isMeson()) - { - if (0 == thePid.lSpin()) - { - if (1 == thePid.jSpin()) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("D"+option), 1); + if ( thePid.isMeson() ) { + if ( 0 == thePid.lSpin() ) { + if ( 1 == thePid.jSpin() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "D" + option ), 1 ); + } else { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Dstar" + option ), 1 ); } - else - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Dstar"+option), 1); - } + } else { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "D2star" + option ), 1 ); } - else - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("D2star"+option), 1); - } - } + } } - // Count B: - std::vector< HepMC3::ConstGenParticlePtr > endB ; - HepMC3::copy_if( std::begin(theEvent->particles()) , std::end(theEvent->particles()) , - std::back_inserter( endB ) , isEndB() ) ; - - for ( iter = endB.begin() ; iter != endB.end() ; ++iter ) - { - if ( signal_process_vertex ) - { - if ( HepMCUtils::commonTrees( signal_process_vertex , - (*iter) -> end_vertex() ) ) - continue ; + // Count B: + std::vector<HepMC3::ConstGenParticlePtr> endB; + HepMC3::copy_if( std::begin( theEvent->particles() ), std::end( theEvent->particles() ), std::back_inserter( endB ), + isEndB() ); + + for ( iter = endB.begin(); iter != endB.end(); ++iter ) { + if ( signal_process_vertex ) { + if ( HepMCUtils::commonTrees( signal_process_vertex, ( *iter )->end_vertex() ) ) continue; } - LHCb::ParticleID thePid( (*iter) -> pdg_id() ) ; + LHCb::ParticleID thePid( ( *iter )->pdg_id() ); - if ( thePid.isMeson() ) - { - if ( thePid.pid() > 0 ) - { - if ( thePid.hasUp() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Bplus"+option), 1); - } - else if ( thePid.hasDown() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("B0"+option), 1); - } - else if ( thePid.hasStrange() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Bs0"+option), 1); + if ( thePid.isMeson() ) { + if ( thePid.pid() > 0 ) { + if ( thePid.hasUp() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Bplus" + option ), 1 ); + } else if ( thePid.hasDown() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "B0" + option ), 1 ); + } else if ( thePid.hasStrange() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Bs0" + option ), 1 ); + } else if ( thePid.hasCharm() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Bcplus" + option ), 1 ); + } else { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "bb" + option ), 1 ); } - else if ( thePid.hasCharm() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Bcplus"+option), 1); + } else { + if ( thePid.hasUp() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Bminus" + option ), 1 ); + } else if ( thePid.hasDown() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "antiB0" + option ), 1 ); + } else if ( thePid.hasStrange() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "antiBs0" + option ), 1 ); + } else if ( thePid.hasCharm() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Bcminus" + option ), 1 ); + } else { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "bb" + option ), 1 ); } - else - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("bb"+option), 1); - } } - else - { - if ( thePid.hasUp() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Bminus"+option), 1); - } - else if ( thePid.hasDown() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("antiB0"+option), 1); - } - else if ( thePid.hasStrange() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("antiBs0"+option), 1); - } - else if ( thePid.hasCharm() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Bcminus"+option), 1); - } - else - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("bb"+option), 1); - } - } - } - else if ( thePid.isBaryon() ) - { - if ( thePid.pid() < 0 ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("bBaryon"+option), 1); + } else if ( thePid.isBaryon() ) { + if ( thePid.pid() < 0 ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "bBaryon" + option ), 1 ); + } else { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "antibBaryon" + option ), 1 ); } - else - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("antibBaryon"+option), 1); - } - } + } } - // Count D: - std::vector< HepMC3::ConstGenParticlePtr > endD ; - HepMC3::copy_if( std::begin(theEvent->particles()), std::end(theEvent->particles()) , - std::back_inserter( endD ) , isEndD() ) ; - - for ( iter = endD.begin() ; iter != endD.end() ; ++iter ) - { - if ( signal_process_vertex ) - { - if ( HepMCUtils::commonTrees( signal_process_vertex , - (*iter) -> end_vertex() ) ) - continue ; + // Count D: + std::vector<HepMC3::ConstGenParticlePtr> endD; + HepMC3::copy_if( std::begin( theEvent->particles() ), std::end( theEvent->particles() ), std::back_inserter( endD ), + isEndD() ); + + for ( iter = endD.begin(); iter != endD.end(); ++iter ) { + if ( signal_process_vertex ) { + if ( HepMCUtils::commonTrees( signal_process_vertex, ( *iter )->end_vertex() ) ) continue; } - LHCb::ParticleID thePid( (*iter) -> pdg_id() ) ; + LHCb::ParticleID thePid( ( *iter )->pdg_id() ); - if ( thePid.isMeson() ) - { - if ( thePid.pid() > 0 ) - { - if ( thePid.hasUp() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("D0"+option), 1); - } - else if ( thePid.hasDown() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Dplus"+option), 1); + if ( thePid.isMeson() ) { + if ( thePid.pid() > 0 ) { + if ( thePid.hasUp() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "D0" + option ), 1 ); + } else if ( thePid.hasDown() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Dplus" + option ), 1 ); + } else if ( thePid.hasStrange() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Dsplus" + option ), 1 ); + } else { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "cc" + option ), 1 ); } - else if ( thePid.hasStrange() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Dsplus"+option), 1); + } else { + if ( thePid.hasUp() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "antiD0" + option ), 1 ); + } else if ( thePid.hasDown() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Dminus" + option ), 1 ); + } else if ( thePid.hasStrange() ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "Dsminus" + option ), 1 ); + } else { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "cc" + option ), 1 ); } - else - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("cc"+option), 1); - } } - else - { - if ( thePid.hasUp() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("antiD0"+option), 1); - } - else if ( thePid.hasDown() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Dminus"+option), 1); - } - else if ( thePid.hasStrange() ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("Dsminus"+option), 1); - } - else - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("cc"+option), 1); - } - } - } - else if ( thePid.isBaryon() ) - { - if ( thePid.pid() > 0 ) - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("cBaryon"+option), 1); + } else if ( thePid.isBaryon() ) { + if ( thePid.pid() > 0 ) { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "cBaryon" + option ), 1 ); + } else { + genFSR->incrementGenCounter( LHCb::GenCountersFSR::CounterKeyToType( "anticBaryon" + option ), 1 ); } - else - { - genFSR->incrementGenCounter( - LHCb::GenCountersFSR::CounterKeyToType("anticBaryon"+option), 1); - } - } - } + } + } } -- GitLab From 0cceba6ea3d8d6cd15b12a8a0b2c163b4bc93ed5 Mon Sep 17 00:00:00 2001 From: Michal Kreps <michal.kreps@cern.ch> Date: Fri, 14 Oct 2022 14:45:57 +0200 Subject: [PATCH 41/56] Setting up options propagation for production tool - for now only Pythia8Production is supported --- .../src/Components/GenMonitorAlg.cpp | 36 ++++++++----------- Sim/Gaussino/python/Gaussino/Generation.py | 9 +++++ 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/Moni/GaussMonitor/src/Components/GenMonitorAlg.cpp b/Moni/GaussMonitor/src/Components/GenMonitorAlg.cpp index 0437324f..387a082b 100755 --- a/Moni/GaussMonitor/src/Components/GenMonitorAlg.cpp +++ b/Moni/GaussMonitor/src/Components/GenMonitorAlg.cpp @@ -40,8 +40,7 @@ // Declaration of the Algorithm Factory DECLARE_COMPONENT( GenMonitorAlg ) -StatusCode GenMonitorAlg::initialize() -{ +StatusCode GenMonitorAlg::initialize() { StatusCode sc = GaudiHistoAlg::initialize(); // must be executed first if ( sc.isFailure() ) return sc; // error printed already by GaudiHistoAlg @@ -52,15 +51,12 @@ StatusCode GenMonitorAlg::initialize() info() << "Monitor will be applied to events produced with generator " << m_generatorName << endmsg; } - if ( produceHistos() ) { - bookHistos(); - } + if ( produceHistos() ) { bookHistos(); } return StatusCode::SUCCESS; } -void GenMonitorAlg::operator()( const HepMC3::GenEventPtrs& hepmcevents ) const -{ +void GenMonitorAlg::operator()( const HepMC3::GenEventPtrs& hepmcevents ) const { std::lock_guard<std::mutex> lock( m_histo_lock ); debug() << "==> Execute" << endmsg; @@ -70,21 +66,23 @@ void GenMonitorAlg::operator()( const HepMC3::GenEventPtrs& hepmcevents ) const int nPileUp( 0 ); for ( auto& hepmcevent : hepmcevents ) { - auto gen_name = hepmcevent->attribute<HepMC3::StringAttribute>( Gaussino::HepMC::Attributes::GeneratorName )->value(); + auto gen_name = + hepmcevent->attribute<HepMC3::StringAttribute>( Gaussino::HepMC::Attributes::GeneratorName )->value(); // Check if monitor has to be applied to this event if ( !m_generatorName.empty() ) { - if ( m_generatorName != gen_name ) { - continue; - } + if ( m_generatorName != gen_name ) { continue; } } debug() << "Monitor for " << gen_name << endmsg; // Get the signal process ID from the attributes if ( produceHistos() ) { - auto sig_proc_id = - hepmcevent->attribute<HepMC3::IntAttribute>( Gaussino::HepMC::Attributes::SignalProcessID )->value(); - m_hProcess->fill( sig_proc_id ); + auto sig_proc_id_attr = + hepmcevent->attribute<HepMC3::IntAttribute>( Gaussino::HepMC::Attributes::SignalProcessID ); + if ( sig_proc_id_attr ) { + auto sig_proc_id = sig_proc_id_attr->value(); + m_hProcess->fill( sig_proc_id ); + } } bool primFound = false; @@ -135,9 +133,7 @@ void GenMonitorAlg::operator()( const HepMC3::GenEventPtrs& hepmcevents ) const ++nParticlesStableCharged; double pseudoRap = hepMCpart->momentum().pseudoRapidity(); // in LHCb acceptance - if ( ( pseudoRap > m_minEta ) && ( pseudoRap < m_maxEta ) ) { - ++nParChStabEtaAcc; - } + if ( ( pseudoRap > m_minEta ) && ( pseudoRap < m_maxEta ) ) { ++nParChStabEtaAcc; } if ( produceHistos() ) { m_hStableEta->fill( pseudoRap ); m_hStablePt->fill( hepMCpart->momentum().perp() / Gaudi::Units::GeV ); @@ -167,8 +163,7 @@ void GenMonitorAlg::operator()( const HepMC3::GenEventPtrs& hepmcevents ) const //============================================================================= // Finalize //============================================================================= -StatusCode GenMonitorAlg::finalize() -{ +StatusCode GenMonitorAlg::finalize() { debug() << "==> Finalize" << endmsg; @@ -199,8 +194,7 @@ StatusCode GenMonitorAlg::finalize() //============================================================================ // Booking of histograms //============================================================================ -void GenMonitorAlg::bookHistos() -{ +void GenMonitorAlg::bookHistos() { debug() << "==> Book histograms" << endmsg; diff --git a/Sim/Gaussino/python/Gaussino/Generation.py b/Sim/Gaussino/python/Gaussino/Generation.py index 6b69039b..0b23b410 100644 --- a/Sim/Gaussino/python/Gaussino/Generation.py +++ b/Sim/Gaussino/python/Gaussino/Generation.py @@ -100,6 +100,9 @@ class GenPhase(ConfigurableUser): :var ProductionTool: default: ``'Pythia8Production'`` :vartype ProductionTool: str, optional + :var ProductionToolOpts: default: ``{}`` + :vartype ProductionToolOpts: dict, optional + :var DecayTool: default: ``''`` :vartype DecayTool: str, optional @@ -165,6 +168,7 @@ class GenPhase(ConfigurableUser): 'FixedLuminosityWithSvc', # NOQA "ProductionTool": 'Pythia8Production', # NOQA + "ProductionToolOpts": {}, "DecayTool": '', # NOQA "CutTool": @@ -248,6 +252,11 @@ class GenPhase(ConfigurableUser): gen_alg.FullGenEventCutTool = '' prod = get_set_configurable(sgt, 'ProductionTool', ProductionTool) if ProductionTool in ["Pythia8Production", "Pythia8ProductionMT"]: + # For now keep it only for Pythia, but potentially in future we + # want to do this for all possible production tools + prot_opts = self.getProp('ProductionToolOpts') + for n, v in prot_opts.items(): + prod.setProp(n, v) prod.BeamToolName = 'CollidingBeamsWithSvc' if ProductionTool == "Pythia8ProductionMT": -- GitLab From ea40349b3a7d8d53782b8853719d829eb40bc614 Mon Sep 17 00:00:00 2001 From: Marco Clemencic <marco.clemencic@cern.ch> Date: Tue, 18 Oct 2022 10:31:36 +0200 Subject: [PATCH 42/56] Workaround for undefined symbol --- Sim/GiGaMTFactories/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sim/GiGaMTFactories/CMakeLists.txt b/Sim/GiGaMTFactories/CMakeLists.txt index f2cf7656..c5a4f4bb 100644 --- a/Sim/GiGaMTFactories/CMakeLists.txt +++ b/Sim/GiGaMTFactories/CMakeLists.txt @@ -101,6 +101,11 @@ gaudi_add_library(GiGaMTMagnetFactoriesLib Gaussino::GiGaMTCoreMessageLib ) +# Workaround for unresolved symbol +if(CMAKE_BUILD_TYPE STREQUAL "Release") + set_source_files_properties(src/Lib/FieldMgrBase.cpp PROPERTIES COMPILE_OPTIONS "-O2") +endif() + gaudi_add_module(GiGaMTMagnetFactories SOURCES src/Components/MagFieldFromSvc.cpp -- GitLab From 8ea2ffec899f27de473462afad2a5fcf9e4b8719 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Wed, 11 Jan 2023 10:59:45 +0100 Subject: [PATCH 43/56] Update to dd4hep v01-23 --- Sim/GiGaMTDD4hep/src/Lib/DD4hepCnvSvc.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Sim/GiGaMTDD4hep/src/Lib/DD4hepCnvSvc.cpp b/Sim/GiGaMTDD4hep/src/Lib/DD4hepCnvSvc.cpp index 833f9fd3..5c787802 100644 --- a/Sim/GiGaMTDD4hep/src/Lib/DD4hepCnvSvc.cpp +++ b/Sim/GiGaMTDD4hep/src/Lib/DD4hepCnvSvc.cpp @@ -47,13 +47,12 @@ StatusCode DD4hepCnvSvc::initialize() { for ( auto& pp : g4map.volumeManager()->g4Paths ) { debug() << "/"; for ( auto& pv : pp.first ) { debug() << pv->GetName() << "/"; } - debug() << " ID:" << pp.second << endmsg; + debug() << " ID:" << pp.second.volumeID << endmsg; } for ( auto& [dd4hep_volume, g4_volume] : g4map.data().g4Volumes ) { if ( !dd4hep_volume.isValid() || !dd4hep_volume.isSensitive() ) { continue; } auto dd4hep_sensdet_name = dd4hep_volume.sensitiveDetector().name(); debug() << "Active volume '" << dd4hep_volume.name() << "' SensDet: '" << dd4hep_sensdet_name << "'" << endmsg; - if ( dd4hep_volume.isSensitive() ) {} } } -- GitLab From 73a1d2d30c7e17b9192374059259eb6bae970809 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Fri, 20 Jan 2023 10:49:04 +0100 Subject: [PATCH 44/56] Update docs to LCG 101a --- docs/getting_started/gauss.md | 10 +++++----- docs/getting_started/gaussino.md | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/getting_started/gauss.md b/docs/getting_started/gauss.md index 6304cdcd..41d4ebe0 100644 --- a/docs/getting_started/gauss.md +++ b/docs/getting_started/gauss.md @@ -78,7 +78,7 @@ Below you will find a summary of the commands that should cover the majority of ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11-opt -export LCG_VERSION=101x +export LCG_VERSION=101a lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . @@ -100,7 +100,7 @@ Below you will find a summary of the commands that should cover the majority of ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11-opt -export LCG_VERSION=101x +export LCG_VERSION=101a lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-gaussino Today cd lhcb-gaussino/Today lb-set-workspace . @@ -131,7 +131,7 @@ Below you will find a summary of the commands needed to work with DD4hep/Detecto ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11+dd4hep-opt -export LCG_VERSION=101x +export LCG_VERSION=101a lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs,Gaussino lhcb-dd4hep Today cd lhcb-dd4hep/Today lb-set-workspace . @@ -153,7 +153,7 @@ Below you will find a summary of the commands needed to work with DD4hep/Detecto ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11+dd4hep-opt -export LCG_VERSION=101x +export LCG_VERSION=101a lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11+dd4hep-opt --projects=Gaudi,Geant4,DBASE lhcb-dd4hep Today cd lhcb-dd4hep/Today lb-set-workspace . @@ -220,7 +220,7 @@ Below you will find a summary of the commands needed to work with fast simulatio ```shell source /cvmfs/lhcb.cern.ch/lib/LbEnv lb-set-platform x86_64_v2-centos7-gcc11-opt -export LCG_VERSION=101x +export LCG_VERSION=101a lbn-install --verbose --platforms=x86_64_v2-centos7-gcc11-opt --projects=Gaudi,Geant4,DBASE,Detector,LHCb,Run2Support,GaussinoExtLibs lhcb-gaussino-fastsim Today cd lhcb-gaussino-fastsim/Today diff --git a/docs/getting_started/gaussino.md b/docs/getting_started/gaussino.md index e4086d9c..4efb9bd0 100644 --- a/docs/getting_started/gaussino.md +++ b/docs/getting_started/gaussino.md @@ -32,7 +32,7 @@ The following will make sure that you have the most recent platform. ```shell lb-set-platform x86_64_v2-centos7-gcc11-opt -export LCG_VERSION=101x +export LCG_VERSION=101a ``` ```{eval-rst} -- GitLab From 531758e3599af9bca8ad483058027c3cda33b3d3 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 16:37:50 +0100 Subject: [PATCH 45/56] test docs cleaning --- .gitlab-ci.yml | 49 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 38767faf..896a1f55 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -51,6 +51,8 @@ check-formatting: image: gitlab-registry.cern.ch/lhcb-core/lbdocker/centos7-build:latest variables: DOCS_VERSION: $CI_COMMIT_REF_NAME + # I found CI_PAGES_URL sometimes pointing to the wrong addresss + GAUSSINO_PAGES_URL: https://mimazure-gaussino.docs.cern.ch/ rules: - if: $CI_COMMIT_REF_PROTECTED == "true" - if: $CI_MERGE_REQUEST_LABELS =~ /Python Documentation/ @@ -58,7 +60,7 @@ check-formatting: tags: - cvmfs -# inspired by https://gitlab.cern.ch/lhcb/Moore/-/blob/master/.gitlab-ci.yml +# inspired by https://gitlab.cern.ch/lhcb/Moore/-/blob/master/.gitlab-ci.yml build-docs: extends: .docs-base variables: @@ -83,17 +85,14 @@ build-docs: - docs/_build/html/ expire_in: 1 month -pages: +clean-old-pages: extends: .docs-base needs: - build-docs - variables: - # I found CI_PAGES_URL sometimes pointing to the wrong addresss - GAUSSINO_PAGES_URL: https://gaussino.docs.cern.ch/ script: # accumulating content as in https://gitlab.com/gitlab-org/gitlab/-/issues/15156#note_214784368 # -> get the archive from the website with the accumulated content and copy it to public/ - - echo "Deploying docs for ${DOCS_VERSION}" + - echo "Cleaning docs for ${DOCS_VERSION}" - echo "Getting the latest versions from ${GAUSSINO_PAGES_URL}" # -> curl will create content.tar.gz even if it does not exists - curl -fkL "$GAUSSINO_PAGES_URL/content.tar.gz" -o "content.tar.gz" || echo "Could not get the archive, skipping..." @@ -102,7 +101,7 @@ pages: - tar -xzf content.tar.gz public/ || echo "Archive with other versions in a bad format or not found, skipping..." # -> add only the new contents of the current version - mkdir -p public/$DOCS_VERSION/ - - rsync -a docs/_build/html/ public/$DOCS_VERSION/ + - mv docs/_build/html public/$DOCS_VERSION # -> add all the necessary redirects - rm -f public/_redirects - echo "/index.html /master/index.html 301" >> public/_redirects @@ -116,3 +115,39 @@ pages: - public expire_in: 1 month +pages: + extends: .docs-base + needs: + - pages + variables: + MAX_TIME_IN_DAYS: 7 + script: + # -> get the archive from the website with the accumulated content and copy it to public/ + - echo "Getting the latest versions from ${GAUSSINO_PAGES_URL}" + # -> curl will create content.tar.gz even if it does not exists + - curl -fkL "$GAUSSINO_PAGES_URL/content.tar.gz" -o "content.tar.gz" || echo "Could not get the archive, skipping..." + # -> ignore any unpacking errors, the history will be erased + # note: this might need a bit of rethinking or to be blocked later + - tar -xzf content.tar.gz public/ || echo "Archive with other versions in a bad format or not found, skipping..." + # -> loop over all the possible version created so far and remove development ones that are older than MAX_TIME_IN_DAYS + - for version in $(find public/ -maxdepth 1 -mindepth 1 -type d -not -name "master" -not -name "FASTSIM" -not -name "v*" ); do + MAX_TIME=$(expr $MAX_TIME_IN_DAYS \* 86400) + VERSION_TIME=$(stat ${version} -c %Y) + CURRENT_TIME=$(date +%s) + ELAPSED_TIME=$(expr $CURRENT_TIME - $VERSION_TIME) + if (($ELAPSED_TIME > $MAX_TIME )) + then + echo "-> Removing old '${version}'." + rm -r $version + else + "-> Keeping '${version}'." + fi + done + # -> create a new archive and put it on the website + - tar -zcf content.tar.gz public/ + - cp content.tar.gz public/ + artifacts: + paths: + - public + expire_in: 1 month + -- GitLab From 88a2901fd952e381a2db46938673e33056564a2e Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 16:57:25 +0100 Subject: [PATCH 46/56] test docs cleaning2 --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 896a1f55..aca74568 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -85,7 +85,7 @@ build-docs: - docs/_build/html/ expire_in: 1 month -clean-old-pages: +pages: extends: .docs-base needs: - build-docs @@ -115,7 +115,7 @@ clean-old-pages: - public expire_in: 1 month -pages: +clean-old-pages: extends: .docs-base needs: - pages -- GitLab From c205405a31330c3ab6b18d7de9767d35ba2b7cff Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 17:04:44 +0100 Subject: [PATCH 47/56] test docs cleaning3 --- .gitlab-ci.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aca74568..57eb8dca 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -131,16 +131,16 @@ clean-old-pages: - tar -xzf content.tar.gz public/ || echo "Archive with other versions in a bad format or not found, skipping..." # -> loop over all the possible version created so far and remove development ones that are older than MAX_TIME_IN_DAYS - for version in $(find public/ -maxdepth 1 -mindepth 1 -type d -not -name "master" -not -name "FASTSIM" -not -name "v*" ); do - MAX_TIME=$(expr $MAX_TIME_IN_DAYS \* 86400) - VERSION_TIME=$(stat ${version} -c %Y) - CURRENT_TIME=$(date +%s) - ELAPSED_TIME=$(expr $CURRENT_TIME - $VERSION_TIME) - if (($ELAPSED_TIME > $MAX_TIME )) + MAX_TIME=$(expr $MAX_TIME_IN_DAYS \* 86400); + VERSION_TIME=$(stat ${version} -c %Y); + CURRENT_TIME=$(date +%s); + ELAPSED_TIME=$(expr $CURRENT_TIME - $VERSION_TIME); + if (($ELAPSED_TIME > $MAX_TIME )); then - echo "-> Removing old '${version}'." - rm -r $version + echo "-> Removing old '${version}'."; + rm -r $version; else - "-> Keeping '${version}'." + "-> Keeping '${version}'."; fi done # -> create a new archive and put it on the website -- GitLab From 85c23dab479811e4b3b552e6e0f8ceceb3068afb Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 18:55:19 +0100 Subject: [PATCH 48/56] test docs cleaning4 --- .gitlab-ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 57eb8dca..233b2e88 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -131,19 +131,21 @@ clean-old-pages: - tar -xzf content.tar.gz public/ || echo "Archive with other versions in a bad format or not found, skipping..." # -> loop over all the possible version created so far and remove development ones that are older than MAX_TIME_IN_DAYS - for version in $(find public/ -maxdepth 1 -mindepth 1 -type d -not -name "master" -not -name "FASTSIM" -not -name "v*" ); do + echo "Checking version: '${version}'"; MAX_TIME=$(expr $MAX_TIME_IN_DAYS \* 86400); VERSION_TIME=$(stat ${version} -c %Y); CURRENT_TIME=$(date +%s); ELAPSED_TIME=$(expr $CURRENT_TIME - $VERSION_TIME); if (($ELAPSED_TIME > $MAX_TIME )); then - echo "-> Removing old '${version}'."; + echo "--> Expired. Removing."; rm -r $version; else - "-> Keeping '${version}'."; + "--> Not expired."; fi done # -> create a new archive and put it on the website + - echo "Deploying cleaned versions." - tar -zcf content.tar.gz public/ - cp content.tar.gz public/ artifacts: -- GitLab From e922e72cdec7676bba1c567831ed7102b816483a Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 18:56:59 +0100 Subject: [PATCH 49/56] test docs cleaning5 --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 233b2e88..a02e93ce 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -141,7 +141,7 @@ clean-old-pages: echo "--> Expired. Removing."; rm -r $version; else - "--> Not expired."; + echo "--> Not expired."; fi done # -> create a new archive and put it on the website -- GitLab From c9f2f7771c24382b2ba927f12265bd5c574d4b7e Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 19:05:24 +0100 Subject: [PATCH 50/56] Update .gitlab-ci.yml --- .gitlab-ci.yml | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a02e93ce..747ac4db 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -130,18 +130,19 @@ clean-old-pages: # note: this might need a bit of rethinking or to be blocked later - tar -xzf content.tar.gz public/ || echo "Archive with other versions in a bad format or not found, skipping..." # -> loop over all the possible version created so far and remove development ones that are older than MAX_TIME_IN_DAYS - - for version in $(find public/ -maxdepth 1 -mindepth 1 -type d -not -name "master" -not -name "FASTSIM" -not -name "v*" ); do - echo "Checking version: '${version}'"; - MAX_TIME=$(expr $MAX_TIME_IN_DAYS \* 86400); - VERSION_TIME=$(stat ${version} -c %Y); - CURRENT_TIME=$(date +%s); - ELAPSED_TIME=$(expr $CURRENT_TIME - $VERSION_TIME); - if (($ELAPSED_TIME > $MAX_TIME )); + - > + for version in $(find public/ -maxdepth 1 -mindepth 1 -type d -not -name "master" -not -name "FASTSIM" -not -name "v*" ); do + echo "-> Checking version: '${version}'" + MAX_TIME=$(expr $MAX_TIME_IN_DAYS \* 86400) + VERSION_TIME=$(stat ${version} -c %Y) + CURRENT_TIME=$(date +%s) + ELAPSED_TIME=$(expr $CURRENT_TIME - $VERSION_TIME) + if (($ELAPSED_TIME > $MAX_TIME )) then - echo "--> Expired. Removing."; - rm -r $version; + echo "--> Expired. Removing."" + rm -r $version; else - echo "--> Not expired."; + echo "--> Not expired." fi done # -> create a new archive and put it on the website -- GitLab From e02a8652c545dceff6faaefc19c6a6712d6b22bc Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 19:15:53 +0100 Subject: [PATCH 51/56] Update .gitlab-ci.yml --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 747ac4db..b8458341 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -99,8 +99,8 @@ pages: # -> ignore any unpacking errors, the history will be erased # note: this might need a bit of rethinking or to be blocked later - tar -xzf content.tar.gz public/ || echo "Archive with other versions in a bad format or not found, skipping..." - # -> add only the new contents of the current version - - mkdir -p public/$DOCS_VERSION/ + - rm -rf public/$DOCS_VERSION + - mkdir -p public/$DOCS_VERSION - mv docs/_build/html public/$DOCS_VERSION # -> add all the necessary redirects - rm -f public/_redirects -- GitLab From 37eb3a6395b1c57be9edee9dd426c54f2b1adf41 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 19:19:58 +0100 Subject: [PATCH 52/56] Update .gitlab-ci.yml --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b8458341..ab70ce2f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -139,8 +139,8 @@ clean-old-pages: ELAPSED_TIME=$(expr $CURRENT_TIME - $VERSION_TIME) if (($ELAPSED_TIME > $MAX_TIME )) then - echo "--> Expired. Removing."" - rm -r $version; + echo "--> Expired. Removing." + rm -r $version else echo "--> Not expired." fi -- GitLab From 3b24430ed4ce1f1882a9d95a570f02ab55a05053 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 19:55:12 +0100 Subject: [PATCH 53/56] Update .gitlab-ci.yml --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ab70ce2f..5b712712 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -113,7 +113,7 @@ pages: artifacts: paths: - public - expire_in: 1 month + expire_in: 1 hour clean-old-pages: extends: .docs-base @@ -152,5 +152,5 @@ clean-old-pages: artifacts: paths: - public - expire_in: 1 month + expire_in: 1 hour -- GitLab From 8de37f9709b77d55ee224d6b699bf0cbf87eff34 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 20:02:08 +0100 Subject: [PATCH 54/56] Update .gitlab-ci.yml --- .gitlab-ci.yml | 34 +++++----------------------------- 1 file changed, 5 insertions(+), 29 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5b712712..b3a0cc8a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -102,33 +102,6 @@ pages: - rm -rf public/$DOCS_VERSION - mkdir -p public/$DOCS_VERSION - mv docs/_build/html public/$DOCS_VERSION - # -> add all the necessary redirects - - rm -f public/_redirects - - echo "/index.html /master/index.html 301" >> public/_redirects - - echo "/ /master/index.html 301" >> public/_redirects - - echo "/gaussino /master/index.html 301" >> public/_redirects - # -> create a new archive and put it on the website - - tar -zcf content.tar.gz public/ - - cp content.tar.gz public/ - artifacts: - paths: - - public - expire_in: 1 hour - -clean-old-pages: - extends: .docs-base - needs: - - pages - variables: - MAX_TIME_IN_DAYS: 7 - script: - # -> get the archive from the website with the accumulated content and copy it to public/ - - echo "Getting the latest versions from ${GAUSSINO_PAGES_URL}" - # -> curl will create content.tar.gz even if it does not exists - - curl -fkL "$GAUSSINO_PAGES_URL/content.tar.gz" -o "content.tar.gz" || echo "Could not get the archive, skipping..." - # -> ignore any unpacking errors, the history will be erased - # note: this might need a bit of rethinking or to be blocked later - - tar -xzf content.tar.gz public/ || echo "Archive with other versions in a bad format or not found, skipping..." # -> loop over all the possible version created so far and remove development ones that are older than MAX_TIME_IN_DAYS - > for version in $(find public/ -maxdepth 1 -mindepth 1 -type d -not -name "master" -not -name "FASTSIM" -not -name "v*" ); do @@ -145,12 +118,15 @@ clean-old-pages: echo "--> Not expired." fi done + # -> add all the necessary redirects + - rm -f public/_redirects + - echo "/index.html /master/index.html 301" >> public/_redirects + - echo "/ /master/index.html 301" >> public/_redirects + - echo "/gaussino /master/index.html 301" >> public/_redirects # -> create a new archive and put it on the website - - echo "Deploying cleaned versions." - tar -zcf content.tar.gz public/ - cp content.tar.gz public/ artifacts: paths: - public expire_in: 1 hour - -- GitLab From df452e3516b0d972376d10ce8cdd107678c0d789 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 20:07:18 +0100 Subject: [PATCH 55/56] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b3a0cc8a..ae012e42 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -87,6 +87,8 @@ build-docs: pages: extends: .docs-base + variables: + MAX_TIME_IN_DAYS: 7 needs: - build-docs script: -- GitLab From 71951702d14bd9644fe3bc4b14016360a48cb110 Mon Sep 17 00:00:00 2001 From: Michal Mazurek <michal.mazurek@cern.ch> Date: Thu, 26 Jan 2023 20:14:13 +0100 Subject: [PATCH 56/56] Update .gitlab-ci.yml --- .gitlab-ci.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ae012e42..8bb0791a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -101,9 +101,6 @@ pages: # -> ignore any unpacking errors, the history will be erased # note: this might need a bit of rethinking or to be blocked later - tar -xzf content.tar.gz public/ || echo "Archive with other versions in a bad format or not found, skipping..." - - rm -rf public/$DOCS_VERSION - - mkdir -p public/$DOCS_VERSION - - mv docs/_build/html public/$DOCS_VERSION # -> loop over all the possible version created so far and remove development ones that are older than MAX_TIME_IN_DAYS - > for version in $(find public/ -maxdepth 1 -mindepth 1 -type d -not -name "master" -not -name "FASTSIM" -not -name "v*" ); do @@ -112,14 +109,17 @@ pages: VERSION_TIME=$(stat ${version} -c %Y) CURRENT_TIME=$(date +%s) ELAPSED_TIME=$(expr $CURRENT_TIME - $VERSION_TIME) - if (($ELAPSED_TIME > $MAX_TIME )) - then - echo "--> Expired. Removing." - rm -r $version - else - echo "--> Not expired." - fi + if (($ELAPSED_TIME > $MAX_TIME )); then + echo "--> Expired. Removing." + rm -r $version + else + echo "--> Not expired." + fi done + # -> move the current version + - rm -rf public/$DOCS_VERSION + - mkdir -p public/$DOCS_VERSION + - mv docs/_build/html public/$DOCS_VERSION # -> add all the necessary redirects - rm -f public/_redirects - echo "/index.html /master/index.html 301" >> public/_redirects -- GitLab