Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4InuclNuclei.hh
Go to the documentation of this file.
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// $Id$
27//
28// 20100112 Michael Kelsey -- Replace G4CascadeMomentum with G4LorentzVector
29// 20100301 M. Kelsey -- Add function to create unphysical nuclei for use
30// as temporary final-state fragments.
31// 20100319 M. Kelsey -- Remove "using" directory and unnecessary #includes.
32// 20100409 M. Kelsey -- Drop unused string argument from ctors.
33// 20100630 M. Kelsey -- Add excitation energy as optional public ctor arg,
34// remove excitation energy data member (part of G4Ions). Add
35// excitation energy to "getNucleiMass()" function, move print to .cc
36// 20100711 M. Kelsey -- Add optional model ID to constructors
37// 20100714 M. Kelsey -- Use G4DynamicParticle::theDynamicalMass to deal with
38// excitation energy without instantianting "infinite" G4PartDefns.
39// 20100719 M. Kelsey -- Move setExitationEnergy implementation to .cc file.
40// 20100906 M. Kelsey -- Add fill() functions to rewrite contents
41// 20100909 M. Kelsey -- Add function to discard exciton configuration
42// 20100914 M. Kelsey -- Use integers for A and Z
43// 20100915 M. Kelsey -- Add constructor to copy G4DynamicParticle input
44// 20100924 M. Kelsey -- Add constructor to copy G4Fragment input, and output
45// functions to create G4Fragment.
46// 20110214 M. Kelsey -- Replace integer "model" with enum
47// 20110225 M. Kelsey -- Add equality operator (NOT sorting!)
48// 20110721 M. Kelsey -- Follow base-class ctor change to pass model directly
49// 20110722 M. Kelsey -- BUG FIX: Deleted excitation energy in one ctor
50// 20110829 M. Kelsey -- Add constructor to copy G4V3DNucleus input
51// 20110919 M. Kelsey -- Add clear() to restore completely empty state
52// 20110922 M. Kelsey -- Add stream argument to printParticle() => print()
53
54#ifndef G4INUCL_NUCLEI_HH
55#define G4INUCL_NUCLEI_HH
56
58
59#include "G4InuclParticle.hh"
60#include "G4LorentzVector.hh"
62
63class G4Fragment;
65class G4V3DNucleus;
66
67
69public:
71
73 : G4InuclParticle(dynPart, model) {}
74
76 : G4InuclParticle(makeDefinition(a,z), model) {
78 }
79
81 G4double exc=0., Model model=DefaultModel)
82 : G4InuclParticle(makeDefinition(a,z), mom, model) {
84 }
85
87 Model model=DefaultModel)
88 : G4InuclParticle(makeDefinition(a,z), ekin, model) {
90 }
91
92 G4InuclNuclei(const G4Fragment& aFragment, Model model=DefaultModel);
93
94 G4InuclNuclei(G4V3DNucleus* a3DNucleus, Model model=DefaultModel);
95
96 virtual ~G4InuclNuclei() {}
97
98 // Copy and assignment constructors for use with std::vector<>
100 : G4InuclParticle(right),
101 theExitonConfiguration(right.theExitonConfiguration) {}
102
104
105 // Equality (comparison) operator -- NOT SORTING
106 bool operator==(const G4InuclNuclei& right) {
107 return ( G4InuclParticle::operator==(right) &&
108 theExitonConfiguration == right.theExitonConfiguration );
109 }
110
111 // Overwrite data structure (avoids creating/copying temporaries)
112 void fill(G4int a, G4int z, G4double exc=0., Model model=DefaultModel) {
113 fill(0., a, z, exc, model);
114 }
115
116 void fill(const G4LorentzVector& mom, G4int a, G4int z,
117 G4double exc=0., Model model=DefaultModel);
118
119 void fill(G4double ekin, G4int a, G4int z, G4double exc,
120 Model model=DefaultModel);
121
122 void copy(const G4Fragment& aFragment, Model model=DefaultModel);
123
124 void copy(G4V3DNucleus* a3DNucleus, Model model=DefaultModel);
125
126 void clear(); // Discard all information (including A,Z)
127
128 // Excitation energy is stored as dynamical mass of particle
130
132 theExitonConfiguration = config;
133 }
134
135 void clearExitonConfiguration() { theExitonConfiguration.clear(); }
136
137 G4int getA() const { return getDefinition()->GetAtomicMass(); }
138 G4int getZ() const { return getDefinition()->GetAtomicNumber(); }
139
141 return getDefinition()->GetPDGMass()*CLHEP::MeV/CLHEP::GeV; // From G4 to Bertini
142 }
143
145 return (getMass()-getNucleiMass())*CLHEP::GeV/CLHEP::MeV; // Always in MeV
146 }
147
148 G4double getExitationEnergyInGeV() const { return getExitationEnergy()/CLHEP::GeV; }
149
151 return theExitonConfiguration;
152 }
153
154 static G4double getNucleiMass(G4int a, G4int z, G4double exc=0.);
155
156 virtual void print(std::ostream& os) const;
157
158 // Convert contents to G4Fragment for use outside package
160 operator G4Fragment() const;
161
162protected:
163 // Convert nuclear configuration to standard GEANT4 pointer
166
167private:
168 G4ExitonConfiguration theExitonConfiguration;
169};
170
171#endif // G4INUCL_NUCLEI_HH
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
G4Fragment makeG4Fragment() const
virtual ~G4InuclNuclei()
G4InuclNuclei(const G4LorentzVector &mom, G4int a, G4int z, G4double exc=0., Model model=DefaultModel)
static G4ParticleDefinition * makeNuclearFragment(G4int a, G4int z)
static G4ParticleDefinition * makeDefinition(G4int a, G4int z)
G4InuclNuclei(const G4DynamicParticle &dynPart, Model model=DefaultModel)
G4InuclNuclei(G4double ekin, G4int a, G4int z, G4double exc, Model model=DefaultModel)
const G4ExitonConfiguration & getExitonConfiguration() const
void setExitonConfiguration(const G4ExitonConfiguration &config)
void copy(const G4Fragment &aFragment, Model model=DefaultModel)
G4double getNucleiMass() const
void setExitationEnergy(G4double e)
G4InuclNuclei & operator=(const G4InuclNuclei &right)
G4int getZ() const
G4double getExitationEnergyInGeV() const
bool operator==(const G4InuclNuclei &right)
G4InuclNuclei(G4int a, G4int z, G4double exc=0., Model model=DefaultModel)
G4double getExitationEnergy() const
G4InuclNuclei(const G4InuclNuclei &right)
void fill(G4int a, G4int z, G4double exc=0., Model model=DefaultModel)
void clearExitonConfiguration()
G4int getA() const
virtual void print(std::ostream &os) const
G4ParticleDefinition * getDefinition() const
G4double getMass() const
G4int GetAtomicNumber() const
G4int GetAtomicMass() const
struct config_s config