- Timestamp:
- Dec 22, 2010, 3:52:27 PM (14 years ago)
- Location:
- trunk/source/processes/hadronic/models/de_excitation/gem_evaporation
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/de_excitation/gem_evaporation/include/G4AlphaGEMChannel.hh
r1340 r1347 25 25 // 26 26 // 27 // $Id: G4AlphaGEMChannel.hh,v 1. 4 2009/09/15 12:54:16vnivanch Exp $28 // GEANT4 tag $Name: geant4-09-0 3-ref-09$27 // $Id: G4AlphaGEMChannel.hh,v 1.5 2010/10/29 17:35:04 vnivanch Exp $ 28 // GEANT4 tag $Name: geant4-09-04-ref-00 $ 29 29 // 30 30 // Hadronic Process: Nuclear De-excitations … … 57 57 private: 58 58 const G4AlphaGEMChannel & operator=(const G4AlphaGEMChannel & right); 59 60 G4AlphaGEMChannel(const G4AlphaGEMChannel & right); 61 62 public: 59 G4AlphaGEMChannel(const G4AlphaGEMChannel & right); 63 60 G4bool operator==(const G4AlphaGEMChannel & right) const; 64 61 G4bool operator!=(const G4AlphaGEMChannel & right) const; 65 62 66 private:67 63 // JMQ 190709 68 64 // G4AlphaCoulombBarrier theCoulombBarrier; -
trunk/source/processes/hadronic/models/de_excitation/gem_evaporation/include/G4GEMChannel.hh
r1340 r1347 25 25 // 26 26 // 27 // $Id: G4GEMChannel.hh,v 1. 5 2009/09/15 12:54:16vnivanch Exp $28 // GEANT4 tag $Name: geant4-09-0 3-ref-09$27 // $Id: G4GEMChannel.hh,v 1.7 2010/11/18 16:21:17 vnivanch Exp $ 28 // GEANT4 tag $Name: geant4-09-04-ref-00 $ 29 29 // 30 30 // Hadronic Process: Nuclear De-excitations … … 48 48 //#define debug 49 49 50 class G4Pow; 51 50 52 class G4GEMChannel : public G4VEvaporationChannel 51 53 { 52 54 public: 53 // Available constructors 54 G4GEMChannel(const G4int theA, const G4int theZ, 55 G4GEMProbability * aEmissionStrategy, 56 G4VCoulombBarrier * aCoulombBarrier); 55 56 G4GEMChannel(const G4int theA, const G4int theZ, const G4String & aName, 57 G4GEMProbability * aEmissionStrategy, 58 G4VCoulombBarrier * aCoulombBarrier); 59 60 // destructor 61 virtual ~G4GEMChannel(); 57 62 58 G4GEMChannel(const G4int theA, const G4int theZ, const G4String & aName, 59 G4GEMProbability * aEmissionStrategy, 60 G4VCoulombBarrier * aCoulombBarrier); 63 void Initialize(const G4Fragment & fragment); 64 65 G4FragmentVector * BreakUp(const G4Fragment & theNucleus); 66 67 inline void SetLevelDensityParameter(G4VLevelDensityParameter * aLevelDensity) 68 { 69 if (MyOwnLevelDensity) { delete theLevelDensityPtr; } 70 theLevelDensityPtr = aLevelDensity; 71 MyOwnLevelDensity = false; 72 } 73 74 inline G4double GetEmissionProbability(void) const 75 { return EmissionProbability; } 76 77 inline G4double GetMaximalKineticEnergy(void) const 78 { return MaximalKineticEnergy; } 79 80 private: 61 81 62 G4GEMChannel(const G4int theA, const G4int theZ, const G4String * aName, 63 G4GEMProbability * aEmissionStrategy, 64 G4VCoulombBarrier * aCoulombBarrier); 65 66 public: 67 // destructor 68 ~G4GEMChannel(); 69 70 void SetEmissionStrategy(G4GEMProbability * aEmissionStrategy) 71 { 72 theEvaporationProbabilityPtr = aEmissionStrategy; 73 } 74 75 void SetCoulombBarrierStrategy(G4VCoulombBarrier * aCoulombBarrier) 76 { 77 theCoulombBarrierPtr = aCoulombBarrier; 78 } 82 // Calculate Binding Energy for separate fragment from nucleus 83 G4double CalcBindingEnergy(G4int anA, G4int aZ); 84 85 // Calculate maximal kinetic energy that can be carried by fragment (in MeV) 86 G4double CalcMaximalKineticEnergy(G4double U); 87 88 // Samples fragment kinetic energy. 89 G4double CalcKineticEnergy(const G4Fragment & fragment); 90 91 // This has to be removed and put in Random Generator 92 G4ThreeVector IsotropicVector(G4double Magnitude = 1.0); 93 94 G4GEMChannel(const G4GEMChannel & right); 95 const G4GEMChannel & operator=(const G4GEMChannel & right); 96 G4bool operator==(const G4GEMChannel & right) const; 97 G4bool operator!=(const G4GEMChannel & right) const; 79 98 80 99 protected: 81 // default constructor 82 G4GEMChannel() {}; 83 100 G4GEMChannel(); 101 102 // Data Members ************ 103 84 104 private: 85 // copy constructor86 G4GEMChannel(const G4GEMChannel & right);87 88 private:89 const G4GEMChannel & operator=(const G4GEMChannel & right);90 91 public:92 G4bool operator==(const G4GEMChannel & right) const;93 G4bool operator!=(const G4GEMChannel & right) const;94 105 95 public: 96 void Initialize(const G4Fragment & fragment); 106 // This data member define the channel. 107 // They are intializated at object creation (constructor) time. 108 109 // Atomic Number 110 G4int A; 111 112 // Charge 113 G4int Z; 97 114 98 G4FragmentVector * BreakUp(const G4Fragment & theNucleus); 115 G4double EvaporatedMass; 116 G4double ResidualMass; 99 117 100 inline void SetLevelDensityParameter(G4VLevelDensityParameter * aLevelDensity) 101 { 102 if (MyOwnLevelDensity) delete theLevelDensityPtr; 103 theLevelDensityPtr = aLevelDensity; 104 MyOwnLevelDensity = false; 105 } 106 107 public: 118 G4Pow* fG4pow; 119 120 // For evaporation probability calcualtion 121 G4GEMProbability * theEvaporationProbabilityPtr; 122 123 // For Level Density calculation 124 G4bool MyOwnLevelDensity; 125 G4VLevelDensityParameter * theLevelDensityPtr; 126 127 // For Coulomb Barrier calculation 128 G4VCoulombBarrier * theCoulombBarrierPtr; 129 G4double CoulombBarrier; 130 131 //--------------------------------------------------- 132 133 // These values depend on the nucleus that is being evaporated. 134 // They are calculated through the Initialize method which takes as parameters 135 // the atomic number, charge and excitation energy of nucleus. 136 137 // Residual Atomic Number 138 G4int ResidualA; 139 140 // Residual Charge 141 G4int ResidualZ; 142 143 // Emission Probability 144 G4double EmissionProbability; 145 146 // Maximal Kinetic Energy that can be carried by fragment 147 G4double MaximalKineticEnergy; 108 148 109 149 110 inline G4double GetEmissionProbability(void) const111 {112 return EmissionProbability;113 }114 115 116 inline G4double GetMaximalKineticEnergy(void) const117 {118 return MaximalKineticEnergy;119 }120 121 // ----------------------122 123 private:124 125 // Calculate Binding Energy for separate fragment from nucleus126 G4double CalcBindingEnergy(const G4int anA, const G4int aZ);127 128 // Calculate maximal kinetic energy that can be carried by fragment (in MeV)129 G4double CalcMaximalKineticEnergy(const G4double U);130 131 // Samples fragment kinetic energy.132 G4double CalcKineticEnergy(const G4Fragment & fragment);133 134 // This has to be removed and put in Random Generator135 G4ThreeVector IsotropicVector(const G4double Magnitude = 1.0);136 137 // Data Members138 // ************139 private:140 141 // This data member define the channel.142 // They are intializated at object creation (constructor) time.143 144 // Atomic Number145 G4int A;146 147 // Charge148 G4int Z;149 150 151 // For evaporation probability calcualtion152 G4GEMProbability * theEvaporationProbabilityPtr;153 154 // For Level Density calculation155 G4bool MyOwnLevelDensity;156 G4VLevelDensityParameter * theLevelDensityPtr;157 158 // For Coulomb Barrier calculation159 G4VCoulombBarrier * theCoulombBarrierPtr;160 G4double CoulombBarrier;161 162 //---------------------------------------------------163 164 // These values depend on the nucleus that is being evaporated.165 // They are calculated through the Initialize method which takes as parameters166 // the atomic number, charge and excitation energy of nucleus.167 168 // Residual Atomic Number169 G4int AResidual;170 171 // Residual Charge172 G4int ZResidual;173 174 // Emission Probability175 G4double EmissionProbability;176 177 178 // Maximal Kinetic Energy that can be carried by fragment179 G4double MaximalKineticEnergy;180 150 }; 181 151 -
trunk/source/processes/hadronic/models/de_excitation/gem_evaporation/include/G4GEMProbability.hh
r1340 r1347 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4GEMProbability.hh,v 1. 4 2010/05/19 10:21:16vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-0 3-ref-09$26 // $Id: G4GEMProbability.hh,v 1.6 2010/11/05 14:42:52 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-04-ref-00 $ 28 28 // 29 29 //--------------------------------------------------------------------- … … 43 43 #define G4GEMProbability_h 1 44 44 45 46 45 #include "G4VEmissionProbability.hh" 47 46 #include "G4VLevelDensityParameter.hh" … … 60 59 61 60 // Only available constructor 62 G4GEMProbability( const G4int anA, const G4int aZ, constG4double aSpin);61 G4GEMProbability(G4int anA, G4int aZ, G4double aSpin); 63 62 64 63 virtual ~G4GEMProbability(); … … 114 113 } 115 114 116 inline void SetCoulombBarrierStrategy(G4VCoulombBarrier * aCoulombBarrier)117 {118 theCoulombBarrierPtr = aCoulombBarrier;119 }120 121 115 private: 122 116 … … 130 124 public: 131 125 132 G4double EmissionProbability(const G4Fragment & fragment, constG4double anEnergy);126 G4double EmissionProbability(const G4Fragment & fragment, G4double anEnergy); 133 127 134 128 private: 135 129 136 G4double CalcProbability(const G4Fragment & fragment, constG4double MaximalKineticEnergy,137 constG4double V);130 G4double CalcProbability(const G4Fragment & fragment, G4double MaximalKineticEnergy, 131 G4double V); 138 132 139 virtual G4double CCoeficient( constG4double ) const;133 virtual G4double CCoeficient(G4double ) const; 140 134 141 inline G4double I0( constG4double t);142 inline G4double I1( const G4double t, constG4double tx);143 inline G4double I2( const G4double s, constG4double sx);144 G4double I3( const G4double s, constG4double sx);135 inline G4double I0(G4double t); 136 inline G4double I1(G4double t, G4double tx); 137 inline G4double I2(G4double s, G4double sx); 138 G4double I3(G4double s, G4double sx); 145 139 146 140 // Data Members … … 174 168 }; 175 169 176 inline G4double G4GEMProbability::I0( constG4double t)170 inline G4double G4GEMProbability::I0(G4double t) 177 171 { 178 172 return std::exp(t) - 1.0; 179 173 } 180 174 181 inline G4double G4GEMProbability::I1( const G4double t, constG4double tx)175 inline G4double G4GEMProbability::I1(G4double t, G4double tx) 182 176 { 183 177 return (t - tx + 1.0)*std::exp(tx) - t - 1.0; … … 185 179 186 180 187 inline G4double G4GEMProbability::I2( const G4double s, constG4double sx)181 inline G4double G4GEMProbability::I2(G4double s, G4double sx) 188 182 { 189 183 G4double S = 1.0/std::sqrt(s); -
trunk/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4AlphaGEMChannel.cc
r1340 r1347 25 25 // 26 26 // 27 // $Id: G4AlphaGEMChannel.cc,v 1. 5 2009/09/15 12:54:16vnivanch Exp $28 // GEANT4 tag $Name: geant4-09-0 3-ref-09$27 // $Id: G4AlphaGEMChannel.cc,v 1.6 2010/10/29 17:35:04 vnivanch Exp $ 28 // GEANT4 tag $Name: geant4-09-04-ref-00 $ 29 29 // 30 30 // Hadronic Process: Nuclear De-excitations … … 35 35 36 36 37 const G4AlphaGEMChannel & G4AlphaGEMChannel::operator=(const G4AlphaGEMChannel & )38 {39 throw G4HadronicException(__FILE__, __LINE__, "G4AlphaGEMChannel::operator= meant to not be accessable");40 return *this;41 }42 43 G4AlphaGEMChannel::G4AlphaGEMChannel(const G4AlphaGEMChannel & ): G4GEMChannel()44 {45 throw G4HadronicException(__FILE__, __LINE__, "G4AlphaGEMChannel::CopyConstructor meant to not be accessable");46 }47 48 G4bool G4AlphaGEMChannel::operator==(const G4AlphaGEMChannel & right) const49 {50 return (this == (G4AlphaGEMChannel *) &right);51 // return false;52 }53 54 G4bool G4AlphaGEMChannel::operator!=(const G4AlphaGEMChannel & right) const55 {56 return (this != (G4AlphaGEMChannel *) &right);57 // return true;58 }59 -
trunk/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMChannel.cc
r1340 r1347 25 25 // 26 26 // 27 // $Id: G4GEMChannel.cc,v 1.1 0 2009/10/08 07:55:39vnivanch Exp $28 // GEANT4 tag $Name: geant4-09-0 3-ref-09$27 // $Id: G4GEMChannel.cc,v 1.12 2010/11/18 16:21:17 vnivanch Exp $ 28 // GEANT4 tag $Name: geant4-09-04-ref-00 $ 29 29 // 30 30 // Hadronic Process: Nuclear De-excitations … … 40 40 #include "G4GEMChannel.hh" 41 41 #include "G4PairingCorrection.hh" 42 43 44 G4GEMChannel::G4GEMChannel(const G4int theA, const G4int theZ, 45 G4GEMProbability * aEmissionStrategy, 46 G4VCoulombBarrier * aCoulombBarrier): 47 A(theA), 48 Z(theZ), 49 theEvaporationProbabilityPtr(aEmissionStrategy), 50 theCoulombBarrierPtr(aCoulombBarrier), 51 EmissionProbability(0.0), 52 MaximalKineticEnergy(-1000.0) 53 { 54 theLevelDensityPtr = new G4EvaporationLevelDensityParameter; 55 MyOwnLevelDensity = true; 56 } 57 58 G4GEMChannel::G4GEMChannel(const G4int theA, const G4int theZ, const G4String & aName, 42 #include "G4Pow.hh" 43 44 G4GEMChannel::G4GEMChannel(G4int theA, G4int theZ, const G4String & aName, 59 45 G4GEMProbability * aEmissionStrategy, 60 46 G4VCoulombBarrier * aCoulombBarrier) : … … 69 55 theLevelDensityPtr = new G4EvaporationLevelDensityParameter; 70 56 MyOwnLevelDensity = true; 57 EvaporatedMass = G4NucleiProperties::GetNuclearMass(A, Z); 58 ResidualMass = CoulombBarrier = 0.0; 59 fG4pow = G4Pow::GetInstance(); 60 } 61 62 G4GEMChannel::G4GEMChannel() : 63 G4VEvaporationChannel("dummy"), 64 A(0), 65 Z(0), 66 theEvaporationProbabilityPtr(0), 67 theCoulombBarrierPtr(0), 68 EmissionProbability(0.0), 69 MaximalKineticEnergy(-1000.0) 70 { 71 theLevelDensityPtr = 0; 72 MyOwnLevelDensity = true; 73 EvaporatedMass = 0.0; 74 ResidualMass = CoulombBarrier = 0.0; 75 fG4pow = G4Pow::GetInstance(); 71 76 } 72 77 73 78 G4GEMChannel::~G4GEMChannel() 74 79 { 75 if (MyOwnLevelDensity) delete theLevelDensityPtr; 76 } 77 78 G4GEMChannel::G4GEMChannel(const G4GEMChannel & ) : G4VEvaporationChannel() 79 { 80 throw G4HadronicException(__FILE__, __LINE__, "G4GEMChannel::copy_costructor meant to not be accessable"); 81 } 82 83 const G4GEMChannel & G4GEMChannel::operator=(const G4GEMChannel & ) 84 { 85 throw G4HadronicException(__FILE__, __LINE__, "G4GEMChannel::operator= meant to not be accessable"); 86 return *this; 87 } 88 89 G4bool G4GEMChannel::operator==(const G4GEMChannel & right) const 90 { 91 return (this == (G4GEMChannel *) &right); 92 // return false; 93 } 94 95 G4bool G4GEMChannel::operator!=(const G4GEMChannel & right) const 96 { 97 return (this != (G4GEMChannel *) &right); 98 // return true; 80 if (MyOwnLevelDensity) { delete theLevelDensityPtr; } 99 81 } 100 82 101 83 void G4GEMChannel::Initialize(const G4Fragment & fragment) 102 84 { 103 G4int anA = static_cast<G4int>(fragment.GetA());104 G4int aZ = static_cast<G4int>(fragment.GetZ());105 AResidual= anA - A;106 ZResidual= aZ - Z;85 G4int anA = fragment.GetA_asInt(); 86 G4int aZ = fragment.GetZ_asInt(); 87 ResidualA = anA - A; 88 ResidualZ = aZ - Z; 107 89 //G4cout << "G4GEMChannel::Initialize: Z= " << aZ << " A= " << anA 108 // << " Zres= " << ZResidual << " Ares= " << AResidual<< G4endl;90 // << " Zres= " << ResidualZ << " Ares= " << ResidualA << G4endl; 109 91 110 92 // We only take into account channels which are physically allowed 111 if ( AResidual <= 0 || ZResidual <= 0 || AResidual < ZResidual||112 ( AResidual == ZResidual && AResidual> 1))93 if (ResidualA <= 0 || ResidualZ <= 0 || ResidualA < ResidualZ || 94 (ResidualA == ResidualZ && ResidualA > 1)) 113 95 { 114 96 CoulombBarrier = 0.0; … … 118 100 else 119 101 { 120 121 102 // Effective excitation energy 122 103 // JMQ 071009: pairing in ExEnergy should be the one of parent compound nucleus … … 125 106 // param for protons must be the same) 126 107 // G4double ExEnergy = fragment.GetExcitationEnergy() - 127 // G4PairingCorrection::GetInstance()->GetPairingCorrection( AResidual,ZResidual);108 // G4PairingCorrection::GetInstance()->GetPairingCorrection(ResidualA,ResidualZ); 128 109 G4double ExEnergy = fragment.GetExcitationEnergy() - 129 110 G4PairingCorrection::GetInstance()->GetPairingCorrection(anA,aZ); … … 138 119 } else { 139 120 121 ResidualMass = G4NucleiProperties::GetNuclearMass(ResidualA, ResidualZ); 122 140 123 // Coulomb Barrier calculation 141 CoulombBarrier = theCoulombBarrierPtr->GetCoulombBarrier( AResidual,ZResidual,ExEnergy);124 CoulombBarrier = theCoulombBarrierPtr->GetCoulombBarrier(ResidualA,ResidualZ,ExEnergy); 142 125 //G4cout << "CBarrier(MeV)= " << CoulombBarrier/MeV << G4endl; 143 126 144 127 //Maximal kinetic energy (JMQ : at the Coulomb barrier) 145 128 MaximalKineticEnergy = 146 CalcMaximalKineticEnergy(G4ParticleTable::GetParticleTable()-> 147 GetIonTable()->GetNucleusMass(aZ,anA)+ExEnergy); 129 CalcMaximalKineticEnergy(fragment.GetGroundStateMass()+ExEnergy); 148 130 //G4cout << "MaxE(MeV)= " << MaximalKineticEnergy/MeV << G4endl; 149 150 131 151 132 // Emission probability … … 161 142 } 162 143 } 163 } 164 144 } 165 145 //G4cout << "Prob= " << EmissionProbability << G4endl; 166 146 return; … … 169 149 G4FragmentVector * G4GEMChannel::BreakUp(const G4Fragment & theNucleus) 170 150 { 171 G4double EvaporatedKineticEnergy = CalcKineticEnergy(theNucleus); 172 G4double EvaporatedMass = G4ParticleTable::GetParticleTable()->GetIonTable()->GetIonMass(Z,A); 173 G4double EvaporatedEnergy = EvaporatedKineticEnergy + EvaporatedMass; 174 175 176 G4ThreeVector momentum(IsotropicVector(std::sqrt(EvaporatedKineticEnergy* 177 (EvaporatedKineticEnergy+2.0*EvaporatedMass)))); 178 179 momentum.rotateUz(theNucleus.GetMomentum().vect().unit()); 180 181 G4LorentzVector EvaporatedMomentum(momentum,EvaporatedEnergy); 182 EvaporatedMomentum.boost(theNucleus.GetMomentum().boostVector()); 183 G4Fragment * EvaporatedFragment = new G4Fragment(A,Z,EvaporatedMomentum); 184 #ifdef PRECOMPOUND_TEST 185 EvaporatedFragment->SetCreatorModel(G4String("G4Evaporation")); 151 G4double EvaporatedKineticEnergy = CalcKineticEnergy(theNucleus); 152 G4double EvaporatedEnergy = EvaporatedKineticEnergy + EvaporatedMass; 153 154 G4ThreeVector momentum(IsotropicVector(std::sqrt(EvaporatedKineticEnergy* 155 (EvaporatedKineticEnergy+2.0*EvaporatedMass)))); 156 157 momentum.rotateUz(theNucleus.GetMomentum().vect().unit()); 158 159 G4LorentzVector EvaporatedMomentum(momentum,EvaporatedEnergy); 160 EvaporatedMomentum.boost(theNucleus.GetMomentum().boostVector()); 161 G4Fragment * EvaporatedFragment = new G4Fragment(A,Z,EvaporatedMomentum); 162 // ** And now the residual nucleus ** 163 G4double theExEnergy = theNucleus.GetExcitationEnergy(); 164 G4double theMass = theNucleus.GetGroundStateMass(); 165 G4double ResidualEnergy = theMass + (theExEnergy - EvaporatedKineticEnergy) - EvaporatedMass; 166 167 G4LorentzVector ResidualMomentum(-momentum,ResidualEnergy); 168 ResidualMomentum.boost(theNucleus.GetMomentum().boostVector()); 169 170 G4Fragment * ResidualFragment = new G4Fragment( ResidualA, ResidualZ, ResidualMomentum ); 171 172 G4FragmentVector * theResult = new G4FragmentVector; 173 174 #ifdef debug 175 G4double Efinal = ResidualMomentum.e() + EvaporatedMomentum.e(); 176 G4ThreeVector Pfinal = ResidualMomentum.vect() + EvaporatedMomentum.vect(); 177 if (std::abs(Efinal-theNucleus.GetMomentum().e()) > 10.0*eV) { 178 G4cout << "@@@@@@@@@@@@@@@@@@@@@ G4GEMChanel: ENERGY @@@@@@@@@@@@@@@@" << G4endl; 179 G4cout << "Initial : " << theNucleus.GetMomentum().e()/MeV << " MeV Final :" 180 <<Efinal/MeV << " MeV Delta: " << (Efinal-theNucleus.GetMomentum().e())/MeV 181 << " MeV" << G4endl; 182 } 183 if (std::abs(Pfinal.x()-theNucleus.GetMomentum().x()) > 10.0*eV || 184 std::abs(Pfinal.y()-theNucleus.GetMomentum().y()) > 10.0*eV || 185 std::abs(Pfinal.z()-theNucleus.GetMomentum().z()) > 10.0*eV ) { 186 G4cout << "@@@@@@@@@@@@@@@@@@@@@ G4GEMChanel: MOMENTUM @@@@@@@@@@@@@@@@" << G4endl; 187 G4cout << "Initial : " << theNucleus.GetMomentum().vect() << " MeV Final :" 188 <<Pfinal/MeV << " MeV Delta: " << Pfinal-theNucleus.GetMomentum().vect() 189 << " MeV" << G4endl; 190 191 } 186 192 #endif 187 // ** And now the residual nucleus ** 188 G4double theExEnergy = theNucleus.GetExcitationEnergy(); 189 G4double theMass = G4ParticleTable::GetParticleTable()-> 190 GetIonTable()->GetNucleusMass(static_cast<G4int>(theNucleus.GetZ()), 191 static_cast<G4int>(theNucleus.GetA())); 192 G4double ResidualEnergy = theMass + (theExEnergy - EvaporatedKineticEnergy) - EvaporatedMass; 193 194 G4LorentzVector ResidualMomentum(-momentum,ResidualEnergy); 195 ResidualMomentum.boost(theNucleus.GetMomentum().boostVector()); 196 197 G4Fragment * ResidualFragment = new G4Fragment( AResidual, ZResidual, ResidualMomentum ); 198 199 #ifdef PRECOMPOUND_TEST 200 ResidualFragment->SetCreatorModel(G4String("ResidualNucleus")); 201 #endif 202 203 204 G4FragmentVector * theResult = new G4FragmentVector; 205 206 #ifdef debug 207 G4double Efinal = ResidualMomentum.e() + EvaporatedMomentum.e(); 208 G4ThreeVector Pfinal = ResidualMomentum.vect() + EvaporatedMomentum.vect(); 209 if (std::abs(Efinal-theNucleus.GetMomentum().e()) > 10.0*eV) { 210 G4cout << "@@@@@@@@@@@@@@@@@@@@@ G4GEMChanel: ENERGY @@@@@@@@@@@@@@@@" << G4endl; 211 G4cout << "Initial : " << theNucleus.GetMomentum().e()/MeV << " MeV Final :" 212 <<Efinal/MeV << " MeV Delta: " << (Efinal-theNucleus.GetMomentum().e())/MeV 213 << " MeV" << G4endl; 214 } 215 if (std::abs(Pfinal.x()-theNucleus.GetMomentum().x()) > 10.0*eV || 216 std::abs(Pfinal.y()-theNucleus.GetMomentum().y()) > 10.0*eV || 217 std::abs(Pfinal.z()-theNucleus.GetMomentum().z()) > 10.0*eV ) { 218 G4cout << "@@@@@@@@@@@@@@@@@@@@@ G4GEMChanel: MOMENTUM @@@@@@@@@@@@@@@@" << G4endl; 219 G4cout << "Initial : " << theNucleus.GetMomentum().vect() << " MeV Final :" 220 <<Pfinal/MeV << " MeV Delta: " << Pfinal-theNucleus.GetMomentum().vect() 221 << " MeV" << G4endl; 222 223 } 224 #endif 225 theResult->push_back(EvaporatedFragment); 226 theResult->push_back(ResidualFragment); 227 return theResult; 193 theResult->push_back(EvaporatedFragment); 194 theResult->push_back(ResidualFragment); 195 return theResult; 228 196 } 229 230 231 197 232 198 G4double G4GEMChannel::CalcMaximalKineticEnergy(const G4double NucleusTotalE) … … 234 200 //JMQ this is not the assimptotic kinetic energy but the one at the Coulomb barrier 235 201 { 236 G4double ResidualMass = G4ParticleTable::GetParticleTable()->237 GetIonTable()->GetNucleusMass( ZResidual, AResidual );238 G4double EvaporatedMass = G4ParticleTable::GetParticleTable()->239 GetIonTable()->GetNucleusMass( Z, A );240 241 202 G4double T = (NucleusTotalE*NucleusTotalE + EvaporatedMass*EvaporatedMass - ResidualMass*ResidualMass)/ 242 (2.0*NucleusTotalE) - 243 EvaporatedMass - CoulombBarrier; 203 (2.0*NucleusTotalE) - EvaporatedMass - CoulombBarrier; 244 204 245 205 return T; 246 206 } 247 207 248 249 250 251 208 G4double G4GEMChannel::CalcKineticEnergy(const G4Fragment & fragment) 252 209 // Samples fragment kinetic energy. 253 210 { 254 211 G4double U = fragment.GetExcitationEnergy(); 255 G4double NuclearMass = G4ParticleTable::GetParticleTable()->GetIonTable()->GetNucleusMass(Z,A);256 212 257 213 G4double Alpha = theEvaporationProbabilityPtr->CalcAlphaParam(fragment); … … 260 216 G4double Normalization = theEvaporationProbabilityPtr->GetNormalization(); 261 217 262 // ***RESIDUAL***218 // ***RESIDUAL*** 263 219 //JMQ (September 2009) the following quantities refer to the RESIDUAL: 264 G4double delta0 = G4PairingCorrection::GetInstance()->GetPairingCorrection( AResidual,ZResidual);265 G4double Ux = (2.5 + 150.0/ AResidual)*MeV;220 G4double delta0 = G4PairingCorrection::GetInstance()->GetPairingCorrection(ResidualA,ResidualZ); 221 G4double Ux = (2.5 + 150.0/ResidualA)*MeV; 266 222 G4double Ex = Ux + delta0; 267 223 G4double InitialLevelDensity; … … 271 227 //JMQ (September 2009) the following quantities refer to the PARENT: 272 228 273 G4double deltaCN = G4PairingCorrection::GetInstance()->GetPairingCorrection(static_cast<G4int>(fragment.GetA()), 274 static_cast<G4int>(fragment.GetZ())); 275 G4double aCN = theLevelDensityPtr->LevelDensityParameter(static_cast<G4int>(fragment.GetA()), 276 static_cast<G4int>(fragment.GetZ()),U-deltaCN); 229 G4double deltaCN = 230 G4PairingCorrection::GetInstance()->GetPairingCorrection(fragment.GetA_asInt(), 231 fragment.GetZ_asInt()); 232 G4double aCN = theLevelDensityPtr->LevelDensityParameter(fragment.GetA_asInt(), 233 fragment.GetZ_asInt(),U-deltaCN); 277 234 G4double UxCN = (2.5 + 150.0/fragment.GetA())*MeV; 278 235 G4double ExCN = UxCN + deltaCN; 279 236 G4double TCN = 1.0/(std::sqrt(aCN/UxCN) - 1.5/UxCN); 280 G4double E0CN = ExCN - TCN*(std::log(TCN/MeV) - std::log(aCN*MeV)/4.0 - 1.25*std::log(UxCN/MeV) + 2.0*std::sqrt(aCN*UxCN));281 237 // ***end PARENT*** 282 238 … … 284 240 if ( U < ExCN ) 285 241 { 242 G4double E0CN = ExCN - TCN*(std::log(TCN/MeV) - std::log(aCN*MeV)/4.0 243 - 1.25*std::log(UxCN/MeV) + 2.0*std::sqrt(aCN*UxCN)); 286 244 InitialLevelDensity = (pi/12.0)*std::exp((U-E0CN)/TCN)/TCN; 287 245 } 288 246 else 289 247 { 290 InitialLevelDensity = (pi/12.0)*std::exp(2*std::sqrt(aCN*(U-deltaCN)))/std::pow(aCN*std::pow(U-deltaCN,5.0),1.0/4.0); 248 G4double x = U-deltaCN; 249 G4double x1 = std::sqrt(aCN*x); 250 InitialLevelDensity = (pi/12.0)*std::exp(2*x1)/(x*std::sqrt(x1)); 251 //InitialLevelDensity = 252 //(pi/12.0)*std::exp(2*std::sqrt(aCN*(U-deltaCN)))/std::pow(aCN*std::pow(U-deltaCN,5.0),1.0/4.0); 291 253 } 292 254 293 255 const G4double Spin = theEvaporationProbabilityPtr->GetSpin(); 294 //JMQ BIG BUG fixed: hbarc instead of hbar_Planck !!!!295 // it was fixed in total probability (for this channel) but remained still here!!296 // G4double g = (2.0*Spin+1.0)*NuclearMass/(pi2* hbar_Planck*hbar_Planck);297 G4double g = (2.0*Spin+1.0)*NuclearMass/(pi2* hbarc*hbarc);298 //299 //JMQ fix on Rb and geometrical cross sections according to Furihata's paper300 // (JAERI-Data/Code 2001-105, p6)256 //JMQ BIG BUG fixed: hbarc instead of hbar_Planck !!!! 257 // it was fixed in total probability (for this channel) but remained still here!! 258 // G4double g = (2.0*Spin+1.0)*NuclearMass/(pi2* hbar_Planck*hbar_Planck); 259 G4double g = (2.0*Spin+1.0)*EvaporatedMass/(pi2* hbarc*hbarc); 260 // 261 //JMQ fix on Rb and geometrical cross sections according to Furihata's paper 262 // (JAERI-Data/Code 2001-105, p6) 301 263 G4double Rb = 0.0; 302 if (A > 4) 303 { 304 G4double Ad = std::pow(G4double(fragment.GetA()-A),1.0/3.0); 305 G4double Aj = std::pow(G4double(A),1.0/3.0); 264 if (A > 4) 265 { 266 G4double Ad = fG4pow->Z13(ResidualA); 267 G4double Aj = fG4pow->Z13(A); 268 // RN = 1.12*(R1 + R2) - 0.86*((R1+R2)/(R1*R2)); 306 269 Rb = 1.12*(Aj + Ad) - 0.86*((Aj+Ad)/(Aj*Ad))+2.85; 307 270 Rb *= fermi; 308 271 } 309 else if (A>1) 310 { 311 // G4double R1 = std::pow(G4double(fragment.GetA()-A),1.0/3.0); 312 // G4double R2 = std::pow(G4double(A),1.0/3.0); 313 G4double Ad = std::pow(G4double(fragment.GetA()-A),1.0/3.0); 314 G4double Aj = std::pow(G4double(A),1.0/3.0); 315 // RN = 1.12*(R1 + R2) - 0.86*((R1+R2)/(R1*R2)); 272 else if (A>1) 273 { 274 G4double Ad = fG4pow->Z13(ResidualA); 275 G4double Aj = fG4pow->Z13(A); 316 276 Rb=1.5*(Aj+Ad)*fermi; 317 277 } 318 else 319 { 320 G4double Ad = std::pow(G4double(fragment.GetA()-A),1.0/3.0); 321 // RN = 1.5*fermi; 278 else 279 { 280 G4double Ad = fG4pow->Z13(ResidualA); 322 281 Rb = 1.5*Ad*fermi; 323 282 } 324 // G4double GeometricalXS = pi*RN*RN*std::pow(G4double(fragment.GetA()-A),2./3.); 325 G4double GeometricalXS = pi*Rb*Rb; 326 327 328 G4double ConstantFactor = g*GeometricalXS*Alpha/InitialLevelDensity; 329 ConstantFactor *= pi/12.0; 330 //JMQ : this is the assimptotic maximal kinetic energy of the ejectile 331 // (obtained by energy-momentum conservation). 332 // In general smaller than U-theSeparationEnergy 333 G4double theEnergy = MaximalKineticEnergy + CoulombBarrier; 334 G4double KineticEnergy; 335 G4double Probability; 336 337 do 338 { 339 KineticEnergy = CoulombBarrier + G4UniformRand()*MaximalKineticEnergy; 340 Probability = ConstantFactor*(KineticEnergy + Beta); 341 G4double a = theLevelDensityPtr->LevelDensityParameter(AResidual,ZResidual,theEnergy-KineticEnergy-delta0); 342 G4double T = 1.0/(std::sqrt(a/Ux) - 1.5/Ux); 343 //JMQ fix in units 344 G4double E0 = Ex - T*(std::log(T/MeV) - std::log(a*MeV)/4.0 - 1.25*std::log(Ux/MeV) + 2.0*std::sqrt(a*Ux)); 283 // G4double GeometricalXS = pi*RN*RN*std::pow(G4double(fragment.GetA()-A),2./3.); 284 G4double GeometricalXS = pi*Rb*Rb; 285 286 G4double ConstantFactor = g*GeometricalXS*Alpha/InitialLevelDensity; 287 ConstantFactor *= pi/12.0; 288 //JMQ : this is the assimptotic maximal kinetic energy of the ejectile 289 // (obtained by energy-momentum conservation). 290 // In general smaller than U-theSeparationEnergy 291 G4double theEnergy = MaximalKineticEnergy + CoulombBarrier; 292 G4double KineticEnergy; 293 G4double Probability; 294 295 do 296 { 297 KineticEnergy = CoulombBarrier + G4UniformRand()*MaximalKineticEnergy; 298 Probability = ConstantFactor*(KineticEnergy + Beta); 299 G4double a = 300 theLevelDensityPtr->LevelDensityParameter(ResidualA,ResidualZ,theEnergy-KineticEnergy-delta0); 301 G4double T = 1.0/(std::sqrt(a/Ux) - 1.5/Ux); 302 //JMQ fix in units 345 303 346 if ( theEnergy-KineticEnergy < Ex) 347 { 348 Probability *= std::exp((theEnergy-KineticEnergy-E0)/T)/T; 349 } 350 else 351 { 352 Probability *= std::exp(2*std::sqrt(a*(theEnergy-KineticEnergy-delta0)))/ 353 std::pow(a*std::pow(theEnergy-KineticEnergy-delta0,5.0),1.0/4.0); 354 } 355 Probability /= Normalization; 356 } 357 while (G4UniformRand() > Probability); 358 359 return KineticEnergy; 304 if ( theEnergy-KineticEnergy < Ex) 305 { 306 G4double E0 = Ex - T*(std::log(T/MeV) - std::log(a*MeV)/4.0 307 - 1.25*std::log(Ux/MeV) + 2.0*std::sqrt(a*Ux)); 308 Probability *= std::exp((theEnergy-KineticEnergy-E0)/T)/T; 309 } 310 else 311 { 312 Probability *= std::exp(2*std::sqrt(a*(theEnergy-KineticEnergy-delta0)))/ 313 std::pow(a*fG4pow->powN(theEnergy-KineticEnergy-delta0,5), 0.25); 314 } 315 } 316 while (Normalization*G4UniformRand() > Probability); 317 318 return KineticEnergy; 360 319 } 361 320 … … 365 324 // By default Magnitude = 1.0 366 325 { 367 368 369 370 371 372 373 374 } 375 376 377 326 G4double CosTheta = 1.0 - 2.0*G4UniformRand(); 327 G4double SinTheta = std::sqrt(1.0 - CosTheta*CosTheta); 328 G4double Phi = twopi*G4UniformRand(); 329 G4ThreeVector Vector(Magnitude*std::cos(Phi)*SinTheta, 330 Magnitude*std::sin(Phi)*SinTheta, 331 Magnitude*CosTheta); 332 return Vector; 333 } 334 335 336 -
trunk/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMProbability.cc
r1340 r1347 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4GEMProbability.cc,v 1.1 3 2010/05/19 10:21:16vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-0 3-ref-09$26 // $Id: G4GEMProbability.cc,v 1.15 2010/11/05 14:43:27 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-04-ref-00 $ 28 28 // 29 29 //--------------------------------------------------------------------- … … 65 65 } 66 66 67 G4GEMProbability:: G4GEMProbability( const G4int anA, const G4int aZ, constG4double aSpin) :67 G4GEMProbability:: G4GEMProbability(G4int anA, G4int aZ, G4double aSpin) : 68 68 theA(anA), theZ(aZ), Spin(aSpin), theCoulombBarrierPtr(0), 69 69 ExcitationEnergies(0), ExcitationSpins(0), ExcitationLifetimes(0), Normalization(1.0) … … 95 95 96 96 G4double G4GEMProbability::EmissionProbability(const G4Fragment & fragment, 97 constG4double MaximalKineticEnergy)97 G4double MaximalKineticEnergy) 98 98 { 99 99 G4double EmissionProbability = 0.0; … … 130 130 131 131 G4double G4GEMProbability::CalcProbability(const G4Fragment & fragment, 132 constG4double MaximalKineticEnergy,133 constG4double V)132 G4double MaximalKineticEnergy, 133 G4double V) 134 134 135 135 // Calculate integrated probability (width) for evaporation channel … … 146 146 G4double Alpha = CalcAlphaParam(fragment); 147 147 G4double Beta = CalcBetaParam(fragment); 148 149 148 150 149 // ***RESIDUAL*** 151 150 //JMQ (September 2009) the following quantities refer to the RESIDUAL: … … 159 158 G4double T = 1.0/(std::sqrt(a/Ux) - 1.5/Ux); 160 159 //JMQ fixed bug in units 161 G4double E0 = Ex - T*(std::log(T/MeV) - std::log(a*MeV)/4.0 - 1.25*std::log(Ux/MeV) + 2.0*std::sqrt(a*Ux)); 160 G4double E0 = Ex - T*(std::log(T/MeV) - std::log(a*MeV)/4.0 161 - 1.25*std::log(Ux/MeV) + 2.0*std::sqrt(a*Ux)); 162 162 // ***end RESIDUAL *** 163 163 … … 165 165 //JMQ (September 2009) the following quantities refer to the PARENT: 166 166 167 G4double deltaCN=fPairCorr->GetPairingCorrection(A, Z); 168 G4double aCN = theEvapLDPptr->LevelDensityParameter(A, Z, U-deltaCN); 169 G4double UxCN = (2.5 + 150.0/G4double(A))*MeV; 170 G4double ExCN = UxCN + deltaCN; 171 G4double TCN = 1.0/(std::sqrt(aCN/UxCN) - 1.5/UxCN); 172 //JMQ fixed bug in units 173 G4double E0CN = ExCN - TCN*(std::log(TCN/MeV) - std::log(aCN*MeV)/4.0 - 1.25*std::log(UxCN/MeV) + 2.0*std::sqrt(aCN*UxCN)); 174 // ***end PARENT*** 167 G4double deltaCN = fPairCorr->GetPairingCorrection(A, Z); 168 G4double aCN = theEvapLDPptr->LevelDensityParameter(A, Z, U-deltaCN); 169 G4double UxCN = (2.5 + 150.0/G4double(A))*MeV; 170 G4double ExCN = UxCN + deltaCN; 171 G4double TCN = 1.0/(std::sqrt(aCN/UxCN) - 1.5/UxCN); 172 // ***end PARENT*** 175 173 176 174 G4double Width; … … 231 229 //end of JMQ fix on Rb by 190709 232 230 233 234 235 //JMQ 160909 fix: initial level density must be calculated according to the 236 // conditions at the initial compound nucleus 237 // (it has been removed from previous "if" for the residual) 238 239 if ( U < ExCN ) 240 { 241 InitialLevelDensity = (pi/12.0)*std::exp((U-E0CN)/TCN)/TCN; 242 } 243 else 244 { 245 // InitialLevelDensity = (pi/12.0)*std::exp(2*std::sqrt(aCN*(U-deltaCN)))/std::pow(aCN*std::pow(U-deltaCN,5.0),1.0/4.0); 246 //VI speedup 247 G4double x = U-deltaCN; 248 G4double x2 = x*x; 249 G4double x3 = x2*x; 250 InitialLevelDensity = (pi/12.0)*std::exp(2*std::sqrt(aCN*x))/std::sqrt(std::sqrt(aCN*x2*x3)); 251 } 252 // 253 231 //JMQ 160909 fix: initial level density must be calculated according to the 232 // conditions at the initial compound nucleus 233 // (it has been removed from previous "if" for the residual) 234 235 if ( U < ExCN ) 236 { 237 //JMQ fixed bug in units 238 //VI moved the computation here 239 G4double E0CN = ExCN - TCN*(std::log(TCN/MeV) - std::log(aCN*MeV)/4.0 240 - 1.25*std::log(UxCN/MeV) + 2.0*std::sqrt(aCN*UxCN)); 241 InitialLevelDensity = (pi/12.0)*std::exp((U-E0CN)/TCN)/TCN; 242 } 243 else 244 { 245 //InitialLevelDensity = (pi/12.0)*std::exp(2*std::sqrt(aCN*(U-deltaCN)))/std::pow(aCN*std::pow(U-deltaCN,5.0),1.0/4.0); 246 //VI speedup 247 G4double x = U-deltaCN; 248 G4double x1 = std::sqrt(aCN*x); 249 InitialLevelDensity = (pi/12.0)*std::exp(2*x1)/(x*std::sqrt(x1)); 250 } 254 251 255 252 //JMQ 190709 BUG : pi instead of sqrt(pi) must be here according to Furihata's report: … … 257 254 Width *= pi*g*GeometricalXS*Alpha/(12.0*InitialLevelDensity); 258 255 259 260 256 return Width; 261 257 } 262 258 263 /* 264 265 G4double G4GEMProbability::CalcProbability(const G4Fragment & fragment, 266 const G4double MaximalKineticEnergy, 267 const G4double V) 268 // Calculate integrated probability (width) for evaporation channel 269 { 270 G4double ResidualA = static_cast<G4double>(fragment.GetA() - theA); 271 G4double ResidualZ = static_cast<G4double>(fragment.GetZ() - theZ); 272 G4double U = fragment.GetExcitationEnergy(); 273 274 G4double NuclearMass = G4ParticleTable::GetParticleTable()-> 275 GetIonTable()->GetNucleusMass(theZ,theA); 276 277 278 G4double Alpha = CalcAlphaParam(fragment); 279 G4double Beta = CalcBetaParam(fragment); 280 281 282 // ***RESIDUAL*** 283 //JMQ (September 2009) the following quantities refer to the RESIDUAL: 284 285 G4double delta0 = G4PairingCorrection::GetInstance()->GetPairingCorrection( static_cast<G4int>( ResidualA ) , static_cast<G4int>( ResidualZ ) ); 286 287 G4double a = theEvapLDPptr->LevelDensityParameter(static_cast<G4int>(ResidualA), 288 static_cast<G4int>(ResidualZ),MaximalKineticEnergy+V-delta0); 289 G4double Ux = (2.5 + 150.0/ResidualA)*MeV; 290 G4double Ex = Ux + delta0; 291 G4double T = 1.0/(std::sqrt(a/Ux) - 1.5/Ux); 292 //JMQ fixed bug in units 293 G4double E0 = Ex - T*(std::log(T/MeV) - std::log(a*MeV)/4.0 - 1.25*std::log(Ux/MeV) + 2.0*std::sqrt(a*Ux)); 294 // ***end RESIDUAL *** 295 296 // ***PARENT*** 297 //JMQ (September 2009) the following quantities refer to the PARENT: 298 299 G4double deltaCN=G4PairingCorrection::GetInstance()-> 300 GetPairingCorrection(static_cast<G4int>(fragment.GetA()),static_cast<G4int>(fragment.GetZ())); 301 G4double aCN = theEvapLDPptr->LevelDensityParameter(static_cast<G4int>(fragment.GetA()), 302 static_cast<G4int>(fragment.GetZ()),U-deltaCN); 303 G4double UxCN = (2.5 + 150.0/fragment.GetA())*MeV; 304 G4double ExCN = UxCN + deltaCN; 305 G4double TCN = 1.0/(std::sqrt(aCN/UxCN) - 1.5/UxCN); 306 //JMQ fixed bug in units 307 G4double E0CN = ExCN - TCN*(std::log(TCN/MeV) - std::log(aCN*MeV)/4.0 - 1.25*std::log(UxCN/MeV) + 2.0*std::sqrt(aCN*UxCN)); 308 // ***end PARENT*** 309 310 G4double Width; 311 G4double InitialLevelDensity; 312 G4double t = MaximalKineticEnergy/T; 313 if ( MaximalKineticEnergy < Ex ) { 314 //JMQ 190709 bug in I1 fixed (T was missing) 315 Width = (I1(t,t)*T + (Beta+V)*I0(t))/std::exp(E0/T); 316 //JMQ 160909 fix: InitialLevelDensity has been taken away (different conditions for initial CN..) 317 } else { 318 G4double tx = Ex/T; 319 G4double s = 2.0*std::sqrt(a*(MaximalKineticEnergy-delta0)); 320 G4double sx = 2.0*std::sqrt(a*(Ex-delta0)); 321 Width = I1(t,tx)*T/std::exp(E0/T) + I3(s,sx)*std::exp(s)/(std::sqrt(2.0)*a); 322 // For charged particles (Beta+V) = 0 beacuse Beta = -V 323 if (theZ == 0) { 324 Width += (Beta+V)*(I0(tx)/std::exp(E0/T) + 2.0*std::sqrt(2.0)*I2(s,sx)*std::exp(s)); 325 } 326 } 327 328 //JMQ 14/07/2009 BIG BUG : NuclearMass is in MeV => hbarc instead of hbar_planck must be used 329 // G4double g = (2.0*Spin+1.0)*NuclearMass/(pi2* hbar_Planck*hbar_Planck); 330 G4double g = (2.0*Spin+1.0)*NuclearMass/(pi2* hbarc*hbarc); 331 332 //JMQ 190709 fix on Rb and geometrical cross sections according to Furihata's paper 333 // (JAERI-Data/Code 2001-105, p6) 334 // G4double RN = 0.0; 335 G4double Rb = 0.0; 336 if (theA > 4) 337 { 338 // G4double R1 = std::pow(ResidualA,1.0/3.0); 339 // G4double R2 = std::pow(G4double(theA),1.0/3.0); 340 G4double Ad = std::pow(ResidualA,1.0/3.0); 341 G4double Aj = std::pow(G4double(theA),1.0/3.0); 342 // RN = 1.12*(R1 + R2) - 0.86*((R1+R2)/(R1*R2)); 343 Rb = 1.12*(Aj + Ad) - 0.86*((Aj+Ad)/(Aj*Ad))+2.85; 344 Rb *= fermi; 345 } 346 else if (theA>1) 347 { 348 G4double Ad = std::pow(ResidualA,1.0/3.0); 349 G4double Aj = std::pow(G4double(theA),1.0/3.0); 350 Rb=1.5*(Aj+Ad)*fermi; 351 } 352 else 353 { 354 G4double Ad = std::pow(ResidualA,1.0/3.0); 355 Rb = 1.5*Ad*fermi; 356 } 357 // G4double GeometricalXS = pi*RN*RN*std::pow(ResidualA,2./3.); 358 G4double GeometricalXS = pi*Rb*Rb; 359 //end of JMQ fix on Rb by 190709 360 361 362 363 //JMQ 160909 fix: initial level density must be calculated according to the 364 // conditions at the initial compound nucleus 365 // (it has been removed from previous "if" for the residual) 366 367 if ( U < ExCN ) 368 { 369 InitialLevelDensity = (pi/12.0)*std::exp((U-E0CN)/TCN)/TCN; 370 } 371 else 372 { 373 InitialLevelDensity = (pi/12.0)*std::exp(2*std::sqrt(aCN*(U-deltaCN)))/std::pow(aCN*std::pow(U-deltaCN,5.0),1.0/4.0); 374 } 375 // 376 377 378 //JMQ 190709 BUG : pi instead of sqrt(pi) must be here according to Furihata's report: 379 // Width *= std::sqrt(pi)*g*GeometricalXS*Alpha/(12.0*InitialLevelDensity); 380 Width *= pi*g*GeometricalXS*Alpha/(12.0*InitialLevelDensity); 381 382 383 return Width; 384 } 385 */ 386 387 G4double G4GEMProbability::I3(const G4double s, const G4double sx) 259 G4double G4GEMProbability::I3(G4double s, G4double sx) 388 260 { 389 261 G4double s2 = s*s;
Note: See TracChangeset
for help on using the changeset viewer.