63 G4VRestProcess (processName, aType), nCascade(0), targetZ(0), targetA(0),
122 targetZ = aEle->
GetZ();
127 if(isv) ni = isv->size();
139 }
while (y > 0.0 && j < ni);
146 nCascade = pEMCascade->
DoCascade(targetZ, targetMass, Cascade);
151 G4double lambda = lambdac + lambdad;
158 G4int nEmSecondaries = nCascade;
159 G4int nSecondaries = nCascade;
167 captureResult = DoMuCapture();
170 if(captureResult) nSecondaries += captureResult->size();
171 else nSecondaries = nEmSecondaries;
180 G4int n = captureResult->size();
181 for (
G4int isec = 0; isec < n; isec++ ) {
193 delete captureResult;
198 if(nEmSecondaries > 0) {
200 for (
G4int isec = 0; isec < nEmSecondaries; isec++ ) {
203 if(isec >= nCascade) localtime += tDelay;
207 aNewParticle->
SetMomentum( Cascade[isec].GetMomentum() );
233 G4double muEnergy = mumass + muBindingEnergy;
234 G4double muMom = std::sqrt(muBindingEnergy*(muBindingEnergy + 2.0*mumass));
235 G4double availableEnergy = targetMass + mumass - muBindingEnergy;
256 if(iz == 1 && ia == 2) {
257 availableEnergy -= neutron_mass_c2;
258 }
else if(iz == 1 && ia == 3) {
259 availableEnergy -= 2.0*neutron_mass_c2;
277 G4double Enu = 0.5*(availableEnergy -
278 neutron_mass_c2*neutron_mass_c2/availableEnergy);
292 aPreResult->push_back(aN );
293 aPreResult->push_back(aNu);
296 G4cout <<
"DoMuCapture on H or He"
297 <<
" EkinN(MeV)= " << (availableEnergy - Enu - neutron_mass_c2)/MeV
299 <<
" n= " << aPreResult->size()
319 if(counter == theProtonCounter) {
331 G4double Enu = 0.5*(Ecms - neutron_mass_c2*neutron_mass_c2/Ecms);
345 momResidual = momInitial - nuMom;
348 eEx = momResidual.
mag();
350 G4cout <<
"G4MuonMinusCaptureAtRest::DoMuCapture: "
351 <<
" Eex(MeV)= " << (eEx-residualMass)/MeV
355 }
while(eEx <= residualMass);
367 anInitialState.
SetA(targetA);
373 aPreResult = theHandler->
BreakItUp(anInitialState);
375 G4ReactionProductVector::iterator ires;
377 for(ires=aPreResult->begin(); ires!=aPreResult->end(); ires++) {
378 G4LorentzVector itV((*ires)->GetTotalEnergy(), (*ires)->GetMomentum());
379 itV.boost(fromBreit);
380 (*ires)->SetTotalEnergy(itV.t());
381 (*ires)->SetMomentum(itV.vect());
387 aPreResult->push_back(aNu);
390 G4cout <<
"DoMuCapture: Nsec= "
391 << aPreResult->size() <<
" Ebalance(MeV)= " << eBal/MeV
392 <<
" E0(MeV)= " <<availableEnergy/MeV
393 <<
" Mres(GeV)= " <<residualMass/GeV
std::vector< G4Isotope * > G4IsotopeVector
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4DLLIMPORT std::ostream G4cout
Hep3Vector boostVector() const
static G4Deuteron * Deuteron()
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void SetMomentum(const G4ThreeVector &momentum)
G4double * GetRelativeAbundanceVector() const
const G4Isotope * GetIsotope(G4int iso) const
G4IsotopeVector * GetIsotopeVector() const
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState) const
G4Nucleon * GetNextNucleon()
void Init(G4int theA, G4int theZ)
void SetZ(G4double value)
void SetNumberOfCharged(G4int value)
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
void SetA(G4double value)
void SetMomentum(const G4LorentzVector &value)
void SetNumberOfParticles(G4int value)
G4ParticleDefinition * GetParticleDef()
void DeRegisterExtraProcess(G4VProcess *)
void RegisterExtraProcess(G4VProcess *)
void RegisterParticleForExtraProcess(G4VProcess *, const G4ParticleDefinition *)
static G4HadronicProcessStore * Instance()
void PrintInfo(const G4ParticleDefinition *)
void DoBoundMuonMinusDecay(G4double Z, G4int *nCascade, G4GHEKinematicsVector *Cascade)
G4ThreeVector & GetRandomVec()
G4int DoCascade(const G4double Z, const G4double A, G4GHEKinematicsVector *Cascade)
G4double GetKShellEnergy(G4double Z)
virtual G4bool IsApplicable(const G4ParticleDefinition &)
virtual void PreparePhysicsTable(const G4ParticleDefinition &)
virtual ~G4MuonMinusCaptureAtRest()
virtual G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
G4MuonMinusCaptureAtRest(const G4String &processName="muMinusCaptureAtRest", G4ProcessType aType=fHadronic)
static G4MuonMinus * MuonMinus()
static G4NeutrinoMu * NeutrinoMu()
static G4Neutron * Neutron()
static G4double GetNuclearMass(const G4double A, const G4double Z)
virtual G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & GetMomentum() const
void AddSecondary(G4Track *aSecondary)
virtual void Initialize(const G4Track &)
G4double GetPDGMass() const
G4ParticleDefinition * FindIon(G4int atomicNumber, G4int atomicMass, G4double excitationEnergy)
static G4ParticleTable * GetParticleTable()
static G4Proton * Proton()
void SetMomentum(const G4double x, const G4double y, const G4double z)
void SetTotalEnergy(const G4double en)
G4double GetTotalEnergy() const
G4ThreeVector GetMomentum() const
G4ParticleDefinition * GetDefinition() const
void SetDefinition(G4ParticleDefinition *aParticleDefinition)
G4Element * GetElement(const G4Material *aMaterial)
G4double GetMuonDecayRate(G4double Z, G4double A)
G4double GetMuonCaptureRate(G4double Z, G4double A)
const G4ThreeVector & GetPosition() const
void SetTouchableHandle(const G4TouchableHandle &apValue)
G4double GetGlobalTime() const
G4Material * GetMaterial() const
const G4TouchableHandle & GetTouchableHandle() const
static G4Triton * Triton()
void ProposeTrackStatus(G4TrackStatus status)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void SetNumberOfSecondaries(G4int totSecondaries)
G4ParticleChange aParticleChange
void SetProcessSubType(G4int)