62 G4ThreeVector myPos = aStep->GetPostStepPoint()->GetPosition();
63 if (std::fabs( myPos.x() )>30000. ||
64 std::fabs( myPos.y() )>30000. ||
65 std::fabs( myPos.z() )>50000. ){
70 if (
m_world->Inside( myPos ) == kOutside ){
75 G4VSolid * pre = aStep->GetPreStepPoint()->GetPhysicalVolume() &&
76 aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume() ?
77 aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetSolid():0;
78 G4VSolid * post = aStep->GetPostStepPoint()->GetPhysicalVolume() &&
79 aStep->GetPostStepPoint()->GetPhysicalVolume()->GetLogicalVolume() ?
80 aStep->GetPostStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetSolid():0;
81 if ( (post && post->Inside( myPos ) == kOutside ) ||
82 ( pre && pre->Inside( aStep->GetPreStepPoint()->GetPosition() ) == kOutside ) ) {
87 G4Track *tr = aStep->GetTrack();
88 const G4ThreeVector&
mom = tr->GetMomentumDirection();
90 std::cout <<
"Caught a " << tr->GetDefinition()->GetParticleName() <<
" at (" << myPos.x()
91 <<
", " << myPos.y() <<
", " << myPos.z() <<
") to (" <<
mom.x() <<
", " <<
mom.y()
92 <<
", " <<
mom.z() <<
") from ";
93 if (aStep->GetPreStepPoint()->GetPhysicalVolume()) {
94 std::cout << aStep->GetPreStepPoint()->GetPhysicalVolume()->GetName();
96 else std::cout <<
"noVolume";
98 if (aStep->GetPostStepPoint()->GetPhysicalVolume()) {
99 std::cout << aStep->GetPostStepPoint()->GetPhysicalVolume()->GetName();
101 else std::cout <<
"outOfWorld";
102 std::cout <<
" with KE=" << tr->GetKineticEnergy() <<
" pT=" << tr->GetMomentum().perp()
103 <<
" eta=" << tr->GetMomentum().eta() <<
" length " << aStep->GetStepLength() <<
" energy "
104 << aStep->GetTotalEnergyDeposit() <<
" with process ";
105 if (aStep->GetPostStepPoint()->GetProcessDefinedStep()) {
106 std::cout << aStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName();
108 else std::cout <<
"Unknown";
109 std::cout <<
" from a ";
110 if (tr->GetCreatorProcess()) std::cout << tr->GetCreatorProcess()->GetProcessName();
111 else if (tr->GetParentID()==0) std::cout <<
"Generator";
112 else std::cout <<
"pid="<<tr->GetParentID();
113 if (tr->GetLogicalVolumeAtVertex()) std::cout <<
" in " << tr->GetLogicalVolumeAtVertex()->GetName() <<
", ";
114 else std::cout <<
" nowhere, ";
115 std::cout << tr->GetTrackLength() <<
" mm ago" << std::endl;
118 const G4TrackVector *tv = aStep->GetSecondary();
119 for (
auto atv : *tv ){
120 if (
m_world->Inside( atv->GetPosition() ) == kOutside ){
121 atv->SetTrackStatus(fStopAndKill);
127 aStep->GetTrack()->SetTrackStatus(fStopAndKill);
131 ATH_MSG_FATAL(
m_config.
killAfter <<
" cases of hyperspace bug found. You have something seriously wrong going on here. Needs to be fixed. Bailing out." );
132 throw std::runtime_error(
"Hyperspace bug found");