Problem 526 - Wrong Z and A in final state for G4NeutronHPInelastic.hh.
Summary: Wrong Z and A in final state for G4NeutronHPInelastic.hh.
Status: RESOLVED FIXED
Alias: None
Product: Geant4
Classification: Unclassified
Component: processes/hadronic (show other problems)
Version: 4.1
Hardware: PC Linux
: P5 normal
Assignee: tkoi
URL:
Depends on:
Blocks:
 
Reported: 2003-09-02 04:11 CEST by joa
Modified: 2006-07-25 05:41 CEST (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this problem.
Description joa 2003-09-02 04:11:24 CEST
When using the HP models for neutrons 0-20 MeV simulating a Germanium detector
"NeutornInelastic" gives a Ga out instead of Ge. The gammas emitted are also from
Ga. i.e., instead of getting (nGe,n'gammasGe) one gets (nGe,n'gammasGa)...
Comment 1 Hans-Peter.Wellisch 2003-09-15 04:42:59 CEST
Hi,

  what is the version of G4NDL that you are using?

Many greetings,

Hans-Peter.
Comment 2 Hans-Peter.Wellisch 2003-11-14 05:31:59 CET
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.
Comment 3 joa 2003-11-14 06:14:59 CET
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
Comment 4 rhenning 2005-08-16 20:09:59 CEST
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;
  }
Comment 5 rhenning 2005-08-18 12:17:59 CEST
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.
Comment 6 rhenning 2005-08-18 12:20:59 CEST
Reopened
Comment 7 Luciano Pandola 2005-08-22 09:15:59 CEST
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
Comment 8 John Apostolakis 2005-09-05 04:17:59 CEST
Attempting to reopen, as user requested, to address new information.
Comment 9 tkoi 2006-07-24 11:22:59 CEST
This problem disappered after G4NDL3.8.(06Feb released)
Deleted wrong data file which caused this trouble.