Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 //-------------------------------------------- 27 //--------------------------------------------------------------------------- 28 // 28 // 29 // ClassName: G4HyperonFTFPBuilder 29 // ClassName: G4HyperonFTFPBuilder 30 // 30 // 31 // Author: 2012 G.Folger 31 // Author: 2012 G.Folger 32 // Implementation started from G4HyperonLHE 32 // Implementation started from G4HyperonLHEPBuilder. 33 // 33 // 34 // Modified: 34 // Modified: 35 //-------------------------------------------- 35 //---------------------------------------------------------------------------- 36 << 36 // 37 #include "G4HyperonFTFPBuilder.hh" 37 #include "G4HyperonFTFPBuilder.hh" >> 38 38 #include "G4SystemOfUnits.hh" 39 #include "G4SystemOfUnits.hh" 39 #include "G4ParticleDefinition.hh" 40 #include "G4ParticleDefinition.hh" 40 #include "G4ParticleTable.hh" 41 #include "G4ParticleTable.hh" 41 #include "G4ProcessManager.hh" 42 #include "G4ProcessManager.hh" 42 #include "G4HadronInelasticProcess.hh" << 43 #include "G4CrossSectionDataSetRegistry.hh" 43 #include "G4CrossSectionInelastic.hh" << 44 44 #include "G4ComponentGGHadronNucleusXsc.hh" << 45 45 #include "G4HadronicParameters.hh" << 46 G4HyperonFTFPBuilder::G4HyperonFTFPBuilder(): 46 #include "G4TheoFSGenerator.hh" << 47 theLambdaInelastic(0), 47 #include "G4GeneratorPrecompoundInterface.hh" << 48 theAntiLambdaInelastic(0), 48 #include "G4FTFModel.hh" << 49 theSigmaMinusInelastic(0), 49 #include "G4LundStringFragmentation.hh" << 50 theAntiSigmaMinusInelastic(0), 50 #include "G4ExcitedStringDecay.hh" << 51 theSigmaPlusInelastic(0), 51 #include "G4CascadeInterface.hh" << 52 theAntiSigmaPlusInelastic(0), 52 #include "G4QuasiElasticChannel.hh" << 53 theXiZeroInelastic(0), 53 << 54 theAntiXiZeroInelastic(0), 54 << 55 theXiMinusInelastic(0), 55 G4HyperonFTFPBuilder::G4HyperonFTFPBuilder( G4 << 56 theAntiXiMinusInelastic(0), 56 // The following energy limits refer to FTFP << 57 theOmegaMinusInelastic(0), 57 // (for antihyperons, the min energy is assu << 58 theAntiOmegaMinusInelastic(0), 58 theMin = G4HadronicParameters::Instance()->G << 59 wasActivated(false) 59 theMax = G4HadronicParameters::Instance()->G << 60 { 60 // Hyperon : Bertini at low energies, then F << 61 61 theHyperonFTFP = new G4TheoFSGenerator( "FTF << 62 // Hyperon : Bertini at low energies, then FTFP 62 theHyperonFTFP->SetMinEnergy( theMin ); << 63 63 theHyperonFTFP->SetMaxEnergy( theMax ); << 64 HyperonFTFP = new G4TheoFSGenerator("FTFP"); 64 G4FTFModel* theStringModel = new G4FTFModel; << 65 65 theStringModel->SetFragmentationModel( new G << 66 HyperonFTFP->SetMinEnergy( 2.*GeV ); 66 G4GeneratorPrecompoundInterface* theCascade << 67 HyperonFTFP->SetMaxEnergy( 100.*TeV ); 67 theHyperonFTFP->SetTransport( theCascade ); << 68 68 theHyperonFTFP->SetHighEnergyGenerator( theS << 69 theStringModel = new G4FTFModel; 69 if ( quasiElastic ) theHyperonFTFP->SetQuasi << 70 theStringDecay = new G4ExcitedStringDecay(theLund = new G4LundStringFragmentation); >> 71 theStringModel->SetFragmentationModel(theStringDecay); >> 72 >> 73 theCascade = new G4GeneratorPrecompoundInterface; >> 74 thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler); >> 75 theCascade->SetDeExcitation(thePreEquilib); >> 76 >> 77 HyperonFTFP->SetTransport(theCascade); >> 78 HyperonFTFP->SetHighEnergyGenerator(theStringModel); 70 79 71 theBertini = new G4CascadeInterface; 80 theBertini = new G4CascadeInterface; 72 theBertini->SetMinEnergy( 0.0 ); << 81 theBertini->SetMinEnergy( 0.*GeV ); 73 theBertini->SetMaxEnergy( G4HadronicParamete << 82 theBertini->SetMaxEnergy( 6.*GeV ); >> 83 >> 84 // AntiHyperons: Use FTFP for full energy range, starting at 0. 74 85 75 // AntiHyperons: Use FTFP for full energy ra << 86 AntiHyperonFTFP = new G4TheoFSGenerator("FTFP"); 76 theAntiHyperonFTFP = new G4TheoFSGenerator( << 87 AntiHyperonFTFP->SetMinEnergy( 0.*GeV ); 77 theAntiHyperonFTFP->SetMinEnergy( 0.0 ); << 88 AntiHyperonFTFP->SetMaxEnergy( 100.*TeV ); 78 theAntiHyperonFTFP->SetMaxEnergy( theMax ); << 89 AntiHyperonFTFP->SetTransport(theCascade); 79 theAntiHyperonFTFP->SetTransport( theCascade << 90 AntiHyperonFTFP->SetHighEnergyGenerator(theStringModel); 80 theAntiHyperonFTFP->SetHighEnergyGenerator( << 81 if ( quasiElastic ) theAntiHyperonFTFP->SetQ << 82 91 83 // use Glauber-Gribov cross sections << 92 // use CHIPS cross sections 84 theInelasticCrossSection = new G4CrossSectio << 93 theCHIPSInelastic = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsHyperonInelasticXS::Default_Name()); 85 } 94 } 86 95 87 96 88 G4HyperonFTFPBuilder::~G4HyperonFTFPBuilder() << 97 G4HyperonFTFPBuilder::~G4HyperonFTFPBuilder() >> 98 { >> 99 delete HyperonFTFP; >> 100 delete theStringModel; >> 101 delete theStringDecay; >> 102 delete theCascade; >> 103 delete thePreEquilib; >> 104 // delete theHandler; >> 105 delete theBertini; >> 106 delete AntiHyperonFTFP; >> 107 >> 108 if (wasActivated) { >> 109 delete theLambdaInelastic; >> 110 delete theAntiLambdaInelastic; >> 111 delete theSigmaMinusInelastic; >> 112 delete theAntiSigmaMinusInelastic; >> 113 delete theSigmaPlusInelastic; >> 114 delete theAntiSigmaPlusInelastic; >> 115 delete theXiMinusInelastic; >> 116 delete theAntiXiMinusInelastic; >> 117 delete theXiZeroInelastic; >> 118 delete theAntiXiZeroInelastic; >> 119 delete theOmegaMinusInelastic; >> 120 delete theAntiOmegaMinusInelastic; >> 121 } >> 122 } 89 123 >> 124 void G4HyperonFTFPBuilder::Build() >> 125 { >> 126 G4ProcessManager * aProcMan = 0; >> 127 wasActivated = true; >> 128 >> 129 // Lambda >> 130 theLambdaInelastic = new G4LambdaInelasticProcess(); >> 131 theLambdaInelastic->RegisterMe(theBertini); >> 132 theLambdaInelastic->RegisterMe(HyperonFTFP); >> 133 theLambdaInelastic->AddDataSet(theCHIPSInelastic); >> 134 aProcMan = G4Lambda::Lambda()->GetProcessManager(); >> 135 aProcMan->AddDiscreteProcess(theLambdaInelastic); >> 136 >> 137 // AntiLambda >> 138 theAntiLambdaInelastic = new G4AntiLambdaInelasticProcess(); >> 139 theAntiLambdaInelastic->RegisterMe(AntiHyperonFTFP); >> 140 theAntiLambdaInelastic->AddDataSet(theCHIPSInelastic); >> 141 >> 142 aProcMan = G4AntiLambda::AntiLambda()->GetProcessManager(); >> 143 aProcMan->AddDiscreteProcess(theAntiLambdaInelastic); >> 144 >> 145 // SigmaMinus >> 146 theSigmaMinusInelastic = new G4SigmaMinusInelasticProcess(); >> 147 theSigmaMinusInelastic->RegisterMe(theBertini); >> 148 theSigmaMinusInelastic->RegisterMe(HyperonFTFP); >> 149 theSigmaMinusInelastic->AddDataSet(theCHIPSInelastic); >> 150 >> 151 aProcMan = G4SigmaMinus::SigmaMinus()->GetProcessManager(); >> 152 aProcMan->AddDiscreteProcess(theSigmaMinusInelastic); >> 153 >> 154 // anti-SigmaMinus >> 155 theAntiSigmaMinusInelastic = new G4AntiSigmaMinusInelasticProcess(); >> 156 theAntiSigmaMinusInelastic->RegisterMe(AntiHyperonFTFP); >> 157 theAntiSigmaMinusInelastic->AddDataSet(theCHIPSInelastic); >> 158 >> 159 aProcMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager(); >> 160 aProcMan->AddDiscreteProcess(theAntiSigmaMinusInelastic); >> 161 >> 162 // SigmaPlus >> 163 theSigmaPlusInelastic = new G4SigmaPlusInelasticProcess(); >> 164 theSigmaPlusInelastic->RegisterMe(theBertini); >> 165 theSigmaPlusInelastic->RegisterMe(HyperonFTFP); >> 166 theSigmaPlusInelastic->AddDataSet(theCHIPSInelastic); >> 167 >> 168 aProcMan = G4SigmaPlus::SigmaPlus()->GetProcessManager(); >> 169 aProcMan->AddDiscreteProcess(theSigmaPlusInelastic); >> 170 >> 171 // anti-SigmaPlus >> 172 theAntiSigmaPlusInelastic = new G4AntiSigmaPlusInelasticProcess(); >> 173 theAntiSigmaPlusInelastic->RegisterMe(AntiHyperonFTFP); >> 174 theAntiSigmaPlusInelastic->AddDataSet(theCHIPSInelastic); >> 175 >> 176 aProcMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager(); >> 177 aProcMan->AddDiscreteProcess(theAntiSigmaPlusInelastic); >> 178 >> 179 // XiMinus >> 180 theXiMinusInelastic = new G4XiMinusInelasticProcess(); >> 181 theXiMinusInelastic->RegisterMe(theBertini); >> 182 theXiMinusInelastic->RegisterMe(HyperonFTFP); >> 183 theXiMinusInelastic->AddDataSet(theCHIPSInelastic); >> 184 >> 185 aProcMan = G4XiMinus::XiMinus()->GetProcessManager(); >> 186 aProcMan->AddDiscreteProcess(theXiMinusInelastic); >> 187 >> 188 // anti-XiMinus >> 189 theAntiXiMinusInelastic = new G4AntiXiMinusInelasticProcess(); >> 190 theAntiXiMinusInelastic->RegisterMe(AntiHyperonFTFP); >> 191 theAntiXiMinusInelastic->AddDataSet(theCHIPSInelastic); >> 192 >> 193 aProcMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager(); >> 194 aProcMan->AddDiscreteProcess(theAntiXiMinusInelastic); >> 195 >> 196 // XiZero >> 197 theXiZeroInelastic = new G4XiZeroInelasticProcess(); >> 198 theXiZeroInelastic->RegisterMe(theBertini); >> 199 theXiZeroInelastic->RegisterMe(HyperonFTFP); >> 200 theXiZeroInelastic->AddDataSet(theCHIPSInelastic); >> 201 >> 202 aProcMan = G4XiZero::XiZero()->GetProcessManager(); >> 203 aProcMan->AddDiscreteProcess(theXiZeroInelastic); >> 204 >> 205 // anti-XiZero >> 206 theAntiXiZeroInelastic = new G4AntiXiZeroInelasticProcess(); >> 207 theAntiXiZeroInelastic->RegisterMe(AntiHyperonFTFP); >> 208 theAntiXiZeroInelastic->AddDataSet(theCHIPSInelastic); >> 209 >> 210 aProcMan = G4AntiXiZero::AntiXiZero()->GetProcessManager(); >> 211 aProcMan->AddDiscreteProcess(theAntiXiZeroInelastic); >> 212 >> 213 // OmegaMinus >> 214 theOmegaMinusInelastic = new G4OmegaMinusInelasticProcess(); >> 215 theOmegaMinusInelastic->RegisterMe(theBertini); >> 216 theOmegaMinusInelastic->RegisterMe(HyperonFTFP); >> 217 theOmegaMinusInelastic->AddDataSet(theCHIPSInelastic); >> 218 >> 219 aProcMan = G4OmegaMinus::OmegaMinus()->GetProcessManager(); >> 220 aProcMan->AddDiscreteProcess(theOmegaMinusInelastic); >> 221 >> 222 // anti-OmegaMinus >> 223 theAntiOmegaMinusInelastic = new G4AntiOmegaMinusInelasticProcess(); >> 224 theAntiOmegaMinusInelastic->RegisterMe(AntiHyperonFTFP); >> 225 theAntiOmegaMinusInelastic->AddDataSet(theCHIPSInelastic); 90 226 91 void G4HyperonFTFPBuilder::Build( G4HadronInel << 227 aProcMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager(); 92 if ( aP->GetParticleDefinition() && aP->Ge << 228 aProcMan->AddDiscreteProcess(theAntiOmegaMinusInelastic); 93 // Anti-hyperon << 94 theAntiHyperonFTFP->SetMaxEnergy( theMax ) << 95 aP->RegisterMe( theAntiHyperonFTFP ); << 96 } else { << 97 // Hyperon << 98 theHyperonFTFP->SetMinEnergy( theMin ); << 99 theHyperonFTFP->SetMaxEnergy( theMax ); << 100 aP->RegisterMe( theBertini ); << 101 aP->RegisterMe( theHyperonFTFP ); << 102 } << 103 aP->AddDataSet( theInelasticCrossSection ); << 104 } 229 } >> 230 105 231 106 232