]>
Commit | Line | Data |
---|---|---|
0ca57c2f | 1 | #ifndef _PhotosHEPEVTParticle_h_included_ |
2 | #define _PhotosHEPEVTParticle_h_included_ | |
3 | ||
4 | /** | |
5 | * @class PhotosHEPEVTParticle | |
6 | * | |
7 | * @brief Single particle of HEPEVT event record | |
8 | * | |
9 | * This class implements the virtual methods of | |
10 | * PhotosParticle. In this way it provides an | |
11 | * interface between the generic PhotosParticle class | |
12 | * and information stored in HEPEVT event record. | |
13 | * | |
14 | * @author Tomasz Przedzinski | |
15 | * @date 24 November 2011 | |
16 | */ | |
17 | ||
18 | #include <iostream> | |
19 | #include <vector> | |
20 | #include <cmath> | |
21 | #include <cstdio> | |
22 | ||
23 | #include "Photos.h" | |
24 | #include "PhotosParticle.h" | |
25 | #include "PhotosHEPEVTEvent.h" | |
26 | ||
27 | namespace Photospp | |
28 | { | |
29 | ||
30 | class PhotosHEPEVTEvent; | |
31 | ||
32 | class PhotosHEPEVTParticle: public PhotosParticle { | |
33 | ||
34 | public: | |
35 | /** Default destructor */ | |
36 | ~PhotosHEPEVTParticle(); | |
37 | ||
38 | /** Default constructor */ | |
39 | PhotosHEPEVTParticle(int pdgid, int status, double px, double py, double pz, double e, double m, int ms, int me, int ds, int de); | |
40 | ||
41 | /** Add a new daughter to this particle */ | |
42 | void addDaughter(PhotosParticle* daughter); | |
43 | ||
44 | /** Set the mothers of this particle via a vector of PhotosParticle*/ | |
45 | void setMothers(std::vector<PhotosParticle*> mothers); | |
46 | ||
47 | /** Set the daughters of this particle via a vector of PhotosParticle*/ | |
48 | void setDaughters(std::vector<PhotosParticle*> daughters); | |
49 | ||
50 | /** Returns the mothers of this particle via a vector of PhotosParticle */ | |
51 | std::vector<PhotosParticle*> getMothers(); | |
52 | ||
53 | /** Returns the daughters of this particle via a vector of PhotosParticle */ | |
54 | std::vector<PhotosParticle*> getDaughters(); | |
55 | ||
56 | /** Returns all particles in the decay tree of this particle | |
57 | via a vector of PhotosParticle */ | |
58 | std::vector<PhotosParticle*> getAllDecayProducts(); | |
59 | ||
60 | /** Check that the 4 momentum in conserved in the decay of this particle */ | |
61 | bool checkMomentumConservation(); | |
62 | ||
63 | /** Creates a new particle of type PhotosHEPEVTParticle, with the given | |
64 | properties. The new particle bares no relations to this | |
65 | particle, but `this particle' provides only a way of creating an instance of | |
66 | this derived class. eg. createNewParticle() is used inside | |
67 | filhep_() so that a PhotosHEPEVTParticle can be created without | |
68 | the method having explicit knowledge of the PhotosHEPEVTParticle | |
69 | class */ | |
70 | PhotosHEPEVTParticle * createNewParticle(int pdg_id, int status, double mass, | |
71 | double px, double py, | |
72 | double pz, double e); | |
73 | ||
74 | /** Creating history entries not implemented in HEPEVT */ | |
75 | void createHistoryEntry(); | |
76 | ||
77 | /** Create a self-decay vertex for this particle | |
78 | with 'out' being the outgoing particle in new vertex */ | |
79 | void createSelfDecayVertex(PhotosParticle *out); | |
80 | ||
81 | /** Check if particle 'p' is daughter of this particle */ | |
82 | bool isDaughterOf(PhotosHEPEVTParticle *p); | |
83 | ||
84 | /** Check if particle 'p' is mother of this particle */ | |
85 | bool isMotherOf (PhotosHEPEVTParticle *p); | |
86 | ||
87 | /** Print information on this particle into standard output */ | |
88 | void print(); | |
89 | ||
90 | /** Set the PDG ID code of this particle */ | |
91 | void setPdgID(int pdg_id); | |
92 | ||
93 | /** Set the status of this particle */ | |
94 | void setStatus(int statu); | |
95 | ||
96 | /** Set the mass of this particle */ | |
97 | void setMass(double mass); | |
98 | ||
99 | /** Get the PDG ID code of this particle */ | |
100 | int getPdgID(); | |
101 | ||
102 | /** Get the status of this particle */ | |
103 | int getStatus(); | |
104 | ||
105 | /** Get the mass stored (i.e. not calculated from four vector) at generation step */ | |
106 | double getMass(); | |
107 | ||
108 | /** Returns the px component of the four vector*/ | |
109 | double getPx(); | |
110 | ||
111 | /** Returns the py component of the four vector */ | |
112 | double getPy(); | |
113 | ||
114 | /** Returns the pz component of the four vector */ | |
115 | double getPz(); | |
116 | ||
117 | /** Returns the energy component of the four vector */ | |
118 | double getE(); | |
119 | ||
120 | /** Set the px component of the four vector */ | |
121 | void setPx( double px ); | |
122 | ||
123 | /** Set the px component of the four vector */ | |
124 | void setPy( double py ); | |
125 | ||
126 | /** Set the pz component of the four vector */ | |
127 | void setPz( double pz ); | |
128 | ||
129 | /** Set the energy component of the four vector */ | |
130 | void setE( double e ); | |
131 | ||
132 | /** Get the barcode (position in list) of this particle */ | |
133 | int getBarcode(); | |
134 | ||
135 | /** Set barcode (position in list) of this particle */ | |
136 | void setBarcode(int barcode); | |
137 | ||
138 | /** Set event of this particle */ | |
139 | void setEvent(PhotosHEPEVTEvent *event); | |
140 | ||
141 | /** Get index of first mother */ | |
142 | int getFirstMotherIndex(); | |
143 | ||
144 | /** Get index of second mother */ | |
145 | int getSecondMotherIndex(); | |
146 | ||
147 | /** Get index of first daughter */ | |
148 | int getDaughterRangeStart(); | |
149 | ||
150 | /** Get index of last daughter */ | |
151 | int getDaughterRangeEnd(); | |
152 | ||
153 | private: | |
154 | ||
155 | /** Set index of first daughter */ | |
156 | void setDaughterRangeStart(int i) { m_daughter_start=i; } | |
157 | ||
158 | /** Set index of last daughter */ | |
159 | void setDaughterRangeEnd(int i) { m_daughter_end =i; } | |
160 | ||
161 | /** Event from which this particle is taken */ | |
162 | PhotosHEPEVTEvent *m_event; | |
163 | ||
164 | /** Position in the event record */ | |
165 | int m_barcode; | |
166 | ||
167 | /** Indexes of mothers (-1 if do not have mothers) */ | |
168 | int m_first_mother, m_second_mother; | |
169 | ||
170 | /** Range of indexes of daughters (-1 if do not have daughters) */ | |
171 | int m_daughter_start, m_daughter_end; | |
172 | ||
173 | /** PDG ID */ | |
174 | int m_pdgid; | |
175 | ||
176 | /** Status (stable, decayed) */ | |
177 | int m_status; | |
178 | ||
179 | /** Momentum */ | |
180 | double m_px, m_py, m_pz, m_e; | |
181 | ||
182 | /** Mass saved at generation step */ | |
183 | double m_generated_mass; | |
184 | ||
185 | /** List of created particles - if they are not in the event, they | |
186 | will be deleted when no longer needed */ | |
187 | vector<PhotosHEPEVTParticle*> cache; | |
188 | }; | |
189 | ||
190 | } // namespace Photospp | |
191 | #endif | |
192 |