Geant4-11
Public Member Functions | Protected Attributes | Private Attributes
G4QMDNucleus Class Reference

#include <G4QMDNucleus.hh>

Inheritance diagram for G4QMDNucleus:
G4QMDSystem G4QMDGroundStateNucleus

Public Member Functions

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

Protected Attributes

std::vector< G4QMDParticipant * > participants
 

Private Attributes

std::vector< G4doublees
 
G4double excitationEnergy
 
G4double hbc
 
G4int jj
 
G4int numberOfCollision
 
std::vector< G4ThreeVectorpcm
 
G4double potentialEnergy
 
std::vector< G4ThreeVectorrcm
 

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{
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}
G4double hbc
Definition: G4QMDNucleus.hh:65
G4double potentialEnergy
Definition: G4QMDNucleus.hh:75
G4double excitationEnergy
Definition: G4QMDNucleus.hh:76
static G4QMDParameters * GetInstance()
G4double Get_hbc()

References excitationEnergy, G4QMDParameters::Get_hbc(), G4QMDParameters::GetInstance(), hbc, jj, and potentialEnergy.

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();
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 rcm0 = rcm0/tmass;
192
193 for ( G4int i= 0; i < n ; i++ )
194 {
195 rcm[i] += -rcm0;
196 //G4cout << "rcm " << i << " " << rcm[i] << G4endl;
197 }
198
199// Angular momentum
200
201 G4ThreeVector rl ( 0.0 );
202 for ( G4int i= 0; i < n ; i++ )
203 {
204 rl += rcm[i].cross ( pcm[i] );
205 }
206
207// DHW: move hbc outside of sqrt to get correct units
208// jj = int ( std::sqrt ( rl*rl / hbc ) + 0.5 );
209
210 jj = int (std::sqrt(rl*rl)/hbc + 0.5);
211
212// kinetic energy per nucleon in CM
213
214 G4double totalMass = 0.0;
215 for ( G4int i= 0; i < n ; i++ )
216 {
217 // following two lines are equivalent
218 //totalMass += GetParticipant( i )->GetDefinition()->GetPDGMass()/GeV;
219 totalMass += GetParticipant( i )->GetMass();
220 }
221
222 //G4double kineticEnergyPerNucleon = ( std::accumulate ( es.begin() , es.end() , 0.0 ) - totalMass )/n;
223
224// Total (not per nucleion ) Binding Energy
225 G4double bindingEnergy = ( std::accumulate ( es.begin() , es.end() , 0.0 ) -totalMass ) + potentialEnergy;
226
227 //G4cout << "KineticEnergyPerNucleon in GeV " << kineticEnergyPerNucleon << G4endl;
228 //G4cout << "KineticEnergySum in GeV " << std::accumulate ( es.begin() , es.end() , 0.0 ) - totalMass << G4endl;
229 //G4cout << "PotentialEnergy in GeV " << potentialEnergy << G4endl;
230 //G4cout << "BindingEnergy in GeV " << bindingEnergy << G4endl;
231 //G4cout << "G4BindingEnergy in GeV " << G4NucleiProperties::GetBindingEnergy( GetAtomicNumber() , GetMassNumber() )/GeV << G4endl;
232
234 //G4cout << "excitationEnergy in GeV " << excitationEnergy << G4endl;
235 if ( excitationEnergy < 0 ) excitationEnergy = 0.0;
236
237}
static constexpr double GeV
Definition: G4SIunits.hh:203
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
std::vector< G4ThreeVector > rcm
Definition: G4QMDNucleus.hh:71
G4int GetAtomicNumber()
Definition: G4QMDNucleus.cc:89
std::vector< G4ThreeVector > pcm
Definition: G4QMDNucleus.hh:71
G4int GetMassNumber()
Definition: G4QMDNucleus.cc:68
std::vector< G4double > es
Definition: G4QMDNucleus.hh:72
G4LorentzVector Get4Momentum()
Definition: G4QMDNucleus.cc:56
G4ThreeVector GetPosition()
G4ThreeVector GetMomentum()
G4QMDParticipant * GetParticipant(G4int i)
Definition: G4QMDSystem.hh:62
G4int GetTotalNumberOfParticipant()
Definition: G4QMDSystem.hh:60
G4double bindingEnergy(G4int A, G4int Z)

References anonymous_namespace{G4PionRadiativeDecayChannel.cc}::beta, G4InuclSpecialFunctions::bindingEnergy(), CLHEP::HepLorentzVector::e(), es, excitationEnergy, CLHEP::HepLorentzVector::gamma(), Get4Momentum(), GetAtomicNumber(), G4NucleiProperties::GetBindingEnergy(), G4Pow::GetInstance(), G4QMDParticipant::GetMass(), GetMassNumber(), G4QMDParticipant::GetMomentum(), G4QMDSystem::GetParticipant(), G4QMDParticipant::GetPosition(), G4QMDSystem::GetTotalNumberOfParticipant(), GeV, hbc, jj, CLHEP::detail::n, pcm, potentialEnergy, rcm, and CLHEP::HepLorentzVector::v().

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

