#include <FBaseSimEvent.h>
Public Member Functions | |
void | addChargedTrack (int id) |
Add an id in the vector of charged tracks id's. | |
void | addParticles (const reco::GenParticleCollection &myGenParticles) |
void | addParticles (const HepMC::GenEvent &hev) |
Add the particles and their vertices to the list. | |
int | addSimTrack (const RawParticle *p, int iv, int ig=-1, const HepMC::GenVertex *ev=0) |
Add a new track to the Event and to the various lists. | |
int | addSimVertex (const XYZTLorentzVector &decayVertex, int im=-1, FSimVertexType::VertexType type=FSimVertexType::ANY) |
Add a new vertex to the Event and to the various lists. | |
int | chargedTrack (int id) const |
return "reconstructed" charged tracks index. | |
void | clear () |
clear the FBaseSimEvent content before the next event | |
const HepMC::GenParticle * | embdGenpart (int i) const |
return MC track with a given id | |
const SimTrack & | embdTrack (int i) const |
return embedded track with given id | |
const SimVertex & | embdVertex (int i) const |
return embedded vertex with given id | |
const FSimVertexType & | embdVertexType (int i) const |
return embedded vertex type with given id | |
FBaseSimEvent (const edm::ParameterSet &vtx, const edm::ParameterSet &kine, const RandomEngine *engine) | |
FBaseSimEvent (const edm::ParameterSet &kine) | |
Default constructor. | |
void | fill (const std::vector< SimTrack > &, const std::vector< SimVertex > &) |
fill the FBaseSimEvent from SimTrack's and SimVert'ices | |
void | fill (const HepMC::GenEvent &hev) |
fill the FBaseSimEvent from the current HepMC::GenEvent | |
void | fill (const reco::GenParticleCollection &hev) |
fill the FBaseSimEvent from the current reco::GenParticleCollection | |
const KineParticleFilter & | filter () const |
void | initializePdt (const HepPDT::ParticleDataTable *aPdt) |
Initialize the particle data table. | |
unsigned int | nChargedTracks () const |
Number of "reconstructed" charged tracks. | |
unsigned int | nGenParts () const |
Number of generator particles. | |
unsigned int | nTracks () const |
Number of tracks. | |
unsigned int | nVertices () const |
Number of vertices. | |
void | print () const |
print the FBaseSimEvent in an intelligible way | |
void | printMCTruth (const HepMC::GenEvent &hev) |
print the original MCTruth event | |
void | setBeamSpot (const math::XYZPoint &aBeamSpot) |
Set the beam spot position. | |
PrimaryVertexGenerator * | thePrimaryVertexGenerator () const |
const HepPDT::ParticleDataTable * | theTable () const |
Get the pointer to the particle data table. | |
FSimTrack & | track (int id) const |
Return track with given Id. | |
FSimVertex & | vertex (int id) const |
Return vertex with given Id. | |
FSimVertexType & | vertexType (int id) const |
Return vertex with given Id. | |
~FBaseSimEvent () | |
usual virtual destructor | |
Protected Member Functions | |
std::vector < HepMC::GenParticle * > * | genparts () const |
The pointer to the vector of GenParticle's. | |
std::vector< FSimTrack > * | tracks () const |
The pointer to the vector of FSimTrack's. | |
std::vector< FSimVertex > * | vertices () const |
The pointer to the vector of FSimVertex's. | |
Private Attributes | |
unsigned int | initialSize |
double | lateVertexPosition |
KineParticleFilter * | myFilter |
The particle filter. | |
unsigned int | nChargedParticleTracks |
unsigned int | nGenParticles |
unsigned int | nSimTracks |
unsigned int | nSimVertices |
const ParticleDataTable * | pdt |
const RandomEngine * | random |
double | sigmaVerteX |
double | sigmaVerteY |
double | sigmaVerteZ |
math::XYZPoint | theBeamSpot |
unsigned int | theChargedSize |
std::vector< unsigned > * | theChargedTracks |
FSimVertexTypeCollection * | theFSimVerticesType |
std::vector < HepMC::GenParticle * > * | theGenParticles |
unsigned int | theGenSize |
std::vector< FSimTrack > * | theSimTracks |
std::vector< FSimVertex > * | theSimVertices |
unsigned int | theTrackSize |
PrimaryVertexGenerator * | theVertexGenerator |
unsigned int | theVertexSize |
Definition at line 45 of file FBaseSimEvent.h.
FBaseSimEvent::FBaseSimEvent | ( | const edm::ParameterSet & | kine | ) |
Default constructor.
Definition at line 34 of file FBaseSimEvent.cc.
References initialSize, theBeamSpot, theChargedSize, theChargedTracks, theFSimVerticesType, theGenParticles, theGenSize, theSimTracks, theSimVertices, theTrackSize, theVertexGenerator, and theVertexSize.
: nSimTracks(0), nSimVertices(0), nGenParticles(0), nChargedParticleTracks(0), initialSize(5000), random(0) { theVertexGenerator = new NoPrimaryVertexGenerator(); theBeamSpot = math::XYZPoint(0.0,0.0,0.0); // Initialize the vectors of particles and vertices theGenParticles = new std::vector<HepMC::GenParticle*>(); theSimTracks = new std::vector<FSimTrack>; theSimVertices = new std::vector<FSimVertex>; theChargedTracks = new std::vector<unsigned>(); theFSimVerticesType = new FSimVertexTypeCollection(); // Reserve some size to avoid mutiple copies /* */ theSimTracks->resize(initialSize); theSimVertices->resize(initialSize); theGenParticles->resize(initialSize); theChargedTracks->resize(initialSize); theFSimVerticesType->resize(initialSize); theTrackSize = initialSize; theVertexSize = initialSize; theGenSize = initialSize; theChargedSize = initialSize; /* */ // Initialize the Particle filter myFilter = new KineParticleFilter(kine); }
FBaseSimEvent::FBaseSimEvent | ( | const edm::ParameterSet & | vtx, |
const edm::ParameterSet & | kine, | ||
const RandomEngine * | engine | ||
) |
Definition at line 72 of file FBaseSimEvent.cc.
References edm::ParameterSet::getParameter(), initialSize, lateVertexPosition, random, theBeamSpot, theChargedSize, theChargedTracks, theFSimVerticesType, theGenParticles, theGenSize, theSimTracks, theSimVertices, theTrackSize, theVertexGenerator, and theVertexSize.
: nSimTracks(0), nSimVertices(0), nGenParticles(0), nChargedParticleTracks(0), initialSize(5000), theVertexGenerator(0), random(engine) { // Initialize the vertex generator std::string vtxType = vtx.getParameter<std::string>("type"); if ( vtxType == "Gaussian" ) theVertexGenerator = new GaussianPrimaryVertexGenerator(vtx,random); else if ( vtxType == "Flat" ) theVertexGenerator = new FlatPrimaryVertexGenerator(vtx,random); else if ( vtxType == "BetaFunc" ) theVertexGenerator = new BetaFuncPrimaryVertexGenerator(vtx,random); else theVertexGenerator = new NoPrimaryVertexGenerator(); // Initialize the beam spot, if not read from the DataBase theBeamSpot = math::XYZPoint(0.0,0.0,0.0); // Initialize the distance from (0,0,0) after which *generated* particles are // no longer considered - because the mother could have interacted before. // unit : cm x cm lateVertexPosition = 2.5*2.5; // Initialize the vectors of particles and vertices theGenParticles = new std::vector<HepMC::GenParticle*>(); theSimTracks = new std::vector<FSimTrack>; theSimVertices = new std::vector<FSimVertex>; theChargedTracks = new std::vector<unsigned>(); theFSimVerticesType = new FSimVertexTypeCollection(); // Reserve some size to avoid mutiple copies /* */ theSimTracks->resize(initialSize); theSimVertices->resize(initialSize); theGenParticles->resize(initialSize); theChargedTracks->resize(initialSize); theFSimVerticesType->resize(initialSize); theTrackSize = initialSize; theVertexSize = initialSize; theGenSize = initialSize; theChargedSize = initialSize; /* */ // Initialize the Particle filter myFilter = new KineParticleFilter(kine); }
FBaseSimEvent::~FBaseSimEvent | ( | ) |
usual virtual destructor
Definition at line 128 of file FBaseSimEvent.cc.
References myFilter, theChargedTracks, theFSimVerticesType, theGenParticles, theSimTracks, and theSimVertices.
{ // Clear the vectors theGenParticles->clear(); theSimTracks->clear(); theSimVertices->clear(); theChargedTracks->clear(); theFSimVerticesType->clear(); // Delete delete theGenParticles; delete theSimTracks; delete theSimVertices; delete theChargedTracks; delete theFSimVerticesType; delete myFilter; }
void FBaseSimEvent::addChargedTrack | ( | int | id | ) |
Add an id in the vector of charged tracks id's.
Definition at line 961 of file FBaseSimEvent.cc.
References nChargedParticleTracks, theChargedSize, and theChargedTracks.
{ (*theChargedTracks)[nChargedParticleTracks++] = id; if ( nChargedParticleTracks/theChargedSize*theChargedSize == nChargedParticleTracks ) { theChargedSize *= 2; theChargedTracks->resize(theChargedSize); } }
void FBaseSimEvent::addParticles | ( | const HepMC::GenEvent & | hev | ) |
Add the particles and their vertices to the list.
Some internal array to work with.
Definition at line 415 of file FBaseSimEvent.cc.
References abs, addSimTrack(), addSimVertex(), PrimaryVertexGenerator::beamSpot(), FSimVertexType::DECAY_VERTEX, PrimaryVertexGenerator::generate(), configurableAnalysis::GenParticle, lateVertexPosition, nGenParticles, nGenParts(), evf::evtn::offset(), L1TEmulatorMonitor_cff::p, position, FSimVertexType::PRIMARY_VERTEX, theBeamSpot, theGenParticles, theGenSize, theVertexGenerator, and vertex().
Referenced by fill().
{ int genEventSize = myGenEvent.particles_size(); std::vector<int> myGenVertices(genEventSize, static_cast<int>(0)); // If no particles, no work to be done ! if ( myGenEvent.particles_empty() ) return; // Are there particles in the FSimEvent already ? int offset = nGenParts(); // Primary vertex (already smeared by the SmearedVtx module) HepMC::GenVertex* primaryVertex = *(myGenEvent.vertices_begin()); // Beginning of workaround a bug in pythia particle gun unsigned primaryMother = primaryVertex->particles_in_size(); if ( primaryMother ) { unsigned partId = (*(primaryVertex->particles_in_const_begin()))->pdg_id(); if ( abs(partId) == 2212 ) primaryMother = 0; } // End of workaround a bug in pythia particle gun XYZTLorentzVector primaryVertexPosition(primaryVertex->position().x()/10., primaryVertex->position().y()/10., primaryVertex->position().z()/10., primaryVertex->position().t()/10.); // Actually this is the true end of the workaround primaryVertexPosition *= (1-primaryMother); // THE END. // Smear the main vertex if needed // Now takes the origin from the database XYZTLorentzVector smearedVertex; if ( primaryVertexPosition.Vect().Mag2() < 1E-16 ) { theVertexGenerator->generate(); smearedVertex = XYZTLorentzVector( theVertexGenerator->X()-theVertexGenerator->beamSpot().X()+theBeamSpot.X(), theVertexGenerator->Y()-theVertexGenerator->beamSpot().Y()+theBeamSpot.Y(), theVertexGenerator->Z()-theVertexGenerator->beamSpot().Z()+theBeamSpot.Z(), 0.); } // Set the main vertex myFilter->setMainVertex(primaryVertexPosition+smearedVertex); // This is the smeared main vertex int mainVertex = addSimVertex(myFilter->vertex(), -1, FSimVertexType::PRIMARY_VERTEX); HepMC::GenEvent::particle_const_iterator piter; HepMC::GenEvent::particle_const_iterator pbegin = myGenEvent.particles_begin(); HepMC::GenEvent::particle_const_iterator pend = myGenEvent.particles_end(); int initialBarcode = 0; if ( pbegin != pend ) initialBarcode = (*pbegin)->barcode(); // Loop on the particles of the generated event for ( piter = pbegin; piter != pend; ++piter ) { // This is the generated particle pointer - for the signal event only HepMC::GenParticle* p = *piter; if ( !offset ) { (*theGenParticles)[nGenParticles++] = p; if ( nGenParticles/theGenSize*theGenSize == nGenParticles ) { theGenSize *= 2; theGenParticles->resize(theGenSize); } } // Reject particles with late origin vertex (i.e., coming from late decays) // This should not happen, but one never knows what users may be up to! // For example exotic particles might decay late - keep the decay products in the case. XYZTLorentzVector productionVertexPosition(0.,0.,0.,0.); HepMC::GenVertex* productionVertex = p->production_vertex(); if ( productionVertex ) { unsigned productionMother = productionVertex->particles_in_size(); if ( productionMother ) { unsigned motherId = (*(productionVertex->particles_in_const_begin()))->pdg_id(); if ( abs(motherId) < 1000000 ) productionVertexPosition = XYZTLorentzVector(productionVertex->position().x()/10., productionVertex->position().y()/10., productionVertex->position().z()/10., productionVertex->position().t()/10.) + smearedVertex; } } if ( !myFilter->accept(productionVertexPosition) ) continue; int abspdgId = abs(p->pdg_id()); HepMC::GenVertex* endVertex = p->end_vertex(); // Keep only: // 1) Stable particles (watch out! New status code = 1001!) bool testStable = p->status()%1000==1; // Declare stable standard particles that decay after a macroscopic path length // (except if exotic) if ( p->status() == 2 && abspdgId < 1000000) { if ( endVertex ) { XYZTLorentzVector decayPosition = XYZTLorentzVector(endVertex->position().x()/10., endVertex->position().y()/10., endVertex->position().z()/10., endVertex->position().t()/10.) + smearedVertex; // If the particle flew enough to be beyond the beam pipe enveloppe, just declare it stable if ( decayPosition.Perp2() > lateVertexPosition ) testStable = true; } } // 2) or particles with stable daughters (watch out! New status code = 1001!) bool testDaugh = false; if ( !testStable && p->status() == 2 && endVertex && endVertex->particles_out_size() ) { HepMC::GenVertex::particles_out_const_iterator firstDaughterIt = endVertex->particles_out_const_begin(); HepMC::GenVertex::particles_out_const_iterator lastDaughterIt = endVertex->particles_out_const_end(); for ( ; firstDaughterIt != lastDaughterIt ; ++firstDaughterIt ) { HepMC::GenParticle* daugh = *firstDaughterIt; if ( daugh->status()%1000==1 ) { // Check that it is not a "prompt electron or muon brem": if (abspdgId == 11 || abspdgId == 13) { if ( endVertex ) { XYZTLorentzVector endVertexPosition = XYZTLorentzVector(endVertex->position().x()/10., endVertex->position().y()/10., endVertex->position().z()/10., endVertex->position().t()/10.); // If the particle flew enough to be beyond the beam pipe enveloppe, just declare it stable if ( endVertexPosition.Perp2() < lateVertexPosition ) { break; } } } testDaugh=true; break; } } } // 3) or particles that fly more than one micron. double dist = 0.; if ( !testStable && !testDaugh && p->production_vertex() ) { XYZTLorentzVector productionVertexPosition(p->production_vertex()->position().x()/10., p->production_vertex()->position().y()/10., p->production_vertex()->position().z()/10., p->production_vertex()->position().t()/10.); dist = (primaryVertexPosition-productionVertexPosition).Vect().Mag2(); } bool testDecay = ( dist > 1e-8 ) ? true : false; // Save the corresponding particle and vertices if ( testStable || testDaugh || testDecay ) { /* const HepMC::GenParticle* mother = p->production_vertex() ? *(p->production_vertex()->particles_in_const_begin()) : 0; */ int motherBarcode = p->production_vertex() && p->production_vertex()->particles_in_const_begin() != p->production_vertex()->particles_in_const_end() ? (*(p->production_vertex()->particles_in_const_begin()))->barcode() : 0; int originVertex = motherBarcode && myGenVertices[motherBarcode-initialBarcode] ? myGenVertices[motherBarcode-initialBarcode] : mainVertex; XYZTLorentzVector momentum(p->momentum().px(), p->momentum().py(), p->momentum().pz(), p->momentum().e()); RawParticle part(momentum, vertex(originVertex).position()); part.setID(p->pdg_id()); // Add the particle to the event and to the various lists int theTrack = testStable && p->end_vertex() ? // The particle is scheduled to decay addSimTrack(&part,originVertex, nGenParts()-offset,p->end_vertex()) : // The particle is not scheduled to decay addSimTrack(&part,originVertex, nGenParts()-offset); if ( // This one deals with particles with no end vertex !p->end_vertex() || // This one deals with particles that have a pre-defined // decay proper time, but have not decayed yet ( testStable && p->end_vertex() && !p->end_vertex()->particles_out_size() ) // In both case, just don't add a end vertex in the FSimEvent ) continue; // Add the vertex to the event and to the various lists XYZTLorentzVector decayVertex = XYZTLorentzVector(p->end_vertex()->position().x()/10., p->end_vertex()->position().y()/10., p->end_vertex()->position().z()/10., p->end_vertex()->position().t()/10.) + smearedVertex; // vertex(mainVertex).position(); int theVertex = addSimVertex(decayVertex,theTrack, FSimVertexType::DECAY_VERTEX); if ( theVertex != -1 ) myGenVertices[p->barcode()-initialBarcode] = theVertex; // There we are ! } } }
void FBaseSimEvent::addParticles | ( | const reco::GenParticleCollection & | myGenParticles | ) |
Some internal array to work with.
Definition at line 628 of file FBaseSimEvent.cc.
References abs, addSimTrack(), addSimVertex(), PrimaryVertexGenerator::beamSpot(), reco::CompositeRefCandidateT< D >::daughter(), FSimVertexType::DECAY_VERTEX, reco::Candidate::end(), reco::LeafCandidate::energy(), PrimaryVertexGenerator::generate(), lateVertexPosition, reco::CompositeRefCandidateT< D >::mother(), nGenParticles, nGenParts(), nParticles, nTracks(), reco::CompositeRefCandidateT< D >::numberOfDaughters(), reco::CompositeRefCandidateT< D >::numberOfMothers(), evf::evtn::offset(), L1TEmulatorMonitor_cff::p, reco::LeafCandidate::pdgId(), reco::Candidate::pdgId(), benchmark_cfg::pdgId, position, FSimVertexType::PRIMARY_VERTEX, reco::LeafCandidate::px(), reco::LeafCandidate::py(), reco::LeafCandidate::pz(), reco::Candidate::status(), reco::LeafCandidate::status(), theBeamSpot, theVertexGenerator, vertex(), reco::Candidate::vx(), reco::LeafCandidate::vx(), reco::LeafCandidate::vy(), reco::Candidate::vy(), reco::LeafCandidate::vz(), and reco::Candidate::vz().
{ // If no particles, no work to be done ! unsigned int nParticles = myGenParticles.size(); nGenParticles = nParticles; if ( !nParticles ) return; std::map<const reco::Candidate*,int> myGenVertices; // Are there particles in the FSimEvent already ? int offset = nTracks(); // Skip the incoming protons nGenParticles = 0; unsigned int ip = 0; if ( nParticles > 1 && myGenParticles[0].pdgId() == 2212 && myGenParticles[1].pdgId() == 2212 ) { ip = 2; nGenParticles = 2; } // Primary vertex (already smeared by the SmearedVtx module) XYZTLorentzVector primaryVertex (myGenParticles[ip].vx(), myGenParticles[ip].vy(), myGenParticles[ip].vz(), 0.); // Smear the main vertex if needed XYZTLorentzVector smearedVertex; if ( primaryVertex.mag() < 1E-8 ) { theVertexGenerator->generate(); smearedVertex = XYZTLorentzVector( theVertexGenerator->X()-theVertexGenerator->beamSpot().X()+theBeamSpot.X(), theVertexGenerator->Y()-theVertexGenerator->beamSpot().Y()+theBeamSpot.Y(), theVertexGenerator->Z()-theVertexGenerator->beamSpot().Z()+theBeamSpot.Z(), 0.); } // Set the main vertex myFilter->setMainVertex(primaryVertex+smearedVertex); // This is the smeared main vertex int mainVertex = addSimVertex(myFilter->vertex(), -1, FSimVertexType::PRIMARY_VERTEX); // Loop on the particles of the generated event for ( ; ip<nParticles; ++ip ) { // nGenParticles = ip; nGenParticles++; const reco::GenParticle& p = myGenParticles[ip]; // Reject particles with late origin vertex (i.e., coming from late decays) // This should not happen, but one never knows what users may be up to! // For example exotic particles might decay late - keep the decay products in the case. XYZTLorentzVector productionVertexPosition(0.,0.,0.,0.); const reco::Candidate* productionMother = p.numberOfMothers() ? p.mother(0) : 0; if ( productionMother ) { unsigned motherId = productionMother->pdgId(); if ( abs(motherId) < 1000000 ) productionVertexPosition = XYZTLorentzVector(p.vx(), p.vy(), p.vz(), 0.) + smearedVertex; } if ( !myFilter->accept(productionVertexPosition) ) continue; // Keep only: // 1) Stable particles bool testStable = p.status()%1000==1; // Declare stable standard particles that decay after a macroscopic path length // (except if exotic particle) if ( p.status() == 2 && abs(p.pdgId()) < 1000000 ) { unsigned int nDaughters = p.numberOfDaughters(); if ( nDaughters ) { const reco::Candidate* daughter = p.daughter(0); XYZTLorentzVector decayPosition = XYZTLorentzVector(daughter->vx(), daughter->vy(), daughter->vz(), 0.) + smearedVertex; // If the particle flew enough to be beyond the beam pipe enveloppe, just declare it stable if ( decayPosition.Perp2() > lateVertexPosition ) testStable = true; } } // 2) or particles with stable daughters bool testDaugh = false; unsigned int nDaughters = p.numberOfDaughters(); if ( !testStable && // p.status() == 2 && nDaughters ) { for ( unsigned iDaughter=0; iDaughter<nDaughters; ++iDaughter ) { const reco::Candidate* daughter = p.daughter(iDaughter); if ( daughter->status()%1000==1 ) { testDaugh=true; break; } } } // 3) or particles that fly more than one micron. double dist = 0.; if ( !testStable && !testDaugh ) { XYZTLorentzVector productionVertex(p.vx(),p.vy(),p.vz(),0.); dist = (primaryVertex-productionVertex).Vect().Mag2(); } bool testDecay = ( dist > 1e-8 ) ? true : false; // Save the corresponding particle and vertices if ( testStable || testDaugh || testDecay ) { const reco::Candidate* mother = p.numberOfMothers() ? p.mother(0) : 0; int originVertex = mother && myGenVertices.find(mother) != myGenVertices.end() ? myGenVertices[mother] : mainVertex; XYZTLorentzVector momentum(p.px(),p.py(),p.pz(),p.energy()); RawParticle part(momentum, vertex(originVertex).position()); part.setID(p.pdgId()); // Add the particle to the event and to the various lists int theTrack = addSimTrack(&part,originVertex, nGenParts()-offset); // It there an end vertex ? if ( !nDaughters ) continue; const reco::Candidate* daughter = p.daughter(0); // Add the vertex to the event and to the various lists XYZTLorentzVector decayVertex = XYZTLorentzVector(daughter->vx(), daughter->vy(), daughter->vz(), 0.) + smearedVertex; int theVertex = addSimVertex(decayVertex,theTrack, FSimVertexType::DECAY_VERTEX); if ( theVertex != -1 ) myGenVertices[&p] = theVertex; // There we are ! } } // There is no GenParticle's in that case... // nGenParticles=0; }
int FBaseSimEvent::addSimTrack | ( | const RawParticle * | p, |
int | iv, | ||
int | ig = -1 , |
||
const HepMC::GenVertex * | ev = 0 |
||
) |
Add a new track to the Event and to the various lists.
Definition at line 773 of file FBaseSimEvent.cc.
References FSimTrack::addDaughter(), FSimVertex::addDaughter(), SimTrack::genpartIndex(), RawParticle::momentum(), nSimTracks, dbtoconf::parent, RawParticle::PDGmass(), mathSSE::sqrt(), RawParticle::t(), theSimTracks, theTrackSize, track(), and vertex().
Referenced by addParticles(), fill(), MaterialEffects::interact(), PileUpSimulator::produce(), and TrajectoryManager::updateWithDaughters().
{ // Check that the particle is in the Famos "acceptance" // Keep all primaries of pile-up events, though if ( !myFilter->accept(p) && ig >= -1 ) return -1; // The new track index int trackId = nSimTracks++; if ( nSimTracks/theTrackSize*theTrackSize == nSimTracks ) { theTrackSize *= 2; theSimTracks->resize(theTrackSize); } // Attach the particle to the origin vertex, and to the mother vertex(iv).addDaughter(trackId); if ( !vertex(iv).noParent() ) { track(vertex(iv).parent().id()).addDaughter(trackId); if ( ig == -1 ) { int motherId = track(vertex(iv).parent().id()).genpartIndex(); if ( motherId < -1 ) ig = motherId; } } // Some transient information for FAMOS internal use (*theSimTracks)[trackId] = ev ? // A proper decay time is scheduled FSimTrack(p,iv,ig,trackId,this, ev->position().t()/10. * p->PDGmass() / std::sqrt(p->momentum().Vect().Mag2())) : // No proper decay time is scheduled FSimTrack(p,iv,ig,trackId,this); return trackId; }
int FBaseSimEvent::addSimVertex | ( | const XYZTLorentzVector & | decayVertex, |
int | im = -1 , |
||
FSimVertexType::VertexType | type = FSimVertexType::ANY |
||
) |
Add a new vertex to the Event and to the various lists.
Definition at line 813 of file FBaseSimEvent.cc.
References nSimVertices, FSimTrack::setEndVertex(), theFSimVerticesType, theSimVertices, theVertexSize, and track().
Referenced by addParticles(), fill(), MaterialEffects::interact(), PileUpSimulator::produce(), TrajectoryManager::reconstruct(), and TrajectoryManager::updateWithDaughters().
{ // Check that the vertex is in the Famos "acceptance" if ( !myFilter->accept(v) ) return -1; // The number of vertices int vertexId = nSimVertices++; if ( nSimVertices/theVertexSize*theVertexSize == nSimVertices ) { theVertexSize *= 2; theSimVertices->resize(theVertexSize); theFSimVerticesType->resize(theVertexSize); } // Attach the end vertex to the particle (if accepted) if ( im !=-1 ) track(im).setEndVertex(vertexId); // Some transient information for FAMOS internal use (*theSimVertices)[vertexId] = FSimVertex(v,im,vertexId,this); (*theFSimVerticesType)[vertexId] = FSimVertexType(type); return vertexId; }
int FBaseSimEvent::chargedTrack | ( | int | id | ) | const |
return "reconstructed" charged tracks index.
Definition at line 971 of file FBaseSimEvent.cc.
References nChargedParticleTracks, and theChargedTracks.
{ if (id>=0 && id<(int)nChargedParticleTracks) return (*theChargedTracks)[id]; else return -1; }
void FBaseSimEvent::clear | ( | void | ) |
clear the FBaseSimEvent content before the next event
Definition at line 951 of file FBaseSimEvent.cc.
References nChargedParticleTracks, nGenParticles, nSimTracks, and nSimVertices.
Referenced by fill().
{ nSimTracks = 0; nSimVertices = 0; nGenParticles = 0; nChargedParticleTracks = 0; }
const HepMC::GenParticle * FBaseSimEvent::embdGenpart | ( | int | i | ) | const |
return MC track with a given id
Definition at line 991 of file FBaseSimEvent.cc.
References i, and theGenParticles.
{ return (*theGenParticles)[i]; }
const SimTrack& FBaseSimEvent::embdTrack | ( | int | i | ) | const [inline] |
return embedded track with given id
Referenced by FSimEvent::load().
const SimVertex& FBaseSimEvent::embdVertex | ( | int | i | ) | const [inline] |
return embedded vertex with given id
Referenced by FSimEvent::load().
const FSimVertexType& FBaseSimEvent::embdVertexType | ( | int | i | ) | const [inline] |
return embedded vertex type with given id
Referenced by FSimEvent::load().
void FBaseSimEvent::fill | ( | const reco::GenParticleCollection & | hev | ) |
fill the FBaseSimEvent from the current reco::GenParticleCollection
Definition at line 181 of file FBaseSimEvent.cc.
References addParticles(), and clear().
{ // Clear old vectors clear(); // Add the particles in the FSimEvent addParticles(myGenParticles); }
void FBaseSimEvent::fill | ( | const std::vector< SimTrack > & | simTracks, |
const std::vector< SimVertex > & | simVertices | ||
) |
fill the FBaseSimEvent from SimTrack's and SimVert'ices
Reimplemented in FSimEvent.
Definition at line 192 of file FBaseSimEvent.cc.
References abs, addSimTrack(), addSimVertex(), FSimTrack::charge(), clear(), SimTrack::genpartIndex(), BaseParticlePropagator::getSuccess(), lateVertexPosition, CoreSimTrack::momentum(), FSimTrack::momentum(), SimVertex::noParent(), FSimTrack::notYetToEndVertex(), nTracks(), SimVertex::parentIndex(), pos, position, FSimVertex::position(), CoreSimVertex::position(), FSimVertexType::PRIMARY_VERTEX, BaseParticlePropagator::propagateToEcalEntrance(), BaseParticlePropagator::propagateToHcalEntrance(), BaseParticlePropagator::propagateToPreshowerLayer1(), BaseParticlePropagator::propagateToPreshowerLayer2(), BaseParticlePropagator::propagateToVFcalEntrance(), RawParticle::setCharge(), FSimTrack::setEcal(), FSimTrack::setHcal(), FSimTrack::setLayer1(), FSimTrack::setLayer2(), FSimTrack::setVFcal(), matplotRender::t, track(), SimTrack::trackerSurfaceMomentum(), SimTrack::trackerSurfacePosition(), CoreSimTrack::type(), RawParticle::vertex(), vertex(), FSimTrack::vertex(), SimTrack::vertIndex(), x, detailsBasic3DVector::y, and z.
{ // Watch out there ! A SimVertex is in mm (stupid), // while a FSimVertex is in cm (clever). clear(); unsigned nVtx = simVertices.size(); unsigned nTks = simTracks.size(); // Empty event, do nothin' if ( nVtx == 0 ) return; // Two arrays for internal use. std::vector<int> myVertices(nVtx,-1); std::vector<int> myTracks(nTks,-1); // create a map associating geant particle id and position in the // event SimTrack vector std::map<unsigned, unsigned> geantToIndex; for( unsigned it=0; it<simTracks.size(); ++it ) { geantToIndex[ simTracks[it].trackId() ] = it; } // Create also a map associating a SimTrack with its endVertex /* std::map<unsigned, unsigned> endVertex; for ( unsigned iv=0; iv<simVertices.size(); ++iv ) { endVertex[ simVertices[iv].parentIndex() ] = iv; } */ // Set the main vertex for the kine particle filter // SimVertices were in mm until 110_pre2 // HepLorentzVector primaryVertex = simVertices[0].position()/10.; // SImVertices are now in cm // Also : position is copied until SimVertex switches to Mathcore. // XYZTLorentzVector primaryVertex = simVertices[0].position(); // The next 5 lines to be then replaced by the previous line XYZTLorentzVector primaryVertex(simVertices[0].position().x(), simVertices[0].position().y(), simVertices[0].position().z(), simVertices[0].position().t()); // myFilter->setMainVertex(primaryVertex); // Add the main vertex to the list. addSimVertex(myFilter->vertex(), -1, FSimVertexType::PRIMARY_VERTEX); myVertices[0] = 0; for( unsigned trackId=0; trackId<nTks; ++trackId ) { // The track const SimTrack& track = simTracks[trackId]; // std::cout << std::endl << "SimTrack " << trackId << " " << track << std::endl; // The origin vertex int vertexId = track.vertIndex(); const SimVertex& vertex = simVertices[vertexId]; //std::cout << "Origin vertex " << vertexId << " " << vertex << std::endl; // The mother track int motherId = -1; if( !vertex.noParent() ) { // there is a parent to this vertex // geant id of the mother unsigned motherGeantId = vertex.parentIndex(); std::map<unsigned, unsigned >::iterator association = geantToIndex.find( motherGeantId ); if(association != geantToIndex.end() ) motherId = association->second; } int originId = motherId == - 1 ? -1 : myTracks[motherId]; //std::cout << "Origin id " << originId << std::endl; /* if ( endVertex.find(trackId) != endVertex.end() ) std::cout << "End vertex id = " << endVertex[trackId] << std::endl; else std::cout << "No endVertex !!! " << std::endl; std::cout << "Tracker surface position " << track.trackerSurfacePosition() << std::endl; */ // Add the vertex (if it does not already exist!) XYZTLorentzVector position(vertex.position().px(),vertex.position().py(), vertex.position().pz(),vertex.position().e()); if ( myVertices[vertexId] == -1 ) // Momentum and position are copied until SimTrack and SimVertex // switch to Mathcore. // myVertices[vertexId] = addSimVertex(vertex.position(),originId); // The next line to be then replaced by the previous line myVertices[vertexId] = addSimVertex(position,originId); // Add the track (with protection for brem'ing electrons and muons) int motherType = motherId == -1 ? 0 : simTracks[motherId].type(); bool notBremInDetector = (abs(motherType) != 11 && abs(motherType) != 13) || motherType != track.type() || position.Perp2() < lateVertexPosition ; if ( notBremInDetector ) { // Momentum and position are copied until SimTrack and SimVertex // switch to Mathcore. // RawParticle part(track.momentum(), vertex.position()); // The next 3 lines to be then replaced by the previous line XYZTLorentzVector momentum(track.momentum().px(),track.momentum().py(), track.momentum().pz(),track.momentum().e()); RawParticle part(momentum,position); // part.setID(track.type()); //std::cout << "Ctau = " << part.PDGcTau() << std::endl; // Don't save tracks that have decayed immediately but for which no daughters // were saved (probably due to cuts on E, pT and eta) // if ( part.PDGcTau() > 0.1 || endVertex.find(trackId) != endVertex.end() ) myTracks[trackId] = addSimTrack(&part,myVertices[vertexId],track.genpartIndex()); if ( myTracks[trackId] >= 0 ) { (*theSimTracks)[ myTracks[trackId] ].setTkPosition(track.trackerSurfacePosition()); (*theSimTracks)[ myTracks[trackId] ].setTkMomentum(track.trackerSurfaceMomentum()); } } else { myTracks[trackId] = myTracks[motherId]; if ( myTracks[trackId] >= 0 ) { (*theSimTracks)[ myTracks[trackId] ].setTkPosition(track.trackerSurfacePosition()); (*theSimTracks)[ myTracks[trackId] ].setTkMomentum(track.trackerSurfaceMomentum()); } } } // Now loop over the remaining end vertices ! for( unsigned vertexId=0; vertexId<nVtx; ++vertexId ) { // if the vertex is already saved, just ignore. if ( myVertices[vertexId] != -1 ) continue; // The yet unused vertex const SimVertex& vertex = simVertices[vertexId]; // The mother track int motherId = -1; if( !vertex.noParent() ) { // there is a parent to this vertex // geant id of the mother unsigned motherGeantId = vertex.parentIndex(); std::map<unsigned, unsigned >::iterator association = geantToIndex.find( motherGeantId ); if(association != geantToIndex.end() ) motherId = association->second; } int originId = motherId == - 1 ? -1 : myTracks[motherId]; // Add the vertex // Momentum and position are copied until SimTrack and SimVertex // switch to Mathcore. // myVertices[vertexId] = addSimVertex(vertex.position(),originId); // The next 3 lines to be then replaced by the previous line XYZTLorentzVector position(vertex.position().px(),vertex.position().py(), vertex.position().pz(),vertex.position().e()); myVertices[vertexId] = addSimVertex(position,originId); } // Finally, propagate all particles to the calorimeters BaseParticlePropagator myPart; XYZTLorentzVector mom; XYZTLorentzVector pos; // Loop over the tracks for( int fsimi=0; fsimi < (int)nTracks() ; ++fsimi) { FSimTrack& myTrack = track(fsimi); double trackerSurfaceTime = myTrack.vertex().position().t() + myTrack.momentum().e()/myTrack.momentum().pz() * ( myTrack.trackerSurfacePosition().z() - myTrack.vertex().position().z() ); pos = XYZTLorentzVector(myTrack.trackerSurfacePosition().x(), myTrack.trackerSurfacePosition().y(), myTrack.trackerSurfacePosition().z(), trackerSurfaceTime); mom = XYZTLorentzVector(myTrack.trackerSurfaceMomentum().x(), myTrack.trackerSurfaceMomentum().y(), myTrack.trackerSurfaceMomentum().z(), myTrack.trackerSurfaceMomentum().t()); if ( mom.T() > 0. ) { // The particle to be propagated myPart = BaseParticlePropagator(RawParticle(mom,pos),0.,0.,4.); myPart.setCharge(myTrack.charge()); // Propagate to Preshower layer 1 myPart.propagateToPreshowerLayer1(false); if ( myTrack.notYetToEndVertex(myPart.vertex()) && myPart.getSuccess()>0 ) myTrack.setLayer1(myPart,myPart.getSuccess()); // Propagate to Preshower Layer 2 myPart.propagateToPreshowerLayer2(false); if ( myTrack.notYetToEndVertex(myPart.vertex()) && myPart.getSuccess()>0 ) myTrack.setLayer2(myPart,myPart.getSuccess()); // Propagate to Ecal Endcap myPart.propagateToEcalEntrance(false); if ( myTrack.notYetToEndVertex(myPart.vertex()) ) myTrack.setEcal(myPart,myPart.getSuccess()); // Propagate to HCAL entrance myPart.propagateToHcalEntrance(false); if ( myTrack.notYetToEndVertex(myPart.vertex()) ) myTrack.setHcal(myPart,myPart.getSuccess()); // Propagate to VFCAL entrance myPart.propagateToVFcalEntrance(false); if ( myTrack.notYetToEndVertex(myPart.vertex()) ) myTrack.setVFcal(myPart,myPart.getSuccess()); } } }
void FBaseSimEvent::fill | ( | const HepMC::GenEvent & | hev | ) |
fill the FBaseSimEvent from the current HepMC::GenEvent
Definition at line 162 of file FBaseSimEvent.cc.
References addParticles(), and clear().
{ // Clear old vectors clear(); // Add the particles in the FSimEvent addParticles(myGenEvent); /* std::cout << "The MC truth! " << std::endl; printMCTruth(myGenEvent); std::cout << std::endl << "The FAMOS event! " << std::endl; print(); */ }
const KineParticleFilter& FBaseSimEvent::filter | ( | ) | const [inline] |
Definition at line 146 of file FBaseSimEvent.h.
References myFilter.
Referenced by TrajectoryManager::reconstruct().
{ return *myFilter; }
std::vector<HepMC::GenParticle*>* FBaseSimEvent::genparts | ( | ) | const [inline, protected] |
The pointer to the vector of GenParticle's.
Definition at line 168 of file FBaseSimEvent.h.
References theGenParticles.
{ return theGenParticles; }
void FBaseSimEvent::initializePdt | ( | const HepPDT::ParticleDataTable * | aPdt | ) |
Initialize the particle data table.
Definition at line 148 of file FBaseSimEvent.cc.
References pdt.
Referenced by FamosManager::setupGeometryAndField().
{ pdt = aPdt; }
unsigned int FBaseSimEvent::nChargedTracks | ( | ) | const [inline] |
Number of "reconstructed" charged tracks.
Definition at line 110 of file FBaseSimEvent.h.
References nChargedParticleTracks.
{ return nChargedParticleTracks; }
unsigned int FBaseSimEvent::nGenParts | ( | ) | const [inline] |
Number of generator particles.
Reimplemented in FSimEvent.
Definition at line 105 of file FBaseSimEvent.h.
References nGenParticles.
Referenced by addParticles().
{ return nGenParticles; }
unsigned int FBaseSimEvent::nTracks | ( | ) | const [inline] |
Number of tracks.
Reimplemented in FSimEvent.
Definition at line 95 of file FBaseSimEvent.h.
References nSimTracks.
Referenced by addParticles(), fill(), and print().
{ return nSimTracks; }
unsigned int FBaseSimEvent::nVertices | ( | ) | const [inline] |
Number of vertices.
Reimplemented in FSimEvent.
Definition at line 100 of file FBaseSimEvent.h.
References nSimVertices.
Referenced by print().
{ return nSimVertices; }
void FBaseSimEvent::print | ( | void | ) | const |
print the FBaseSimEvent in an intelligible way
Definition at line 934 of file FBaseSimEvent.cc.
References gather_cfg::cout, i, nTracks(), nVertices(), track(), and vertexType().
Referenced by CalorimetryManager::reconstruct().
void FBaseSimEvent::printMCTruth | ( | const HepMC::GenEvent & | hev | ) |
print the original MCTruth event
Definition at line 839 of file FBaseSimEvent.cc.
References gather_cfg::cout, eta(), configurableAnalysis::GenParticle, gen::k, mergeVDriftHistosByStation::name, L1TEmulatorMonitor_cff::p, RecoTau_DiTaus_pt_20-420_cfg::ParticleID, and pdt.
{ std::cout << "Id Gen Name eta phi pT E Vtx1 " << " x y z " << "Moth Vtx2 eta phi R Z Da1 Da2 Ecal?" << std::endl; for ( HepMC::GenEvent::particle_const_iterator piter = myGenEvent.particles_begin(); piter != myGenEvent.particles_end(); ++piter ) { HepMC::GenParticle* p = *piter; /* */ int partId = p->pdg_id(); std::string name; if ( pdt->particle(ParticleID(partId)) !=0 ) { name = (pdt->particle(ParticleID(partId)))->name(); } else { name = "none"; } XYZTLorentzVector momentum1(p->momentum().px(), p->momentum().py(), p->momentum().pz(), p->momentum().e()); int vertexId1 = 0; if ( !p->production_vertex() ) continue; XYZVector vertex1 (p->production_vertex()->position().x()/10., p->production_vertex()->position().y()/10., p->production_vertex()->position().z()/10.); vertexId1 = p->production_vertex()->barcode(); std::cout.setf(std::ios::fixed, std::ios::floatfield); std::cout.setf(std::ios::right, std::ios::adjustfield); std::cout << std::setw(4) << p->barcode() << " " << name; for(unsigned int k=0;k<11-name.length() && k<12; k++) std::cout << " "; double eta = momentum1.eta(); if ( eta > +10. ) eta = +10.; if ( eta < -10. ) eta = -10.; std::cout << std::setw(6) << std::setprecision(2) << eta << " " << std::setw(6) << std::setprecision(2) << momentum1.phi() << " " << std::setw(7) << std::setprecision(2) << momentum1.pt() << " " << std::setw(7) << std::setprecision(2) << momentum1.e() << " " << std::setw(4) << vertexId1 << " " << std::setw(6) << std::setprecision(1) << vertex1.x() << " " << std::setw(6) << std::setprecision(1) << vertex1.y() << " " << std::setw(6) << std::setprecision(1) << vertex1.z() << " "; const HepMC::GenParticle* mother = *(p->production_vertex()->particles_in_const_begin()); if ( mother ) std::cout << std::setw(4) << mother->barcode() << " "; else std::cout << " " ; if ( p->end_vertex() ) { XYZTLorentzVector vertex2(p->end_vertex()->position().x()/10., p->end_vertex()->position().y()/10., p->end_vertex()->position().z()/10., p->end_vertex()->position().t()/10.); int vertexId2 = p->end_vertex()->barcode(); std::vector<const HepMC::GenParticle*> children; HepMC::GenVertex::particles_out_const_iterator firstDaughterIt = p->end_vertex()->particles_out_const_begin(); HepMC::GenVertex::particles_out_const_iterator lastDaughterIt = p->end_vertex()->particles_out_const_end(); for ( ; firstDaughterIt != lastDaughterIt ; ++firstDaughterIt ) { children.push_back(*firstDaughterIt); } std::cout << std::setw(4) << vertexId2 << " " << std::setw(6) << std::setprecision(2) << vertex2.eta() << " " << std::setw(6) << std::setprecision(2) << vertex2.phi() << " " << std::setw(5) << std::setprecision(1) << vertex2.pt() << " " << std::setw(6) << std::setprecision(1) << vertex2.z() << " "; for ( unsigned id=0; id<children.size(); ++id ) std::cout << std::setw(4) << children[id]->barcode() << " "; } std::cout << std::endl; } }
void FBaseSimEvent::setBeamSpot | ( | const math::XYZPoint & | aBeamSpot | ) | [inline] |
Set the beam spot position.
Definition at line 151 of file FBaseSimEvent.h.
References theBeamSpot.
Referenced by FamosProducer::produce().
{ theBeamSpot = aBeamSpot; }
PrimaryVertexGenerator* FBaseSimEvent::thePrimaryVertexGenerator | ( | ) | const [inline] |
Definition at line 148 of file FBaseSimEvent.h.
References theVertexGenerator.
{ return theVertexGenerator; }
const HepPDT::ParticleDataTable* FBaseSimEvent::theTable | ( | ) | const [inline] |
Get the pointer to the particle data table.
Definition at line 64 of file FBaseSimEvent.h.
References pdt.
Referenced by FSimTrack::FSimTrack().
{ return pdt; }
FSimTrack& FBaseSimEvent::track | ( | int | id | ) | const [inline] |
Return track with given Id.
Referenced by addSimTrack(), addSimVertex(), fill(), MaterialEffects::interact(), FSimEvent::load(), TrajectoryManager::makeSinglePSimHit(), TrajectoryManager::moveAllDaughters(), print(), TrajectoryManager::propagateToCalorimeters(), CalorimetryManager::reconstruct(), TrajectoryManager::reconstruct(), and TrajectoryManager::updateWithDaughters().
std::vector<FSimTrack>* FBaseSimEvent::tracks | ( | void | ) | const [inline, protected] |
The pointer to the vector of FSimTrack's.
Definition at line 158 of file FBaseSimEvent.h.
References theSimTracks.
{ return theSimTracks; }
FSimVertex& FBaseSimEvent::vertex | ( | int | id | ) | const [inline] |
Return vertex with given Id.
Referenced by addParticles(), addSimTrack(), fill(), and TrajectoryManager::updateWithDaughters().
FSimVertexType& FBaseSimEvent::vertexType | ( | int | id | ) | const [inline] |
Return vertex with given Id.
Referenced by print().
std::vector<FSimVertex>* FBaseSimEvent::vertices | ( | ) | const [inline, protected] |
The pointer to the vector of FSimVertex's.
Definition at line 163 of file FBaseSimEvent.h.
References theSimVertices.
{ return theSimVertices; }
unsigned int FBaseSimEvent::initialSize [private] |
Definition at line 192 of file FBaseSimEvent.h.
Referenced by FBaseSimEvent().
double FBaseSimEvent::lateVertexPosition [private] |
Definition at line 205 of file FBaseSimEvent.h.
Referenced by addParticles(), FBaseSimEvent(), and fill().
KineParticleFilter* FBaseSimEvent::myFilter [private] |
The particle filter.
Definition at line 195 of file FBaseSimEvent.h.
Referenced by filter(), and ~FBaseSimEvent().
unsigned int FBaseSimEvent::nChargedParticleTracks [private] |
Definition at line 186 of file FBaseSimEvent.h.
Referenced by addChargedTrack(), chargedTrack(), clear(), and nChargedTracks().
unsigned int FBaseSimEvent::nGenParticles [private] |
Definition at line 185 of file FBaseSimEvent.h.
Referenced by addParticles(), clear(), and nGenParts().
unsigned int FBaseSimEvent::nSimTracks [private] |
Definition at line 183 of file FBaseSimEvent.h.
Referenced by addSimTrack(), clear(), and nTracks().
unsigned int FBaseSimEvent::nSimVertices [private] |
Definition at line 184 of file FBaseSimEvent.h.
Referenced by addSimVertex(), clear(), and nVertices().
const ParticleDataTable* FBaseSimEvent::pdt [private] |
Definition at line 201 of file FBaseSimEvent.h.
Referenced by initializePdt(), printMCTruth(), and theTable().
const RandomEngine* FBaseSimEvent::random [private] |
Definition at line 207 of file FBaseSimEvent.h.
Referenced by FBaseSimEvent().
double FBaseSimEvent::sigmaVerteX [private] |
Definition at line 197 of file FBaseSimEvent.h.
double FBaseSimEvent::sigmaVerteY [private] |
Definition at line 198 of file FBaseSimEvent.h.
double FBaseSimEvent::sigmaVerteZ [private] |
Definition at line 199 of file FBaseSimEvent.h.
math::XYZPoint FBaseSimEvent::theBeamSpot [private] |
Definition at line 204 of file FBaseSimEvent.h.
Referenced by addParticles(), FBaseSimEvent(), and setBeamSpot().
unsigned int FBaseSimEvent::theChargedSize [private] |
Definition at line 191 of file FBaseSimEvent.h.
Referenced by addChargedTrack(), and FBaseSimEvent().
std::vector<unsigned>* FBaseSimEvent::theChargedTracks [private] |
Definition at line 181 of file FBaseSimEvent.h.
Referenced by addChargedTrack(), chargedTrack(), FBaseSimEvent(), and ~FBaseSimEvent().
Definition at line 178 of file FBaseSimEvent.h.
Referenced by addSimVertex(), FBaseSimEvent(), and ~FBaseSimEvent().
std::vector<HepMC::GenParticle*>* FBaseSimEvent::theGenParticles [private] |
Definition at line 179 of file FBaseSimEvent.h.
Referenced by addParticles(), embdGenpart(), FBaseSimEvent(), genparts(), and ~FBaseSimEvent().
unsigned int FBaseSimEvent::theGenSize [private] |
Definition at line 190 of file FBaseSimEvent.h.
Referenced by addParticles(), and FBaseSimEvent().
std::vector<FSimTrack>* FBaseSimEvent::theSimTracks [private] |
Definition at line 176 of file FBaseSimEvent.h.
Referenced by addSimTrack(), FBaseSimEvent(), tracks(), and ~FBaseSimEvent().
std::vector<FSimVertex>* FBaseSimEvent::theSimVertices [private] |
Definition at line 177 of file FBaseSimEvent.h.
Referenced by addSimVertex(), FBaseSimEvent(), vertices(), and ~FBaseSimEvent().
unsigned int FBaseSimEvent::theTrackSize [private] |
Definition at line 188 of file FBaseSimEvent.h.
Referenced by addSimTrack(), and FBaseSimEvent().
Definition at line 203 of file FBaseSimEvent.h.
Referenced by addParticles(), FBaseSimEvent(), and thePrimaryVertexGenerator().
unsigned int FBaseSimEvent::theVertexSize [private] |
Definition at line 189 of file FBaseSimEvent.h.
Referenced by addSimVertex(), and FBaseSimEvent().