diff --git a/README/ReleaseNotes/v628/index.md b/README/ReleaseNotes/v628/index.md index 09fb81cd98eb43748e37653643794a6d01134c7b..c6530d28c83a96de5719589de044695ff2bef1f3 100644 --- a/README/ReleaseNotes/v628/index.md +++ b/README/ReleaseNotes/v628/index.md @@ -43,6 +43,8 @@ Please use their non-experimental counterparts `ROOT::TBufferMerger` and `ROOT:: - `ROOT::RVec::emplace()` has now been removed after deprecation; please use `ROOT::RVec::insert()` instead. - The deprecated function `ROOT::Detail::RDF::RActionImpl<Helper>::GetDataBlockCallback()` is removed; please use `GetSampleCallback()` instead. - The deprecated RooFit containers `RooHashTable`, `RooNameSet`, `RooSetPair`, and `RooList` are removed. Please use STL container classes instead, like `std::unordered_map`, `std::set`, and `std::vector`. +- The `RooFit::FitOptions(const char*)` command to steer [RooAbsPdf::fitTo()](https://root.cern.ch/doc/v628/classRooAbsPdf.html) with an option string was removed. This way of configuring the fit was deprecated since at least since ROOT 5.02. + Subsequently, the `RooMinimizer::fit(const char*)` function and the [RooMCStudy](https://root.cern.ch/doc/v628/classRooMCStudy.html) constructor that takes an option string was removed as well. ## Core Libraries diff --git a/roofit/roofitcore/inc/RooAbsMCStudyModule.h b/roofit/roofitcore/inc/RooAbsMCStudyModule.h index 665a760b980fe9e8c504f62263739ebf023de675..259b2b5c2bb50b5ff56f358d1b796aeb33804f13 100644 --- a/roofit/roofitcore/inc/RooAbsMCStudyModule.h +++ b/roofit/roofitcore/inc/RooAbsMCStudyModule.h @@ -150,11 +150,6 @@ protected: // Accessors for fit options, generator and MCstudy configuration flags - /// Return fit option string provided user - const char* fitOptions() { - return _mcs ? _mcs->_fitOptions.Data() : 0 ; - } - /// Return list of fit options provided by user RooLinkedList* fitOptList() { return _mcs ? &_mcs->_fitOptList : 0 ; diff --git a/roofit/roofitcore/inc/RooAbsPdf.h b/roofit/roofitcore/inc/RooAbsPdf.h index f38146be68c5fb1ab084e6bf7b8c2dbf159c63af..4c134c2bd39708df587f36c856949abb08ee3606 100644 --- a/roofit/roofitcore/inc/RooAbsPdf.h +++ b/roofit/roofitcore/inc/RooAbsPdf.h @@ -165,7 +165,6 @@ public: //RooAbsPdf::fitTo. struct MinimizerConfig { double recoverFromNaN = 10.; - std::string fitOpt = ""; int optConst = 2; int verbose = 0; int doSave = 0; diff --git a/roofit/roofitcore/inc/RooGlobalFunc.h b/roofit/roofitcore/inc/RooGlobalFunc.h index 09caa3e8f771f5aab1dd773d26516541df5ccade..b16dfc99c105aea4dc389c9bd2a7befc488dce06 100644 --- a/roofit/roofitcore/inc/RooGlobalFunc.h +++ b/roofit/roofitcore/inc/RooGlobalFunc.h @@ -47,12 +47,6 @@ class RooAbsCollection ; class TH1 ; class TTree ; -namespace RooFitLegacy { - -RooCmdArg FitOptions(const char* opts); - -} - /*! \namespace RooFit The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or other types of arguments). @@ -228,10 +222,6 @@ RooCmdArg IntegrateBins(double precision); // RooAbsPdf::fitTo arguments RooCmdArg PrefitDataFraction(Double_t data_ratio = 0.0) ; -RooCmdArg FitOptions(const char* opts) - R__DEPRECATED(6,28,"Please migrate to the RooCmdArg-based fit configuration" - " (or use RooFitLegacy::FitOptions(const char*) to silence this warning," - " but be warned that the RooFitLegacy function also gets removed in ROOT v6.28).") ; RooCmdArg Optimize(Int_t flag=2) ; //////////////////////////////////////////////////////////////////////////////// diff --git a/roofit/roofitcore/inc/RooMCStudy.h b/roofit/roofitcore/inc/RooMCStudy.h index 615ff8ffc9ca0471e3db8efd8c8bbb3b836efffe..bbff68c0cb41a0d8033a6c4c351b808c93864587 100644 --- a/roofit/roofitcore/inc/RooMCStudy.h +++ b/roofit/roofitcore/inc/RooMCStudy.h @@ -37,12 +37,6 @@ public: const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(), const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ; - RooMCStudy(const RooAbsPdf& genModel, const RooAbsPdf& fitModel, - const RooArgSet& dependents, const char* genOptions="", - const char* fitOptions="", const RooDataSet* genProtoData=0, - const RooArgSet& projDeps=RooArgSet()) R__DEPRECATED(6,28, - "please migrate to the other RooMCStudy constructor that doesn't use the deprecated string-based fit options."); - ~RooMCStudy() override ; // Method to add study modules @@ -133,7 +127,6 @@ protected: TList _fitResList ; // List of RooFitResult fit output objects RooDataSet* _genParData ; // List of of generated parameters of each sample RooDataSet* _fitParData ; // Data set of fit parameters of each sample - TString _fitOptions ; // Fit options string RooLinkedList _fitOptList ; // Fit option command list Bool_t _extendedGen ; // Add poisson term to number of events to generate? Bool_t _binGenData ; // Bin data between generating and fitting diff --git a/roofit/roofitcore/inc/RooMinimizer.h b/roofit/roofitcore/inc/RooMinimizer.h index 3361f76128b3ed2685f6ce125f76936acbd2e720..f36f20bd6608586d37e1acfa71633abdfd045b17 100644 --- a/roofit/roofitcore/inc/RooMinimizer.h +++ b/roofit/roofitcore/inc/RooMinimizer.h @@ -74,9 +74,6 @@ public: void setMaxIterations(Int_t n) ; void setMaxFunctionCalls(Int_t n) ; - RooFitResult* fit(const char* options) R__DEPRECATED(6,28, - "using RooMinimizer::fit() with string-based options is deprecated. Please use RooAbsPdf::fitTo() instead."); - Int_t migrad() ; Int_t hesse() ; Int_t minos() ; diff --git a/roofit/roofitcore/src/RooAbsPdf.cxx b/roofit/roofitcore/src/RooAbsPdf.cxx index 8d179018d1fdd77317ec5d143a627492b12f9cbf..c292089041a34e096d3963af5a68a1c6c9fd907c 100644 --- a/roofit/roofitcore/src/RooAbsPdf.cxx +++ b/roofit/roofitcore/src/RooAbsPdf.cxx @@ -1495,8 +1495,6 @@ int RooAbsPdf::calcSumW2CorrectedCovariance(RooMinimizer &minimizer, RooAbsReal /// this happens, try switching it off. /// <tr><td> `RecoverFromUndefinedRegions(double strength)` <td> When PDF is invalid (e.g. parameter in undefined region), try to direct minimiser away from that region. /// `strength` controls the magnitude of the penalty term. Leaving out this argument defaults to 10. Switch off with `strength = 0.`. -/// <tr><td> `FitOptions(const char* optStr)` <td> \deprecated Steer fit with classic options string (for backward compatibility). -/// \attention Use of this option excludes use of any of the new style steering options. /// /// <tr><td> `SumW2Error(Bool_t flag)` <td> Apply correction to errors and covariance matrix. /// This uses two covariance matrices, one with the weights, the other with squared weights, @@ -1607,35 +1605,6 @@ std::unique_ptr<RooFitResult> RooAbsPdf::minimizeNLL(RooAbsReal & nll, m.setPrintEvalErrors(cfg.numee); if (cfg.printLevel!=1) m.setPrintLevel(cfg.printLevel); if (cfg.optConst) m.optimizeConst(cfg.optConst); // Activate constant term optimization - - if (!cfg.fitOpt.empty()) { - - // Play fit options as historically defined - // (code copied from RooMinimizer::fit() instead of calling said function to avoid deprecation warning) - TString opts(cfg.fitOpt) ; - opts.ToLower() ; - - // Initial configuration - if (opts.Contains("v")) m.setVerbose(1) ; - if (opts.Contains("t")) m.setProfile(1) ; - if (opts.Contains("l")) m.setLogFile(Form("%s.log",nll.GetName())) ; - if (opts.Contains("c")) m.optimizeConst(1) ; - - // Fitting steps - if (opts.Contains("0")) m.setStrategy(0) ; - m.migrad() ; - if (opts.Contains("0")) m.setStrategy(1) ; - if (opts.Contains("h")||!opts.Contains("m")) m.hesse() ; - if (!opts.Contains("m")) m.minos() ; - - auto ret = (opts.Contains("r")) ? m.save() : 0 ; - - if (cfg.optConst) m.optimizeConst(0) ; - - return std::unique_ptr<RooFitResult>(ret); - - } - if (cfg.verbose) m.setVerbose(1); // Activate verbose options if (cfg.doTimer) m.setProfile(1); // Activate timer options if (cfg.strat!=1) m.setStrategy(cfg.strat); // Modify fit strategy @@ -1693,7 +1662,6 @@ RooFitResult* RooAbsPdf::fitTo(RooAbsData& data, const RooLinkedList& cmdList) pc.defineDouble("prefit", "Prefit",0,0); pc.defineDouble("RecoverFromUndefinedRegions", "RecoverFromUndefinedRegions",0,minimizerDefaults.recoverFromNaN); - pc.defineString("fitOpt","FitOptions",0,minimizerDefaults.fitOpt.c_str()) ; pc.defineInt("optConst","Optimize",0,minimizerDefaults.optConst) ; pc.defineInt("verbose","Verbose",0,minimizerDefaults.verbose) ; pc.defineInt("doSave","Save",0,minimizerDefaults.doSave) ; @@ -1712,13 +1680,6 @@ RooFitResult* RooAbsPdf::fitTo(RooAbsData& data, const RooLinkedList& cmdList) pc.defineString("mintype","Minimizer",0,minimizerDefaults.minType.c_str()) ; pc.defineString("minalg","Minimizer",1,minimizerDefaults.minAlg.c_str()) ; pc.defineObject("minosSet","Minos",0,minimizerDefaults.minosSet) ; - pc.defineMutex("FitOptions","Verbose") ; - pc.defineMutex("FitOptions","Save") ; - pc.defineMutex("FitOptions","Timer") ; - pc.defineMutex("FitOptions","Strategy") ; - pc.defineMutex("FitOptions","InitialHesse") ; - pc.defineMutex("FitOptions","Hesse") ; - pc.defineMutex("FitOptions","Minos") ; pc.defineMutex("Range","RangeWithName") ; pc.defineMutex("InitialHesse","Minimizer") ; @@ -1784,7 +1745,6 @@ RooFitResult* RooAbsPdf::fitTo(RooAbsData& data, const RooLinkedList& cmdList) MinimizerConfig cfg; cfg.recoverFromNaN = pc.getDouble("RecoverFromUndefinedRegions"); - cfg.fitOpt = pc.getString("fitOpt",0,true) ? pc.getString("fitOpt",0,true) : ""; cfg.optConst = optConst; cfg.verbose = pc.getInt("verbose"); cfg.doSave = pc.getInt("doSave"); diff --git a/roofit/roofitcore/src/RooAbsReal.cxx b/roofit/roofitcore/src/RooAbsReal.cxx index 5cf4d6285ca871cf836c13719c114b817156ee36..f97ff9d272d7b64c36c787c72daa6d1b561d8f84 100644 --- a/roofit/roofitcore/src/RooAbsReal.cxx +++ b/roofit/roofitcore/src/RooAbsReal.cxx @@ -4377,8 +4377,6 @@ RooMultiGenFunction* RooAbsReal::iGenFunction(const RooArgSet& observables, cons /// <tr><td> `Minos(const RooArgSet& set)` <td> Only run MINOS on given subset of arguments /// <tr><td> `Save(Bool_t flag)` <td> Flac controls if RooFitResult object is produced and returned, off by default /// <tr><td> `Strategy(Int_t flag)` <td> Set Minuit strategy (0 through 2, default is 1) -/// <tr><td> `FitOptions(const char* optStr)` <td> Steer fit with classic options string (for backward compatibility). Use of this option -/// excludes use of any of the new style steering options. /// /// <tr><th> <th> Options to control informational output /// <tr><td> `Verbose(Bool_t flag)` <td> Flag controls if verbose output is printed (NLL, parameter changes during fit @@ -4503,8 +4501,6 @@ RooAbsReal* RooAbsReal::createChi2(RooDataHist& data, const RooLinkedList& cmdLi /// <tr><td> `Minos(const RooArgSet& set)` <td> Only run MINOS on given subset of arguments /// <tr><td> `Save(Bool_t flag)` <td> Flac controls if RooFitResult object is produced and returned, off by default /// <tr><td> `Strategy(Int_t flag)` <td> Set Minuit strategy (0 through 2, default is 1) -/// <tr><td> `FitOptions(const char* optStr)` <td> Steer fit with classic options string (for backward compatibility). Use of this option -/// excludes use of any of the new style steering options. /// /// <tr><th><th> Options to control informational output /// <tr><td> `Verbose(Bool_t flag)` <td> Flag controls if verbose output is printed (NLL, parameter changes during fit @@ -4626,8 +4622,6 @@ RooFitResult* RooAbsReal::chi2FitDriver(RooAbsReal& fcn, RooLinkedList& cmdList) // Select the pdf-specific commands RooCmdConfig pc(Form("RooAbsPdf::chi2FitDriver(%s)",GetName())) ; - pc.defineString("fitOpt","FitOptions",0,"") ; - pc.defineInt("optConst","Optimize",0,1) ; pc.defineInt("verbose","Verbose",0,0) ; pc.defineInt("doSave","Save",0,0) ; @@ -4644,14 +4638,6 @@ RooFitResult* RooAbsReal::chi2FitDriver(RooAbsReal& fcn, RooLinkedList& cmdList) pc.defineString("minalg","Minimizer",1,"minuit") ; pc.defineObject("minosSet","Minos",0,0) ; - pc.defineMutex("FitOptions","Verbose") ; - pc.defineMutex("FitOptions","Save") ; - pc.defineMutex("FitOptions","Timer") ; - pc.defineMutex("FitOptions","Strategy") ; - pc.defineMutex("FitOptions","InitialHesse") ; - pc.defineMutex("FitOptions","Hesse") ; - pc.defineMutex("FitOptions","Minos") ; - // Process and check varargs pc.process(cmdList) ; if (!pc.ok(kTRUE)) { @@ -4659,7 +4645,6 @@ RooFitResult* RooAbsReal::chi2FitDriver(RooAbsReal& fcn, RooLinkedList& cmdList) } // Decode command line arguments - const char* fitOpt = pc.getString("fitOpt",0,kTRUE) ; const char* minType = pc.getString("mintype","Minuit") ; const char* minAlg = pc.getString("minalg","minuit") ; Int_t optConst = pc.getInt("optConst") ; @@ -4695,72 +4680,47 @@ RooFitResult* RooAbsReal::chi2FitDriver(RooAbsReal& fcn, RooLinkedList& cmdList) m.optimizeConst(optConst); } - if (fitOpt) { - - // Play fit options as historically defined - // (code copied from RooMinimizer::fit() instead of calling said function to avoid deprecation warning) - TString opts(fitOpt) ; - opts.ToLower() ; - - // Initial configuration - if (opts.Contains("v")) m.setVerbose(1) ; - if (opts.Contains("t")) m.setProfile(1) ; - if (opts.Contains("l")) m.setLogFile(Form("%s.log",fcn.GetName())) ; - if (opts.Contains("c")) m.optimizeConst(1) ; - - // Fitting steps - if (opts.Contains("0")) m.setStrategy(0) ; - m.migrad() ; - if (opts.Contains("0")) m.setStrategy(1) ; - if (opts.Contains("h")||!opts.Contains("m")) m.hesse() ; - if (!opts.Contains("m")) m.minos() ; - - ret = (opts.Contains("r")) ? m.save() : 0 ; - - } else { - - if (verbose) { - // Activate verbose options - m.setVerbose(1) ; - } - if (doTimer) { - // Activate timer options - m.setProfile(1) ; - } + if (verbose) { + // Activate verbose options + m.setVerbose(1) ; + } + if (doTimer) { + // Activate timer options + m.setProfile(1) ; + } - if (strat!=1) { - // Modify fit strategy - m.setStrategy(strat) ; - } + if (strat!=1) { + // Modify fit strategy + m.setStrategy(strat) ; + } - if (initHesse) { - // Initialize errors with hesse - m.hesse() ; - } + if (initHesse) { + // Initialize errors with hesse + m.hesse() ; + } - // Minimize using migrad - m.minimize(minType, minAlg) ; + // Minimize using migrad + m.minimize(minType, minAlg) ; - if (hesse) { - // Evaluate errors with Hesse - m.hesse() ; - } + if (hesse) { + // Evaluate errors with Hesse + m.hesse() ; + } - if (minos) { - // Evaluate errs with Minos - if (minosSet) { - m.minos(*minosSet) ; - } else { - m.minos() ; - } + if (minos) { + // Evaluate errs with Minos + if (minosSet) { + m.minos(*minosSet) ; + } else { + m.minos() ; } + } - // Optionally return fit result - if (doSave) { - string name = Form("fitresult_%s",fcn.GetName()) ; - string title = Form("Result of fit of %s ",GetName()) ; - ret = m.save(name.c_str(),title.c_str()) ; - } + // Optionally return fit result + if (doSave) { + string name = Form("fitresult_%s",fcn.GetName()) ; + string title = Form("Result of fit of %s ",GetName()) ; + ret = m.save(name.c_str(),title.c_str()) ; } // Cleanup diff --git a/roofit/roofitcore/src/RooGlobalFunc.cxx b/roofit/roofitcore/src/RooGlobalFunc.cxx index 263c9404f66f454de557e8752ba0b611a9967279..0f0582b7a75862af4e4fbe3c955ad584c6f79cde 100644 --- a/roofit/roofitcore/src/RooGlobalFunc.cxx +++ b/roofit/roofitcore/src/RooGlobalFunc.cxx @@ -217,22 +217,6 @@ namespace RooFit { // RooAbsPdf::fitTo arguments RooCmdArg PrefitDataFraction(Double_t data_ratio) { return RooCmdArg("Prefit",0,0,data_ratio,0,nullptr,nullptr,nullptr,nullptr) ; } - RooCmdArg FitOptions(const char* opts) { - oocoutW(static_cast<TObject*>(nullptr), Fitting) - << "RooFit::FitOptions(const char* opts) will be removed in ROOT v628!\n" - << "Please migrate to the RooCmdArg-based fit configuration.\n" - << "The former character flags map to RooFit command arguments as follows:\n" - << " 'h' : RooFit::Hesse()\n" - << " 'm' : RooFit::Minos()\n" - << " 'o' : RooFit::Optimize(1)\n" - << " 'r' : RooFit::Save()\n" - << " 't' : RooFit::Timer()\n" - << " 'v' : RooFit::Verbose()\n" - << " '0' : RooFit::Strategy(0)\n" - << "You can alternatively silence this warning by using RooFitLegacy::FitOptions(const char*),\n" - << "but this will get removed in ROOT v6.28 as well.\n"; - return RooFitLegacy::FitOptions(opts); - } RooCmdArg Optimize(Int_t flag) { return RooCmdArg("Optimize",flag,0,0,0,0,0,0,0) ; } RooCmdArg Verbose(Bool_t flag) { return RooCmdArg("Verbose",flag,0,0,0,0,0,0,0) ; } RooCmdArg Save(Bool_t flag) { return RooCmdArg("Save",flag,0,0,0,0,0,0,0) ; } @@ -408,10 +392,6 @@ namespace RooFit { } // End namespace RooFit -namespace RooFitLegacy { - RooCmdArg FitOptions(const char* opts) { return RooCmdArg("FitOptions",0,0,0,0,opts,0,0,0) ; } -} - namespace RooFitShortHand { RooConstVar& C(Double_t value) { return RooFit::RooConst(value) ; } diff --git a/roofit/roofitcore/src/RooMCStudy.cxx b/roofit/roofitcore/src/RooMCStudy.cxx index 1811f87fa353df7d8d9e4e47c79f35aa97658d50..0a9c28d710419b179091ce7678dbff1424bd167e 100644 --- a/roofit/roofitcore/src/RooMCStudy.cxx +++ b/roofit/roofitcore/src/RooMCStudy.cxx @@ -97,7 +97,6 @@ fitting the PDF to data and accumulating the fit statistics. <tr><td> FitModel(const RooAbsPdf&) <td> The PDF for fitting if it is different from the PDF for generating. <tr><td> ConditionalObservables(const RooArgSet& set) <td> The set of observables that the PDF should _not_ be normalized over <tr><td> Binned(Bool_t flag) <td> Bin the dataset before fitting it. Speeds up fitting of large data samples -<tr><td> FitOptions(const char*) <td> Classic fit options, provided for backward compatibility <tr><td> FitOptions(....) <td> Options to be used for fitting. All named arguments inside FitOptions() are passed to RooAbsPdf::fitTo(). `Save()` is especially interesting to be able to retrieve fit results of each run using fitResult(). <tr><td> Verbose(Bool_t flag) <td> Activate informational messages in event generation phase @@ -136,11 +135,7 @@ RooMCStudy::RooMCStudy(const RooAbsPdf& model, const RooArgSet& observables, pc.defineInt("verboseGen","Verbose",0,0) ; pc.defineInt("extendedGen","Extended",0,0) ; pc.defineInt("binGenData","Binned",0,0) ; - pc.defineString("fitOpts","FitOptions",0,"") ; pc.defineInt("dummy","FitOptArgs",0,0) ; - pc.defineMutex("FitOptions","FitOptArgs") ; // can have either classic or new-style fit options - pc.defineMutex("Constrain","FitOptions") ; // constraints only work with new-style fit options - pc.defineMutex("ExternalConstraints","FitOptions") ; // constraints only work with new-style fit options // Process and check varargs pc.process(cmdList) ; @@ -236,7 +231,6 @@ RooMCStudy::RooMCStudy(const RooAbsPdf& model, const RooArgSet& observables, _dependents.add(observables) ; _allDependents.add(_dependents) ; - _fitOptions = pc.getString("fitOpts") ; _canAddFitResults = kTRUE ; if (_extendedGen && _genProtoData && !_randProto) { @@ -311,112 +305,6 @@ RooMCStudy::RooMCStudy(const RooAbsPdf& model, const RooArgSet& observables, } -//////////////////////////////////////////////////////////////////////////////// -/// \deprecated PLEASE USE CONSTRUCTOR WITH NAMED ARGUMENTS. RETAINED FOR BACKWARD COMPATIBILY. -/// -/// Constructor with a generator and fit model. Both models may point -/// to the same object. The 'dependents' set of variables is generated -/// in the generator phase. The optional prototype dataset is passed to -/// the generator -/// -/// Available generator options -/// v - Verbose -/// e - Extended: use Poisson distribution for Nevts generated -/// -/// Available fit options -/// See RooAbsPdf::fitTo() -/// - -RooMCStudy::RooMCStudy(const RooAbsPdf& genModel, const RooAbsPdf& fitModel, - const RooArgSet& dependents, const char* genOptions, - const char* fitOptions, const RooDataSet* genProtoData, - const RooArgSet& projDeps) : - TNamed("mcstudy","mcstudy"), - _genModel((RooAbsPdf*)&genModel), - _genProtoData(genProtoData), - _projDeps(projDeps), - _constrPdf(0), - _constrGenContext(0), - _dependents(dependents), - _allDependents(dependents), - _fitModel((RooAbsPdf*)&fitModel), - _nllVar(0), - _ngenVar(0), - _genParData(0), - _fitOptions(fitOptions), - _canAddFitResults(kTRUE), - _perExptGenParams(0), - _silence(kFALSE) -{ - // Decode generator options - TString genOpt(genOptions) ; - genOpt.ToLower() ; - _verboseGen = genOpt.Contains("v") ; - _extendedGen = genOpt.Contains("e") ; - _binGenData = genOpt.Contains("b") ; - _randProto = genOpt.Contains("r") ; - - if (_extendedGen && genProtoData && !_randProto) { - oocoutE(_fitModel,Generation) << "RooMCStudy::RooMCStudy: WARNING Using generator option 'e' (Poisson distribution of #events) together " << endl - << " with a prototype dataset implies incomplete sampling or oversampling of proto data." << endl - << " Use option \"r\" to randomize prototype dataset order and thus to randomize" << endl - << " the set of over/undersampled prototype events for each generation cycle." << endl ; - } - - if (!_binGenData) { - _genContext = genModel.genContext(dependents,genProtoData,0,_verboseGen) ; - } else { - _genContext = 0 ; - } - _genParams = _genModel->getParameters(&_dependents) ; - _genSample = 0 ; - RooArgSet* tmp = genModel.getParameters(&dependents) ; - _genInitParams = (RooArgSet*) tmp->snapshot(kFALSE) ; - delete tmp ; - - // Store list of parameters and save initial values separately - _fitParams = fitModel.getParameters(&dependents) ; - _fitInitParams = (RooArgSet*) _fitParams->snapshot(kTRUE) ; - - _nExpGen = _extendedGen ? genModel.expectedEvents(&dependents) : 0 ; - - // Place holder for NLL - _nllVar = new RooRealVar("NLL","-log(Likelihood)",0) ; - - // Place holder for number of generated events - _ngenVar = new RooRealVar("ngen","number of generated events",0) ; - - // Create data set containing parameter values, errors and pulls - RooArgSet tmp2(*_fitParams) ; - tmp2.add(*_nllVar) ; - tmp2.add(*_ngenVar) ; - - // Mark all variable to store their errors in the dataset - tmp2.setAttribAll("StoreError",kTRUE) ; - tmp2.setAttribAll("StoreAsymError",kTRUE) ; - _fitParData = new RooDataSet("fitParData","Fit Parameters DataSet",tmp2) ; - tmp2.setAttribAll("StoreError",kFALSE) ; - tmp2.setAttribAll("StoreAsymError",kFALSE) ; - - // Append proto variables to allDependents - if (genProtoData) { - _allDependents.add(*genProtoData->get(),kTRUE) ; - } - - // Call module initializers - list<RooAbsMCStudyModule*>::iterator iter ; - for (iter=_modList.begin() ; iter!= _modList.end() ; ++iter) { - Bool_t ok = (*iter)->doInitializeInstance(*this) ; - if (!ok) { - oocoutE(_fitModel,Generation) << "RooMCStudy::ctor: removing study module " << (*iter)->GetName() << " from analysis chain because initialization failed" << endl ; - iter = _modList.erase(iter) ; - } - } - -} - - - //////////////////////////////////////////////////////////////////////////////// RooMCStudy::~RooMCStudy() @@ -747,12 +635,6 @@ void RooMCStudy::resetFitParams() RooFitResult* RooMCStudy::doFit(RooAbsData* genSample) { - // Fit model to data set - TString fitOpt2(_fitOptions) ; fitOpt2.Append("r") ; - if (_silence) { - fitOpt2.Append("b") ; - } - // Optionally bin dataset before fitting RooAbsData* data ; if (_binGenData) { @@ -763,27 +645,17 @@ RooFitResult* RooMCStudy::doFit(RooAbsData* genSample) data = genSample ; } - RooFitResult* fr ; - if (_fitOptList.GetSize()==0) { - if (_projDeps.getSize()>0) { - fr = (RooFitResult*) _fitModel->fitTo(*data,RooFit::ConditionalObservables(_projDeps),RooFitLegacy::FitOptions(fitOpt2)) ; - } else { - fr = (RooFitResult*) _fitModel->fitTo(*data,RooFitLegacy::FitOptions(fitOpt2)) ; - } - } else { - RooCmdArg save = RooFit::Save() ; - RooCmdArg condo = RooFit::ConditionalObservables(_projDeps) ; - RooCmdArg plevel = RooFit::PrintLevel(-1) ; - RooLinkedList fitOptList(_fitOptList) ; - fitOptList.Add(&save) ; - if (_projDeps.getSize()>0) { - fitOptList.Add(&condo) ; - } - if (_silence) { - fitOptList.Add(&plevel) ; - } - fr = (RooFitResult*) _fitModel->fitTo(*data,fitOptList) ; + RooCmdArg save = RooFit::Save() ; + RooCmdArg condo = RooFit::ConditionalObservables(_projDeps) ; + RooCmdArg plevel = RooFit::PrintLevel(_silence ? -1 : 1) ; + + RooLinkedList fitOptList(_fitOptList) ; + fitOptList.Add(&save) ; + if (!_projDeps.empty()) { + fitOptList.Add(&condo) ; } + fitOptList.Add(&plevel) ; + RooFitResult* fr = _fitModel->fitTo(*data,fitOptList) ; if (_binGenData) delete data ; @@ -852,8 +724,6 @@ Bool_t RooMCStudy::fitSample(RooAbsData* genSample) Bool_t userSaveRequest = kFALSE ; if (_fitOptList.GetSize()>0) { if (_fitOptList.FindObject("Save")) userSaveRequest = kTRUE ; - } else { - if (_fitOptions.Contains("r")) userSaveRequest = kTRUE ; } if (userSaveRequest) { @@ -898,7 +768,7 @@ Bool_t RooMCStudy::addFitResult(const RooFitResult& fr) } // Store fit result if requested by user - if (_fitOptions.Contains("r")) { + if (_fitOptList.FindObject("Save")) { _fitResList.Add((TObject*)&fr) ; } diff --git a/roofit/roofitcore/src/RooMinimizer.cxx b/roofit/roofitcore/src/RooMinimizer.cxx index d5a5dc4b0b37350846d23188bc8aa21c6a302664..3e82c68202aa9f22636ece6dd76993bb3bf21b71 100644 --- a/roofit/roofitcore/src/RooMinimizer.cxx +++ b/roofit/roofitcore/src/RooMinimizer.cxx @@ -303,40 +303,6 @@ const ROOT::Fit::Fitter* RooMinimizer::fitter() const } - -//////////////////////////////////////////////////////////////////////////////// -/// Parse traditional RooAbsPdf::fitTo driver options -/// -/// m - Run Migrad only -/// h - Run Hesse to estimate errors -/// v - Verbose mode -/// l - Log parameters after each Minuit steps to file -/// t - Activate profile timer -/// r - Save fit result -/// 0 - Run Migrad with strategy 0 - -RooFitResult* RooMinimizer::fit(const char* options) -{ - TString opts(options) ; - opts.ToLower() ; - - // Initial configuration - if (opts.Contains("v")) setVerbose(1) ; - if (opts.Contains("t")) setProfile(1) ; - if (opts.Contains("l")) setLogFile(Form("%s.log",_fcn->getFunctionName().c_str())) ; - if (opts.Contains("c")) optimizeConst(1) ; - - // Fitting steps - if (opts.Contains("0")) setStrategy(0) ; - migrad() ; - if (opts.Contains("0")) setStrategy(1) ; - if (opts.Contains("h")||!opts.Contains("m")) hesse() ; - if (!opts.Contains("m")) minos() ; - - return (opts.Contains("r")) ? save() : 0 ; -} - - bool RooMinimizer::fitFcn() const { bool ret;