G4HadronQElasticPhysics.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:   G4HadronQElasticPhysics
00031 //
00032 // Author: 17 Nov 2006 V.Ivanchenko
00033 //
00034 // Modified:
00035 // 03.06.2010 V.Ivanchenko cleanup constructors and ConstructProcess method
00036 // 01.11.2012 A.Ribon: use G4AntiNuclElastic for light anti-ions. 
00037 //
00038 //----------------------------------------------------------------------------
00039 //
00040 // CHIPS x-sections and generator (G4QElastic) for n and p
00041 // LHEP x-section and generator for the rest 
00042 
00043 #include "G4HadronQElasticPhysics.hh"
00044 
00045 #include "G4HadronElasticProcess.hh"
00046 #include "G4HadronicInteraction.hh"
00047 #include "G4HadronElastic.hh"
00048 #include "G4QElastic.hh"
00049 #include "G4AntiNuclElastic.hh"
00050 
00051 #include "G4VQCrossSection.hh"
00052 
00053 #include "G4ParticleDefinition.hh"
00054 #include "G4ProcessManager.hh"
00055 
00056 #include "G4MesonConstructor.hh"
00057 #include "G4BaryonConstructor.hh"
00058 #include "G4IonConstructor.hh"
00059 
00060 #include "G4ComponentAntiNuclNuclearXS.hh"
00061 #include "G4CrossSectionElastic.hh"
00062 
00063 // factory
00064 #include "G4PhysicsConstructorFactory.hh"
00065 //
00066 G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronQElasticPhysics);
00067 
00068 
00069 G4HadronQElasticPhysics::G4HadronQElasticPhysics(G4int ver)
00070   : G4VPhysicsConstructor("hElasticCHIPS_LHEP"), verbose(ver),
00071     wasActivated(false)
00072 {
00073   if(verbose > 1) { 
00074     G4cout << "### G4HadronQElasticPhysics: " << GetPhysicsName() 
00075            << G4endl; 
00076   }
00077 }
00078 
00079 G4HadronQElasticPhysics::G4HadronQElasticPhysics(const G4String&,  G4int ver)
00080   : G4VPhysicsConstructor("hElasticCHIPS_LHEP"), verbose(ver),
00081     wasActivated(false)
00082 {
00083   if(verbose > 1) { 
00084     G4cout << "### G4HadronQElasticPhysics: " << GetPhysicsName() 
00085            << G4endl; 
00086   }
00087 }
00088 
00089 G4HadronQElasticPhysics::~G4HadronQElasticPhysics()
00090 {}
00091 
00092 void G4HadronQElasticPhysics::ConstructParticle()
00093 {
00094   G4MesonConstructor pMesonConstructor;
00095   pMesonConstructor.ConstructParticle();
00096 
00097   G4BaryonConstructor pBaryonConstructor;
00098   pBaryonConstructor.ConstructParticle();
00099 
00100   //  Construct light ions
00101   G4IonConstructor pConstructor;
00102   pConstructor.ConstructParticle();  
00103 }
00104 
00105 void G4HadronQElasticPhysics::ConstructProcess()
00106 {
00107   if(wasActivated) { return; }
00108   wasActivated = true;
00109 
00110   if(verbose > 1) {
00111     G4cout << "### HadronQElasticPhysics::ConstructProcess" << G4endl;
00112   }
00113 
00114   G4HadronElastic* lhep0 = new G4HadronElastic();  
00115   G4HadronElastic* lhep1 = new G4HadronElastic();
00116   G4double elimitAntiNuc = 100*CLHEP::MeV;
00117   lhep1->SetMaxEnergy(elimitAntiNuc);
00118   G4AntiNuclElastic* anuc = new G4AntiNuclElastic();
00119   anuc->SetMinEnergy(elimitAntiNuc);
00120   G4CrossSectionElastic* anucxs = 
00121     new G4CrossSectionElastic(anuc->GetComponentCrossSection());
00122 
00123   theParticleIterator->reset();
00124   while( (*theParticleIterator)() )
00125   {
00126     G4ParticleDefinition* particle = theParticleIterator->value();
00127     G4ProcessManager* pmanager = particle->GetProcessManager();
00128     G4String pname = particle->GetParticleName();
00129     if(pname == "anti_lambda"  ||
00130        pname == "anti_neutron" ||
00131        pname == "anti_omega-"  || 
00132        pname == "anti_sigma-"  || 
00133        pname == "anti_sigma+"  || 
00134        pname == "anti_xi-"  || 
00135        pname == "anti_xi0"  || 
00136        pname == "kaon-"     || 
00137        pname == "kaon+"     || 
00138        pname == "kaon0S"    || 
00139        pname == "kaon0L"    || 
00140        pname == "lambda"    || 
00141        pname == "omega-"    || 
00142        pname == "pi-"       || 
00143        pname == "pi+"       || 
00144        pname == "sigma-"    || 
00145        pname == "sigma+"    || 
00146        pname == "xi-"       || 
00147        pname == "alpha"     ||
00148        pname == "deuteron"  ||
00149        pname == "triton" 
00150       ) {
00151 
00152       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00153       hel->RegisterMe(lhep0);
00154       pmanager->AddDiscreteProcess(hel);
00155 
00156     } else if(pname == "neutron" || pname == "proton") {   
00157 
00158       G4QElastic* process = new G4QElastic();  
00159       pmanager->AddDiscreteProcess(process);
00160 
00161       if(verbose > 0)
00162         G4cout << "### QElastic added for " 
00163                << particle->GetParticleName() << G4endl;
00164 
00165     } else if(
00166        pname == "anti_proton"    || 
00167        pname == "anti_alpha"     ||
00168        pname == "anti_deuteron"  ||
00169        pname == "anti_triton"    ||
00170        pname == "anti_He3"       
00171       ) {
00172 
00173       G4HadronElasticProcess* hel = new G4HadronElasticProcess();
00174       hel->AddDataSet(anucxs);
00175       hel->RegisterMe(lhep1);
00176       hel->RegisterMe(anuc);
00177       pmanager->AddDiscreteProcess(hel);
00178 
00179     }
00180  
00181   }
00182 }

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