CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/SimG4Core/Application/interface/G4SimTrack.h

Go to the documentation of this file.
00001 #ifndef SimG4Core_G4SimTrack_H
00002 #define SimG4Core_G4SimTrack_H
00003 
00004 #include "DataFormats/Math/interface/Vector3D.h"
00005 #include "DataFormats/Math/interface/LorentzVector.h"
00006 #include <vector> 
00007 #include <cmath>
00008 
00009 class G4SimTrack
00010 {
00011 public:
00012   G4SimTrack() {}
00013   
00014   G4SimTrack(int iid, int ipart, const math::XYZVectorD & ip, double ie)
00015     : id_(iid), ipart_(ipart), ip_(ip), ie_(ie),ivert_(-1),igenpart_(-1), parentID_(-1),
00016       parentMomentum_(math::XYZVectorD(0.,0.,0.)),tkSurfacePosition_(math::XYZVectorD(0.,0.,0.)),
00017       tkSurfaceMomentum_(math::XYZTLorentzVectorD(0.,0.,0.,0.)){} 
00018   
00019   G4SimTrack(int iid, int ipart, const math::XYZVectorD& ip, double ie,
00020              int iv,  int ig, const math::XYZVectorD& ipmom) 
00021     : id_(iid),ipart_(ipart),ip_(ip),ie_(ie),ivert_(iv),igenpart_(ig),parentMomentum_(ipmom),
00022       tkSurfacePosition_(math::XYZVectorD(0.,0.,0.)),tkSurfaceMomentum_(math::XYZTLorentzVectorD(0.,0.,0.,0.)) {}
00023 
00024   G4SimTrack(int iid, int ipart, const math::XYZVectorD& ip, double ie,
00025              int iv,  int ig, const math::XYZVectorD& ipmom, 
00026              const math::XYZVectorD & tkpos, const math::XYZTLorentzVectorD & tkmom) 
00027     : id_(iid),ipart_(ipart),ip_(ip),ie_(ie),ivert_(iv),igenpart_(ig),parentMomentum_(ipmom),
00028       tkSurfacePosition_(tkpos),tkSurfaceMomentum_(tkmom) {}
00029 
00030   ~G4SimTrack() {}
00031 
00032   const int id() const { return id_; }
00033   const int part() const { return ipart_; }
00034   const math::XYZVectorD & momentum() const { return ip_; }
00035   const double energy() const { return ie_; }
00036   int const ivert() const { return ivert_; }
00037   int const igenpart() const { return igenpart_; }
00038   // parent momentum at interaction
00039   const math::XYZVectorD & parentMomentum() const { return parentMomentum_; } 
00040   // Information at level of tracker surface
00041   const math::XYZVectorD & trackerSurfacePosition() const {return tkSurfacePosition_;}
00042   const math::XYZTLorentzVectorD & trackerSurfaceMomentum() const {return tkSurfaceMomentum_;}
00043   // parent track ID (only stored if parent momentum at interaction
00044   // is stored, else = -1)
00045   const int parentID() const { return parentID_; }
00046 private:
00047   int id_;
00048   int ipart_;
00049   math::XYZVectorD ip_;
00050   double ie_;
00051   int ivert_; 
00052   int igenpart_; 
00053   int parentID_;
00054   math::XYZVectorD parentMomentum_;
00055   math::XYZVectorD tkSurfacePosition_;
00056   math::XYZTLorentzVectorD tkSurfaceMomentum_;
00057 };
00058 
00059 #endif