Problem 1570 - Particles lifetimes and width inconsistent
Summary: Particles lifetimes and width inconsistent
Status: RESOLVED FIXED
Alias: None
Product: Geant4
Classification: Unclassified
Component: particles (show other problems)
Version: 9.6
Hardware: All All
: P5 major
Assignee: kurasige
URL:
Depends on:
Blocks:
 
Reported: 2014-02-13 15:48 CET by Witold.Pokorski
Modified: 2014-03-03 00:46 CET (History)
2 users (show)

See Also:


Attachments
printout with lifetimes and widths (52.38 KB, text/plain)
2014-02-13 15:52 CET, Witold.Pokorski
Details

Note You need to log in before you can comment on or make changes to this problem.
Description Witold.Pokorski 2014-02-13 15:48:36 CET

    
Comment 1 Witold.Pokorski 2014-02-13 15:52:55 CET
Created attachment 255 [details]
printout with lifetimes and widths
Comment 2 Witold.Pokorski 2014-02-13 15:57:13 CET
Hello, I am reporting on the problem found by Federico (in CC). Here is his original report:

"The lifetime and the width of several particles is inconsistent in Geant4.6.p02. The attached file reports lifetime and width of the particles and their ratio. As it can be seen, sometimes one of the two is missing, and when they are both there they are not consistent in most cases."

As you can see in the file, in many cases when you try to calculate the lifetime from the width (or vice-versa) you obtain inconsistent results (ration not 1). This can lead to numerical problems and crashes. 

In some cases there is either lifetime or width missing, which again is not very consistent from the code point of view.

Finally, comparing the values to PDG, there some which are outdated (for instance lifetime of Pi0).

In our option, all this should be cleaned up in order to avoid numerical crashes in different calculations.
Comment 3 kurasige 2014-02-22 10:25:57 CET
Thank you for reporting bugs.

particles-V10-00-02 is the bug fixed tag with updated properties consistent with PDG2013
(Please wait tags for 9.6 patches)
Comment 4 Witold.Pokorski 2014-02-22 22:39:59 CET
Dear Hisaya,

thank you for your tag. I see that you have updated the PDG values according to the latest data.
Unfortunately, the core of the problem is still not addressed. As we have pointed out, there is an inconsistency between the values of the lifetimes and widths that are hardcoded in the particles classes. If  you take for instance the lifetime of pi0 and you calculate the width according to the formula 

width = hbar/lifetime

you get a value which is different NUMERICALLY to what is hardcoded in the Geant4 class.

The correct procedure would be to hardcode only one of those values, and let the other to be calculated (with the current numerical precision) at the initialisation. 

Hardcoding both of those values in an inconsistent way, like it is done now, can lead to wrong numerical behaviour (for instance, if in one part of the code the lifetime is used and in another part it is the width).

Cheers,

Witek
Comment 5 kurasige 2014-02-24 00:58:13 CET
Dear Witek,

  The PDG group treats width and life time independently. i.e. width is not equal to hbar/lifetime as you pointed out. This problem was reported several years before.
  But, it is difficult for me to judge which is fundamental property life time and width. It depends on particle types.    
  Could you have some ideas on this problem ? 

Regards,
      Hisaya
Comment 6 Federico.Carminati 2014-02-24 11:36:49 CET
Hello,
  this is a typical situation when using tables of exp data. The tables try to be as close as possible to reality, at the expense of consistency. This should not be the case in a MonteCarlo, which should be consistent because otherwise biases could be introduced. I believe that a reasonable compromise would be to privilege width below a certain level and times above. I would suggest to set this limit around the picosecond ~ ctau of 100 microns. Let me know what you think. Best,.
Comment 7 Witold.Pokorski 2014-02-24 14:29:04 CET
Hello Hisaya,

thanks for your answer. I see that Federico has already commented.

Indeed, our suggestion would be to hardcode only one of the two values (time or width) and have the other one calculated at the initialisation time in order to have numerical consistency.

I am also a bit puzzled where to you take the width data from. If I look for instance at:

http://pdg8.lbl.gov/rpp2013v2/pdgLive/Particle.action?node=S009

or to be more exact at:

http://pdg8.lbl.gov/rpp2013v2/pdgLive/DataBlock.action?node=S009T

