11 #include <ir/simulation/SensitiveDetector.h>
12 #include <ir/dataobjects/IRSimHit.h>
14 #include <framework/logging/Logger.h>
15 #include <framework/datastore/StoreArray.h>
16 #include <framework/datastore/RelationArray.h>
17 #include <framework/gearbox/Unit.h>
23 #include <G4ThreeVector.hh>
25 #include <G4VPhysicalVolume.hh>
27 #include <G4UserLimits.hh>
40 SensitiveDetector::SensitiveDetector() :
41 Simulation::SensitiveDetectorBase(
"IR ",
Const::IR)
51 const G4Track& track = *
step->GetTrack();
52 const G4int trackID = track.GetTrackID();
53 const G4int partPDGCode = track.GetDefinition()->GetPDGEncoding();
55 const G4VPhysicalVolume& g4Volume = *track.GetVolume();
56 string Volname = g4Volume.GetName();
58 const G4double depEnergy =
step->GetTotalEnergyDeposit() *
Unit::MeV;
60 const G4StepPoint& preStep = *
step->GetPreStepPoint();
61 const G4StepPoint& postStep = *
step->GetPostStepPoint();
62 const G4ThreeVector& preStepPos = preStep.GetPosition();
63 const G4ThreeVector& postStepPos = postStep.GetPosition();
64 const G4ThreeVector momIn(preStep.GetMomentum());
65 const G4ThreeVector momOut(postStep.GetMomentum());
66 const G4ThreeVector preStepPosLocal = preStep.GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(preStepPos);
67 const G4ThreeVector postStepPosLocal = postStep.GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(postStepPos);
68 const G4ThreeVector momInLocal = preStep.GetTouchableHandle()->GetHistory()->GetTopTransform().TransformAxis(momIn);
69 const G4ThreeVector momOutLocal = preStep.GetTouchableHandle()->GetHistory()->GetTopTransform().TransformAxis(momOut);
71 TVector3 posOutVec(postStepPosLocal.x() *
Unit::mm, postStepPosLocal.y() *
Unit::mm, postStepPosLocal.z() *
Unit::mm);
77 G4UserLimits* userLimits = g4Volume.GetLogicalVolume()->GetUserLimits();
79 B2DEBUG(100,
"Volume " << g4Volume.GetName() <<
": max. allowed step set to " << userLimits->GetMaxAllowedStep(track));
83 IRSimHit* simHit = irSimHits.
appendNew(posInVec, momInVec, posOutVec, momOutVec, partPDGCode, depEnergy, Volname);