11 #include <beast/pindiode/simulation/SensitiveDetector.h>
12 #include <beast/pindiode/dataobjects/PindiodeSimHit.h>
14 #include <framework/datastore/StoreArray.h>
15 #include <framework/datastore/RelationArray.h>
29 Simulation::SensitiveDetectorBase(
"PindiodeSensitiveDetector", Const::invalidDetector)
56 mcParticles.registerInDataStore();
57 simHits.registerInDataStore();
58 relMCSimHit.registerInDataStore();
67 SensitiveDetector::~SensitiveDetector()
74 const G4StepPoint& preStep = *
step->GetPreStepPoint();
75 const G4StepPoint& postStep = *
step->GetPostStepPoint();
77 G4Track& track = *
step->GetTrack();
78 if (m_trackID != track.GetTrackID()) {
80 m_trackID = track.GetTrackID();
82 m_momentum = preStep.GetMomentum() ;
84 m_startEnergy = preStep.GetKineticEnergy() ;
90 m_WightedPos.SetXYZ(0, 0, 0);
94 m_energyDeposit +=
step->GetTotalEnergyDeposit() ;
96 m_startTime = preStep.GetGlobalTime();
97 m_endTime = postStep.GetGlobalTime();
98 m_WightedTime += (m_startTime + m_endTime) / 2 * (
step->GetTotalEnergyDeposit());
100 m_startPos = preStep.GetPosition();
101 m_endPos = postStep.GetPosition();
102 TVector3 position((m_startPos.getX() + m_endPos.getX()) / 2 / CLHEP::cm, (m_startPos.getY() + m_endPos.getY()) / 2 / CLHEP::cm,
103 (m_startPos.getZ() + m_endPos.getZ()) / 2 / CLHEP::cm);
104 m_WightedPos += position * (
step->GetTotalEnergyDeposit());
107 if (track.GetNextVolume() != track.GetVolume() || track.GetTrackStatus() >= fStopAndKill) {
108 int pdgCode = track.GetDefinition()->GetPDGEncoding();
110 const G4VPhysicalVolume& v = * track.GetVolume();
111 G4ThreeVector posCell = v.GetTranslation();
116 m_cellID =
step->GetTrack()->GetVolume()->GetCopyNo();
118 double dTotalEnergy = 1 / m_energyDeposit;
119 if (m_energyDeposit > 0.) {
120 saveSimHit(m_cellID, m_trackID, pdgCode, m_WightedTime / m_energyDeposit,
121 m_energyDeposit, m_momentum, m_WightedPos * dTotalEnergy);
186 int SensitiveDetector::saveSimHit(
203 TVector3 momentum(mom.getX() / CLHEP::GeV, mom.getY() / CLHEP::GeV, mom.getZ() / CLHEP::GeV);
204 PindiodeHits.
appendNew(cellId, trackID, pid, tof / CLHEP::ns, edep / CLHEP::GeV, momentum, posAve);
205 int simhitNumber = PindiodeHits.
getEntries() - 1;
206 B2DEBUG(150,
"HitNumber: " << simhitNumber);
207 pindiodeSimHitRel.
add(trackID, simhitNumber);
208 return (simhitNumber);