◆ Clear()

void G4QMDSystem::Clear ( )
inherited

Definition at line 68 of file G4QMDSystem.cc.

69{
70 for ( G4int i = 0 ; i < this->GetTotalNumberOfParticipant() ; i++ )
71 {
72 delete participants[i];
73 }
74 participants.clear();
75}
std::vector< G4QMDParticipant * > participants
Definition: G4QMDSystem.hh:72

References G4QMDSystem::GetTotalNumberOfParticipant(), and G4QMDSystem::participants.

Referenced by G4QMDReaction::ApplyYourself(), and G4QMDSystem::~G4QMDSystem().

◆ DeleteParticipant()

void G4QMDSystem::DeleteParticipant ( G4int  i)
inlineinherited

Definition at line 57 of file G4QMDSystem.hh.

57{ delete participants[ i ] ; participants.erase( std::find ( participants.begin() , participants.end() , participants[ i ] ) ); };

References G4QMDSystem::participants.

Referenced by G4QMDCollision::CalKinematicsOfBinaryCollisions().

◆ EraseParticipant()

G4QMDParticipant * G4QMDSystem::EraseParticipant ( G4int  i)
inlineinherited

Definition at line 56 of file G4QMDSystem.hh.

56{ G4QMDParticipant* particle = participants[ i ]; participants.erase( std::find ( participants.begin() , participants.end() , participants[ i ] ) ) ; return particle; };

References G4QMDSystem::participants.

Referenced by G4QMDCollision::CalFinalStateOfTheBinaryCollision().

◆ 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}

References G4QMDSystem::participants.

Referenced by CalEnergyAndAngularMomentumInCM().

◆ GetAngularMomentum()

G4int G4QMDNucleus::GetAngularMomentum ( )
inline

Definition at line 65 of file G4QMDNucleus.hh.

65{ return jj; };

References 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}
const G4int Z[17]
static G4Proton * Proton()
Definition: G4Proton.cc:92

References G4QMDSystem::participants, G4Proton::Proton(), and Z.

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

◆ GetExcitationEnergy()

G4double G4QMDNucleus::GetExcitationEnergy ( void  )
inline

Definition at line 63 of file G4QMDNucleus.hh.

63{ return excitationEnergy; };

References 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:103

References A, G4Neutron::Neutron(), G4QMDSystem::participants, and G4Proton::Proton().

Referenced by CalEnergyAndAngularMomentumInCM(), G4QMDGroundStateNucleus::G4QMDGroundStateNucleus(), GetNuclearMass(), G4QMDGroundStateNucleus::killCMMotionAndAngularM(), G4QMDGroundStateNucleus::packNucleons(), and G4QMDGroundStateNucleus::samplingMomentum().

◆ GetNOCollision()

G4int G4QMDSystem::GetNOCollision ( )
inlineinherited

Definition at line 65 of file G4QMDSystem.hh.

65{ return numberOfCollision; };
G4int numberOfCollision
Definition: G4QMDSystem.hh:75

References G4QMDSystem::numberOfCollision.

Referenced by G4QMDReaction::ApplyYourself().

◆ GetNuclearMass()

G4double G4QMDNucleus::GetNuclearMass ( void  )

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 constexpr double MeV
Definition: G4SIunits.hh:200
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double A13(G4double A) const
Definition: G4Pow.cc:120
G4double A23(G4double A) const
Definition: G4Pow.hh:131

References A, G4Pow::A13(), G4Pow::A23(), GetAtomicNumber(), G4Pow::GetInstance(), GetMassNumber(), G4NucleiProperties::GetNuclearMass(), G4ParticleDefinition::GetPDGMass(), MeV, G4Neutron::Neutron(), G4Proton::Proton(), and Z.

◆ GetParticipant()

G4QMDParticipant * G4QMDSystem::GetParticipant ( G4int  i)
inlineinherited

◆ GetTotalNumberOfParticipant()

G4int G4QMDSystem::GetTotalNumberOfParticipant ( )
inlineinherited

◆ IncrementCollisionCounter()

void G4QMDSystem::IncrementCollisionCounter ( )
inlineinherited

◆ InsertParticipant()

void G4QMDSystem::InsertParticipant ( G4QMDParticipant particle,
G4int  j 
)
inherited

Definition at line 110 of file G4QMDSystem.cc.

