-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add muon-catalyzed fusion physics #1508
Labels
enhancement
New feature or request
Comments
Implementation of processes/modelsMuon atomic capture
classDiagram
MuonMinusAtomicCapture <|-- G4ElementSelector
MuonMinusAtomicCapture <|-- G4EmCaptureCascade
MuonMinusAtomicCapture <|-- G4HadProjectile
MuonMinusAtomicCapture <|-- G4MuonMinusBoundDecay
class G4MuonMinusBoundDecay {
Does not seem to be called anywhere
}
flowchart LR
a["select nucleus"] --> b["EM cascade (generate secondaries)"]
b --> c["check if d or t"] --> d["if H mu atom, set spin"]
d --> e["generate mu atom secondary"]
Muon-catalyzed fusion
---
title: DD
---
flowchart LR
a["calculate cycle time"] --> b["sample sticking"] --> d["sample secondaries"]
d --> he3["He-3"]
d --> h["H-3"]
he3 --> he3s["(He-3)mu + n"]
he3 --> he3ns["He-3 + mu + n"]
h -. not implemented .-> hs["(H-3)mu + p"]
h --> hns["H-3 + mu + p"]
---
title: DT
---
flowchart LR
a["calculate cycle time"] --> b["sample sticking"] --> d["sample secondaries"]
d --> e
d --> f
e["(alpha)mu + n"]
f["alpha + mu + n"]
---
title: TT
---
flowchart LR
a["calculate cycle time"] --> b["sample sticking"] --> d["sample secondaries"]
d --> e
d --> f
e["(alpha)mu + n + n"]
f["alpha + mu + n + n"]
flowchart LR
%% Main flowchart
a[muonic atom formation]
b[select channel]
c[kill primary]
d[calculate cycle time]
e[sample sticking]
f[sample secondaries]
a --> b
ddhe3s & ddhe3ns & ddhs & ddhns & dts & dtns & tts & ttns --> sampler
subgraph sampler[muCF sampler]
c --> d --> e --> f
end
subgraph selection[muCF channel selection]
direction LR
b --> dd & dt & tt
%% DD fusion
dd[DD]
he3[He-3]
h[H]
ddhe3s["(He-3)mu + n"]
ddhe3ns["He-3 + mu + n"]
ddhs["(H-3)mu + p"]
ddhns["H-3 + mu + p"]
dd --> he3 & h
he3 --> ddhe3s & ddhe3ns
h -.not implemented.-> ddhs
h --> ddhns
%% DT fusion
dt[DT]
dtns["(alpha)mu + n"]
dts["alpha + mu + n"]
dt --> dts & dtns
%% TT fusion
tt[TT]
tts["(alpha)mu + n + n"]
ttns["alpha + mu + n + n"]
tt --> tts & ttns
end
classDiagram
MuonCatalyzedFusionInteractor <-- DDMuonCatalyzedFusionSampler
MuonCatalyzedFusionInteractor <-- DTMuonCatalyzedFusionSampler
MuonCatalyzedFusionInteractor <-- TTMuonCatalyzedFusionSampler
MuonCatalyzedFusionInteractor <-- DTMuonicAtomFormationSampler
DTMuonicAtomFormationSampler <-- StopElementSelector
DTMuonicAtomFormationSampler <-- EmCaptureCascade
DTMuonicAtomFormationSampler <-- HydrogenSpinSelector
DTMuonicAtomFormationSampler <-- MolarFractionCalculator
class MuonCatalyzedFusionInteractor {
Large at rest kernel: mu atom formation + muCF
+MuonCatalyzedFusionInteractor(...)
+Interaction operator(Engine& rng)
}
%%---------------------------------------------------------------------------%%
%% At rest samplers; act as interactors, but return a state change result
namespace muCF {
class DDMuonCatalyzedFusionSampler {
Execute DD muCF
+DDMuonCatalyzedFusionSampler(...)
+Result operator(Engine& rng)
}
class DTMuonCatalyzedFusionSampler {
Execute DT muCF
+DTMuonCatalyzedFusionSampler(...)
+Result operator(Engine& rng)
}
class TTMuonCatalyzedFusionSampler {
Execute TT muCF
+TTMuonCatalyzedFusionSampler(...)
+Result operator(Engine& rng)
}
}
class DTMuonicAtomFormationSampler {
Execute d or t muonic atom formation
+DTMuonicAtomCapture(...)
+Result operator(Engine& rng)
}
%%---------------------------------------------------------------------------%%
%% Purpose-specific helper classes
class StopElementSelector {
Select element for particle capture
+StopElementSelector(MaterialId matid)
+ElementId operator(Engine& rng)
}
class EmCaptureCascade {
Cascade emmitting photons or Auger electrons
+EmCaptureCascade(ParticleId pid, ElementId eid)
+Result operator(Engine& rng)
}
class HydrogenSpinSelector {
Return sampled spin
+HydrogenSpinSelector(ParticleId pid)
+real_type operator(Engine& rng)
}
class MolarFractionCalculator {
Return molar fraction for given element id
+MolarFractionCalculator(MaterialId matid, ElementId eid)
+real_type operator()
}
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Physical processes
Most processes have been at least partially implemented by NK Labs. The following list separates necessary and second order processes, along with their implementation availability (either in the standard Geant4 source code or externally added by NKLabs).
Necessary for a proof-of-principle
Good to have
The text was updated successfully, but these errors were encountered: