//============================================================================= /** * @file CheckIfMinosChangesParrErr.C * @brief Check if the parameter errors in fits to weighted data depend * on the Minos option in fitTo() * * @author Tim-Philip Huecking, * * Created: * @date 20-05-25 (TPH) * * Changed: * */ //============================================================================= // system includes #include #include // ROOT includes #include #include #include #include #include #include #include #include // local includes #include "modelBuilder.C" //#include "Config.C" void setGeneratorConfig(const int nSample, const int nCell3d, ModelBuilder& model); void checkRooAbsPdfGenerate( int nexp=1000, // number of pseudo experiments to generate bool extendedGen=kTRUE, // use extended feature in RooAbsPdf::generate() TString filenam="checkRooAbsPdfGenerate.root", ULong_t extSeed=0, // external seed = 0 will create one randomly bool useMixMax=kFALSE, // use MIXMAX random number generator int nSample=1e4, // nSample of RooFoamGenerator int nCell3d=5000 // nCell3d of RooFoamGenerator ) { gBenchmark->Start("runtime"); RooAbsPdf::defaultGeneratorConfig()->Print(); TRandomMixMax* rng{new TRandomMixMax{}}; if(useMixMax) RooRandom::setRandomGenerator(rng); cout << "Random number generator is: " << endl; RooRandom::randomGenerator()->Print(); // Model parameters are stored in Configurator Configurator cfg{}; cfg.prntModelPars(); // Build a model with 3 variables: // - mass (bkg: Exponential, sig: Gaussian) // - vexex (bkg: Exponential, sig: Exponential) // - vgg (bkg: Gaussian, sig: Gaussian) ModelBuilder model{cfg}; // create all the PDFs and RooRealVars needed ULong_t seed = model.buildFullModel(extSeed); // Change this value to cause the generation to fail sometimes if(extendedGen) model.m_vexexSigLam->setVal(-0.1); setGeneratorConfig(nSample, nCell3d, model); // generate a data set model.m_pdfFull->Print(); model.m_nSigFit->Print(); model.m_nBkgFit->Print(); TFile f{filenam, "UPDATE"}; TTree tr{"genRes", "genRes"}; double massSigMean = 0; tr.Branch("massSigMean", &massSigMean, "massSigMean/D"); double vexexSigMean = 0; tr.Branch("vexexSigMean", &vexexSigMean, "vexexSigMean/D"); tr.Branch("seed", &seed, "seed/l"); for(int iexp=0; iexpgenerate(RooArgList( *model.m_mass.get(), *model.m_vgg.get() , *model.m_vexex.get()), Extended(kTRUE)); massSigMean = data->mean(*model.m_mass.get()); vexexSigMean = data->mean(*model.m_vexex.get()); data->Print(); if( massSigMean > 60.24 or massSigMean < 59.75){ cout << "--> FOUND OUTLIER !! Mean="<< massSigMean << endl; data->SetName((string(data->GetName())+to_string(seed)).c_str()); data->Write(); } delete data; } tr.Fill(); } tr.Write(); f.Write(); f.Close(); cout << "\n\n\t\t----------\t\t" << endl; gBenchmark->Stop("runtime"); cout << "Finished check of RooAbsPdf::generate()" << endl; cout << "Root version: " << gROOT->GetVersionInt() << endl; cout << "\ndefault setting of generator:" << endl; RooAbsPdf::defaultGeneratorConfig()->Print(); RooArgSet Gencfg = RooAbsPdf::defaultGeneratorConfig()->getConfigSection("RooFoamGenerator"); for(auto arg: Gencfg){ arg->Print();} gBenchmark->Print("runtime"); cout << "\t\t----------\t\t" << endl; return; } void setGeneratorConfig(const int nSample, const int nCell3d, ModelBuilder& model) { // Generate da dummy data set. Otherwise setting generation config will // error out std::unique_ptr tmp{ model.m_pdfExtSigProd->generate(RooArgList( *model.m_mass.get(), *model.m_vgg.get() , *model.m_vexex.get()), Extended(kTRUE))}; RooAbsPdf::defaultGeneratorConfig()->getConfigSection("RooFoamGenerator").Print("V"); RooAbsPdf::defaultGeneratorConfig()->getConfigSection("RooFoamGenerator").setRealValue("nSample",nSample); RooAbsPdf::defaultGeneratorConfig()->getConfigSection("RooFoamGenerator").setRealValue("nCell3D",nCell3d); tmp.reset(); }