Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/physics_lists/constructors/hadron_elastic/src/G4HadronDElasticPhysics.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 //---------------------------------------------------------------------------
 27 //
 28 // ClassName:   G4HadronDElasticPhysics
 29 //
 30 // Author: 11 April 2006 V. Ivanchenko
 31 //
 32 // Modified:
 33 // 05.07.2006 V.Ivanchenko define process by particle name; 
 34 //                         fix problem of initialisation of HP
 35 // 24.07.2006 V.Ivanchenko add G4NeutronHPElasticData 
 36 // 10.08.2006 V.Ivanchenko separate neutrons from other particles
 37 // 17.11.2006 V.Ivanchenko do not redefine G4HadronElastic default parameters
 38 // 19.02.2007 V.Ivanchenko set QModelLowLimit and LowestEnergyLimit to zero
 39 // 19.02.2007 A.Howard set QModelLowLimit and LowestEnergyLimit to zero 
 40 //                     for neutrons
 41 // 06.03.2007 V.Ivanchenko use updated interface to G4UElasticCrossSection
 42 // 03.06.2010 V.Ivanchenko cleanup constructors and ConstructProcess method
 43 //
 44 //----------------------------------------------------------------------------
 45 //
 46 // Diffuse optical model for sampling scattering
 47 // BBG cross sections for p, pi+-
 48 // XS cross sections for n
 49 // LHEP cross sections for other particles
 50 
 51 #include "G4HadronDElasticPhysics.hh"
 52 
 53 #include "G4SystemOfUnits.hh"
 54 #include "G4ParticleDefinition.hh"
 55 #include "G4ProcessManager.hh"
 56 #include "G4HadronicProcess.hh"
 57 
 58 #include "G4MesonConstructor.hh"
 59 #include "G4BaryonConstructor.hh"
 60 #include "G4IonConstructor.hh"
 61 #include "G4Neutron.hh"
 62 
 63 #include "G4HadronElasticProcess.hh"
 64 #include "G4HadronElastic.hh"
 65 #include "G4ElasticHadrNucleusHE.hh"
 66 #include "G4AntiNuclElastic.hh"
 67 
 68 #include "G4BGGNucleonElasticXS.hh"
 69 #include "G4BGGPionElasticXS.hh"
 70 #include "G4NeutronElasticXS.hh"
 71 
 72 #include "G4ComponentGGHadronNucleusXsc.hh"
 73 #include "G4ComponentGGNuclNuclXsc.hh"
 74 #include "G4CrossSectionDataSetRegistry.hh"
 75 
 76 #include "G4CrossSectionElastic.hh"
 77 #include "G4DiffuseElastic.hh"
 78 
 79 #include "G4HadronicParameters.hh"
 80 #include "G4HadronicBuilder.hh"
 81 #include "G4HadParticles.hh"
 82 #include "G4HadProcesses.hh"
 83 #include "G4PhysListUtil.hh"
 84 #include "G4BuilderType.hh"
 85 
 86 // factory
 87 #include "G4PhysicsConstructorFactory.hh"
 88 //
 89 G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronDElasticPhysics);
 90 
 91 G4HadronDElasticPhysics::G4HadronDElasticPhysics(G4int ver)
 92   : G4HadronElasticPhysics(ver, "hElasticDIFFUSE")
 93 {
 94   if(ver > 1) { 
 95     G4cout << "### G4HadronDElasticPhysics: " << GetPhysicsName() 
 96      << G4endl; 
 97   }
 98 }
 99 
