00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "G4VRestContinuousProcess.hh"
00040 #include "G4SystemOfUnits.hh"
00041
00042 #include "G4Step.hh"
00043 #include "G4Track.hh"
00044 #include "G4MaterialTable.hh"
00045 #include "G4VParticleChange.hh"
00046
00047 G4VRestContinuousProcess::G4VRestContinuousProcess()
00048 :G4VProcess("No Name Discrete Process") ,
00049 valueGPILSelection(CandidateForSelection)
00050 {
00051 G4Exception("G4VRestContinuousProcess::G4VRestContinuousProcess()","ProcMan102",
00052 JustWarning,"Default constructor is called");
00053 }
00054
00055 G4VRestContinuousProcess::G4VRestContinuousProcess(const G4String& aName , G4ProcessType aType)
00056 : G4VProcess(aName, aType),
00057 valueGPILSelection(CandidateForSelection)
00058 {
00059 enablePostStepDoIt = false;
00060 }
00061
00062 G4VRestContinuousProcess::~G4VRestContinuousProcess()
00063 {
00064 }
00065
00066 G4VRestContinuousProcess::G4VRestContinuousProcess(G4VRestContinuousProcess& right)
00067 : G4VProcess(right),
00068 valueGPILSelection(right.valueGPILSelection)
00069 {
00070 }
00071
00072 G4double G4VRestContinuousProcess::AlongStepGetPhysicalInteractionLength(
00073 const G4Track& track,
00074 G4double previousStepSize,
00075 G4double currentMinimumStep,
00076 G4double& currentSafety,
00077 G4GPILSelection* selection
00078 )
00079 {
00080
00081 valueGPILSelection = CandidateForSelection;
00082
00083
00084 G4double steplength = GetContinuousStepLimit(track,previousStepSize,currentMinimumStep, currentSafety);
00085
00086
00087 *selection = valueGPILSelection;
00088 #ifdef G4VERBOSE
00089 if (verboseLevel>1){
00090 G4cout << "G4VRestContinuousProcess::AlongStepGetPhysicalInteractionLength ";
00091 G4cout << "[ " << GetProcessName() << "]" <<G4endl;
00092 track.GetDynamicParticle()->DumpInfo();
00093 G4cout << " in Material " << track.GetMaterial()->GetName() <<G4endl;
00094 G4cout << "IntractionLength= " << steplength/cm <<"[cm] " <<G4endl;
00095 }
00096 #endif
00097 return steplength ;
00098 }
00099
00100 G4double G4VRestContinuousProcess::AtRestGetPhysicalInteractionLength(
00101 const G4Track& track,
00102 G4ForceCondition* condition
00103 )
00104 {
00105
00106 ResetNumberOfInteractionLengthLeft();
00107
00108
00109 *condition = NotForced;
00110
00111
00112 currentInteractionLength = GetMeanLifeTime(track, condition);
00113
00114 #ifdef G4VERBOSE
00115 if ((currentInteractionLength <0.0) || (verboseLevel>2)){
00116 G4cout << "G4VRestContinuousProcess::AtRestGetPhysicalInteractionLength ";
00117 G4cout << "[ " << GetProcessName() << "]" <<G4endl;
00118 track.GetDynamicParticle()->DumpInfo();
00119 G4cout << " in Material " << track.GetMaterial()->GetName() <<G4endl;
00120 G4cout << "MeanLifeTime = " << currentInteractionLength/ns << "[ns]" <<G4endl;
00121 }
00122 #endif
00123
00124 return theNumberOfInteractionLengthLeft * currentInteractionLength;
00125 }
00126
00127
00128 G4VParticleChange* G4VRestContinuousProcess::AtRestDoIt(
00129 const G4Track&,
00130 const G4Step&
00131 )
00132 {
00133
00134 ClearNumberOfInteractionLengthLeft();
00135
00136 return pParticleChange;
00137 }
00138
00139 G4VParticleChange* G4VRestContinuousProcess::AlongStepDoIt(
00140 const G4Track& ,
00141 const G4Step&
00142 )
00143 {
00144 return pParticleChange;
00145 }