CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Attributes
FBaseSimEvent Class Reference

#include <FBaseSimEvent.h>

Inheritance diagram for FBaseSimEvent:
FSimEvent

Public Member Functions

void addChargedTrack (int id)
 Add an id in the vector of charged tracks id's. More...
 
void addParticles (const HepMC::GenEvent &hev)
 Add the particles and their vertices to the list. More...
 
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. More...
 
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. More...
 
int chargedTrack (int id) const
 return "reconstructed" charged tracks index. More...
 
void clear ()
 clear the FBaseSimEvent content before the next event More...
 
const HepMC::GenParticle * embdGenpart (int i) const
 return MC track with a given id More...
 
const SimTrackembdTrack (int i) const
 return embedded track with given id More...
 
const SimVertexembdVertex (int i) const
 return embedded vertex with given id More...
 
const FSimVertexTypeembdVertexType (int i) const
 return embedded vertex type with given id More...
 
 FBaseSimEvent (const edm::ParameterSet &kine)
 Default constructor. More...
 
void fill (const HepMC::GenEvent &hev)
 fill the FBaseSimEvent from the current HepMC::GenEvent More...
 
void fill (const std::vector< SimTrack > &, const std::vector< SimVertex > &)
 fill the FBaseSimEvent from SimTrack's and SimVert'ices More...
 
const KineParticleFilterfilter () const
 
void initializePdt (const HepPDT::ParticleDataTable *aPdt)
 Initialize the particle data table. More...
 
unsigned int nChargedTracks () const
 Number of "reconstructed" charged tracks. More...
 
unsigned int nGenParts () const
 Number of generator particles. More...
 
unsigned int nTracks () const
 Number of tracks. More...
 
unsigned int nVertices () const
 Number of vertices. More...
 
void print () const
 print the FBaseSimEvent in an intelligible way More...
 
void printMCTruth (const HepMC::GenEvent &hev)
 print the original MCTruth event More...
 
const HepPDT::ParticleDataTabletheTable () const
 Get the pointer to the particle data table. More...
 
FSimTracktrack (int id) const
 Return track with given Id. More...
 
FSimVertexvertex (int id) const
 Return vertex with given Id. More...
 
FSimVertexTypevertexType (int id) const
 Return vertex with given Id. More...
 
 ~FBaseSimEvent ()
 usual virtual destructor More...
 

Protected Member Functions

std::vector< HepMC::GenParticle * > * genparts () const
 The pointer to the vector of GenParticle's. More...
 
std::vector< FSimTrack > * tracks () const
 The pointer to the vector of FSimTrack's. More...
 
std::vector< FSimVertex > * vertices () const
 The pointer to the vector of FSimVertex's. More...
 

Private Attributes

unsigned int initialSize
 
double lateVertexPosition
 
KineParticleFiltermyFilter
 The particle filter. More...
 
unsigned int nChargedParticleTracks
 
unsigned int nGenParticles
 
unsigned int nSimTracks
 
unsigned int nSimVertices
 
const ParticleDataTablepdt
 
double sigmaVerteX
 
double sigmaVerteY
 
double sigmaVerteZ
 
unsigned int theChargedSize
 
std::vector< unsigned > * theChargedTracks
 
FSimVertexTypeCollectiontheFSimVerticesType
 
std::vector< HepMC::GenParticle * > * theGenParticles
 
unsigned int theGenSize
 
std::vector< FSimTrack > * theSimTracks
 
std::vector< FSimVertex > * theSimVertices
 
unsigned int theTrackSize
 
unsigned int theVertexSize
 

Detailed Description

Definition at line 42 of file FBaseSimEvent.h.

Constructor & Destructor Documentation

FBaseSimEvent::FBaseSimEvent ( const edm::ParameterSet kine)

Default constructor.

Definition at line 32 of file FBaseSimEvent.cc.

References initialSize, lateVertexPosition, theChargedSize, theChargedTracks, theFSimVerticesType, theGenParticles, theGenSize, theSimTracks, theSimVertices, theTrackSize, and theVertexSize.

33  :
34  nSimTracks(0),
35  nSimVertices(0),
36  nGenParticles(0),
38  initialSize(5000)
39 {
40 
41  // Initialize the vectors of particles and vertices
42  theGenParticles = new std::vector<HepMC::GenParticle*>();
43  theSimTracks = new std::vector<FSimTrack>;
44  theSimVertices = new std::vector<FSimVertex>;
45  theChargedTracks = new std::vector<unsigned>();
47 
48  // Reserve some size to avoid mutiple copies
49  /* */
50  theSimTracks->resize(initialSize);
51  theSimVertices->resize(initialSize);
54  theFSimVerticesType->resize(initialSize);
59  /* */
60 
61  // Initialize the Particle filter
62  myFilter = new KineParticleFilter(kine);
63 
64  // Initialize the distance from (0,0,0) after which *generated* particles are
65  // no longer considered - because the mother could have interacted before.
66  // unit : cm x cm
67  lateVertexPosition = 2.5*2.5;
68 }
double lateVertexPosition
std::vector< FSimTrack > * theSimTracks
std::vector< unsigned > * theChargedTracks
unsigned int theTrackSize
unsigned int theVertexSize
unsigned int nSimTracks
unsigned int theGenSize
unsigned int nSimVertices
std::vector< FSimVertexType > FSimVertexTypeCollection
collection of FSimVertexType objects
unsigned int nGenParticles
unsigned int initialSize
std::vector< FSimVertex > * theSimVertices
unsigned int theChargedSize
unsigned int nChargedParticleTracks
std::vector< HepMC::GenParticle * > * theGenParticles
FSimVertexTypeCollection * theFSimVerticesType
FBaseSimEvent::~FBaseSimEvent ( )

usual virtual destructor

Definition at line 70 of file FBaseSimEvent.cc.

References myFilter, theChargedTracks, theFSimVerticesType, theGenParticles, theSimTracks, and theSimVertices.

70  {
71 
72  // Clear the vectors
73  theGenParticles->clear();
74  theSimTracks->clear();
75  theSimVertices->clear();
76  theChargedTracks->clear();
77  theFSimVerticesType->clear();
78 
79  // Delete
80  delete theGenParticles;
81  delete theSimTracks;
82  delete theSimVertices;
83  delete theChargedTracks;
84  delete theFSimVerticesType;
85  delete myFilter;
86 
87 }
std::vector< FSimTrack > * theSimTracks
std::vector< unsigned > * theChargedTracks
KineParticleFilter * myFilter
The particle filter.
std::vector< FSimVertex > * theSimVertices
std::vector< HepMC::GenParticle * > * theGenParticles
FSimVertexTypeCollection * theFSimVerticesType

