Fork me on GitHub

source: git/external/HepMC3/GenVertex.h@ 302624f

Last change on this file since 302624f was 95a917c, checked in by Pavel Demin <pavel.demin@…>, 3 years ago

add HepMC3 library

  • Property mode set to 100644
File size: 4.9 KB
Line 
1// -*- C++ -*-
2//
3// This file is part of HepMC
4// Copyright (C) 2014-2020 The HepMC collaboration (see AUTHORS for details)
5//
6/// @file GenVertex.h
7/// @brief Definition of \b class GenVertex
8//
9#ifndef HEPMC3_GENVERTEX_H
10#define HEPMC3_GENVERTEX_H
11#include <string>
12#include "HepMC3/GenParticle_fwd.h"
13#include "HepMC3/GenVertex_fwd.h"
14#include "HepMC3/Data/GenVertexData.h"
15#include "HepMC3/FourVector.h"
16
17namespace HepMC3 {
18
19/** Deprecated */
20using namespace std;
21
22class Attribute;
23class GenEvent;
24
25/// Stores vertex-related information
26class GenVertex : public std::enable_shared_from_this<GenVertex> {
27
28 friend class GenEvent;
29
30public:
31
32 /// @name Constructors
33 //@{
34
35 /// Default constructor
36 GenVertex( const FourVector& position = FourVector::ZERO_VECTOR() );
37
38 /// Constructor based on vertex data
39 GenVertex( const GenVertexData& data );
40
41 //@}
42
43public:
44
45 /// @name Accessors
46 //@{
47
48 /// Get parent event
49 GenEvent* parent_event() { return m_event; }
50
51 /// Get parent event
52 const GenEvent* parent_event() const { return m_event; }
53
54 /// Check if this vertex belongs to an event
55 bool in_event() const { return parent_event() != nullptr; }
56
57 /// Get the vertex unique identifier
58 ///
59 /// @note This is not the same as id() in HepMC v2, which is now @c status()
60 int id() const { return m_id; }
61
62 /// @brief set the vertex identifier
63 void set_id(int id);
64
65 /// Get vertex status code
66 int status() const { return m_data.status; }
67 /// Set vertex status code
68 void set_status(int stat) { m_data.status = stat; }
69
70 /// Get vertex data
71 const GenVertexData& data() const { return m_data; }
72
73 /// Add incoming particle
74 void add_particle_in ( GenParticlePtr p);
75 /// Add outgoing particle
76 void add_particle_out( GenParticlePtr p);
77 /// Remove incoming particle
78 void remove_particle_in ( GenParticlePtr p);
79 /// Remove outgoing particle
80 void remove_particle_out( GenParticlePtr p);
81
82 /// Get list of incoming particles
83 const std::vector<GenParticlePtr>& particles_in() { return m_particles_in; }
84 /// Get list of incoming particles (for const access)
85 const std::vector<ConstGenParticlePtr>& particles_in() const;
86 /// Get list of outgoing particles
87 const std::vector<GenParticlePtr>& particles_out() { return m_particles_out; }
88 /// Get list of outgoing particles (for const access)
89 const std::vector<ConstGenParticlePtr>& particles_out() const;
90
91 /// @brief Get vertex position
92 ///
93 /// Returns the position of this vertex. If a position is not set on _this_ vertex,
94 /// the production vertices of ancestors are searched to find the inherited position.
95 /// FourVector(0,0,0,0) is returned if no position information is found.
96 ///
97 const FourVector& position() const;
98 /// @brief Check if position of this vertex is set
99 bool has_set_position() const { return !(m_data.position.is_zero()); }
100
101 /// Set vertex position
102 void set_position(const FourVector& new_pos); //!<
103
104 /// @brief Add event attribute to this vertex
105 ///
106 /// This will overwrite existing attribute if an attribute with
107 /// the same name is present. The attribute will be stored in the
108 /// parent_event(). @return false if there is no parent_event();
109 bool add_attribute(const std::string& name, std::shared_ptr<Attribute> att);
110
111 /// @brief Get list of names of attributes assigned to this particle
112 std::vector<std::string> attribute_names() const;
113
114 /// @brief Remove attribute
115 void remove_attribute(const std::string& name);
116
117 /// @brief Get attribute of type T
118 template<class T>
119 std::shared_ptr<T> attribute(const std::string& name) const;
120
121 /// @brief Get attribute of any type as string
122 std::string attribute_as_string(const std::string& name) const;
123
124 /// @name Deprecated functionality
125 //@{
126
127
128 /// Add incoming particle by raw pointer
129 /// @deprecated Use GenVertex::add_particle_in( const GenParticlePtr &p ) instead
130 void add_particle_in ( GenParticle *p ) { add_particle_in( GenParticlePtr(p) ); }
131
132 /// Add outgoing particle by raw pointer
133 /// @deprecated Use GenVertex::add_particle_out( const GenParticlePtr &p ) instead
134 void add_particle_out( GenParticle *p ) { add_particle_out( GenParticlePtr(p) ); }
135
136
137 //@}
138
139
140private:
141
142 /// @name Fields
143 //@{
144 GenEvent *m_event; //!< Parent event
145 int m_id; //!< Vertex id
146 GenVertexData m_data; //!< Vertex data
147
148 std::vector<GenParticlePtr> m_particles_in; //!< Incoming particle list
149
150 std::vector<GenParticlePtr> m_particles_out; //!< Outgoing particle list
151 //@}
152
153};
154
155
156} // namespace HepMC3
157
158#include "HepMC3/GenEvent.h"
159namespace HepMC3 {
160/// @brief Get attribute of type T
161template<class T> std::shared_ptr<T> GenVertex::attribute(const std::string& name) const {
162 return parent_event()?
163 parent_event()->attribute<T>(name, id()): std::shared_ptr<T>();
164}
165}
166
167#endif
Note: See TracBrowser for help on using the repository browser.