G4HadronDElasticPhysics.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:   G4HadronDElasticPhysics
00031 //
00032 // Author: 11 April 2006 V. Ivanchenko
00033 //
00034 // Modified:
00035 // 05.07.2006 V.Ivanchenko define process by particle name; 
00036 //                         fix problem of initialisation of HP
00037 // 24.07.2006 V.Ivanchenko add G4NeutronHPElasticData 
00038 // 10.08.2006 V.Ivanchenko separate neutrons from other particles
00039 // 17.11.2006 V.Ivanchenko do not redefine G4HadronElastic default parameters
00040 // 19.02.2007 V.Ivanchenko set QModelLowLimit and LowestEnergyLimit to zero
00041 // 19.02.2007 A.Howard set QModelLowLimit and LowestEnergyLimit to zero 
00042 //                     for neutrons
00043 // 06.03.2007 V.Ivanchenko use updated interface to G4UElasticCrossSection
00044 // 03.06.2010 V.Ivanchenko cleanup constructors and ConstructProcess method
00045 //
00046 //----------------------------------------------------------------------------
00047 //
00048 // Diffuse optical model for sampling scattering
00049 // BBG cross sections for p, pi+-
00050 // XS cross sections for n
00051 // LHEP cross sections for other particles
00052 
00053 #include "G4HadronDElasticPhysics.hh"
00054 
00055 #include "G4SystemOfUnits.hh"
00056 #include "G4ParticleDefinition.hh"
00057 #include "G4ProcessManager.hh"
00058 #include "G4HadronicProcess.hh"
00059 
00060 #include "G4MesonConstructor.hh"
00061 #include "G4BaryonConstructor.hh"
00062 #include "G4IonConstructor.hh"
00063 #include "G4Neutron.hh"
00064 
00065 #include "G4HadronElasticProcess.hh"
00066 #include "G4HadronElastic.hh"
00067 #include "G4ElasticHadrNucleusHE.hh"
00068 #include "G4AntiNuclElastic.hh"
00069 
00070 #include "G4BGGNucleonElasticXS.hh"
00071 #include "G4BGGPionElasticXS.hh"
00072 #include "G4NeutronElasticXS.hh"
00073 
00074 #include "G4CrossSectionDataSetRegistry.hh"
00075 
00076 #include "G4ChipsKaonPlusElasticXS.hh"
00077 #include "G4ChipsKaonMinusElasticXS.hh"
00078 #include "G4ChipsKaonZeroElasticXS.hh"
00079 
00080 #include "G4ComponentAntiNuclNuclearXS.hh"  
00081 #include "G4CrossSectionElastic.hh"
00082 #include "G4DiffuseElastic.hh"
00083 
00084 // factory
00085 #include "G4PhysicsConstructorFactory.hh"
00086 //
00087 G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronDElasticPhysics);
00088 
00089 G4HadronDElasticPhysics::G4HadronDElasticPhysics(G4int ver)
00090   : G4VPhysicsConstructor("hElasticDIFFUSE"), verbose(ver), 
00091     wasActivated(false)
00092 {
00093   if(verbose > 1) { 
00094     G4cout << "### G4HadronDElasticPhysics: " << GetPhysicsName() 
00095            << G4endl; 
00096   }
00097 }
00098 
00099 G4HadronDElasticPhysics::~G4HadronDElasticPhysics()
00100 {}
00101 
00102 void G4HadronDElasticPhysics::ConstructParticle()
00103 {
00104   // G4cout << "G4HadronDElasticPhysics::ConstructParticle" << G4endl;
00105   G4MesonConstructor pMesonConstructor;
00106   pMesonConstructor.ConstructParticle();
00107 
00108   G4BaryonConstructor pBaryonConstructor;
00109   pBaryonConstructor.ConstructParticle();
00110 
00111   //  Construct light ions
00112   G4IonConstructor pConstructor;
00113   pConstructor.ConstructParticle();  
00114 }
00115 
00116 void G4HadronDElasticPhysics::ConstructProcess()
00117 {
00118   if(wasActivated) return;
00119   wasActivated = true;
00120 
00121   G4double elimitAntiNuc = 100*MeV;
00122   if(verbose > 1) {
00123     G4cout << "### HadronDElasticPhysics Construct Processes " 
00124            << " for anti-neuclei " 
00125            << elimitAntiNuc/GeV << " GeV"          << G4endl;
00126   }
00127 
00128   G4AntiNuclElastic* anuc = new G4AntiNuclElastic();
00129   anuc->SetMinEnergy(elimitAntiNuc);
00130   G4CrossSectionElastic* anucxs = 
00131     new G4CrossSectionElastic(anuc->GetComponentCrossSection());
00132 
00133   G4HadronElastic* lhep0 = new G4HadronElastic();
00134   G4HadronElastic* lhep2 = new G4HadronElastic();
00135   lhep2->SetMaxEnergy(elimitAntiNuc);
00136 
00137   G4DiffuseElastic* model = 0;
00138 
00139   theParticleIterator->reset();
00140   while( (*theParticleIterator)() )
00141   {
00142     G4ParticleDefinition* particle = theParticleIterator->value();
00143     G4ProcessManager* pmanager = particle->GetProcessManager();
00144     G4String pname = particle->GetParticleName();
00145     if(pname == "anti_lambda"  ||
00146        pname == "anti_neutron" ||
00147        pname == "anti_omega-"  || 
00148        pname == "anti_sigma-"  || 
00149        pname == "anti_sigma+"  || 
00150        pname == "anti_xi-"  || 
00151        pname == "anti_xi0"  || 
00152        pname == "lambda"    || 
00153        pname == "omega-"    || 
00154        pname == "sigma-"    || 
00155        pname == "sigma+"    || 
00156        pname == "xi-"       || 
00157        pname == "alpha"     ||
00158        pname == "deuteron"  ||
00159        pname == "triton"    
00160        ) {
00161       
00162       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00163       hel->RegisterMe(lhep0);
00164       pmanager->AddDiscreteProcess(hel);
00165       if(verbose > 1) {
00166         G4cout << "### HadronDElasticPhysics: " << hel->GetProcessName()
00167                << " added for " << particle->GetParticleName() << G4endl;
00168       }
00169 
00170     } else if(pname == "proton") {   
00171 
00172       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00173       hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
00174       //hel->AddDataSet(new G4CHIPSElasticXS());
00175       model = new G4DiffuseElastic();
00176       hel->RegisterMe(model);
00177       pmanager->AddDiscreteProcess(hel);
00178       if(verbose > 1) {
00179         G4cout << "### HadronDElasticPhysics: " << hel->GetProcessName()
00180                << " added for " << particle->GetParticleName() << G4endl;
00181       }
00182 
00183     } else if(pname == "neutron") {   
00184 
00185       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00186       hel->AddDataSet(new G4NeutronElasticXS());
00187       model = new G4DiffuseElastic();
00188       hel->RegisterMe(model);
00189       pmanager->AddDiscreteProcess(hel);
00190       if(verbose > 1) {
00191         G4cout << "### HadronDElasticPhysics: " 
00192                << hel->GetProcessName()
00193                << " added for " << particle->GetParticleName() << G4endl;
00194       }
00195 
00196     } else if (pname == "pi+" || pname == "pi-") { 
00197 
00198       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00199       hel->AddDataSet(new G4BGGPionElasticXS(particle));
00200       model = new G4DiffuseElastic();
00201       hel->RegisterMe(model);
00202       pmanager->AddDiscreteProcess(hel);
00203       if(verbose > 1) {
00204         G4cout << "### HadronDElasticPhysics: " << hel->GetProcessName()
00205                << " added for " << particle->GetParticleName() << G4endl;
00206       }
00207 
00208     } else if(pname == "kaon-") {
00209       
00210       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00211       hel->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonMinusElasticXS::Default_Name()));
00212       model = new G4DiffuseElastic();
00213       hel->RegisterMe(model);
00214       pmanager->AddDiscreteProcess(hel);
00215       if(verbose > 1) {
00216         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00217                << " added for " << particle->GetParticleName() << G4endl;
00218       }
00219     } else if(pname == "kaon+") {
00220       
00221       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00222       hel->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonPlusElasticXS::Default_Name()));
00223       model = new G4DiffuseElastic();
00224       hel->RegisterMe(model);
00225       pmanager->AddDiscreteProcess(hel);
00226       if(verbose > 1) {
00227         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00228                << " added for " << particle->GetParticleName() << G4endl;
00229       }
00230     } else if(pname == "kaon0S"    || 
00231               pname == "kaon0L" 
00232               ) {
00233       
00234       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00235       hel->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonZeroElasticXS::Default_Name()));
00236       model = new G4DiffuseElastic();
00237       hel->RegisterMe(model);
00238       pmanager->AddDiscreteProcess(hel);
00239       if(verbose > 1) {
00240         G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
00241                << " added for " << particle->GetParticleName() << G4endl;
00242       }
00243     } else if(
00244        pname == "anti_proton"    || 
00245        pname == "anti_alpha"     ||
00246        pname == "anti_deuteron"  ||
00247        pname == "anti_triton"    ||
00248        pname == "anti_He3"       ) {
00249 
00250       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00251       hel->AddDataSet(anucxs);
00252       hel->RegisterMe(lhep2);
00253       hel->RegisterMe(anuc);
00254       pmanager->AddDiscreteProcess(hel);
00255     }
00256   }
00257 
00258   //G4double elimit = 1.0*GeV;
00259 
00260   if(verbose > 1) {
00261     G4cout << "### HadronDElasticPhysics Construct Processes " << G4endl;
00262   }
00263 }
00264 
00265 

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