Member Function Documentation

void FBaseSimEvent::addChargedTrack ( int  id)

Add an id in the vector of charged tracks id's.

Definition at line 717 of file FBaseSimEvent.cc.

References triggerObjects_cff::id, nChargedParticleTracks, theChargedSize, and theChargedTracks.

717  {
718  (*theChargedTracks)[nChargedParticleTracks++] = id;
721  theChargedSize *= 2;
723  }
724 }
std::vector< unsigned > * theChargedTracks
unsigned int theChargedSize
unsigned int nChargedParticleTracks
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 342 of file FBaseSimEvent.cc.

References funct::abs(), addSimTrack(), addSimVertex(), FSimVertexType::DECAY_VERTEX, MillePedeFileConverter_cfg::e, GenParticle::GenParticle, lateVertexPosition, makeParticle(), objects.autophobj::motherId, nGenParticles, nGenParts(), PFRecoTauDiscriminationByIsolation_cfi::offset, AlCaHLTBitMon_ParallelJobs::p, FSimVertex::position(), FSimVertexType::PRIMARY_VERTEX, impactParameterTagInfos_cfi::primaryVertex, theGenParticles, theGenSize, theTable(), and vertex().

Referenced by fill().

342  {
343 
345  int genEventSize = myGenEvent.particles_size();
346  std::vector<int> myGenVertices(genEventSize, static_cast<int>(0));
347 
348  // If no particles, no work to be done !
349  if ( myGenEvent.particles_empty() ) return;
350 
351  // Are there particles in the FSimEvent already ?
352  int offset = nGenParts();
353 
354  // Primary vertex
355  HepMC::GenVertex* primaryVertex = *(myGenEvent.vertices_begin());
356 
357  // unit transformation (needs review)
358  XYZTLorentzVector primaryVertexPosition(primaryVertex->position().x()/10.,
359  primaryVertex->position().y()/10.,
360  primaryVertex->position().z()/10.,
361  primaryVertex->position().t()/10.);
362 
363  // This is the main vertex index
364  int mainVertex = addSimVertex(primaryVertexPosition, -1, FSimVertexType::PRIMARY_VERTEX);
365 
366  int initialBarcode = 0;
367  if ( myGenEvent.particles_begin() != myGenEvent.particles_end() )
368  {
369  initialBarcode = (*myGenEvent.particles_begin())->barcode();
370  }
371 
372  // Loop on the particles of the generated event
373  for ( auto piter = myGenEvent.particles_begin(); piter != myGenEvent.particles_end(); ++piter )
374  {
375 
376  // This is the generated particle pointer - for the signal event only
377  HepMC::GenParticle* p = *piter;
378 
379  if ( !offset ) {
380  (*theGenParticles)[nGenParticles++] = p;
382  theGenSize *= 2;
383  theGenParticles->resize(theGenSize);
384  }
385 
386  }
387 
388  // Reject particles with late origin vertex (i.e., coming from late decays)
389  // This should not happen, but one never knows what users may be up to!
390  // For example exotic particles might decay late - keep the decay products in the case.
391  XYZTLorentzVector productionVertexPosition(0.,0.,0.,0.);
392  HepMC::GenVertex* productionVertex = p->production_vertex();
393  if ( productionVertex ) {
394  unsigned productionMother = productionVertex->particles_in_size();
395  if ( productionMother ) {
396  unsigned motherId = (*(productionVertex->particles_in_const_begin()))->pdg_id();
397  if ( motherId < 1000000 )
398  productionVertexPosition =
399  XYZTLorentzVector(productionVertex->position().x()/10.,
400  productionVertex->position().y()/10.,
401  productionVertex->position().z()/10.,
402  productionVertex->position().t()/10.);
403  }
404  }
405  if ( !myFilter->acceptVertex(productionVertexPosition) ) continue;
406 
407  int abspdgId = std::abs(p->pdg_id());
408  HepMC::GenVertex* endVertex = p->end_vertex();
409 
410  // Keep only:
411  // 1) Stable particles (watch out! New status code = 1001!)
412  bool testStable = p->status()%1000==1;
413  // Declare stable standard particles that decay after a macroscopic path length
414  // (except if exotic)
415  if ( p->status() == 2 && abspdgId < 1000000) {
416  if ( endVertex ) {
417  XYZTLorentzVector decayPosition =
418  XYZTLorentzVector(endVertex->position().x()/10.,
419  endVertex->position().y()/10.,
420  endVertex->position().z()/10.,
421  endVertex->position().t()/10.);
422  // If the particle flew enough to be beyond the beam pipe enveloppe, just declare it stable
423  if ( decayPosition.Perp2() > lateVertexPosition ) testStable = true;
424  }
425  }
426 
427  // 2) or particles with stable daughters (watch out! New status code = 1001!)
428  bool testDaugh = false;
429  if ( !testStable &&
430  p->status() == 2 &&
431  endVertex &&
432  endVertex->particles_out_size() ) {
433  HepMC::GenVertex::particles_out_const_iterator firstDaughterIt =
434  endVertex->particles_out_const_begin();
435  HepMC::GenVertex::particles_out_const_iterator lastDaughterIt =
436  endVertex->particles_out_const_end();
437  for ( ; firstDaughterIt != lastDaughterIt ; ++firstDaughterIt ) {
438  HepMC::GenParticle* daugh = *firstDaughterIt;
439  if ( daugh->status()%1000==1 ) {
440  // Check that it is not a "prompt electron or muon brem":
441  if (abspdgId == 11 || abspdgId == 13) {
442  if ( endVertex ) {
443  XYZTLorentzVector endVertexPosition = XYZTLorentzVector(endVertex->position().x()/10.,
444  endVertex->position().y()/10.,
445  endVertex->position().z()/10.,
446  endVertex->position().t()/10.);
447  // If the particle flew enough to be beyond the beam pipe enveloppe, just declare it stable
448  if ( endVertexPosition.Perp2() < lateVertexPosition ) {
449  break;
450  }
451  }
452  }
453  testDaugh=true;
454  break;
455  }
456  }
457  }
458 
459  // 3) or particles that fly more than one micron.
460  double dist = 0.;
461  if ( !testStable && !testDaugh && p->production_vertex() ) {
463  productionVertexPosition(p->production_vertex()->position().x()/10.,
464  p->production_vertex()->position().y()/10.,
465  p->production_vertex()->position().z()/10.,
466  p->production_vertex()->position().t()/10.);
467  dist = (primaryVertexPosition-productionVertexPosition).Vect().Mag2();
468  }
469  bool testDecay = ( dist > 1e-8 ) ? true : false;
470 
471  // Save the corresponding particle and vertices
472  if ( testStable || testDaugh || testDecay ) {
473 
474  /*
475  const HepMC::GenParticle* mother = p->production_vertex() ?
476  *(p->production_vertex()->particles_in_const_begin()) : 0;
477  */
478 
479  int motherBarcode = p->production_vertex() &&
480  p->production_vertex()->particles_in_const_begin() !=
481  p->production_vertex()->particles_in_const_end() ?
482  (*(p->production_vertex()->particles_in_const_begin()))->barcode() : 0;
483 
484  int originVertex =
485  motherBarcode && myGenVertices[motherBarcode-initialBarcode] ?
486  myGenVertices[motherBarcode-initialBarcode] : mainVertex;
487 
488  XYZTLorentzVector momentum(p->momentum().px(),
489  p->momentum().py(),
490  p->momentum().pz(),
491  p->momentum().e());
492  RawParticle part= makeParticle(theTable(),p->pdg_id(),momentum, vertex(originVertex).position());
493 
494  // Add the particle to the event and to the various lists
495 
496  int theTrack = testStable && p->end_vertex() ?
497  // The particle is scheduled to decay
498  addSimTrack(&part,originVertex, nGenParts()-offset,p->end_vertex()) :
499  // The particle is not scheduled to decay
500  addSimTrack(&part,originVertex, nGenParts()-offset);
501 
502  if (
503  // This one deals with particles with no end vertex
504  !p->end_vertex() ||
505  // This one deals with particles that have a pre-defined
506  // decay proper time, but have not decayed yet
507  ( testStable && p->end_vertex() && !p->end_vertex()->particles_out_size() )
508  // In both case, just don't add a end vertex in the FSimEvent
509  ) continue;
510 
511  // Add the vertex to the event and to the various lists
512  XYZTLorentzVector decayVertex =
513  XYZTLorentzVector(p->end_vertex()->position().x()/10.,
514  p->end_vertex()->position().y()/10.,
515  p->end_vertex()->position().z()/10.,
516  p->end_vertex()->position().t()/10.);
517  // vertex(mainVertex).position();
518  int theVertex = addSimVertex(decayVertex,theTrack, FSimVertexType::DECAY_VERTEX);
519 
520  if ( theVertex != -1 ) myGenVertices[p->barcode()-initialBarcode] = theVertex;
521 
522  // There we are !
523  }
524  }
525 
526 }
double lateVertexPosition
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 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.
const HepPDT::ParticleDataTable * theTable() const
Get the pointer to the particle data table.
Definition: FBaseSimEvent.h:57
unsigned int theGenSize
FSimVertex & vertex(int id) const
Return vertex with given Id.
RawParticle makeParticle(HepPDT::ParticleDataTable const *, int id, const math::XYZTLorentzVector &p)
Definition: makeParticle.cc:29
const math::XYZTLorentzVector & position() const
Temporary (until CMSSW moves to Mathcore) - No ! Actually very useful.
Definition: FSimVertex.h:49
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned int nGenParticles
part
Definition: HCALResponse.h:20
unsigned int nGenParts() const
Number of generator particles.
Definition: FBaseSimEvent.h:94
std::vector< HepMC::GenParticle * > * theGenParticles
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:27
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 529 of file FBaseSimEvent.cc.

