Changeset 962 for trunk/source/processes/hadronic/models/management/include
- Timestamp:
- Apr 6, 2009, 12:30:29 PM (16 years ago)
- Location:
- trunk/source/processes/hadronic/models/management/include
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/management/include/G4HadronicInteraction.hh
r819 r962 25 25 // 26 26 // 27 // $Id: G4HadronicInteraction.hh,v 1. 8 2007/01/11 05:30:01 dennisExp $28 // GEANT4 tag $Name: $27 // $Id: G4HadronicInteraction.hh,v 1.9 2009/01/24 11:56:27 vnivanch Exp $ 28 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 29 29 // 30 // Hadronic Interaction abstract base class 31 // This class is the base class for the model classes. 32 // It sorts out the energy-range for the models and provides 33 // class utilities. 34 // original by H.P. Wellisch 35 // Modified by J.L.Chuma, TRIUMF, 21-Mar-1997 36 // Last modified: 3-Apr-1997 37 // Added units to energy initialization: J.L. Chuma 04-Apr-97 38 // Modified by J.L.Chuma, 05-May-97 to Initialize theBlockedCounter 39 // Modified by J.L.Chuma, 08-Jul-97 to implement the Nucleus changes 40 // Adding a registry for memory management of hadronic models, HPW 22-Mar-99 30 // Hadronic Interaction abstract base class 31 // This class is the base class for the model classes. 32 // It sorts out the energy-range for the models and provides 33 // class utilities. 34 // original by H.P. Wellisch 35 // Modified by J.L.Chuma, TRIUMF, 21-Mar-1997 36 // Last modified: 3-Apr-1997 37 // Added units to energy initialization: J.L. Chuma 04-Apr-97 38 // Modified by J.L.Chuma, 05-May-97 to Initialize theBlockedCounter 39 // Modified by J.L.Chuma, 08-Jul-97 to implement the Nucleus changes 40 // Adding a registry for memory management of hadronic models, HPW 22-Mar-99 41 // 23-Jan-2009 V.Ivanchenko move constructor and destructor to the body 42 // and reorder methods in the header 41 43 42 44 // Class Description 43 45 // This is the base class for all hadronic interaction models in geant4. 44 // If you want to implement a new way of producing a final state, please inherit45 // from here.46 // If you want to implement a new way of producing a final state, please, 47 // inherit from here. 46 48 // Class Description - End 47 49 … … 50 52 51 53 #include "G4HadFinalState.hh" 52 #include "G4DynamicParticle.hh"53 54 #include "G4ReactionDynamics.hh" 54 55 #include "G4Material.hh" … … 56 57 #include "G4Track.hh" 57 58 #include "G4HadProjectile.hh" 58 #include "G4HadronicInteractionRegistry.hh"59 #include "G4HadronicException.hh"60 59 61 class G4HadronicInteraction 62 { 63 public: 60 class G4HadronicInteraction 61 { 62 public: // With description 63 64 64 65 G4HadronicInteraction(const G4String& modelName = "HadronicModel") : 66 verboseLevel(0), theMinEnergy(0.0*GeV), theMaxEnergy(25.0*GeV), 67 isBlocked(false), theModelName(modelName) 68 { 69 G4HadronicInteractionRegistry::RegisterMe(this); 70 } 65 G4HadronicInteraction(const G4String& modelName = "HadronicModel"); 71 66 72 virtual ~G4HadronicInteraction() 73 { 74 G4HadronicInteractionRegistry::RemoveMe(this); 75 } 67 virtual ~G4HadronicInteraction(); 76 68 77 private: 69 virtual G4HadFinalState *ApplyYourself(const G4HadProjectile &aTrack, 70 G4Nucleus & targetNucleus ) = 0; 71 // This is the interface to implement for final state production code. 72 73 virtual G4bool IsApplicable(const G4HadProjectile &/*aTrack*/, 74 G4Nucleus & /*targetNucleus*/) 75 { return true;} 76 77 inline G4double GetMinEnergy() const 78 { return theMinEnergy; } 78 79 79 inline G4HadronicInteraction( 80 const G4HadronicInteraction &right ) 81 { *this = right; } 80 virtual G4double GetMinEnergy( const G4Material *aMaterial, 81 const G4Element *anElement ) const; 82 83 inline void SetMinEnergy( const G4double anEnergy ) 84 { theMinEnergy = anEnergy; } 82 85 83 inline const G4HadronicInteraction & operator=( 84 const G4HadronicInteraction &right ) 85 { 86 G4String text = "unintended use of G4HadronicInteraction::operator="; 87 throw G4HadronicException(__FILE__, __LINE__, text); 88 return right; 89 } 86 virtual void SetMinEnergy( G4double anEnergy, G4Element *anElement ); 90 87 91 public:88 virtual void SetMinEnergy( G4double anEnergy, G4Material *aMaterial ); 92 89 93 inline G4bool operator==( 94 const G4HadronicInteraction &right ) const 95 { return ( this == (G4HadronicInteraction *) &right ); } 90 inline G4double GetMaxEnergy() const 91 { return theMaxEnergy; } 96 92 97 inline G4bool operator!=( 98 const G4HadronicInteraction &right ) const 99 { return ( this != (G4HadronicInteraction *) &right ); } 93 virtual G4double GetMaxEnergy( const G4Material *aMaterial, 94 const G4Element *anElement ) const; 100 95 101 inline G4double GetMinEnergy() const102 { return theMinEnergy; }96 inline void SetMaxEnergy( const G4double anEnergy ) 97 { theMaxEnergy = anEnergy; } 103 98 104 virtual G4double GetMinEnergy( const G4Material *aMaterial, 105 const G4Element *anElement ) const; 99 virtual void SetMaxEnergy( G4double anEnergy, G4Element *anElement ); 106 100 107 inline void SetMinEnergy( const G4double anEnergy ) 108 { theMinEnergy = anEnergy; } 109 110 virtual void SetMinEnergy( G4double anEnergy, G4Element *anElement ); 111 112 virtual void SetMinEnergy( G4double anEnergy, G4Material *aMaterial ); 113 114 inline G4double GetMaxEnergy() const 115 { return theMaxEnergy; } 116 117 virtual G4double GetMaxEnergy( const G4Material *aMaterial, 118 const G4Element *anElement ) const; 119 120 inline void SetMaxEnergy( const G4double anEnergy ) 121 { theMaxEnergy = anEnergy; } 122 123 virtual void SetMaxEnergy( G4double anEnergy, G4Element *anElement ); 124 125 virtual void SetMaxEnergy( G4double anEnergy, G4Material *aMaterial ); 101 virtual void SetMaxEnergy( G4double anEnergy, G4Material *aMaterial ); 126 102 127 128 103 inline const G4HadronicInteraction *GetMyPointer() const 104 { return this; } 129 105 130 131 106 inline G4int GetVerboseLevel() const 107 { return verboseLevel; } 132 108 133 134 109 inline void SetVerboseLevel( G4int value ) 110 { verboseLevel = value; } 135 111 136 inline const G4String& GetModelName() const 137 { return theModelName; } 138 139 public: // With description 140 // This is the interface to implement for final state production code. 141 142 virtual G4HadFinalState *ApplyYourself( 143 const G4HadProjectile &aTrack, G4Nucleus & targetNucleus ) = 0; 112 inline const G4String& GetModelName() const 113 { return theModelName; } 144 114 145 115 public: // Without description 146 116 147 117 virtual void DeActivateFor( G4Material *aMaterial ); 148 118 149 150 151 152 153 154 119 virtual void ActivateFor( G4Material *aMaterial ) 120 { 121 Block(); 122 SetMaxEnergy(GetMaxEnergy(), aMaterial); 123 SetMinEnergy(GetMinEnergy(), aMaterial); 124 } 155 125 156 157 158 159 160 161 162 126 virtual void DeActivateFor( G4Element *anElement ); 127 virtual void ActivateFor( G4Element *anElement ) 128 { 129 Block(); 130 SetMaxEnergy(GetMaxEnergy(), anElement); 131 SetMinEnergy(GetMinEnergy(), anElement); 132 } 163 133 164 134 virtual G4bool IsBlocked( const G4Material *aMaterial ) const; 165 135 166 virtual G4bool IsBlocked( const G4Element *anElement) const; 136 virtual G4bool IsBlocked( const G4Element *anElement) const; 137 138 inline G4bool operator==(const G4HadronicInteraction &right ) const 139 { return ( this == (G4HadronicInteraction *) &right ); } 167 140 168 virtual G4bool IsApplicable(const G4HadProjectile &/*aTrack*/, 169 G4Nucleus & /*targetNucleus*/){ return true;} 170 protected: 141 inline G4bool operator!=(const G4HadronicInteraction &right ) const 142 { return ( this != (G4HadronicInteraction *) &right ); } 171 143 172 G4HadFinalState theParticleChange; 173 // the G4HadFinalState object which is modified and returned 174 // by address by the ApplyYourself method, 175 // (instead of aParticleChange as found in G4VProcess) 144 private: 176 145 177 G4int verboseLevel; 178 // control flag for output messages 179 // 0: silent 180 // 1: warning messages 181 // 2: more 182 // (instead of verboseLevel as found in G4VProcess) 146 G4HadronicInteraction(const G4HadronicInteraction &right ); 183 147 184 G4ReactionDynamics theReactionDynamics; 148 const G4HadronicInteraction& operator=(const G4HadronicInteraction &right); 149 150 protected: 151 152 inline G4bool IsBlocked() const { return isBlocked;} 153 inline void Block() { isBlocked = true; } 185 154 186 // these two have global validity 187 // units are assumed to be MeV 155 G4HadFinalState theParticleChange; 156 // the G4HadFinalState object which is modified and returned 157 // by address by the ApplyYourself method, 158 // (instead of aParticleChange as found in G4VProcess) 188 159 189 G4double theMinEnergy; 190 G4double theMaxEnergy; 160 G4int verboseLevel; 161 // control flag for output messages 162 // 0: silent 163 // 1: warning messages 164 // 2: more 165 // (instead of verboseLevel as found in G4VProcess) 191 166 192 G4bool IsBlocked() const { return isBlocked;} 193 void Block() { isBlocked = true; } 194 G4bool isBlocked; 167 G4ReactionDynamics theReactionDynamics; 168 169 // these two have global validity 170 // units are assumed to be MeV 171 172 G4double theMinEnergy; 173 G4double theMaxEnergy; 174 175 G4bool isBlocked; 195 176 196 177 G4String theModelName; 197 178 198 179 private: 199 180 200 201 202 203 204 205 206 181 std::vector<std::pair<G4double, G4Material *> > theMinEnergyList; 182 std::vector<std::pair<G4double, G4Material *> > theMaxEnergyList; 183 std::vector<std::pair<G4double, G4Element *> > theMinEnergyListElements; 184 std::vector<std::pair<G4double, G4Element *> > theMaxEnergyListElements; 185 std::vector<G4Material *> theBlockedList; 186 std::vector<G4Element *> theBlockedListElements; 187 }; 207 188 208 189 #endif -
trunk/source/processes/hadronic/models/management/include/G4HadronicInteractionRegistry.hh
r819 r962 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4HadronicInteractionRegistry.hh,v 1.4 2009/02/14 19:24:52 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 28 // 29 // 23-Jan-2009 V.Ivanchenko make the class to be a singleton 30 31 // Class Description 32 // This is the a singleton class to store all hadronic interactions 33 // Class Description - End 34 26 35 #ifndef G4HadronicInteractionRegistry_h 27 36 #define G4HadronicInteractionRegistry_h 1 … … 29 38 #include <vector> 30 39 #include "globals.hh" 40 31 41 class G4HadronicInteraction; 32 42 33 43 class G4HadronicInteractionRegistry 34 44 { 35 public: 45 public: 46 47 static G4HadronicInteractionRegistry* Instance(); 48 // access 36 49 37 50 ~G4HadronicInteractionRegistry(); 51 52 void Clean(); 53 //delete models 38 54 39 static void RegisterMe(G4HadronicInteraction * aModel); 40 static void RemoveMe(G4HadronicInteraction * aModel); 55 void RegisterMe(G4HadronicInteraction * aModel); 56 //register new model 57 58 void RemoveMe(G4HadronicInteraction * aModel); 59 //deregister model 41 60 42 protected:61 private: 43 62 44 G4HadronicInteractionRegistry(G4String ); 45 static G4HadronicInteractionRegistry & theRegistry(); 63 G4HadronicInteractionRegistry(); 46 64 47 private: 48 49 // !!! can not use "copy constructor" nor "default constructor" !!!! 50 G4HadronicInteractionRegistry(const G4HadronicInteractionRegistry &right) 51 { nModels = right.nModels; } 52 G4HadronicInteractionRegistry() {nModels = 0;} 53 54 // !!! Assignment operation is forbidden !!! 55 const G4HadronicInteractionRegistry & operator=(const G4HadronicInteractionRegistry &) 56 { return *this;} 57 58 void AddModel(G4HadronicInteraction * aModel); 65 static G4HadronicInteractionRegistry* theInstance; 59 66 60 67 G4int nModels; -
trunk/source/processes/hadronic/models/management/include/G4InelasticInteraction.hh
r819 r962 25 25 // 26 26 // 27 // $Id: G4InelasticInteraction.hh,v 1. 5 2007/01/11 05:30:12 dennisExp $28 // GEANT4 tag $Name: $27 // $Id: G4InelasticInteraction.hh,v 1.6 2009/01/24 11:56:27 vnivanch Exp $ 28 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 29 29 // 30 // Hadronic Process: Inelastic Interaction 31 // This class is an abstract base class, since the pure virtual 32 // function ApplyYourself has not been defined yet. 33 // original by H.P. Wellisch 34 // Modified by J.L. Chuma, TRIUMF, 22-Nov-1996 35 // Modified by J.L. Chuma 27-Mar-1997 36 // Modified by J.L. Chuma 30-Apr-1997 37 // Modified by J.L. Chuma 05-Aug-1997 to pass the original incident particle to 38 // CalculateMomenta 39 // Modified by J.L. Chuma 05-Jun-1998 to include quasiElastic flag to allow for 40 // TwoBody to be called directly, bypassing 41 // TwoCluster, and allowing TwoCluster to be 42 // called with no secondaries 30 // Hadronic Process: Inelastic Interaction 31 // This class is an abstract base class, since the pure virtual 32 // function ApplyYourself has not been defined yet. 33 // original by H.P. Wellisch 34 // Modified by J.L. Chuma, TRIUMF, 22-Nov-1996 35 // Modified by J.L. Chuma 27-Mar-1997 36 // Modified by J.L. Chuma 30-Apr-1997 37 // Modified by J.L. Chuma 05-Aug-1997 to pass the original incident particle to 38 // CalculateMomenta 39 // Modified by J.L. Chuma 05-Jun-1998 to include quasiElastic flag to allow for 40 // TwoBody to be called directly, bypassing 41 // TwoCluster, and allowing TwoCluster to be 42 // called with no secondaries 43 // 23-Jan-2009 V.Ivanchenko move constructor and destructor to the body 43 44 44 45 #ifndef G4InelasticInteraction_h … … 53 54 #include "G4ReactionDynamics.hh" 54 55 55 56 57 56 class G4InelasticInteraction : public G4HadronicInteraction 57 { 58 public: 58 59 59 G4InelasticInteraction(const G4String& modelName = "LEInelastic") 60 : G4HadronicInteraction(modelName) 61 { cache = 0.0;} 60 G4InelasticInteraction(const G4String& modelName = "LEInelastic"); 62 61 63 virtual ~G4InelasticInteraction() 64 { } 62 virtual ~G4InelasticInteraction(); 65 63 66 64 protected: 67 65 68 66 G4double Pmltpc( G4int np, G4int nm, G4int nz, G4int n, … … 100 98 G4ReactionProduct &targetParticle, 101 99 G4bool &incidentHasChanged ); 102 100 private: 103 101 104 102 G4double cache; 105 103 G4ThreeVector what; 106 104 107 105 }; 108 106 109 107 #endif -
trunk/source/processes/hadronic/models/management/include/G4V3DNucleus.hh
r819 r962 25 25 // 26 26 // 27 // $Id: G4V3DNucleus.hh,v 1. 5 2006/06/29 20:45:37 gunter Exp $28 // GEANT4 tag $Name: $27 // $Id: G4V3DNucleus.hh,v 1.6 2008/05/16 14:02:37 gunter Exp $ 28 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 29 29 // 30 30 #ifndef G4V3DNucleus_h … … 69 69 virtual void DoTranslation(const G4ThreeVector & theShift) = 0; 70 70 virtual const G4VNuclearDensity * GetNuclearDensity() const = 0; 71 virtual void SortNucleonsInZ() = 0; 72 71 73 public: 72 74 std::pair<G4double, G4double> ChooseImpactXandY(G4double maxImpact); -
trunk/source/processes/hadronic/models/management/include/G4VHighEnergyGenerator.hh
r819 r962 26 26 // 27 27 // $Id: G4VHighEnergyGenerator.hh,v 1.4 2006/06/29 20:45:41 gunter Exp $ 28 // GEANT4 tag $Name: $28 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 29 29 // 30 30 #ifndef G4VHighEnergyGenerator_h -
trunk/source/processes/hadronic/models/management/include/G4VIntraNuclearTransportModel.hh
r819 r962 26 26 // 27 27 // $Id: G4VIntraNuclearTransportModel.hh,v 1.4 2007/01/11 05:29:46 dennis Exp $ 28 // GEANT4 tag $Name: $28 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 29 29 // 30 30 // $Id: G4IntraNuclearTransportMode.hh,v 1.0 1998/06/30 -
trunk/source/processes/hadronic/models/management/include/G4VKineticNucleon.hh
r819 r962 26 26 // 27 27 // $Id: G4VKineticNucleon.hh,v 1.4 2006/06/29 20:45:47 gunter Exp $ 28 // GEANT4 tag $Name: $28 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 29 29 // 30 30 #ifndef G4VKineticNucleon_h -
trunk/source/processes/hadronic/models/management/include/G4VNuclearDensity.hh
r819 r962 26 26 // 27 27 // $Id: G4VNuclearDensity.hh,v 1.4 2006/06/29 20:45:49 gunter Exp $ 28 // GEANT4 tag $Name: $28 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 29 29 // 30 30 #ifndef G4VNuclearDensity_h -
trunk/source/processes/hadronic/models/management/include/G4VPreCompoundModel.hh
r819 r962 26 26 // 27 27 // $Id: G4VPreCompoundModel.hh,v 1.5 2007/01/11 05:29:34 dennis Exp $ 28 // GEANT4 tag $Name: $28 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 29 29 // 30 30
Note: See TracChangeset
for help on using the changeset viewer.