100 G4HadronDElasticPhysics::~G4HadronDElasticPhysics()
101 {}
102 
103 void G4HadronDElasticPhysics::ConstructProcess()
104 {
105   G4HadronicParameters* param = G4HadronicParameters::Instance();
106   G4bool useFactorXS = param->ApplyFactorXS();
107   G4ParticleTable* table = G4ParticleTable::GetParticleTable();
108   G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
109 
110   const G4double eminDElastic  = 10.*MeV;
111   const G4double elimitAntiNuc = 100.*MeV;
112   const G4double delta = 0.1*MeV;
113   G4double emax = std::max(param->GetMaxEnergy(), elimitAntiNuc+delta);
114   if(param->GetVerboseLevel() > 1) {
115     G4cout << "### HadronDElasticPhysics Construct Processes " 
116      << " for anti-neuclei " 
117      << elimitAntiNuc/GeV << " GeV"    << G4endl;
118   }
119 
120   G4AntiNuclElastic* anuc = new G4AntiNuclElastic();
121   anuc->SetMinEnergy(elimitAntiNuc);
122   anuc->SetMaxEnergy(emax);
123 
124   auto anucxs = G4HadProcesses::ElasticXS("AntiAGlauber");
125   auto xsNN = G4HadProcesses::ElasticXS("Glauber-Gribov Nucl-nucl");
126 
127   G4HadronElastic* lhep0 = new G4HadronElastic();
128   G4HadronElastic* lhep1 = new G4HadronElastic();
129   lhep1->SetMaxEnergy(eminDElastic + delta);
130   G4HadronElastic* lhep2 = new G4HadronElastic();
131   lhep2->SetMaxEnergy(elimitAntiNuc);
132 
133   G4DiffuseElastic* model = nullptr;
134 
135   // p
136   G4ParticleDefinition* particle = G4Proton::Proton();
137   G4HadronElasticProcess* hel = new G4HadronElasticProcess();
138   hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
139   model = new G4DiffuseElastic();
140   model->SetMinEnergy(eminDElastic);
141   hel->RegisterMe(lhep1);
142   hel->RegisterMe(model);  
143   if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
144   ph->RegisterProcess(hel, particle);
145 
146   // n
147   particle = G4Neutron::Neutron();
148   hel = new G4HadronElasticProcess();
149   hel->AddDataSet(new G4NeutronElasticXS());
150   model = new G4DiffuseElastic();
151   model->SetMinEnergy(eminDElastic);
152   hel->RegisterMe(lhep1);
153   hel->RegisterMe(model);
154   if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
155   ph->RegisterProcess(hel, particle);
156 
157   // pi+
158   particle = G4PionPlus::PionPlus();
159   hel = new G4HadronElasticProcess();
160   hel->AddDataSet(new G4BGGPionElasticXS(particle));
161   model = new G4DiffuseElastic();
162   model->SetMinEnergy(eminDElastic);
163   hel->RegisterMe(lhep1);
164   hel->RegisterMe(model);  
165   if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorPionElastic() );
166   ph->RegisterProcess(hel, particle);
167 
168   // pi-
169   particle = G4PionMinus::PionMinus();
170   hel = new G4HadronElasticProcess();
171   hel->AddDataSet(new G4BGGPionElasticXS(particle));
172   model = new G4DiffuseElastic();
173   model->SetMinEnergy(eminDElastic);
174   hel->RegisterMe(lhep1);
175   hel->RegisterMe(model);  
176   if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorPionElastic() );
177   ph->RegisterProcess(hel, particle);
178 
179   // kaons
180   G4HadronicBuilder::BuildElastic( G4HadParticles::GetKaons() );
181 
182   // d, t, He3, alpha
183   for( auto & pdg : G4HadParticles::GetLightIons() ) {
184     particle = table->FindParticle( pdg );
185     if ( particle == nullptr ) { continue; }
186 
187     hel = new G4HadronElasticProcess();
188     hel->AddDataSet(xsNN);
189     hel->RegisterMe(lhep0);
190     if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorHadronElastic() );
191     ph->RegisterProcess(hel, particle);
192   }
193 
194   // high energy particles
195   if( emax > param->EnergyThresholdForHeavyHadrons() ) {
196 
197     // pbar, nbar, anti light ions
198     for( auto & pdg : G4HadParticles::GetLightAntiIons() ) {
199       particle = table->FindParticle( pdg );
200       if ( particle == nullptr ) { continue; }
201 
202       hel = new G4HadronElasticProcess();
203       hel->RegisterMe(lhep2);
204       hel->RegisterMe(anuc);
205       hel->AddDataSet(anucxs);
206       if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorHadronElastic() );
207       ph->RegisterProcess(hel, particle);
208     }
209 
210     // hyperons
211     G4HadronicBuilder::BuildElastic( G4HadParticles::GetHyperons() );
212     G4HadronicBuilder::BuildElastic( G4HadParticles::GetAntiHyperons() );
213 
214     // b-, c- baryons and mesons
215     if( G4HadronicParameters::Instance()->EnableBCParticles() ) {
216       G4HadronicBuilder::BuildElastic( G4HadParticles::GetBCHadrons() );
217     }
218   }
219 }
220 
221 
222