References FSimVertex::addDaughter(), FSimTrack::addDaughter(), SimTrack::genpartIndex(), pdg::mass(), RawParticle::momentum(), objects.autophobj::motherId, nSimTracks, class-composition::parent, RawParticle::pid(), mathSSE::sqrt(), RawParticle::t(), theSimTracks, theTable(), theTrackSize, track(), and vertex().

Referenced by addParticles(), fill(), MaterialEffects::interact(), and TrajectoryManager::updateWithDaughters().

530  {
531 
532  // Check that the particle is in the Famos "acceptance"
533  // Keep all primaries of pile-up events, though
534  if ( !myFilter->acceptParticle(*p) && ig >= -1 ) return -1;
535 
536  // The new track index
537  int trackId = nSimTracks++;
539  theTrackSize *= 2;
540  theSimTracks->resize(theTrackSize);
541  }
542 
543  // Attach the particle to the origin vertex, and to the mother
544  vertex(iv).addDaughter(trackId);
545  if ( !vertex(iv).noParent() ) {
546  track(vertex(iv).parent().id()).addDaughter(trackId);
547 
548  if ( ig == -1 ) {
549  int motherId = track(vertex(iv).parent().id()).genpartIndex();
550  if ( motherId < -1 ) ig = motherId;
551  }
552  }
553 
554  // Some transient information for FAMOS internal use
555  (*theSimTracks)[trackId] = ev ?
556  // A proper decay time is scheduled
557  FSimTrack(p,iv,ig,trackId,this,
558  ev->position().t()/10.
559  * pdg::mass(p->pid(), theTable())
560  / std::sqrt(p->momentum().Vect().Mag2())) :
561  // No proper decay time is scheduled
562  FSimTrack(p,iv,ig,trackId,this);
563 
564  return trackId;
565 
566 }
std::vector< FSimTrack > * theSimTracks
unsigned int theTrackSize
const HepPDT::ParticleDataTable * theTable() const
Get the pointer to the particle data table.
Definition: FBaseSimEvent.h:57
int pid() const
get the HEP particle ID number
Definition: RawParticle.h:296
bool ev
unsigned int nSimTracks
FSimVertex & vertex(int id) const
Return vertex with given Id.
const XYZTLorentzVector & momentum() const
the momentum fourvector
Definition: RawParticle.h:340
T sqrt(T t)
Definition: SSEVec.h:18
int genpartIndex() const
index of the corresponding Generator particle in the Event container (-1 if no Genpart) ...
Definition: SimTrack.h:34
double mass(int pdgID, const HepPDT::ParticleDataTable *pdt)
void addDaughter(int i)
Add a RecHit for a track on a layer.
Definition: FSimTrack.h:195
void addDaughter(int i)
Definition: FSimVertex.h:46
FSimTrack & track(int id) const
Return track with given Id.
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 569 of file FBaseSimEvent.cc.

