Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // FermiBreakUp de-excitation model 28 // by V. Ivanchenko (July 2016) 29 // 30 31 #include "G4FermiBreakUpUtil.hh" 32 #include "G4FermiFragment.hh" 33 #include "G4NuclearRadii.hh" 34 #include "G4PhysicalConstants.hh" 35 36 namespace G4FermiBreakUpUtil { 37 38 const G4double coeff = 0.6; 39 40 // Coulomb barrier 41 G4double CoulombBarrier(const G4int Z1, const G4int A1, 42 const G4int Z2, const G4int A2, const G4double exc) { 43 const G4double r1 = G4NuclearRadii::RadiusCB(Z1, A1); 44 const G4double r2 = G4NuclearRadii::RadiusCB(Z2, A2); 45 G4double CB = CLHEP::elm_coupling*(Z1*Z2)/(coeff*r1 + r2); 46 if (exc > 0.0) { CB /= (1.0 + std::sqrt(exc/((2*(A1 + A2))*CLHEP::MeV))); } 47 return CB; 48 } 49 50 // 2-body decay probability 51 G4double Probability(const G4int A, 52 const G4FermiFragment* f1, const G4FermiFragment* f2, 53 const G4double mass, const G4double exc) { 54 G4double prob = 0.0; 55 const G4double mass1 = f1->GetTotalEnergy(); 56 const G4double mass2 = f2->GetTotalEnergy(); 57 const G4double bCouloumb = 58 CoulombBarrier(f1->GetZ(), f1->GetA(), f2->GetZ(), f2->GetA(), exc); 59 if (mass < mass1 + mass2 + bCouloumb) 60 return prob; 61 62 // free energy 63 const G4double e = mass - mass1 - mass2; 64 65 // Spin factor S_n 66 const G4int S_n = (std::abs(f1->TwoSpinParity())+1) 67 *(std::abs(f2->TwoSpinParity())+1); 68 69 // mass factors 70 const G4double x = mass1*mass2/(mass1 + mass2); 71 G4double massFactor = x*std::sqrt(x); 72 73 // Permutation Factor G_n - search for identical fragments 74 G4double G_n = (f1 == f2) ? 0.5 : 1.0; 75 76 prob = (A*S_n) * massFactor*G_n*std::sqrt(e); 77 //G4cout << "prob= " << prob << " Coeff= " << Coeff << G4endl; 78 return prob; 79 } 80 81 G4bool CheckSpinParity(const G4FermiFragment* f1, const G4FermiFragment* f2, 82 const G4FermiFragment* f3) 83 { 84 // check parity 85 G4int spin1 = f1->TwoSpinParity(); 86 G4int spin2 = f2->TwoSpinParity(); 87 G4int spin3 = f3->TwoSpinParity(); 88 if ((spin3 > 0 && spin1*spin2 < 0) || (spin3 < 0 && spin1*spin2 > 0)) 89 return false; 90 91 return true; 92 } 93 } 94