Newer
Older
Markus Frank
committed
//==========================================================================
// AIDA Detector description implementation for LCD
Markus Frank
committed
//--------------------------------------------------------------------------
// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
Markus Frank
committed
// All rights reserved.
Markus Frank
committed
// For the licensing terms see $DD4hepINSTALL/LICENSE.
// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
Markus Frank
committed
// Author : M.Frank
//
//==========================================================================
#include "DD4hep/Printout.h"
#include "DD4hep/InstanceCount.h"
#include "DDG4/Geant4Data.h"
#include "G4Step.hh"
#include "G4Allocator.hh"
#include "G4OpticalPhoton.hh"
using namespace std;
using namespace DD4hep;
using namespace DD4hep::Simulation;
/// Default constructor
SimpleRun::SimpleRun()
Markus Frank
committed
: runID(-1), numEvents(0) {
InstanceCount::increment(this);
}
/// Default destructor
SimpleRun::~SimpleRun() {
InstanceCount::decrement(this);
}
/// Default constructor
SimpleEvent::SimpleEvent()
Markus Frank
committed
: runID(-1), eventID(-1) {
InstanceCount::increment(this);
}
/// Default destructor
SimpleEvent::~SimpleEvent() {
InstanceCount::decrement(this);
}
/// Default destructor
DataExtension::~DataExtension() {
}
Geant4HitData::Geant4HitData()
Markus Frank
committed
: cellID(0), extension() {
InstanceCount::increment(this);
}
Geant4HitData::~Geant4HitData() {
InstanceCount::decrement(this);
/// Extract the MC contribution for a given hit from the step information
Geant4HitData::Contribution Geant4HitData::extractContribution(const G4Step* step) {
Geant4StepHandler h(step);
double deposit =
(h.trackDef() == G4OpticalPhoton::OpticalPhotonDefinition()) ? h.trkEnergy() : h.totalEnergy();
const G4ThreeVector& pre = h.prePosG4();
const G4ThreeVector& post = h.postPosG4();
float pos[] = {float((pre.x()+post.x())/2.0),float((pre.y()+post.y())/2.0),float((pre.z()+post.z())/2.0) };
Contribution contrib(h.trkID(),h.trkPdgID(),deposit,h.trkTime(),pos);
return contrib;
}
/// Extract the MC contribution for a given hit from the step information with BirksLaw effect option
Geant4HitData::Contribution Geant4HitData::extractContribution(const G4Step* step, bool ApplyBirksLaw) {
Geant4StepHandler h(step);
if ( ApplyBirksLaw == true ) h.doApplyBirksLaw();
double deposit =
(h.trackDef() == G4OpticalPhoton::OpticalPhotonDefinition()) ? h.trkEnergy() : h.totalEnergy();
const G4ThreeVector& pre = h.prePosG4();
const G4ThreeVector& post = h.postPosG4();
float pos[] = {float((pre.x()+post.x())/2.0),float((pre.y()+post.y())/2.0),float((pre.z()+post.z())/2.0) };
Contribution contrib(h.trkID(),h.trkPdgID(),deposit,h.trkTime(),pos);
return contrib;
}
/// Default constructor
Geant4Tracker::Hit::Hit()
Markus Frank
committed
: Geant4HitData(), position(), momentum(), length(0.0), truth(), energyDeposit(0.0) {
InstanceCount::increment(this);
}
/// Standard initializing constructor
Geant4Tracker::Hit::Hit(int track_id, int pdg_id, double deposit, double time_stamp)
Markus Frank
committed
: Geant4HitData(), position(), momentum(), length(0.0), truth(track_id, pdg_id, deposit, time_stamp), energyDeposit(deposit) {
InstanceCount::increment(this);
}
/// Default destructor
Geant4Tracker::Hit::~Hit() {
InstanceCount::decrement(this);
}
/// Assignment operator
Geant4Tracker::Hit& Geant4Tracker::Hit::operator=(const Hit& c) {
if ( &c != this ) {
position = c.position;
momentum = c.momentum;
length = c.length;
truth = c.truth;
}
return *this;
}
/// Clear hit content
Geant4Tracker::Hit& Geant4Tracker::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.
Geant4Tracker::Hit& Geant4Tracker::Hit::storePoint(const G4Step* step, const G4StepPoint* pnt) {
G4Track* trk = step->GetTrack();
G4ThreeVector pos = pnt->GetPosition();
G4ThreeVector mom = pnt->GetMomentum();
truth.trackID = trk->GetTrackID();
Markus Frank
committed
truth.pdgID = trk->GetDefinition()->GetPDGEncoding();
truth.deposit = step->GetTotalEnergyDeposit();
Markus Frank
committed
truth.time = trk->GetGlobalTime();
position.SetXYZ(pos.x(), pos.y(), pos.z());
momentum.SetXYZ(mom.x(), mom.y(), mom.z());
/// Default constructor (for ROOT)
Geant4Calorimeter::Hit::Hit()
Markus Frank
committed
: Geant4HitData(), position(), truth(), energyDeposit(0) {
InstanceCount::increment(this);
}
Geant4Calorimeter::Hit::Hit(const Position& pos)
Markus Frank
committed
: Geant4HitData(), position(pos), truth(), energyDeposit(0) {
InstanceCount::increment(this);
}
/// Default destructor
Geant4Calorimeter::Hit::~Hit() {