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 // by V. Lara 27 // 28 // Class Description 29 // Model implementation for pre-equilibrium decay models in geant4. 30 // To be used in your physics list, in case you neeed this kind of physics. 31 // Can be used as a stand-allone model, but also in conjunction with an intra-nuclear 32 // transport, or any of the string-parton models. 33 // Class Description - End 34 // 35 // Modified: 36 // 03.09.2008 J.M.Quesada added external choice of inverse 37 // cross section option.(default OPTxs=3) 38 // 06.09.2008 J.M.Quesada external choices have been added for: 39 // - superimposed Coulomb barrier (if useSICB=true, default false) 40 // - "never go back" hipothesis (if useNGB=true, default false) 41 // - soft cutoff from preeq. to equlibrium (if useSCO=true, default false) 42 // - CEM transition probabilities (if useCEMtr=true) 43 // 30.10.2009 J.M.Quesada CEM transition probabilities are set as default 44 // 20.08.2010 V.Ivanchenko Cleanup of the code 45 // 03.01.2012 V.Ivanchenko Added pointer to G4ExcitationHandler to the 46 // constructor 47 48 #ifndef G4PreCompoundModel_h 49 #define G4PreCompoundModel_h 1 50 51 #include "G4VPreCompoundModel.hh" 52 #include "G4Fragment.hh" 53 #include "G4ReactionProductVector.hh" 54 #include "G4ReactionProduct.hh" 55 #include "G4ExcitationHandler.hh" 56 57 class G4PreCompoundEmission; 58 class G4VPreCompoundTransitions; 59 class G4NuclearLevelData; 60 class G4ParticleDefinition; 61 62 class G4PreCompoundModel : public G4VPreCompoundModel 63 { 64 public: 65 66 explicit G4PreCompoundModel(G4ExcitationHandler* ptr = nullptr); 67 68 virtual ~G4PreCompoundModel(); 69 70 virtual G4HadFinalState * ApplyYourself(const G4HadProjectile & thePrimary, 71 G4Nucleus & theNucleus) final; 72 73 virtual G4ReactionProductVector* DeExcite(G4Fragment& aFragment) final; 74 75 virtual void BuildPhysicsTable(const G4ParticleDefinition&) final; 76 77 virtual void InitialiseModel() final; 78 79 virtual void ModelDescription(std::ostream& outFile) const final; 80 virtual void DeExciteModelDescription(std::ostream& outFile) const final; 81 82 private: 83 84 inline 85 void PerformEquilibriumEmission(const G4Fragment & aFragment, 86 G4ReactionProductVector * result) const; 87 88 G4PreCompoundModel(const G4PreCompoundModel &) = delete; 89 const G4PreCompoundModel& operator=(const G4PreCompoundModel &right) = delete; 90 G4bool operator==(const G4PreCompoundModel &right) const = delete; 91 G4bool operator!=(const G4PreCompoundModel &right) const = delete; 92 93 G4PreCompoundEmission* theEmission = nullptr; 94 G4VPreCompoundTransitions* theTransition = nullptr; 95 G4NuclearLevelData* fNuclData = nullptr; 96 97 const G4ParticleDefinition* proton; 98 const G4ParticleDefinition* neutron; 99 100 G4double fLowLimitExc = 0.0; 101 G4double fHighLimitExc = DBL_MAX; 102 103 G4bool useSCO = false; 104 G4bool isInitialised = false; 105 G4bool isActive = true; 106 107 G4int minZ = 3; 108 G4int minA = 5; 109 G4int modelID = -1; 110 111 G4HadFinalState theResult; 112 }; 113 114 inline void G4PreCompoundModel::PerformEquilibriumEmission( 115 const G4Fragment & aFragment, 116 G4ReactionProductVector * result) const 117 { 118 G4ReactionProductVector* deexResult = 119 GetExcitationHandler()->BreakItUp(aFragment); 120 result->insert(result->end(),deexResult->begin(), deexResult->end()); 121 delete deexResult; 122 } 123 124 #endif 125 126