9 #include "HepPDT/ParticleID.hh"
13 #define update(a, b) \
116 for (VertexHistory::GenVertexTrail::const_iterator ivertex = genVertexTrail.begin(); ivertex != genVertexTrail.end();
120 HepMC::GenVertex *
vertex = const_cast<HepMC::GenVertex *>(*ivertex);
162 for (VertexHistory::SimVertexTrail::const_iterator ivertex = simVertexTrail.begin(); ivertex != simVertexTrail.end();
171 for (its = (*ivertex)->sourceTracks_begin(); its != (*ivertex)->sourceTracks_end(); ++its) {
172 for (itd = (*ivertex)->daughterTracks_begin(); itd != (*ivertex)->daughterTracks_end(); ++itd)
181 if (its != (*ivertex)->sourceTracks_end())
188 unsigned int processG4 = 0;
190 if ((*ivertex)->nG4Vertices() > 0) {
191 processG4 = (*(*ivertex)->g4Vertices_begin()).processType();
219 iparticle != (*ivertex)->daughterTracks_end();
221 if ((*iparticle)->numberOfTrackerLayers()) {
258 typedef std::multimap<double, HepMC::ThreeVector>
Clusters;
259 typedef std::pair<double, HepMC::ThreeVector> ClusterPair;
270 double const mm = 0.1;
273 for (VertexHistory::GenVertexTrail::const_iterator ivertex = genVertexTrail.begin(); ivertex != genVertexTrail.end();
278 HepMC::ThreeVector
p = (*ivertex)->point3d();
280 sqrt(
pow(
p.x() * mm - genpv.
x, 2) +
pow(
p.y() * mm - genpv.
y, 2) +
pow(
p.z() * mm - genpv.
z, 2));
284 clusters.insert(ClusterPair(
distance, HepMC::ThreeVector(
p.x() * mm,
p.y() * mm,
p.z() * mm)));
293 clusters.insert(ClusterPair(
distance, HepMC::ThreeVector(
p.x() * mm,
p.y() * mm,
p.z() * mm)));
297 bool cluster =
false;
302 double difference =
sqrt(
pow(
p.x() * mm - icluster->second.x(), 2) +
pow(
p.y() * mm - icluster->second.y(), 2) +
303 pow(
p.z() * mm - icluster->second.z(), 2));
312 clusters.insert(ClusterPair(
distance, HepMC::ThreeVector(
p.x() * mm,
p.y() * mm,
p.z() * mm)));
319 for (VertexHistory::SimVertexTrail::const_reverse_iterator ivertex = simVertexTrail.rbegin();
320 ivertex != simVertexTrail.rend();
342 bool cluster =
false;
346 double difference =
sqrt(
pow(
p.x() - icluster->second.x(), 2) +
pow(
p.y() - icluster->second.y(), 2) +
347 pow(
p.z() - icluster->second.z(), 2));
368 return !
p->end_vertex() &&
p->status() == 1;
374 return part->charge() != 0;
390 for (HepMC::GenEvent::vertex_const_iterator ivertex =
event->vertices_begin(); ivertex !=
event->vertices_end();
392 bool hasParentVertex =
false;
396 for (HepMC::GenVertex::particle_iterator iparent = (*ivertex)->particles_begin(
HepMC::parents);
399 if ((*iparent)->production_vertex()) {
400 hasParentVertex =
true;
409 HepMC::FourVector
pos = (*ivertex)->position();
411 double const mm = 0.1;
415 std::vector<GeneratedPrimaryVertex>::iterator ientry =
genpvs_.begin();
418 for (; ientry !=
genpvs_.end(); ++ientry) {
429 ientry->genVertex.push_back((*ivertex)->barcode());
432 for (HepMC::GenVertex::particle_iterator idecendants = (*ivertex)->particles_begin(HepMC::descendants);
433 idecendants != (*ivertex)->particles_end(HepMC::descendants);
436 if (
find(ientry->finalstateParticles.begin(), ientry->finalstateParticles.end(), (*idecendants)->barcode()) ==
437 ientry->finalstateParticles.end()) {
438 ientry->finalstateParticles.push_back((*idecendants)->barcode());
439 HepMC::FourVector
m = (*idecendants)->momentum();
441 ientry->ptot.setPx(ientry->ptot.px() +
m.px());
442 ientry->ptot.setPy(ientry->ptot.py() +
m.py());
443 ientry->ptot.setPz(ientry->ptot.pz() +
m.pz());
444 ientry->ptot.setE(ientry->ptot.e() +
m.e());
445 ientry->ptsq +=
m.perp() *
m.perp();