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 //--------------------------------------------------------------------------- 28 // 29 // ClassName: G4BertiniElectroNuclearBuilder 30 // 31 // Author: 2002 H.P. Wellisch 32 // 33 // Modified: 34 // 25.04.2006 V.Ivanchenko fix destructor 35 // 36 //---------------------------------------------------------------------------- 37 // 38 39 #include "G4BertiniElectroNuclearBuilder.hh" 40 41 #include "globals.hh" 42 #include "G4ios.hh" 43 #include "G4SystemOfUnits.hh" 44 45 #include "G4ParticleDefinition.hh" 46 #include "G4ParticleTable.hh" 47 #include "G4Gamma.hh" 48 #include "G4Electron.hh" 49 #include "G4Positron.hh" 50 #include "G4ProcessManager.hh" 51 #include "G4GammaGeneralProcess.hh" 52 #include "G4LossTableManager.hh" 53 54 #include "G4ElectroVDNuclearModel.hh" 55 #include "G4ElectronNuclearProcess.hh" 56 #include "G4PositronNuclearProcess.hh" 57 #include "G4PhotoNuclearCrossSection.hh" 58 59 #include "G4ios.hh" 60 61 #include "G4TheoFSGenerator.hh" 62 #include "G4GeneratorPrecompoundInterface.hh" 63 #include "G4QGSModel.hh" 64 #include "G4GammaParticipants.hh" 65 #include "G4QGSMFragmentation.hh" 66 #include "G4ExcitedStringDecay.hh" 67 68 69 #include "G4HadronicParameters.hh" 70 71 G4BertiniElectroNuclearBuilder::G4BertiniElectroNuclearBuilder(G4bool eNucl) 72 : eActivated(eNucl) 73 {} 74 75 void G4BertiniElectroNuclearBuilder::Build() 76 { 77 // gamma 78 thePhotoNuclearProcess = new G4HadronInelasticProcess( "photonNuclear", G4Gamma::Definition() ); 79 thePhotoNuclearProcess->AddDataSet( new G4PhotoNuclearCrossSection() ); 80 theGammaReaction = new G4CascadeInterface(); 81 82 auto theModel = new G4TheoFSGenerator; 83 84 auto theStringModel = new G4QGSModel< G4GammaParticipants >; 85 auto theStringDecay = new G4ExcitedStringDecay( new G4QGSMFragmentation() ); 86 theStringModel->SetFragmentationModel(theStringDecay); 87 88 auto theCascade = new G4GeneratorPrecompoundInterface(); 89 90 theModel->SetTransport(theCascade); 91 theModel->SetHighEnergyGenerator(theStringModel); 92 93 G4ProcessManager* aProcMan = nullptr; 94 95 theGammaReaction->SetMaxEnergy(3.5*GeV); 96 thePhotoNuclearProcess->RegisterMe(theGammaReaction); 97 theModel->SetMinEnergy(3.*GeV); 98 theModel->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() ); 99 thePhotoNuclearProcess->RegisterMe(theModel); 100 101 G4GammaGeneralProcess* sp = 102 dynamic_cast<G4GammaGeneralProcess*>(G4LossTableManager::Instance()->GetGammaGeneralProcess()); 103 if ( nullptr != sp ) { 104 sp->AddHadProcess(thePhotoNuclearProcess); 105 } else { 106 aProcMan = G4Gamma::Gamma()->GetProcessManager(); 107 aProcMan->AddDiscreteProcess(thePhotoNuclearProcess); 108 } 109 110 // e+, e- 111 if (eActivated) { 112 113 auto theElectronNuclearProcess = new G4ElectronNuclearProcess(); 114 auto thePositronNuclearProcess = new G4PositronNuclearProcess(); 115 auto theElectroReaction = new G4ElectroVDNuclearModel(); 116 117 aProcMan = G4Electron::Electron()->GetProcessManager(); 118 theElectronNuclearProcess->RegisterMe(theElectroReaction); 119 aProcMan->AddDiscreteProcess(theElectronNuclearProcess); 120 121 aProcMan = G4Positron::Positron()->GetProcessManager(); 122 thePositronNuclearProcess->RegisterMe(theElectroReaction); 123 aProcMan->AddDiscreteProcess(thePositronNuclearProcess); 124 } 125 } 126 127