dpT ‐ Mirror Dial Discrete Grid Fits - rvizarreta/gundam-icarus GitHub Wiki

Treatment for the four GENIE "on-off" / mirror dials, following the collaboration-accepted approach (Smedley, ICARUS XS WG). No dials are removed.

Dial treatment summary

Dial Treatment Setting
ThetaDelta2NRad float at default isEnabled: true (no isFixed, prior 0) — inert, kept for completeness
VecFFCCQEshape float, tiny CV nudge isEnabled: true, priorValue: 0.005 (off the mirror point; not floated to mid-range because the default model is theoretically preferred)
DecayAngMEC fixed, grid isFixed: true, priorValue: 0 or 1
Theta_Delta2Npi fixed, grid isFixed: true, priorValue: 0 or 1

DecayAngMEC and Theta_Delta2Npi are scanned over the 2×2 grid of their physical endpoints (0 = CV model, 1 = alternative model). All four fits keep every dial enabled and have the same number of free parameters, so total χ² is directly comparable across them.

Config edits (between fits)

All edits are in Configs_ParameterSet/GENIE/GENIEDialsDef.yaml. Do not edit the C generator (makeParameterRootFile) — the prior is set per-fit in the YAML.

Fixed across all four fits:

- parameterName: "GENIEReWeight_SBN_v1_multisigma_VecFFCCQEshape"
  isEnabled: true
  priorValue: 0.005
  # isFixed left commented out -> floats
  ...

- parameterName: "GENIEReWeight_SBN_v1_multisigma_ThetaDelta2NRad"
  isEnabled: true
  # default, floats at prior 0
  ...

Changed per fit:

- parameterName: "GENIEReWeight_SBN_v1_multisigma_DecayAngMEC"
  isEnabled: true
  isFixed: true
  priorValue: <0 or 1>
  ...

- parameterName: "GENIEReWeight_SBN_v1_multisigma_Theta_Delta2Npi"
  isEnabled: true
  isFixed: true
  priorValue: <0 or 1>
  ...

The four fits

Run from the configs/ directory. Naming: D{0,1}_T{0,1} = (DecayAngMEC, Theta_Delta2Npi).

Fit 1 — (DecayAngMEC = 0, Theta_Delta2Npi = 0)

gundamFitter -c RunConfigs/dpT/RealData/config_Fitter_RealData_dpT.yaml \
  -o real_dpT_D0_T0.root

gundamCalcXsec -c RunConfigs/dpT/RealData/config_CalcXSec_RealData_dpT.yaml \
  -f real_dpT_D0_T0.root \
  -n 10000 \
  -o real_XSec_dpT_D0_T0.root \
  --use-bf-as-xsec

Copy results to local Google Drive:

scp [email protected]:"/exp/icarus/app/users/rvizarr/gundam-icarus/configs/real_dpT_D0_T0.root" "/Users/rvizarreta/Library/CloudStorage/[email protected]/My Drive/🏛 PhD Repository/🚀 Research/🤖 Experiments&Projects/ICARUS/ICARUS_CC0pi_GUNDAM/data/Fitter/dpT/RealData"
scp [email protected]:"/exp/icarus/app/users/rvizarr/gundam-icarus/configs/real_XSec_dpT_D0_T0.root" "/Users/rvizarreta/Library/CloudStorage/[email protected]/My Drive/🏛 PhD Repository/🚀 Research/🤖 Experiments&Projects/ICARUS/ICARUS_CC0pi_GUNDAM/data/XSection/dpT/RealData"

Fit 2 — (DecayAngMEC = 0, Theta_Delta2Npi = 1)

gundamFitter -c RunConfigs/dpT/RealData/config_Fitter_RealData_dpT.yaml \
  -o real_dpT_D0_T1.root

gundamCalcXsec -c RunConfigs/dpT/RealData/config_CalcXSec_RealData_dpT.yaml \
  -f real_dpT_D0_T1.root \
  -n 10000 \
  -o real_XSec_dpT_D0_T1.root \
  --use-bf-as-xsec

Copy results to local Google Drive:

