126 G4cout <<
"### " << GetPhysicsName() <<
" Construct Processes " << G4endl;
128 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
129 G4LossTableManager* man = G4LossTableManager::Instance();
132 G4MuBremsstrahlung* mub =
new G4MuBremsstrahlung();
133 G4MuPairProduction* mup =
new G4MuPairProduction();
134 G4hBremsstrahlung* pib =
new G4hBremsstrahlung();
135 G4hPairProduction* pip =
new G4hPairProduction();
136 G4hBremsstrahlung* kb =
new G4hBremsstrahlung();
137 G4hPairProduction* kp =
new G4hPairProduction();
138 G4hBremsstrahlung* pb =
new G4hBremsstrahlung();
139 G4hPairProduction* pp =
new G4hPairProduction();
142 G4MuMultipleScattering* mumsc =
new G4MuMultipleScattering();
143 mumsc->SetEmModel(
new G4WentzelVIModel());
144 G4CoulombScattering* muss =
new G4CoulombScattering();
146 G4hMultipleScattering* pimsc =
new G4hMultipleScattering();
147 pimsc->SetEmModel(
new G4WentzelVIModel());
148 G4CoulombScattering* piss =
new G4CoulombScattering();
150 G4hMultipleScattering* kmsc =
new G4hMultipleScattering();
151 kmsc->SetEmModel(
new G4WentzelVIModel());
152 G4CoulombScattering* kss =
new G4CoulombScattering();
154 G4hMultipleScattering* hmsc =
new G4hMultipleScattering(
"ionmsc");
157 G4double highEnergyLimit = G4EmParameters::Instance()->MscEnergyLimit();
160 G4ParticleTable* table = G4ParticleTable::GetParticleTable();
161 for(
const auto& particleName :
partList.PartNames()) {
162 G4ParticleDefinition* particle = table->FindParticle(particleName);
163 if (!particle) {
continue; }
164 if (particleName ==
"gamma") {
166 G4PhotoElectricEffect* pee =
new G4PhotoElectricEffect();
167 pee->SetEmModel(
new G4LivermorePhotoElectricModel());
169 if(G4EmParameters::Instance()->GeneralProcessActive()) {
170 G4GammaGeneralProcess* sp =
new G4GammaGeneralProcess();
171 sp->AddEmProcess(pee);
172 sp->AddEmProcess(
new G4ComptonScattering());
173 sp->AddEmProcess(
new G4GammaConversion());
174 sp->AddEmProcess(
new G4RayleighScattering());
175 man->SetGammaGeneralProcess(sp);
176 ph->RegisterProcess(sp, particle);
179 ph->RegisterProcess(pee, particle);
180 ph->RegisterProcess(
new G4ComptonScattering(), particle);
181 ph->RegisterProcess(
new G4GammaConversion(), particle);
182 ph->RegisterProcess(
new G4RayleighScattering(), particle);
185 }
else if (particleName ==
"e-") {
187 G4eMultipleScattering* msc =
new G4eMultipleScattering;
188 G4UrbanMscModel* msc1 =
new G4UrbanMscModel();
189 G4WentzelVIModel* msc2 =
new G4WentzelVIModel();
190 msc1->SetHighEnergyLimit(highEnergyLimit);
191 msc2->SetLowEnergyLimit(highEnergyLimit);
192 msc->SetEmModel(msc1);
193 msc->SetEmModel(msc2);
195 G4eCoulombScatteringModel* ssm =
new G4eCoulombScatteringModel();
196 G4CoulombScattering* ss =
new G4CoulombScattering();
198 ss->SetMinKinEnergy(highEnergyLimit);
199 ssm->SetLowEnergyLimit(highEnergyLimit);
200 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
202 ph->RegisterProcess(msc, particle);
203 ph->RegisterProcess(
new G4eIonisation(), particle);
204 ph->RegisterProcess(
new G4eBremsstrahlung(), particle);
205 ph->RegisterProcess(ss, particle);
207 }
else if (particleName ==
"e+") {
209 G4eMultipleScattering* msc =
new G4eMultipleScattering;
210 G4UrbanMscModel* msc1 =
new G4UrbanMscModel();
211 G4WentzelVIModel* msc2 =
new G4WentzelVIModel();
212 msc1->SetHighEnergyLimit(highEnergyLimit);
213 msc2->SetLowEnergyLimit(highEnergyLimit);
214 msc->SetEmModel(msc1);
215 msc->SetEmModel(msc2);
217 G4eCoulombScatteringModel* ssm =
new G4eCoulombScatteringModel();
218 G4CoulombScattering* ss =
new G4CoulombScattering();
220 ss->SetMinKinEnergy(highEnergyLimit);
221 ssm->SetLowEnergyLimit(highEnergyLimit);
222 ssm->SetActivationLowEnergyLimit(highEnergyLimit);
224 ph->RegisterProcess(msc, particle);
225 ph->RegisterProcess(
new G4eIonisation(), particle);
226 ph->RegisterProcess(
new G4eBremsstrahlung(), particle);
227 ph->RegisterProcess(
new G4eplusAnnihilation(), particle);
228 ph->RegisterProcess(ss, particle);
230 }
else if (particleName ==
"mu-" ) {
232 ph->RegisterProcess(mumsc, particle);
233 ph->RegisterProcess(
new G4MuIonisation(), particle);
234 ph->RegisterProcess(mub, particle);
235 ph->RegisterProcess(mup, particle);
236 ph->RegisterProcess(muss, particle);
239 }
else if (particleName ==
"mu+") {
242 G4cout <<
"##### Turning off Multiple scattering, Coulomb Scattering, Pair Prodution, and Bremstrahlung for mu+!!!\n";
243 ph->RegisterProcess(
new G4MuIonisation(), particle);
246 ph->RegisterProcess(mumsc, particle);
247 ph->RegisterProcess(mub, particle);
248 ph->RegisterProcess(mup, particle);
249 ph->RegisterProcess(muss, particle);
251 }
else if (particleName ==
"alpha" ||
252 particleName ==
"He3") {
254 ph->RegisterProcess(
new G4hMultipleScattering(), particle);
255 ph->RegisterProcess(
new G4ionIonisation(), particle);
257 }
else if (particleName ==
"GenericIon") {
259 ph->RegisterProcess(hmsc, particle);
260 ph->RegisterProcess(
new G4ionIonisation(), particle);
262 }
else if (particleName ==
"pi+" ||
263 particleName ==
"pi-" ) {
265 ph->RegisterProcess(pimsc, particle);
266 ph->RegisterProcess(
new G4hIonisation(), particle);
267 ph->RegisterProcess(pib, particle);
268 ph->RegisterProcess(pip, particle);
269 ph->RegisterProcess(piss, particle);
271 }
else if (particleName ==
"kaon+" ||
272 particleName ==
"kaon-" ) {
274 ph->RegisterProcess(kmsc, particle);
275 ph->RegisterProcess(
new G4hIonisation(), particle);
276 ph->RegisterProcess(kb, particle);
277 ph->RegisterProcess(kp, particle);
278 ph->RegisterProcess(kss, particle);
280 }
else if (particleName ==
"proton" ||
281 particleName ==
"anti_proton") {
283 G4hMultipleScattering* pmsc =
new G4hMultipleScattering();
284 pmsc->SetEmModel(
new G4WentzelVIModel());
286 ph->RegisterProcess(pmsc, particle);
287 ph->RegisterProcess(
new G4hIonisation(), particle);
288 ph->RegisterProcess(pb, particle);
289 ph->RegisterProcess(pp, particle);
290 ph->RegisterProcess(
new G4CoulombScattering(), particle);
292 }
else if (particleName ==
"B+" ||
293 particleName ==
"B-" ||
294 particleName ==
"D+" ||
295 particleName ==
"D-" ||
296 particleName ==
"Ds+" ||
297 particleName ==
"Ds-" ||
298 particleName ==
"anti_He3" ||
299 particleName ==
"anti_alpha" ||
300 particleName ==
"anti_deuteron" ||
301 particleName ==
"anti_lambda_c+" ||
302 particleName ==
"anti_omega-" ||
303 particleName ==
"anti_sigma_c+" ||
304 particleName ==
"anti_sigma_c++" ||
305 particleName ==
"anti_sigma+" ||
306 particleName ==
"anti_sigma-" ||
307 particleName ==
"anti_triton" ||
308 particleName ==
"anti_xi_c+" ||
309 particleName ==
"anti_xi-" ||
310 particleName ==
"deuteron" ||
311 particleName ==
"lambda_c+" ||
312 particleName ==
"omega-" ||
313 particleName ==
"sigma_c+" ||
314 particleName ==
"sigma_c++" ||
315 particleName ==
"sigma+" ||
316 particleName ==
"sigma-" ||
317 particleName ==
"tau+" ||
318 particleName ==
"tau-" ||
319 particleName ==
"triton" ||
320 particleName ==
"xi_c+" ||
321 particleName ==
"xi-" ) {
323 ph->RegisterProcess(hmsc, particle);
324 ph->RegisterProcess(
new G4hIonisation(), particle);
329 G4ParticleDefinition* particle = table->FindParticle(
"mulaser");
334 man->SetAtomDeexcitation(
new G4UAtomicDeexcitation());
336 G4EmModelActivator mact(GetPhysicsName());
G4EmParticleList partList