//============================================================================= /** * @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 // local includes #include "modelBuilder.C" //#include "Config.C" 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=kTRUE // use MIXMAX random number generator ) { gBenchmark->Start("runtime"); 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); // 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->Write(); } } 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; gBenchmark->Print("runtime"); cout << "\t\t----------\t\t" << endl; return; }