102{
103 G4double result = 0., totS, fmass, fmass2, emass=electron_mass_c2, emass2;
104
107
108 emass2 = emass*emass;
109 totS = 2.*
energy*emass + emass2;
110
111 if( pName == "anti_nu_e" || pName == "nu_mu")
112 {
114 fmass2 = fmass*fmass;
115 result = (1. - fmass2/totS)*(1. - fmass2/totS);
116 }
117 else if( pName == "anti_nu_mu")
118 {
120 fmass2 = fmass*fmass;
121
122 result = (1.+ emass2/totS)*(1.+ fmass2/totS);
123 result += (1.- emass2/totS)*(1.- fmass2/totS)/3.;
124 result *= 0.25*(1. - fmass2/totS)*(1. - fmass2/totS);
125 }
126 else if( pName == "nu_tau")
127 {
129 fmass2 = fmass*fmass;
130 result = (1. - fmass2/totS)*(1. - fmass2/totS);
131 }
132 else if( pName == "anti_nu_tau")
133 {
135 fmass2 = fmass*fmass;
136
137 result = (1.+ emass2/totS)*(1.+ fmass2/totS);
138 result += (1.- emass2/totS)*(1.- fmass2/totS)/3.;
139 result *= 0.25*(1. - fmass2/totS)*(1. - fmass2/totS);
140 }
141 else
142 {
143 return result;
144 }
145
146
152
153 if( energy > 50.*GeV )
154 {
155 result *= bb;
156 result /= 1.+ aa*totS/mw/mw;
157
158 if( pName == "anti_nu_e")
159 {
160 result *= 1. + dd*gw*gw*totS/( (totS-mw*mw)*(totS-mw*mw)+gw*gw*mw*mw );
161 }
162 }
164 result *=
energy + 0.5*emass;
165 result *= ZZ;
166
168
169 return result;
170}
G4ParticleDefinition * GetDefinition() const
G4double GetTotalEnergy() const
const G4String & GetParticleName() const
G4double energy(const ThreeVector &p, const G4double m)