G4HadronHElasticPhysics.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // $Id$
00027 //
00028 //---------------------------------------------------------------------------
00029 //
00030 // ClassName:   G4HadronHElasticPhysics
00031 //
00032 // Author: 23 November 2006 V. Ivanchenko
00033 //
00034 // Modified:
00035 // 21.03.07 (V.Ivanchenko) Use G4BGGNucleonElasticXS and G4BGGPionElasticXS; 
00036 //                         Reduce thresholds for HE and Q-models to zero
00037 // 03.06.2010 V.Ivanchenko cleanup constructors and ConstructProcess method
00038 //
00039 //----------------------------------------------------------------------------
00040 //
00041 // CHIPS for sampling scattering for p and n
00042 // Glauber model for samplimg of high energy pi+- (E > 1GeV)
00043 // LHEP sampling model for the other particle
00044 // BBG cross sections for p, n and pi+- 
00045 // LHEP cross sections for other particles
00046 
00047 #include "G4HadronHElasticPhysics.hh"
00048 
00049 #include "G4SystemOfUnits.hh"
00050 #include "G4ParticleDefinition.hh"
00051 #include "G4ProcessManager.hh"
00052 
00053 #include "G4MesonConstructor.hh"
00054 #include "G4BaryonConstructor.hh"
00055 #include "G4IonConstructor.hh"
00056 #include "G4Neutron.hh"
00057 
00058 #include "G4HadronElasticProcess.hh"
00059 #include "G4HadronElastic.hh"
00060 #include "G4CHIPSElastic.hh"
00061 #include "G4ElasticHadrNucleusHE.hh"
00062 #include "G4AntiNuclElastic.hh"
00063 
00064 #include "G4BGGNucleonElasticXS.hh"
00065 #include "G4BGGPionElasticXS.hh"
00066 #include "G4NeutronElasticXS.hh"
00067 #include "G4CHIPSElasticXS.hh"
00068 
00069 #include "G4ComponentAntiNuclNuclearXS.hh"  
00070 #include "G4CrossSectionElastic.hh"
00071 
00072 // factory
00073 #include "G4PhysicsConstructorFactory.hh"
00074 //
00075 G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronHElasticPhysics);
00076 
00077 
00078 G4HadronHElasticPhysics::G4HadronHElasticPhysics(G4int ver)
00079   : G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver), 
00080     wasActivated(false)
00081 {
00082   //  if(verbose > 1) { 
00083   G4cout << "### G4HadronHElasticPhysics: " << GetPhysicsName() 
00084          << " is obsolete and soon will be removed" << G4endl; 
00085 }
00086 
00087 G4HadronHElasticPhysics::G4HadronHElasticPhysics(G4int ver, G4bool,
00088                                                  const G4String&)
00089   : G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver), 
00090     wasActivated(false)
00091 {
00092   if(verbose > 1) { 
00093     G4cout << "### G4HadronHElasticPhysics: " << GetPhysicsName() 
00094            << G4endl; 
00095   }
00096 }
00097 
00098 G4HadronHElasticPhysics::~G4HadronHElasticPhysics()
00099 {}
00100 
00101 void G4HadronHElasticPhysics::ConstructParticle()
00102 {
00103   // G4cout << "G4HadronElasticPhysics::ConstructParticle" << G4endl;
00104   G4MesonConstructor pMesonConstructor;
00105   pMesonConstructor.ConstructParticle();
00106 
00107   G4BaryonConstructor pBaryonConstructor;
00108   pBaryonConstructor.ConstructParticle();
00109 
00110   //  Construct light ions
00111   G4IonConstructor pConstructor;
00112   pConstructor.ConstructParticle();  
00113 }
00114 
00115 void G4HadronHElasticPhysics::ConstructProcess()
00116 {
00117   if(wasActivated) { return; }
00118   wasActivated = true;
00119 
00120   G4double elimitPi = 1.0*GeV;
00121   G4double elimitAntiNuc = 100*MeV;
00122   if(verbose > 1) {
00123     G4cout << "### HadronElasticPhysics Construct Processes with the limit for pi " 
00124            << elimitPi/GeV << " GeV" 
00125            << "                                                  for anti-neuclei " 
00126            << elimitAntiNuc/GeV << " GeV"          << G4endl;
00127   }
00128 
00129   G4AntiNuclElastic* anuc = new G4AntiNuclElastic();
00130   anuc->SetMinEnergy(elimitAntiNuc);
00131   G4CrossSectionElastic* anucxs = 
00132     new G4CrossSectionElastic(anuc->GetComponentCrossSection());
00133 
00134   G4HadronElastic* lhep0 = new G4HadronElastic();
00135   G4HadronElastic* lhep1 = new G4HadronElastic();
00136   G4HadronElastic* lhep2 = new G4HadronElastic();
00137   lhep1->SetMaxEnergy(elimitPi);
00138   lhep2->SetMaxEnergy(elimitAntiNuc);
00139 
00140   G4CHIPSElastic* chipsp = new G4CHIPSElastic();
00141   G4HadronElastic* neutronModel = new G4CHIPSElastic();
00142 
00143   G4ElasticHadrNucleusHE* he = new G4ElasticHadrNucleusHE(); 
00144   he->SetMinEnergy(elimitPi);
00145 
00146   theParticleIterator->reset();
00147   while( (*theParticleIterator)() )
00148   {
00149     G4ParticleDefinition* particle = theParticleIterator->value();
00150     G4ProcessManager* pmanager = particle->GetProcessManager();
00151     G4String pname = particle->GetParticleName();
00152     if(pname == "anti_lambda"  ||
00153        pname == "anti_neutron" ||
00154        pname == "anti_omega-"  || 
00155        pname == "anti_sigma-"  || 
00156        pname == "anti_sigma+"  || 
00157        pname == "anti_xi-"  || 
00158        pname == "anti_xi0"  || 
00159        pname == "lambda"    || 
00160        pname == "omega-"    || 
00161        pname == "sigma-"    || 
00162        pname == "sigma+"    || 
00163        pname == "xi-"       || 
00164        pname == "alpha"     ||
00165        pname == "deuteron"  ||
00166        pname == "triton"   
00167        ) {
00168       
00169       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00170       hel->RegisterMe(lhep0);
00171       pmanager->AddDiscreteProcess(hel);
00172       if(verbose > 1) {
00173         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00174                << " added for " << particle->GetParticleName() << G4endl;
00175       }
00176 
00177     } else if(pname == "proton") {   
00178 
00179       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00180       //hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
00181       hel->AddDataSet(new G4CHIPSElasticXS());
00182       hel->RegisterMe(chipsp);
00183       pmanager->AddDiscreteProcess(hel);
00184       if(verbose > 1) {
00185         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00186                << " added for " << particle->GetParticleName() << G4endl;
00187       }
00188 
00189     } else if(pname == "neutron") {   
00190 
00191       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00192       //hel->AddDataSet(new G4NeutronElasticXS());
00193       //hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
00194       hel->AddDataSet(new G4CHIPSElasticXS());
00195       hel->RegisterMe(neutronModel);
00196       pmanager->AddDiscreteProcess(hel);
00197       if(verbose > 1) {
00198         G4cout << "### HadronElasticPhysics: " 
00199                << hel->GetProcessName()
00200                << " added for " << particle->GetParticleName() << G4endl;
00201       }
00202 
00203     } else if (pname == "pi+" || pname == "pi-") { 
00204 
00205       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00206       hel->AddDataSet(new G4CHIPSElasticXS());
00207       //hel->AddDataSet(new G4BGGPionElasticXS(particle));
00208       hel->RegisterMe(lhep1);
00209       hel->RegisterMe(he);
00210       pmanager->AddDiscreteProcess(hel);
00211       if(verbose > 1) {
00212         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00213                << " added for " << particle->GetParticleName() << G4endl;
00214       }
00215 
00216     } else if(pname == "kaon-"     || 
00217               pname == "kaon+"     || 
00218               pname == "kaon0S"    || 
00219               pname == "kaon0L" 
00220               ) {
00221       
00222       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00223       hel->RegisterMe(lhep0);
00224       hel->AddDataSet(new G4CHIPSElasticXS());
00225       pmanager->AddDiscreteProcess(hel);
00226       if(verbose > 1) {
00227         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00228                << " added for " << particle->GetParticleName() << G4endl;
00229       }
00230 
00231     } else if(
00232        pname == "anti_proton"    || 
00233        pname == "anti_alpha"     ||
00234        pname == "anti_deuteron"  ||
00235        pname == "anti_triton"    ||
00236        pname == "anti_He3"       ) {
00237 
00238       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00239       hel->AddDataSet(anucxs);
00240       hel->RegisterMe(lhep2);
00241       hel->RegisterMe(anuc);
00242       pmanager->AddDiscreteProcess(hel);
00243     }
00244   }
00245 }
00246 
00247 

Generated on Mon May 27 17:48:26 2013 for Geant4 by  doxygen 1.4.7