Revision 090ccec988dca3bec28755dd9de8472fcbfdfb52 authored by will-cern on 28 September 2023, 12:09:24 UTC, committed by GitHub on 28 September 2023, 12:09:24 UTC
* update xRooFit to latest version * declare ROOT::Experimental::XRooFit namespace for ROOT's copy of xRooFit * fix namespace alias * address PR comments * [RF] Improvements to `xroofit` documentation structure * Add a new `xroofit` group to the RooFit documentation * Add semicolons behind the `NAMESPACE` macros. They have no effect on the C++ compilier, but macros without trailing semicolons confuse doxygen * Add the `xRooNode` and `xRooNLLVar` classes to the `xroofit` documentation group. Other xroofit classes might also go there, but I don't know which ones should really be public. So I only added these two to give and example. * Move RooBrowser documentation to xRooBrowser. Now that xRooFit is considered part as the experimental user interface, this is fine to do. Like this, doxygen can associate the actual xRooBrowser implementation with the docs. * Rename `RooFit::Detail::XRooFit` namespace to `ROOT::Experimental::XRooFit` instad of using namespace alias. Again, this is done to not confuse doxygen. To build the documentation quickly, edit the `documentation/doxygen/makeinput.sh` directory and comment out all subdirectories except for `roofit`. Call `make` in the doxygen directory. Type `y` if it should ask you to overwrite some files in the end. The xRooFit documentation will end up in the `~/rootdoc/html/group__xroofit.html` directory. * address some typos
1 parent a345367
mathcoreVectorFloatIO.C
/// \file
/// \ingroup tutorial_math
/// \notebook -nodraw
/// Macro illustrating I/O with Lorentz Vectors of floats
/// The dictionary for LorentzVector of float is not in the libMathCore, therefore
/// is generated when parsed the file with CLING.
///
/// To run this macro you must do
///
/// ~~~{.cpp}
/// root[0] .L mathcoreVectorFloatIO.C+
/// root[1] runIt();
/// ~~~
///
/// \macro_code
///
/// \author Lorenzo Moneta
#include "TRandom.h"
#include "TStopwatch.h"
#include "TSystem.h"
#include "TFile.h"
#include "TTree.h"
#include "TH1D.h"
#include "TCanvas.h"
#include <iostream>
#include "TLorentzVector.h"
#include "Math/Vector4D.h"
// Now the dictionary contains the vector's with float types
// No need to force dictionary generation
// You need to run ACLIC with old ROOT version
// and uncomment these lines below
// #ifdef __MAKECINT__
// #pragma link C++ class ROOT::Math::PxPyPzE4D<float>+;
// #pragma link C++ class ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<float> >+;
// #pragma link C++ typedef ROOT::Math::XYZTVectorF;
// #endif
using namespace ROOT::Math;
void write(int n) {
TRandom R;
TStopwatch timer;
TFile f1("mathcoreVectorIO_F.root","RECREATE");
// create tree
TTree t1("t1","Tree with new Float LorentzVector");
XYZTVectorF *v1 = new XYZTVectorF();
t1.Branch("LV branch","ROOT::Math::XYZTVectorF",&v1);
timer.Start();
for (int i = 0; i < n; ++i) {
double Px = R.Gaus(0,10);
double Py = R.Gaus(0,10);
double Pz = R.Gaus(0,10);
double E = R.Gaus(100,10);
v1->SetCoordinates(Px,Py,Pz,E);
t1.Fill();
}
f1.Write();
timer.Stop();
std::cout << " Time for new Float Vector " << timer.RealTime() << " " << timer.CpuTime() << std::endl;
t1.Print();
}
void read() {
TRandom R;
TStopwatch timer;
TFile f1("mathcoreVectorIO_F.root");
// create tree
TTree *t1 = (TTree*)f1.Get("t1");
XYZTVectorF *v1 = 0;
t1->SetBranchAddress("LV branch",&v1);
timer.Start();
int n = (int) t1->GetEntries();
std::cout << " Tree Entries " << n << std::endl;
double etot=0;
for (int i = 0; i < n; ++i) {
t1->GetEntry(i);
etot += v1->E();
}
timer.Stop();
std::cout << " Time for new Float Vector " << timer.RealTime() << " " << timer.CpuTime() << std::endl;
std::cout << " E average" << n<< " " << etot << " " << etot/double(n) << endl;
}
void runIt() {
#if defined(__CINT__) && !defined(__MAKECINT__)
gSystem->Load("libMathCore");
gSystem->Load("libPhysics");
using namespace ROOT::Math ;
cout << "This tutorial can run only using ACliC, you must run it by doing: " << endl;
cout << "\t .L tutorials/math/mathcoreVectorFloatIO.C+" << endl;
cout << "\t runIt()" << endl;
#endif
int nEvents = 100000;
write(nEvents);
read();
}
void mathcoreVectorFloatIO() {
#if defined(__CINT__) && !defined(__MAKECINT__)
gSystem->Load("libMathCore");
gSystem->Load("libPhysics");
using namespace ROOT::Math ;
cout << "This tutorial can run only using ACliC, you must run it by doing: " << endl;
cout << "\t .L tutorials/math/mathcoreVectorFloatIO.C+" << endl;
cout << "\t runIt()" << endl;
#endif
}
Computing file changes ...