Ignore:
Timestamp:
Jun 18, 2010, 11:42:07 AM (14 years ago)
Author:
garnier
Message:

update geant4-09-04-beta-cand-01 interfaces-V09-03-09 vis-V09-03-08

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh

    r1196 r1315  
    2424// ********************************************************************
    2525//
    26 // $Id: G4VEnergyLossProcess.hh,v 1.89 2009/07/03 14:39:17 vnivanch Exp $
     26// $Id: G4VEnergyLossProcess.hh,v 1.92 2010/04/28 14:43:13 vnivanch Exp $
    2727// GEANT4 tag $Name:
    2828//
     
    196196  // Sampling of secondaries in vicinity of geometrical boundary
    197197  void SampleSubCutSecondaries(std::vector<G4Track*>&, const G4Step&,
    198                                G4VEmModel* model, G4int matIdx,
    199                                G4double& extraEdep);
     198                               G4VEmModel* model, G4int matIdx);
    200199
    201200  // PostStep sampling of secondaries
     
    418417  // Run time method for simulation of ionisation
    419418  //------------------------------------------------------------------------
     419
     420  // access atom on which interaction happens
     421  const G4Element* GetCurrentElement() const;
    420422
    421423  // sample range at the end of a step
     
    553555};
    554556
    555 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    556 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     557// ======== Run time inline methods ================
    557558
    558559inline size_t G4VEnergyLossProcess::CurrentMaterialCutsCoupleIndex() const
     
    586587//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    587588
    588 inline void G4VEnergyLossProcess::SetFluctModel(G4VEmFluctuationModel* p)
    589 {
    590   fluctModel = p;
    591 }
    592 
    593 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    594 
    595 inline G4VEmFluctuationModel* G4VEnergyLossProcess::FluctModel()
    596 {
    597   return fluctModel;
    598 }
    599 
    600 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    601 
    602 inline void G4VEnergyLossProcess::SetParticle(const G4ParticleDefinition* p)
    603 {
    604   particle = p;
    605 }
    606 
    607 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    608 
    609 inline void G4VEnergyLossProcess::SetSecondaryParticle(const G4ParticleDefinition* p)
    610 {
    611   secondaryParticle = p;
    612 }
    613 
    614 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    615 
    616 inline void G4VEnergyLossProcess::SetBaseParticle(const G4ParticleDefinition* p)
    617 {
    618   baseParticle = p;
    619 }
    620 
    621 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    622 
    623 inline const G4ParticleDefinition* G4VEnergyLossProcess::Particle() const
    624 {
    625   return particle;
    626 }
    627 
    628 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    629 
    630 inline const G4ParticleDefinition* G4VEnergyLossProcess::BaseParticle() const
    631 {
    632   return baseParticle;
    633 }
    634 
    635 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    636 
    637 inline const G4ParticleDefinition* G4VEnergyLossProcess::SecondaryParticle() const
    638 {
    639   return secondaryParticle;
    640 }
    641 
    642 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    643 
    644 inline void G4VEnergyLossProcess::SetLossFluctuations(G4bool val)
    645 {
    646   lossFluctuationFlag = val;
    647 }
    648 
    649 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    650 
    651 inline void G4VEnergyLossProcess::SetRandomStep(G4bool val)
    652 {
    653   rndmStepFlag = val;
    654 }
    655 
    656 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    657 
    658 inline void G4VEnergyLossProcess::SetIntegral(G4bool val)
    659 {
    660   integral = val;
    661 }
    662 
    663 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    664  
    665 inline G4bool G4VEnergyLossProcess::IsIntegral() const
    666 {
    667   return integral;
    668 }
    669 
    670 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    671 
    672 inline void G4VEnergyLossProcess::SetIonisation(G4bool val)
    673 {
    674   isIonisation = val;
    675   if(val) aGPILSelection = CandidateForSelection;
    676   else    aGPILSelection = NotCandidateForSelection;
    677 }
    678 
    679 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    680 
    681 inline G4bool G4VEnergyLossProcess::IsIonisationProcess() const
    682 {
    683   return isIonisation;
    684 }
    685 
    686 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    687 
    688 inline void G4VEnergyLossProcess::SetLinearLossLimit(G4double val)
    689 {
    690   linLossLimit = val;
    691 }
    692 
    693 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    694 
    695 inline void G4VEnergyLossProcess::SetMinSubRange(G4double val)
    696 {
    697   minSubRange = val;
    698 }
    699 
    700 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    701 
    702 inline void G4VEnergyLossProcess::SetLambdaFactor(G4double val)
    703 {
    704   if(val > 0.0 && val <= 1.0) lambdaFactor = val;
    705 }
    706 
    707 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    708 
    709 void G4VEnergyLossProcess::SetStepFunction(G4double v1, G4double v2)
    710 {
    711   dRoverRange = v1;
    712   finalRange = v2;
    713   if (dRoverRange > 0.999) dRoverRange = 1.0;
    714   currentCouple = 0;
    715   mfpKinEnergy  = DBL_MAX;
    716 }
    717 
    718 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    719 
    720 inline void G4VEnergyLossProcess::SetLowestEnergyLimit(G4double val)
    721 {
    722   lowestKinEnergy = val;
    723 }
    724 
    725 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    726 
    727 inline G4int G4VEnergyLossProcess::NumberOfSubCutoffRegions() const
    728 {
    729   return nSCoffRegions;
    730 }
    731 
    732 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    733 
    734 inline G4int G4VEnergyLossProcess::NumberOfDERegions() const
    735 {
    736   return nDERegions;
    737 }
    738 
    739 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    740 
    741 inline void G4VEnergyLossProcess::SetDEDXBinning(G4int nbins)
    742 {
    743   nBins = nbins;
    744 }
    745 
    746 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    747 
    748 inline void G4VEnergyLossProcess::SetLambdaBinning(G4int nbins)
    749 {
    750   nBins = nbins;
    751 }
    752 
    753 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    754 
    755 inline void G4VEnergyLossProcess::SetDEDXBinningForCSDARange(G4int nbins)
    756 {
    757   nBinsCSDA = nbins;
    758 }
    759 
    760 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    761 
    762 inline void G4VEnergyLossProcess::SetMinKinEnergy(G4double e)
    763 {
    764   minKinEnergy = e;
    765 }
    766 
    767 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    768 
    769 inline G4double G4VEnergyLossProcess::MinKinEnergy() const
    770 {
    771   return minKinEnergy;
    772 }
    773 
    774 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    775 
    776 inline void G4VEnergyLossProcess::SetMaxKinEnergy(G4double e)
    777 {
    778   maxKinEnergy = e;
    779   if(e < maxKinEnergyCSDA) maxKinEnergyCSDA = e;
    780 }
    781 
    782 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    783 
    784 inline G4double G4VEnergyLossProcess::MaxKinEnergy() const
    785 {
    786   return maxKinEnergy;
    787 }
    788 
    789 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    790 
    791 inline void G4VEnergyLossProcess::SetMaxKinEnergyForCSDARange(G4double e)
    792 {
    793   maxKinEnergyCSDA = e;
    794 }
    795 
    796 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    797 
    798 inline G4double G4VEnergyLossProcess::GetDEDX(G4double& kineticEnergy,
    799                                         const G4MaterialCutsCouple* couple)
     589inline void
     590G4VEnergyLossProcess::DefineMaterial(const G4MaterialCutsCouple* couple)
     591{
     592  if(couple != currentCouple) {
     593    currentCouple   = couple;
     594    currentMaterial = couple->GetMaterial();
     595    currentMaterialIndex = couple->GetIndex();
     596    mfpKinEnergy = DBL_MAX;
     597  }
     598}
     599
     600//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     601
     602inline void G4VEnergyLossProcess::SetDynamicMassCharge(G4double massratio,
     603                                                       G4double charge2ratio)
     604{
     605  massRatio     = massratio;
     606  chargeSqRatio = charge2ratio;
     607  reduceFactor  = 1.0/(chargeSqRatio*massRatio);
     608}
     609
     610//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     611
     612inline G4double G4VEnergyLossProcess::GetDEDXForScaledEnergy(G4double e)
     613{
     614  G4double x = ((*theDEDXTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
     615  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
     616  return x;
     617}
     618
     619//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     620
     621inline G4double G4VEnergyLossProcess::GetSubDEDXForScaledEnergy(G4double e)
     622{
     623  G4double x = ((*theDEDXSubTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
     624  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
     625  return x;
     626}
     627
     628//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     629
     630inline G4double G4VEnergyLossProcess::GetIonisationForScaledEnergy(G4double e)
     631{
     632  //G4double x = 0.0;
     633  //  if(theIonisationTable) {
     634  G4double x = ((*theIonisationTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
     635  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
     636  //}
     637  return x;
     638}
     639
     640//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     641
     642inline
     643G4double G4VEnergyLossProcess::GetSubIonisationForScaledEnergy(G4double e)
     644{
     645  //  G4double x = 0.0;
     646  //if(theIonisationSubTable) {
     647  G4double x = ((*theIonisationSubTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
     648  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
     649  //}
     650  return x;
     651}
     652
     653//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     654
     655inline G4double G4VEnergyLossProcess::GetScaledRangeForScaledEnergy(G4double e)
     656{
     657  G4double x = ((*theRangeTableForLoss)[currentMaterialIndex])->Value(e);
     658  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
     659  return x;
     660}
     661
     662//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     663
     664inline G4double
     665G4VEnergyLossProcess::GetLimitScaledRangeForScaledEnergy(G4double e)
     666{
     667  G4double x;
     668
     669  if (e < maxKinEnergyCSDA) {
     670    x = ((*theCSDARangeTable)[currentMaterialIndex])->Value(e);
     671    if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
     672  } else {
     673    x = theRangeAtMaxEnergy[currentMaterialIndex] +
     674         (e - maxKinEnergyCSDA)/theDEDXAtMaxEnergy[currentMaterialIndex];
     675  }
     676  return x;
     677}
     678
     679//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     680
     681inline G4double G4VEnergyLossProcess::ScaledKinEnergyForLoss(G4double r)
     682{
     683  G4PhysicsVector* v = (*theInverseRangeTable)[currentMaterialIndex];
     684  G4double rmin = v->Energy(0);
     685  G4double e = 0.0;
     686  if(r >= rmin) { e = v->Value(r); }
     687  else if(r > 0.0) {
     688    G4double x = r/rmin;
     689    e = minKinEnergy*x*x;
     690  }
     691  return e;
     692}
     693
     694//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     695
     696inline G4double G4VEnergyLossProcess::GetLambdaForScaledEnergy(G4double e)
     697{
     698  return chargeSqRatio*(((*theLambdaTable)[currentMaterialIndex])->Value(e));
     699}
     700
     701//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     702
     703inline G4double
     704G4VEnergyLossProcess::GetDEDX(G4double& kineticEnergy,
     705                              const G4MaterialCutsCouple* couple)
    800706{
    801707  DefineMaterial(couple);
     
    805711//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    806712
    807 inline G4double G4VEnergyLossProcess::GetDEDXForSubsec(G4double& kineticEnergy,
    808                                         const G4MaterialCutsCouple* couple)
     713inline G4double
     714G4VEnergyLossProcess::GetDEDXForSubsec(G4double& kineticEnergy,
     715                                                const G4MaterialCutsCouple* couple)
    809716{
    810717  DefineMaterial(couple);
     
    814721//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    815722
    816 inline G4double G4VEnergyLossProcess::GetRange(G4double& kineticEnergy,
    817                                          const G4MaterialCutsCouple* couple)
     723inline G4double
     724G4VEnergyLossProcess::GetRange(G4double& kineticEnergy,
     725                               const G4MaterialCutsCouple* couple)
    818726{
    819727  G4double x = fRange;
     
    831739//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    832740
    833 inline G4double G4VEnergyLossProcess::GetCSDARange(
    834        G4double& kineticEnergy, const G4MaterialCutsCouple* couple)
     741inline G4double
     742G4VEnergyLossProcess::GetCSDARange(G4double& kineticEnergy,
     743                                   const G4MaterialCutsCouple* couple)
    835744{
    836745  DefineMaterial(couple);
     
    844753//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    845754
    846 inline G4double G4VEnergyLossProcess::GetRangeForLoss(
    847                 G4double& kineticEnergy,
    848                 const G4MaterialCutsCouple* couple)
     755inline G4double
     756G4VEnergyLossProcess::GetRangeForLoss(G4double& kineticEnergy,
     757                                      const G4MaterialCutsCouple* couple)
    849758{
    850759  DefineMaterial(couple);
     
    859768//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    860769
    861 inline G4double G4VEnergyLossProcess::GetKineticEnergy(
    862                 G4double& range,
    863                 const G4MaterialCutsCouple* couple)
     770inline G4double
     771G4VEnergyLossProcess::GetKineticEnergy(G4double& range,
     772                                       const G4MaterialCutsCouple* couple)
    864773{
    865774  DefineMaterial(couple);
     
    871780//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    872781
    873 inline G4double G4VEnergyLossProcess::GetLambda(G4double& kineticEnergy,
    874                                           const G4MaterialCutsCouple* couple)
     782inline G4double
     783G4VEnergyLossProcess::GetLambda(G4double& kineticEnergy,
     784                                const G4MaterialCutsCouple* couple)
    875785{
    876786  DefineMaterial(couple);
    877787  G4double x = 0.0;
    878   if(theLambdaTable) x = GetLambdaForScaledEnergy(kineticEnergy*massRatio);
     788  if(theLambdaTable) { x = GetLambdaForScaledEnergy(kineticEnergy*massRatio); }
    879789  return x;
    880 }
    881 
    882 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    883 
    884 inline G4bool G4VEnergyLossProcess::TablesAreBuilt() const
    885 {
    886   return  tablesAreBuilt;
    887 }
    888 
    889 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    890 
    891 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTable() const
    892 {
    893   return theDEDXTable;
    894 }
    895 
    896 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    897 
    898 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTableForSubsec() const
    899 {
    900   return theDEDXSubTable;
    901 }
    902 
    903 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    904 
    905 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXunRestrictedTable() const
    906 {
    907   return theDEDXunRestrictedTable;
    908 }
    909 
    910 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    911 
    912 inline G4PhysicsTable* G4VEnergyLossProcess::IonisationTable() const
    913 {
    914   G4PhysicsTable* t = theDEDXTable;
    915   if(theIonisationTable) t = theIonisationTable;
    916   return t;
    917 }
    918 
    919 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    920 
    921 inline G4PhysicsTable* G4VEnergyLossProcess::IonisationTableForSubsec() const
    922 {
    923   G4PhysicsTable* t = theDEDXSubTable;
    924   if(theIonisationSubTable) t = theIonisationSubTable;
    925   return t;
    926 }
    927 
    928 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    929 
    930 inline G4PhysicsTable* G4VEnergyLossProcess::CSDARangeTable() const
    931 {
    932   return theCSDARangeTable;
    933 }
    934 
    935 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    936 
    937 inline G4PhysicsTable* G4VEnergyLossProcess::RangeTableForLoss() const
    938 {
    939   return theRangeTableForLoss;
    940 }
    941 
    942 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    943 
    944 inline G4PhysicsTable* G4VEnergyLossProcess::InverseRangeTable() const
    945 {
    946   return theInverseRangeTable;
    947 }
    948 
    949 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    950 
    951 inline G4PhysicsTable* G4VEnergyLossProcess::LambdaTable()
    952 {
    953   return theLambdaTable;
    954 }
    955 
    956 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    957 
    958 inline G4PhysicsTable* G4VEnergyLossProcess::SubLambdaTable()
    959 {
    960   return theSubLambdaTable;
    961 }
    962 
    963 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    964 
    965 inline G4double G4VEnergyLossProcess::SampleRange()
    966 {
    967   G4double e = amu_c2*preStepKinEnergy/particle->GetPDGMass();
    968   G4double s = fRange*std::pow(10.,vstrag->Value(e));
    969   G4double x = fRange + G4RandGauss::shoot(0.0,s);
    970   if(x > 0.0) fRange = x;
    971   return fRange;
    972 }
    973 
    974 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    975 
    976 inline void G4VEnergyLossProcess::SetDynamicMassCharge(G4double massratio,
    977                                                        G4double charge2ratio)
    978 {
    979   massRatio     = massratio;
    980   chargeSqRatio = charge2ratio;
    981   reduceFactor  = 1.0/(chargeSqRatio*massRatio);
    982 }
    983 
    984 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    985 
    986 inline void G4VEnergyLossProcess::DefineMaterial(
    987             const G4MaterialCutsCouple* couple)
    988 {
    989   if(couple != currentCouple) {
    990     currentCouple   = couple;
    991     currentMaterial = couple->GetMaterial();
    992     currentMaterialIndex = couple->GetIndex();
    993     mfpKinEnergy = DBL_MAX;
    994   }
    995 }
    996 
    997 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    998 
    999 inline G4double G4VEnergyLossProcess::GetDEDXForScaledEnergy(G4double e)
    1000 {
    1001   G4double x = ((*theDEDXTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
    1002   if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1003   return x;
    1004 }
    1005 
    1006 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1007 
    1008 inline G4double G4VEnergyLossProcess::GetSubDEDXForScaledEnergy(G4double e)
    1009 {
    1010   G4double x = ((*theDEDXSubTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
    1011   if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1012   return x;
    1013 }
    1014 
    1015 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1016 
    1017 inline G4double G4VEnergyLossProcess::GetIonisationForScaledEnergy(G4double e)
    1018 {
    1019   //G4double x = 0.0;
    1020   //  if(theIonisationTable) {
    1021   G4double x = ((*theIonisationTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
    1022   if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1023   //}
    1024   return x;
    1025 }
    1026 
    1027 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1028 
    1029 inline
    1030 G4double G4VEnergyLossProcess::GetSubIonisationForScaledEnergy(G4double e)
    1031 {
    1032   //  G4double x = 0.0;
    1033   //if(theIonisationSubTable) {
    1034   G4double x = ((*theIonisationSubTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
    1035   if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1036   //}
    1037   return x;
    1038 }
    1039 
    1040 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1041 
    1042 inline G4double G4VEnergyLossProcess::GetScaledRangeForScaledEnergy(G4double e)
    1043 {
    1044   G4double x = ((*theRangeTableForLoss)[currentMaterialIndex])->Value(e);
    1045   if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1046   return x;
    1047 }
    1048 
    1049 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1050 
    1051 inline G4double G4VEnergyLossProcess::GetLimitScaledRangeForScaledEnergy(
    1052                 G4double e)
    1053 {
    1054   G4double x;
    1055 
    1056   if (e < maxKinEnergyCSDA) {
    1057     x = ((*theCSDARangeTable)[currentMaterialIndex])->Value(e);
    1058     if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1059   } else {
    1060     x = theRangeAtMaxEnergy[currentMaterialIndex] +
    1061          (e - maxKinEnergyCSDA)/theDEDXAtMaxEnergy[currentMaterialIndex];
    1062   }
    1063   return x;
    1064 }
    1065 
    1066 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1067 
    1068 inline G4double G4VEnergyLossProcess::ScaledKinEnergyForLoss(G4double r)
    1069 {
    1070   G4PhysicsVector* v = (*theInverseRangeTable)[currentMaterialIndex];
    1071   G4double rmin = v->Energy(0);
    1072   G4double e = 0.0;
    1073   if(r >= rmin) { e = v->Value(r); }
    1074   else if(r > 0.0) {
    1075     G4double x = r/rmin;
    1076     e = minKinEnergy*x*x;
    1077   }
    1078   return e;
    1079 }
    1080 
    1081 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1082 
    1083 inline G4double G4VEnergyLossProcess::GetLambdaForScaledEnergy(G4double e)
    1084 {
    1085   return chargeSqRatio*(((*theLambdaTable)[currentMaterialIndex])->Value(e));
    1086790}
    1087791
     
    1111815//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1112816
     817inline G4double G4VEnergyLossProcess::SampleRange()
     818{
     819  G4double e = amu_c2*preStepKinEnergy/particle->GetPDGMass();
     820  G4double s = fRange*std::pow(10.,vstrag->Value(e));
     821  G4double x = fRange + G4RandGauss::shoot(0.0,s);
     822  if(x > 0.0) { fRange = x; }
     823  return fRange;
     824}
     825
     826// ======== Get/Set inline methods used at initialisation ================
     827
     828inline void G4VEnergyLossProcess::SetFluctModel(G4VEmFluctuationModel* p)
     829{
     830  fluctModel = p;
     831}
     832
     833//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     834
     835inline G4VEmFluctuationModel* G4VEnergyLossProcess::FluctModel()
     836{
     837  return fluctModel;
     838}
     839
     840//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     841
     842inline void G4VEnergyLossProcess::SetParticle(const G4ParticleDefinition* p)
     843{
     844  particle = p;
     845}
     846
     847//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     848
     849inline void G4VEnergyLossProcess::SetSecondaryParticle(const G4ParticleDefinition* p)
     850{
     851  secondaryParticle = p;
     852}
     853
     854//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     855
     856inline void G4VEnergyLossProcess::SetBaseParticle(const G4ParticleDefinition* p)
     857{
     858  baseParticle = p;
     859}
     860
     861//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     862
     863inline const G4ParticleDefinition* G4VEnergyLossProcess::Particle() const
     864{
     865  return particle;
     866}
     867
     868//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     869
     870inline const G4ParticleDefinition* G4VEnergyLossProcess::BaseParticle() const
     871{
     872  return baseParticle;
     873}
     874
     875//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     876
     877inline const G4ParticleDefinition* G4VEnergyLossProcess::SecondaryParticle() const
     878{
     879  return secondaryParticle;
     880}
     881
     882//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     883
     884inline void G4VEnergyLossProcess::SetLossFluctuations(G4bool val)
     885{
     886  lossFluctuationFlag = val;
     887}
     888
     889//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     890
     891inline void G4VEnergyLossProcess::SetRandomStep(G4bool val)
     892{
     893  rndmStepFlag = val;
     894}
     895
     896//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     897
     898inline void G4VEnergyLossProcess::SetIntegral(G4bool val)
     899{
     900  integral = val;
     901}
     902
     903//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     904 
     905inline G4bool G4VEnergyLossProcess::IsIntegral() const
     906{
     907  return integral;
     908}
     909
     910//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     911
     912inline void G4VEnergyLossProcess::SetIonisation(G4bool val)
     913{
     914  isIonisation = val;
     915  if(val) { aGPILSelection = CandidateForSelection; }
     916  else    { aGPILSelection = NotCandidateForSelection; }
     917}
     918
     919//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     920
     921inline G4bool G4VEnergyLossProcess::IsIonisationProcess() const
     922{
     923  return isIonisation;
     924}
     925
     926//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     927
     928inline void G4VEnergyLossProcess::SetLinearLossLimit(G4double val)
     929{
     930  linLossLimit = val;
     931}
     932
     933//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     934
     935inline void G4VEnergyLossProcess::SetMinSubRange(G4double val)
     936{
     937  minSubRange = val;
     938}
     939
     940//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     941
     942inline void G4VEnergyLossProcess::SetLambdaFactor(G4double val)
     943{
     944  if(val > 0.0 && val <= 1.0) { lambdaFactor = val; }
     945}
     946
     947//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     948
     949void G4VEnergyLossProcess::SetStepFunction(G4double v1, G4double v2)
     950{
     951  dRoverRange = v1;
     952  finalRange = v2;
     953  if (dRoverRange > 0.999) { dRoverRange = 1.0; }
     954  currentCouple = 0;
     955  mfpKinEnergy  = DBL_MAX;
     956}
     957
     958//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     959
     960inline void G4VEnergyLossProcess::SetLowestEnergyLimit(G4double val)
     961{
     962  lowestKinEnergy = val;
     963}
     964
     965//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     966
     967inline G4int G4VEnergyLossProcess::NumberOfSubCutoffRegions() const
     968{
     969  return nSCoffRegions;
     970}
     971
     972//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     973
     974inline G4int G4VEnergyLossProcess::NumberOfDERegions() const
     975{
     976  return nDERegions;
     977}
     978
     979//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     980
     981inline void G4VEnergyLossProcess::SetDEDXBinning(G4int nbins)
     982{
     983  nBins = nbins;
     984}
     985
     986//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     987
     988inline void G4VEnergyLossProcess::SetLambdaBinning(G4int nbins)
     989{
     990  nBins = nbins;
     991}
     992
     993//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     994
     995inline void G4VEnergyLossProcess::SetDEDXBinningForCSDARange(G4int nbins)
     996{
     997  nBinsCSDA = nbins;
     998}
     999
     1000//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1001
     1002inline void G4VEnergyLossProcess::SetMinKinEnergy(G4double e)
     1003{
     1004  minKinEnergy = e;
     1005}
     1006
     1007//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1008
     1009inline G4double G4VEnergyLossProcess::MinKinEnergy() const
     1010{
     1011  return minKinEnergy;
     1012}
     1013
     1014//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1015
     1016inline void G4VEnergyLossProcess::SetMaxKinEnergy(G4double e)
     1017{
     1018  maxKinEnergy = e;
     1019  if(e < maxKinEnergyCSDA) { maxKinEnergyCSDA = e; }
     1020}
     1021
     1022//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1023
     1024inline G4double G4VEnergyLossProcess::MaxKinEnergy() const
     1025{
     1026  return maxKinEnergy;
     1027}
     1028
     1029//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1030
     1031inline void G4VEnergyLossProcess::SetMaxKinEnergyForCSDARange(G4double e)
     1032{
     1033  maxKinEnergyCSDA = e;
     1034}
     1035
     1036
     1037//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1038
     1039inline G4bool G4VEnergyLossProcess::TablesAreBuilt() const
     1040{
     1041  return  tablesAreBuilt;
     1042}
     1043
     1044//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1045
     1046inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTable() const
     1047{
     1048  return theDEDXTable;
     1049}
     1050
     1051//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1052
     1053inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTableForSubsec() const
     1054{
     1055  return theDEDXSubTable;
     1056}
     1057
     1058//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1059
     1060inline G4PhysicsTable* G4VEnergyLossProcess::DEDXunRestrictedTable() const
     1061{
     1062  return theDEDXunRestrictedTable;
     1063}
     1064
     1065//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1066
     1067inline G4PhysicsTable* G4VEnergyLossProcess::IonisationTable() const
     1068{
     1069  G4PhysicsTable* t = theDEDXTable;
     1070  if(theIonisationTable) { t = theIonisationTable; }
     1071  return t;
     1072}
     1073
     1074//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1075
     1076inline G4PhysicsTable* G4VEnergyLossProcess::IonisationTableForSubsec() const
     1077{
     1078  G4PhysicsTable* t = theDEDXSubTable;
     1079  if(theIonisationSubTable) { t = theIonisationSubTable; }
     1080  return t;
     1081}
     1082
     1083//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1084
     1085inline G4PhysicsTable* G4VEnergyLossProcess::CSDARangeTable() const
     1086{
     1087  return theCSDARangeTable;
     1088}
     1089
     1090//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1091
     1092inline G4PhysicsTable* G4VEnergyLossProcess::RangeTableForLoss() const
     1093{
     1094  return theRangeTableForLoss;
     1095}
     1096
     1097//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1098
     1099inline G4PhysicsTable* G4VEnergyLossProcess::InverseRangeTable() const
     1100{
     1101  return theInverseRangeTable;
     1102}
     1103
     1104//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1105
     1106inline G4PhysicsTable* G4VEnergyLossProcess::LambdaTable()
     1107{
     1108  return theLambdaTable;
     1109}
     1110
     1111//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1112
     1113inline G4PhysicsTable* G4VEnergyLossProcess::SubLambdaTable()
     1114{
     1115  return theSubLambdaTable;
     1116}
     1117
     1118//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1119
    11131120#endif
Note: See TracChangeset for help on using the changeset viewer.