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);
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++ ) {
188 G4Track* aNewTrack =
new G4Track( aNewParticle, localtime, position);
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() );
209 G4Track* aNewTrack =
new G4Track( aNewParticle, localtime, position );
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) {
258 }
else if(iz == 1 && ia == 3) {
277 G4double Enu = 0.5*(availableEnergy -
292 aPreResult->push_back(aN );
293 aPreResult->push_back(aNu);
296 G4cout <<
"DoMuCapture on H or He"
299 <<
" n= " << aPreResult->size()
319 if(counter == theProtonCounter) {
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
void DeRegisterExtraProcess(G4VProcess *)
Hep3Vector boostVector() const
G4MuonMinusCaptureAtRest(const G4String &processName="muMinusCaptureAtRest", G4ProcessType aType=fHadronic)
static G4double GetNuclearMass(const G4double A, const G4double Z)
std::vector< G4Isotope * > G4IsotopeVector
void SetMomentum(const G4ThreeVector &momentum)
virtual ~G4MuonMinusCaptureAtRest()
const G4LorentzVector & GetMomentum() const
static G4HadronicProcessStore * Instance()
G4ParticleDefinition * GetParticleDef()
void SetMomentum(const G4double x, const G4double y, const G4double z)
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
virtual void PreparePhysicsTable(const G4ParticleDefinition &)
const G4ThreeVector & GetPosition() const
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
G4double GetMuonCaptureRate(G4double Z, G4double A)
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
G4double GetMuonDecayRate(G4double Z, G4double A)
void SetTouchableHandle(const G4TouchableHandle &apValue)
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState) const
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
G4ThreeVector & GetRandomVec()
G4ParticleDefinition * GetDefinition() const
void SetA(G4double value)
std::vector< G4ReactionProduct * > G4ReactionProductVector
virtual G4bool IsApplicable(const G4ParticleDefinition &)
void RegisterParticleForExtraProcess(G4VProcess *, const G4ParticleDefinition *)
G4IonTable * GetIonTable() const
G4GLOB_DLL std::ostream G4cout
static G4NeutrinoMu * NeutrinoMu()
G4int DoCascade(const G4double Z, const G4double A, G4GHEKinematicsVector *Cascade)
HepLorentzVector & boost(double, double, double)
void SetMomentum(const G4LorentzVector &value)
virtual G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
void SetTotalEnergy(const G4double en)
void Init(G4int theA, G4int theZ)
static G4Triton * Triton()
G4double * GetRelativeAbundanceVector() const
static G4Proton * Proton()
void SetProcessSubType(G4int)
static G4Neutron * Neutron()
void SetNumberOfParticles(G4int value)
G4double GetGlobalTime() const
static G4Deuteron * Deuteron()
const G4TouchableHandle & GetTouchableHandle() const
G4Material * GetMaterial() const
void RegisterExtraProcess(G4VProcess *)
virtual void Initialize(const G4Track &)
G4double GetTotalEnergy() const
G4IsotopeVector * GetIsotopeVector() const
G4double GetKShellEnergy(G4double Z)
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
void SetNumberOfSecondaries(G4int totSecondaries)
G4ParticleChange aParticleChange
G4Element * GetElement(const G4Material *aMaterial)
void SetDefinition(G4ParticleDefinition *aParticleDefinition)
void DoBoundMuonMinusDecay(G4double Z, G4int *nCascade, G4GHEKinematicsVector *Cascade)
void AddSecondary(G4Track *aSecondary)
G4ThreeVector GetMomentum() const
const G4Isotope * GetIsotope(G4int iso) const
static G4MuonMinus * MuonMinus()
virtual G4ParticleDefinition * GetDefinition() const
void SetZ(G4double value)
void SetNumberOfCharged(G4int value)
void ProposeTrackStatus(G4TrackStatus status)
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
G4Nucleon * GetNextNucleon()
void PrintInfo(const G4ParticleDefinition *)