65{
66 area = 0.0;
67
71
72
75
76
80
81
82
84 aPrim.
Init(aProjectileA, aProjectileZ);
86
88 aTarg.
Init(aTargetA, aTargetZ);
90
91
92 G4int particlesFromProjectile = 0;
93 G4int chargedFromProjectile = 0;
97
98
99
100
101 while(0==particlesFromProjectile)
102 {
103 do
104 {
107 }
108
109 while(x*x + y*y > 1);
110 impactParameter = std::sqrt(x*x+y*y)*
111 (targetOuterRadius+projectileOuterRadius);
112 ++totalTries;
113 area = pi*(targetOuterRadius+projectileOuterRadius)*
114 (targetOuterRadius+projectileOuterRadius);
115 G4double projectileHorizon = impactParameter-targetOuterRadius;
116
117
119 if(projectileHorizon > empirical*projectileOuterRadius) { continue; }
120
121
122
124
125
127 {
129 {
130
131 ++particlesFromProjectile;
133 {
134 ++chargedFromProjectile;
135 }
136 }
137 }
138 }
139 ++hits;
140
141
142 G4double targetHorizon = impactParameter-projectileOuterRadius;
143 G4int chargedFromTarget = 0;
144 G4int particlesFromTarget = 0;
146
148 {
150 {
151
152 ++particlesFromTarget;
154 {
155 ++chargedFromTarget;
156 }
157 }
158 }
159
160
161
164
167 G4LorentzVector fragment4Momentum(momentum*w, projTotEnergy*w + targetMass);
168
169
170 G4Fragment anInitialState(aTargetA+particlesFromProjectile,
171 aTargetZ+chargedFromProjectile,
172 fragment4Momentum);
173
174 anInitialState.SetNumberOfExcitedParticle(particlesFromProjectile
175 + particlesFromTarget,
176 chargedFromProjectile
177 + chargedFromTarget);
178 anInitialState.SetNumberOfHoles(particlesFromProjectile+particlesFromTarget,
179 chargedFromProjectile + chargedFromTarget);
181 anInitialState.SetCreationTime(time);
182 anInitialState.SetCreatorModelID(secID);
183
184
187
188
190 if(particlesFromProjectile < aProjectileA)
191 {
192 G4LorentzVector residual4Momentum(momentum*(1.0-w), projTotEnergy*(1.0-w));
193
194 G4Fragment initialState2(aProjectileA-particlesFromProjectile,
195 aProjectileZ-chargedFromProjectile,
196 residual4Momentum );
197
198
199 G4int pinit = (aProjectileA-particlesFromProjectile)/2;
200 G4int cinit = (aProjectileZ-chargedFromProjectile)/2;
201
202 initialState2.SetNumberOfExcitedParticle(pinit,cinit);
203 initialState2.SetNumberOfHoles(pinit,cinit);
204 initialState2.SetCreationTime(time);
205 initialState2.SetCreatorModelID(secID);
206
207 theExcitationResult = theHandler->
BreakItUp(initialState2);
208 }
209
210
211 std::size_t nexc = (nullptr != theExcitationResult) ?
212 theExcitationResult->size() : 0;
213 std::size_t npre = (nullptr != thePreCompoundResult) ?
214 thePreCompoundResult->size() : 0;
215
216 for(std::size_t k=0; k<nexc; ++k) {
219 secondary.SetTime(p->
GetTOF());
220 secondary.SetCreatorModelID(secID);
222 delete p;
223 }
224 for(std::size_t k=0; k<npre; ++k) {
227 secondary.SetTime(p->
GetTOF());
228 secondary.SetCreatorModelID(secID);
230 delete p;
231 }
232
233 delete thePreCompoundResult;
234 delete theExcitationResult;
235
236
237 return &theResult;
238}
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState)
G4Nucleon * GetNextNucleon()
void Init(G4int theA, G4int theZ, G4int numberOfLambdas=0)
G4double GetOuterRadius()
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