Skip to content

Determining all existing variations and sub-variations

A limitation of Combine is that it cannot account for correlations between constraints on nuisance parameters. So if we want to produce inputs that Combine can use, we need to have a separate histogram for each variation \times index. For instance (the Up and Down suffixes instead of up and dn are for compatibility with Combine):

dimuon/DYJetsToMuMu/nominal
dimuon/DYJetsToMuMu/TriggerSFStatBin0Up
dimuon/DYJetsToMuMu/TriggerSFStatBin0Down
dimuon/DYJetsToMuMu/TriggerSFStatBin1Up
dimuon/DYJetsToMuMu/TriggerSFStatBin1Down
...
dimuon/DYJetsToMuMu/TriggerSFSystUp
dimuon/DYJetsToMuMu/TriggerSFSystDown
...

In order to do this, we need to instantiate an histogram for every possible index of a given variation. We could instantiate them dynamically when new variations are encountered, but this would make hadd non-trivial (since we'd need to merge with the nominal when a variation doesn't exist).

I would approach this problem by writing a small program that iterates over all events, collects all weight indices it encounters, and writes them down in an hadd-friendly way (maybe as a small TTree). This file would then be parsed before generating the histograms for Combine.

I'm opening this issue early to collect comments about the approach.