References nSimVertices, FSimTrack::setEndVertex(), theFSimVerticesType, theSimVertices, theVertexSize, and track().

Referenced by addParticles(), fill(), MaterialEffects::interact(), TrajectoryManager::reconstruct(), and TrajectoryManager::updateWithDaughters().

569  {
570 
571  // Check that the vertex is in the Famos "acceptance"
572  if ( !myFilter->acceptVertex(v) ) return -1;
573 
574  // The number of vertices
575  int vertexId = nSimVertices++;
577  theVertexSize *= 2;
578  theSimVertices->resize(theVertexSize);
580  }
581 
582  // Attach the end vertex to the particle (if accepted)
583  if ( im !=-1 ) track(im).setEndVertex(vertexId);
584 
585  // Some transient information for FAMOS internal use
586  (*theSimVertices)[vertexId] = FSimVertex(v,im,vertexId,this);
587 
588  (*theFSimVerticesType)[vertexId] = FSimVertexType(type);
589 
590  return vertexId;
591 
592 }
type
Definition: HCALResponse.h:21
unsigned int theVertexSize
unsigned int nSimVertices
A FSimVertexType hold the information on the vertex origine.
std::vector< FSimVertex > * theSimVertices
void setEndVertex(int endv)
Set the end vertex.
Definition: FSimTrack.h:162
FSimTrack & track(int id) const
Return track with given Id.
FSimVertexTypeCollection * theFSimVerticesType
int FBaseSimEvent::chargedTrack ( int  id) const

return "reconstructed" charged tracks index.

Definition at line 727 of file FBaseSimEvent.cc.

References GenParticle::GenParticle, triggerObjects_cff::id, nChargedParticleTracks, and theChargedTracks.

727  {
728  if (id>=0 && id<(int)nChargedParticleTracks)
729  return (*theChargedTracks)[id];
730  else
731  return -1;
732 }
std::vector< unsigned > * theChargedTracks
unsigned int nChargedParticleTracks
void FBaseSimEvent::clear ( void  )
const HepMC::GenParticle * FBaseSimEvent::embdGenpart ( int  i) const

return MC track with a given id

Definition at line 735 of file FBaseSimEvent.cc.

References mps_fire::i, and theGenParticles.

735  {
736  return (*theGenParticles)[i];
737 }
std::vector< HepMC::GenParticle * > * theGenParticles
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 HepMC::GenEvent hev)

fill the FBaseSimEvent from the current HepMC::GenEvent

Definition at line 97 of file FBaseSimEvent.cc.

References addParticles(), and clear().

Referenced by FSimEvent::fill().

97  {
98 
99  // Clear old vectors
100  clear();
101 
102  // Add the particles in the FSimEvent
103  addParticles(myGenEvent);
104 
105 }
void addParticles(const HepMC::GenEvent &hev)
Add the particles and their vertices to the list.
void clear()
clear the FBaseSimEvent content before the next event
void FBaseSimEvent::fill ( const std::vector< SimTrack > &  simTracks,
const std::vector< SimVertex > &  simVertices 
)

fill the FBaseSimEvent from SimTrack's and SimVert'ices

Definition at line 108 of file FBaseSimEvent.cc.

References funct::abs(), addSimTrack(), addSimVertex(), TrackValidation_cff::association, FSimTrack::charge(), clear(), RawParticle::cos2ThetaV(), SimTrack::genpartIndex(), BaseParticlePropagator::getSuccess(), createfilelist::int, lateVertexPosition, makeParticle(), CoreSimTrack::momentum(), FSimTrack::momentum(), objects.autophobj::motherId, SimVertex::noParent(), FSimTrack::notYetToEndVertex(), nTracks(), SimVertex::parentIndex(), BaseParticlePropagator::particle(), CoreSimVertex::position(), FSimVertex::position(), position, FSimVertexType::PRIMARY_VERTEX, impactParameterTagInfos_cfi::primaryVertex, BaseParticlePropagator::propagateToEcalEntrance(), BaseParticlePropagator::propagateToHcalEntrance(), BaseParticlePropagator::propagateToHcalExit(), BaseParticlePropagator::propagateToHOLayer(), BaseParticlePropagator::propagateToPreshowerLayer1(), BaseParticlePropagator::propagateToPreshowerLayer2(), BaseParticlePropagator::propagateToVFcalEntrance(), FSimTrack::setEcal(), FSimTrack::setHcal(), FSimTrack::setHcalExit(), FSimTrack::setHO(), FSimTrack::setLayer1(), FSimTrack::setLayer2(), BaseParticlePropagator::setMagneticField(), FSimTrack::setVFcal(), protons_cff::t, theTable(), track(), SimTrack::trackerSurfaceMomentum(), SimTrack::trackerSurfacePosition(), CoreSimTrack::type(), FSimTrack::vertex(), vertex(), RawParticle::vertex(), SimTrack::vertIndex(), x, y, and z.

