78 if( aParticleDef == aPionPlus ||
79 aParticleDef == aPionMinus ||
80 aParticleDef == aKaonPlus ||
81 aParticleDef == aKaonMinus ||
82 aParticleDef == aKaon0Long ) {
94 if (numberOfSecondaries > 0) {
95 for (
G4int index=0; index < numberOfSecondaries; index++)
100 if (aSecondaryDef == aMuonPlus ||
101 aSecondaryDef == aMuonMinus ) {
106 }
else if (aSecondaryDef == aNeutrinoMu ||
107 aSecondaryDef == aAntiNeutrinoMu ) {
119 if (eneutrino==0||emu==0)
return;
128 if (numberOfSecondaries == 2 ) {
130 G4double scale = - (eneutrino - ( p_muon * p_neutrino )/(emu+emmu));
132 p_muon = scale * p_muon;
133 p_neutrino = emmu * p_neutrino;
134 spin = p_muon + p_neutrino;
136 scale = 2./(amass*amass-emmu*emmu);
139 if (aParticle->
GetCharge() < 0.0) spin = -spin;
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
CLHEP::Hep3Vector G4ThreeVector
G4double GetTotalEnergy() const
virtual void DaughterPolarization(const G4Track &aTrack, G4DecayProducts *products)
const G4DynamicParticle * GetDynamicParticle() const
G4PionDecayMakeSpin(const G4String &processName="Decay")
G4ThreeVector G4RandomDirection()
const G4DynamicParticle * GetParentParticle() const
G4ParticleDefinition * GetDefinition() const
virtual ~G4PionDecayMakeSpin()
G4double GetCharge() const
void SetProcessSubType(G4int)
void SetPolarization(G4double polX, G4double polY, G4double polZ)
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
G4ThreeVector GetMomentum() const