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
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 #ifndef G4Decay_h
00053 #define G4Decay_h 1
00054
00055 #include "G4ios.hh"
00056 #include "globals.hh"
00057 #include "G4VRestDiscreteProcess.hh"
00058 #include "G4ParticleChangeForDecay.hh"
00059 #include "G4DecayProcessType.hh"
00060
00061 class G4VExtDecayer;
00062
00063 class G4Decay : public G4VRestDiscreteProcess
00064 {
00065
00066
00067
00068 public:
00069
00070 G4Decay(const G4String& processName ="Decay");
00071
00072
00073 virtual ~G4Decay();
00074
00075 private:
00076
00077 G4Decay(const G4Decay &right);
00078
00079
00080 G4Decay & operator=(const G4Decay &right);
00081
00082 public:
00083
00084
00085
00086
00087
00088 virtual G4VParticleChange *PostStepDoIt(
00089 const G4Track& aTrack,
00090 const G4Step& aStep
00091 );
00092
00093 virtual G4VParticleChange* AtRestDoIt(
00094 const G4Track& aTrack,
00095 const G4Step& aStep
00096 );
00097
00098 virtual void BuildPhysicsTable(const G4ParticleDefinition&);
00099
00100
00101
00102
00103
00104
00105 virtual G4bool IsApplicable(const G4ParticleDefinition&);
00106
00107
00108
00109 protected:
00110 virtual G4VParticleChange* DecayIt(
00111 const G4Track& aTrack,
00112 const G4Step& aStep
00113 );
00114
00115
00116
00117
00118
00119 virtual void DaughterPolarization(const G4Track& aTrack,
00120 G4DecayProducts* products);
00121
00122 public:
00123 virtual G4double AtRestGetPhysicalInteractionLength(
00124 const G4Track& track,
00125 G4ForceCondition* condition
00126 );
00127
00128 virtual G4double PostStepGetPhysicalInteractionLength(
00129 const G4Track& track,
00130 G4double previousStepSize,
00131 G4ForceCondition* condition
00132 );
00133
00134 protected:
00135
00136
00137 virtual G4double GetMeanFreePath(const G4Track& aTrack,
00138 G4double previousStepSize,
00139 G4ForceCondition* condition
00140 );
00141
00142 virtual G4double GetMeanLifeTime(const G4Track& aTrack,
00143 G4ForceCondition* condition
00144 );
00145
00146 public:
00147 virtual void StartTracking(G4Track*);
00148 virtual void EndTracking();
00149
00150
00151 public:
00152 void SetExtDecayer(G4VExtDecayer*);
00153 const G4VExtDecayer* GetExtDecayer() const;
00154
00155
00156 G4double GetRemainderLifeTime() const;
00157
00158
00159 public:
00160 void SetVerboseLevel(G4int value);
00161 G4int GetVerboseLevel() const;
00162
00163 protected:
00164 G4int verboseLevel;
00165
00166
00167
00168
00169
00170 protected:
00171
00172 const G4double HighestValue;
00173
00174
00175 G4double fRemainderLifeTime;
00176
00177
00178 G4ParticleChangeForDecay fParticleChangeForDecay;
00179
00180
00181 G4VExtDecayer* pExtDecayer;
00182 };
00183
00184 inline
00185 void G4Decay::SetVerboseLevel(G4int value){ verboseLevel = value; }
00186
00187 inline
00188 G4int G4Decay::GetVerboseLevel() const { return verboseLevel; }
00189
00190 inline
00191 G4VParticleChange* G4Decay::AtRestDoIt(
00192 const G4Track& aTrack,
00193 const G4Step& aStep
00194 )
00195 {
00196 return DecayIt(aTrack, aStep);
00197 }
00198
00199 inline
00200 G4VParticleChange* G4Decay::PostStepDoIt(
00201 const G4Track& aTrack,
00202 const G4Step& aStep
00203 )
00204 {
00205 return DecayIt(aTrack, aStep);
00206 }
00207
00208 inline
00209 const G4VExtDecayer* G4Decay::GetExtDecayer() const
00210 {
00211 return pExtDecayer;
00212 }
00213
00214 inline
00215 G4double G4Decay::GetRemainderLifeTime() const
00216 {
00217 return fRemainderLifeTime;
00218 }
00219
00220 #endif
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230