63 G4VRestProcess (processName, aType), nCascade(0), targetZ(0), targetA(0),
127 if(isv) ni = isv->size();
139 }
while (y > 0.0 && j < ni);
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;
209 G4Track* aNewTrack =
new G4Track( aNewParticle, localtime, position );
233 G4double muEnergy = mumass + muBindingEnergy;
234 G4double muMom = std::sqrt(muBindingEnergy*(muBindingEnergy + 2.0*mumass));
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);
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 *)
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
CLHEP::Hep3Vector G4ThreeVector
static G4HadronicProcessStore * Instance()
G4ParticleDefinition * GetParticleDef()
void SetMomentum(const G4double x, const G4double y, const G4double z)
G4MuMinusCaptureCascade * pEMCascade
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)
G4ExcitationHandler * theHandler
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
G4StopElementSelector * pSelector
static G4NeutrinoMu * NeutrinoMu()
G4int DoCascade(const G4double Z, const G4double A, G4GHEKinematicsVector *Cascade)
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)
G4GHEKinematicsVector * Cascade
G4Nucleon * GetNextNucleon()
G4ReactionProductVector * DoMuCapture()
void PrintInfo(const G4ParticleDefinition *)
CLHEP::HepLorentzVector G4LorentzVector