109  {
110 
111  // Watch out there ! A SimVertex is in mm (stupid),
112  // while a FSimVertex is in cm (clever).
113 
114  clear();
115 
116  unsigned nVtx = simVertices.size();
117  unsigned nTks = simTracks.size();
118 
119  // Empty event, do nothin'
120  if ( nVtx == 0 ) return;
121 
122  // Two arrays for internal use.
123  std::vector<int> myVertices(nVtx,-1);
124  std::vector<int> myTracks(nTks,-1);
125 
126  // create a map associating geant particle id and position in the
127  // event SimTrack vector
128 
129  std::map<unsigned, unsigned> geantToIndex;
130  for( unsigned it=0; it<simTracks.size(); ++it ) {
131  geantToIndex[ simTracks[it].trackId() ] = it;
132  }
133 
134  // Create also a map associating a SimTrack with its endVertex
135  /*
136  std::map<unsigned, unsigned> endVertex;
137  for ( unsigned iv=0; iv<simVertices.size(); ++iv ) {
138  endVertex[ simVertices[iv].parentIndex() ] = iv;
139  }
140  */
141 
142  // Set the main vertex for the kine particle filter
143  // SimVertices were in mm until 110_pre2
144  // HepLorentzVector primaryVertex = simVertices[0].position()/10.;
145  // SImVertices are now in cm
146  // Also : position is copied until SimVertex switches to Mathcore.
147  // XYZTLorentzVector primaryVertex = simVertices[0].position();
148  // The next 5 lines to be then replaced by the previous line
150  simVertices[0].position().y(),
151  simVertices[0].position().z(),
152  simVertices[0].position().t());
153  //
154  //myFilter->setMainVertex(primaryVertex);
155  // Add the main vertex to the list.
156  addSimVertex(/*myFilter->vertex()*/primaryVertex, -1, FSimVertexType::PRIMARY_VERTEX);
157  myVertices[0] = 0;
158 
159  for( unsigned trackId=0; trackId<nTks; ++trackId ) {
160 
161  // The track
162  const SimTrack& track = simTracks[trackId];
163  // std::cout << std::endl << "SimTrack " << trackId << " " << track << std::endl;
164 
165  // The origin vertex
166  int vertexId = track.vertIndex();
167  const SimVertex& vertex = simVertices[vertexId];
168  //std::cout << "Origin vertex " << vertexId << " " << vertex << std::endl;
169 
170  // The mother track
171  int motherId = -1;
172  if( !vertex.noParent() ) { // there is a parent to this vertex
173  // geant id of the mother
174  unsigned motherGeantId = vertex.parentIndex();
175  std::map<unsigned, unsigned >::iterator association
176  = geantToIndex.find( motherGeantId );
177  if(association != geantToIndex.end() )
178  motherId = association->second;
179  }
180  int originId = motherId == - 1 ? -1 : myTracks[motherId];
181  //std::cout << "Origin id " << originId << std::endl;
182 
183  /*
184  if ( endVertex.find(trackId) != endVertex.end() )
185  std::cout << "End vertex id = " << endVertex[trackId] << std::endl;
186  else
187  std::cout << "No endVertex !!! " << std::endl;
188  std::cout << "Tracker surface position " << track.trackerSurfacePosition() << std::endl;
189  */
190 
191  // Add the vertex (if it does not already exist!)
192  XYZTLorentzVector position(vertex.position().px(),vertex.position().py(),
193  vertex.position().pz(),vertex.position().e());
194  if ( myVertices[vertexId] == -1 )
195  // Momentum and position are copied until SimTrack and SimVertex
196  // switch to Mathcore.
197  // myVertices[vertexId] = addSimVertex(vertex.position(),originId);
198  // The next line to be then replaced by the previous line
199  myVertices[vertexId] = addSimVertex(position,originId);
200 
201  // Add the track (with protection for brem'ing electrons and muons)
202  int motherType = motherId == -1 ? 0 : simTracks[motherId].type();
203 
204  bool notBremInDetector =
205  (abs(motherType) != 11 && std::abs(motherType) != 13) ||
206  motherType != track.type() ||
207  position.Perp2() < lateVertexPosition ;
208 
209  if ( notBremInDetector ) {
210  // Momentum and position are copied until SimTrack and SimVertex
211  // switch to Mathcore.
212  // RawParticle part(track.momentum(), vertex.position());
213  // The next 3 lines to be then replaced by the previous line
214  XYZTLorentzVector momentum(track.momentum().px(),track.momentum().py(),
215  track.momentum().pz(),track.momentum().e());
216  RawParticle part = makeParticle(theTable(),track.type(),momentum,position);
217  //
218  //std::cout << "Ctau = " << part.PDGcTau() << std::endl;
219  // Don't save tracks that have decayed immediately but for which no daughters
220  // were saved (probably due to cuts on E, pT and eta)
221  // if ( part.PDGcTau() > 0.1 || endVertex.find(trackId) != endVertex.end() )
222  myTracks[trackId] = addSimTrack(&part,myVertices[vertexId],track.genpartIndex());
223  if ( myTracks[trackId] >= 0 ) {
224  (*theSimTracks)[ myTracks[trackId] ].setTkPosition(track.trackerSurfacePosition());
225  (*theSimTracks)[ myTracks[trackId] ].setTkMomentum(track.trackerSurfaceMomentum());
226  }
227  } else {
228 
229  myTracks[trackId] = myTracks[motherId];
230  if ( myTracks[trackId] >= 0 ) {
231  (*theSimTracks)[ myTracks[trackId] ].setTkPosition(track.trackerSurfacePosition());
232  (*theSimTracks)[ myTracks[trackId] ].setTkMomentum(track.trackerSurfaceMomentum());
233  }
234  }
235 
236  }
237 
238  // Now loop over the remaining end vertices !
239  for( unsigned vertexId=0; vertexId<nVtx; ++vertexId ) {
240 
241  // if the vertex is already saved, just ignore.
242  if ( myVertices[vertexId] != -1 ) continue;
243 
244  // The yet unused vertex
245  const SimVertex& vertex = simVertices[vertexId];
246 
247  // The mother track
248  int motherId = -1;
249  if( !vertex.noParent() ) { // there is a parent to this vertex
250 
251  // geant id of the mother
252  unsigned motherGeantId = vertex.parentIndex();
253  std::map<unsigned, unsigned >::iterator association
254  = geantToIndex.find( motherGeantId );
255  if(association != geantToIndex.end() )
256  motherId = association->second;
257  }
258  int originId = motherId == - 1 ? -1 : myTracks[motherId];
259 
260  // Add the vertex
261  // Momentum and position are copied until SimTrack and SimVertex
262  // switch to Mathcore.
263  // myVertices[vertexId] = addSimVertex(vertex.position(),originId);
264  // The next 3 lines to be then replaced by the previous line
265  XYZTLorentzVector position(vertex.position().px(),vertex.position().py(),
266  vertex.position().pz(),vertex.position().e());
267  myVertices[vertexId] = addSimVertex(position,originId);
268  }
269 
270  // Finally, propagate all particles to the calorimeters
271  BaseParticlePropagator myPart;
272  XYZTLorentzVector mom;
274 
275 
276  // Loop over the tracks
277  for( int fsimi=0; fsimi < (int)nTracks() ; ++fsimi) {
278 
279 
280  FSimTrack& myTrack = track(fsimi);
281  double trackerSurfaceTime = myTrack.vertex().position().t()
282  + myTrack.momentum().e()/myTrack.momentum().pz()
283  * ( myTrack.trackerSurfacePosition().z()
284  - myTrack.vertex().position().z() );
285  pos = XYZTLorentzVector(myTrack.trackerSurfacePosition().x(),
286  myTrack.trackerSurfacePosition().y(),
287  myTrack.trackerSurfacePosition().z(),
288  trackerSurfaceTime);
289  mom = XYZTLorentzVector(myTrack.trackerSurfaceMomentum().x(),
290  myTrack.trackerSurfaceMomentum().y(),
291  myTrack.trackerSurfaceMomentum().z(),
292  myTrack.trackerSurfaceMomentum().t());
293 
294  if ( mom.T() > 0. ) {
295  // The particle to be propagated
296  myPart = BaseParticlePropagator(RawParticle(mom,pos,myTrack.charge()),0.,0.,4.);
297 
298  // Propagate to Preshower layer 1
299  myPart.propagateToPreshowerLayer1(false);
300  if ( myTrack.notYetToEndVertex(myPart.particle().vertex()) && myPart.getSuccess()>0 )
301  myTrack.setLayer1(myPart.particle(),myPart.getSuccess());
302 
303  // Propagate to Preshower Layer 2
304  myPart.propagateToPreshowerLayer2(false);
305  if ( myTrack.notYetToEndVertex(myPart.particle().vertex()) && myPart.getSuccess()>0 )
306  myTrack.setLayer2(myPart.particle(),myPart.getSuccess());
307 
308  // Propagate to Ecal Endcap
309  myPart.propagateToEcalEntrance(false);
310  if ( myTrack.notYetToEndVertex(myPart.particle().vertex()) )
311  myTrack.setEcal(myPart.particle(),myPart.getSuccess());
312 
313  // Propagate to HCAL entrance
314  myPart.propagateToHcalEntrance(false);
315  if ( myTrack.notYetToEndVertex(myPart.particle().vertex()) )
316  myTrack.setHcal(myPart.particle(),myPart.getSuccess());
317 
318  // Attempt propagation to HF for low pt and high eta
319  if ( myPart.particle().cos2ThetaV()>0.8 || mom.T() < 3. ) {
320  // Propagate to VFCAL entrance
321  myPart.propagateToVFcalEntrance(false);
322  if ( myTrack.notYetToEndVertex(myPart.particle().vertex()) )
323  myTrack.setVFcal(myPart.particle(),myPart.getSuccess());
324 
325  // Otherwise propagate to the HCAL exit and HO.
326  } else {
327  // Propagate to HCAL exit
328  myPart.propagateToHcalExit(false);
329  if ( myTrack.notYetToEndVertex(myPart.particle().vertex()) )
330  myTrack.setHcalExit(myPart.particle(),myPart.getSuccess());
331  // Propagate to HOLayer entrance
332  myPart.setMagneticField(0);
333  myPart.propagateToHOLayer(false);
334  if ( myTrack.notYetToEndVertex(myPart.particle().vertex()) )
335  myTrack.setHO(myPart.particle(),myPart.getSuccess());
336  }
337  }
338  }
339 }
double lateVertexPosition
const math::XYZVectorD & trackerSurfacePosition() const
Definition: SimTrack.h:37
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.
float charge() const
charge
Definition: FSimTrack.h:51
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.
bool propagateToPreshowerLayer1(bool first=true)
const XYZTLorentzVector & momentum() const
Temporary (until move of SimTrack to Mathcore) - No! Actually very useful.
Definition: FSimTrack.h:204
const HepPDT::ParticleDataTable * theTable() const
Get the pointer to the particle data table.
Definition: FBaseSimEvent.h:57
void setEcal(const RawParticle &pp, int success)
Set the ecal variables.
Definition: FSimTrack.cc:81
int getSuccess() const
Has propagation been performed and was barrel or endcap reached ?
void setLayer2(const RawParticle &pp, int success)
Set the preshower layer2 variables.
Definition: FSimTrack.cc:74
void clear()
clear the FBaseSimEvent content before the next event
void setMagneticField(double b)
Set the magnetic field.
RawParticle const & particle() const
The particle being propagated.
bool notYetToEndVertex(const XYZTLorentzVector &pos) const
Compare the end vertex position with another position.
Definition: FSimTrack.cc:45
FSimVertex & vertex(int id) const
Return vertex with given Id.
RawParticle makeParticle(HepPDT::ParticleDataTable const *, int id, const math::XYZTLorentzVector &p)
Definition: makeParticle.cc:29
bool propagateToVFcalEntrance(bool first=true)
void setLayer1(const RawParticle &pp, int success)
Set the preshower layer1 variables.
Definition: FSimTrack.cc:67
int parentIndex() const
Definition: SimVertex.h:29
const math::XYZTLorentzVector & position() const
Temporary (until CMSSW moves to Mathcore) - No ! Actually very useful.
Definition: FSimVertex.h:49
unsigned int nTracks() const
Number of tracks.
Definition: FBaseSimEvent.h:84
bool propagateToHcalExit(bool first=true)
int genpartIndex() const
index of the corresponding Generator particle in the Event container (-1 if no Genpart) ...
Definition: SimTrack.h:34
double cos2ThetaV() const
Definition: RawParticle.h:300
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const math::XYZTLorentzVectorD & position() const
Definition: CoreSimVertex.h:21
bool propagateToEcalEntrance(bool first=true)
int vertIndex() const
index of the vertex in the Event container (-1 if no vertex)
Definition: SimTrack.h:30
const XYZTLorentzVector & vertex() const
the vertex fourvector
Definition: RawParticle.h:339
part
Definition: HCALResponse.h:20
const math::XYZTLorentzVectorD & trackerSurfaceMomentum() const
Definition: SimTrack.h:39
void setHcalExit(const RawParticle &pp, int success)
Set the hcal exit variables.
Definition: FSimTrack.cc:102
int type() const
particle type (HEP PDT convension)
Definition: CoreSimTrack.h:22
bool propagateToHcalEntrance(bool first=true)
const math::XYZTLorentzVectorD & momentum() const
Definition: CoreSimTrack.h:19
static int position[264][3]
Definition: ReadPGInfo.cc:509
void setHO(const RawParticle &pp, int success)
Set the ho variables.
Definition: FSimTrack.cc:108
void setVFcal(const RawParticle &pp, int success)
Set the hcal variables.
Definition: FSimTrack.cc:95
void setHcal(const RawParticle &pp, int success)
Set the hcal variables.
Definition: FSimTrack.cc:88
const FSimVertex vertex() const
Origin vertex.
bool noParent() const
Definition: SimVertex.h:30
bool propagateToHOLayer(bool first=true)
bool propagateToPreshowerLayer2(bool first=true)
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:27
FSimTrack & track(int id) const
Return track with given Id.
const KineParticleFilter& FBaseSimEvent::filter ( ) const
inline
std::vector<HepMC::GenParticle*>* FBaseSimEvent::genparts ( ) const
inlineprotected

