74{
75 area = 0;
76
80
81
84
85
88
89
90
92 aPrim.
Init(aProjectileA, aProjectileZ);
94
96 aTarg.
Init(aTargetA, aTargetZ);
98
99
100 G4int particlesFromProjectile = 0;
101 G4int chargedFromProjectile = 0;
105
106
107 while(0==particlesFromProjectile)
108 {
109 do
110 {
113 }
114 while(x*x + y*y > 1);
115 impactParameter = std::sqrt(x*x+y*y)*(targetOuterRadius+projectileOuterRadius);
116 ++totalTries;
117 area =
pi*(targetOuterRadius+projectileOuterRadius)*
118 (targetOuterRadius+projectileOuterRadius);
119 G4double projectileHorizon = impactParameter-targetOuterRadius;
120
121
123 if(projectileHorizon > empirical*projectileOuterRadius) { continue; }
124
125
126
129 {
131 {
132
133 ++particlesFromProjectile;
135 {
136 ++chargedFromProjectile;
137 }
138 }
139 }
140 }
141 ++hits;
142
143
144 G4double targetHorizon = impactParameter-projectileOuterRadius;
145 G4int chargedFromTarget = 0;
146 G4int particlesFromTarget = 0;
149 {
151 {
152
153 ++particlesFromTarget;
155 {
156 ++chargedFromTarget;
157 }
158 }
159 }
160
161
162
165
168 G4LorentzVector fragment4Momentum(momentum*w, projTotEnergy*w + targetMass);
169
170
171 G4Fragment anInitialState(aTargetA+particlesFromProjectile,
172 aTargetZ+chargedFromProjectile,
173 fragment4Momentum);
174
175
176 anInitialState.SetNumberOfExcitedParticle(particlesFromProjectile+particlesFromTarget,
177 chargedFromProjectile + chargedFromTarget);
178 anInitialState.SetNumberOfHoles(particlesFromProjectile+particlesFromTarget,
179 chargedFromProjectile + chargedFromTarget);
181 anInitialState.SetCreationTime(time);
182
183
185
186
188 if(particlesFromProjectile < aProjectileA)
189 {
190 G4LorentzVector residual4Momentum(momentum*(1.0-w), projTotEnergy*(1.0-w));
191
192 G4Fragment initialState2(aProjectileA-particlesFromProjectile,
193 aProjectileZ-chargedFromProjectile,
194 residual4Momentum );
195
196
197 G4int pinit = (aProjectileA-particlesFromProjectile)/2;
198 G4int cinit = (aProjectileZ-chargedFromProjectile)/2;
199
200 initialState2.SetNumberOfExcitedParticle(pinit,cinit);
201 initialState2.SetNumberOfHoles(pinit,cinit);
202 initialState2.SetCreationTime(time);
203
204 theExcitationResult = theHandler->
BreakItUp(initialState2);
205 }
206
207
210 if(theExcitationResult) { nexc = theExcitationResult->size(); }
211 if(thePreCompoundResult) { npre = thePreCompoundResult->size();}
212
213 if(nexc > 0) {
214 for(
G4int k=0; k<nexc; ++k) {
217 delete p;
218 }
219 }
220
221 if(npre > 0) {
222 for(
G4int k=0; k<npre; ++k) {
225 delete p;
226 }
227 }
228
229 delete thePreCompoundResult;
230 delete theExcitationResult;
231
232
233 return &theResult;
234
235}
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState) const
G4Nucleon * GetNextNucleon()
G4double GetOuterRadius()
void Init(G4int theA, G4int theZ)
void SetStatusChange(G4HadFinalStateStatus aS)
void AddSecondary(G4DynamicParticle *aP)
void SetEnergyChange(G4double anEnergy)
const G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & Get4Momentum() const
G4double GetGlobalTime() const
G4double GetTotalEnergy() const
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4ParticleDefinition * GetParticleType() const
virtual const G4ThreeVector & GetPosition() const
G4double GetPDGCharge() const
G4int GetBaryonNumber() const
virtual G4ReactionProductVector * DeExcite(G4Fragment &aFragment)
G4ThreeVector GetMomentum() const
G4ParticleDefinition * GetDefinition() const