11 #include <top/simulation/SensitiveBar.h>
13 #include <simulation/kernel/UserInfo.h>
16 #include <G4UnitsTable.hh>
17 #include <G4ParticleDefinition.hh>
18 #include <G4ParticleTypes.hh>
20 #include <framework/logging/Logger.h>
21 #include <framework/gearbox/Unit.h>
36 SensitiveBar::SensitiveBar():
37 Simulation::SensitiveDetectorBase(
"TOP",
Const::TOP)
60 G4Track* aTrack = aStep->GetTrack();
61 G4ParticleDefinition* particle = aTrack->GetDefinition();
65 if (particle == G4OpticalPhoton::OpticalPhotonDefinition()) {
67 if (!info)
return false;
68 if (info->getStatus() < 2) {
71 double fraction = info->getFraction();
72 if (qeffi == 0 or gRandom->Uniform() * fraction > qeffi) {
73 aTrack->SetTrackStatus(fStopAndKill);
77 info->setFraction(qeffi);
84 G4StepPoint* PrePosition = aStep->GetPreStepPoint();
85 if (PrePosition->GetStepStatus() != fGeomBoundary)
return false;
91 int moduleID = PrePosition->GetTouchableHandle()->GetReplicaNumber(
m_replicaDepth);
93 if (!geo->isModuleIDValid(moduleID)) {
94 B2ERROR(
"TOP::SensitiveBar: undefined module ID."
95 <<
LogVar(
"moduleID", moduleID));
99 int trackID = aTrack->GetTrackID();
100 if (trackID ==
m_trackIDs[moduleID - 1])
return false;
106 G4ThreeVector worldPosition = PrePosition->GetPosition();
107 double tracklength = aTrack->GetTrackLength() - aStep->GetStepLength();
108 double globalTime = PrePosition->GetGlobalTime();
109 G4ThreeVector momentum = PrePosition->GetMomentum();
111 TVector3 TPosition(worldPosition.x(), worldPosition.y(), worldPosition.z());
112 TVector3 TMomentum(momentum.x(), momentum.y(), momentum.z());
113 TVector3 TOrigin(aTrack->GetVertexPosition().x(),
114 aTrack->GetVertexPosition().y(),
115 aTrack->GetVertexPosition().z());
121 tracklength = tracklength *
Unit::mm;
123 const auto& module = geo->getModule(moduleID);
124 TVector3 locPosition = module.pointToLocal(TPosition);
125 TVector3 locMomentum = module.momentumToLocal(TMomentum);
126 double theta = locMomentum.Theta();
127 double phi = locMomentum.Phi();
129 int PDG = (int)(particle->GetPDGEncoding());
132 auto* hit =
m_barHits.appendNew(moduleID, PDG, TOrigin, TPosition, TMomentum,
133 globalTime, tracklength, locPosition,