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 // GEANT 4 class header file 29 // 30 // History: first implementation, A. Feliciello, 30th June 1998 31 // A.Pavliouk 26.11.98 32 // In Set...() methods a pointer is deleted now before new 33 // value will be asigned. 34 // M.Kelsey 07.03.2011 35 // Add data member and Set method to store original projectile 36 // V.Ivanchenko 03.01.2012 37 // Added G4VPreCompoundModel pointer to the constructor and cleanup 38 // V. Uzhinsky Nov. 2012 39 // Added method PropagateNuclNucl for simulation of nucleus-nucleus inter. 40 // ----------------------------------------------------------------------------- 41 42 #ifndef G4VIntraNuclearTransportModel_h 43 #define G4VIntraNuclearTransportModel_h 1 44 45 // Class Description 46 // Base class for intra-nuclear transport models in geant4. By merit 47 // of inheriting from this class a intra-nuclear transport model can 48 // be used in conjunction with any precompound, string parton model 49 // or other high energy generator in the generation of final states 50 // for inelastic scattering. 51 // Class Description - End 52 53 #include "G4V3DNucleus.hh" 54 #include "G4VPreCompoundModel.hh" 55 #include "G4HadronicInteraction.hh" 56 #include "G4ReactionProductVector.hh" 57 #include "G4ReactionProduct.hh" 58 #include "G4HadProjectile.hh" 59 #include "G4HadFinalState.hh" 60 61 class G4KineticTrackVector; 62 63 class G4VIntraNuclearTransportModel : public G4HadronicInteraction 64 { 65 public: 66 67 explicit G4VIntraNuclearTransportModel(const G4String& mName = "CascadeModel", 68 G4VPreCompoundModel* ptr = nullptr); 69 70 virtual ~G4VIntraNuclearTransportModel(); 71 72 virtual 73 G4ReactionProductVector* Propagate(G4KineticTrackVector* theSecondaries, 74 G4V3DNucleus* theNucleus) = 0; 75 76 virtual 77 G4ReactionProductVector* PropagateNuclNucl(G4KineticTrackVector* theSecondaries, 78 G4V3DNucleus* theNucleus, 79 G4V3DNucleus* theProjectileNucleus); // Uzhi Nov. 2012 80 81 inline void SetDeExcitation(G4VPreCompoundModel* ptr); 82 83 inline void Set3DNucleus(G4V3DNucleus* const value); 84 85 inline void SetPrimaryProjectile(const G4HadProjectile &aPrimary); 86 87 inline const G4String& GetModelName() const; 88 89 virtual void ModelDescription(std::ostream& outFile) const ; 90 virtual void PropagateModelDescription(std::ostream& outFile) const ; 91 92 G4VIntraNuclearTransportModel(const G4VIntraNuclearTransportModel& right) = delete; 93 const G4VIntraNuclearTransportModel& operator=(const G4VIntraNuclearTransportModel &right) = delete; 94 G4bool operator==(const G4VIntraNuclearTransportModel& right) const = delete; 95 G4bool operator!=(const G4VIntraNuclearTransportModel& right) const = delete; 96 97 protected: 98 99 inline G4V3DNucleus* Get3DNucleus() const; 100 101 inline G4VPreCompoundModel* GetDeExcitation() const; 102 103 inline const G4HadProjectile* GetPrimaryProjectile() const; 104 105 G4String theTransportModelName; 106 107 G4V3DNucleus* the3DNucleus; 108 109 G4VPreCompoundModel* theDeExcitation; 110 111 const G4HadProjectile* thePrimaryProjectile; 112 }; 113 114 inline const G4String& G4VIntraNuclearTransportModel::GetModelName() const 115 { 116 return theTransportModelName; 117 } 118 119 inline G4V3DNucleus* G4VIntraNuclearTransportModel::Get3DNucleus() const 120 { 121 return the3DNucleus; 122 } 123 124 inline void G4VIntraNuclearTransportModel::Set3DNucleus(G4V3DNucleus* const value) 125 { 126 delete the3DNucleus; the3DNucleus = value; 127 } 128 129 inline G4VPreCompoundModel* G4VIntraNuclearTransportModel::GetDeExcitation() const 130 { 131 return theDeExcitation; 132 } 133 134 inline void 135 G4VIntraNuclearTransportModel::SetDeExcitation(G4VPreCompoundModel* value) 136 { 137 // previous pre-compound model will be deleted at the end of job 138 theDeExcitation = value; 139 } 140 141 inline const G4HadProjectile* 142 G4VIntraNuclearTransportModel::GetPrimaryProjectile() const 143 { 144 return thePrimaryProjectile; 145 } 146 147 inline void 148 G4VIntraNuclearTransportModel::SetPrimaryProjectile(const G4HadProjectile &aPrimary) 149 { 150 // NOTE: Previous pointer is NOT deleted: passed by reference, no ownership 151 thePrimaryProjectile = &aPrimary; 152 } 153 154 #endif 155 156 157