The pointer to the vector of GenParticle's.

Definition at line 150 of file FBaseSimEvent.h.

150  {
151  return theGenParticles;
152  }
std::vector< HepMC::GenParticle * > * theGenParticles
void FBaseSimEvent::initializePdt ( const HepPDT::ParticleDataTable aPdt)

Initialize the particle data table.

Definition at line 90 of file FBaseSimEvent.cc.

References pdt.

Referenced by FamosManager::setupGeometryAndField().

90  {
91 
92  pdt = aPdt;
93 
94 }
const ParticleDataTable * pdt
unsigned int FBaseSimEvent::nChargedTracks ( ) const
inline

Number of "reconstructed" charged tracks.

Definition at line 99 of file FBaseSimEvent.h.

References FSimVertexType::ANY, ev, GenParticle::GenParticle, mps_fire::i, AlCaHLTBitMon_ParallelJobs::p, and HiIsolationCommonParameters_cff::track.

99  {
100  return nChargedParticleTracks;
101  }
unsigned int nChargedParticleTracks
unsigned int FBaseSimEvent::nGenParts ( ) const
inline

Number of generator particles.

Definition at line 94 of file FBaseSimEvent.h.

Referenced by addParticles(), and FSimEvent::nGenParts().

94  {
95  return nGenParticles;
96  }
unsigned int nGenParticles
unsigned int FBaseSimEvent::nTracks ( ) const
inline

