10 #include "cetlib_except/exception.h" 45 fRand.SetSeed(pset.
get<
unsigned long int>(
"RandomSeed", 0) +
46 pset.
get<
unsigned int >(
"StartUniverse", 0));
57 ";Universe;Uncertainty Draw;",
68 ";Unvierse;Parameter Draw",
81 std::vector<cmf::Location> & vecLoc)
110 std::map<std::string, double> systParVals;
111 for(
auto const& itr : nominalLoc.
NDLocation()){
112 if(itr.second.IsOscPar() ||
113 itr.second.IsFixed() )
continue;
120 systParVals.emplace(itr.first, sigFrac);
122 for(
auto const& itr : nominalLoc.
FDLocation()){
123 if(itr.second.IsOscPar() ||
124 itr.second.IsFixed() ||
125 systParVals.count(itr.first) > 0 )
continue;
129 systParVals.emplace(itr.first, sigFrac);
135 for(
auto const& itr : systParVals){
137 systStr +=
"\n\t" + itr.first +
": " +
std::to_string(itr.second);
139 fSystDrawHist->Fill(universeNum, itr.first.c_str(), itr.second);
166 std::map<std::string, double> oscParVals;
167 for(
auto const& itr : nominalLoc.
FDLocation()){
170 val = itr.second.Value();
175 << itr.second.IsOscPar()
177 << itr.second.IsFixed();
182 if(!itr.second.IsFixed()){
187 if(itr.second.IsNuisance()){
189 val =
fRand.Gaus(itr.second.CentralValue(),
190 itr.second.Variance());
193 <<
"nuisance parameter " 198 << itr.second.CentralValue()
200 << itr.second.Variance()
202 << itr.second.CentralValue() - itr.second.Variance();
204 else if(itr.second.IsConstrained()){
205 val =
fRand.Rndm() * (itr.second.UpperBound() - itr.second.LowerBound()) +
206 itr.second.LowerBound();
209 <<
"non-nuisance parameter " 214 << itr.second.LowerBound()
216 << itr.second.UpperBound()
218 << itr.second.UpperBound() - itr.second.LowerBound();
223 oscParVals.emplace(name, val);
229 for(
auto const& itr : oscParVals){
232 if(!vecLoc.
FDLocation().find(itr.first)->second.IsFixed()){
248 std::vector<cmf::Location> & vecLocs)
271 std::vector<float> & poissonSpectrum)
275 poissonSpectrum = spectrum;
280 poissonSpectrum.resize(spectrum.size(), 0.);
301 std::vector<float> & poissonSpectrum)
303 for(
size_t b = 0;
b < spectrum.size(); ++
b){
304 poissonSpectrum[
b] =
fRand.Poisson(spectrum[
b]);
307 <<
"PoissonSpectrumBinByBin, bin: " 314 << poissonSpectrum[
b]
316 << 1. - poissonSpectrum[
b] / spectrum[
b];
323 unsigned int uNumber)
334 title +=
";Bin;Events";
335 TH1D *poissonHist = dir.
make<TH1D>(name.data(),
340 poissonHist->Sumw2();
352 name =
"AsimovUniverse_" + unumStr;
353 TH1D *asimovHist = dir.
make<TH1D>(name.data(),
360 name =
"RatioToAsimovUniverse_" + unumStr;
361 TH1D *ratioHist = dir.
make<TH1D>(name.data(),
374 ratioHist->Divide(poissonHist, asimovHist);
#define LOG_DEBUG(stream)
enum cmf::osc_params OscParm_t
void Initialize(fhicl::ParameterSet const &pset)
TH2D * fSystDrawHist
keep track of the systematic parameter values
TFileDirectory mkdir(std::string const &dir, std::string const &descr="")
void FillPoissonSpectrum(std::vector< float > &spectrum, std::vector< float > &poissonSpectrum)
void CreateLocationWithVariedOscParameters(cmf::Location const &nominalPoint, cmf::Location &vecPoint, size_t universeNum)
void CreateLocationWithVariedSystematics(cmf::Location const &nominalLoc, cmf::Location &vecLoc, size_t universeNum)
cmf::ParameterSpaceLoc const & NDLocation() const
T get(std::string const &key) const
unsigned int fNumUniverses
number of fake universes to create
cmf::ParameterSpaceLoc const & FDLocation() const
void MakeUniverseHistograms(cmf::FakeUniverse &fakeU, unsigned int uNumber)
Module to combine a set of results into a single file currently only does one data product type at a ...
bool fPoissonByBin
use bin by bin method for picking poisson numbers
void CreateLocationsWithVariedSystematics(cmf::Location const &nominalLoc, std::vector< cmf::Location > &vecLocs)
static RandomUniverseUtility * Instance()
T * make(ARGS...args) const
TH2D * fOscParamDrawHist
keep track of the oscillation parameter values
bool UniformDrawParameters(std::string const &name)
void PoissonSpectrumBinByBin(std::vector< float > &spectrum, std::vector< float > &poissonSpectrum)
bool fPoissonByHist
use histogram method for picking poisson numbers
#define LOG_VERBATIM(category)
std::string to_string(ModuleType mt)
TRandom3 fRand
RNG for picking the variation in parameters.
std::vector< float > const & AsimovSpectrum() const
bool fPoissonFluctuate
do we want to poisson fluctuate the FD prediction?
std::vector< float > const & PoissonSpectrum() const
void SetParameterValue(std::string const &parName, double const &value, cmf::DetType_t const &det)
static std::string KeyToString(long const &key)
static CovarianceBinUtility * Instance()
static RandomUniverseUtility * gRUU
void CreateLocationsWithVariedOscParameters(cmf::Location const &nominalLoc, std::vector< cmf::Location > &vecLoc)