diff --git a/cmake/NOvARwgtSetup.cmake b/cmake/NOvARwgtSetup.cmake
new file mode 100644
index 0000000..eb67270
--- /dev/null
+++ b/cmake/NOvARwgtSetup.cmake
@@ -0,0 +1,14 @@
+if(NOVARWGT STREQUAL "")
+ cmessage(FATAL_ERROR "Variable NOVARWGT is not defined. "
+ "The location of a pre-built NOVARWGT install must be defined either as"
+ " $ cmake -DNOVARWGT=/path/to/NOVARWGT or as an environment variable"
+ " $ export NOVARWGT=/path/to/NOVARWGT")
+endif()
+
+LIST(APPEND EXTRA_CXX_FLAGS -D__NOVA_ENABLED__)
+
+LIST(APPEND RWENGINE_INCLUDE_DIRECTORIES ${NOVARWGT}/inc)
+
+LIST(APPEND EXTRA_LINK_DIRS ${NOVARWGT}/lib)
+
+LIST(APPEND EXTRA_LIBS NOvARwgt)
diff --git a/cmake/ReweightEnginesSetup.cmake b/cmake/ReweightEnginesSetup.cmake
index 753c11a..4a84f0e 100644
--- a/cmake/ReweightEnginesSetup.cmake
+++ b/cmake/ReweightEnginesSetup.cmake
@@ -1,86 +1,93 @@
# Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret
################################################################################
# This file is part of NUISANCE.
#
# NUISANCE is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# NUISANCE is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with NUISANCE. If not, see .
################################################################################
################################## T2K ######################################
if(USE_T2K)
include(${CMAKE_SOURCE_DIR}/cmake/T2KSetup.cmake)
cmessage(STATUS "Using T2K Reweight engine.")
set(USE_T2K TRUE CACHE BOOL "Whether to enable T2KReWeight support. Requires external libraries. " FORCE)
endif()
################################## NIWG ######################################
if(USE_NIWG)
include(${CMAKE_SOURCE_DIR}/cmake/NIWGSetup.cmake)
cmessage(STATUS "Using NIWG Reweight engine.")
set(USE_NIWG TRUE CACHE BOOL "Whether to enable (T2K) NIWG ReWeight support. Requires external libraries. " FORCE)
endif()
################################## MINERvA ######################################
if(USE_MINERvA_RW)
include(${CMAKE_SOURCE_DIR}/cmake/MINERvASetup.cmake)
cmessage(STATUS "Using MINERvA Reweight engine.")
set(USE_MINERvA_RW TRUE CACHE BOOL "Whether to enable MINERvA ReWeight support. " FORCE)
endif()
################################## NEUT ######################################
if(USE_NEUT)
include(${CMAKE_SOURCE_DIR}/cmake/NEUTSetup.cmake)
cmessage(STATUS "Using NEUT Reweight engine.")
set(USE_NEUT TRUE CACHE BOOL "Whether to enable NEUT (reweight) support. Requires external libraries. " FORCE)
endif()
################################# NuWro ######################################
if(USE_NuWro)
include(${CMAKE_SOURCE_DIR}/cmake/NuWroSetup.cmake)
cmessage(STATUS "Using NuWro Reweight engine.")
set(USE_NuWro TRUE CACHE BOOL "Whether to enable NuWro support. " FORCE)
endif()
################################## GENIE #####################################
if(USE_GENIE)
include(${CMAKE_SOURCE_DIR}/cmake/GENIESetup.cmake)
cmessage(STATUS "Using GENIE Reweight engine.")
set(USE_GENIE TRUE CACHE BOOL "Whether to enable GENIE (reweight) support. Requires external libraries. " FORCE)
endif()
################################################################################
+################################ NOvARwgt ####################################
+if(USE_NOvARwgt)
+ include(${CMAKE_SOURCE_DIR}/cmake/NOvARwgtSetup.cmake)
+ cmessage(STATUS "Using NOvARwgt Reweight engine.")
+ set(USE_NOvARwgt TRUE CACHE BOOL "Whether to enable NOvARwgt (reweight) support. Requires external libraries. " FORCE)
+endif()
+
+################################################################################
################################ Prob3++ ####################################
include(${CMAKE_SOURCE_DIR}/cmake/Prob3++Setup.cmake)
################################################################################
-
cmessage(STATUS "Reweight engine include directories: ${RWENGINE_INCLUDE_DIRECTORIES}")
if(NEED_ROOTEVEGEN)
cmessage(STATUS "Require ROOT eve generation libraries")
LIST(REVERSE ROOT_LIBS)
LIST(APPEND ROOT_LIBS
Gui
Ged
Geom
TreePlayer
EG
Eve)
LIST(REVERSE ROOT_LIBS)
endif()
if(NEED_ROOTPYTHIA6)
cmessage(STATUS "Require ROOT Pythia6 libraries")
LIST(APPEND ROOT_LIBS
EGPythia6)
endif()
LIST(APPEND EXTRA_LIBS ${ROOT_LIBS})
diff --git a/cmake/cacheVariables.cmake b/cmake/cacheVariables.cmake
index 52d5ea1..70e0763 100644
--- a/cmake/cacheVariables.cmake
+++ b/cmake/cacheVariables.cmake
@@ -1,220 +1,225 @@
# Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret
################################################################################
# This file is part of NUISANCE.
#
# NUISANCE is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# NUISANCE is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with NUISANCE. If not, see .
################################################################################
function(CheckAndSetDefaultEnv VARNAME DEFAULT CACHETYPE DOCSTRING ENVNAME)
#cmessage(DEBUG "Trying to assign variable ${VARNAME} into the cache.")
if(NOT DEFINED ${VARNAME})
if(DEFINED ENV{${ENVNAME}} AND NOT $ENV{${ENVNAME}} STREQUAL "")
set(${VARNAME} $ENV{${ENVNAME}} CACHE ${CACHETYPE} ${DOCSTRING})
cmessage(DEBUG " Read ${VARNAME} from ENVVAR ${ENVNAME} as $ENV{${ENVNAME}}.")
else()
set(${VARNAME} ${DEFAULT} CACHE ${CACHETYPE} ${DOCSTRING})
endif()
else()
set(${VARNAME} ${${VARNAME}} CACHE ${CACHETYPE} ${DOCSTRING})
unset(${VARNAME})
endif()
cmessage(CACHE "--Set cache variable: \"${VARNAME}\" to \"${${VARNAME}}\", in cache ${CACHETYPE}.")
endfunction()
function(CheckAndSetDefaultCache VARNAME DEFAULT CACHETYPE DOCSTRING)
# cmessage(DEBUG "Trying to assign variable ${VARNAME} into the cache.")
if(NOT DEFINED ${VARNAME})
set(${VARNAME} ${DEFAULT} CACHE ${CACHETYPE} ${DOCSTRING})
else()
set(${VARNAME} ${${VARNAME}} CACHE ${CACHETYPE} ${DOCSTRING})
unset(${VARNAME})
endif()
cmessage(CACHE "--Set cache variable: \"${VARNAME}\" to \"${${VARNAME}}\", in cache ${CACHETYPE}.")
endfunction()
function(CheckAndSetDefault VARNAME DEFAULT)
# cmessage(DEBUG "Trying to assign variable ${VARNAME}.")
if(NOT DEFINED ${VARNAME})
set(${VARNAME} ${DEFAULT} PARENT_SCOPE)
set(${VARNAME} ${DEFAULT})
endif()
cmessage(CACHE "--Set variable: \"${VARNAME}\" to \"${${VARNAME}}\".")
endfunction()
CheckAndSetDefaultCache(VERBOSE TRUE BOOL "Whether to configure loudly.")
set (CMAKE_SKIP_BUILD_RPATH TRUE)
#Changes default install path to be a subdirectory of the build dir.
#Can set build dir at configure time with -DCMAKE_INSTALL_PREFIX=/install/path
if(CMAKE_INSTALL_PREFIX STREQUAL "" OR CMAKE_INSTALL_PREFIX STREQUAL
"/usr/local")
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}")
elseif(NOT DEFINED CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}")
endif()
if(CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE DEBUG)
elseif(NOT DEFINED CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE DEBUG)
endif()
CheckAndSetDefaultCache(EXTRA_SETUP_SCRIPT "" PATH "The path to an extra script to inject into the NUISANCE setup script. <>")
CheckAndSetDefaultCache(USE_MINIMIZER TRUE INTERNAL "Whether we are using the ROOT minimization libraries. ")
CheckAndSetDefaultCache(USE_ROOT6 FALSE INTERNAL "Whether we are using the ROOT 6. ")
CheckAndSetDefaultCache(USE_HEPMC FALSE BOOL "Whether to enable HepMC input support. ")
CheckAndSetDefaultEnv(HEPMC "" PATH "Path to HepMC source tree root directory. Overrides environment variable \$HEPMC <>" HEPMC)
CheckAndSetDefaultCache(HEPMC_MOMUNIT "GEV" STRING "HepMC momentum units [MEV|GEV]. ")
CheckAndSetDefaultCache(HEPMC_LENUNIT "CM" STRING "HepMC momentum units [MM|CM]. ")
CheckAndSetDefaultCache(HEPMC_USED_EP FALSE INTERNAL "Whether we built HepMC or not. ")
CheckAndSetDefaultCache(USE_NEUT FALSE BOOL "Whether to enable NEUT (reweight) support. Requires external libraries. ")
CheckAndSetDefaultEnv(NEUT_VERSION FALSE STRING "NEUT version string, e.g. 5.4.0. <5.4.0>" NEUT_VERSION)
CheckAndSetDefaultEnv(NEUT_ROOT "" PATH "Path to NEUT source tree root directory. Overrides environment variable \$NEUT_ROOT <>" NEUT_ROOT)
CheckAndSetDefaultEnv(CERN "" PATH "Path to CERNLIB source tree root directory that NEUT was built against. Overrides environment variable \$CERN <>" CERN)
CheckAndSetDefaultEnv(CERN_LEVEL "" STRING "CERNLIB Library version. Overrides environment variable \$CERN_LEVEL <>" CERN_LEVEL)
CheckAndSetDefaultCache(USE_NuWro FALSE BOOL "Whether to enable NuWro support. ")
CheckAndSetDefaultEnv(NUWRO "" PATH "Path to NuWro source tree root directory. Overrides environment variable \$NUWRO <>" NUWRO)
CheckAndSetDefaultEnv(NUWRO_INC "" PATH "Path to NuWro installed includes directory, needs to contain \"params_all.h\". Overrides environment variable \$NUWRO_INC <>" NUWRO_INC)
CheckAndSetDefaultCache(NUWRO_INPUT_FILE "" FILEPATH "Path to an input NuWro event vector, which can be used to build NuWro i/o libraries. <>")
CheckAndSetDefaultCache(NUWRO_BUILT_FROM_FILE FALSE INTERNAL "Whether the NuWro libraries were built by NUISANCE. ")
CheckAndSetDefaultCache(USE_NuWro_RW FALSE BOOL "Whether to try and build support for NuWro reweighting. ")
CheckAndSetDefaultCache(USE_NuWro_SRW_Event FALSE BOOL "Whether to use cut down NuWro reweight event format. Requires NuWro reweight. ")
CheckAndSetDefaultCache(USE_GENIE FALSE BOOL "Whether to enable GENIE (reweight) support. Requires external libraries. ")
CheckAndSetDefaultCache(GENIE_VERSION "AUTO" STRING "GENIE Version ")
CheckAndSetDefaultEnv(GENIE "" PATH "Path to GENIE source tree root directory. Overrides environment variable \$GENIE <>" GENIE)
CheckAndSetDefaultEnv(GENIE_REWEIGHT "" PATH "Path to GENIE ReWeight directory. Only relevant for GENIE v3+. Overrides environment variable \$GENIE_REWEIGHT <>" GENIE_REWEIGHT)
CheckAndSetDefaultCache(GENIE_EMPMEC_REWEIGHT FALSE BOOL "Whether to use GENIE EMP MEC reweight (requires custom GENIE) ")
CheckAndSetDefaultEnv(LHAPDF_LIB "" PATH "Path to pre-built LHAPDF libraries. Overrides environment variable \$LHAPDF_LIB. <>" LHAPDF_LIB)
CheckAndSetDefaultEnv(LHAPDF_INC "" PATH "Path to installed LHAPDF headers. Overrides environment variable \$LHAPDF_INC. <>" LHAPDF_INC)
CheckAndSetDefaultEnv(LHAPATH "" PATH "Path to LHA PDF inputs. Overrides environment variable \$LHAPATH. <>" LHAPATH)
CheckAndSetDefaultEnv(LIBXML2_LIB "" PATH "Path to pre-built LIBXML2 libraries. Overrides environment variable \$LIBXML2_LIB. <>" LIBXML2_LIB)
CheckAndSetDefaultEnv(LIBXML2_INC "" PATH "Path to installed LIBXML2 headers. Overrides environment variable \$LIBXML2_INC. <>" LIBXML2_INC)
CheckAndSetDefaultEnv(LOG4CPP_LIB "" PATH "Path to pre-built LOG4CPP libraries. Overrides environment variable \$LOG4CPP_LIB. <>" LOG4CPP_LIB)
CheckAndSetDefaultEnv(LOG4CPP_INC "" PATH "Path to installed LOG4CPP headers. Overrides environment variable \$LOG4CPP_INC. <>" LOG4CPP_INC)
CheckAndSetDefaultEnv(GSL_LIB "" PATH "Path to pre-built gsl libraries. Overrides environment variable \$GSL_LIB. <>" GSL_LIB)
CheckAndSetDefaultEnv(GSL_INC "" PATH "Path to installed gsl headers. Overrides environment variable \$GSL_INC. <>" GSL_INC)
CheckAndSetDefaultCache(BUILD_GEVGEN FALSE BOOL "Whether to build nuisance_gevgen app.")
CheckAndSetDefaultCache(USE_T2K FALSE BOOL "Whether to enable T2KReWeight support. Requires external libraries. ")
CheckAndSetDefaultEnv(T2KREWEIGHT "" PATH "Path to installed T2KREWEIGHTReWeight. Overrides environment variable \$T2KREWEIGHT. <>" T2KREWEIGHT)
CheckAndSetDefaultCache(USE_NIWG FALSE BOOL "Whether to enable (T2K) NIWG ReWeight support. Requires external libraries. ")
CheckAndSetDefaultEnv(NIWG_ROOT "" PATH "Path to installed NIWGReWeight. Overrides environment variable \$NIWG. <>" NIWG)
CheckAndSetDefaultCache(USE_MINERvA_RW FALSE BOOL "Whether to enable MINERvA ReWeight support. ")
+CheckAndSetDefaultCache(USE_NOvARwgt FALSE BOOL "Whether to enable MINERvA ReWeight support. ")
+
+CheckAndSetDefaultEnv(NOVARWGT "" PATH "Path to directory containing libPythia6.so. Overrides environment variable \$NOVARWGT <>" NOVARWGT)
+
+
CheckAndSetDefaultEnv(PYTHIA6 "" PATH "Path to directory containing libPythia6.so. Overrides environment variable \$PYTHIA6 <>" PYTHIA6)
CheckAndSetDefaultEnv(PYTHIA8 "" PATH "Path to directory containing libPythia8.so. Overrides environment variable \$PYTHIA8 <>" PYTHIA8)
CheckAndSetDefaultCache(USE_PYTHIA8 FALSE BOOL "Whether to enable PYTHIA8 event support. ")
CheckAndSetDefaultCache(USE_GiBUU TRUE BOOL "Whether to enable GiBUU event support. ")
CheckAndSetDefaultCache(BUILD_GiBUU FALSE BOOL "Whether to build supporting GiBUU event tools along with a patched version of GiBUU. ")
CheckAndSetDefaultCache(USE_NUANCE TRUE BOOL "Whether to enable NUANCE event support. ")
CheckAndSetDefaultCache(USE_PROB3PP FALSE BOOL "Whether to download and compile in Prob3++ support. ")
CheckAndSetDefaultCache(NO_EXTERNAL_UPDATE FALSE BOOL "Whether to perform the update target for external dependencies. Note this may produce errors for CMake < 3.8 where a bug was fixed for the feature that this option invokes. ")
CheckAndSetDefaultCache(USE_GPERFTOOLS FALSE BOOL "Whether to compile in google performance tools. ")
CheckAndSetDefault(NEED_PYTHIA6 FALSE)
CheckAndSetDefault(NEED_PYTHIA8 FALSE)
CheckAndSetDefault(NEED_ROOTEVEGEN FALSE)
CheckAndSetDefault(NEED_ROOTPYTHIA6 FALSE)
CheckAndSetDefaultCache(USE_OMP FALSE BOOL "Whether to enable multicore features (there currently are none...). ")
CheckAndSetDefaultCache(USE_DYNSAMPLES TRUE BOOL "Whether to enable the dynamic sample loader. ")
CheckAndSetDefault(NO_EXPERIMENTS FALSE)
cmessage(STATUS "NO_EXPERIMENTS: ${NO_EXPERIMENTS}")
CheckAndSetDefaultCache(NO_ANL ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build ANL samples. <-DNO_EXPERIMENTS=FALSE>")
CheckAndSetDefaultCache(NO_ArgoNeuT ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build ArgoNeuT samples. <-DNO_EXPERIMENTS=FALSE>")
CheckAndSetDefaultCache(NO_BEBC ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build BEBC samples. <-DNO_EXPERIMENTS=FALSE>")
CheckAndSetDefaultCache(NO_BNL ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build BNL samples. <-DNO_EXPERIMENTS=FALSE>")
CheckAndSetDefaultCache(NO_FNAL ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build FNAL samples. <-DNO_EXPERIMENTS=FALSE>")
CheckAndSetDefaultCache(NO_GGM ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build GGM samples. <-DNO_EXPERIMENTS=FALSE>")
CheckAndSetDefaultCache(NO_K2K ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build K2K samples. <-DNO_EXPERIMENTS=FALSE>")
CheckAndSetDefaultCache(NO_MINERvA ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build MINERvA samples. <-DNO_EXPERIMENTS=FALSE>")
CheckAndSetDefaultCache(NO_MiniBooNE ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build MiniBooNE samples. <-DNO_EXPERIMENTS=FALSE>")
CheckAndSetDefaultCache(NO_T2K ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build T2K samples. <-DNO_EXPERIMENTS=FALSE>")
CheckAndSetDefaultCache(NO_SciBooNE ${NO_EXPERIMENTS} BOOL "Whether to *NOT* build SciBooNE samples. <-DNO_EXPERIMENTS=FALSE>")
function(SAYVARS)
LIST(APPEND VARS
USE_HEPMC
HEPMC
HEPMC_MOMUNIT
HEPMC_LENUNIT
HEPMC_USED_EP
USE_NEUT
NEUT_ROOT
CERN
CERN_LEVEL
USE_NuWro
NUWRO
NUWRO_INC
NUWRO_INPUT_FILE
NUWRO_BUILT_FROM_FILE
USE_GENIE
GENIE
LHAPDF_LIB
LHAPDF_INC
LIBXML2_LIB
LIBXML2_INC
LOG4CPP_LIB
GENIE_LOG4CPP_INC
BUILD_GEVGEN
USE_T2K
USE_NIWG
USE_GiBUU
BUILD_GiBUU
USE_NUANCE
NO_EXTERNAL_UPDATE
USE_GPERFTOOLS
NO_ANL
NO_ArgoNeuT
NO_BEBC
NO_BNL
NO_FNAL
NO_GGM
NO_K2K
NO_MINERvA
NO_MiniBooNE
NO_T2K
NO_SciBooNE)
foreach(v ${VARS})
if(DEFINED ${v})
cmessage(DEBUG "VARIABLE: \"${v}\" = \"${${v}}\"")
endif()
endforeach(v)
endfunction()
diff --git a/cmake/setup.sh.in b/cmake/setup.sh.in
index 9956d8a..caf39bd 100644
--- a/cmake/setup.sh.in
+++ b/cmake/setup.sh.in
@@ -1,160 +1,165 @@
# Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret
################################################################################
# This file is part of NUISANCE.
#
# NUISANCE is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# NUISANCE is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with NUISANCE. If not, see .
################################################################################
#!/bin/sh
### Adapted from https://unix.stackexchange.com/questions/4965/keep-duplicates-out-of-path-on-source
function add_to_PATH () {
for d; do
d=$(cd -- "$d" && { pwd -P || pwd; }) 2>/dev/null # canonicalize symbolic links
if [ -z "$d" ]; then continue; fi # skip nonexistent directory
if [ "$d" == "/usr/bin" ] || [ "$d" == "/usr/bin64" ] || [ "$d" == "/usr/local/bin" ] || [ "$d" == "/usr/local/bin64" ]; then
case ":$PATH:" in
*":$d:"*) :;;
*) export PATH=$PATH:$d;;
esac
else
case ":$PATH:" in
*":$d:"*) :;;
*) export PATH=$d:$PATH;;
esac
fi
done
}
function add_to_LD_LIBRARY_PATH () {
for d; do
d=$(cd -- "$d" && { pwd -P || pwd; }) 2>/dev/null # canonicalize symbolic links
if [ -z "$d" ]; then continue; fi # skip nonexistent directory
if [ "$d" == "/usr/lib" ] || [ "$d" == "/usr/lib64" ] || [ "$d" == "/usr/local/lib" ] || [ "$d" == "/usr/local/lib64" ]; then
case ":$LD_LIBRARY_PATH:" in
*":$d:"*) :;;
*) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$d;;
esac
else
case ":$LD_LIBRARY_PATH:" in
*":$d:"*) :;;
*) export LD_LIBRARY_PATH=$d:$LD_LIBRARY_PATH;;
esac
fi
done
}
if [ "@EXTRA_SETUP_SCRIPT@" ]; then
if [ ! -e @EXTRA_SETUP_SCRIPT@ ]; then
echo "[WARN]: Extra setup script \"@EXTRA_SETUP_SCRIPT@\" requested, but could not be found. Skipping..."
else
echo "[INFO]: Sourcing extra setup from \"@EXTRA_SETUP_SCRIPT@\"."
. @EXTRA_SETUP_SCRIPT@
fi
fi
add_to_PATH "@CMAKE_INSTALL_PREFIX@/bin"
add_to_LD_LIBRARY_PATH "@CMAKE_INSTALL_PREFIX@/lib"
if [ ! "${ROOTSYS}" ]; then
echo "[INFO]: Sourcing ROOT from: @CMAKE_ROOTSYS@"
source "@CMAKE_ROOTSYS@/bin/thisroot.sh"
fi
if [ "@USE_T2K@" != "FALSE" ]; then
echo "[INFO]: Adding T2K paths to the environment."
export T2KREWEIGHT=@T2KREWEIGHT@
add_to_LD_LIBRARY_PATH "@T2KREWEIGHT@/lib"
fi
if [ "@USE_NIWG@" != "FALSE" ]; then
echo "[INFO]: Adding NIWG paths to the environment."
export NIWG=@NIWG_ROOT@
export NIWGREWEIGHT_INPUTS=@NIWG_ROOT@/inputs
add_to_LD_LIBRARY_PATH "@NIWG_ROOT@"
fi
if [ "@USE_NEUT@" != "FALSE" ]; then
echo "[INFO]: Adding NEUT library paths to the environment."
export NEUT_ROOT=@NEUT_ROOT@
export CERN=@CERN@
export CERN_LEVEL=@CERN_LEVEL@
add_to_LD_LIBRARY_PATH "${NEUT_LIB_DIR}" "${NEUT_ROOT}/src/reweight"
fi
if [ "@USE_NuWro@" != "FALSE" ]; then
if [ "@NUWRO_BUILT_FROM_FILE@" == "FALSE" ]; then
echo "[INFO]: Adding NuWro library paths to the environment."
export NUWRO="@NUWRO@"
add_to_PATH "@NUWRO@/bin"
add_to_LD_LIBRARY_PATH "@NUWRO@/build/@CMAKE_SYSTEM_NAME@/lib"
if [ "@NUWRO_INC@" ]; then
export NUWRO_INC=@NUWRO_INC@
fi
else
echo "[INFO]: NuWro support included from input event file."
fi
fi
if [ "@NEED_PYTHIA6@" != "FALSE" ]; then
echo "[INFO]: Adding PYTHIA6 library paths to the environment."
export PYTHIA6="@PYTHIA6@"
add_to_LD_LIBRARY_PATH "@PYTHIA6@"
fi
if [ "@USE_GENIE@" != "FALSE" ]; then
echo "[INFO]: Adding GENIE paths to the environment."
export GENIE="@GENIE@"
export LHAPDF_LIB="@LHAPDF_LIB@"
export LHAPDF_INC="@LHAPDF_INC@"
export LIBXML2_LIB="@LIBXML2_LIB@"
export LIBXML2_INC="@LIBXML2_INC@"
export LOG4CPP_LIB="@LOG4CPP_LIB@"
export LOG4CPP_INC="@LOG4CPP_INC@"
if [ "@LHAPATH@" ]; then
export LHAPATH="@LHAPATH@"
fi
add_to_PATH "@GENIE@/bin"
add_to_LD_LIBRARY_PATH "@GENIE@/lib" "@LHAPDF_LIB@" "@LIBXML2_LIB@" "@LOG4CPP_LIB@"
if [ "@GENIE_REWEIGHT@" ]; then
export GENIE_REWEIGHT="@GENIE_REWEIGHT@"
add_to_LD_LIBRARY_PATH "@GENIE_REWEIGHT@/lib"
fi
fi
if [ "@BUILD_GiBUU@" != "FALSE" ]; then
echo "[INFO]: Sourcing GiBUU tools."
source @CMAKE_BINARY_DIR@/GiBUUTools/src/GiBUUTools-build/Linux/setup.sh
fi
+if [ "@USE_NOvARwgt@" != "FALSE" ]; then
+ export NOVARWGT=@NOVARWGT@
+ add_to_LD_LIBRARY_PATH @NOVARWGT@/lib
+fi
+
export NUISANCE="@CMAKE_SOURCE_DIR@"
diff --git a/src/Reweight/CMakeLists.txt b/src/Reweight/CMakeLists.txt
index 55b9fef..5ca22b8 100644
--- a/src/Reweight/CMakeLists.txt
+++ b/src/Reweight/CMakeLists.txt
@@ -1,83 +1,91 @@
# Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret
################################################################################
# This file is part of NUISANCE.
#
# NUISANCE is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# NUISANCE is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with NUISANCE. If not, see .
################################################################################
set(IMPLFILES
GlobalDialList.cxx
FitWeight.cxx
WeightEngineBase.cxx
NEUTWeightEngine.cxx
NuWroWeightEngine.cxx
GENIEWeightEngine.cxx
WeightUtils.cxx
SampleNormEngine.cxx
LikelihoodWeightEngine.cxx
SplineWeightEngine.cxx
NUISANCESyst.cxx
T2KWeightEngine.cxx
NUISANCEWeightEngine.cxx
NUISANCEWeightCalcs.cxx
NIWGWeightEngine.cxx
OscWeightEngine.cxx
MINERvAWeightCalcs.cxx
weightRPA.h
)
+if(USE_NOvARwgt)
+ LIST(APPEND IMPLFILES NOvARwgtEngine.cxx)
+endif()
+
set(HEADERFILES
GlobalDialList.h
FitWeight.h
WeightEngineBase.h
NEUTWeightEngine.h
NuWroWeightEngine.h
GENIEWeightEngine.h
WeightUtils.h
SampleNormEngine.h
LikelihoodWeightEngine.h
SplineWeightEngine.h
NUISANCESyst.h
T2KWeightEngine.h
NUISANCEWeightEngine.h
NUISANCEWeightCalcs.h
NIWGWeightEngine.h
OscWeightEngine.h
MINERvAWeightCalcs.h
weightRPA.h
)
+if(USE_NOvARwgt)
+ LIST(APPEND HEADERFILES NOvARwgtEngine.h)
+endif()
+
set(LIBNAME Reweight)
if(CMAKE_BUILD_TYPE MATCHES DEBUG)
add_library(${LIBNAME} STATIC ${IMPLFILES})
else(CMAKE_BUILD_TYPE MATCHES RELEASE)
add_library(${LIBNAME} SHARED ${IMPLFILES})
endif()
include_directories(${MINIMUM_INCLUDE_DIRECTORIES})
set_target_properties(${LIBNAME} PROPERTIES VERSION
"${ExtFit_VERSION_MAJOR}.${ExtFit_VERSION_MINOR}.${ExtFit_VERSION_REVISION}")
#set_target_properties(${LIBNAME} PROPERTIES LINK_FLAGS ${ROOT_LD_FLAGS})
if(DEFINED PROJECTWIDE_EXTRA_DEPENDENCIES)
add_dependencies(${LIBNAME} ${PROJECTWIDE_EXTRA_DEPENDENCIES})
endif()
install(TARGETS ${LIBNAME} DESTINATION lib)
#Can uncomment this to install the headers... but is it really neccessary?
install(FILES ${HEADERFILES} DESTINATION include)
set(MODULETargets ${MODULETargets} ${LIBNAME} PARENT_SCOPE)
diff --git a/src/Reweight/FitWeight.cxx b/src/Reweight/FitWeight.cxx
index 36964a8..863d143 100644
--- a/src/Reweight/FitWeight.cxx
+++ b/src/Reweight/FitWeight.cxx
@@ -1,275 +1,284 @@
#include "FitWeight.h"
#include "GENIEWeightEngine.h"
#include "LikelihoodWeightEngine.h"
#include "ModeNormEngine.h"
#include "NEUTWeightEngine.h"
#include "NIWGWeightEngine.h"
#include "NUISANCEWeightEngine.h"
#include "NuWroWeightEngine.h"
#include "OscWeightEngine.h"
#include "SampleNormEngine.h"
#include "SplineWeightEngine.h"
#include "T2KWeightEngine.h"
+#ifdef __NOVA_ENABLED__
+#include "NOvARwgtEngine.h"
+#endif
+
void FitWeight::AddRWEngine(int type) {
LOG(FIT) << "Adding reweight engine " << type << std::endl;
switch (type) {
- case kNEUT:
- fAllRW[type] = new NEUTWeightEngine("neutrw");
- break;
-
- case kNUWRO:
- fAllRW[type] = new NuWroWeightEngine("nuwrorw");
- break;
-
- case kGENIE:
- fAllRW[type] = new GENIEWeightEngine("genierw");
- break;
-
- case kNORM:
- fAllRW[type] = new SampleNormEngine("normrw");
- break;
-
- case kLIKEWEIGHT:
- fAllRW[type] = new LikelihoodWeightEngine("likerw");
- break;
-
- case kT2K:
- fAllRW[type] = new T2KWeightEngine("t2krw");
- break;
-
- case kCUSTOM:
- fAllRW[type] = new NUISANCEWeightEngine("nuisrw");
- break;
-
- case kSPLINEPARAMETER:
- fAllRW[type] = new SplineWeightEngine("splinerw");
- break;
-
- case kNIWG:
- fAllRW[type] = new NIWGWeightEngine("niwgrw");
- break;
- case kOSCILLATION:
- fAllRW[type] = new OscWeightEngine();
- break;
- case kMODENORM:
- fAllRW[type] = new ModeNormEngine();
- break;
- default:
- THROW("CANNOT ADD RW Engine for unknown dial type: " << type);
- break;
+ case kNEUT:
+ fAllRW[type] = new NEUTWeightEngine("neutrw");
+ break;
+
+ case kNUWRO:
+ fAllRW[type] = new NuWroWeightEngine("nuwrorw");
+ break;
+
+ case kGENIE:
+ fAllRW[type] = new GENIEWeightEngine("genierw");
+ break;
+
+ case kNORM:
+ fAllRW[type] = new SampleNormEngine("normrw");
+ break;
+
+ case kLIKEWEIGHT:
+ fAllRW[type] = new LikelihoodWeightEngine("likerw");
+ break;
+
+ case kT2K:
+ fAllRW[type] = new T2KWeightEngine("t2krw");
+ break;
+
+ case kCUSTOM:
+ fAllRW[type] = new NUISANCEWeightEngine("nuisrw");
+ break;
+
+ case kSPLINEPARAMETER:
+ fAllRW[type] = new SplineWeightEngine("splinerw");
+ break;
+
+ case kNIWG:
+ fAllRW[type] = new NIWGWeightEngine("niwgrw");
+ break;
+ case kOSCILLATION:
+ fAllRW[type] = new OscWeightEngine();
+ break;
+ case kMODENORM:
+ fAllRW[type] = new ModeNormEngine();
+ break;
+ case kNOvARWGT:
+ fAllRW[type] = new NOvARwgtEngine();
+ break;
+ default:
+ THROW("CANNOT ADD RW Engine for unknown dial type: " << type);
+ break;
}
}
-WeightEngineBase* FitWeight::GetRWEngine(int type) {
+WeightEngineBase *FitWeight::GetRWEngine(int type) {
if (HasRWEngine(type)) {
return fAllRW[type];
}
THROW("CANNOT get RW Engine for dial type: " << type);
}
bool FitWeight::HasRWEngine(int type) {
switch (type) {
- case kNEUT:
- case kNUWRO:
- case kGENIE:
- case kNORM:
- case kLIKEWEIGHT:
- case kT2K:
- case kCUSTOM:
- case kSPLINEPARAMETER:
- case kNIWG:
- case kOSCILLATION: {
- return fAllRW.count(type);
- }
- default: { THROW("CANNOT get RW Engine for dial type: " << type); }
+ case kNEUT:
+ case kNUWRO:
+ case kGENIE:
+ case kNORM:
+ case kLIKEWEIGHT:
+ case kT2K:
+ case kCUSTOM:
+ case kSPLINEPARAMETER:
+ case kNIWG:
+ case kOSCILLATION:
+ case kNOvARWGT: {
+ return fAllRW.count(type);
+ }
+ default: { THROW("CANNOT get RW Engine for dial type: " << type); }
}
}
void FitWeight::IncludeDial(std::string name, std::string type, double val) {
// Should register the dial here.
int typeenum = Reweight::ConvDialType(type);
IncludeDial(name, typeenum, val);
}
void FitWeight::IncludeDial(std::string name, int dialtype, double val) {
// Get the dial enum
int nuisenum = Reweight::ConvDial(name, dialtype);
if (nuisenum == -1) {
THROW("NUISENUM == " << nuisenum << " for " << name);
}
// Setup RW Engine Pointer
if (fAllRW.find(dialtype) == fAllRW.end()) {
AddRWEngine(dialtype);
}
- WeightEngineBase* rw = fAllRW[dialtype];
+ WeightEngineBase *rw = fAllRW[dialtype];
// Include the dial
rw->IncludeDial(name, val);
// Set Dial Value
if (val != -9999.9) {
rw->SetDialValue(name, val);
}
// Sort Maps
fAllEnums[name] = nuisenum;
fAllValues[nuisenum] = val;
// Sort Lists
fNameList.push_back(name);
fEnumList.push_back(nuisenum);
fValueList.push_back(val);
}
void FitWeight::Reconfigure(bool silent) {
// Reconfigure all added RW engines
- for (std::map::iterator iter = fAllRW.begin();
+ for (std::map::iterator iter = fAllRW.begin();
iter != fAllRW.end(); iter++) {
(*iter).second->Reconfigure(silent);
}
}
void FitWeight::SetDialValue(std::string name, double val) {
// Add extra check, if name not found look for one with name in it.
int nuisenum = fAllEnums[name];
SetDialValue(nuisenum, val);
}
// Allow for name aswell using GlobalList to determine sample name.
void FitWeight::SetDialValue(int nuisenum, double val) {
// Conv dial type
int dialtype = Reweight::GetDialType(nuisenum);
if (fAllRW.find(dialtype) == fAllRW.end()) {
THROW("Cannot find RW Engine for dialtype = "
<< dialtype << ", " << Reweight::RemoveDialType(nuisenum));
}
// Get RW Engine for this dial
fAllRW[dialtype]->SetDialValue(nuisenum, val);
fAllValues[nuisenum] = val;
// Update ValueList
for (size_t i = 0; i < fEnumList.size(); i++) {
if (fEnumList[i] == nuisenum) {
fValueList[i] = val;
}
}
}
-void FitWeight::SetAllDials(const double* x, int n) {
+void FitWeight::SetAllDials(const double *x, int n) {
for (size_t i = 0; i < (UInt_t)n; i++) {
int rwenum = fEnumList[i];
SetDialValue(rwenum, x[i]);
}
Reconfigure();
}
double FitWeight::GetDialValue(std::string name) {
// Add extra check, if name not found look for one with name in it.
int nuisenum = fAllEnums[name];
return GetDialValue(nuisenum);
}
double FitWeight::GetDialValue(int nuisenum) { return fAllValues[nuisenum]; }
int FitWeight::GetDialPos(std::string name) {
int rwenum = fAllEnums[name];
return GetDialPos(rwenum);
}
int FitWeight::GetDialPos(int nuisenum) {
for (size_t i = 0; i < fEnumList.size(); i++) {
if (fEnumList[i] == nuisenum) {
return i;
}
}
ERR(FTL) << "No Dial Found! " << std::endl;
throw;
return -1;
}
bool FitWeight::DialIncluded(std::string name) {
return (fAllEnums.find(name) != fAllEnums.end());
}
bool FitWeight::DialIncluded(int rwenum) {
return (fAllValues.find(rwenum) != fAllValues.end());
}
-double FitWeight::CalcWeight(BaseFitEvt* evt) {
+double FitWeight::CalcWeight(BaseFitEvt *evt) {
double rwweight = 1.0;
- for (std::map::iterator iter = fAllRW.begin();
+ for (std::map::iterator iter = fAllRW.begin();
iter != fAllRW.end(); iter++) {
double w = (*iter).second->CalcWeight(evt);
rwweight *= w;
}
return rwweight;
}
-void FitWeight::UpdateWeightEngine(const double* x) {
+void FitWeight::UpdateWeightEngine(const double *x) {
size_t count = 0;
for (std::vector::iterator iter = fEnumList.begin();
iter != fEnumList.end(); iter++) {
SetDialValue((*iter), x[count]);
count++;
}
}
-void FitWeight::GetAllDials(double* x, int n) {
+void FitWeight::GetAllDials(double *x, int n) {
for (int i = 0; i < n; i++) {
x[i] = GetDialValue(fEnumList[i]);
}
}
// bool FitWeight::NeedsEventReWeight(const double* x) {
// bool haschange = false;
// size_t count = 0;
// // Compare old to new and decide if RW needed.
// for (std::vector::iterator iter = fEnumList.begin();
// iter != fEnumList.end(); iter++) {
// int nuisenum = (*iter);
// int type = (nuisenum / 1000) - (nuisenum % 1000);
// // Compare old to new
// double oldval = GetDialValue(nuisenum);
// double newval = x[count];
// if (oldval != newval) {
// if (fAllRW[type]->NeedsEventReWeight()) {
// haschange = true;
// }
// }
// count++;
// }
// return haschange;
// }
double FitWeight::GetSampleNorm(std::string name) {
- if (name.empty()) return 1.0;
+ if (name.empty())
+ return 1.0;
// Find norm dial
if (fAllEnums.find(name + "_norm") != fAllEnums.end()) {
if (fAllValues.find(fAllEnums[name + "_norm"]) != fAllValues.end()) {
return fAllValues[fAllEnums[name + "_norm"]];
} else {
return 1.0;
}
} else {
return 1.0;
}
}
void FitWeight::Print() {
LOG(REC) << "Fit Weight State: " << std::endl;
for (size_t i = 0; i < fNameList.size(); i++) {
LOG(REC) << " -> Par " << i << ". " << fNameList[i] << " " << fValueList[i]
<< std::endl;
}
}
diff --git a/src/Reweight/NOvARwgtEngine.cxx b/src/Reweight/NOvARwgtEngine.cxx
new file mode 100644
index 0000000..31c2afd
--- /dev/null
+++ b/src/Reweight/NOvARwgtEngine.cxx
@@ -0,0 +1,252 @@
+#include "NOvARwgtEngine.h"
+
+#include "NOvARwgt/interfaces/GenieInterface.h"
+
+#include "NOvARwgt/rwgt/genie/QE/MAQEWgts.h"
+#include "NOvARwgt/rwgt/genie/QE/RPAWeights.h"
+
+#include "NOvARwgt/rwgt/genie/MEC/EmpiricalMECOtherTunes.h"
+#include "NOvARwgt/rwgt/genie/MEC/EmpiricalMECTune2017.h"
+#include "NOvARwgt/rwgt/genie/MEC/EmpiricalMECTune2018.h"
+#include "NOvARwgt/rwgt/genie/MEC/EmpiricalMECTuneSA.h"
+
+#include "NOvARwgt/rwgt/genie/DIS/HighWDISWeight.h"
+#include "NOvARwgt/rwgt/genie/DIS/Nonres1piWeights.h"
+
+#include "NOvARwgt/rwgt/EventRecord.h"
+#include "NOvARwgt/rwgt/IWeightGenerator.h"
+
+static size_t const kRPAWeightCCQESA = 0;
+static size_t const kRPAWeightCCQE_2017 = 1;
+static size_t const kRPAWeightQ2_2017 = 2;
+static size_t const kMAQEWeight_2018 = 3;
+static size_t const kTufts2p2hWgtSA = 4;
+static size_t const kEmpiricalMEC_to_Valencia_Wgt = 5;
+static size_t const kEmpiricalMECWgt2018 = 6;
+static size_t const kMECEnuShapeWgt = 7;
+static size_t const kMECInitStateNPFracWgt = 8;
+static size_t const kEmpiricalMECWgt2017 = 9;
+static size_t const kEmpiricalMEC_to_GENIEQE_Wgt = 10;
+static size_t const kEmpiricalMEC_to_GENIERES_Wgt = 11;
+static size_t const kEmpiricalMECWgt2018RPAFix = 12;
+static size_t const kMEC2018_QElike_Wgt = 13;
+static size_t const kMEC2018_RESlike_Wgt = 14;
+static size_t const kMEC2018RPAFix_QElike_Wgt = 15;
+static size_t const kMEC2018RPAFix_RESlike_Wgt = 16;
+static size_t const kNonres1PiWgt = 17;
+static size_t const kHighWDISWgt_2018 = 18;
+static size_t const kNoSuchWeightEngine = std::numeric_limits::max();
+
+size_t NOvARwgtEngine::GetWeightGeneratorIndex(std::string const &strname) {
+
+ if (strname == "RPAWeightCCQESA") {
+ return kRPAWeightCCQESA;
+ } else if (strname == "RPAWeightCCQE_2017") {
+ return kRPAWeightCCQE_2017;
+ } else if (strname == "RPAWeightQ2_2017") {
+ return kRPAWeightQ2_2017;
+ } else if (strname == "MAQEWeight_2018") {
+ return kMAQEWeight_2018;
+ } else if (strname == "Tufts2p2hWgtSA") {
+ return kTufts2p2hWgtSA;
+ } else if (strname == "EmpiricalMEC_to_Valencia_Wgt") {
+ return kEmpiricalMEC_to_Valencia_Wgt;
+ } else if (strname == "EmpiricalMECWgt2018") {
+ return kEmpiricalMECWgt2018;
+ } else if (strname == "MECEnuShapeWgt") {
+ return kMECEnuShapeWgt;
+ } else if (strname == "MECInitStateNPFracWgt") {
+ return kMECInitStateNPFracWgt;
+ } else if (strname == "EmpiricalMECWgt2017") {
+ return kEmpiricalMECWgt2017;
+ } else if (strname == "EmpiricalMEC_to_GENIEQE_Wgt") {
+ return kEmpiricalMEC_to_GENIEQE_Wgt;
+ } else if (strname == "EmpiricalMEC_to_GENIERES_Wgt") {
+ return kEmpiricalMEC_to_GENIERES_Wgt;
+ } else if (strname == "EmpiricalMECWgt2018RPAFix") {
+ return kEmpiricalMECWgt2018RPAFix;
+ } else if (strname == "MEC2018_QElike_Wgt") {
+ return kMEC2018_QElike_Wgt;
+ } else if (strname == "MEC2018_RESlike_Wgt") {
+ return kMEC2018_RESlike_Wgt;
+ } else if (strname == "MEC2018RPAFix_QElike_Wgt") {
+ return kMEC2018RPAFix_QElike_Wgt;
+ } else if (strname == "MEC2018RPAFix_RESlike_Wgt") {
+ return kMEC2018RPAFix_RESlike_Wgt;
+ } else if (strname == "Nonres1PiWgt") {
+ return kNonres1PiWgt;
+ } else if (strname == "HighWDISWgt_2018") {
+ return kHighWDISWgt_2018;
+ }
+ return kNoSuchWeightEngine;
+}
+
+novarwgt::IWeightGenerator *IWeightGeneratorFactory(size_t e) {
+ switch (e) {
+ case kRPAWeightCCQESA: {
+ return new novarwgt::RPAWeightCCQESA();
+ }
+ case kRPAWeightCCQE_2017: {
+ return new novarwgt::RPAWeightCCQE_2017("CV");
+ }
+ case kRPAWeightQ2_2017: {
+ return new novarwgt::RPAWeightQ2_2017();
+ }
+ case kMAQEWeight_2018: {
+ return new novarwgt::MAQEWeight_2018();
+ }
+ case kTufts2p2hWgtSA: {
+ return new novarwgt::Tufts2p2hWgtSA();
+ }
+ case kEmpiricalMEC_to_Valencia_Wgt: {
+ return new novarwgt::EmpiricalMEC_to_Valencia_Wgt();
+ }
+ case kEmpiricalMECWgt2018: {
+ return new novarwgt::EmpiricalMECWgt2018();
+ }
+ case kMECEnuShapeWgt: {
+ return new novarwgt::MECEnuShapeWgt();
+ }
+ case kMECInitStateNPFracWgt: {
+ return new novarwgt::MECInitStateNPFracWgt();
+ }
+ case kEmpiricalMECWgt2017: {
+ return new novarwgt::EmpiricalMECWgt2017();
+ }
+ case kEmpiricalMEC_to_GENIEQE_Wgt: {
+ return new novarwgt::EmpiricalMEC_to_GENIEQE_Wgt();
+ }
+ case kEmpiricalMEC_to_GENIERES_Wgt: {
+ return new novarwgt::EmpiricalMEC_to_GENIERES_Wgt();
+ }
+ case kEmpiricalMECWgt2018RPAFix: {
+ return new novarwgt::EmpiricalMECWgt2018RPAFix();
+ }
+ case kMEC2018_QElike_Wgt: {
+ return new novarwgt::MEC2018_QElike_Wgt();
+ }
+ case kMEC2018_RESlike_Wgt: {
+ return new novarwgt::MEC2018_RESlike_Wgt();
+ }
+ case kMEC2018RPAFix_QElike_Wgt: {
+ return new novarwgt::MEC2018RPAFix_QElike_Wgt();
+ }
+ case kMEC2018RPAFix_RESlike_Wgt: {
+ return new novarwgt::MEC2018RPAFix_RESlike_Wgt();
+ }
+ case kNonres1PiWgt: {
+ return new novarwgt::Nonres1PiWgt();
+ }
+ case kHighWDISWgt_2018: {
+ return new novarwgt::HighWDISWgt_2018();
+ }
+ default: { return nullptr; }
+ }
+}
+
+void NOvARwgtEngine::IncludeDial(std::string name, double startval) {
+ size_t e = GetWeightGeneratorIndex(name);
+ if (e == kNoSuchWeightEngine) {
+ THROW("[ERROR]: Invalid NOvARwgt Engine name: " << name);
+ }
+ if (fWeightEngineEnums.find(e) != fWeightEngineEnums.end()) {
+ THROW("[ERROR]: NOvARwgt Engine name: " << name << " already included.");
+ }
+ fWeightEngineEnums[e] = fWeightEngines.size();
+ fWeightEngines.push_back(IWeightGeneratorFactory(e));
+ fWeightEngineValues.push_back(startval);
+};
+
+void NOvARwgtEngine::SetDialValue(int nuisenum, double val) {
+ size_t we_indx = (nuisenum % 1000);
+ if (!fWeightEngineEnums.count(we_indx)) {
+ THROW("[ERROR]: SetDialValue for NOvARwgt dial: "
+ << we_indx << " but that engine hasn't been included yet.");
+ }
+ size_t engine_index = fWeightEngineEnums[we_indx];
+
+ fWeightEngineValues[engine_index] = val;
+}
+
+void NOvARwgtEngine::SetDialValue(std::string name, double val) {
+ size_t we_indx = GetWeightGeneratorIndex(name);
+ if (we_indx == kNoSuchWeightEngine) {
+ THROW("[ERROR]: Invalid NOvARwgt Engine name: " << name);
+ }
+ if (!fWeightEngineEnums.count(we_indx)) {
+ THROW("[ERROR]: SetDialValue for NOvARwgt dial: "
+ << we_indx << " but that engine hasn't been included yet.");
+ }
+ size_t engine_index = fWeightEngineEnums[we_indx];
+
+ fWeightEngineValues[engine_index] = val;
+}
+
+bool NOvARwgtEngine::IsDialIncluded(std::string name) {
+ size_t we_indx = GetWeightGeneratorIndex(name);
+ if (we_indx == kNoSuchWeightEngine) {
+ THROW("[ERROR]: Invalid NOvARwgt Engine name: " << name);
+ }
+ return fWeightEngineEnums.count(we_indx);
+}
+bool NOvARwgtEngine::IsDialIncluded(int nuisenum) {
+ size_t we_indx = (nuisenum % 1000);
+ return fWeightEngineEnums.count(we_indx);
+}
+
+double NOvARwgtEngine::GetDialValue(std::string name) {
+ size_t we_indx = GetWeightGeneratorIndex(name);
+ if (we_indx == kNoSuchWeightEngine) {
+ THROW("[ERROR]: Invalid NOvARwgt Engine name: " << name);
+ }
+ if (!fWeightEngineEnums.count(we_indx)) {
+ THROW("[ERROR]: SetDialValue for NOvARwgt dial: "
+ << we_indx << " but that engine hasn't been included yet.");
+ }
+ return fWeightEngineValues[fWeightEngineEnums[we_indx]];
+}
+double NOvARwgtEngine::GetDialValue(int nuisenum) {
+ size_t we_indx = (nuisenum % 1000);
+ if (!fWeightEngineEnums.count(we_indx)) {
+ THROW("[ERROR]: SetDialValue for NOvARwgt dial: "
+ << we_indx << " but that engine hasn't been included yet.");
+ }
+ return fWeightEngineValues[fWeightEngineEnums[we_indx]];
+}
+
+double NOvARwgtEngine::CalcWeight(BaseFitEvt *evt) {
+ double rw_weight = 1.0;
+
+ // Make nom weight
+ if (!evt) {
+ THROW("evt not found : " << evt);
+ }
+
+ // Skip Non GENIE
+ if (evt->fType != kGENIE)
+ return 1.0;
+
+ if (!(evt->genie_event)) {
+ THROW("evt->genie_event not found!" << evt->genie_event);
+ }
+
+ if (!(evt->genie_event->event)) {
+ THROW("evt->genie_event->event GHepRecord not found!"
+ << (evt->genie_event->event));
+ }
+
+ novarwgt::EventRecord rcd =
+ novarwgt::ConvertGenieEvent(evt->genie_event->event);
+
+ static novarwgt::InputVals const dummyparams;
+
+ for (size_t w_it = 0; w_it < fWeightEngines.size(); ++w_it) {
+ if (fWeightEngineValues[w_it] ==
+ 0) { // if a dial is set to 0, don't include its weight
+ continue;
+ }
+ rw_weight *= fWeightEngines[w_it]->GetWeight(rcd, dummyparams);
+ }
+
+ return rw_weight;
+}
diff --git a/src/Reweight/NOvARwgtEngine.h b/src/Reweight/NOvARwgtEngine.h
new file mode 100644
index 0000000..ef2bf09
--- /dev/null
+++ b/src/Reweight/NOvARwgtEngine.h
@@ -0,0 +1,36 @@
+#pragma once
+
+#include "WeightEngineBase.h"
+
+namespace novarwgt {
+class IWeightGenerator;
+}
+
+class NOvARwgtEngine : public WeightEngineBase {
+public:
+ NOvARwgtEngine(){};
+ virtual ~NOvARwgtEngine(){};
+
+ static size_t GetWeightGeneratorIndex(std::string const &);
+
+ // Functions requiring Override
+ void IncludeDial(std::string name, double startval);
+
+ void SetDialValue(int nuisenum, double val);
+ void SetDialValue(std::string name, double val);
+
+ bool IsDialIncluded(std::string name);
+ bool IsDialIncluded(int nuisenum);
+
+ double GetDialValue(std::string name);
+ double GetDialValue(int nuisenum);
+
+ void Reconfigure(bool silent){};
+
+ double CalcWeight(BaseFitEvt *evt);
+ bool NeedsEventReWeight() { return true; }
+
+ std::map fWeightEngineEnums;
+ std::vector fWeightEngines;
+ std::vector fWeightEngineValues;
+};
diff --git a/src/Reweight/WeightUtils.cxx b/src/Reweight/WeightUtils.cxx
index 6beb1dc..b4d0d81 100644
--- a/src/Reweight/WeightUtils.cxx
+++ b/src/Reweight/WeightUtils.cxx
@@ -1,637 +1,665 @@
#include "WeightUtils.h"
#include "FitLogger.h"
#ifdef __T2KREW_ENABLED__
#include "T2KGenieReWeight.h"
#include "T2KNIWGReWeight.h"
#include "T2KNIWGUtils.h"
#include "T2KNeutReWeight.h"
#include "T2KNeutUtils.h"
#include "T2KReWeight.h"
using namespace t2krew;
#endif
#ifdef __NIWG_ENABLED__
#include "NIWGReWeight.h"
#include "NIWGReWeight1piAngle.h"
#include "NIWGReWeight2010a.h"
#include "NIWGReWeight2012a.h"
#include "NIWGReWeight2014a.h"
#include "NIWGReWeightDeltaMass.h"
#include "NIWGReWeightEffectiveRPA.h"
#include "NIWGReWeightHadronMultSwitch.h"
#include "NIWGReWeightMEC.h"
#include "NIWGReWeightPiMult.h"
#include "NIWGReWeightProtonFSIbug.h"
#include "NIWGReWeightRPA.h"
#include "NIWGReWeightSpectralFunc.h"
#include "NIWGReWeightSplineEnu.h"
#include "NIWGSyst.h"
#include "NIWGSystUncertainty.h"
#endif
#ifdef __NEUT_ENABLED__
#include "NReWeight.h"
#include "NReWeightCasc.h"
#include "NReWeightNuXSecCCQE.h"
#include "NReWeightNuXSecCCRES.h"
#include "NReWeightNuXSecCOH.h"
#include "NReWeightNuXSecDIS.h"
#include "NReWeightNuXSecNC.h"
#include "NReWeightNuXSecNCEL.h"
#include "NReWeightNuXSecNCRES.h"
#include "NReWeightNuXSecRES.h"
#include "NReWeightNuclPiless.h"
#include "NSyst.h"
#include "NSystUncertainty.h"
#include "neutpart.h"
#include "neutvect.h"
#endif
#ifdef __NUWRO_ENABLED__
#include "event1.h"
#endif
#ifdef __NUWRO_REWEIGHT_ENABLED__
#include "NuwroReWeight.h"
#include "NuwroReWeight_FlagNorm.h"
#include "NuwroReWeight_QEL.h"
#include "NuwroReWeight_SPP.h"
#include "NuwroSyst.h"
#include "NuwroSystUncertainty.h"
#endif
#ifdef __GENIE_ENABLED__
#ifdef GENIE_PRE_R3
#include "EVGCore/EventRecord.h"
#include "GHEP/GHepRecord.h"
-#include "ReWeight/GSyst.h"
-#include "ReWeight/GSystUncertainty.h"
#include "Ntuple/NtpMCEventRecord.h"
#include "ReWeight/GReWeight.h"
#include "ReWeight/GReWeightAGKY.h"
#include "ReWeight/GReWeightDISNuclMod.h"
#include "ReWeight/GReWeightFGM.h"
#include "ReWeight/GReWeightFZone.h"
#include "ReWeight/GReWeightINuke.h"
#include "ReWeight/GReWeightNonResonanceBkg.h"
#include "ReWeight/GReWeightNuXSecCCQE.h"
#include "ReWeight/GReWeightNuXSecCCQEvec.h"
#include "ReWeight/GReWeightNuXSecCCRES.h"
#include "ReWeight/GReWeightNuXSecCOH.h"
#include "ReWeight/GReWeightNuXSecDIS.h"
#include "ReWeight/GReWeightNuXSecNC.h"
#include "ReWeight/GReWeightNuXSecNCEL.h"
#include "ReWeight/GReWeightNuXSecNCRES.h"
#include "ReWeight/GReWeightResonanceDecay.h"
+#include "ReWeight/GSyst.h"
+#include "ReWeight/GSystUncertainty.h"
#else
#include "Framework/EventGen/EventRecord.h"
#include "Framework/GHEP/GHepRecord.h"
-#include "RwFramework/GSyst.h"
-#include "RwFramework/GSystUncertainty.h"
#include "Framework/Ntuple/NtpMCEventRecord.h"
-#include "RwFramework/GReWeight.h"
#include "RwCalculators/GReWeightAGKY.h"
#include "RwCalculators/GReWeightDISNuclMod.h"
#include "RwCalculators/GReWeightFGM.h"
#include "RwCalculators/GReWeightFZone.h"
#include "RwCalculators/GReWeightINuke.h"
#include "RwCalculators/GReWeightNonResonanceBkg.h"
#include "RwCalculators/GReWeightNuXSecCCQE.h"
#include "RwCalculators/GReWeightNuXSecCCQEvec.h"
#include "RwCalculators/GReWeightNuXSecCCRES.h"
#include "RwCalculators/GReWeightNuXSecCOH.h"
#include "RwCalculators/GReWeightNuXSecDIS.h"
#include "RwCalculators/GReWeightNuXSecNC.h"
#include "RwCalculators/GReWeightNuXSecNCEL.h"
#include "RwCalculators/GReWeightNuXSecNCRES.h"
#include "RwCalculators/GReWeightResonanceDecay.h"
+#include "RwFramework/GReWeight.h"
+#include "RwFramework/GSyst.h"
+#include "RwFramework/GSystUncertainty.h"
#endif
using namespace genie;
using namespace genie::rew;
#endif
+#ifdef __NOVA_ENABLED__
+#include "NOvARwgtEngine.h"
+#endif
+
#include "GlobalDialList.h"
#include "ModeNormEngine.h"
#include "NUISANCESyst.h"
#include "OscWeightEngine.h"
//********************************************************************
TF1 FitBase::GetRWConvFunction(std::string const &type,
std::string const &name) {
//********************************************************************
std::string dialfunc = "x";
std::string parType = type;
double low = -10000.0;
double high = 10000.0;
- if (parType.find("parameter") == std::string::npos) parType += "_parameter";
+ if (parType.find("parameter") == std::string::npos)
+ parType += "_parameter";
std::string line;
std::ifstream card(
(GeneralUtils::GetTopLevelDir() + "/parameters/dial_conversion.card")
.c_str(),
std::ifstream::in);
while (std::getline(card >> std::ws, line, '\n')) {
std::vector inputlist = GeneralUtils::ParseToStr(line, " ");
// Check the line length
- if (inputlist.size() < 4) continue;
+ if (inputlist.size() < 4)
+ continue;
// Check whether this is a comment
- if (inputlist[0].c_str()[0] == '#') continue;
+ if (inputlist[0].c_str()[0] == '#')
+ continue;
// Check whether this is the correct parameter type
- if (inputlist[0].compare(parType) != 0) continue;
+ if (inputlist[0].compare(parType) != 0)
+ continue;
// Check the parameter name
- if (inputlist[1].compare(name) != 0) continue;
+ if (inputlist[1].compare(name) != 0)
+ continue;
// inputlist[2] should be the units... ignore for now
dialfunc = inputlist[3];
// High and low are optional, check whether they exist
- if (inputlist.size() > 4) low = GeneralUtils::StrToDbl(inputlist[4]);
- if (inputlist.size() > 5) high = GeneralUtils::StrToDbl(inputlist[5]);
+ if (inputlist.size() > 4)
+ low = GeneralUtils::StrToDbl(inputlist[4]);
+ if (inputlist.size() > 5)
+ high = GeneralUtils::StrToDbl(inputlist[5]);
}
TF1 convfunc = TF1((name + "_convfunc").c_str(), dialfunc.c_str(), low, high);
return convfunc;
}
//********************************************************************
std::string FitBase::GetRWUnits(std::string const &type,
std::string const &name) {
//********************************************************************
std::string unit = "sig.";
std::string parType = type;
if (parType.find("parameter") == std::string::npos) {
parType += "_parameter";
}
std::string line;
std::ifstream card(
(GeneralUtils::GetTopLevelDir() + "/parameters/dial_conversion.card")
.c_str(),
std::ifstream::in);
while (std::getline(card >> std::ws, line, '\n')) {
std::vector inputlist = GeneralUtils::ParseToStr(line, " ");
// Check the line length
- if (inputlist.size() < 3) continue;
+ if (inputlist.size() < 3)
+ continue;
// Check whether this is a comment
- if (inputlist[0].c_str()[0] == '#') continue;
+ if (inputlist[0].c_str()[0] == '#')
+ continue;
// Check whether this is the correct parameter type
- if (inputlist[0].compare(parType) != 0) continue;
+ if (inputlist[0].compare(parType) != 0)
+ continue;
// Check the parameter name
- if (inputlist[1].compare(name) != 0) continue;
+ if (inputlist[1].compare(name) != 0)
+ continue;
unit = inputlist[2];
break;
}
return unit;
}
//********************************************************************
double FitBase::RWAbsToSigma(std::string const &type, std::string const &name,
double val) {
//********************************************************************
TF1 f1 = GetRWConvFunction(type, name);
double conv_val = f1.GetX(val);
- if (fabs(conv_val) < 1E-10) conv_val = 0.0;
+ if (fabs(conv_val) < 1E-10)
+ conv_val = 0.0;
QLOG(FIT, "AbsToSigma(" << name << ") = " << val << " -> " << conv_val);
return conv_val;
}
//********************************************************************
double FitBase::RWSigmaToAbs(std::string const &type, std::string const &name,
double val) {
//********************************************************************
TF1 f1 = GetRWConvFunction(type, name);
double conv_val = f1.Eval(val);
return conv_val;
}
//********************************************************************
double FitBase::RWFracToSigma(std::string const &type, std::string const &name,
double val) {
//********************************************************************
TF1 f1 = GetRWConvFunction(type, name);
double conv_val = f1.GetX((val * f1.Eval(0.0)));
- if (fabs(conv_val) < 1E-10) conv_val = 0.0;
+ if (fabs(conv_val) < 1E-10)
+ conv_val = 0.0;
return conv_val;
}
//********************************************************************
double FitBase::RWSigmaToFrac(std::string const &type, std::string const &name,
double val) {
//********************************************************************
TF1 f1 = GetRWConvFunction(type, name);
double conv_val = f1.Eval(val) / f1.Eval(0.0);
return conv_val;
}
int FitBase::ConvDialType(std::string const &type) {
if (!type.compare("neut_parameter"))
return kNEUT;
else if (!type.compare("niwg_parameter"))
return kNIWG;
else if (!type.compare("nuwro_parameter"))
return kNUWRO;
else if (!type.compare("t2k_parameter"))
return kT2K;
else if (!type.compare("genie_parameter"))
return kGENIE;
else if (!type.compare("custom_parameter"))
return kCUSTOM;
else if (!type.compare("norm_parameter"))
return kNORM;
else if (!type.compare("likeweight_parameter"))
return kLIKEWEIGHT;
else if (!type.compare("spline_parameter"))
return kSPLINEPARAMETER;
else if (!type.compare("osc_parameter"))
return kOSCILLATION;
else if (!type.compare("modenorm_parameter"))
return kMODENORM;
+ else if (!type.compare("nova_parameter"))
+ return kNOvARWGT;
else
return kUNKNOWN;
}
std::string FitBase::ConvDialType(int type) {
switch (type) {
- case kNEUT: {
- return "neut_parameter";
- }
- case kNIWG: {
- return "niwg_parameter";
- }
- case kNUWRO: {
- return "nuwro_parameter";
- }
- case kT2K: {
- return "t2k_parameter";
- }
- case kGENIE: {
- return "genie_parameter";
- }
- case kNORM: {
- return "norm_parameter";
- }
- case kCUSTOM: {
- return "custom_parameter";
- }
- case kLIKEWEIGHT: {
- return "likeweight_parameter";
- }
- case kSPLINEPARAMETER: {
- return "spline_parameter";
- }
- case kOSCILLATION: {
- return "osc_parameter";
- }
- case kMODENORM: {
- return "modenorm_parameter";
- }
- default:
- return "unknown_parameter";
+ case kNEUT: {
+ return "neut_parameter";
+ }
+ case kNIWG: {
+ return "niwg_parameter";
+ }
+ case kNUWRO: {
+ return "nuwro_parameter";
+ }
+ case kT2K: {
+ return "t2k_parameter";
+ }
+ case kGENIE: {
+ return "genie_parameter";
+ }
+ case kNORM: {
+ return "norm_parameter";
+ }
+ case kCUSTOM: {
+ return "custom_parameter";
+ }
+ case kLIKEWEIGHT: {
+ return "likeweight_parameter";
+ }
+ case kSPLINEPARAMETER: {
+ return "spline_parameter";
+ }
+ case kOSCILLATION: {
+ return "osc_parameter";
+ }
+ case kMODENORM: {
+ return "modenorm_parameter";
+ }
+ case kNOvARWGT: {
+ return "nova_parameter";
+ }
+ default:
+ return "unknown_parameter";
}
}
int FitBase::GetDialEnum(std::string const &type, std::string const &name) {
return FitBase::GetDialEnum(FitBase::ConvDialType(type), name);
}
int FitBase::GetDialEnum(int type, std::string const &name) {
int offset = type * 1000;
- int this_enum = Reweight::kNoDialFound; // Not Found
+ int this_enum = Reweight::kNoDialFound; // Not Found
QLOG(DEB, "Getting dial enum " << type << " " << name);
// Select Types
switch (type) {
- // NEUT DIAL TYPE
- case kNEUT: {
+ // NEUT DIAL TYPE
+ case kNEUT: {
#ifdef __NEUT_ENABLED__
- int neut_enum = (int)neut::rew::NSyst::FromString(name);
- if (neut_enum != 0) {
- this_enum = neut_enum + offset;
- }
+ int neut_enum = (int)neut::rew::NSyst::FromString(name);
+ if (neut_enum != 0) {
+ this_enum = neut_enum + offset;
+ }
#else
- this_enum = Reweight::kNoTypeFound; // Not enabled
+ this_enum = Reweight::kNoTypeFound; // Not enabled
#endif
- break;
- }
+ break;
+ }
- // NIWG DIAL TYPE
- case kNIWG: {
+ // NIWG DIAL TYPE
+ case kNIWG: {
#ifdef __NIWG_ENABLED__
- int niwg_enum = (int)niwg::rew::NIWGSyst::FromString(name);
- if (niwg_enum != 0) {
- this_enum = niwg_enum + offset;
- }
+ int niwg_enum = (int)niwg::rew::NIWGSyst::FromString(name);
+ if (niwg_enum != 0) {
+ this_enum = niwg_enum + offset;
+ }
#else
- this_enum = Reweight::kNoTypeFound;
+ this_enum = Reweight::kNoTypeFound;
#endif
- break;
- }
+ break;
+ }
- // NUWRO DIAL TYPE
- case kNUWRO: {
+ // NUWRO DIAL TYPE
+ case kNUWRO: {
#ifdef __NUWRO_REWEIGHT_ENABLED__
- int nuwro_enum = (int)nuwro::rew::NuwroSyst::FromString(name);
- if (nuwro_enum > 0) {
- this_enum = nuwro_enum + offset;
- }
+ int nuwro_enum = (int)nuwro::rew::NuwroSyst::FromString(name);
+ if (nuwro_enum > 0) {
+ this_enum = nuwro_enum + offset;
+ }
#else
- this_enum = Reweight::kNoTypeFound;
+ this_enum = Reweight::kNoTypeFound;
#endif
- }
+ }
- // GENIE DIAL TYPE
- case kGENIE: {
+ // GENIE DIAL TYPE
+ case kGENIE: {
#ifdef __GENIE_ENABLED__
- int genie_enum = (int)genie::rew::GSyst::FromString(name);
- if (genie_enum > 0) {
- this_enum = genie_enum + offset;
- }
+ int genie_enum = (int)genie::rew::GSyst::FromString(name);
+ if (genie_enum > 0) {
+ this_enum = genie_enum + offset;
+ }
#else
- this_enum = Reweight::kNoTypeFound;
+ this_enum = Reweight::kNoTypeFound;
#endif
- break;
- }
+ break;
+ }
- case kCUSTOM: {
- int custom_enum = 0; // PLACEHOLDER
- this_enum = custom_enum + offset;
- break;
- }
+ case kCUSTOM: {
+ int custom_enum = 0; // PLACEHOLDER
+ this_enum = custom_enum + offset;
+ break;
+ }
- // T2K DIAL TYPE
- case kT2K: {
+ // T2K DIAL TYPE
+ case kT2K: {
#ifdef __T2KREW_ENABLED__
- int t2k_enum = (int)t2krew::T2KSyst::FromString(name);
- if (t2k_enum > 0) {
- this_enum = t2k_enum + offset;
- }
+ int t2k_enum = (int)t2krew::T2KSyst::FromString(name);
+ if (t2k_enum > 0) {
+ this_enum = t2k_enum + offset;
+ }
#else
- this_enum = Reweight::kNoTypeFound;
+ this_enum = Reweight::kNoTypeFound;
#endif
- break;
- }
+ break;
+ }
- case kNORM: {
- if (gNormEnums.find(name) == gNormEnums.end()) {
- gNormEnums[name] = gNormEnums.size() + 1 + offset;
- }
- this_enum = gNormEnums[name];
- break;
+ case kNORM: {
+ if (gNormEnums.find(name) == gNormEnums.end()) {
+ gNormEnums[name] = gNormEnums.size() + 1 + offset;
}
+ this_enum = gNormEnums[name];
+ break;
+ }
- case kLIKEWEIGHT: {
- if (gLikeWeightEnums.find(name) == gLikeWeightEnums.end()) {
- gLikeWeightEnums[name] = gLikeWeightEnums.size() + 1 + offset;
- }
- this_enum = gLikeWeightEnums[name];
- break;
+ case kLIKEWEIGHT: {
+ if (gLikeWeightEnums.find(name) == gLikeWeightEnums.end()) {
+ gLikeWeightEnums[name] = gLikeWeightEnums.size() + 1 + offset;
}
+ this_enum = gLikeWeightEnums[name];
+ break;
+ }
- case kSPLINEPARAMETER: {
- if (gSplineParameterEnums.find(name) == gSplineParameterEnums.end()) {
- gSplineParameterEnums[name] = gSplineParameterEnums.size() + 1 + offset;
- }
- this_enum = gSplineParameterEnums[name];
- break;
+ case kSPLINEPARAMETER: {
+ if (gSplineParameterEnums.find(name) == gSplineParameterEnums.end()) {
+ gSplineParameterEnums[name] = gSplineParameterEnums.size() + 1 + offset;
}
- case kOSCILLATION: {
+ this_enum = gSplineParameterEnums[name];
+ break;
+ }
+ case kOSCILLATION: {
#ifdef __PROB3PP_ENABLED__
- int oscEnum = OscWeightEngine::SystEnumFromString(name);
- if (oscEnum != 0) {
- this_enum = oscEnum + offset;
- }
+ int oscEnum = OscWeightEngine::SystEnumFromString(name);
+ if (oscEnum != 0) {
+ this_enum = oscEnum + offset;
+ }
#else
- this_enum = Reweight::kNoTypeFound; // Not enabled
+ this_enum = Reweight::kNoTypeFound; // Not enabled
#endif
+ }
+ case kMODENORM: {
+ size_t us_pos = name.find_first_of('_');
+ std::string numstr = name.substr(us_pos + 1);
+ int mode_num = std::atoi(numstr.c_str());
+ LOG(FTL) << "Getting mode num " << mode_num << std::endl;
+ if (!mode_num) {
+ ERR(FTL) << "Attempting to parse dial name: \"" << name
+ << "\" as a mode norm dial but failed." << std::endl;
+ throw;
}
- case kMODENORM: {
- size_t us_pos = name.find_first_of('_');
- std::string numstr = name.substr(us_pos + 1);
- int mode_num = std::atoi(numstr.c_str());
- LOG(FTL) << "Getting mode num " << mode_num << std::endl;
- if (!mode_num) {
- ERR(FTL) << "Attempting to parse dial name: \"" << name
- << "\" as a mode norm dial but failed." << std::endl;
- throw;
- }
- this_enum = 60 + mode_num + offset;
- break;
- }
+ this_enum = 60 + mode_num + offset;
+ break;
+ }
}
// If Not Enabled
if (this_enum == Reweight::kNoTypeFound) {
ERR(FTL) << "RW Engine not supported for " << FitBase::ConvDialType(type)
<< std::endl;
ERR(FTL) << "Check dial " << name << std::endl;
}
// If Not Found
if (this_enum == Reweight::kNoDialFound) {
ERR(FTL) << "Dial " << name << " not found." << std::endl;
}
return this_enum;
}
int Reweight::ConvDialType(std::string const &type) {
return FitBase::ConvDialType(type);
}
std::string Reweight::ConvDialType(int type) {
return FitBase::ConvDialType(type);
}
int Reweight::GetDialType(int type) {
int t = (type / 1000);
return t > kMODENORM ? Reweight::kNoDialFound : t;
}
int Reweight::RemoveDialType(int type) { return (type % 1000); }
int Reweight::NEUTEnumFromName(std::string const &name) {
#ifdef __NEUT_ENABLED__
int neutenum = (int)neut::rew::NSyst::FromString(name);
return (neutenum > 0) ? neutenum : Reweight::kNoDialFound;
#else
return Reweight::kGeneratorNotBuilt;
#endif
}
int Reweight::NIWGEnumFromName(std::string const &name) {
#ifdef __NIWG_ENABLED__
int niwgenum = (int)niwg::rew::NIWGSyst::FromString(name);
return (niwgenum != 0) ? niwgenum : Reweight::kNoDialFound;
#else
return Reweight::kGeneratorNotBuilt;
#endif
}
int Reweight::NUWROEnumFromName(std::string const &name) {
#ifdef __NUWRO_REWEIGHT_ENABLED__
int nuwroenum = (int)nuwro::rew::NuwroSyst::FromString(name);
return (nuwroenum > 0) ? nuwroenum : Reweight::kNoDialFound;
#else
return Reweight::kGeneratorNotBuilt;
#endif
}
int Reweight::GENIEEnumFromName(std::string const &name) {
#ifdef __GENIE_ENABLED__
int genieenum = (int)genie::rew::GSyst::FromString(name);
return (genieenum > 0) ? genieenum : Reweight::kNoDialFound;
#else
return Reweight::kGeneratorNotBuilt;
#endif
}
int Reweight::T2KEnumFromName(std::string const &name) {
#ifdef __T2KREW_ENABLED__
int t2kenum = (int)t2krew::T2KSyst::FromString(name);
return (t2kenum > 0) ? t2kenum : Reweight::kNoDialFound;
#else
return Reweight::kGeneratorNotBuilt;
#endif
}
int Reweight::OscillationEnumFromName(std::string const &name) {
#ifdef __PROB3PP_ENABLED__
int oscEnum = OscWeightEngine::SystEnumFromString(name);
return (oscEnum > 0) ? oscEnum : Reweight::kNoDialFound;
#else
return Reweight::kGeneratorNotBuilt;
#endif
}
int Reweight::NUISANCEEnumFromName(std::string const &name, int type) {
int nuisenum = Reweight::DialList().EnumFromNameAndType(name, type);
return nuisenum;
}
int Reweight::CustomEnumFromName(std::string const &name) {
int custenum = Reweight::ConvertNUISANCEDial(name);
return custenum;
}
int Reweight::ConvDial(std::string const &name, std::string const &type,
bool exceptions) {
return Reweight::ConvDial(name, Reweight::ConvDialType(type), exceptions);
}
int Reweight::ConvDial(std::string const &fullname, int type, bool exceptions) {
std::string name =
- GeneralUtils::ParseToStr(fullname, ",")[0]; // Only use first dial given
+ GeneralUtils::ParseToStr(fullname, ",")[0]; // Only use first dial given
// Produce offset seperating each type.
int offset = type * 1000;
int genenum = Reweight::kNoDialFound;
switch (type) {
- case kNEUT:
- genenum = NEUTEnumFromName(name);
- break;
-
- case kNIWG:
- genenum = NIWGEnumFromName(name);
- break;
-
- case kNUWRO:
- genenum = NUWROEnumFromName(name);
- break;
-
- case kGENIE:
- genenum = GENIEEnumFromName(name);
- break;
-
- case kT2K:
- genenum = T2KEnumFromName(name);
- break;
-
- case kCUSTOM:
- genenum = CustomEnumFromName(name);
- break;
-
- case kNORM:
- case kLIKEWEIGHT:
- case kSPLINEPARAMETER:
- case kNEWSPLINE:
- genenum = NUISANCEEnumFromName(name, type);
- break;
-
- case kOSCILLATION:
- genenum = OscillationEnumFromName(name);
- break;
-
- case kMODENORM:
- genenum = ModeNormEngine::SystEnumFromString(name);
- break;
-
- default:
- genenum = Reweight::kNoTypeFound;
- break;
+ case kNEUT:
+ genenum = NEUTEnumFromName(name);
+ break;
+
+ case kNIWG:
+ genenum = NIWGEnumFromName(name);
+ break;
+
+ case kNUWRO:
+ genenum = NUWROEnumFromName(name);
+ break;
+
+ case kGENIE:
+ genenum = GENIEEnumFromName(name);
+ break;
+
+ case kT2K:
+ genenum = T2KEnumFromName(name);
+ break;
+
+ case kCUSTOM:
+ genenum = CustomEnumFromName(name);
+ break;
+
+ case kNORM:
+ case kLIKEWEIGHT:
+ case kSPLINEPARAMETER:
+ case kNEWSPLINE:
+ genenum = NUISANCEEnumFromName(name, type);
+ break;
+
+ case kOSCILLATION:
+ genenum = OscillationEnumFromName(name);
+ break;
+
+ case kMODENORM:
+ genenum = ModeNormEngine::SystEnumFromString(name);
+ break;
+
+#ifdef __NOVA_ENABLED__
+ case kNOvARWGT:
+ genenum = NOvARwgtEngine::GetWeightGeneratorIndex(name);
+ break;
+#endif
+
+ default:
+ genenum = Reweight::kNoTypeFound;
+ break;
}
// Throw if required.
if (exceptions) {
// If Not Enabled
if (genenum == Reweight::kGeneratorNotBuilt) {
ERR(FTL) << "RW Engine not supported for " << FitBase::ConvDialType(type)
<< std::endl;
ERR(FTL) << "Check dial " << name << std::endl;
throw;
}
// If no type enabled
if (genenum == Reweight::kNoTypeFound) {
ERR(FTL) << "Type mismatch inside ConvDialEnum" << std::endl;
throw;
}
// If Not Found
if (genenum == Reweight::kNoDialFound) {
ERR(FTL) << "Dial " << name << " not found." << std::endl;
throw;
}
}
// Add offset if no issue
int nuisenum = genenum;
if ((genenum != Reweight::kGeneratorNotBuilt) &&
(genenum != Reweight::kNoTypeFound) &&
(genenum != Reweight::kNoDialFound)) {
nuisenum += offset;
}
// Now register dial
Reweight::DialList().RegisterDialEnum(name, type, nuisenum);
return nuisenum;
}
std::string Reweight::ConvDial(int nuisenum) {
for (size_t i = 0; i < Reweight::DialList().fAllDialEnums.size(); i++) {
if (Reweight::DialList().fAllDialEnums[i] == nuisenum) {
return Reweight::DialList().fAllDialNames[i];
}
}
LOG(FIT) << "Cannot find dial with enum = " << nuisenum << std::endl;
return "";
}
diff --git a/src/Reweight/WeightUtils.h b/src/Reweight/WeightUtils.h
index c7b044f..4af1a2d 100644
--- a/src/Reweight/WeightUtils.h
+++ b/src/Reweight/WeightUtils.h
@@ -1,63 +1,64 @@
#ifndef WEIGHTUTILS_H
#define WEIGHTUTILS_H
#include "FitEvent.h"
#include "TF1.h"
enum extra_reweight_types {
kOSCILLATION = kLast_generator_event_type,
- kMODENORM
+ kMODENORM,
+ kNOvARWGT
};
namespace FitBase {
TF1 GetRWConvFunction(std::string const &type, std::string const &name);
std::string GetRWUnits(std::string const &type, std::string const &name);
double RWSigmaToFrac(std::string const &type, std::string const &name,
double val);
double RWSigmaToAbs(std::string const &type, std::string const &name,
double val);
double RWAbsToSigma(std::string const &type, std::string const &name,
double val);
double RWFracToSigma(std::string const &type, std::string const &name,
double val);
int ConvDialType(std::string const &type);
std::string ConvDialType(int type);
int GetDialEnum(std::string const &type, std::string const &name);
int GetDialEnum(int type, std::string const &name);
static std::map gNormEnums;
static std::map gLikeWeightEnums;
static std::map gSplineParameterEnums;
}
namespace Reweight {
int ConvDial(std::string const &name, std::string const &type,
bool exceptions = false);
int ConvDial(std::string const &name, int type, bool exceptions = false);
std::string ConvDial(int nuisenum);
int ConvDialType(std::string const &type);
std::string ConvDialType(int type);
int GetDialType(int type);
int RemoveDialType(int type);
int NEUTEnumFromName(std::string const &name);
int NIWGEnumFromName(std::string const &name);
int NUWROEnumFromName(std::string const &name);
int T2KEnumFromName(std::string const &name);
int GENIEEnumFromName(std::string const &name);
int CustomEnumFromName(std::string const &name);
int NUISANCEEnumFromName(std::string const &name, int type);
int OscillationEnumFromName(std::string const &name);
static const int kNoDialFound = -1;
static const int kNoTypeFound = -2;
static const int kGeneratorNotBuilt = -3;
}
#endif