Number of tracks.

Definition at line 84 of file FBaseSimEvent.h.

Referenced by fill(), FSimEvent::nTracks(), and print().

84  {
85  return nSimTracks;
86  }
unsigned int nSimTracks
unsigned int FBaseSimEvent::nVertices ( ) const
inline

Number of vertices.

Definition at line 89 of file FBaseSimEvent.h.

Referenced by FSimEvent::nVertices(), and print().

89  {
90  return nSimVertices;
91  }
unsigned int nSimVertices
void FBaseSimEvent::print ( void  ) const

print the FBaseSimEvent in an intelligible way

Definition at line 690 of file FBaseSimEvent.cc.

References gather_cfg::cout, mps_fire::i, createfilelist::int, nTracks(), nVertices(), track(), and vertexType().

Referenced by CalorimetryManager::reconstruct().

690  {
691 
692  std::cout << " Id Gen Name eta phi pT E Vtx1 "
693  << " x y z "
694  << "Moth Vtx2 eta phi R Z Daughters Ecal?" << std::endl;
695 
696  for( int i=0; i<(int)nTracks(); i++ )
697  std::cout << track(i) << std::endl;
698 
699  for( int i=0; i<(int)nVertices(); i++ )
700  std::cout << "i = " << i << " " << vertexType(i) << std::endl;
701 
702 
703 
704 }
unsigned int nVertices() const
Number of vertices.
Definition: FBaseSimEvent.h:89
FSimVertexType & vertexType(int id) const
Return vertex with given Id.
unsigned int nTracks() const
Number of tracks.
Definition: FBaseSimEvent.h:84
FSimTrack & track(int id) const
Return track with given Id.
void FBaseSimEvent::printMCTruth ( const HepMC::GenEvent hev)

print the original MCTruth event

Definition at line 595 of file FBaseSimEvent.cc.

References class-composition::children, gather_cfg::cout, PVValHelper::eta, alignBH_cfg::fixed, GenParticle::GenParticle, triggerObjects_cff::id, gen::k, dataset::name, nullptr, AlCaHLTBitMon_ParallelJobs::p, source_particleGun_cfi::ParticleID, pdt, and AlCaHLTBitMon_QueryRunRegistry::string.

595  {
596 
597  std::cout << "Id Gen Name eta phi pT E Vtx1 "
598  << " x y z "
599  << "Moth Vtx2 eta phi R Z Da1 Da2 Ecal?" << std::endl;
600 
601  for ( HepMC::GenEvent::particle_const_iterator
602  piter = myGenEvent.particles_begin();
603  piter != myGenEvent.particles_end();
604  ++piter ) {
605 
606  HepMC::GenParticle* p = *piter;
607  /* */
608  int partId = p->pdg_id();
610 
611  if ( pdt->particle(ParticleID(partId)) !=nullptr ) {
612  name = (pdt->particle(ParticleID(partId)))->name();
613  } else {
614  name = "none";
615  }
616 
617  XYZTLorentzVector momentum1(p->momentum().px(),
618  p->momentum().py(),
619  p->momentum().pz(),
620  p->momentum().e());
621 
622  int vertexId1 = 0;
623 
624  if ( !p->production_vertex() ) continue;
625 
626  XYZVector vertex1 (p->production_vertex()->position().x()/10.,
627  p->production_vertex()->position().y()/10.,
628  p->production_vertex()->position().z()/10.);
629  vertexId1 = p->production_vertex()->barcode();
630 
631  std::cout.setf(std::ios::fixed, std::ios::floatfield);
632  std::cout.setf(std::ios::right, std::ios::adjustfield);
633 
634  std::cout << std::setw(4) << p->barcode() << " "
635  << name;
636 
637  for(unsigned int k=0;k<11-name.length() && k<12; k++) std::cout << " ";
638 
639  double eta = momentum1.eta();
640  if ( eta > +10. ) eta = +10.;
641  if ( eta < -10. ) eta = -10.;
642  std::cout << std::setw(6) << std::setprecision(2) << eta << " "
643  << std::setw(6) << std::setprecision(2) << momentum1.phi() << " "
644  << std::setw(7) << std::setprecision(2) << momentum1.pt() << " "
645  << std::setw(7) << std::setprecision(2) << momentum1.e() << " "
646  << std::setw(4) << vertexId1 << " "
647  << std::setw(6) << std::setprecision(1) << vertex1.x() << " "
648  << std::setw(6) << std::setprecision(1) << vertex1.y() << " "
649  << std::setw(6) << std::setprecision(1) << vertex1.z() << " ";
650 
651  const HepMC::GenParticle* mother =
652  *(p->production_vertex()->particles_in_const_begin());
653 
654  if ( mother )
655  std::cout << std::setw(4) << mother->barcode() << " ";
656  else
657  std::cout << " " ;
658 
659  if ( p->end_vertex() ) {
660  XYZTLorentzVector vertex2(p->end_vertex()->position().x()/10.,
661  p->end_vertex()->position().y()/10.,
662  p->end_vertex()->position().z()/10.,
663  p->end_vertex()->position().t()/10.);
664  int vertexId2 = p->end_vertex()->barcode();
665 
666  std::vector<const HepMC::GenParticle*> children;
667  HepMC::GenVertex::particles_out_const_iterator firstDaughterIt =
668  p->end_vertex()->particles_out_const_begin();
669  HepMC::GenVertex::particles_out_const_iterator lastDaughterIt =
670  p->end_vertex()->particles_out_const_end();
671  for ( ; firstDaughterIt != lastDaughterIt ; ++firstDaughterIt ) {
672  children.push_back(*firstDaughterIt);
673  }
674 
675  std::cout << std::setw(4) << vertexId2 << " "
676  << std::setw(6) << std::setprecision(2) << vertex2.eta() << " "
677  << std::setw(6) << std::setprecision(2) << vertex2.phi() << " "
678  << std::setw(5) << std::setprecision(1) << vertex2.pt() << " "
679  << std::setw(6) << std::setprecision(1) << vertex2.z() << " ";
680  for ( unsigned id=0; id<children.size(); ++id )
681  std::cout << std::setw(4) << children[id]->barcode() << " ";
682  }
683  std::cout << std::endl;
684 
685  }
686 
687 }
const ParticleDataTable * pdt
#define nullptr
int k[5][pyjets_maxn]
math::XYZVector XYZVector
Definition: RawParticle.h:28
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:27
const HepPDT::ParticleDataTable* FBaseSimEvent::theTable ( ) const
inline

