Created attachment 698 [details] absorption cross-section for positive kaons of 60 GeV incident on various materials Hello! Apologies if I submitted the problem under the wrong section. I am trying to replicate the results of Carroll et al (https://www.sciencedirect.com/science/article/abs/pii/0370269379902260) in terms of absorption cross-section. I created a G4 application with v10.7.p01 and for each of the 6 nuclei in the paper above I'm shooting protons, pi+ and kaon+ of 60 GeV momentum on a strip of width = 0.2 interaction lengths. Then, I score all the particles emerging from the each strip at a plane ~0.1 mm downstream the strip. Following the same procedure as in the paper above, I'm computing the "partial" cross-sections in bins of 4-momentum transfer squared. To get the total "absorption" cross-section, I'm fitting the partial cross-sections with an exponential. I account for the quasi-elastic interactions by checking if there is a particle of the same type as the beam ones scored after the strip and with momentum within 1% of the beam momentum. The attachment contains the results for protons, pi+ and kaon+ using the predefined FTFP_BERT physics list and switching on quasi-elastic interactions. I obtain similar plots using the default QGSP_BERT physics list. While the computed cross-sections are generally within 10% of the experimental ones for protons, the differences are larger for pions and kaons. I want to estimate the flux of kaons of various momenta (10-400 GeV) when they are shot in a 3 meters long absorber made of copper. An over-estimation of the absorption cross-section by 10% leads in this case to about 1 order of magnitude reduction in the flux.
Created attachment 699 [details] absorption cross-section for protons of 60 GeV incident on various materials
Created attachment 700 [details] absorption cross-section for positive pions of 60 GeV incident on various materials
Hello, yes, uncertainties of 10-20% are typical for hadronic cross sections. The hadronic cross sections in Monte Carlo transport codes, such as Geant4, are usually theory-driven parameterizations, i.e. with phenomenogical parameters which are derived from available experimental data. For instance, the Geant4 hadron-nuclear cross sections follow a Glauber-Gribov approach. This approach should have a good "prediction power" for the * relative * energy dependence of the cross sections of hadron-nucleus interactions, i.e. the dependence on the projectile hadron kinetic energy or momentum, especially for the range where you are interested in, i.e. 10-400 GeV. The * absolute * precision of this approach depends strongly on the available experimental data. There are more experimental data for protons than pions, and even less for kaons, that's why a ~10% uncertainty for proton-nuclear cross sections seems reasonable, while for kaons ~15-20% seems more realistic (with pions sitting in between protons and kaons). The physical quantity you are interested in, i.e. the flux of 10-400 GeV kaons in a 3 meters long copper absorber, is very much dependent on the kaon-copper absorber cross sections. From what said above, this implies a very large uncertainty on the result that you can get from Geant4 - or in any other Monte Carlo transportation code. If you would like to use the measurement made by Carroll et al. on the absorption cross section of kaons on copper - instead of the default one in Geant4 - to get the "central" estimate for the quantity you are interested in, you can do this by using the method: G4HadronicParameters::SetXSFactorHadronInelastic( scalingFactor ); where the "scalingFactor" is the value used to scale up the default cross section of Geant4. In other words, if the value of Geant4 absorption cross sections for 60 GeV K+ on copper that you get is 10% higher than what is measured by Carroll, then you should use: G4HadronicParameters::SetXSFactorHadronInelastic( 0.90 );
Hello! Thank you for the detailed response! I was thinking to change the absorption part while leaving the quasi-elastic untouched (by means of G4ProcessWrapper), but what you propose is much more straight-forward so I will give that a shot first.
Just a few information on the hadron-nuclear cross sections in Geant4. In general, Geant4 deals only with elastic hadron-nuclear cross sections, and inelastic hadron-nuclear cross sections. Most of the physics lists, like FTFP_BERT, QGSP_BERT, etc. have the same elastic and inelastic hadron-nuclear cross sections. Quasi-elastic, instead, is treated differently by the two hadronic string models, FTF (Fritiof) - used for instance in FTFP_BERT - and QGS (Quark Gluon String) - used for instance in QGSP_BERT. In FTF, quasi-elastic events are produced one or more pure elastic scattering of the hadron projectile with nucleons of the target nucleus. There is no "quasi-elastic" cross section. Instead, a fraction of the inelastic cross section is used by FTF to produce quasi-elastic events. Therefore, setting quasi-elastic for FTFP_BERT does nothing. In QGS, an explicit fraction of the inelastic cross section is computed (if the quasi-elastic flag is set) and used to create single elastic hadron-nucleon interactions - by a different model, not directly by QGS. In other words, QGS does only the pure "production" or "absorption" inelastic events, whereas a different model handles the quasi-elastic events - by computing the fraction of inelastic cross section which is for quasi-elatic event, as well as producing the quasi-elastic final-state. In conclusion, "quasi-elastic" is not a trivial business in Geant4, and it is better to scale the overall inelastic cross section - in the way I have suggested in my previous post.
Thank you for the clarifications! I will try the method you proposed!
A couple of details that I forgot. It is not enough the line that I wrote above, but you need both of the following lines: G4HadronicParameters::Instance()->SetApplyFactorXS( true ); G4HadronicParameters::Instance()->SetXSFactorHadronInelastic( 0.90 ); which could be placed, for instance, in your main program, and must be executed before the run initialization. Please note that, for the time being, there is no equivalent UI commands to scale cross sections, so the only way is via the above C++ code.