111{
112
113 if ( (size_t) n > participants.size()+1 )
114 G4cout << "G4QMDSystem::InsertParticipant size error" << G4endl;
115
116 std::vector< G4QMDParticipant* >::iterator it;
117 it = participants.begin();
118
119 for ( G4int i = 0; i < n ; i++ )
120 it++;
121
122 participants.insert( it, particle );
123}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout

References G4cout, G4endl, CLHEP::detail::n, and G4QMDSystem::participants.

Referenced by G4QMDCollision::CalFinalStateOfTheBinaryCollision().

◆ SetParticipant()

void G4QMDSystem::SetParticipant ( G4QMDParticipant particle)
inlineinherited

◆ SetSystem()

void G4QMDSystem::SetSystem ( G4QMDSystem nucleus,
G4ThreeVector  dp,
G4ThreeVector  dr 
)
inherited

Definition at line 46 of file G4QMDSystem.cc.

47{
48 std::vector< G4QMDParticipant* >::iterator it;
49 for ( it = nucleus->participants.begin() ; it != nucleus->participants.end() ; it++ )
50 {
51 G4ThreeVector r = (*it)->GetPosition() + dr;
52 (*it)->SetPosition ( r );
53 G4ThreeVector p = (*it)->GetMomentum() + dp;
54 (*it)->SetMomentum ( p );
55 this->SetParticipant( *it );
56 }
57}
void SetParticipant(G4QMDParticipant *particle)
Definition: G4QMDSystem.hh:51

References G4QMDSystem::participants, and G4QMDSystem::SetParticipant().

◆ SetTotalPotential()

void G4QMDNucleus::SetTotalPotential ( G4double  x)
inline

Definition at line 62 of file G4QMDNucleus.hh.

62{ potentialEnergy = x; };

References potentialEnergy.

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

◆ ShowParticipants()

void G4QMDSystem::ShowParticipants ( )
inherited

Definition at line 79 of file G4QMDSystem.cc.

80{
81 //store orginal precision
82 std::ios::fmtflags oldform = G4cout.flags();
83
84 G4ThreeVector p_sum( 0.0 );
85 std::vector< G4QMDParticipant* >::iterator it;
86 G4cout << "Momentum and Position of each participant " << G4endl;
87 G4int i = 0;
88 for ( it = participants.begin() ; it != participants.end() ; it++ )
89 {
90 G4cout << i
91 << " "
92 << (*it)->GetDefinition()->GetParticleName()
93 << " "
94 << std::setprecision( 8 )
95 << (*it)->GetMomentum()
96 << " "
97 << (*it)->GetPosition()
98 << G4endl;
99 p_sum += (*it)->GetMomentum();
100 i++;
101 }
102 G4cout << "Sum upped Momentum and its mag " << p_sum << " " << p_sum.mag() << G4endl;
103
104 //restore orginal precision
105 G4cout.flags( oldform );
106}

References G4cout, G4endl, CLHEP::Hep3Vector::mag(), and G4QMDSystem::participants.

◆ SubtractSystem()

void G4QMDSystem::SubtractSystem ( G4QMDSystem nucleus)
inherited

Definition at line 59 of file G4QMDSystem.cc.

60{
61
62 for ( G4int i = 0 ; i < nucleus->GetTotalNumberOfParticipant() ; i++ )
63 {
64 participants.erase ( std::find ( participants.begin() , participants.end() , nucleus->GetParticipant( i ) ) );
65 }
66}

References G4QMDSystem::GetParticipant(), G4QMDSystem::GetTotalNumberOfParticipant(), and G4QMDSystem::participants.

Referenced by G4QMDMeanField::DoClusterJudgment().

Field Documentation

◆ es

std::vector< G4double > G4QMDNucleus::es
private

Definition at line 72 of file G4QMDNucleus.hh.

Referenced by CalEnergyAndAngularMomentumInCM().

◆ excitationEnergy

G4double G4QMDNucleus::excitationEnergy
private

◆ hbc

G4double G4QMDNucleus::hbc
private

Definition at line 69 of file G4QMDNucleus.hh.

Referenced by CalEnergyAndAngularMomentumInCM(), and G4QMDNucleus().

◆ jj

G4int G4QMDNucleus::jj
private

◆ numberOfCollision

G4int G4QMDSystem::numberOfCollision
privateinherited

◆ participants

std::vector< G4QMDParticipant* > G4QMDSystem::participants
protectedinherited

◆ pcm

std::vector< G4ThreeVector > G4QMDNucleus::pcm
private

Definition at line 71 of file G4QMDNucleus.hh.

Referenced by CalEnergyAndAngularMomentumInCM().

◆ potentialEnergy

G4double G4QMDNucleus::potentialEnergy
private

◆ rcm

std::vector< G4ThreeVector > G4QMDNucleus::rcm
private

Definition at line 71 of file G4QMDNucleus.hh.

Referenced by CalEnergyAndAngularMomentumInCM().


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