11 #include <beast/he3tube/simulation/SensitiveDetector.h>
12 #include <beast/he3tube/dataobjects/He3tubeSimHit.h>
13 #include <beast/he3tube/dataobjects/HE3G4TrackInfo.h>
15 #include <framework/datastore/StoreArray.h>
16 #include <framework/datastore/RelationArray.h>
20 #include "G4VProcess.hh"
32 Simulation::SensitiveDetectorBase(
"He3tubeSensitiveDetector", Const::invalidDetector)
36 StoreArray<MCParticle> mcParticles;
37 StoreArray<He3tubeSimHit> simHits;
38 StoreArray<HE3G4TrackInfo> HE3G4TrackInfos;
42 mcParticles.registerInDataStore();
43 simHits.registerInDataStore();
44 relMCSimHit.registerInDataStore();
45 HE3G4TrackInfos.registerInDataStore();
56 const G4Track& track = *
step->GetTrack();
57 const int trackID = track.GetTrackID();
58 const double depEnergy =
step->GetTotalEnergyDeposit() * CLHEP::MeV;
59 const double nielEnergy =
step->GetNonIonizingEnergyDeposit() * CLHEP::MeV;
60 const G4ThreeVector G4tkPos =
step->GetTrack()->GetPosition();
62 tkPos[0] = G4tkPos.x() * CLHEP::cm;
63 tkPos[1] = G4tkPos.y() * CLHEP::cm;
64 tkPos[2] = G4tkPos.z() * CLHEP::cm;
65 const G4ThreeVector G4tkMom =
step->GetTrack()->GetMomentum();
67 tkMom[0] = G4tkMom.x() * CLHEP::MeV;
68 tkMom[1] = G4tkMom.y() * CLHEP::MeV;
69 tkMom[2] = G4tkMom.z() * CLHEP::MeV;
70 const G4ThreeVector G4tkMomDir =
step->GetTrack()->GetMomentumDirection();
72 tkMomDir[0] = G4tkMomDir.x() * CLHEP::MeV;
73 tkMomDir[1] = G4tkMomDir.y() * CLHEP::MeV;
74 tkMomDir[2] = G4tkMomDir.z() * CLHEP::MeV;
75 const int tkPDG =
step->GetTrack()->GetDefinition()->GetPDGEncoding();
76 const double tkKEnergy =
step->GetTrack()->GetKineticEnergy();
77 const int detNb =
step->GetTrack()->GetVolume()->GetCopyNo();
78 const double GlTime =
step->GetPreStepPoint()->GetGlobalTime();
90 if (
step->GetTrack()->GetCreatorProcess() != 0) {
91 const G4VProcess* creator =
step->GetTrack()->GetCreatorProcess();
92 CPName = creator->GetProcessName();
93 if (CPName.contains(
"Neutron")) neuProc =
true;
96 if (m_trackID != track.GetTrackID()) {
98 m_trackID = track.GetTrackID();
101 if (track.GetNextVolume() != track.GetVolume() || track.GetTrackStatus() >= fStopAndKill) {
103 int PDG = mcparticle.getPDG();
104 float Mass = mcparticle.getMass();
105 float Energy = mcparticle.getEnergy();
107 vtx[0] = mcparticle.getProductionVertex().X();
108 vtx[1] = mcparticle.getProductionVertex().Y();
109 vtx[2] = mcparticle.getProductionVertex().Z();
111 mom[0] = mcparticle.getMomentum().X();
112 mom[1] = mcparticle.getMomentum().Y();
113 mom[2] = mcparticle.getMomentum().Z();
114 saveG4TrackInfo(m_trackID, PDG, Mass, Energy, vtx, mom);
119 StoreArray<He3tubeSimHit> He3tubeHits;
120 He3tubeSimHit* hit = He3tubeHits.appendNew(
135 relMCSimHit.add(trackID, hit->getArrayIndex(), 1.0);
140 int SensitiveDetector::saveG4TrackInfo(
154 int simhitNumber = HE3G4TrackInfos.
getEntries() - 1;
156 return (simhitNumber);