cd /exp/icarus/app/users/${USER}/
# assuming you have `sbnana` working directory under `icarus_gundam`.. but you can use any directory
cd icarus_gundam
mkdir gundam
cd gundam
Here I'm assuming you are using SL7 container.
source /cvmfs/icarus.opensciencegrid.org/products/icarus/setup_icarus.sh
setup root v6_26_06b -q e20:p3913:prof
setup cmake v3_25_2
export GUNDAM_DIR=$PWD
export INSTALL_DIR="$GUNDAM_DIR/Install/"
export BUILD_DIR="$GUNDAM_DIR/Build/"
export REPO_DIR="$GUNDAM_DIR/Repositories/"
mkdir -p $INSTALL_DIR
mkdir -p $BUILD_DIR
mkdir -p $REPO_DIR
mkdir -p $BUILD_DIR/json
mkdir -p $BUILD_DIR/yaml-cpp
mkdir -p $BUILD_DIR/gundam
mkdir -p $INSTALL_DIR/json
mkdir -p $INSTALL_DIR/yaml-cpp
mkdir -p $INSTALL_DIR/gundam
cd $REPO_DIR
git clone https://github.com/nlohmann/json.git
git clone https://github.com/jbeder/yaml-cpp.git
git clone https://github.com/gundam-organization/gundam.git
cd $REPO_DIR/gundam/
./update.sh -v 1.9.0
# Also pulling `icarus_gumdam` feature branch for the configuration files
git remote add jskim git@github.com:jedori0228/gundam.git
git pull jskim ICARUSNuMIXSec/1.9.0_Main
git submodule update --init --recursive
# Build json
cd $BUILD_DIR/json/
cmake -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR/json $REPO_DIR/json/.
make -j 4 install
# Build YAML
cd $BUILD_DIR/yaml-cpp/
cmake -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR/yaml-cpp -DYAML_BUILD_SHARED_LIBS=on $REPO_DIR/yaml-cpp/.
make -j 4 install
# Build gundam
cd $BUILD_DIR/gundam/
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:${INSTALL_DIR}/yaml-cpp/
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:${INSTALL_DIR}/json/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${INSTALL_DIR}/yaml-cpp/lib64/
export LIBRARY_PATH=$LIBRARY_PATH:${INSTALL_DIR}/yaml-cpp/lib64/
cmake -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR/gundam -D CMAKE_BUILD_TYPE=Release $REPO_DIR/gundam/.
make -j 4 install
# Finalize setup
export PATH="$INSTALL_DIR/gundam/bin:$PATH"
export LD_LIBRARY_PATH="$INSTALL_DIR/gundam/lib:$LD_LIBRARY_PATH"
Later whenever you have new shell, run
#!/bin/bash
source /cvmfs/icarus.opensciencegrid.org/products/icarus/setup_icarus.sh
setup root v6_26_06b -q e20:p3913:prof
setup cmake v3_25_2
# We'll need to build the GUNDAM-required JSON-CPP and YAML-CPP stuff, along with GUNDAM itself
export GUNDAM_DIR=$PWD
export INSTALL_DIR="$GUNDAM_DIR/Install/"
export BUILD_DIR="$GUNDAM_DIR/Build/"
export REPO_DIR="$GUNDAM_DIR/Repositories/"
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:${INSTALL_DIR}/yaml-cpp/
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:${INSTALL_DIR}/json/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${INSTALL_DIR}/yaml-cpp/lib64/
export LIBRARY_PATH=$LIBRARY_PATH:${INSTALL_DIR}/yaml-cpp/lib64/
# Finalize setup
export PATH="$INSTALL_DIR/gundam/bin:$PATH"
export LD_LIBRARY_PATH="$INSTALL_DIR/gundam/lib:$LD_LIBRARY_PATH"
An example configuration file for fitter can be found under icarus_configs/config_Fitter_FakeData.yaml
git clone https://github.com/jedori0228/gundam_configs/tree/main
cd gundam_configs
cd Configs_ParameterSet/GENIEDials/
root -l -b -q GenerateGENIESystCov.C
cd ../DetectorSyst/
root -l -b -q GenerateDetSystCov.C
cd ../Flux
root -l -b -q GenerateNuMIBeamlineSystCov.C
cd ../../Configs_ParameterSetList
# open parameterSetList_deltaPT.yaml and change covarianceMatrixFilePath to:
covarianceMatrixFilePath: "./Configs_ParameterSet/Flux/2023-08-17_out_450.37_7991.98_79512.66_QEL11.root"
copy the file from /exp/icarus/app/users/faabdalr/icarus_gundam/gundam/gundam_configs/binnings/binning_fluxCovMtx_removeHE_jk.txt to your icarus_gundam/gundam/gundam_configs/binnings.
copy the directory from /exp/icarus/app/users/faabdalr/icarus_gundam/gundam/gundam_configs/rootfiles to your icarus_gundam/gundam/gundam_configs.
export GUNDAM_INPUTS_DIR=<path to gundam_configs>
gundamFitter -c config_Fitter_FakeData_IndvFit_PoissonLLH_deltaPT.yaml -o output_Fitter.root
config_Fitter_FakeData.yaml is referencing multiple sub-YAMLs or files defined under each directories of icarus_configs.
binnings- GUNDAM-style binning definitions
Configs_DataSetList- Defines the input MC or data files
- A "formula" can be used for the weights; useful for fake data studies
Configs_FitSampleSet- Defines selections for the samples that are being used for the fit; e.g., "Signal selection" and "Sideband selection"
Configs_Minimizer- Minimizer setups
Configs_ParameterSetList- Template and nuisance parameter definitions
Configs_ParameterSet- A sub-YAMLs that are defined for each "set" of parameters
Configs_PlotGenerator- Configurations for the auto-generated plots
Configs_Propagator- A collection of configurations for the propagator