75{
76 area = 0.0;
77
81
82
85
86
89
90
91
93 aPrim.
Init(aProjectileA, aProjectileZ);
95
97 aTarg.
Init(aTargetA, aTargetZ);
99
100
101 G4int particlesFromProjectile = 0;
102 G4int chargedFromProjectile = 0;
106
107
108
109
110 while(0==particlesFromProjectile)
111 {
112 do
113 {
116 }
117
118 while(x*x + y*y > 1);
119 impactParameter = std::sqrt(x*x+y*y)*(targetOuterRadius+projectileOuterRadius);
120 ++totalTries;
121 area =
pi*(targetOuterRadius+projectileOuterRadius)*
122 (targetOuterRadius+projectileOuterRadius);
123 G4double projectileHorizon = impactParameter-targetOuterRadius;
124
125
127 if(projectileHorizon > empirical*projectileOuterRadius) { continue; }
128
129
130
132
133
135 {
137 {
138
139 ++particlesFromProjectile;
141 {
142 ++chargedFromProjectile;
143 }
144 }
145 }
146 }
147 ++hits;
148
149
150 G4double targetHorizon = impactParameter-projectileOuterRadius;
151 G4int chargedFromTarget = 0;
152 G4int particlesFromTarget = 0;
154
156 {
158 {
159
160 ++particlesFromTarget;
162 {
163 ++chargedFromTarget;
164 }
165 }
166 }
167
168
169
172
175 G4LorentzVector fragment4Momentum(momentum*w, projTotEnergy*w + targetMass);
176
177
178 G4Fragment anInitialState(aTargetA+particlesFromProjectile,
179 aTargetZ+chargedFromProjectile,
180 fragment4Momentum);
181
182
183 anInitialState.SetNumberOfExcitedParticle(particlesFromProjectile
184 + particlesFromTarget,
185 chargedFromProjectile
186 + chargedFromTarget);
187 anInitialState.SetNumberOfHoles(particlesFromProjectile+particlesFromTarget,
188 chargedFromProjectile + chargedFromTarget);
190 anInitialState.SetCreationTime(time);
191
192
195
196
198 if(particlesFromProjectile < aProjectileA)
199 {
200 G4LorentzVector residual4Momentum(momentum*(1.0-w), projTotEnergy*(1.0-w));
201
202 G4Fragment initialState2(aProjectileA-particlesFromProjectile,
203 aProjectileZ-chargedFromProjectile,
204 residual4Momentum );
205
206
207 G4int pinit = (aProjectileA-particlesFromProjectile)/2;
208 G4int cinit = (aProjectileZ-chargedFromProjectile)/2;
209
210 initialState2.SetNumberOfExcitedParticle(pinit,cinit);
211 initialState2.SetNumberOfHoles(pinit,cinit);
212 initialState2.SetCreationTime(time);
213
214 theExcitationResult = theHandler->
BreakItUp(initialState2);
215 }
216
217
220 if(theExcitationResult) { nexc = theExcitationResult->size(); }
221 if(thePreCompoundResult) { npre = thePreCompoundResult->size();}
222
223 if(nexc > 0) {
224 for(
G4int k=0; k<nexc; ++k) {
228 delete p;
229 }
230 }
231
232 if(npre > 0) {
233 for(
G4int k=0; k<npre; ++k) {
237 delete p;
238 }
239 }
240
241 delete thePreCompoundResult;
242 delete theExcitationResult;
243
244
245 return &theResult;
246}
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState)
G4Nucleon * GetNextNucleon()
G4double GetOuterRadius()
void Init(G4int theA, G4int theZ)
void SetStatusChange(G4HadFinalStateStatus aS)
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
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)
const G4ThreeVector & GetPosition() const
const G4ParticleDefinition * GetParticleType() const
G4double GetPDGCharge() const
G4int GetBaryonNumber() const
virtual G4ReactionProductVector * DeExcite(G4Fragment &aFragment) final
const G4ParticleDefinition * GetDefinition() const
G4ThreeVector GetMomentum() const