scp [email protected]:"/exp/icarus/app/users/rvizarr/gundam-icarus/configs/real_dpT_D0_T1.root" "/Users/rvizarreta/Library/CloudStorage/[email protected]/My Drive/🏛 PhD Repository/🚀 Research/🤖 Experiments&Projects/ICARUS/ICARUS_CC0pi_GUNDAM/data/Fitter/dpT/RealData"
scp [email protected]:"/exp/icarus/app/users/rvizarr/gundam-icarus/configs/real_XSec_dpT_D0_T1.root" "/Users/rvizarreta/Library/CloudStorage/[email protected]/My Drive/🏛 PhD Repository/🚀 Research/🤖 Experiments&Projects/ICARUS/ICARUS_CC0pi_GUNDAM/data/XSection/dpT/RealData"

Fit 3 — (DecayAngMEC = 1, Theta_Delta2Npi = 0)

gundamFitter -c RunConfigs/dpT/RealData/config_Fitter_RealData_dpT.yaml \
  -o real_dpT_D1_T0.root

gundamCalcXsec -c RunConfigs/dpT/RealData/config_CalcXSec_RealData_dpT.yaml \
  -f real_dpT_D1_T0.root \
  -n 10000 \
  -o real_XSec_dpT_D1_T0.root \
  --use-bf-as-xsec

Copy results to local Google Drive:

scp [email protected]:"/exp/icarus/app/users/rvizarr/gundam-icarus/configs/real_dpT_D1_T0.root" "/Users/rvizarreta/Library/CloudStorage/[email protected]/My Drive/🏛 PhD Repository/🚀 Research/🤖 Experiments&Projects/ICARUS/ICARUS_CC0pi_GUNDAM/data/Fitter/dpT/RealData"
scp [email protected]:"/exp/icarus/app/users/rvizarr/gundam-icarus/configs/real_XSec_dpT_D1_T0.root" "/Users/rvizarreta/Library/CloudStorage/[email protected]/My Drive/🏛 PhD Repository/🚀 Research/🤖 Experiments&Projects/ICARUS/ICARUS_CC0pi_GUNDAM/data/XSection/dpT/RealData"

Fit 4 — (DecayAngMEC = 1, Theta_Delta2Npi = 1)

gundamFitter -c RunConfigs/dpT/RealData/config_Fitter_RealData_dpT.yaml \
  -o real_dpT_D1_T1.root

gundamCalcXsec -c RunConfigs/dpT/RealData/config_CalcXSec_RealData_dpT.yaml \
  -f real_dpT_D1_T1.root \
  -n 10000 \
  -o real_XSec_dpT_D1_T1.root \
  --use-bf-as-xsec

Copy results to local Google Drive:

scp [email protected]:"/exp/icarus/app/users/rvizarr/gundam-icarus/configs/real_dpT_D1_T1.root" "/Users/rvizarreta/Library/CloudStorage/[email protected]/My Drive/🏛 PhD Repository/🚀 Research/🤖 Experiments&Projects/ICARUS/ICARUS_CC0pi_GUNDAM/data/Fitter/dpT/RealData"
scp [email protected]:"/exp/icarus/app/users/rvizarr/gundam-icarus/configs/real_XSec_dpT_D1_T1.root" "/Users/rvizarreta/Library/CloudStorage/[email protected]/My Drive/🏛 PhD Repository/🚀 Research/🤖 Experiments&Projects/ICARUS/ICARUS_CC0pi_GUNDAM/data/XSection/dpT/RealData"

Verify each fit took the right dial values

After launching each fit, confirm the two grid dials are registered as fixed at the intended values (catches a mis-edited YAML before wasting the run):

gundamFitter -c RunConfigs/dpT/RealData/config_Fitter_RealData_dpT.yaml \
  -o real_dpT_D0_T0.root 2>&1 | tee fit_D0_T0.log \
  | grep -iA1 "DecayAngMEC\|Theta_Delta2Npi"

Combining the grid (final result)

  1. Read the total χ² (post-fit total likelihood, FitterEngine/postFit/llhState_TNamed, Total likelihood field) from each of the four fits.
  2. Central result = fit with minimum total χ².
  3. Reject any fit with Δχ² > 1 relative to the minimum.
  4. Extract the cross section from each surviving fit; take the bin-by-bin spread across survivors as an additional model systematic, added to the error budget.

All four fits share the same free-parameter count, so raw total-χ² comparison is valid (no per-dof normalization needed).

⚠️ **GitHub.com Fallback** ⚠️