| Summary: | Wrong Z and A in final state for G4NeutronHPInelastic.hh. | ||
|---|---|---|---|
| Product: | Geant4 | Reporter: | joa |
| Component: | processes/hadronic | Assignee: | tkoi |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | CC: | John.Apostolakis |
| Priority: | P5 | ||
| Version: | 4.1 | ||
| Hardware: | PC | ||
| OS: | Linux | ||
|
Description
joa
2003-09-02 04:11:24 CEST
Hi, what is the version of G4NDL that you are using? Many greetings, Hans-Peter. Since you did not come back on this, I did some investigation of my own with G4NDL3.7. I cannot reproduce the problem, so I have to assume it is resolved with the last version of hte data files. Many greetings, Hans-Peter. Hi, I've must have done something wrong... I still have the problem when using G4NDL3.7. It, however seems to be specific for Ge. cheers Joa Hi,
I am experiencing the same problem.
System:
Geant4 7.0, Redhat 7.3
G4NDL3.7
Symptoms:
When I use the HP neutron models to bombard a simulated, enriched HPGe detector
with 3 MeV neutrons, the interactions are dominantly (n Ge, n' Ga ). The
accompanying gammas rays are also those of Ga and not Ge. This is obviously
incorrect.
I have the following clues:
1.) It only happens when I build the germanium element out of isotopes and do
not use the natural germanium. I believe that Joa experienced the same effect.
2.) I have tracked down the code that "changes" the value for Z. It is :
------>>
G4bool G4NeutronHPChannel::Register(G4NeutronHPFinalState *theFS)
{
registerCount++;
G4int Z = G4lrint(theElement->GetZ());
if(registerCount<5)
{
Z = Z-registerCount;
}
<<--------
The G4NeutronHPInelastic class that eventually calls this method, calls it
twice, hence the second time registerCount == 1 and causes germanium to become
gallium. I ran the code with text output to verify that this is the case.
What is the function of "registerCount" and why does it affect Z?
Below is a dump from Geant 4 when I activated some of the g4cout statements
already present, as well as some of my own:
i 7 Element: Germanium-Enr86 Ge Z = 32.0 N = 75.7 A = 75.64 g/mole
---> Isotope: Germanium74 Z = 32 N = 74 A = 73.92 g/mole
abundance: 14.00 %
---> Isotope: Germanium76 Z = 32 N = 76 A = 75.92 g/mole
abundance: 86.00 %
Registering i 7 Element: Germanium-Enr86 Ge Z = 32.0 N = 75.7 A = 75.64
g/mole
---> Isotope: Germanium74 Z = 32 N = 74 A = 73.92 g/mole
abundance: 14.00 %
---> Isotope: Germanium76 Z = 32 N = 76 A = 75.92 g/mole
abundance: 86.00 %
32 2
Init: normal case
Getting initialized for: 74 32
Init: normal case
Getting initialized for: 76 32
32 2
Init: normal case
Init: normal case
32 2
Init: normal case
Init: normal case
... last 3 lines repeated many times ...
Registering i 7 Element: Germanium-Enr86 Ge Z = 32.0 N = 75.7 A = 75.64
g/mole
---> Isotope: Germanium74 Z = 32 N = 74 A = 73.92 g/mole
abundance: 14.00 %
---> Isotope: Germanium76 Z = 32 N = 76 A = 75.92 g/mole
abundance: 86.00 %
31 2
Init: mean case: 2 31 Element: Germanium-Enr86 Ge Z = 32.0 N = 75.7 A =
75.64 g/mole
---> Isotope: Germanium74 Z = 32 N = 74 A = 73.92 g/mole
abundance: 14.00 %
---> Isotope: Germanium76 Z = 32 N = 76 A = 75.92 g/mole
abundance: 86.00 %
Getting initialized for: 69 31
Getting initialized for: 71 31
31 2
Init: mean case: 2 31 Element: Germanium-Enr86 Ge Z = 32.0 N = 75.7 A =
75.64 g/mole
---> Isotope: Germanium74 Z = 32 N = 74 A = 73.92 g/mole
abundance: 14.00 %
---> Isotope: Germanium76 Z = 32 N = 76 A = 75.92 g/mole
abundance: 86.00 %
... last 4 lines repeated many times...
HasData? Channel : 0
HasData? Channel : 3
HasData? Channel : 4
HasData? Channel : 5
HasData? Channel : 9
HasData? Channel : 12
HasData? Channel : 22
HasData? Channel : 23
HasData? Channel : 24
HasData? Channel : 25
HasData? Channel : 26
HasData? Channel : 28
The last lines were produced by the code snippet inside class
G4NeutronHPHPChannelList:
inline G4bool HasDataInAnyFinalState()
{
G4bool result = false;
G4int i;
for(i=0; i<nChannels; i++)
{
if(theChannels[i]->HasDataInAnyFinalState()) {
result = true;
G4cout << "HasData? Channel : " << i << G4endl;
}
}
return result;
}
Removing the files: G4NDL3.7/Inelastic/CrossSection/32_70_Germanium G4NDL3.7/Inelastic/CrossSection/32_72_Germanium G4NDL3.7/Inelastic/CrossSection/32_73_Germanium G4NDL3.7/Inelastic/CrossSection/32_74_Germanium G4NDL3.7/Inelastic/CrossSection/32_76_Germanium eliminates the production of Ga. i have not verfied that the resulting gamma spectrum is correct. Reopened I think that the problem comes from the way the name of the database files is retrieved by processes/hadronic/models/neutron_hp/G4NeutronHPNames.cc. In fact Germanium has ISOTOPIC data files in the CrossSection/ directory, but only "natural" data files in the final state (i.e. FXX) directories. The existence-check is done on the CrossSection/ files. In other words, since CrossSection/32_70_Germanium does exist, the final state file is looked for as F01/32_70_Germanium. (the same in F02, etc). For G4NDL3.7, all the final state directories have ONLY the "_nat_" files for Germanium and the vector of possible final states is therefore empty. If the vector is empty, the program tries to read the data files from the previous element, which is Gallium. A possible solution (I don't know if it has some unwanted side-effect) is to correct G4NeutronHPNames.cc to check for the existence also in the FXX directories. In other words, if CrossSection/32_70_Germanium exists but FXX/32_70_Germanium does not, then try to read the final state infos from FXX/32_nat_Germanium. Luciano Attempting to reopen, as user requested, to address new information. This problem disappered after G4NDL3.8.(06Feb released) Deleted wrong data file which caused this trouble. |