Go to the documentation of this file.00001 #include "SimG4Core/Application/interface/G4SimEvent.h"
00002 #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h"
00003
00004 #include "G4SystemOfUnits.hh"
00005
00006 class IdSort{
00007 public:
00008 bool operator()(const SimTrack& a, const SimTrack& b) {
00009 return a.trackId() < b.trackId();
00010 }
00011 };
00012
00013
00014 G4SimEvent::G4SimEvent() : hepMCEvent(0),
00015 weight_(0),
00016 collisionPoint_(math::XYZTLorentzVectorD(0.,0.,0.,0.)),
00017 nparam_(0),param_(0) {}
00018
00019 G4SimEvent::~G4SimEvent()
00020 {
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 unsigned int i = 0 ;
00039
00040 for ( i=0; i<g4tracks.size(); i++ )
00041 {
00042 delete g4tracks[i] ;
00043 g4tracks[i] = 0 ;
00044 }
00045 g4tracks.clear() ;
00046
00047 for ( i=0; i<g4vertices.size(); i++ )
00048 {
00049 delete g4vertices[i] ;
00050 g4vertices[i] = 0 ;
00051 }
00052 g4vertices.clear();
00053 }
00054
00055 void G4SimEvent::load(edm::SimTrackContainer & c) const
00056 {
00057 for (unsigned int i=0; i<g4tracks.size(); i++)
00058 {
00059 G4SimTrack * trk = g4tracks[i];
00060 int ip = trk->part();
00061 math::XYZTLorentzVectorD p( trk->momentum().x()/GeV,
00062 trk->momentum().y()/GeV,
00063 trk->momentum().z()/GeV,
00064 trk->energy()/GeV ) ;
00065 int iv = trk->ivert();
00066 int ig = trk->igenpart();
00067 int id = trk->id();
00068 math::XYZVectorD tkpos( trk->trackerSurfacePosition().x()/cm,
00069 trk->trackerSurfacePosition().y()/cm,
00070 trk->trackerSurfacePosition().z()/cm ) ;
00071 math::XYZTLorentzVectorD tkmom( trk->trackerSurfaceMomentum().x()/GeV,
00072 trk->trackerSurfaceMomentum().y()/GeV,
00073 trk->trackerSurfaceMomentum().z()/GeV,
00074 trk->trackerSurfaceMomentum().e()/GeV ) ;
00075
00076
00077
00078
00079 SimTrack t = SimTrack(ip,p,iv,ig,tkpos,tkmom);
00080 t.setTrackId(id);
00081 t.setEventId(EncodedEventId(0));
00082 c.push_back(t);
00083 }
00084 std::stable_sort(c.begin(),c.end(),IdSort());
00085
00086 }
00087
00088 void G4SimEvent::load(edm::SimVertexContainer & c) const
00089 {
00090 for (unsigned int i=0; i<g4vertices.size(); i++)
00091 {
00092 G4SimVertex * vtx = g4vertices[i];
00093
00094
00095
00096 math::XYZVectorD v3( vtx->vertexPosition().x()/cm,
00097 vtx->vertexPosition().y()/cm,
00098 vtx->vertexPosition().z()/cm ) ;
00099 float t = vtx->vertexGlobalTime()/second;
00100 int iv = vtx->parentIndex();
00101
00102
00103
00104 SimVertex v = SimVertex(v3,t,iv,i);
00105 v.setEventId(EncodedEventId(0));
00106 c.push_back(v);
00107 }
00108 }
00109