12 #include "TDirectory.h" 13 #include "TObjString.h" 15 #include "TFeldmanCousins.h" 27 double cosmicScaleError,
29 : fMC(pred), fData(data),
31 fCosmicScaleError(cosmicScaleError),
32 fPoissonError(PoissonError)
39 TFeldmanCousins
fc(0.6827);
40 for(
int i = 1;
i<= cosmicErrHist.size()-2;
i++){
41 double y = cosmicErrHist[
i];
45 if ( y < 50 ) errlow = (y - fc.CalculateLowerLimit(y,0))/y;
46 else errlow = (
sqrt(y))/y;
47 if ( y < 30 ) errup = (fc.CalculateUpperLimit(y,0)-
y)/y;
48 else errup = (
sqrt(y))/y;
63 Eigen::Array<T, Eigen::Dynamic, 1>
67 using EigenArray = Eigen::Array<T, Eigen::Dynamic, 1>;
76 if constexpr (std::is_same_v<T, stan::math::var>)
91 for(
int i = 1;
i<= acosm.size()-2;
i++){
92 if (sigma>0) acosm[
i] *= (1+sigma*
fBinErrors[
i-1].first);
93 if (sigma<0) acosm[
i] *= (1+sigma*
fBinErrors[
i-1].second);
103 template Eigen::ArrayXd
137 dir = dir->mkdir(name.c_str());
140 TObjString(
"SingleSampleExperiment").Write(
"type");
156 dir = dir->GetDirectory(name.c_str());
159 TObjString* ptag = (TObjString*)dir->Get(
"type");
161 assert(ptag->GetString() ==
"SingleSampleExperiment");
167 auto ret = std::make_unique<SingleSampleExperiment>(
mc, *
data);
169 if(dir->Get(
"cosmic")){
170 ret->fCosmic = *ana::LoadFrom<Spectrum>(
dir,
"cosmic");
Cuts and Vars for the 2020 FD DiF Study.
std::optional< Spectrum > fCosmic
virtual double ChiSq(osc::IOscCalcAdjustable *osc, const SystShifts &syst=SystShifts::Nominal()) const override
Simple record of shifts applied to systematic parameters.
General interface to oscillation calculators.
SingleSampleExperiment(const IPrediction *pred, const Spectrum &data, const Spectrum &cosmic, double cosmicScaleError=0, bool PoissonError=false)
const Eigen::ArrayXd & GetEigen() const
NB these don't have POT scaling. For expert high performance ops only!
virtual void SaveTo(TDirectory *dir, const std::string &name) const
const CosmicBkgScaleSyst kCosmicBkgScaleSyst
double LogLikelihood(const Eigen::ArrayXd &ea, const Eigen::ArrayXd &oa, bool useOverflow)
The log-likelihood formula from the PDG.
Representation of a spectrum in any variable, with associated POT.
const XML_Char const XML_Char * data
virtual void SaveTo(TDirectory *dir, const std::string &name) const override
Sum up livetimes from individual cosmic triggers.
static std::unique_ptr< Spectrum > LoadFrom(TDirectory *dir, const std::string &name)
T GetShift(const ISyst *syst) const
virtual Spectrum PredictSyst(osc::IOscCalc *calc, const SystShifts &syst) const
std::vector< std::pair< double, double > > fBinErrors
void SaveTo(TDirectory *dir, const std::string &name) const
std::unique_ptr< IPrediction > LoadFrom< IPrediction >(TDirectory *dir, const std::string &label)
Oscillation probability calculators.
virtual ~SingleSampleExperiment()
Eigen::Array< stan::math::var, Eigen::Dynamic, 1 > ArrayXstan
REGISTER_LOADFROM("BENDecomp", IDecomp, BENDecomp)
assert(nhit_max >=nhit_nbins)
Standard interface to all prediction techniques.
Dummy syst to communicate with SingleSampleExperiment.
static std::unique_ptr< SingleSampleExperiment > LoadFrom(TDirectory *dir, const std::string &name)
Eigen::Array< T, Eigen::Dynamic, 1 > PredHistIncCosmics(osc::_IOscCalc< T > *calc, const SystShifts &syst) const
virtual stan::math::var LogLikelihood(osc::IOscCalcAdjustableStan *osc, const SystShifts &syst=kNoShift) const override
void RemoveShift(const ISyst *syst)
double Livetime() const
Seconds. For informational purposes only. No calculations use this.
const Eigen::ArrayXstan & GetEigenStan() const