63 G4VRestProcess (processName, aType), nCascade(0), targetZ(0), targetA(0),
128 if(isv) ni = isv->size();
140 }
while (y > 0.0 && j < ni);
171 if(captureResult) nSecondaries += captureResult->size();
172 else nSecondaries = nEmSecondaries;
181 G4int n = captureResult->size();
182 for (
G4int isec = 0; isec <
n; isec++ ) {
189 G4Track* aNewTrack =
new G4Track( aNewParticle, localtime, position);
194 delete captureResult;
199 if(nEmSecondaries > 0) {
201 for (
G4int isec = 0; isec < nEmSecondaries; isec++ ) {
204 if(isec >=
nCascade) localtime += tDelay;
210 G4Track* aNewTrack =
new G4Track( aNewParticle, localtime, position );
234 G4double muEnergy = mumass + muBindingEnergy;
235 G4double muMom = std::sqrt(muBindingEnergy*(muBindingEnergy + 2.0*mumass));
257 if(iz == 1 && ia == 2) {
258 availableEnergy -= neutron_mass_c2;
259 }
else if(iz == 1 && ia == 3) {
260 availableEnergy -= 2.0*neutron_mass_c2;
278 G4double Enu = 0.5*(availableEnergy -
279 neutron_mass_c2*neutron_mass_c2/availableEnergy);
293 aPreResult->push_back(aN );
294 aPreResult->push_back(aNu);
297 G4cout <<
"DoMuCapture on H or He"
298 <<
" EkinN(MeV)= " << (availableEnergy - Enu - neutron_mass_c2)/
MeV
300 <<
" n= " << aPreResult->size()
320 if(counter == theProtonCounter) {
332 G4double Enu = 0.5*(Ecms - neutron_mass_c2*neutron_mass_c2/Ecms);
346 momResidual = momInitial - nuMom;
349 eEx = momResidual.mag();
351 G4cout <<
"G4MuonMinusCaptureAtRest::DoMuCapture: "
352 <<
" Eex(MeV)= " << (eEx-residualMass)/
MeV
356 }
while(eEx <= residualMass);
376 G4ReactionProductVector::iterator ires;
378 for(ires=aPreResult->begin(); ires!=aPreResult->end(); ires++) {
379 G4LorentzVector itV((*ires)->GetTotalEnergy(), (*ires)->GetMomentum());
380 itV.boost(fromBreit);
381 (*ires)->SetTotalEnergy(itV.t());
382 (*ires)->SetMomentum(itV.vect());
388 aPreResult->push_back(aNu);
391 G4cout <<
"DoMuCapture: Nsec= "
392 << aPreResult->size() <<
" Ebalance(MeV)= " << eBal/
MeV
393 <<
" E0(MeV)= " <<availableEnergy/
MeV
394 <<
" 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