G4HadronElasticPhysics.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:   G4HadronElasticPhysics 
00031 //
00032 // Author: 23 November 2006 V. Ivanchenko
00033 //
00034 // Modified:
00035 // 21.03.2007 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 // 29.07.2010 V.Ivanchenko rename this class from G4HadronHElasticPhysics to
00039 //                         G4HadronElasticPhysics, old version of the class
00040 //                         is renamed to G4HadronElasticPhysics93
00041 //
00042 //----------------------------------------------------------------------------
00043 //
00044 // CHIPS for sampling scattering for p and n
00045 // Glauber model for samplimg of high energy pi+- (E > 1GeV)
00046 // LHEP sampling model for the other particle
00047 // BBG cross sections for p, n and pi+- 
00048 // LHEP cross sections for other particles
00049 
00050 #include "G4HadronElasticPhysics.hh"
00051 
00052 #include "G4SystemOfUnits.hh"
00053 #include "G4ParticleDefinition.hh"
00054 #include "G4ProcessManager.hh"
00055 
00056 #include "G4MesonConstructor.hh"
00057 #include "G4BaryonConstructor.hh"
00058 #include "G4IonConstructor.hh"
00059 
00060 #include "G4HadronElasticProcess.hh"
00061 #include "G4HadronElastic.hh"
00062 #include "G4CHIPSElastic.hh"
00063 #include "G4ElasticHadrNucleusHE.hh"
00064 #include "G4AntiNuclElastic.hh"
00065 
00066 #include "G4BGGNucleonElasticXS.hh"
00067 #include "G4BGGPionElasticXS.hh"
00068 #include "G4NeutronElasticXS.hh"
00069 
00070 #include "G4CrossSectionDataSetRegistry.hh"
00071 
00072 #include "G4ChipsProtonElasticXS.hh"
00073 #include "G4ChipsNeutronElasticXS.hh"
00074 
00075 #include "G4ComponentAntiNuclNuclearXS.hh"  
00076 #include "G4CrossSectionElastic.hh"
00077 
00078 // factory
00079 #include "G4PhysicsConstructorFactory.hh"
00080 //
00081 G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronElasticPhysics);
00082 //
00083 
00084 G4HadronElasticPhysics::G4HadronElasticPhysics(G4int ver)
00085   : G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver), 
00086     wasActivated(false)
00087 {
00088   if(verbose > 1) { 
00089     G4cout << "### G4HadronElasticPhysics: " << GetPhysicsName() 
00090            << G4endl; 
00091   }
00092   neutronProcess = 0;
00093   neutronModel = 0;
00094 }
00095 
00096 G4HadronElasticPhysics::G4HadronElasticPhysics(const G4String&,
00097     G4int ver, G4bool, const G4String&)
00098   : G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver), 
00099     wasActivated(false)
00100 {
00101   if(verbose > 1) { 
00102     G4cout << "### G4HadronElasticPhysics: " << GetPhysicsName() 
00103            << G4endl; 
00104   }
00105   neutronProcess = 0;
00106   neutronModel = 0;
00107 }
00108 
00109 G4HadronElasticPhysics::~G4HadronElasticPhysics()
00110 {}
00111 
00112 void G4HadronElasticPhysics::ConstructParticle()
00113 {
00114   // G4cout << "G4HadronElasticPhysics::ConstructParticle" << G4endl;
00115   G4MesonConstructor pMesonConstructor;
00116   pMesonConstructor.ConstructParticle();
00117 
00118   G4BaryonConstructor pBaryonConstructor;
00119   pBaryonConstructor.ConstructParticle();
00120 
00121   G4IonConstructor pConstructor;
00122   pConstructor.ConstructParticle();  
00123 }
00124 
00125 void G4HadronElasticPhysics::ConstructProcess()
00126 {
00127   if(wasActivated) { return; }
00128   wasActivated = true;
00129 
00130   G4double elimitPi = 1.0*GeV;
00131   G4double elimitAntiNuc = 100*MeV;
00132   if(verbose > 1) {
00133     G4cout << "### HadronElasticPhysics Construct Processes with the limit for pi " 
00134            << elimitPi/GeV << " GeV" 
00135            << "                                                  for anti-neuclei " 
00136            << elimitAntiNuc/GeV << " GeV"          << G4endl;
00137   }
00138 
00139   G4AntiNuclElastic* anuc = new G4AntiNuclElastic();
00140   anuc->SetMinEnergy(elimitAntiNuc);
00141   G4CrossSectionElastic* anucxs = 
00142     new G4CrossSectionElastic(anuc->GetComponentCrossSection());
00143 
00144   G4HadronElastic* lhep0 = new G4HadronElastic();
00145   G4HadronElastic* lhep1 = new G4HadronElastic();
00146   G4HadronElastic* lhep2 = new G4HadronElastic();
00147   lhep1->SetMaxEnergy(elimitPi);
00148   lhep2->SetMaxEnergy(elimitAntiNuc);
00149 
00150   G4CHIPSElastic* chipsp = new G4CHIPSElastic();
00151   neutronModel = new G4CHIPSElastic();
00152 
00153   G4ElasticHadrNucleusHE* he = new G4ElasticHadrNucleusHE(); 
00154   he->SetMinEnergy(elimitPi);
00155 
00156   theParticleIterator->reset();
00157   while( (*theParticleIterator)() )
00158   {
00159     G4ParticleDefinition* particle = theParticleIterator->value();
00160     G4ProcessManager* pmanager = particle->GetProcessManager();
00161     G4String pname = particle->GetParticleName();
00162     if(pname == "anti_lambda"  ||
00163        pname == "anti_neutron" ||
00164        pname == "anti_omega-"  || 
00165        pname == "anti_sigma-"  || 
00166        pname == "anti_sigma+"  || 
00167        pname == "anti_xi-"  || 
00168        pname == "anti_xi0"  || 
00169        pname == "lambda"    || 
00170        pname == "omega-"    || 
00171        pname == "sigma-"    || 
00172        pname == "sigma+"    || 
00173        pname == "xi-"       || 
00174        pname == "alpha"     ||
00175        pname == "deuteron"  ||
00176        pname == "triton"   
00177        ) {
00178       
00179       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00180       hel->RegisterMe(lhep0);
00181       pmanager->AddDiscreteProcess(hel);
00182       if(verbose > 1) {
00183         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00184                << " added for " << particle->GetParticleName() << G4endl;
00185       }
00186 
00187     } else if(pname == "proton") {   
00188 
00189       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00190       //hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
00191 
00192       //      hel->AddDataSet(new G4ChipsProtonElasticXS());
00193       hel->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsProtonElasticXS::Default_Name()));
00194      
00195       hel->RegisterMe(chipsp);
00196       pmanager->AddDiscreteProcess(hel);
00197       if(verbose > 1) {
00198         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00199                << " added for " << particle->GetParticleName() << G4endl;
00200       }
00201 
00202     } else if(pname == "neutron") {   
00203 
00204       neutronProcess = new G4HadronElasticProcess();
00205       //neutronProcess->AddDataSet(new G4BGGNucleonElasticXS(particle));
00206       neutronProcess->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsNeutronElasticXS::Default_Name()));
00207       neutronProcess->RegisterMe(neutronModel);
00208       pmanager->AddDiscreteProcess(neutronProcess);
00209       if(verbose > 1) {
00210         G4cout << "### HadronElasticPhysics: " 
00211                << neutronProcess->GetProcessName()
00212                << " added for " << particle->GetParticleName() << G4endl;
00213       }
00214 
00215     } else if (pname == "pi+" || pname == "pi-") { 
00216 
00217       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00218       hel->AddDataSet(new G4BGGPionElasticXS(particle));
00219       hel->RegisterMe(lhep1);
00220       hel->RegisterMe(he);
00221       pmanager->AddDiscreteProcess(hel);
00222       if(verbose > 1) {
00223         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00224                << " added for " << particle->GetParticleName() << G4endl;
00225       }
00226 
00227     } else if(pname == "kaon-"     || 
00228               pname == "kaon+"     || 
00229               pname == "kaon0S"    || 
00230               pname == "kaon0L" 
00231               ) {
00232       
00233       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00234       hel->RegisterMe(lhep0);
00235       pmanager->AddDiscreteProcess(hel);
00236       if(verbose > 1) {
00237         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00238                << " added for " << particle->GetParticleName() << G4endl;
00239       }
00240 
00241     } else if(
00242        pname == "anti_proton"    || 
00243        pname == "anti_alpha"     ||
00244        pname == "anti_deuteron"  ||
00245        pname == "anti_triton"    ||
00246        pname == "anti_He3"       ) {
00247 
00248       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00249       hel->AddDataSet(anucxs);
00250       hel->RegisterMe(lhep2);
00251       hel->RegisterMe(anuc);
00252       pmanager->AddDiscreteProcess(hel);
00253     }
00254   }
00255 }
00256 
00257 

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