62 G4cout <<
"G4BoldyshevTripletModel is constructed " <<
G4endl;
87 G4cout <<
"Calling Initialise() of G4BoldyshevTripletModel."
100 std::sqrt(momentumThreshold_N*momentumThreshold_N + 1.0));
105 G4double J1 = 0.5*(t*cosht/sinht - logsinht);
106 G4double J2 = (-2./3.)*logsinht + t*cosht/sinht
107 + (sinht - t*cosht*cosht*cosht)/(3.*sinht*sinht*sinht);
115 char* path = std::getenv(
"G4LEDATA");
122 for(
G4int i=0; i<numOfCouples; ++i)
129 for (
G4int j=0; j<nelm; ++j)
157 G4cout <<
"Calling ReadData() of G4BoldyshevTripletModel"
161 if(
data[Z]) {
return; }
163 const char* datadir = path;
167 datadir = std::getenv(
"G4LEDATA");
172 "Environment variable G4LEDATA not defined");
178 std::ostringstream ost;
179 ost << datadir <<
"/livermore/tripdata/pp-trip-cs-" << Z <<
".dat";
180 std::ifstream
fin(ost.str().c_str());
185 ed <<
"G4BoldyshevTripletModel data file <" << ost.str().c_str()
186 <<
"> is not opened!" <<
G4endl;
189 ed,
"G4LEDATA version should be G4EMLOW6.27 or later.");
197 <<
" is opened by G4BoldyshevTripletModel" <<
G4endl;}
203 data[
Z]->SetSpline(
true);
214 G4cout <<
"Calling ComputeCrossSectionPerAtom() of G4BoldyshevTripletModel"
230 if(!pv) {
return xs; }
233 xs = pv->
Value(GammaEnergy);
237 G4cout <<
"*** Triplet conversion xs for Z=" << Z <<
" at energy E(MeV)="
246 std::vector<G4DynamicParticle*>* fvect,
255 G4cout <<
"Calling SampleSecondaries() of G4BoldyshevTripletModel"
270 G4double loga, f1_re, greject, cost;
274 if (cosThetaMax > 1.) {
283 cost =
G4Exp(logcostm*rndmEngine->
flat());
285 G4double bre = (1.-5.*cost*cost)/(2.*cost);
286 loga =
G4Log((1.+ cost)/(1.- cost));
287 f1_re = 1. - bre*loga;
288 greject = (cost < costlim) ? are*f1_re : 1.0;
291 }
while(greject < rndmEngine->
flat());
294 G4double sint2 = (1. - cost)*(1. + cost);
300 rt = (1. - std::cos(2.*phi_re)*fp/f1_re)/
twopi;
303 }
while(rt < rndmEngine->
flat());
309 G4double D2 = 4.*S * electron_mass_c2*electron_mass_c2 + P2*P2*sint2;
316 G4ThreeVector electronRDirection (sint*std::cos(phi_re), sint*std::sin(phi_re), cost);
317 electronRDirection.
rotateUz(photonDirection);
320 electronRKineEnergy);
337 epsilon = c1/(2.*
xb) + (xb - 4.)/(2.*
c1) + 0.5;
339 G4double photonEnergy1 = photonEnergy - ener_re ;
341 G4double positronTotEnergy =
std::max(epsilon*photonEnergy1, electron_mass_c2);
342 G4double electronTotEnergy =
std::max(photonEnergy1 - positronTotEnergy, electron_mass_c2);
345 static const G4double a2 = 0.5333333333;
349 G4double thetaEle = u*electron_mass_c2/electronTotEnergy;
350 G4double sinte = std::sin(thetaEle);
351 G4double coste = std::cos(thetaEle);
353 G4double thetaPos = u*electron_mass_c2/positronTotEnergy;
354 G4double sintp = std::sin(thetaPos);
355 G4double costp = std::cos(thetaPos);
367 G4ThreeVector electronDirection (sinte*cosp, sinte*sinp, coste);
368 electronDirection.
rotateUz(photonDirection);
376 G4ThreeVector positronDirection (-sintp*cosp, -sintp*sinp, costp);
377 positronDirection.
rotateUz(photonDirection);
381 positronDirection, positronKineEnergy);
384 fvect->push_back(particle1);
385 fvect->push_back(particle2);
387 if(particle3) { fvect->push_back(particle3); }