9#include <beast/he3tube/simulation/SensitiveDetector.h>
10#include <beast/he3tube/dataobjects/He3tubeSimHit.h>
11#include <beast/he3tube/dataobjects/HE3G4TrackInfo.h>
13#include <framework/datastore/StoreArray.h>
14#include <framework/datastore/RelationArray.h>
18#include "G4VProcess.hh"
30 Simulation::SensitiveDetectorBase(
"He3tubeSensitiveDetector",
Const::invalidDetector)
54 const G4Track& track = *
step->GetTrack();
55 const int trackID = track.GetTrackID();
56 const double depEnergy =
step->GetTotalEnergyDeposit() * CLHEP::MeV;
57 const double nielEnergy =
step->GetNonIonizingEnergyDeposit() * CLHEP::MeV;
58 const G4ThreeVector G4tkPos =
step->GetTrack()->GetPosition();
60 tkPos[0] = G4tkPos.x() * CLHEP::cm;
61 tkPos[1] = G4tkPos.y() * CLHEP::cm;
62 tkPos[2] = G4tkPos.z() * CLHEP::cm;
63 const G4ThreeVector G4tkMom =
step->GetTrack()->GetMomentum();
65 tkMom[0] = G4tkMom.x() * CLHEP::MeV;
66 tkMom[1] = G4tkMom.y() * CLHEP::MeV;
67 tkMom[2] = G4tkMom.z() * CLHEP::MeV;
68 const G4ThreeVector G4tkMomDir =
step->GetTrack()->GetMomentumDirection();
70 tkMomDir[0] = G4tkMomDir.x() * CLHEP::MeV;
71 tkMomDir[1] = G4tkMomDir.y() * CLHEP::MeV;
72 tkMomDir[2] = G4tkMomDir.z() * CLHEP::MeV;
73 const int tkPDG =
step->GetTrack()->GetDefinition()->GetPDGEncoding();
74 const double tkKEnergy =
step->GetTrack()->GetKineticEnergy();
75 const int detNb =
step->GetTrack()->GetVolume()->GetCopyNo();
76 const double GlTime =
step->GetPreStepPoint()->GetGlobalTime();
88 if (
step->GetTrack()->GetCreatorProcess() != 0) {
89 const G4VProcess* creator =
step->GetTrack()->GetCreatorProcess();
90 CPName = creator->GetProcessName();
91 if (G4StrUtil::contains(CPName,
"Neutron")) neuProc =
true;
97 if (track.GetNextVolume() != track.GetVolume() || track.GetTrackStatus() >= fStopAndKill) {
99 int PDG = mcparticle.getPDG();
100 float Mass = mcparticle.getMass();
101 float Energy = mcparticle.getEnergy();
103 vtx[0] = mcparticle.getProductionVertex().X();
104 vtx[1] = mcparticle.getProductionVertex().Y();
105 vtx[2] = mcparticle.getProductionVertex().Z();
107 mom[0] = mcparticle.getMomentum().X();
108 mom[1] = mcparticle.getMomentum().Y();
109 mom[2] = mcparticle.getMomentum().Z();
131 relMCSimHit.
add(trackID, hit->getArrayIndex(), 1.0);
150 int simhitNumber = HE3G4TrackInfos.
getEntries() - 1;
152 return (simhitNumber);
This class provides a set of constants for the framework.
Class HE3G4TrackInfo - Geant4 simulated hit for the Microtpc detector.
ClassHe3tubeSimHit - Geant4 simulated hit for the He3tube detector.
Low-level class to create/modify relations between StoreArrays.
void add(index_type from, index_type to, weight_type weight=1.0)
Add a new element to the relation.
static void registerMCParticleRelation(const std::string &name, RelationArray::EConsolidationAction ignoreAction=RelationArray::c_negativeWeight)
Register an relation involving MCParticles.
static Payload getInfo(Carrier &obj)
Static function to just return UserInformation attached to the obj of type Carrier.
bool registerInDataStore(DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut)
Register the object/array in the DataStore.
Accessor to arrays stored in the data store.
T * appendNew()
Construct a new T object at the end of the array.
int getEntries() const
Get the number of objects in the array.
int saveG4TrackInfo(int trackID, int PDG, float Mass, float Energy, float vtx[3], float mom[3])
Save saveG4TrackInfo into datastore.
SensitiveDetector()
Constructor.
bool step(G4Step *step, G4TouchableHistory *) override
Step processing method.
Abstract base class for different kinds of events.