// $Id: Geant4Hits.cpp 513 2013-04-05 14:31:53Z gaede $ //==================================================================== // AIDA Detector description implementation for LCD //-------------------------------------------------------------------- // // Author : M.Frank // //==================================================================== // Framework include files #include "DD4hep/InstanceCount.h" #include "DDG4/Geant4Data.h" // Geant4 include files #include "G4Allocator.hh" #include "G4OpticalPhoton.hh" using namespace std; using namespace DD4hep; using namespace DD4hep::Simulation; /// Default destructor SimpleHit::~SimpleHit() { } /// Extract the MC contribution for a given hit from the step information SimpleHit::Contribution SimpleHit::extractContribution(G4Step* step) { G4Track* trk = step->GetTrack(); double energy_deposit = (trk->GetDefinition() == G4OpticalPhoton::OpticalPhotonDefinition()) ? trk->GetTotalEnergy() : step->GetTotalEnergyDeposit(); Contribution contrib(trk->GetTrackID(), trk->GetDefinition()->GetPDGEncoding(), energy_deposit, trk->GetGlobalTime()); return contrib; } /// Default constructor SimpleTracker::Hit::Hit() : SimpleHit(), position(), momentum(), length(0.0), truth() { InstanceCount::increment(this); } /// Standard initializing constructor SimpleTracker::Hit::Hit(int track_id, int pdg_id, double deposit, double time_stamp) : SimpleHit(), position(), momentum(), length(0.0), truth(track_id, pdg_id, deposit, time_stamp) { InstanceCount::increment(this); } /// Default destructor SimpleTracker::Hit::~Hit() { InstanceCount::decrement(this); } /// Assignment operator SimpleTracker::Hit& SimpleTracker::Hit::operator=(const Hit& c) { position = c.position; momentum = c.momentum; length = c.length; truth = c.truth; return *this; } /// Clear hit content SimpleTracker::Hit& SimpleTracker::Hit::clear() { position.SetXYZ(0,0,0); momentum.SetXYZ(0,0,0); length = 0.0; truth.clear(); return *this; } /// Store Geant4 point and step information into tracker hit structure. SimpleTracker::Hit& SimpleTracker::Hit::storePoint(G4Step* step, G4StepPoint* pnt) { G4Track* trk = step->GetTrack(); G4ThreeVector pos = pnt->GetPosition(); G4ThreeVector mom = pnt->GetMomentum(); truth.trackID = trk->GetTrackID(); truth.pdgID = trk->GetDefinition()->GetPDGEncoding(); truth.deposit = step->GetTotalEnergyDeposit(); truth.time = trk->GetGlobalTime(); position.SetXYZ(pos.x(),pos.y(),pos.z()); momentum.SetXYZ(mom.x(),mom.y(),mom.z()); length = 0; return *this; } /// Standard constructor SimpleCalorimeter::Hit::Hit(const Position& pos) : SimpleHit(), position(pos), truth(), energyDeposit(0) { InstanceCount::increment(this); } /// Default destructor SimpleCalorimeter::Hit::~Hit() { InstanceCount::decrement(this); }