Plotter & fitter
I think I am done with this for now. The fitter is still a bit of a mess, but since I'll have to perform a major refactoring of it soon anyways, I don't want to spend too much time cleaning up the current implementation.
General
- I have created a ROOT dataframe wrapper called Dataframe.
- Currently it is kinda malplaced in the plots directory, but I didn't want to create an entirely new folder just for this.
- This is also where I have defined the optional transformations
extract_excited
,filter
(should maybe be renamed),cut_circle
, andcut_y
. The last three are not that interesting, but please look closely at theextract_excited
implementation - it turns out to be extremely important for the quality of the fit. - I have also defined some global strings in this class, which are the branch names for the ROOT files. We may want to make these user-definable instead.
- I have also created a new Multiframe class, which is just a collection of Dataframes. The idea is that we can use this to store different simulations, such as e.g. a 2- and 3- simulation.
- Note that in most of my comments I distinguish between
sim3a
andsim3a_i
files. The former will always contain a single partial wave, while the latter will contain two. - I have created a Google Drive folder with some files from my project you can play around with. The
true_events
files are all triple-coincidence experimental data after it has been through the entire AUSAlib pipeline and been TDC calibrated.
Plotter
- I have added a new executable to CMake named
plotter
. You should be able to just runmake plotter
in the build directory. - I have created a whole lot of plotting classes you may want to look at. Please look closely at how scaling and adding the different components is handled in the projection comparison plots.
- I'm not sure how to add new .md files to Doxygen, so currently the documentation for the plotting tool is just located in a new
docs
folder. Until this is fixed, you can just look at this instead.
Fitter
- I have also added another new executable to CMake named
fitter
. The executable is created similarly to the plotter. - Most of the implementation is located in
executable/fitter.cpp
file, where argument parsing, fit preparation, and all output is handled. The actual minimization is performed by thefitter/DalitzFitter
files. -
fitter.cpp
: In the future I want to move everything but argument parsing and plotting away from this file. However, since I will have to do a major refactoring of the minimization class soon-ish anyways, I didn't want to spend more time doing this now. -
DalitzFitter
: There is a lot to digest in this class, and like the other file, some of the implementation is still a bit messy. I have inserted a lot of comments, so hopefully you can follow what's happening.- Please look very closely at specifically the
modified_maximum_likelihood
method. The implementation follows the statistic described in Morten's thesis on page 16, which you can find in my Drive link. I don't think we can catch any errors in this implementation in any other way than careful examination. - Everything else is mostly just setting up the class in preparation of running the maximum likelihood method.
- Please look very closely at specifically the
- I have added the compiler options
-Ofast
,-march=native
, and-flto
. These drastically improves the performance of the fitter. - Again I have created a .md documentation file for Doxygen. For now you can see it here. (I use the wiki since it has a nice markdown editor).
Edited by Kristian Lytje