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 // GEANT4 tag $Name: not supported by cvs2svn $ 26 // 27 // 27 //-------------------------------------------- 28 //--------------------------------------------------------------------------- 28 // 29 // 29 // ClassName: G4HyperonFTFPBuilder 30 // ClassName: G4HyperonFTFPBuilder 30 // 31 // 31 // Author: 2012 G.Folger 32 // Author: 2012 G.Folger 32 // Implementation started from G4HyperonLHE 33 // Implementation started from G4HyperonLHEPBuilder. 33 // 34 // 34 // Modified: 35 // Modified: 35 //-------------------------------------------- 36 //---------------------------------------------------------------------------- 36 << 37 // 37 #include "G4HyperonFTFPBuilder.hh" 38 #include "G4HyperonFTFPBuilder.hh" >> 39 38 #include "G4SystemOfUnits.hh" 40 #include "G4SystemOfUnits.hh" 39 #include "G4ParticleDefinition.hh" 41 #include "G4ParticleDefinition.hh" 40 #include "G4ParticleTable.hh" 42 #include "G4ParticleTable.hh" 41 #include "G4ProcessManager.hh" 43 #include "G4ProcessManager.hh" 42 #include "G4HadronInelasticProcess.hh" << 44 #include "G4CrossSectionDataSetRegistry.hh" 43 #include "G4CrossSectionInelastic.hh" << 45 44 #include "G4ComponentGGHadronNucleusXsc.hh" << 46 45 #include "G4HadronicParameters.hh" << 47 G4HyperonFTFPBuilder::G4HyperonFTFPBuilder(): 46 #include "G4TheoFSGenerator.hh" << 48 theLambdaInelastic(0), 47 #include "G4GeneratorPrecompoundInterface.hh" << 49 theAntiLambdaInelastic(0), 48 #include "G4FTFModel.hh" << 50 theSigmaMinusInelastic(0), 49 #include "G4LundStringFragmentation.hh" << 51 theAntiSigmaMinusInelastic(0), 50 #include "G4ExcitedStringDecay.hh" << 52 theSigmaPlusInelastic(0), 51 #include "G4CascadeInterface.hh" << 53 theAntiSigmaPlusInelastic(0), 52 #include "G4QuasiElasticChannel.hh" << 54 theXiZeroInelastic(0), 53 << 55 theAntiXiZeroInelastic(0), 54 << 56 theXiMinusInelastic(0), 55 G4HyperonFTFPBuilder::G4HyperonFTFPBuilder( G4 << 57 theAntiXiMinusInelastic(0), 56 // The following energy limits refer to FTFP << 58 theOmegaMinusInelastic(0), 57 // (for antihyperons, the min energy is assu << 59 theAntiOmegaMinusInelastic(0), 58 theMin = G4HadronicParameters::Instance()->G << 60 wasActivated(false) 59 theMax = G4HadronicParameters::Instance()->G << 61 { 60 // Hyperon : Bertini at low energies, then F << 62 61 theHyperonFTFP = new G4TheoFSGenerator( "FTF << 63 // Hyperon : Bertini at low energies, then FTFP 62 theHyperonFTFP->SetMinEnergy( theMin ); << 64 63 theHyperonFTFP->SetMaxEnergy( theMax ); << 65 HyperonFTFP = new G4TheoFSGenerator("FTFP"); 64 G4FTFModel* theStringModel = new G4FTFModel; << 66 65 theStringModel->SetFragmentationModel( new G << 67 HyperonFTFP->SetMinEnergy( 2.*GeV ); 66 G4GeneratorPrecompoundInterface* theCascade << 68 HyperonFTFP->SetMaxEnergy( 100.*TeV ); 67 theHyperonFTFP->SetTransport( theCascade ); << 69 68 theHyperonFTFP->SetHighEnergyGenerator( theS << 70 theStringModel = new G4FTFModel; 69 if ( quasiElastic ) theHyperonFTFP->SetQuasi << 71 theStringDecay = new G4ExcitedStringDecay(theLund = new G4LundStringFragmentation); >> 72 theStringModel->SetFragmentationModel(theStringDecay); >> 73 >> 74 theCascade = new G4GeneratorPrecompoundInterface; >> 75 thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler); >> 76 theCascade->SetDeExcitation(thePreEquilib); >> 77 >> 78 HyperonFTFP->SetTransport(theCascade); >> 79 HyperonFTFP->SetHighEnergyGenerator(theStringModel); 70 80 71 theBertini = new G4CascadeInterface; 81 theBertini = new G4CascadeInterface; 72 theBertini->SetMinEnergy( 0.0 ); << 82 theBertini->SetMinEnergy( 0.*GeV ); 73 theBertini->SetMaxEnergy( G4HadronicParamete << 83 theBertini->SetMaxEnergy( 6.*GeV ); 74 84 75 // AntiHyperons: Use FTFP for full energy ra << 85 // AntiHyperons: Use FTFP for full energy range, starting at 0. 76 theAntiHyperonFTFP = new G4TheoFSGenerator( << 77 theAntiHyperonFTFP->SetMinEnergy( 0.0 ); << 78 theAntiHyperonFTFP->SetMaxEnergy( theMax ); << 79 theAntiHyperonFTFP->SetTransport( theCascade << 80 theAntiHyperonFTFP->SetHighEnergyGenerator( << 81 if ( quasiElastic ) theAntiHyperonFTFP->SetQ << 82 86 83 // use Glauber-Gribov cross sections << 87 AntiHyperonFTFP = new G4TheoFSGenerator("FTFP"); 84 theInelasticCrossSection = new G4CrossSectio << 88 AntiHyperonFTFP->SetMinEnergy( 0.*GeV ); >> 89 AntiHyperonFTFP->SetMaxEnergy( 100.*TeV ); >> 90 AntiHyperonFTFP->SetTransport(theCascade); >> 91 AntiHyperonFTFP->SetHighEnergyGenerator(theStringModel); >> 92 >> 93 // use CHIPS cross sections >> 94 theCHIPSInelastic = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsHyperonInelasticXS::Default_Name()); 85 } 95 } 86 96 87 97 88 G4HyperonFTFPBuilder::~G4HyperonFTFPBuilder() << 98 G4HyperonFTFPBuilder::~G4HyperonFTFPBuilder() >> 99 { >> 100 delete HyperonFTFP; >> 101 delete theStringModel; >> 102 delete theStringDecay; >> 103 delete theCascade; >> 104 delete thePreEquilib; >> 105 // delete theHandler; >> 106 delete theBertini; >> 107 delete AntiHyperonFTFP; >> 108 >> 109 if (wasActivated) { >> 110 delete theLambdaInelastic; >> 111 delete theAntiLambdaInelastic; >> 112 delete theSigmaMinusInelastic; >> 113 delete theAntiSigmaMinusInelastic; >> 114 delete theSigmaPlusInelastic; >> 115 delete theAntiSigmaPlusInelastic; >> 116 delete theXiMinusInelastic; >> 117 delete theAntiXiMinusInelastic; >> 118 delete theXiZeroInelastic; >> 119 delete theAntiXiZeroInelastic; >> 120 delete theOmegaMinusInelastic; >> 121 delete theAntiOmegaMinusInelastic; >> 122 } >> 123 } 89 124 >> 125 void G4HyperonFTFPBuilder::Build() >> 126 { >> 127 G4ProcessManager * aProcMan = 0; >> 128 wasActivated = true; >> 129 >> 130 // Lambda >> 131 theLambdaInelastic = new G4LambdaInelasticProcess(); >> 132 theLambdaInelastic->RegisterMe(theBertini); >> 133 theLambdaInelastic->RegisterMe(HyperonFTFP); >> 134 theLambdaInelastic->AddDataSet(theCHIPSInelastic); >> 135 aProcMan = G4Lambda::Lambda()->GetProcessManager(); >> 136 aProcMan->AddDiscreteProcess(theLambdaInelastic); >> 137 >> 138 // AntiLambda >> 139 theAntiLambdaInelastic = new G4AntiLambdaInelasticProcess(); >> 140 theAntiLambdaInelastic->RegisterMe(AntiHyperonFTFP); >> 141 theAntiLambdaInelastic->AddDataSet(theCHIPSInelastic); >> 142 >> 143 aProcMan = G4AntiLambda::AntiLambda()->GetProcessManager(); >> 144 aProcMan->AddDiscreteProcess(theAntiLambdaInelastic); >> 145 >> 146 // SigmaMinus >> 147 theSigmaMinusInelastic = new G4SigmaMinusInelasticProcess(); >> 148 theSigmaMinusInelastic->RegisterMe(theBertini); >> 149 theSigmaMinusInelastic->RegisterMe(HyperonFTFP); >> 150 theSigmaMinusInelastic->AddDataSet(theCHIPSInelastic); >> 151 >> 152 aProcMan = G4SigmaMinus::SigmaMinus()->GetProcessManager(); >> 153 aProcMan->AddDiscreteProcess(theSigmaMinusInelastic); >> 154 >> 155 // anti-SigmaMinus >> 156 theAntiSigmaMinusInelastic = new G4AntiSigmaMinusInelasticProcess(); >> 157 theAntiSigmaMinusInelastic->RegisterMe(AntiHyperonFTFP); >> 158 theAntiSigmaMinusInelastic->AddDataSet(theCHIPSInelastic); >> 159 >> 160 aProcMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager(); >> 161 aProcMan->AddDiscreteProcess(theAntiSigmaMinusInelastic); >> 162 >> 163 // SigmaPlus >> 164 theSigmaPlusInelastic = new G4SigmaPlusInelasticProcess(); >> 165 theSigmaPlusInelastic->RegisterMe(theBertini); >> 166 theSigmaPlusInelastic->RegisterMe(HyperonFTFP); >> 167 theSigmaPlusInelastic->AddDataSet(theCHIPSInelastic); >> 168 >> 169 aProcMan = G4SigmaPlus::SigmaPlus()->GetProcessManager(); >> 170 aProcMan->AddDiscreteProcess(theSigmaPlusInelastic); >> 171 >> 172 // anti-SigmaPlus >> 173 theAntiSigmaPlusInelastic = new G4AntiSigmaPlusInelasticProcess(); >> 174 theAntiSigmaPlusInelastic->RegisterMe(AntiHyperonFTFP); >> 175 theAntiSigmaPlusInelastic->AddDataSet(theCHIPSInelastic); >> 176 >> 177 aProcMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager(); >> 178 aProcMan->AddDiscreteProcess(theAntiSigmaPlusInelastic); >> 179 >> 180 // XiMinus >> 181 theXiMinusInelastic = new G4XiMinusInelasticProcess(); >> 182 theXiMinusInelastic->RegisterMe(theBertini); >> 183 theXiMinusInelastic->RegisterMe(HyperonFTFP); >> 184 theXiMinusInelastic->AddDataSet(theCHIPSInelastic); >> 185 >> 186 aProcMan = G4XiMinus::XiMinus()->GetProcessManager(); >> 187 aProcMan->AddDiscreteProcess(theXiMinusInelastic); >> 188 >> 189 // anti-XiMinus >> 190 theAntiXiMinusInelastic = new G4AntiXiMinusInelasticProcess(); >> 191 theAntiXiMinusInelastic->RegisterMe(AntiHyperonFTFP); >> 192 theAntiXiMinusInelastic->AddDataSet(theCHIPSInelastic); >> 193 >> 194 aProcMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager(); >> 195 aProcMan->AddDiscreteProcess(theAntiXiMinusInelastic); >> 196 >> 197 // XiZero >> 198 theXiZeroInelastic = new G4XiZeroInelasticProcess(); >> 199 theXiZeroInelastic->RegisterMe(theBertini); >> 200 theXiZeroInelastic->RegisterMe(HyperonFTFP); >> 201 theXiZeroInelastic->AddDataSet(theCHIPSInelastic); >> 202 >> 203 aProcMan = G4XiZero::XiZero()->GetProcessManager(); >> 204 aProcMan->AddDiscreteProcess(theXiZeroInelastic); >> 205 >> 206 // anti-XiZero >> 207 theAntiXiZeroInelastic = new G4AntiXiZeroInelasticProcess(); >> 208 theAntiXiZeroInelastic->RegisterMe(AntiHyperonFTFP); >> 209 theAntiXiZeroInelastic->AddDataSet(theCHIPSInelastic); >> 210 >> 211 aProcMan = G4AntiXiZero::AntiXiZero()->GetProcessManager(); >> 212 aProcMan->AddDiscreteProcess(theAntiXiZeroInelastic); >> 213 >> 214 // OmegaMinus >> 215 theOmegaMinusInelastic = new G4OmegaMinusInelasticProcess(); >> 216 theOmegaMinusInelastic->RegisterMe(theBertini); >> 217 theOmegaMinusInelastic->RegisterMe(HyperonFTFP); >> 218 theOmegaMinusInelastic->AddDataSet(theCHIPSInelastic); >> 219 >> 220 aProcMan = G4OmegaMinus::OmegaMinus()->GetProcessManager(); >> 221 aProcMan->AddDiscreteProcess(theOmegaMinusInelastic); >> 222 >> 223 // anti-OmegaMinus >> 224 theAntiOmegaMinusInelastic = new G4AntiOmegaMinusInelasticProcess(); >> 225 theAntiOmegaMinusInelastic->RegisterMe(AntiHyperonFTFP); >> 226 theAntiOmegaMinusInelastic->AddDataSet(theCHIPSInelastic); 90 227 91 void G4HyperonFTFPBuilder::Build( G4HadronInel << 228 aProcMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager(); 92 if ( aP->GetParticleDefinition() && aP->Ge << 229 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 } 230 } >> 231 105 232 106 233