Skip to content
Snippets Groups Projects
  1. Jan 11, 2023
    • Jonas Rembser's avatar
      [RF] Make margin in `RooAbsRealLValue::inRange()` zero by default · 48637270
      Jonas Rembser authored
      The different overloads of `RooAbsRealLValue::inRange()` implemented
      different tolerances when checking if a value `x` falls inside a
      specific range. Some overloads checked if the interval
      `[x - 1e-6, x + 1e6]` is overlapping with the range, an other overload
      checked if the interval `[x - 1e-8*x, x + 1e8*x]` is overlapping.
      
      It's better is this is done consistently and predictably so this commit
      suggests to leave out these epsilon margins that were never documented.
      For backwards compatibility, one can set a custom relative or absolute
      epsilon via the `RooNumber` interface.
      48637270
  2. Jan 10, 2023
  3. Jan 06, 2023
    • Jonas Rembser's avatar
      [RF] Remove `RooGenFunction` and `RooMultiGenFunction` · a89130ac
      Jonas Rembser authored
      The `RooGenFunction` was only a lightweight adaptor that exports a
      RooAbsReal as a `ROOT::Math::IGenFunction`. The same can be easily
      achieved with the generic `ROOT::Math::Functor1D`, so in the spirit of
      not duplicating interfaces, the `RooGenFunction` is removed.
      
      The same goes for the `RooMultiGenFunction`.
      a89130ac
  4. Jan 05, 2023
  5. Dec 21, 2022
  6. Dec 16, 2022
  7. Dec 15, 2022
  8. Dec 14, 2022
  9. Dec 09, 2022
  10. Dec 02, 2022
  11. Nov 11, 2022
  12. Nov 10, 2022
  13. Oct 15, 2022
  14. Oct 14, 2022
  15. Oct 13, 2022
  16. Sep 28, 2022
  17. Aug 24, 2022
  18. Aug 09, 2022
    • Jonas Rembser's avatar
      [RF] Vectorize `RooAbsBinning` interface for bin index lookups · 340d809c
      Jonas Rembser authored
      The `RooAbsBinning` interface for bin index lookups was changed to
      enable vectorized implementations. Instead of having the override
      `RooAbsBinning::binNumber()`, the binning implementations now have to
      override the `RooAbsBinning::binNumbers()` function to evaluate the bin
      indices of multiple values in one function call.
      
      The interface of `RooAbsBinning::binNumbers()` is designed to facilitate
      the accregation of bin indices over multiple dimensions.
      
      The former `RooAbsBinning::binNumber()` method is now implement in terms
      of the vectorized version, such that we automatically get wide test
      coverage. It was verified that this doesn't come with a performance
      overhead.
      
      This will greatly facilitate the vectorization of the RooHistPdf and
      RooHistFunc later.
      340d809c
  19. Aug 05, 2022
    • Jonas Rembser's avatar
      [RF] Remove RooFitLegacy/RooMultiCatIter · 2cb854cd
      Jonas Rembser authored
      In the previous commit, the wrong old-style implementation of
      `RooMultiCategory::evaluate()` was removed.
      
      Now, the only place where the `RooMultiCatIter` is still used is the
      `RooSuperCategory::MakeIterator()` function, which is already deprecated
      since the RooFit category rewrite for ROOT 6.22 (#5502).
      
      It's not worth to carry around the `RooMultiCatIter` just for that, so
      this commit suggests to remove the deprecated
      `RooSuperCategory::MakeIterator()` function and get rid of the
      RooMultiCatIter.
      2cb854cd
  20. Aug 04, 2022
    • Jonas Rembser's avatar
      [RF] Disable copy assignment for RooAbsArg and derived types · b8fcf3f9
      Jonas Rembser authored
      Copy assignment for RooAbsArgs was implemented in an unexpected and
      inconsistent way. While one would expect that the copy assignment is
      copying the object, it said in the documentation of
      `RooAbsArg::operator=` that it will "assign all boolean and string
      properties of the original bject. Transient properties and client-server
      links are not assigned." This contradicted with the implementation,
      where the server links were actually copied too. Indeed it is
      questionable that adding also the servers of the `other` RooAbsArg makes
      sense when the proxies are not changed.
      
      There was also a memory leak of the `_ownedComponents`, because
      `_ownedComponents` got reset to `nullptr` without deleting the
      pointed-to owned collection.
      
      Furthermore, in `RooAbsRealLValue`, the assigment operator was
      overloaded by a function that only assigns the value of another
      `RooAbsReal`.
      
      With all these inconsistencies, it was deemed safer to disable copy
      assignment of RooAbsArgs from now on.
      b8fcf3f9
  21. Jun 22, 2022
  22. Jun 21, 2022
    • Jonas Rembser's avatar
      [RF] Specify the default RooMinimizer minimizer type in only one place · 856c2adf
      Jonas Rembser authored
      The default minimizer type was specified both in the RooMinimizer
      itself, as well as in the `fitTo` methods. This is not optimal, as one
      would have to remember to change it everywhere if the defaults are
      changed in RooFit.
      
      In RooStats, there were a few places where the RooMinimizer defaults
      were obtained via
      `ROOT::Math::MinimizerOptions::DefaultMinimizerType` directly. This
      is now done for all RooFit libraries to be consistent.
      856c2adf
  23. Jun 16, 2022
    • Jonas Rembser's avatar
      [RF] Remove `NormFactor::GetConst()` and `SetConst()` member functions · 40fd04fe
      Jonas Rembser authored
      As printed out by the HistFactory in a warning message for a long time
      already, setting the `Const` attribute to the `<NormFactor>` tag is
      deprecated and it will be ignored. Instead, add
      `<ParamSetting Const="True"> myparam </ParamSetting>`
      to your top-level XML's `<Measurement>` entry.
      
      This deprecation implied that the constant parameter flag in the
      `RooStats:HistFactory::NormFactor` class had no effect as well. To avoid
      ambiguity in the future, the possibility to set and retrieve this flag with
      `NormFactor::SetConst()` and `NormFactor::GetConst()` was removed, and the
      aforementioned deprecated warning is not printed anymore.
      40fd04fe
    • Jonas Rembser's avatar
      [RF] Remove deprecated RooStats::HistFactory::EstimateSummary class · f55b2792
      Jonas Rembser authored
      The longtime-deprecated `RooStats::HistFactory::EstimateSummary` class
      is removed, including the functions that use it. The information that it
      was meant to store is managed by the
      `RooStats::HistFactory::Measurement` object since many years.
      f55b2792
  24. May 18, 2022
    • Jonas Rembser's avatar
      [RF] Remove entry masking feature from RooDataHist · 120866f5
      Jonas Rembser authored
      This commit removes some functions from the RooFit data classes:
      
        * `RooAbsData::valid()` (virtual method that was overridden in
           RooDataHist but not RooDataSet)
      
        * `RooDataHist::valid(std::size_t i)` and `RooDataHist::valid()`
      
        * `RooDataHist::cacheValidEntries()`
      
      The `cacheValidEntries` method was originally intended to be used in
      `RooAbsOptTestStatistic` to mask histogram entries out of the variable
      range in case of a subrange fit. The reasons why `cacheValidEntries` and
      the related `valid()` methods should be removed are:
      
        1. It is redundant. In a subrange fit, the `RooAbsOptTestStatistic` is
           creating a clone of the dataset with the subrange only using
           `RooAbsData::reduce()`. So all entries are valid by definition.
      
        2. RooDataHist and RooDataSet have inconistent implementations. For
           the RooDataHist, `valid()` tells you "if bin `i` is considered
           valid within the current range definitions of all observables"
           (according to the documentation). For the RooDataSet, it always
           returns `true`. This inconsistency leaves plenty of room for error,
           and means that a subrange selection relying on
           `RooAbsData::vaild()` would be broken anyway because it wouldn't
           work with RooDataSet.
      
        3. The masking of out-of-range entries unnessecarily increases the
           `mutable` state of the RooDataHist, which can cause trouble if one
           updates the observable range but then forgets to call
           `cacheValidEntries()`.
      
        4. Even the documentation said that `RooDataHist::cacheValidEntries()`
           was a "shortcut function only for RooAbsOptTestStatistic". Why keep
           it if `RooAbsOptTestStatistic` doesn't even use it in a meaningful
           way anymore?
      120866f5
  25. May 17, 2022
  26. May 16, 2022
    • Jonas Rembser's avatar
      [RF] Introducing binned likelihood fit optimization in HistFactory · 4feb08d7
      Jonas Rembser authored
      In a binned likelihood fit, it is possible to skip the PDF normalization
      when the unnormalized binned PDF can be interpreted directly in terms of
      event yields. This is now done by default for models HistFactory models,
      which results in great speedups for binned fits with many channels. Some
      RooFit users like ATLAS were already using this for a long time, so this
      feature is battle-tested.
      
      To disable this optimization when using the `hist2workspace` executable,
      add the `-disable_binned_fit_optimization` command line argument.
      Directly in C++, you can also set the `binnedFitOptimization` to `false`
      in the HistFactory configuration as follows:
      ```C++
      RooStats::HistFactory::MakeModelAndMeasurementFast(measurement, {.binnedFitOptimization=false});
      ```
      If your compiler doesn't support aggregate initialization with designators, you
      need to create and edit the configuration struct explicitely:
      ```C++
      RooStats::HistFactory::HistoToWorkspaceFactoryFast::Configuration hfCfg;
      hfCfg.binnedFitOptimization = false;
      RooStats::HistFactory::MakeModelAndMeasurementFast(measurement, hfCfg);
      ```
      4feb08d7
    • Olivier Couet's avatar
      [skip-ci] Update rel-notes (#10587) · aeda9a2f
      Olivier Couet authored
      aeda9a2f
  27. May 05, 2022
    • Jonas Rembser's avatar
      [RF] Move Roo(Abs)MinimizerFcn out of public RooFit interfaces · abdf727a
      Jonas Rembser authored
      The `RooAbsMinimizerFcn` and `RooMinimizerFcn` classes are
      implementation details of the `RooMinimizer`.
      
      In one of the recent RooFit meetings, it was decided together with users
      that this should be no problem, and doing so will greatly increase the
      developers flexibility in updating the RooMinimizer implementation.
      
      This removal is mentioned in the v628 release notes.
      abdf727a
  28. May 03, 2022
  29. Apr 19, 2022
    • Jonas Rembser's avatar
      [RF] Deprecate `RooAbsData::createHistogram` overload with `int` params · 7540dcea
      Jonas Rembser authored
      The `RooAbsData::createHistogram` has two overloads, one taking RooFit
      command arguments and one taking integers for bin numbers (the version
      with command arguments is much more common in RooFit code).
      
      They behave inconsistently when using default parameters, e.g. these two
      calls result in different binnings:
      ```C++
      // 1. overload with int bin numbers:
      data->createHistogram(obs->GetName());
      
      // 2. overload with command arguments:
      data->createHistogram(data->GetName(), dataObs);
      ```
      
      The function with integer bin numbers defaults to computing a binning
      automatically from the distribution in the dataset. The function with
      command arguments defaults to the binning stored in the variable, which
      is much more suitable for RooFit.
      
      To avoid confusion in the future, this commit marks the overload with
      the `int` parameters as deprecated so it is removed in ROOT 6.30.
      
      Closes https://github.com/root-project/root/issues/10401.
      7540dcea
    • Olivier Couet's avatar
      New class TGraph2DAsymmErrors (#10347) · 453cf0ca
      Olivier Couet authored
      * New class TGraph2DAsymmErrors
      
      * Update release notes
      
      * fix typo
      453cf0ca
  30. Apr 07, 2022
  31. Mar 25, 2022
    • Jonas Rembser's avatar
      [RF] Remove HistoToWorkspaceFactory (non-Fast) · d9b29c39
      Jonas Rembser authored
      The original `HistoToWorkspaceFactory` produced models that consisted of
      a  Poisson term for each bin.  In this "number counting form" the
      dataset has one row and the collumns corresponded to the number of
      events for each bin. This led to severe performance problems in
      statistical tools that generated pseudo-experiments and evaluated
      likelihood ratio test statistics.
      
      Nowadays, everyone uses the faster `HistoToWorkspaceFactoryFast`
      implementation that  produces a model in the "standard form" where the
      dataset has one row for each event, and the column corresponds to the
      value of the observable in the histogram.
      
      Therefore, the original `HistoToWorkspaceFactory` is now removed to
      avoid  confusion and maintainance burden.
      d9b29c39
  32. Mar 09, 2022
  33. Feb 16, 2022
  34. Feb 15, 2022
Loading