Get the pointer to the particle data table.

Definition at line 57 of file FBaseSimEvent.h.

References hitfit::clear(), lumiContext::fill, and edm::print().

Referenced by addParticles(), addSimTrack(), fill(), FSimTrack::FSimTrack(), CalorimetryManager::MuonMipSimulation(), and TrajectoryManager::reconstruct().

57  {
58  return pdt;
59  }
const ParticleDataTable * pdt
FSimTrack& FBaseSimEvent::track ( int  id) const
inline
std::vector<FSimTrack>* FBaseSimEvent::tracks ( void  ) const
inlineprotected

The pointer to the vector of FSimTrack's.

Definition at line 140 of file FBaseSimEvent.h.

140  {
141  return theSimTracks;
142  }
std::vector< FSimTrack > * theSimTracks
FSimVertex& FBaseSimEvent::vertex ( int  id) const
inline

Return vertex with given Id.

Referenced by addParticles(), addSimTrack(), Tau.Tau::dxy(), 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
inlineprotected

The pointer to the vector of FSimVertex's.

Definition at line 145 of file FBaseSimEvent.h.

145  {
146  return theSimVertices;
147  }
std::vector< FSimVertex > * theSimVertices

Member Data Documentation

unsigned int FBaseSimEvent::initialSize
private

Definition at line 172 of file FBaseSimEvent.h.

Referenced by FBaseSimEvent().

double FBaseSimEvent::lateVertexPosition
private

Definition at line 183 of file FBaseSimEvent.h.

Referenced by addParticles(), FBaseSimEvent(), and fill().

KineParticleFilter* FBaseSimEvent::myFilter
private

The particle filter.

Definition at line 175 of file FBaseSimEvent.h.

Referenced by ~FBaseSimEvent().

unsigned int FBaseSimEvent::nChargedParticleTracks
private

Definition at line 166 of file FBaseSimEvent.h.

Referenced by addChargedTrack(), chargedTrack(), and clear().

unsigned int FBaseSimEvent::nGenParticles
private

Definition at line 165 of file FBaseSimEvent.h.

Referenced by addParticles(), and clear().

unsigned int FBaseSimEvent::nSimTracks
private

Definition at line 163 of file FBaseSimEvent.h.

Referenced by addSimTrack(), and clear().

unsigned int FBaseSimEvent::nSimVertices
private

Definition at line 164 of file FBaseSimEvent.h.

Referenced by addSimVertex(), and clear().

const ParticleDataTable* FBaseSimEvent::pdt
private

Definition at line 181 of file FBaseSimEvent.h.

Referenced by initializePdt(), and printMCTruth().

double FBaseSimEvent::sigmaVerteX
private

Definition at line 177 of file FBaseSimEvent.h.

double FBaseSimEvent::sigmaVerteY
private

Definition at line 178 of file FBaseSimEvent.h.

double FBaseSimEvent::sigmaVerteZ
private

Definition at line 179 of file FBaseSimEvent.h.

unsigned int FBaseSimEvent::theChargedSize
private

Definition at line 171 of file FBaseSimEvent.h.

Referenced by addChargedTrack(), and FBaseSimEvent().

std::vector<unsigned>* FBaseSimEvent::theChargedTracks
private

Definition at line 161 of file FBaseSimEvent.h.

Referenced by addChargedTrack(), chargedTrack(), FBaseSimEvent(), and ~FBaseSimEvent().

FSimVertexTypeCollection* FBaseSimEvent::theFSimVerticesType
private

Definition at line 158 of file FBaseSimEvent.h.

Referenced by addSimVertex(), FBaseSimEvent(), and ~FBaseSimEvent().

std::vector<HepMC::GenParticle*>* FBaseSimEvent::theGenParticles
private

Definition at line 159 of file FBaseSimEvent.h.

Referenced by addParticles(), embdGenpart(), FBaseSimEvent(), and ~FBaseSimEvent().

unsigned int FBaseSimEvent::theGenSize
private

Definition at line 170 of file FBaseSimEvent.h.

Referenced by addParticles(), and FBaseSimEvent().

std::vector<FSimTrack>* FBaseSimEvent::theSimTracks
private

Definition at line 156 of file FBaseSimEvent.h.

Referenced by addSimTrack(), FBaseSimEvent(), and ~FBaseSimEvent().

std::vector<FSimVertex>* FBaseSimEvent::theSimVertices
private

Definition at line 157 of file FBaseSimEvent.h.

Referenced by addSimVertex(), FBaseSimEvent(), and ~FBaseSimEvent().

unsigned int FBaseSimEvent::theTrackSize
private

Definition at line 168 of file FBaseSimEvent.h.

Referenced by addSimTrack(), and FBaseSimEvent().

unsigned int FBaseSimEvent::theVertexSize
private

Definition at line 169 of file FBaseSimEvent.h.

Referenced by addSimVertex(), and FBaseSimEvent().