Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4QMDNucleus Class Reference

#include <G4QMDNucleus.hh>

Inheritance diagram for G4QMDNucleus:

Public Member Functions

 G4QMDNucleus ()
G4LorentzVector Get4Momentum ()
G4int GetMassNumber ()
G4int GetAtomicNumber ()
void CalEnergyAndAngularMomentumInCM ()
G4double GetNuclearMass ()
void SetTotalPotential (G4double x)
G4double GetExcitationEnergy ()
G4int GetAngularMomentum ()
Public Member Functions inherited from G4QMDSystem
 G4QMDSystem ()
virtual ~G4QMDSystem ()
void SetParticipant (G4QMDParticipant *particle)
void SetSystem (G4QMDSystem *, G4ThreeVector, G4ThreeVector)
void SubtractSystem (G4QMDSystem *)
G4QMDParticipantEraseParticipant (G4int i)
void DeleteParticipant (G4int i)
void InsertParticipant (G4QMDParticipant *particle, G4int j)
G4int GetTotalNumberOfParticipant ()
G4QMDParticipantGetParticipant (G4int i)
void IncrementCollisionCounter ()
G4int GetNOCollision ()
void ShowParticipants ()
void Clear ()

Additional Inherited Members

Protected Attributes inherited from G4QMDSystem
std::vector< G4QMDParticipant * > participants

Detailed Description

Definition at line 43 of file G4QMDNucleus.hh.

Constructor & Destructor Documentation

◆ G4QMDNucleus()

G4QMDNucleus::G4QMDNucleus ( )

Definition at line 38 of file G4QMDNucleus.cc.

39{
40 G4QMDParameters* parameters = G4QMDParameters::GetInstance();
41 hbc = parameters->Get_hbc();
42
43 jj = 0; // will be calcualted in CalEnergyAndAngularMomentumInCM;
44 potentialEnergy = 0.0; // will be set through set method
45 excitationEnergy = 0.0;
46}
static G4QMDParameters * GetInstance()

Member Function Documentation

◆ CalEnergyAndAngularMomentumInCM()

void G4QMDNucleus::CalEnergyAndAngularMomentumInCM ( )

Definition at line 138 of file G4QMDNucleus.cc.

139{
140
141 //G4cout << "CalEnergyAndAngularMomentumInCM " << this->GetAtomicNumber() << " " << GetMassNumber() << G4endl;
142
143 G4double gamma = Get4Momentum().gamma();
144 G4ThreeVector beta = Get4Momentum().v()/ Get4Momentum().e();
145
146 G4ThreeVector pcm0( 0.0 ) ;
147
149 pcm.resize( n );
150
151 for ( G4int i= 0; i < n ; i++ )
152 {
154
155 G4double trans = gamma / ( gamma + 1.0 ) * p_i * beta;
156 pcm[i] = p_i - trans*beta;
157
158 pcm0 += pcm[i];
159 }
160
161 pcm0 = pcm0 / double ( n );
162
163 //G4cout << "pcm0 " << pcm0 << G4endl;
164
165 for ( G4int i= 0; i < n ; i++ )
166 {
167 pcm[i] += -pcm0;
168 //G4cout << "pcm " << i << " " << pcm[i] << G4endl;
169 }
170
171
172 G4double tmass = 0;
173 G4ThreeVector rcm0( 0.0 ) ;
174 rcm.resize( n );
175 es.resize( n );
176
177 for ( G4int i= 0; i < n ; i++ )
178 {
180 G4double trans = gamma / ( gamma + 1.0 ) * ri * beta;
181
182 es[i] = std::sqrt ( G4Pow::GetInstance()->powN ( GetParticipant( i )->GetMass() , 2 ) + pcm[i]*pcm[i] );
183
184 rcm[i] = ri + trans*beta;
185
186 rcm0 += rcm[i]*es[i];
187
188 tmass += es[i];
189 }
190
191 if (tmass != 0.)
192 {
193 rcm0 = rcm0/tmass;
194 }
195 else
196 {
197 rcm0 = G4ThreeVector(0.);
198 }
199
200 for ( G4int i= 0; i < n ; i++ )
201 {
202 rcm[i] += -rcm0;
203 //G4cout << "rcm " << i << " " << rcm[i] << G4endl;
204 }
205
206// Angular momentum
207
208 G4ThreeVector rl ( 0.0 );
209 for ( G4int i= 0; i < n ; i++ )
210 {
211 rl += rcm[i].cross ( pcm[i] );
212 }
213
214// DHW: move hbc outside of sqrt to get correct units
215// jj = int ( std::sqrt ( rl*rl / hbc ) + 0.5 );
216
217 jj = int (std::sqrt(rl*rl)/hbc + 0.5);
218
219// kinetic energy per nucleon in CM
220
221 G4double totalMass = 0.0;
222 for ( G4int i= 0; i < n ; i++ )
223 {
224 // following two lines are equivalent
225 //totalMass += GetParticipant( i )->GetDefinition()->GetPDGMass()/GeV;
226 totalMass += GetParticipant( i )->GetMass();
227 }
228
229 //G4double kineticEnergyPerNucleon = ( std::accumulate ( es.begin() , es.end() , 0.0 ) - totalMass )/n;
230
231// Total (not per nucleion ) Binding Energy
232 G4double bindingEnergy = ( std::accumulate ( es.begin() , es.end() , 0.0 ) -totalMass ) + potentialEnergy;
233
234 //G4cout << "KineticEnergyPerNucleon in GeV " << kineticEnergyPerNucleon << G4endl;
235 //G4cout << "KineticEnergySum in GeV " << std::accumulate ( es.begin() , es.end() , 0.0 ) - totalMass << G4endl;
236 //G4cout << "PotentialEnergy in GeV " << potentialEnergy << G4endl;
237 //G4cout << "BindingEnergy in GeV " << bindingEnergy << G4endl;
238 //G4cout << "G4BindingEnergy in GeV " << G4NucleiProperties::GetBindingEnergy( GetAtomicNumber() , GetMassNumber() )/GeV << G4endl;
239
241 //G4cout << "excitationEnergy in GeV " << excitationEnergy << G4endl;
242 if ( excitationEnergy < 0 ) excitationEnergy = 0.0;
243
244}
CLHEP::Hep3Vector G4ThreeVector
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
Hep3Vector v() const
static G4double GetBindingEnergy(const G4int A, const G4int Z)
static G4Pow * GetInstance()
Definition G4Pow.cc:41
G4int GetAtomicNumber()
G4int GetMassNumber()
G4LorentzVector Get4Momentum()
G4ThreeVector GetPosition()
G4ThreeVector GetMomentum()
G4QMDParticipant * GetParticipant(G4int i)
G4int GetTotalNumberOfParticipant()
G4double bindingEnergy(G4int A, G4int Z)

