453 *t= GetTables(aParticle);
458 if (!propertimeTable) {
459 ParticleHaveNoLoss(aParticle,
"ProperTime");
463 const G4double parlowen=0.4 , ppar=0.5-parlowen ;
464 const G4double dToverT = 0.05 , facT = 1. -dToverT ;
465 G4double timestart,timeend,deltatime,dTT;
469 G4double scaledKineticEnergy = KineticEnergyStart*t->theMassRatio;
471 if (scaledKineticEnergy<t->theLowestKineticEnergy) {
473 timestart = std::exp(ppar*std::log(scaledKineticEnergy/t->theLowestKineticEnergy))*
474 (*propertimeTable)(materialIndex)->GetValue(
475 t->theLowestKineticEnergy,isOut);
478 }
else if (scaledKineticEnergy>t->theHighestKineticEnergy) {
480 timestart = (*propertimeTable)(materialIndex)->GetValue(
481 t->theHighestKineticEnergy,isOut);
485 timestart = (*propertimeTable)(materialIndex)->GetValue(
486 scaledKineticEnergy,isOut);
490 dTT = (KineticEnergyStart - KineticEnergyEnd)/KineticEnergyStart ;
493 scaledKineticEnergy = facT*KineticEnergyStart*t->theMassRatio;
495 scaledKineticEnergy = KineticEnergyEnd*t->theMassRatio;
497 if (scaledKineticEnergy<t->theLowestKineticEnergy) {
499 timeend = std::exp(ppar*std::log(scaledKineticEnergy/t->theLowestKineticEnergy))*
500 (*propertimeTable)(materialIndex)->GetValue(
501 t->theLowestKineticEnergy,isOut);
504 }
else if (scaledKineticEnergy>t->theHighestKineticEnergy) {
506 timeend = (*propertimeTable)(materialIndex)->GetValue(
507 t->theHighestKineticEnergy,isOut);
511 timeend = (*propertimeTable)(materialIndex)->GetValue(
512 scaledKineticEnergy,isOut);
516 deltatime = timestart - timeend ;
519 deltatime *= dTT/dToverT ;
521 return deltatime/t->theMassRatio ;