39 using namespace ROOT::Math;
45 TFile f1(
"mathcoreLV.root",
"RECREATE");
48 TTree t1(
"t1",
"Tree with new LorentzVector");
50 std::vector<ROOT::Math::XYZTVector> tracks;
51 std::vector<ROOT::Math::XYZTVector> * pTracks = &tracks;
52 t1.Branch(
"tracks",
"std::vector<ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > >",&pTracks);
58 for (
int i = 0; i < n; ++i) {
59 int nPart = R.Poisson(5);
61 pTracks->reserve(nPart);
62 for (
int j = 0; j < nPart; ++j) {
63 double px = R.Gaus(0,10);
64 double py = R.Gaus(0,10);
65 double pt = sqrt(px*px +py*py);
66 double eta = R.Uniform(-3,3);
67 double phi = R.Uniform(0.0 , 2*TMath::Pi() );
68 RhoEtaPhiVector vcyl( pt, eta, phi);
70 double E = sqrt( vcyl.R()*vcyl.R() + M*M);
71 XYZTVector q( vcyl.X(), vcyl.Y(), vcyl.Z(), E);
73 pTracks->push_back(q);
75 sum += q.x()+q.y()+q.z()+q.t();
82 std::cout <<
" Time for new Vector " << timer.RealTime() <<
" " << timer.CpuTime() << std::endl;
92 TH1D * h1 =
new TH1D(
"h1",
"total event energy ",100,0,1000.);
93 TH1D * h2 =
new TH1D(
"h2",
"Number of track per event",21,-0.5,20.5);
94 TH1D * h3 =
new TH1D(
"h3",
"Track Energy",100,0,200);
95 TH1D * h4 =
new TH1D(
"h4",
"Track Pt",100,0,100);
96 TH1D * h5 =
new TH1D(
"h5",
"Track Eta",100,-5,5);
97 TH1D * h6 =
new TH1D(
"h6",
"Track Cos(theta)",100,-1,1);
99 TFile f1(
"mathcoreLV.root");
102 TTree *t1 = (TTree*)f1.Get(
"t1");
104 std::vector<ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > > * pTracks = 0;
105 t1->SetBranchAddress(
"tracks",&pTracks);
108 int n = (int) t1->GetEntries();
109 std::cout <<
" Tree Entries " << n << std::endl;
111 for (
int i = 0; i < n; ++i) {
113 int ntrk = pTracks->size();
116 for (
int j = 0; j < ntrk; ++j) {
117 XYZTVector v = (*pTracks)[j];
122 h6->Fill(cos(v.Theta()));
123 sum += v.x() + v.y() + v.z() + v.t();
130 std::cout <<
" Time for new Vector " << timer.RealTime() <<
" " << timer.CpuTime() << std::endl;
132 TCanvas *c1 =
new TCanvas(
"c1",
"demo of Trees",10,10,600,800);
153 int mathcoreVectorCollection() {
156 double s1 = write(nEvents);
159 if (fabs(s1-s2) > s1*1.E-15 ) {
160 std::cout <<
"ERROR: Found difference in Vector when reading ( " << s1 <<
" != " << s2 <<
" diff = " << fabs(s1-s2) <<
" ) " << std::endl;
167 return mathcoreVectorCollection();