83 protonMassAMU(1.007276),
92 lowestKinEnergy = 1.0*
keV;
93 theZieglerFactor =
eV*
cm2*1.0e-15;
95 expStopPower125 = 0.0;
98 if(p) { SetParticle(p); }
99 else { SetParticle(theElectron); }
112 if(p != particle) { SetParticle(p); }
118 isInitialised =
true;
122 pname !=
"deuteron" && pname !=
"triton" &&
123 pname !=
"alpha+" && pname !=
"helium" &&
124 pname !=
"hydrogen") { isIon =
true; }
162 G4double maxEnergy = std::min(tmax,maxKinEnergy);
163 if(cutEnergy < maxEnergy) {
167 G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*mass)/energy2;
168 cross = 1.0/cutEnergy - 1.0/maxEnergy - beta2*log(maxEnergy/cutEnergy)/tmax;
188 (p,kineticEnergy,cutEnergy,maxEnergy);
203 (p,kineticEnergy,cutEnergy,maxEnergy);
215 G4double tkin = kineticEnergy/massRate;
218 if(tkin < lowestKinEnergy) {
219 dedx = DEDX(material, lowestKinEnergy)*sqrt(tkin/lowestKinEnergy);
221 dedx = DEDX(material, tkin);
224 if (cutEnergy < tmax) {
238 if (dedx < 0.0) { dedx = 0.0; }
240 dedx *= chargeSquare;
257 G4double xmax = std::min(tmax, maxEnergy);
258 if(xmin >= xmax) {
return; }
263 G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*mass)/energy2;
272 deltaKinEnergy = xmin*xmax/(xmin*(1.0 - q) + xmax*q);
274 f = 1.0 - beta2*deltaKinEnergy/tmax;
277 G4cout <<
"G4BraggModel::SampleSecondary Warning! "
278 <<
"Majorant " << grej <<
" < "
279 << f <<
" for e= " << deltaKinEnergy
287 G4double totMomentum = energy*sqrt(beta2);
289 (deltaMomentum * totMomentum);
290 if(cost > 1.0) cost = 1.0;
291 G4double sint = sqrt((1.0 - cost)*(1.0 + cost));
295 G4ThreeVector deltaDirection(sint*cos(phi),sint*sin(phi), cost) ;
299 kineticEnergy -= deltaKinEnergy;
300 G4ThreeVector finalP = direction*totMomentum - deltaDirection*deltaMomentum;
301 finalP = finalP.
unit();
310 vdp->push_back(delta);
318 if(pd != particle) { SetParticle(pd); }
321 (1. + 2.0*(tau + 1.)*ratio + ratio*ratio);
330 if(
"" == chFormula) {
return false; }
333 const size_t numberOfMolecula = 11;
334 const G4String molName[numberOfMolecula] = {
335 "Al_2O_3",
"CO_2",
"CH_4",
336 "(C_2H_4)_N-Polyethylene",
"(C_2H_4)_N-Polypropylene",
"(C_8H_8)_N",
337 "C_3H_8",
"SiO_2",
"H_2O",
338 "H_2O-Gas",
"Graphite" } ;
339 const G4int idxPSTAR[numberOfMolecula] = {
348 if( theState ==
kStateGas &&
"H_2O" == chFormula) {
353 for (
size_t i=0; i<numberOfMolecula; ++i) {
354 if (chFormula == molName[i]) {
356 iPSTAR = idxPSTAR[i];
370 if (iMolecula >= 0) {
379 {1.187E+1, 1.343E+1, 1.069E+4, 7.723E+2, 2.153E-2},
380 {7.802E+0, 8.814E+0, 8.303E+3, 7.446E+2, 7.966E-3},
381 {7.294E+0, 8.284E+0, 5.010E+3, 4.544E+2, 8.153E-3},
382 {8.646E+0, 9.800E+0, 7.066E+3, 4.581E+2, 9.383E-3},
383 {1.286E+1, 1.462E+1, 5.625E+3, 2.621E+3, 3.512E-2},
384 {3.229E+1, 3.696E+1, 8.918E+3, 3.244E+3, 1.273E-1},
385 {1.604E+1, 1.825E+1, 6.967E+3, 2.307E+3, 3.775E-2},
386 {8.049E+0, 9.099E+0, 9.257E+3, 3.846E+2, 1.007E-2},
387 {4.015E+0, 4.542E+0, 3.955E+3, 4.847E+2, 7.904E-3},
388 {4.571E+0, 5.173E+0, 4.346E+3, 4.779E+2, 8.572E-3},
389 {2.631E+0, 2.601E+0, 1.701E+3, 1.279E+3, 1.638E-2} };
391 static G4double atomicWeight[11] = {
392 101.96128, 44.0098, 16.0426, 28.0536, 42.0804,
393 104.1512, 44.665, 60.0843, 18.0152, 18.0152, 12.0};
396 ionloss = a[iMolecula][0] * sqrt(T) ;
398 }
else if ( T < 10000.0 ) {
399 G4double slow = a[iMolecula][1] * pow(T, 0.45) ;
400 G4double shigh = log( 1.0 + a[iMolecula][3]/T
401 + a[iMolecula][4]*T ) * a[iMolecula][2]/T ;
402 ionloss = slow*shigh / (slow + shigh) ;
405 if ( ionloss < 0.0) ionloss = 0.0 ;
406 if ( 10 == iMolecula ) {
408 ionloss *= (1.0+0.023+0.0066*log10(T));
410 else if (T < 700.0) {
411 ionloss *=(1.0+0.089-0.0248*log10(T-99.));
413 else if (T < 10000.0) {
414 ionloss *=(1.0+0.089-0.0248*log10(700.-99.));
417 ionloss /= atomicWeight[iMolecula];
422 ionloss = ElectronicStoppingPower( z, kineticEnergy ) ;
445 {1.254E+0, 1.440E+0, 2.426E+2, 1.200E+4, 1.159E-1},
446 {1.229E+0, 1.397E+0, 4.845E+2, 5.873E+3, 5.225E-2},
447 {1.411E+0, 1.600E+0, 7.256E+2, 3.013E+3, 4.578E-2},
448 {2.248E+0, 2.590E+0, 9.660E+2, 1.538E+2, 3.475E-2},
449 {2.474E+0, 2.815E+0, 1.206E+3, 1.060E+3, 2.855E-2},
450 {2.631E+0, 2.601E+0, 1.701E+3, 1.279E+3, 1.638E-2},
451 {2.954E+0, 3.350E+0, 1.683E+3, 1.900E+3, 2.513E-2},
452 {2.652E+0, 3.000E+0, 1.920E+3, 2.000E+3, 2.230E-2},
453 {2.085E+0, 2.352E+0, 2.157E+3, 2.634E+3, 1.816E-2},
454 {1.951E+0, 2.199E+0, 2.393E+3, 2.699E+3, 1.568E-2},
456 {2.542E+0, 2.869E+0, 2.628E+3, 1.854E+3, 1.472E-2},
457 {3.791E+0, 4.293E+0, 2.862E+3, 1.009E+3, 1.397E-2},
458 {4.154E+0, 4.739E+0, 2.766E+3, 1.645E+2, 2.023E-2},
459 {4.914E+0, 5.598E+0, 3.193E+3, 2.327E+2, 1.419E-2},
460 {3.232E+0, 3.647E+0, 3.561E+3, 1.560E+3, 1.267E-2},
461 {3.447E+0, 3.891E+0, 3.792E+3, 1.219E+3, 1.211E-2},
462 {5.301E+0, 6.008E+0, 3.969E+3, 6.451E+2, 1.183E-2},
463 {5.731E+0, 6.500E+0, 4.253E+3, 5.300E+2, 1.123E-2},
464 {5.152E+0, 5.833E+0, 4.482E+3, 5.457E+2, 1.129E-2},
465 {5.521E+0, 6.252E+0, 4.710E+3, 5.533E+2, 1.112E-2},
467 {5.201E+0, 5.884E+0, 4.938E+3, 5.609E+2, 9.995E-3},
468 {4.858E+0, 5.489E+0, 5.260E+3, 6.511E+2, 8.930E-3},
469 {4.479E+0, 5.055E+0, 5.391E+3, 9.523E+2, 9.117E-3},
470 {3.983E+0, 4.489E+0, 5.616E+3, 1.336E+3, 8.413E-3},
471 {3.469E+0, 3.907E+0, 5.725E+3, 1.461E+3, 8.829E-3},
472 {3.519E+0, 3.963E+0, 6.065E+3, 1.243E+3, 7.782E-3},
473 {3.140E+0, 3.535E+0, 6.288E+3, 1.372E+3, 7.361E-3},
474 {3.553E+0, 4.004E+0, 6.205E+3, 5.551E+2, 8.763E-3},
475 {3.696E+0, 4.194E+0, 4.649E+3, 8.113E+1, 2.242E-2},
476 {4.210E+0, 4.750E+0, 6.953E+3, 2.952E+2, 6.809E-3},
478 {5.041E+0, 5.697E+0, 7.173E+3, 2.026E+2, 6.725E-3},
479 {5.554E+0, 6.300E+0, 6.496E+3, 1.100E+2, 9.689E-3},
480 {5.323E+0, 6.012E+0, 7.611E+3, 2.925E+2, 6.447E-3},
481 {5.874E+0, 6.656E+0, 7.395E+3, 1.175E+2, 7.684E-3},
482 {6.658E+0, 7.536E+0, 7.694E+3, 2.223E+2, 6.509E-3},
483 {6.413E+0, 7.240E+0, 1.185E+4, 1.537E+2, 2.880E-3},
484 {5.694E+0, 6.429E+0, 8.478E+3, 2.929E+2, 6.087E-3},
485 {6.339E+0, 7.159E+0, 8.693E+3, 3.303E+2, 6.003E-3},
486 {6.407E+0, 7.234E+0, 8.907E+3, 3.678E+2, 5.889E-3},
487 {6.734E+0, 7.603E+0, 9.120E+3, 4.052E+2, 5.765E-3},
489 {6.901E+0, 7.791E+0, 9.333E+3, 4.427E+2, 5.587E-3},
490 {6.424E+0, 7.248E+0, 9.545E+3, 4.802E+2, 5.376E-3},
491 {6.799E+0, 7.671E+0, 9.756E+3, 5.176E+2, 5.315E-3},
492 {6.109E+0, 6.887E+0, 9.966E+3, 5.551E+2, 5.151E-3},
493 {5.924E+0, 6.677E+0, 1.018E+4, 5.925E+2, 4.919E-3},
494 {5.238E+0, 5.900E+0, 1.038E+4, 6.300E+2, 4.758E-3},
496 {5.345E+0, 6.038E+0, 6.790E+3, 3.978E+2, 1.676E-2},
497 {5.814E+0, 6.554E+0, 1.080E+4, 3.555E+2, 4.626E-3},
498 {6.229E+0, 7.024E+0, 1.101E+4, 3.709E+2, 4.540E-3},
499 {6.409E+0, 7.227E+0, 1.121E+4, 3.864E+2, 4.474E-3},
501 {7.500E+0, 8.480E+0, 8.608E+3, 3.480E+2, 9.074E-3},
502 {6.979E+0, 7.871E+0, 1.162E+4, 3.924E+2, 4.402E-3},
503 {7.725E+0, 8.716E+0, 1.183E+4, 3.948E+2, 4.376E-3},
504 {8.337E+0, 9.425E+0, 1.051E+4, 2.696E+2, 6.206E-3},
505 {7.287E+0, 8.218E+0, 1.223E+4, 3.997E+2, 4.447E-3},
506 {7.899E+0, 8.911E+0, 1.243E+4, 4.021E+2, 4.511E-3},
507 {8.041E+0, 9.071E+0, 1.263E+4, 4.045E+2, 4.540E-3},
508 {7.488E+0, 8.444E+0, 1.283E+4, 4.069E+2, 4.420E-3},
509 {7.291E+0, 8.219E+0, 1.303E+4, 4.093E+2, 4.298E-3},
510 {7.098E+0, 8.000E+0, 1.323E+4, 4.118E+2, 4.182E-3},
512 {6.909E+0, 7.786E+0, 1.343E+4, 4.142E+2, 4.058E-3},
513 {6.728E+0, 7.580E+0, 1.362E+4, 4.166E+2, 3.976E-3},
514 {6.551E+0, 7.380E+0, 1.382E+4, 4.190E+2, 3.877E-3},
515 {6.739E+0, 7.592E+0, 1.402E+4, 4.214E+2, 3.863E-3},
516 {6.212E+0, 6.996E+0, 1.421E+4, 4.239E+2, 3.725E-3},
517 {5.517E+0, 6.210E+0, 1.440E+4, 4.263E+2, 3.632E-3},
518 {5.220E+0, 5.874E+0, 1.460E+4, 4.287E+2, 3.498E-3},
519 {5.071E+0, 5.706E+0, 1.479E+4, 4.330E+2, 3.405E-3},
520 {4.926E+0, 5.542E+0, 1.498E+4, 4.335E+2, 3.342E-3},
521 {4.788E+0, 5.386E+0, 1.517E+4, 4.359E+2, 3.292E-3},
523 {4.893E+0, 5.505E+0, 1.536E+4, 4.384E+2, 3.243E-3},
524 {5.028E+0, 5.657E+0, 1.555E+4, 4.408E+2, 3.195E-3},
525 {4.738E+0, 5.329E+0, 1.574E+4, 4.432E+2, 3.186E-3},
526 {4.587E+0, 5.160E+0, 1.541E+4, 4.153E+2, 3.406E-3},
527 {5.201E+0, 5.851E+0, 1.612E+4, 4.416E+2, 3.122E-3},
528 {5.071E+0, 5.704E+0, 1.630E+4, 4.409E+2, 3.082E-3},
529 {4.946E+0, 5.563E+0, 1.649E+4, 4.401E+2, 2.965E-3},
530 {4.477E+0, 5.034E+0, 1.667E+4, 4.393E+2, 2.871E-3},
532 {4.844E+0, 5.458E+0, 7.852E+3, 9.758E+2, 2.077E-2},
533 {4.307E+0, 4.843E+0, 1.704E+4, 4.878E+2, 2.882E-3},
535 {4.723E+0, 5.311E+0, 1.722E+4, 5.370E+2, 2.913E-3},
536 {5.319E+0, 5.982E+0, 1.740E+4, 5.863E+2, 2.871E-3},
537 {5.956E+0, 6.700E+0, 1.780E+4, 6.770E+2, 2.660E-3},
538 {6.158E+0, 6.928E+0, 1.777E+4, 5.863E+2, 2.812E-3},
539 {6.203E+0, 6.979E+0, 1.795E+4, 5.863E+2, 2.776E-3},
540 {6.181E+0, 6.954E+0, 1.812E+4, 5.863E+2, 2.748E-3},
541 {6.949E+0, 7.820E+0, 1.830E+4, 5.863E+2, 2.737E-3},
542 {7.506E+0, 8.448E+0, 1.848E+4, 5.863E+2, 2.727E-3},
543 {7.648E+0, 8.609E+0, 1.866E+4, 5.863E+2, 2.697E-3},
544 {7.711E+0, 8.679E+0, 1.883E+4, 5.863E+2, 2.641E-3},
546 {7.407E+0, 8.336E+0, 1.901E+4, 5.863E+2, 2.603E-3},
547 {7.290E+0, 8.204E+0, 1.918E+4, 5.863E+2, 2.673E-3}
553 if ( T < 40.0 && 5 == i) {
558 }
else if ( T < 10.0 ) {
564 G4double slow = a[i][1] * pow(T, 0.45) ;
565 G4double shigh = log( 1.0 + a[i][3]/T + a[i][4]*T ) * a[i][2]/T ;
566 ionloss = slow*shigh*fac / (slow + shigh) ;
568 if ( ionloss < 0.0) { ionloss = 0.0; }
580 if(material != currentMaterial) {
584 if( !HasMaterial(material) ) { iPSTAR = pstar.
GetIndex(material); }
592 const G4double* theAtomicNumDensityVector =
598 }
else if(iMolecula >= 0) {
600 eloss = StoppingPower(material, kineticEnergy)*
604 }
else if(1 == numberOfElements) {
607 eloss = ElectronicStoppingPower(z, kineticEnergy)
612 }
else if( MolecIsInZiegler1988(material) ) {
620 for (
G4int i=0; i<numberOfElements; i++) {
621 const G4Element* element = (*theElementVector)[i] ;
623 eloss += ElectronicStoppingPower(z,kineticEnergy)
624 * theAtomicNumDensityVector[i] ;
625 eloss125 += ElectronicStoppingPower(z,125.0*
keV)
626 * theAtomicNumDensityVector[i] ;
630 eloss *= ChemicalFactor(kineticEnergy, eloss125) ;
638 for (
G4int i=0; i<numberOfElements; i++)
640 const G4Element* element = (*theElementVector)[i] ;
641 eloss += ElectronicStoppingPower(element->
GetZ(), kineticEnergy)
642 * theAtomicNumDensityVector[i];
645 return eloss*theZieglerFactor;
658 if (myFormula == chFormula ) {
return false; }
668 if( theState ==
kStateGas && myFormula == chFormula)
return false ;
670 const size_t numberOfMolecula = 53 ;
675 static G4String nameOfMol[numberOfMolecula] = {
676 "H_2O",
"C_2H_4O",
"C_3H_6O",
"C_2H_2",
"C_H_3OH",
677 "C_2H_5OH",
"C_3H_7OH",
"C_3H_4",
"NH_3",
"C_14H_10",
678 "C_6H_6",
"C_4H_10",
"C_4H_6",
"C_4H_8O",
"CCl_4",
679 "CF_4",
"C_6H_8",
"C_6H_12",
"C_6H_10O",
"C_6H_10",
680 "C_8H_16",
"C_5H_10",
"C_5H_8",
"C_3H_6-Cyclopropane",
"C_2H_4F_2",
681 "C_2H_2F_2",
"C_4H_8O_2",
"C_2H_6",
"C_2F_6",
"C_2H_6O",
682 "C_3H_6O",
"C_4H_10O",
"C_2H_4",
"C_2H_4O",
"C_2H_4S",
683 "SH_2",
"CH_4",
"CCLF_3",
"CCl_2F_2",
"CHCl_2F",
684 "(CH_3)_2S",
"N_2O",
"C_5H_10O",
"C_8H_6",
"(CH_2)_N",
685 "(C_3H_6)_N",
"(C_8H_8)_N",
"C_3H_8",
"C_3H_6-Propylene",
"C_3H_6O",
686 "C_3H_6S",
"C_4H_4S",
"C_7H_8"
689 static G4double expStopping[numberOfMolecula] = {
690 66.1, 190.4, 258.7, 42.2, 141.5,
691 210.9, 279.6, 198.8, 31.0, 267.5,
692 122.8, 311.4, 260.3, 328.9, 391.3,
693 206.6, 374.0, 422.0, 432.0, 398.0,
694 554.0, 353.0, 326.0, 74.6, 220.5,
695 197.4, 362.0, 170.0, 330.5, 211.3,
696 262.3, 349.6, 51.3, 187.0, 236.9,
697 121.9, 35.8, 247.0, 292.6, 268.0,
698 262.3, 49.0, 398.9, 444.0, 22.91,
699 68.0, 155.0, 84.0, 74.2, 254.7,
703 static G4double expCharge[numberOfMolecula] = {
704 HeEff, HeEff, HeEff, 1.0, HeEff,
705 HeEff, HeEff, HeEff, 1.0, 1.0,
706 1.0, HeEff, HeEff, HeEff, HeEff,
707 HeEff, HeEff, HeEff, HeEff, HeEff,
708 HeEff, HeEff, HeEff, 1.0, HeEff,
709 HeEff, HeEff, HeEff, HeEff, HeEff,
710 HeEff, HeEff, 1.0, HeEff, HeEff,
711 HeEff, 1.0, HeEff, HeEff, HeEff,
712 HeEff, 1.0, HeEff, HeEff, 1.0,
713 1.0, 1.0, 1.0, 1.0, HeEff,
717 static G4double numberOfAtomsPerMolecula[numberOfMolecula] = {
718 3.0, 7.0, 10.0, 4.0, 6.0,
719 9.0, 12.0, 7.0, 4.0, 24.0,
720 12.0, 14.0, 10.0, 13.0, 5.0,
721 5.0, 14.0, 18.0, 17.0, 17.0,
722 24.0, 15.0, 13.0, 9.0, 8.0,
723 6.0, 14.0, 8.0, 8.0, 9.0,
724 10.0, 15.0, 6.0, 7.0, 7.0,
725 3.0, 5.0, 5.0, 5.0, 5.0,
726 9.0, 3.0, 16.0, 14.0, 3.0,
727 9.0, 16.0, 11.0, 9.0, 10.0,
732 for (
size_t i=0; i<numberOfMolecula; i++)
734 if(chFormula == nameOfMol[i]) {
737 (expCharge[i] * numberOfAtomsPerMolecula[i]) ;
738 SetExpStopPower125(exp125);
758 G4double beta = sqrt(1.0 - 1.0/(gamma*gamma)) ;
759 G4double beta25 = sqrt(1.0 - 1.0/(gamma25*gamma25)) ;
760 G4double beta125 = sqrt(1.0 - 1.0/(gamma125*gamma125)) ;
762 G4double factor = 1.0 + (expStopPower125/eloss125 - 1.0) *
763 (1.0 + exp( 1.48 * ( beta125/beta25 - 7.0 ) ) ) /
764 (1.0 + exp( 1.48 * ( beta/beta25 - 7.0 ) ) ) ;