- Timestamp:
- Jun 18, 2010, 11:42:07 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh
r1196 r1315 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4VEnergyLossProcess.hh,v 1. 89 2009/07/03 14:39:17vnivanch Exp $26 // $Id: G4VEnergyLossProcess.hh,v 1.92 2010/04/28 14:43:13 vnivanch Exp $ 27 27 // GEANT4 tag $Name: 28 28 // … … 196 196 // Sampling of secondaries in vicinity of geometrical boundary 197 197 void SampleSubCutSecondaries(std::vector<G4Track*>&, const G4Step&, 198 G4VEmModel* model, G4int matIdx, 199 G4double& extraEdep); 198 G4VEmModel* model, G4int matIdx); 200 199 201 200 // PostStep sampling of secondaries … … 418 417 // Run time method for simulation of ionisation 419 418 //------------------------------------------------------------------------ 419 420 // access atom on which interaction happens 421 const G4Element* GetCurrentElement() const; 420 422 421 423 // sample range at the end of a step … … 553 555 }; 554 556 555 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 556 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 557 // ======== Run time inline methods ================ 557 558 558 559 inline size_t G4VEnergyLossProcess::CurrentMaterialCutsCoupleIndex() const … … 586 587 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 587 588 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) 589 inline void 590 G4VEnergyLossProcess::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 602 inline 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 612 inline 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 621 inline 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 630 inline 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 642 inline 643 G4double 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 655 inline 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 664 inline G4double 665 G4VEnergyLossProcess::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 681 inline 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 696 inline G4double G4VEnergyLossProcess::GetLambdaForScaledEnergy(G4double e) 697 { 698 return chargeSqRatio*(((*theLambdaTable)[currentMaterialIndex])->Value(e)); 699 } 700 701 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 702 703 inline G4double 704 G4VEnergyLossProcess::GetDEDX(G4double& kineticEnergy, 705 const G4MaterialCutsCouple* couple) 800 706 { 801 707 DefineMaterial(couple); … … 805 711 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 806 712 807 inline G4double G4VEnergyLossProcess::GetDEDXForSubsec(G4double& kineticEnergy, 808 const G4MaterialCutsCouple* couple) 713 inline G4double 714 G4VEnergyLossProcess::GetDEDXForSubsec(G4double& kineticEnergy, 715 const G4MaterialCutsCouple* couple) 809 716 { 810 717 DefineMaterial(couple); … … 814 721 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 815 722 816 inline G4double G4VEnergyLossProcess::GetRange(G4double& kineticEnergy, 817 const G4MaterialCutsCouple* couple) 723 inline G4double 724 G4VEnergyLossProcess::GetRange(G4double& kineticEnergy, 725 const G4MaterialCutsCouple* couple) 818 726 { 819 727 G4double x = fRange; … … 831 739 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 832 740 833 inline G4double G4VEnergyLossProcess::GetCSDARange( 834 G4double& kineticEnergy, const G4MaterialCutsCouple* couple) 741 inline G4double 742 G4VEnergyLossProcess::GetCSDARange(G4double& kineticEnergy, 743 const G4MaterialCutsCouple* couple) 835 744 { 836 745 DefineMaterial(couple); … … 844 753 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 845 754 846 inline G4double G4VEnergyLossProcess::GetRangeForLoss(847 848 const G4MaterialCutsCouple* couple)755 inline G4double 756 G4VEnergyLossProcess::GetRangeForLoss(G4double& kineticEnergy, 757 const G4MaterialCutsCouple* couple) 849 758 { 850 759 DefineMaterial(couple); … … 859 768 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 860 769 861 inline G4double G4VEnergyLossProcess::GetKineticEnergy(862 863 const G4MaterialCutsCouple* couple)770 inline G4double 771 G4VEnergyLossProcess::GetKineticEnergy(G4double& range, 772 const G4MaterialCutsCouple* couple) 864 773 { 865 774 DefineMaterial(couple); … … 871 780 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 872 781 873 inline G4double G4VEnergyLossProcess::GetLambda(G4double& kineticEnergy, 874 const G4MaterialCutsCouple* couple) 782 inline G4double 783 G4VEnergyLossProcess::GetLambda(G4double& kineticEnergy, 784 const G4MaterialCutsCouple* couple) 875 785 { 876 786 DefineMaterial(couple); 877 787 G4double x = 0.0; 878 if(theLambdaTable) x = GetLambdaForScaledEnergy(kineticEnergy*massRatio);788 if(theLambdaTable) { x = GetLambdaForScaledEnergy(kineticEnergy*massRatio); } 879 789 return x; 880 }881 882 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....883 884 inline G4bool G4VEnergyLossProcess::TablesAreBuilt() const885 {886 return tablesAreBuilt;887 }888 889 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....890 891 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTable() const892 {893 return theDEDXTable;894 }895 896 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....897 898 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTableForSubsec() const899 {900 return theDEDXSubTable;901 }902 903 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....904 905 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXunRestrictedTable() const906 {907 return theDEDXunRestrictedTable;908 }909 910 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....911 912 inline G4PhysicsTable* G4VEnergyLossProcess::IonisationTable() const913 {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() const922 {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() const931 {932 return theCSDARangeTable;933 }934 935 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....936 937 inline G4PhysicsTable* G4VEnergyLossProcess::RangeTableForLoss() const938 {939 return theRangeTableForLoss;940 }941 942 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....943 944 inline G4PhysicsTable* G4VEnergyLossProcess::InverseRangeTable() const945 {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 inline1030 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));1086 790 } 1087 791 … … 1111 815 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1112 816 817 inline 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 828 inline void G4VEnergyLossProcess::SetFluctModel(G4VEmFluctuationModel* p) 829 { 830 fluctModel = p; 831 } 832 833 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 834 835 inline G4VEmFluctuationModel* G4VEnergyLossProcess::FluctModel() 836 { 837 return fluctModel; 838 } 839 840 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 841 842 inline void G4VEnergyLossProcess::SetParticle(const G4ParticleDefinition* p) 843 { 844 particle = p; 845 } 846 847 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 848 849 inline void G4VEnergyLossProcess::SetSecondaryParticle(const G4ParticleDefinition* p) 850 { 851 secondaryParticle = p; 852 } 853 854 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 855 856 inline void G4VEnergyLossProcess::SetBaseParticle(const G4ParticleDefinition* p) 857 { 858 baseParticle = p; 859 } 860 861 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 862 863 inline const G4ParticleDefinition* G4VEnergyLossProcess::Particle() const 864 { 865 return particle; 866 } 867 868 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 869 870 inline const G4ParticleDefinition* G4VEnergyLossProcess::BaseParticle() const 871 { 872 return baseParticle; 873 } 874 875 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 876 877 inline const G4ParticleDefinition* G4VEnergyLossProcess::SecondaryParticle() const 878 { 879 return secondaryParticle; 880 } 881 882 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 883 884 inline void G4VEnergyLossProcess::SetLossFluctuations(G4bool val) 885 { 886 lossFluctuationFlag = val; 887 } 888 889 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 890 891 inline void G4VEnergyLossProcess::SetRandomStep(G4bool val) 892 { 893 rndmStepFlag = val; 894 } 895 896 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 897 898 inline void G4VEnergyLossProcess::SetIntegral(G4bool val) 899 { 900 integral = val; 901 } 902 903 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 904 905 inline G4bool G4VEnergyLossProcess::IsIntegral() const 906 { 907 return integral; 908 } 909 910 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 911 912 inline 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 921 inline G4bool G4VEnergyLossProcess::IsIonisationProcess() const 922 { 923 return isIonisation; 924 } 925 926 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 927 928 inline void G4VEnergyLossProcess::SetLinearLossLimit(G4double val) 929 { 930 linLossLimit = val; 931 } 932 933 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 934 935 inline void G4VEnergyLossProcess::SetMinSubRange(G4double val) 936 { 937 minSubRange = val; 938 } 939 940 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 941 942 inline void G4VEnergyLossProcess::SetLambdaFactor(G4double val) 943 { 944 if(val > 0.0 && val <= 1.0) { lambdaFactor = val; } 945 } 946 947 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 948 949 void 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 960 inline void G4VEnergyLossProcess::SetLowestEnergyLimit(G4double val) 961 { 962 lowestKinEnergy = val; 963 } 964 965 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 966 967 inline G4int G4VEnergyLossProcess::NumberOfSubCutoffRegions() const 968 { 969 return nSCoffRegions; 970 } 971 972 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 973 974 inline G4int G4VEnergyLossProcess::NumberOfDERegions() const 975 { 976 return nDERegions; 977 } 978 979 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 980 981 inline void G4VEnergyLossProcess::SetDEDXBinning(G4int nbins) 982 { 983 nBins = nbins; 984 } 985 986 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 987 988 inline void G4VEnergyLossProcess::SetLambdaBinning(G4int nbins) 989 { 990 nBins = nbins; 991 } 992 993 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 994 995 inline void G4VEnergyLossProcess::SetDEDXBinningForCSDARange(G4int nbins) 996 { 997 nBinsCSDA = nbins; 998 } 999 1000 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1001 1002 inline void G4VEnergyLossProcess::SetMinKinEnergy(G4double e) 1003 { 1004 minKinEnergy = e; 1005 } 1006 1007 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1008 1009 inline G4double G4VEnergyLossProcess::MinKinEnergy() const 1010 { 1011 return minKinEnergy; 1012 } 1013 1014 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1015 1016 inline void G4VEnergyLossProcess::SetMaxKinEnergy(G4double e) 1017 { 1018 maxKinEnergy = e; 1019 if(e < maxKinEnergyCSDA) { maxKinEnergyCSDA = e; } 1020 } 1021 1022 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1023 1024 inline G4double G4VEnergyLossProcess::MaxKinEnergy() const 1025 { 1026 return maxKinEnergy; 1027 } 1028 1029 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1030 1031 inline void G4VEnergyLossProcess::SetMaxKinEnergyForCSDARange(G4double e) 1032 { 1033 maxKinEnergyCSDA = e; 1034 } 1035 1036 1037 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1038 1039 inline G4bool G4VEnergyLossProcess::TablesAreBuilt() const 1040 { 1041 return tablesAreBuilt; 1042 } 1043 1044 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1045 1046 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTable() const 1047 { 1048 return theDEDXTable; 1049 } 1050 1051 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1052 1053 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTableForSubsec() const 1054 { 1055 return theDEDXSubTable; 1056 } 1057 1058 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1059 1060 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXunRestrictedTable() const 1061 { 1062 return theDEDXunRestrictedTable; 1063 } 1064 1065 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1066 1067 inline 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 1076 inline 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 1085 inline G4PhysicsTable* G4VEnergyLossProcess::CSDARangeTable() const 1086 { 1087 return theCSDARangeTable; 1088 } 1089 1090 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1091 1092 inline G4PhysicsTable* G4VEnergyLossProcess::RangeTableForLoss() const 1093 { 1094 return theRangeTableForLoss; 1095 } 1096 1097 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1098 1099 inline G4PhysicsTable* G4VEnergyLossProcess::InverseRangeTable() const 1100 { 1101 return theInverseRangeTable; 1102 } 1103 1104 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1105 1106 inline G4PhysicsTable* G4VEnergyLossProcess::LambdaTable() 1107 { 1108 return theLambdaTable; 1109 } 1110 1111 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1112 1113 inline G4PhysicsTable* G4VEnergyLossProcess::SubLambdaTable() 1114 { 1115 return theSubLambdaTable; 1116 } 1117 1118 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1119 1113 1120 #endif
Note: See TracChangeset
for help on using the changeset viewer.