Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 //--------------------------------------------------------------------------- 27 // ClassName: G4HyperonBuilder 28 // Author: Alberto Ribon 29 // Date: May 2020 30 // Modified: 31 //--------------------------------------------------------------------------- 32 33 #include "G4HyperonBuilder.hh" 34 #include "G4ParticleDefinition.hh" 35 #include "G4ParticleTable.hh" 36 #include "G4ProcessManager.hh" 37 #include "G4HadronInelasticProcess.hh" 38 39 40 G4HyperonBuilder::G4HyperonBuilder() { 41 theLambdaInelastic = new G4HadronInelasticProcess( "lambdaInelastic", G4Lambda::Definition() ); 42 theAntiLambdaInelastic = new G4HadronInelasticProcess( "anti-lambdaInelastic", G4AntiLambda::Definition() ); 43 theSigmaMinusInelastic = new G4HadronInelasticProcess( "sigma-Inelastic", G4SigmaMinus::Definition() ); 44 theAntiSigmaMinusInelastic = new G4HadronInelasticProcess( "anti_sigma-Inelastic", G4AntiSigmaMinus::Definition() ); 45 theSigmaPlusInelastic = new G4HadronInelasticProcess( "sigma+Inelastic", G4SigmaPlus::Definition() ); 46 theAntiSigmaPlusInelastic = new G4HadronInelasticProcess( "anti_sigma+Inelastic", G4AntiSigmaPlus::Definition() ); 47 theXiMinusInelastic = new G4HadronInelasticProcess( "xi-Inelastic", G4XiMinus::Definition() ); 48 theAntiXiMinusInelastic = new G4HadronInelasticProcess( "anti_xi-Inelastic", G4AntiXiMinus::Definition() ); 49 theXiZeroInelastic = new G4HadronInelasticProcess( "xi0Inelastic", G4XiZero::Definition() ); 50 theAntiXiZeroInelastic = new G4HadronInelasticProcess( "anti_xi0Inelastic", G4AntiXiZero::Definition() ); 51 theOmegaMinusInelastic = new G4HadronInelasticProcess( "omega-Inelastic", G4OmegaMinus::Definition() ); 52 theAntiOmegaMinusInelastic = new G4HadronInelasticProcess( "anti_omega-Inelastic", G4AntiOmegaMinus::Definition() ); 53 } 54 55 56 void G4HyperonBuilder::RegisterMe( G4PhysicsBuilderInterface* aB ) { 57 auto bld = dynamic_cast< G4VHyperonBuilder* >( aB ); 58 if ( bld != nullptr ) theModelCollections.push_back( bld ); 59 else G4PhysicsBuilderInterface::RegisterMe( aB ); 60 } 61 62 63 void G4HyperonBuilder::Build() { 64 for ( std::vector< G4VHyperonBuilder* >::iterator i = theModelCollections.begin(); 65 i != theModelCollections.end(); ++i ) { 66 (*i)->Build( theLambdaInelastic ); 67 (*i)->Build( theAntiLambdaInelastic ); 68 (*i)->Build( theSigmaMinusInelastic ); 69 (*i)->Build( theAntiSigmaMinusInelastic ); 70 (*i)->Build( theSigmaPlusInelastic ); 71 (*i)->Build( theAntiSigmaPlusInelastic ); 72 (*i)->Build( theXiMinusInelastic ); 73 (*i)->Build( theAntiXiMinusInelastic ); 74 (*i)->Build( theXiZeroInelastic ); 75 (*i)->Build( theAntiXiZeroInelastic ); 76 (*i)->Build( theOmegaMinusInelastic ); 77 (*i)->Build( theAntiOmegaMinusInelastic ); 78 } 79 G4ProcessManager* aProcMan = nullptr; 80 aProcMan = G4Lambda::Lambda()->GetProcessManager(); 81 aProcMan->AddDiscreteProcess( theLambdaInelastic ); 82 aProcMan = G4AntiLambda::AntiLambda()->GetProcessManager(); 83 aProcMan->AddDiscreteProcess( theAntiLambdaInelastic ); 84 aProcMan = G4SigmaMinus::SigmaMinus()->GetProcessManager(); 85 aProcMan->AddDiscreteProcess( theSigmaMinusInelastic ); 86 aProcMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager(); 87 aProcMan->AddDiscreteProcess( theAntiSigmaMinusInelastic ); 88 aProcMan = G4SigmaPlus::SigmaPlus()->GetProcessManager(); 89 aProcMan->AddDiscreteProcess( theSigmaPlusInelastic ); 90 aProcMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager(); 91 aProcMan->AddDiscreteProcess( theAntiSigmaPlusInelastic ); 92 aProcMan = G4XiMinus::XiMinus()->GetProcessManager(); 93 aProcMan->AddDiscreteProcess( theXiMinusInelastic ); 94 aProcMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager(); 95 aProcMan->AddDiscreteProcess( theAntiXiMinusInelastic ); 96 aProcMan = G4XiZero::XiZero()->GetProcessManager(); 97 aProcMan->AddDiscreteProcess( theXiZeroInelastic ); 98 aProcMan = G4AntiXiZero::AntiXiZero()->GetProcessManager(); 99 aProcMan->AddDiscreteProcess( theAntiXiZeroInelastic ); 100 aProcMan = G4OmegaMinus::OmegaMinus()->GetProcessManager(); 101 aProcMan->AddDiscreteProcess( theOmegaMinusInelastic ); 102 aProcMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager(); 103 aProcMan->AddDiscreteProcess( theAntiOmegaMinusInelastic ); 104 } 105