I see the lifetimes but not the widths. In several cases they say that they have converted width to lifetime.

Here is the exact text:
"Most experiments measure the π0 width which we convert to a lifetime. ATHERTON 1985 is the only direct measurement of the π0 lifetime. Our average based only on indirect measurement yields 8.30±0.19s. The two Primakoff measurements from 1970 have been excluded from our average because they suffered model-related systematics unknown at the time. More information on the π0 lifetime can be found in BERNSTEIN 2011 ."

Hardcoding in Geant4 both is in our opinion not a good solution from the numerical point of view.

So, our suggestion would be to choose one to be hardcoded in Geant4, and to have the other one calculated.

Cheers,
Witek
Comment 8 kurasige 2014-02-25 06:17:53 CET
Thank you for comments.
I follow Federico's suggestion.

Heavy flavour hadrons and tau have order 1ps lifetime, which are directly measured. So I take a limit of 0.1 ps.
Here is a list of particles with life <0.1ps (and non-zero) in Geant4.
Life time is set to zero for all resonance hadrons (under shortlived category).   
- omega_c0:  width=9.6e-06[keV]   life=6.9e-05[ns]  
- pi0:  width=0.00773[keV]   life=8.52e-08[ns] 
- sigma0:  width=8.9[keV]   life=7.4e-11[ns]  
Among these three particles, only life time of omega_c0 is measured directly (and width is given from life time)

So, I decided to give life time derived from mass width only for
- pi0
- sigma0 (and anti_sigma0)
 
I've made particles-V10-00-04.
Please try this tag.

Thanks and Regards,
Hisaya
Comment 9 Witold.Pokorski 2014-02-25 22:00:02 CET
Hi Hisaya,

thanks for the new tag.

To be honest, we are a bit confused. The tag does not seem to have the corrections we have been suggesting.
Let me try to explain it on specific example. Let's take pi0. We see that PDG gives us the lifetime

(8.52 ±0.18) ×10−17 s

in G4PionZero.cc you have hardcoded

8.52e-8*ns

that's fine. Now, let's look at the width. In G4PionZero.cc you have it equal to:

7.73e-06*MeV

but why? This is not the correct value. It should be equal to hbar/lifetime.
hbar is harcoded in Geant4 and it is equal to

hbar  = 6.58212e-13 MeV*ns

the width for pi0, should be then:

hbar/8.52e-8*ns = 7.725492957746479e-06*MeV

Why the value that you have harcoded for the width is rounded? It should not be, because rounding leads to numerical inconsistency!

Our suggestion is to hardcode based on the experimental value only one of the observables (let's say lifetime here) and then to have the second one to be calculated at the initialisation using the exact formula hbar/lifetime, and not rounding the value.
The same should be for all other particles (unless you simply not enter any lifetime at all).

Cheers,
Witek
Comment 10 kurasige 2014-02-26 09:27:17 CET
Dear Witek,
   
 OK. 
 I'll set width of pi0 and sigma0 according to PDG life time.

 >The same should be for all other particles (unless you simply not enter 
 >any lifetime at all).
 I want to just remind you that the formula of width = hbar/lifetime is valid only for assumption of single Breit-Wigner formula can be applied to the particle. That's why PDG group treats width and life time independently.
Comment 11 Witold.Pokorski 2014-02-26 15:00:49 CET
Hi Hisaya,

I must apologise. I have overlooked one of your modifications, which is exactly what we were asking for.

I was always looking at the constructor:

   anInstance = new G4ParticleDefinition(
                 name,   0.1349766*GeV,  7.73e-06*MeV,         0.0,
                    0,              -1,            +1,
                    2,               0,            -1,
              "meson",               0,             0,         111,
                false,      8.52e-8*ns,          NULL,
                false,            "pi",          111);

where both the lifetime and the width were hardcoded (and numerically inconsistent). 
But I have just noticed that  you have also added the following line just below:

   // Life time is given from width
   anInstance->SetPDGLifeTime( hbar_Planck/(anInstance->GetPDGWidth()) );

So the PDG lifetime is overwritten by the calculated one.
Yes, that's exactly what we were suggesting. 
Thanks and sorry again for having overlooked it the first time.

Witek