Releases: GooFit/GooFit
Version 2.3.0
What's Changed
- fix: Add sdist to .github by @henryiii in #233
- fix: Mhilton three gauss resolution by @marthaisabelhilton in #218
- chore: CMake 3.9+ now required by @danielsibemol in #240
- feat: K Matrix Resonance by @marthaisabelhilton in #209
- chore: Formatting with pre-commit by @henryiii in #241
- fix: Set FE by @henryiii in #243
- chore: updates by @henryiii in #252
- chore: update pybind11 to 2.6.0 by @henryiii in #255
- feat: Daniel amp3 body generation by @danielsibemol in #254
- fixing bug in Resonance.cu and SpecialResonanceCalculator.cu by @danielsibemol in #257
- fix: support latest versions of some deps by @henryiii in #266
- fix: rbw by @marthaisabelhilton in #260
- fix: incrementing in Mapped PDF | fix parameter index in LASS function | fix Amp3Body normalisation by @FlorianReiss in #259
- ci: display test output by @henryiii in #269
- ci(fix): ROOT is now built in 14 mode by @henryiii in #275
- chore: bump pybind11 to 2.7.1 by @henryiii in #273
- chore: bump to scikit-build 0.12 by @henryiii in #271
- chore: use pip clang format by @henryiii in #276
- fix: drop CompilerFeatures (unused, removed from CMake 3.20+) by @henryiii in #277
- chore: bump to cli11 2.1.1 by @henryiii in #274
- feat: adding rho-omega mixing lineshape. by @marthaisabelhilton in #278
- fix: correct offsets used in Amp3Body for cached values by @FlorianReiss in #264
- chore: use pre-commit/mirrors-clang-format instead by @henryiii in #284
- style: add more pre-commit checks by @henryiii in #292
- refactor: nicer PC impl by @henryiii in #291
- chore: bump dependencies by @henryiii in #293
- fix: convolutions fix by @henryiii in #294
- feat: add a few missing methods by @henryiii in #296
- chore: use scikit-build 0.13 by @henryiii in #299
- feat: PdfBase::status method - tool for debugging by @danielsibemol in #298
- fix: Martha fix cpv by @marthaisabelhilton in #279
- fix: Pappenheimer: Amp4Body_TD normalisation by @cpappenheimer in #245
- fix: latest git, avoid defaulting to submodule checkout by @henryiii in #314
- feat(python): nicer particle shape by @henryiii in #307
- feat: cherry-pick FitManager improvements by @FlorianReiss in #313
- refactor: Add templated determinant function and LU decomposition inverse to kMatrixUtils by @thboettc in #302
- refactor: converting license by @henryiii in #315
- chore: prepare for 2.3.0 by @henryiii in #316
New Contributors
- @FlorianReiss made their first contribution in #259
- @pre-commit-ci made their first contribution in #280
- @cpappenheimer made their first contribution in #245
- @thboettc made their first contribution in #302
Full Changelog: v2.2.3...v2.3.0
v2.2.3
This release sees a huge increase in platforms built on CI, and lots
of fixes to assist the new conda-forge package.
- GooFit version is now available as a Python tuple
- Check CUDA 8.0, 9.0, 9.2, and 10.0 builds on GHA #224
- Allow
goofit -m python
when no GPU present #229 - Support
GOOFIT_ARCH=OFF
, fixFORCE_LOCAL_THRUST
for CMake 3.12+ #224 - Bump vendored library versions #223, #225
- Square Dalitz added #207
- Added
setDataSize
,getName
,getBinSize
to Python bindings - CrystalBall fixes #200
- 2D MC bound #196
- Make standalone source package available on GitHub #232
Version 2.2.2: Python access
This adds a few minor fixes and tools for easier debugging.
- Added M12 and M23 access to DalitzPlotter #190
- Fix non-CUDA and older CMake builds #191
- Allow environment variables to set Python build #192
- Better variable formatting, fixed
print_goofit_info
#193, #194, more information on CUDA and ROOT #195 app.set_floating_exceptions()
will cause floating point errors to throw for debuggingapp.get_filename
now supports GooFit as a package- Fix for Python segfaulting when calling
evaluatePdf
multiple times - GSpline fixes #194
- Support ROOT 6.04 #195
- Uses CLI11 1.7.1 now #195
Version 2.2.1: Bugfixes
This release contains some performance improvements #176, and
fixes some of the bugs present in the rewrite of 2.2.0:
- Fixed bug with smooth histogram #178
- Restored spline, derivatives are now properly calculated too #181, limits corrected #188
- MCBooster seed now available #177
It also fixes several building problems found by users:
- Fixed builds with CMake 3.5 (ROOT Docker uses this by default)
- Better Pip 10+ support, limiting SciKit-Build version (0.7+ buggy on macOS) #188
- Docker is used to format if clang-format is not installed and docker is
- Forking now supported again #179, git without https access easier #183
- Better CUDA 9+ support #180, followed by full CUDA 9+ support #189
- LCG on SLC 6 supported #185, #184
- OpenMP supported again on latest macOS (not on Anaconda)
- Python binding bugfixes #188
Version 2.2: New indexing
The internals of GooFit have been updated for GPU performance and much simpler PDF authoring. The new improvements will make PDF generation and debugging much simpler. #125 Lots of Python improvements are part of this change, as well, including the removal of several compile time limits. Much better Python help display. The Physics PDFs have undergone a rename, with a coherent naming scheme (old names still work for now).
- Indexing improves performance and readability
- A number of new tests demonstrating simple usage of each PDF. #148
- Travis CI uses the additional tests to ensure changes work well.
registerFunction
simplifies PDF construction #151- The Catch2 test framework makes tests easier to write #151
- 1D Monte Carlo is easy to generate, and test with #151
- Lots of improvements to error checking,
GOOFIT_MAXFUNC
added #151 - FitControl is always enum based now #151
- Packages can now request changes on the current configure run (bugfix) #151
- Improved help, also with Jupyter notebook customization #154, #160
- Parameters can now be registered in the GooPdf Constructor #154
- Separable compilation is now required, faster compile times #159
- Nicer Makefile, fixed normalize (internal) spelling #164
- ParameterContainer is checked when
GOOFIT_TRACE
is on and using CPU #164 - Normalization improvements, PDFs store cache directly #164
- Removed defunct code #165
- Better file separation, better functional separation #166
sumOfNll
removed- Added
get_event_size
,get_bin_grid_size
,reduce_with_metric
,reduce_with_bins
,evaluate_with_metric
- No longer limit the number of parameters and functions at compile time #163
- Deleting a PDF or an Application will clear the GPU parameter/function memory
- Internal rename, PDF structure, and breaking up of files #167
- All the Dalitz PDFs are now in AmpNBody (Old names and includes still provided for compatibility)
- Resonances and Lineshapes are now one per file
- All helper classes are split out and available in
PDFs/physics/detail
- Inheritance structure added
- Better testing for MPI #169
- Partial support for CUDA 9.x #172
- External package support (BETA) #174
Version 2.1.3: Preparing for new indexing
This release is the last feature release for the 2.1 series. The changes are mostly focused on stability and support, but there are also several key pieces of needed functionality added from the NIPS project. GooFit testing is significantly more stable, C++/CUDA are better separated, one more C++ example is now available in Python, and 6.10 and 6.12 versions of ROOT are finally supported.
User facing:
- Adding a few 3-body utilities:
get_amp_real
/imag
andgetDecayInfo
(#142) - Generation no longer changes the number of events requested (#142)
- Add support for fit fraction calculation (3 body only ATM) (#143)
- kMatrix is now optional, and off by default for CUDA (slow build) (#143)
- Can directly
pip install goofit
with Pip 10 - Packages can now be turned on and off individually (
goofit_add_package
) - Moved files users might use to
goofit/utilities
fromgoofit/detail
(#145) - Adds symmetrized support for RBW (no runtime impact if not requested!) (#145)
- Python example available for Zachfit (#149)
Backend:
- Using Application no longer requires NVCC compile (#139), better C++ vs. CUDA separation
- Travis CI is much cleaner (#140, #141),
- Examples are part of tests now (#144)
- Allow changing the bin number for normalization without restarting GooFit (#143)
- Dropped symmDP where not supported (#143)
- Dropped code coverage (test timeout issues when adding more tests) (#144)
- Removed POSIX redefine warnings for Python (except CUDA), other warning fixes
- Build most examples and Python bindings with C++
- ROOT versions newer than 6.08 are now supported
- Packages do not trigger main repo git in binary dir
- Added feature summary
- Cleaned up GlobalCudaDefines, dropped GooError in favor of CUDA naming (#145)
- Added some repairs for CUDA 7 (#146)
- Added some minor changes to C++ examples (#149)
setIntegrationconstant
Python bindings added (#149)
Version 2.1.2: Live Python
GooFit has received even more Pythonization with the conversion of two more examples, ChiSquare and SimpleFit. It also has interactive Jupyter Notebook examples, where the plots update as you change the sliders.
- Grids can now be produced from DataSets with event numbers (#133)
- Far more of Minuit2 available from Python (#138)
- MC generator for 1D functions (useful for testing in future) (#138)
- Correlation matrices can now be accessed from Python (#134)
- Some examples use numba for high-speed calculation of CPU code (#134)
- Binned dataset access in Python improved (#134)
- Travis timeouts reduced by separating codecov run
- Better error message if
Python.h
missing in Python build (#136) - OpenMP and CUDA updates to build system
Version 2.1.1: Better Python
Version 2.1.0: Python bindings
GooFit now has working, fully supported Python bindings using PyBind11. All PDFs have been bound (#92). Python bindings now build by default if Python development files are found (#93). Pythonization additions, such as supporting the same shortcuts for Variables as C++, from/to numpy converters, and more, was added in (#99, #109). Pip install is now supported using SciKit-Build, and source releases are being made on PyPI (#107). The build will use CUDA if found, and OpenMP otherwise.
Many examples converted (#118, #120, #126)
Other Python additions:
- Live printout in Python Notebooks (#114)
- Minuit2 wrapper started (#115, #128)
print_goofit_info
(andprint_splash
) added to Python (#126)pyexamples/RunAll.sh
added to run all examples, run by Travis (#126)
Major changes:
Observable
s are now their own class, andCountingVariable
is nowEventNumber
(#123)- Variables are now passed by copy everywhere, handling smart pointers internally (#124)
- DecayInfo renamed and split (#124)
- FitControl is now explicitly a
std::shared_ptr
(#126) - Resonances and Lineshapes are now classes instead of using enums or ordering (#119)
- OpenMP now supported on macOS Apple Clang on High Sierra with Homebrew, using
brew install cliutils/apple/libomp
(#126)
Other changes include:
- New
ResonancePDF
types (#114) - Spline, KMatrix, FOCUS Lineshapes added, untested (#119)
- TravisCI now uses Trusty (#98), performs style checks (#117), and runs all examples (#114).
- Minuit2 now can be missing from ROOT and GooFit will use its own copy (#102, #113).
- Eigen is now included (#104), helper functions added (#119)
- Large updates to CMake, including CUDA as a language (#122), CMake 3.9 FindCUDA backport, fully target-based build (#119)
- Initial CMake IPO support (#114)
- Better folder structure for PDF source files (#114)
fpcomplex
shortcut (#114)- IDE support improvements (#114))
- Splash screen (#114)
- Macros to help setup PDFs (#119)
- CCache support
argc, argv
no longer required inGOOFIT_PARSE
(#126)- The include order is now checked by the clang-format run (#126)
- The ModernizeGooFit script supports 2.1 and more (#126)
.cpp
is used everywhere, instead of.cc
and.cpp
mix- CLI11 has been updated to 1.3 (#130)
Version 2.0.0: C++11 and CMake
GooFit is now easy to build on a wide variety of Unix systems, and supports debuggers and IDEs. GooFit is faster, has unit tests, and working examples. More PDFs and examples have been added, as well as newly released example datasets that are downloaded automatically. GooFit now has built in support for MPI, and can use that to deploy to multiple graphics cards on the same machine. A new command line parser (CLI11) and drastically improved logging and errors have made code easier to write and debug. Usage of GooFit specific terminology is now reduced, using standard Thrust or CUDA terms when possible, lowering the barrier for new developers. A new Python script has been added to assist users converting from pre 2.0 code.
The file structure of GooFit and the build system have been completely revamped. The fake nvcc
features have been removed, as have the rootstuff
copies of ROOT classes. PDFs are now organized by type and compile and link separately. Multiple PDF caching support has improved. The build system now uses CMake and manages external libraries.
A new feature of the CMake build system is GooFit Packages, which are complete packages that can be added to GooFit and built, allowing analysis code to live in a separate location from GooFit, rather than the old method of simply forking GooFit and adding your analysis manually. A GooFit Package can be made into an example trivially. See this package for an example.
GooFit 2.0 will receive continuing support while development on GooFit 2.1 presses on.
Key features:
- New 4-body Dalitz plot support and example
- New 4 body signal generation example and time-dependent Dalitz plot generation example powered by MCBooster
- Restructured files with script to aid in renaming includes, available for assisting existing projects in converting to 2.0
- CMake build system: See Issue 22 and PR 23.
- Auto compute capability detection based on detected GPUs
- Auto CUDA/OMP selection
- Added CPP single threaded backend, support for macOS and IDEs/debuggers
- Separable compilation for PDFs
- Support for more compilers, such as Clang and Intel
- Macros for
CMakeLists.txt
for adding a new package in 2-3 lines - Auto linking for build directory
- Auto download of dependencies through git submodules and CMake
- Data for examples automatically downloaded
- CUDA 7.0+ required, C++11 compliant compiler required. Large portions of the code have been moved to cleaner C++11 syntax, both by hand and with the
clang-tidy
tool (PR 86 and PR 88). - ROOT 6 recommended, but no longer required
- Fixes for building examples, nicer warnings with incorrect command line parameters
- Rootstuff, fakecuda, and other hacks removed (PR 56)
- Examples have a script that run all of them with timing info
- Travis CI builds (PR 32)
- Improved documentation, automatically builds on changes to master
- Added optional
GooFit::Application
, based on CLI11, with standard GooFit options and logging output, fully user extendable for new options. See PR 26 and Issue 33. - Better naming to match CUDA (PR 61)
- Added the GooFit namespace to all GooFit classes and variables.
- Better Variable based caching with multi-pdf support (PR 65 and PR 68)
- Logging and formatting support, cleanup of old commented code (PR 66)
- Support for Minuit2 (default and available without ROOT) joins Minuit1, rebuilt fitters provide better output and automatic timing information
- CountingVariable added for MPI ready event numbers
- Added MPI support in PR 51, supporting multiple GPUs per node and multiple nodes
- Added preliminary Python bindings using PyBind11
- Started a new tutorial series, GooFit 2torial, to replace GooTorial
- Added a changelog and version information