57 {
58
60
61
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. ){
67 }
68 if (!hs &&
m_config.treatmentLevel<=0)
return;
69
70 if (
m_world->Inside( myPos ) == kOutside ){
72 }
73 if (!hs &&
m_config.treatmentLevel<=1)
return;
74
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 ) ) {
84 }
85 if (!hs &&
m_config.treatmentLevel<=2)
return;
86
87 G4Track *tr = aStep->GetTrack();
88 const G4ThreeVector&
mom = tr->GetMomentumDirection();
89
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();
95 }
96 else std::cout << "noVolume";
97 std::cout << " to ";
98 if (aStep->GetPostStepPoint()->GetPhysicalVolume()) {
99 std::cout << aStep->GetPostStepPoint()->GetPhysicalVolume()->GetName();
100 }
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();
107 }
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;
117
118 const G4TrackVector *tv = aStep->GetSecondary();
119 for (auto atv : *tv ){
120 if (
m_world->Inside( atv->GetPosition() ) == kOutside ){
121 atv->SetTrackStatus(fStopAndKill);
124 }
125 }
126
127 aStep->GetTrack()->SetTrackStatus(fStopAndKill);
129
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");
133 }
134 }
#define ATH_MSG_WARNING(x)