38 if (nparticles <= 0) {
39 throw (HepEvtEmptyEventError() <<
m_lineNr << nparticles);
42 int first = graph.
size();
44 for (
int i = 0; i < nparticles; i++) {
48 for (
int i = 0; i < nparticles; ++i) {
53 ROOT::Math::PxPyPzEVector p4 = p.get4Vector();
54 p4.SetPz(-1.0 * p4.Pz());
59 int d1 = p.getFirstDaughter();
60 int d2 = p.getLastDaughter();
61 if (d1 < 0 || d1 > nparticles || d2 < d1 || d2 > nparticles) {
62 throw (HepEvtInvalidDaughterIndicesError() <<
m_lineNr << d1 << d2 << nparticles);
66 for (
int index = d1; index <= d2; ++index) {
67 if (index > 0) p.decaysInto(graph[first + index - 1]);
157 vector<double> fields;
163 for (
const string& tok : tokens) {
166 fields.push_back(boost::lexical_cast<double>(tok));
167 }
catch (boost::bad_lexical_cast& e) {
168 throw (HepEvtConvertFieldError() <<
m_lineNr << index << tok);
172 switch (fields.size()) {
175 particle.setPDG(
static_cast<int>(fields[1]));
176 particle.setFirstDaughter(
static_cast<int>(fields[2]));
177 particle.setLastDaughter(
static_cast<int>(fields[3]));
178 particle.setMomentum(ROOT::Math::XYZVector(fields[4], fields[5], fields[6]));
179 particle.setMass(fields[7]);
183 particle.setPDG(
static_cast<int>(fields[5]));
184 particle.setFirstDaughter(0);
185 particle.setLastDaughter(0);
186 particle.setMomentum(ROOT::Math::XYZVector(fields[0], fields[1], fields[2]));
187 particle.setMass(fields[4]);
188 particle.setEnergy(fields[3]);
193 particle.setPDG(
static_cast<int>(fields[8]));
194 particle.setFirstDaughter(0);
195 particle.setLastDaughter(0);
196 particle.setProductionVertex(ROOT::Math::XYZVector(fields[0], fields[1], fields[2])*
Unit::mm);
197 particle.setMomentum(ROOT::Math::XYZVector(fields[3], fields[4], fields[5]));
198 particle.setMass(fields[6]);
199 particle.setEnergy(fields[7]);
204 particle.setPDG(
static_cast<int>(fields[1]));
205 particle.setFirstDaughter(
static_cast<int>(fields[4]));
206 particle.setLastDaughter(
static_cast<int>(fields[5]));
207 particle.setMomentum(ROOT::Math::XYZVector(fields[6], fields[7], fields[8]));
209 particle.setMass(fields[10]);
210 particle.setProductionVertex(ROOT::Math::XYZVector(fields[11], fields[12], fields[13])*
Unit::mm);
212 particle.setValidVertex(
true);
215 const double&
E = particle.getEnergy();
216 double dE = fabs(fields[9] -
E) /
E;
218 B2WARNING(boost::format(
"line %d: Energy of particle does not match with expected energy: %.6e != %.6e")
220 B2WARNING(boost::format(
"delta E = %.2f%% -> ignoring given value") % (dE * 100));
225 throw (HepEvtParticleFormatError() <<
m_lineNr << fields.size());
Class to represent Particle data in graph.
Class to build, validate and sort a particle decay chain.
size_t size() const
Return the number of particles in the graph.
@ c_PrimaryParticle
bit 0: Particle is primary particle.
@ c_StableInGenerator
bit 1: Particle is stable, i.e., not decaying in the generator.