// $Id$ // Category: physics // // According to corresponding part of: // ExN04PhysicsList.cc,v 1.7 1999/12/15 14:49:26 gunter // GEANT4 tag Name: geant4-01-01 #include "TG4PhysicsConstructorHadron.h" #include #include // Hadron Processes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Low-energy Models #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // High-energy Models #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Stopping processes #ifdef TRIUMF_STOP_PIMINUS #include #else #include #endif #ifdef TRIUMF_STOP_KMINUS #include #else #include #endif //_____________________________________________________________________________ TG4PhysicsConstructorHadron::TG4PhysicsConstructorHadron(const G4String& name) : G4VPhysicsConstructor(name) { // SetVerboseLevel(1); } //_____________________________________________________________________________ TG4PhysicsConstructorHadron::~TG4PhysicsConstructorHadron() { // } // protected methods //_____________________________________________________________________________ void TG4PhysicsConstructorHadron::ConstructParticle() { // The particles are constructed in the // TG4ModularPhysicsList. // --- } //_____________________________________________________________________________ void TG4PhysicsConstructorHadron::ConstructProcess() { // Makes discrete physics processes for the hadrons, at present limited // to those particles with GHEISHA interactions (INTRC > 0). // The processes are: Elastic scattering and Inelastic scattering. // // F.W.Jones 09-JUL-1998 // --- G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess; G4LElastic* theElasticModel = new G4LElastic; theElasticProcess->RegisterMe(theElasticModel); theParticleIterator->reset(); while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager(); G4String particleName = particle->GetParticleName(); if (particleName == "pi+") { pmanager->AddDiscreteProcess(theElasticProcess); G4PionPlusInelasticProcess* theInelasticProcess = new G4PionPlusInelasticProcess("inelastic"); G4LEPionPlusInelastic* theLEInelasticModel = new G4LEPionPlusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEPionPlusInelastic* theHEInelasticModel = new G4HEPionPlusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "pi-") { pmanager->AddDiscreteProcess(theElasticProcess); G4PionMinusInelasticProcess* theInelasticProcess = new G4PionMinusInelasticProcess("inelastic"); G4LEPionMinusInelastic* theLEInelasticModel = new G4LEPionMinusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEPionMinusInelastic* theHEInelasticModel = new G4HEPionMinusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); #ifdef TRIUMF_STOP_PIMINUS pmanager->AddRestProcess(new G4PionMinusAbsorptionAtRest, ordDefault); #else G4String prcNam; pmanager->AddRestProcess( new G4PiMinusAbsorptionAtRest( prcNam="PiMinusAbsorptionAtRest"), ordDefault); #endif } else if (particleName == "kaon+") { pmanager->AddDiscreteProcess(theElasticProcess); G4KaonPlusInelasticProcess* theInelasticProcess = new G4KaonPlusInelasticProcess("inelastic"); G4LEKaonPlusInelastic* theLEInelasticModel = new G4LEKaonPlusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEKaonPlusInelastic* theHEInelasticModel = new G4HEKaonPlusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "kaon0S") { pmanager->AddDiscreteProcess(theElasticProcess); G4KaonZeroSInelasticProcess* theInelasticProcess = new G4KaonZeroSInelasticProcess("inelastic"); G4LEKaonZeroSInelastic* theLEInelasticModel = new G4LEKaonZeroSInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEKaonZeroInelastic* theHEInelasticModel = new G4HEKaonZeroInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "kaon0L") { pmanager->AddDiscreteProcess(theElasticProcess); G4KaonZeroLInelasticProcess* theInelasticProcess = new G4KaonZeroLInelasticProcess("inelastic"); G4LEKaonZeroLInelastic* theLEInelasticModel = new G4LEKaonZeroLInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEKaonZeroInelastic* theHEInelasticModel = new G4HEKaonZeroInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "kaon-") { pmanager->AddDiscreteProcess(theElasticProcess); G4KaonMinusInelasticProcess* theInelasticProcess = new G4KaonMinusInelasticProcess("inelastic"); G4LEKaonMinusInelastic* theLEInelasticModel = new G4LEKaonMinusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEKaonMinusInelastic* theHEInelasticModel = new G4HEKaonMinusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); #ifdef TRIUMF_STOP_KMINUS pmanager->AddRestProcess(new G4KaonMinusAbsorption, ordDefault); #else pmanager->AddRestProcess(new G4KaonMinusAbsorptionAtRest, ordDefault); #endif } else if (particleName == "proton") { pmanager->AddDiscreteProcess(theElasticProcess); G4ProtonInelasticProcess* theInelasticProcess = new G4ProtonInelasticProcess("inelastic"); G4LEProtonInelastic* theLEInelasticModel = new G4LEProtonInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEProtonInelastic* theHEInelasticModel = new G4HEProtonInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "anti_proton") { pmanager->AddDiscreteProcess(theElasticProcess); G4AntiProtonInelasticProcess* theInelasticProcess = new G4AntiProtonInelasticProcess("inelastic"); G4LEAntiProtonInelastic* theLEInelasticModel = new G4LEAntiProtonInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEAntiProtonInelastic* theHEInelasticModel = new G4HEAntiProtonInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "neutron") { pmanager->AddDiscreteProcess(theElasticProcess); G4NeutronInelasticProcess* theInelasticProcess = new G4NeutronInelasticProcess("inelastic"); G4LENeutronInelastic* theLEInelasticModel = new G4LENeutronInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HENeutronInelastic* theHEInelasticModel = new G4HENeutronInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "anti_neutron") { pmanager->AddDiscreteProcess(theElasticProcess); G4AntiNeutronInelasticProcess* theInelasticProcess = new G4AntiNeutronInelasticProcess("inelastic"); G4LEAntiNeutronInelastic* theLEInelasticModel = new G4LEAntiNeutronInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEAntiNeutronInelastic* theHEInelasticModel = new G4HEAntiNeutronInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "lambda") { pmanager->AddDiscreteProcess(theElasticProcess); G4LambdaInelasticProcess* theInelasticProcess = new G4LambdaInelasticProcess("inelastic"); G4LELambdaInelastic* theLEInelasticModel = new G4LELambdaInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HELambdaInelastic* theHEInelasticModel = new G4HELambdaInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "anti_lambda") { pmanager->AddDiscreteProcess(theElasticProcess); G4AntiLambdaInelasticProcess* theInelasticProcess = new G4AntiLambdaInelasticProcess("inelastic"); G4LEAntiLambdaInelastic* theLEInelasticModel = new G4LEAntiLambdaInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEAntiLambdaInelastic* theHEInelasticModel = new G4HEAntiLambdaInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "sigma+") { pmanager->AddDiscreteProcess(theElasticProcess); G4SigmaPlusInelasticProcess* theInelasticProcess = new G4SigmaPlusInelasticProcess("inelastic"); G4LESigmaPlusInelastic* theLEInelasticModel = new G4LESigmaPlusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HESigmaPlusInelastic* theHEInelasticModel = new G4HESigmaPlusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "sigma-") { pmanager->AddDiscreteProcess(theElasticProcess); G4SigmaMinusInelasticProcess* theInelasticProcess = new G4SigmaMinusInelasticProcess("inelastic"); G4LESigmaMinusInelastic* theLEInelasticModel = new G4LESigmaMinusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HESigmaMinusInelastic* theHEInelasticModel = new G4HESigmaMinusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "anti_sigma+") { pmanager->AddDiscreteProcess(theElasticProcess); G4AntiSigmaPlusInelasticProcess* theInelasticProcess = new G4AntiSigmaPlusInelasticProcess("inelastic"); G4LEAntiSigmaPlusInelastic* theLEInelasticModel = new G4LEAntiSigmaPlusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEAntiSigmaPlusInelastic* theHEInelasticModel = new G4HEAntiSigmaPlusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "anti_sigma-") { pmanager->AddDiscreteProcess(theElasticProcess); G4AntiSigmaMinusInelasticProcess* theInelasticProcess = new G4AntiSigmaMinusInelasticProcess("inelastic"); G4LEAntiSigmaMinusInelastic* theLEInelasticModel = new G4LEAntiSigmaMinusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEAntiSigmaMinusInelastic* theHEInelasticModel = new G4HEAntiSigmaMinusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "xi0") { pmanager->AddDiscreteProcess(theElasticProcess); G4XiZeroInelasticProcess* theInelasticProcess = new G4XiZeroInelasticProcess("inelastic"); G4LEXiZeroInelastic* theLEInelasticModel = new G4LEXiZeroInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEXiZeroInelastic* theHEInelasticModel = new G4HEXiZeroInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "xi-") { pmanager->AddDiscreteProcess(theElasticProcess); G4XiMinusInelasticProcess* theInelasticProcess = new G4XiMinusInelasticProcess("inelastic"); G4LEXiMinusInelastic* theLEInelasticModel = new G4LEXiMinusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEXiMinusInelastic* theHEInelasticModel = new G4HEXiMinusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "anti_xi0") { pmanager->AddDiscreteProcess(theElasticProcess); G4AntiXiZeroInelasticProcess* theInelasticProcess = new G4AntiXiZeroInelasticProcess("inelastic"); G4LEAntiXiZeroInelastic* theLEInelasticModel = new G4LEAntiXiZeroInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEAntiXiZeroInelastic* theHEInelasticModel = new G4HEAntiXiZeroInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "anti_xi-") { pmanager->AddDiscreteProcess(theElasticProcess); G4AntiXiMinusInelasticProcess* theInelasticProcess = new G4AntiXiMinusInelasticProcess("inelastic"); G4LEAntiXiMinusInelastic* theLEInelasticModel = new G4LEAntiXiMinusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEAntiXiMinusInelastic* theHEInelasticModel = new G4HEAntiXiMinusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "deuteron") { pmanager->AddDiscreteProcess(theElasticProcess); G4DeuteronInelasticProcess* theInelasticProcess = new G4DeuteronInelasticProcess("inelastic"); G4LEDeuteronInelastic* theLEInelasticModel = new G4LEDeuteronInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "triton") { pmanager->AddDiscreteProcess(theElasticProcess); G4TritonInelasticProcess* theInelasticProcess = new G4TritonInelasticProcess("inelastic"); G4LETritonInelastic* theLEInelasticModel = new G4LETritonInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "alpha") { pmanager->AddDiscreteProcess(theElasticProcess); G4AlphaInelasticProcess* theInelasticProcess = new G4AlphaInelasticProcess("inelastic"); G4LEAlphaInelastic* theLEInelasticModel = new G4LEAlphaInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "omega-") { pmanager->AddDiscreteProcess(theElasticProcess); G4OmegaMinusInelasticProcess* theInelasticProcess = new G4OmegaMinusInelasticProcess("inelastic"); G4LEOmegaMinusInelastic* theLEInelasticModel = new G4LEOmegaMinusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEOmegaMinusInelastic* theHEInelasticModel = new G4HEOmegaMinusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } else if (particleName == "anti_omega-") { pmanager->AddDiscreteProcess(theElasticProcess); G4AntiOmegaMinusInelasticProcess* theInelasticProcess = new G4AntiOmegaMinusInelasticProcess("inelastic"); G4LEAntiOmegaMinusInelastic* theLEInelasticModel = new G4LEAntiOmegaMinusInelastic; theInelasticProcess->RegisterMe(theLEInelasticModel); G4HEAntiOmegaMinusInelastic* theHEInelasticModel = new G4HEAntiOmegaMinusInelastic; theInelasticProcess->RegisterMe(theHEInelasticModel); pmanager->AddDiscreteProcess(theInelasticProcess); } } if (verboseLevel>0) G4cout << "### Hadron physics constructed." << G4endl; }