46 B2ERROR(
"The transformation matrix is NULL !");
51 typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
52 boost::char_separator<char> sep(
",; \t");
54 double particlePosTouschek[3] = {0.0, 0.0, 0.0};
55 double particlePosGeant4[3] = {0.0, 0.0, 0.0};
56 double particleMomTouschek[3] = {0.0, 0.0, 0.0};
57 double particleMomGeant4[3] = {0.0, 0.0, 0.0};
63 boost::trim(currLine);
64 if (currLine ==
"")
continue;
66 tokenizer tokens(currLine, sep);
69 for (
const string& tok : tokens) {
72 B2WARNING(
"This Touschek file has more than 7 fields ! Only the first 7 fields were read.");
75 fields[index] = boost::lexical_cast<double>(tok);
77 }
catch (boost::bad_lexical_cast&) {
78 throw (TouschekConvertFieldError() <<
m_lineNum << index << tok);
83 B2ERROR(
"TouschekReaderTURTLE: incomplete line at " <<
m_lineNum);
89 particlePosTouschek[0] = fields[2] *
Unit::m;
90 particlePosTouschek[1] = -fields[3] *
Unit::m;
91 if (
m_pdg == -11) particlePosTouschek[2] = 400.0;
92 else if (
m_pdg == 11) particlePosTouschek[2] = -400.0;
93 else { B2WARNING(
"m_pdg is not 11/-11");
break;}
95 m_transMatrix->LocalToMaster(particlePosTouschek, particlePosGeant4);
99 particleMomTouschek[0] = fields[4];
100 particleMomTouschek[1] = -fields[5];
101 if (
m_pdg == -11) particleMomTouschek[2] = -fields[6];
102 else if (
m_pdg == 11) particleMomTouschek[2] = fields[6];
103 else { B2WARNING(
"m_pdg is not 11/-11");
break;}
105 m_transMatrix->LocalToMasterVect(particleMomTouschek, particleMomGeant4);
107 double totalMom2 = particleMomGeant4[0] * particleMomGeant4[0];
108 totalMom2 += particleMomGeant4[1] * particleMomGeant4[1];
109 totalMom2 += particleMomGeant4[2] * particleMomGeant4[2];
114 particle.setPDG(
m_pdg);
115 particle.setMassFromPDG();
116 particle.setMomentum(ROOT::Math::XYZVector(particleMomGeant4[0], particleMomGeant4[1], particleMomGeant4[2]));
117 particle.setProductionVertex(ROOT::Math::XYZVector(particlePosGeant4[0], particlePosGeant4[1], particlePosGeant4[2]));
118 particle.setEnergy(
sqrt(totalMom2 + particle.getMass()*particle.getMass()));
119 particle.setProductionTime(0.0);
120 particle.setValidVertex(
true);
123 }
while ((!
m_input.eof()) && ((number > -1) && (numParticles < number)));
Class to represent Particle data in graph.
Class to build, validate and sort a particle decay chain.
@ c_PrimaryParticle
bit 0: Particle is primary particle.