// Program to implement "Errors on Errors" ("EOE") model as in // G. Cowan, "Statistical Models with Uncertain Error Parameters", // Eur. Phys. J. C (2019) 79:133; e-print arXiv:1809.05778. // Glen Cowan // RHUL Physics // May 2019 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "Eoe.h" #include "fitPar.h" using namespace std; int main(int argc, char *argv[]) { // Read input steering file string inputFileName; if ( argc == 1 ) { cout << "Enter name of input file: "; cin >> inputFileName; cin.ignore(); // clear buffer } else { inputFileName = argv[1]; } // Open output histogram file and book histograms TFile* histFile = new TFile("eoe.root", "recreate"); TH1D* h_muHat = new TH1D("h_muHat", "muHat", 100, 0., 20.); TH1D* h_q = new TH1D("h_q", "q", 100, 0., 40.); // Create random number generators (ran for uniform, rgsl for gamma) int seed = 1234567; TRandom3* ran = new TRandom3(seed); ROOT::Math::Random* rgsl = new ROOT::Math::Random(); rgsl->SetSeed(431155); // Create Eoe object (reads steering file w/ data) and do fit Eoe eoe(inputFileName, ran, rgsl); int L = eoe.L(); // number of measurements int M = eoe.M(); // num param of interest (for ave. M=1) int N = eoe.N(); // num nuis param (= num control meas.) eoe.fit(); // calls fitPar // Extract parameters and std. dev. vector parVec = eoe.parVec(); double muHat = parVec[0]; vector sigParVec = eoe.sigParVec(); double sigmaMuHat = sigParVec[0]; vector thetaVec(N); for (int i=0; i sigma_u_hh_vec = eoe.sigma_u_HatHatVec(thetaVec); // Get MINOS interval for parameter of interest mu double epl = eoe.getEplus(); double emi = eoe.getEminus(); double epa = eoe.getEparab(); double minosa = 0.5 * (epl + abs(emi)); double minosLo = muHat - abs(emi); double minosUp = muHat + epl; // Get goodness of fit double q = eoe.q(); // EOE Eq. (61) // double qBCMC = eoe.qBCMC(); // q', MC-based Bartlett correction // Output cout << "Input data: y dy" << endl; for (int i=0; iWrite(); histFile->Close(); return 0; }