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 #ifndef G4CompetitiveFission_h
00033 #define G4CompetitiveFission_h 1
00034
00035 #include "G4VEvaporationChannel.hh"
00036 #include "G4Fragment.hh"
00037 #include "G4VFissionBarrier.hh"
00038 #include "G4FissionBarrier.hh"
00039 #include "G4VEmissionProbability.hh"
00040 #include "G4FissionProbability.hh"
00041 #include "G4VLevelDensityParameter.hh"
00042 #include "G4FissionLevelDensityParameter.hh"
00043 #include "G4FissionParameters.hh"
00044 #include "G4ParticleTable.hh"
00045 #include "G4IonTable.hh"
00046 #include "Randomize.hh"
00047
00048
00049
00050 class G4CompetitiveFission : public G4VEvaporationChannel
00051 {
00052 public:
00053
00054 G4CompetitiveFission();
00055 virtual ~G4CompetitiveFission();
00056
00057 private:
00058 G4CompetitiveFission(const G4CompetitiveFission &right);
00059 const G4CompetitiveFission & operator=(const G4CompetitiveFission &right);
00060 G4bool operator==(const G4CompetitiveFission &right) const;
00061 G4bool operator!=(const G4CompetitiveFission &right) const;
00062
00063 public:
00064
00065 virtual G4FragmentVector * BreakUp(const G4Fragment &theNucleus);
00066
00067 virtual G4double GetEmissionProbability(G4Fragment* theNucleus);
00068
00069 inline void SetFissionBarrier(G4VFissionBarrier * aBarrier)
00070 {
00071 if (MyOwnFissionBarrier) delete theFissionBarrierPtr;
00072 theFissionBarrierPtr = aBarrier;
00073 MyOwnFissionBarrier = false;
00074 }
00075
00076 inline void SetEmissionStrategy(G4VEmissionProbability * aFissionProb)
00077 {
00078 if (MyOwnFissionProbability) delete theFissionProbabilityPtr;
00079 theFissionProbabilityPtr = aFissionProb;
00080 MyOwnFissionProbability = false;
00081 }
00082
00083
00084 inline void SetLevelDensityParameter(G4VLevelDensityParameter * aLevelDensity)
00085 {
00086 if (MyOwnLevelDensity) delete theLevelDensityPtr;
00087 theLevelDensityPtr = aLevelDensity;
00088 MyOwnLevelDensity = false;
00089 }
00090
00091
00092 inline G4double GetFissionBarrier(void) const { return FissionBarrier; }
00093
00094 inline G4double GetLevelDensityParameter(void) const { return LevelDensityParameter; }
00095
00096 inline G4double GetMaximalKineticEnergy(void) const { return MaximalKineticEnergy; }
00097 private:
00098
00099
00100 G4double MaximalKineticEnergy;
00101
00102
00103
00104 G4VFissionBarrier * theFissionBarrierPtr;
00105 G4double FissionBarrier;
00106 G4bool MyOwnFissionBarrier;
00107
00108
00109 G4VEmissionProbability * theFissionProbabilityPtr;
00110 G4double FissionProbability;
00111 G4bool MyOwnFissionProbability;
00112
00113
00114
00115 G4bool MyOwnLevelDensity;
00116 G4VLevelDensityParameter * theLevelDensityPtr;
00117 G4double LevelDensityParameter;
00118
00119
00120
00121
00122 G4int FissionAtomicNumber(G4int A, const G4FissionParameters & theParam);
00123 G4double MassDistribution(G4double x, G4double A, const G4FissionParameters & theParam);
00124
00125
00126
00127 G4int FissionCharge(G4double A, G4double Z, G4double Af);
00128
00129
00130
00131 G4double FissionKineticEnergy(G4int A, G4int Z,
00132 G4double Af1, G4double Zf1,
00133 G4double Af2, G4double Zf2,
00134 G4double U, G4double Tmax,
00135 const G4FissionParameters & theParam);
00136
00137 G4double Ratio(G4double A, G4double A11, G4double B1, G4double A00);
00138 G4double SymmetricRatio(G4int A, G4double A11);
00139 G4double AsymmetricRatio(G4int A, G4double A11);
00140
00141 G4ThreeVector IsotropicVector(G4double Magnitude = 1.0);
00142
00143 #ifdef debug
00144 void CheckConservation(const G4Fragment & theInitialState,
00145 G4FragmentVector * Result) const;
00146 #endif
00147
00148 };
00149
00150 #endif
00151
00152