Hello,
I’m trying to store the information of neutrons entering a certain volume of the lab. To be more specific: I’m firing muons, these muons produce neutrons that travel through the lab and reach a veto. So I’m trying to score their spectrum before entering this veto. I tried the methods described here and here So, this is what I tried:
-
In the steppingAction:
if(particle == “neutron”){
G4VPhysicalVolume* volIn = step->GetPreStepPoint()->GetPhysicalVolume();
G4VPhysicalVolume* volFin = step->GetPostStepPoint()->GetPhysicalVolume();
G4bool condition = step->IsLastStepInVolume();if(volIn->GetName()==“Lab” && volFin->GetName()==“MuonVetoVolume”){
if(condition) store info
}
-
In steppingAction, use:
G4bool condition = step->IsLastStepInVolume();
if(particle == “neutron” && aStep->GetTrack()->GetVolume()->GetName()==“Lab” && aStep->GetTrack()->GetNextVolume()->GetName()==“MuonVetoVolume”){if(condition) store info
}
But I get the same segmentation fault:
#5 0x00007f88c8242f90 in std::__cxx11::basic_string<char, std::char_traits, std::allocator >::compare(char const*) const () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007f88d1e2c783 in G4String::operator== (this=0x18, str=0x7f88d1e919e6 “MuonVetoVolume”) at /home/jose/Codes/geant4.10.06/install/include/Geant4/G4String.icc:122
I run it again in verbose mode and I the last thing it does is:
G4Track Information: Particle = neutron, Track ID = 42836, Parent ID = 27784
Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName
0 -4.98e+04 -1.28e+04 -2.61e+04 0.134 0 0 0 Lab initStep
1 -6e+04 -1.55e+04 -2.42e+04 0.134 0 1.07e+04 1.07e+04 OutOfWorld Transportation
*** Break *** segmentation violation
When fire only neutrons from the Lab volume to the MuonVetoVolume both methods work, I checked it in the verbose mode. The problem is when I fire muons: some neutrons are stored correctly, but then one neutron of the above appear and produces a segmentation fault.
Where is my error? How could I solve it?
Thank you
Jose