|Message: Crazy Point in G4Field::GetFieldValue()||Not Logged In (login)|
Click on the Forum title, e.g. on the "Forums by Category" page, to read a sequence of postings to the Forum and its threads all in one page. If you are only interested in one thread or the thread following a specific posting, click the thread or the posting, which takes you to a smaller page, which contains only the part you are interested in and may be easier to navigate.
Messages are "chained" if there are only replies at the first level, i.e. 1/1.html, 1/1/1.html etc. In case of "chained" messages the message number is replaced by the icon and there is no indentation.
Inline: Display the subject line only or also the text of the posting(s); for the choice "All" the "Outline" choices are switched off.
|1||0||1||no text / full text of posting|
|2||1||All||text for level 1 only / text for All postings|
Outline: Choose the depth of the posting thread, successive toggle controls provide increasing detail.
|1||2||1||2 levels / 1 level (original posting)|
|2||3||2||3 levels / 2 levels|
|3||3||All||3 levels / all levels (all postings)|
In Geant4 7.1, my program occasionally crashes with a segment fault in my GetFieldValue(). This is caused by its argument Point being an array of 4 NaN-s. That's crazy -- why should the Geant4 tracking ever generate a Point that is four not-a-number?
This is quite rare, occuring a few times out of 400 million events (800 500k-event jobs on a cluster). I can trace it to tracking a pi+ inside an Al beam pipe (much of the rarity is because most particles don't hit the beam pipes). As I am not interested in particles that hit beam pipes, I have a workaround by killing any particle inside a beam pipe. But soon I will be looking at backgrounds from that....
I am using the physics use case LHEP_BIC.
When I compile and run with G4DEBUG=1, the problem does not occur. This implies that Point is probably not initialized when this fault happens; that is deep inside Geant4 code. My program seeds the random number generator with the event# and resets RanGauss(), so I can reliably re-run specific events. I put check code in GetFieldValue() to print "NaN" and force a coredump whenever Point != Point (i.e. Point is NaN); the backtrace below did that.
With G4DEBUG=0 all I can get is the stack traceback from the core file (levels 0,14,15 are mine):
#0 0x080ad57e in BLGlobalField::GetFieldValue () #1 0x08a29768 in G4ClassicalRK4::DumbStepper () #2 0x08a2a65f in G4MagErrorStepper::Stepper () #3 0x08a2c764 in G4MagInt_Driver::QuickAdvance () #4 0x08a28881 in G4ChordFinder::FindNextChord () #5 0x08a2826b in G4ChordFinder::AdvanceChordLimited () #6 0x08a3a9c4 in G4PropagatorInField::ComputeStep () #7 0x08327e17 in G4Transportation::AlongStepGetPhysicalInteractionLength () #8 0x082fda88 in G4SteppingManager::DefinePhysicalStepLength () #9 0x082fbded in G4SteppingManager::Stepping () #10 0x082f027d in G4TrackingManager::ProcessOneTrack () #11 0x082e3ee6 in G4EventManager::DoProcessing () #12 0x082cd9ee in G4RunManager::DoEventLoop () #13 0x082cd4c1 in G4RunManager::BeamOn () #14 0x080c239e in BLManager::trackBeam () #15 0x0805ee07 in main ()
|Inline Depth:||Outline Depth:||Add message:|