HepMC3 event record library
search_example.cc
1 // -*- C++ -*-
2 //
3 // This file is part of HepMC
4 // Copyright (C) 2014-2019 The HepMC collaboration (see AUTHORS for details)
5 //
6 #include "HepMC3/GenEvent.h"
7 #include "HepMC3/Print.h"
8 #include "HepMC3/GenParticle.h"
9 #include "HepMC3/GenVertex.h"
10 #include "HepMC3/Relatives.h"
11 
12 HepMC3::GenEvent* generate_event(const size_t n,const size_t iterations)
13 {
15  HepMC3::GenVertexPtr v0=std::make_shared<HepMC3::GenVertex>();
16  e->add_vertex(v0);
17  size_t it=0;
18  for (;;)
19  {
20  if (it>iterations)
21  {
22  for (auto v: e->vertices())
23  {
24  if (v->particles_out().size()!=0) continue;
25  for (int i=0; i<n; i++) v->add_particle_out(std::make_shared<HepMC3::GenParticle>());
26  }
27  break;
28  }
29  auto vertices=e->vertices();
30  for (auto v: vertices)
31  {
32  if (v->particles_out().size()!=0) continue;
33  for (int i=0; i<n; i++) v->add_particle_out(std::make_shared<HepMC3::GenParticle>());
34  for (auto p: v->particles_out())
35  {
36  HepMC3::GenVertexPtr vx=std::make_shared<HepMC3::GenVertex>();
37  vx->add_particle_in(p);
38  e->add_vertex(vx);
39  }
40  }
41  it++;
42  }
43  return e;
44 }
45 
46 int main()
47 {
48  std::cout<<"search_example: start"<<std::endl;
49  auto start0 = std::chrono::system_clock::now();
50  for (int i=0; i<10000; i++)
51  {
52  HepMC3::GenEvent* evt=generate_event(3,4);
53  delete evt;
54  }
55  auto end0 = std::chrono::system_clock::now();
56  std::cout<<"search_example: generation of events "<<std::chrono::duration_cast<std::chrono::milliseconds>(end0 - start0).count()<<" ms"<<std::endl;
57 
58  auto start1 = std::chrono::system_clock::now();
59  size_t np1=0;
60  for (int i=0; i<10000; i++)
61  {
62  HepMC3::GenEvent* evt=generate_event(3,4);
63  for (auto p: evt->particles()) np1+=HepMC3::descendant_particles(p).size();
64  delete evt;
65  }
66  auto end1 = std::chrono::system_clock::now();
67  std::cout<<"search_example: generation of events and descendants_of_same_type() "
68  <<std::chrono::duration_cast<std::chrono::milliseconds>(end1 - start1).count()<<" ms"
69  << " total number of decandants: "<<np1<<std::endl;
70 
71  auto start2 = std::chrono::system_clock::now();
72  size_t np2=0;
73  for (int i=0; i<10000; i++)
74  {
75  HepMC3::GenEvent* evt=generate_event(3,4);
76  for (auto p: evt->particles()) np2+=(HepMC3::Relatives::DESCENDANTS(p)).size();
77  delete evt;
78  }
79  auto end2 = std::chrono::system_clock::now();
80  std::cout<<"search_example: generation of events and Relatives::DESCENDANTS() "
81  <<std::chrono::duration_cast<std::chrono::milliseconds>(end2 - start2).count()<<" ms"
82  << " total number of decandants: "<<np2<<std::endl;
83 
84  auto start3 = std::chrono::system_clock::now();
85  size_t np3=0;
86  for (int i=0; i<10000; i++)
87  {
88  HepMC3::GenEvent* evt=generate_event(3,4);
89  for (auto p: evt->particles()) np3+=HepMC3::ancestor_particles(p).size();
90  delete evt;
91  }
92  auto end3 = std::chrono::system_clock::now();
93  std::cout<<"search_example: generation of events and ancestors_of_same_type() "
94  <<std::chrono::duration_cast<std::chrono::milliseconds>(end3 - start3).count()<<" ms"
95  << " total number of ancestors: "<<np3<<std::endl;
96 
97 
98  auto start4 = std::chrono::system_clock::now();
99  size_t np4=0;
100  for (int i=0; i<10000; i++)
101  {
102  HepMC3::GenEvent* evt=generate_event(3,4);
103  for (auto p: evt->particles()) np4+=(HepMC3::Relatives::ANCESTORS(p)).size();
104  delete evt;
105  }
106  auto end4 = std::chrono::system_clock::now();
107  std::cout<<"search_example: generation of events and Relatives::ANCESTORS() "
108  <<std::chrono::duration_cast<std::chrono::milliseconds>(end4 - start4).count()<<" ms"
109  << " total number of ancestors: "<<np4<<std::endl;
110 
111  auto start1o = std::chrono::system_clock::now();
112  size_t np1o=0;
113  for (int i=0; i<10000; i++)
114  {
115  HepMC3::GenEvent* evt=generate_event(3,4);
116  for (auto p: evt->particles()) np1o+=HepMC3::descendant_vertices(p).size();
117  delete evt;
118  }
119  auto end1o = std::chrono::system_clock::now();
120  std::cout<<"search_example: generation of events and descendants_of_other_type() "
121  <<std::chrono::duration_cast<std::chrono::milliseconds>(end1o - start1o).count()<<" ms"
122  << " total number of decandants: "<<np1o<<std::endl;
123 
124 
125  auto start3o = std::chrono::system_clock::now();
126  size_t np3o=0;
127  for (int i=0; i<10000; i++)
128  {
129  HepMC3::GenEvent* evt=generate_event(3,4);
130  for (auto p: evt->particles()) np3o+=HepMC3::ancestor_vertices(p).size();
131  delete evt;
132  }
133  auto end3o = std::chrono::system_clock::now();
134  std::cout<<"search_example: generation of events and ancestors_of_other_type() "
135  <<std::chrono::duration_cast<std::chrono::milliseconds>(end3o - start3o).count()<<" ms"
136  << " total number of decandants: "<<np3o<<std::endl;
137 
138  std::cout<<"search_example: end"<<std::endl;
139  return EXIT_SUCCESS;
140 }
const std::vector< ConstGenVertexPtr > & vertices() const
Get list of vertices (const)
Definition: GenEvent.cc:43
void add_vertex(GenVertexPtr v)
Add vertex.
Definition: GenEvent.cc:97
Definition of class GenParticle.
std::vector< HepMC3::ConstGenVertexPtr > ancestor_vertices(HepMC3::ConstGenParticlePtr obj)
Return ancestor vertices.
Definition: Relatives.cc:186
Definition of class GenVertex.
Stores event-related information.
Definition: GenEvent.h:41
Defines helper classes to extract relatives of an input GenParticle or GenVertex. ...
std::vector< HepMC3::ConstGenVertexPtr > descendant_vertices(HepMC3::ConstGenParticlePtr obj)
Return descendant vertices.
Definition: Relatives.cc:172
std::vector< HepMC3::ConstGenParticlePtr > descendant_particles(HepMC3::ConstGenVertexPtr obj)
Return descendant particles.
Definition: Relatives.cc:165
int main(int argc, char **argv)
Definition of class GenEvent.
const std::vector< ConstGenParticlePtr > & particles() const
Get list of particles (const)
Definition: GenEvent.cc:39
std::vector< HepMC3::ConstGenParticlePtr > ancestor_particles(HepMC3::ConstGenVertexPtr obj)
Return ancestor particles.
Definition: Relatives.cc:179