|Message: Segmentation Fault in CCalSteppingAction::UserSteppingAction --- composite_calorimeter code||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)|
I am currently working on a modified version of the composite_calorimeter example in Geant 4, which simulates the HCal in the CMS detector.
I have come across a problem involving the TSliceID variable in CCalSteppingAction::UserSteppingAction (located in CCalSteppingAction.cc).
A global time value is returned via PostStepPoint->GetGlobalTime() and this value rounded to an integer which is then used to reference the 200 member timeDeposit array and increment the appropriate energy to the corresponding member of the array.
However, I have found that a segmentation fault is occurring and causing the program to crash, due to this global time value spontaneously taking an extremely large value (after a random number of steps, usually several thousand, which varies with initial conditions). For example 2.0177806e+12 ns, or 2.525698e+11 ns, when it should be taking a value between 0 and 200 nanoseconds.
This somehow causes the rounding operation which occurs in the following line to assign a large negative integer to TSliceID. This value is always the same, regardless of the global time returned from PostStepPoint, setting TSliceID = -2147483648:
TSliceID = static_cast<int>( (PostStepPoint->GetGlobalTime() ) / nanosecond);
The segmentation fault occurs when CCalSteppingAction::UserSteppingAction tries to write to the -2147483648th member of the 200 member timeDeposit array, here:
timeDeposit[TSliceID] += aStep->GetTotalEnergyDeposit() / GeV;
I am posting here to see if anyone knows why this extremely large value is being returned by PostStepPoint->GetGlobalTime (rather than a value in the range 0 to 200 nanoseconds), or if anyone can suggest a possible cause or solution to this crash.
|Inline Depth:||Outline Depth:||Add message:|