Line data Source code
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 0 : void setDaughterRangeStart(int i) { m_daughter_start=i; }
157 :
158 : /** Set index of last daughter */
159 0 : 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 :
|