CMS 3D CMS Logo

G4SimEvent.cc
Go to the documentation of this file.
3 
4 #include "G4SystemOfUnits.hh"
5 
6 class IdSort {
7 public:
8  bool operator()(const SimTrack& a, const SimTrack& b) { return a.trackId() < b.trackId(); }
9 };
10 
12  : hepMCEvent(nullptr),
13  weight_(0),
14  collisionPoint_(math::XYZTLorentzVectorD(0., 0., 0., 0.)),
15  nparam_(0),
16  param_(0) {}
17 
19  // per suggestion by Chris Jones, it's faster
20  // that delete back() and pop_back()
21  //
22  unsigned int i = 0;
23 
24  for (i = 0; i < g4tracks.size(); i++) {
25  delete g4tracks[i];
26  g4tracks[i] = nullptr;
27  }
28  g4tracks.clear();
29 
30  for (i = 0; i < g4vertices.size(); i++) {
31  delete g4vertices[i];
32  g4vertices[i] = nullptr;
33  }
34  g4vertices.clear();
35 }
36 
38  for (unsigned int i = 0; i < g4tracks.size(); i++) {
39  G4SimTrack* trk = g4tracks[i];
40  int ip = trk->part();
42  trk->momentum().x() / GeV, trk->momentum().y() / GeV, trk->momentum().z() / GeV, trk->energy() / GeV);
43  int iv = trk->ivert();
44  int ig = trk->igenpart();
45  int id = trk->id();
46  math::XYZVectorD tkpos(trk->trackerSurfacePosition().x() / cm,
47  trk->trackerSurfacePosition().y() / cm,
48  trk->trackerSurfacePosition().z() / cm);
50  trk->trackerSurfaceMomentum().y() / GeV,
51  trk->trackerSurfaceMomentum().z() / GeV,
52  trk->trackerSurfaceMomentum().e() / GeV);
53  // ip = particle ID as PDG
54  // pp = 4-momentum
55  // iv = corresponding G4SimVertex index
56  // ig = corresponding GenParticle index
57  SimTrack t = SimTrack(ip, p, iv, ig, tkpos, tkmom);
58  t.setTrackId(id);
59  t.setEventId(EncodedEventId(0));
60  if (trk->crossedBoundary())
61  t.setCrossedBoundaryVars(
63  c.push_back(t);
64  }
65  std::stable_sort(c.begin(), c.end(), IdSort());
66 }
67 
69  for (unsigned int i = 0; i < g4vertices.size(); i++) {
71  //
72  // starting 1_1_0_pre3, SimVertex stores in cm !!!
73  //
74  math::XYZVectorD v3(vtx->vertexPosition().x() / cm, vtx->vertexPosition().y() / cm, vtx->vertexPosition().z() / cm);
75  float t = vtx->vertexGlobalTime() / second;
76  int iv = vtx->parentIndex();
77  // vv = position
78  // t = global time
79  // iv = index of the parent in the SimEvent SimTrack container (-1 if no parent)
80  SimVertex v = SimVertex(v3, t, iv, i);
81  v.setProcessType(vtx->processType());
82  v.setEventId(EncodedEventId(0));
83  c.push_back(v);
84  }
85 }
mcMuonSeeds_cfi.SimTrack
SimTrack
Definition: mcMuonSeeds_cfi.py:10
G4SimEvent::~G4SimEvent
virtual ~G4SimEvent()
Definition: G4SimEvent.cc:18
G4SimEvent::g4tracks
std::vector< G4SimTrack * > g4tracks
Definition: G4SimEvent.h:44
mps_fire.i
i
Definition: mps_fire.py:428
G4SimVertex
Definition: G4SimVertex.h:9
SimVertex
Definition: SimVertex.h:5
G4SimTrack::getPositionAtBoundary
const math::XYZTLorentzVectorF & getPositionAtBoundary() const
Definition: G4SimTrack.h:86
G4SimTrack::getMomentumAtBoundary
const math::XYZTLorentzVectorF & getMomentumAtBoundary() const
Definition: G4SimTrack.h:87
G4SimTrack::ivert
int ivert() const
Definition: G4SimTrack.h:66
G4SimEvent::G4SimEvent
G4SimEvent()
Definition: G4SimEvent.cc:11
G4SimTrack::crossedBoundary
bool crossedBoundary() const
Definition: G4SimTrack.h:85
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
gpuVertexFinder::iv
int32_t *__restrict__ iv
Definition: gpuClusterTracksDBSCAN.h:42
math::XYZTLorentzVectorD
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:14
G4SimEvent::load
void load(edm::SimTrackContainer &c) const
Definition: G4SimEvent.cc:37
mcMuonSeeds_cfi.SimVertex
SimVertex
Definition: mcMuonSeeds_cfi.py:11
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
findQualityFiles.v
v
Definition: findQualityFiles.py:179
XYZTLorentzVectorD
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Definition: SimpleZSPJPTJetCorrector.cc:16
G4SimTrack
Definition: G4SimTrack.h:11
EncodedEventId
Definition: EncodedEventId.h:11
G4SimTrack::momentum
const math::XYZVectorD & momentum() const
Definition: G4SimTrack.h:64
G4SimTrack::energy
double energy() const
Definition: G4SimTrack.h:65
b
double b
Definition: hdecay.h:118
math::XYZVectorD
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > XYZVectorD
spatial vector with cartesian internal representation
Definition: Vector3D.h:8
a
double a
Definition: hdecay.h:119
G4SimTrack::igenpart
int igenpart() const
Definition: G4SimTrack.h:67
G4SimEvent.h
GeV
const double GeV
Definition: MathUtil.h:16
G4SimEvent::g4vertices
std::vector< G4SimVertex * > g4vertices
Definition: G4SimEvent.h:45
IdSort::operator()
bool operator()(const SimTrack &a, const SimTrack &b)
Definition: G4SimEvent.cc:8
G4SimTrack::part
int part() const
Definition: G4SimTrack.h:63
param_
struct @692 param_
G4SimTrack::trackerSurfaceMomentum
const math::XYZTLorentzVectorD & trackerSurfaceMomentum() const
Definition: G4SimTrack.h:72
extraflags_cff.vtx
vtx
Definition: extraflags_cff.py:18
edm::SimTrackContainer
std::vector< SimTrack > SimTrackContainer
Definition: SimTrackContainer.h:12
math
Definition: choleskyInversion.h:19
SimTrack
Definition: SimTrack.h:9
G4SimTrack::getIDAtBoundary
int getIDAtBoundary() const
Definition: G4SimTrack.h:88
G4SimTrack::trackerSurfacePosition
const math::XYZVectorD & trackerSurfacePosition() const
Definition: G4SimTrack.h:71
c
auto & c
Definition: CAHitNtupletGeneratorKernelsImpl.h:46
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
G4SimTrack::id
int id() const
Definition: G4SimTrack.h:62
edm::SimVertexContainer
std::vector< SimVertex > SimVertexContainer
Definition: SimVertexContainer.h:12
IdSort
Definition: G4SimEvent.cc:6
EncodedEventId.h