Referenced by G4QMDReaction::ApplyYourself(), and G4QMDMeanField::SetNucleus().

◆ Get4Momentum()

G4LorentzVector G4QMDNucleus::Get4Momentum ( )

Definition at line 56 of file G4QMDNucleus.cc.

57{
58 G4LorentzVector p( 0 );
59 std::vector< G4QMDParticipant* >::iterator it;
60 for ( it = participants.begin() ; it != participants.end() ; it++ )
61 p += (*it)->Get4Momentum();
62
63 return p;
64}
CLHEP::HepLorentzVector G4LorentzVector
std::vector< G4QMDParticipant * > participants

Referenced by CalEnergyAndAngularMomentumInCM().

◆ GetAngularMomentum()

G4int G4QMDNucleus::GetAngularMomentum ( )
inline

Definition at line 65 of file G4QMDNucleus.hh.

65{ return jj; };

◆ GetAtomicNumber()

G4int G4QMDNucleus::GetAtomicNumber ( )

Definition at line 89 of file G4QMDNucleus.cc.

90{
91 G4int Z = 0;
92 std::vector< G4QMDParticipant* >::iterator it;
93 for ( it = participants.begin() ; it != participants.end() ; it++ )
94 {
95 if ( (*it)->GetDefinition() == G4Proton::Proton() )
96 Z++;
97 }
98 return Z;
99}
static G4Proton * Proton()
Definition G4Proton.cc:90

Referenced by CalEnergyAndAngularMomentumInCM(), and GetNuclearMass().

◆ GetExcitationEnergy()

G4double G4QMDNucleus::GetExcitationEnergy ( )
inline

Definition at line 63 of file G4QMDNucleus.hh.

63{ return excitationEnergy; };

◆ GetMassNumber()

G4int G4QMDNucleus::GetMassNumber ( )

Definition at line 68 of file G4QMDNucleus.cc.

69{
70
71 G4int A = 0;
72 std::vector< G4QMDParticipant* >::iterator it;
73 for ( it = participants.begin() ; it != participants.end() ; it++ )
74 {
75 if ( (*it)->GetDefinition() == G4Proton::Proton()
76 || (*it)->GetDefinition() == G4Neutron::Neutron() )
77 A++;
78 }
79
80 if ( A == 0 ) {
81 throw G4HadronicException(__FILE__, __LINE__, "G4QMDNucleus has the mass number of 0!");
82 }
83
84 return A;
85}
const G4double A[17]
static G4Neutron * Neutron()
Definition G4Neutron.cc:101

Referenced by CalEnergyAndAngularMomentumInCM(), G4QMDGroundStateNucleus::G4QMDGroundStateNucleus(), and GetNuclearMass().

◆ GetNuclearMass()

G4double G4QMDNucleus::GetNuclearMass ( )

Definition at line 103 of file G4QMDNucleus.cc.

104{
105
107
108 if ( mass == 0.0 )
109 {
110
113 G4int N = A - Z;
114
115// Weizsacker-Bethe
116
117 G4double Av = 16*MeV;
118 G4double As = 17*MeV;
119 G4double Ac = 0.7*MeV;
120 G4double Asym = 23*MeV;
121
122 G4double BE = Av * A
123 - As * G4Pow::GetInstance()->A23 ( G4double ( A ) )
124 - Ac * Z*Z/G4Pow::GetInstance()->A13 ( G4double ( A ) )
125 - Asym * ( N - Z )* ( N - Z ) / A;
126
127 mass = Z * G4Proton::Proton()->GetPDGMass()
129 - BE;
130
131 }
132
133 return mass;
134}
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double A13(G4double A) const
Definition G4Pow.cc:116
G4double A23(G4double A) const
Definition G4Pow.hh:131
#define N
Definition crc32.c:57

◆ SetTotalPotential()

void G4QMDNucleus::SetTotalPotential ( G4double x)
inline

Definition at line 62 of file G4QMDNucleus.hh.

62{ potentialEnergy = x; };

Referenced by G4QMDReaction::ApplyYourself(), and G4QMDMeanField::SetNucleus().


The documentation for this class was generated from the following files: