- Timestamp:
- Nov 5, 2010, 3:45:55 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/cascade/cascade/src/G4VCascadeCollider.cc
r1337 r1340 23 23 // * acceptance of all terms of the Geant4 Software license. * 24 24 // ******************************************************************** 25 // $Id: G4VCascadeCollider.cc,v 1.4 2010/07/14 15:41:13 mkelsey Exp $ 26 // Geant4 tag: $Name: hadr-casc-V09-03-85 $ 25 27 // 26 // $Id: G4VCascadeCollider.cc,v 1.1.2.1 2010/06/25 09:45:08 gunter Exp $ 27 // Geant4 tag: $Name: geant4-09-04-beta-01 $ 28 // 20100615 M. Kelsey -- Split constructor to have verbose separately 29 // 20100623 M. Kelsey -- Use old bindingEnergy() wrapper (now returns 30 // G4NucleiProperties::GetBindingEnergy()). 31 // 20100714 M. Kelsey -- Move concrete functions to G4CascadeColliderBase 28 32 29 33 #include "G4VCascadeCollider.hh" 30 #include "G4HadTmpUtil.hh"31 #include "G4InteractionCase.hh"32 #include "G4InuclElementaryParticle.hh"33 #include "G4InuclNuclei.hh"34 #include "G4InuclSpecialFunctions.hh"35 #include "G4NucleiProperties.hh"36 34 #include "G4ios.hh" 37 38 using namespace G4InuclSpecialFunctions;39 35 40 36 … … 43 39 G4VCascadeCollider::G4VCascadeCollider(const char* name, G4int verbose) 44 40 : theName(name), verboseLevel(verbose) { 45 if (verbose > 3) G4cout << " >>> " << theName << " ctor " << G4endl;41 if (verboseLevel) G4cout << " >>> " << theName << " ctor " << G4endl; 46 42 } 47 48 49 // Both bullet and target must be hadrons or leptons for this to work50 51 G4bool G4VCascadeCollider::useEPCollider(G4InuclParticle* bullet,52 G4InuclParticle* target) const {53 return (dynamic_cast<G4InuclElementaryParticle*>(bullet) &&54 dynamic_cast<G4InuclElementaryParticle*>(target));55 }56 57 58 // Decide wether nuclear fragment is candidate for G4BigBanger59 60 G4bool G4VCascadeCollider::explosion(G4InuclNuclei* target) const {61 if (verboseLevel > 3) {62 G4cout << " >>> " << theName << "::explosion" << G4endl;63 }64 65 const G4double a_cut = 20.0;66 const G4double be_cut = 3.0;67 68 G4double a = target->getA();69 G4double z = target->getZ();70 G4double eexs = target->getExitationEnergy();71 72 // Only small fragments with high excitations can explode73 G4bool explo = ((a <= a_cut) &&74 (eexs >= be_cut * G4NucleiProperties::GetBindingEnergy(G4lrint(a), G4lrint(z)))75 );76 77 return explo;78 }79 80 81 // Decide whether bullet-target interaction is candidate for cascade82 83 G4bool84 G4VCascadeCollider::inelasticInteractionPossible(G4InuclParticle* bullet,85 G4InuclParticle* target,86 G4double ekin) const {87 if (verboseLevel > 3) {88 G4cout << " >>> " << theName << "::inelasticInteractionPossible" << G4endl;89 }90 91 // If hadron-hadron collision, defer to ElementaryParticleCollider92 if (useEPCollider(bullet, target)) return true;93 94 // See which one of the two (or both) is a nucleus, get properties95 // FIXME: Should set a = baryon() for both, but that's not in base96 G4InuclNuclei* nuclei_bullet = dynamic_cast<G4InuclNuclei*>(bullet);97 G4double ab = nuclei_bullet ? nuclei_bullet->getA() : 1; // FIXME98 G4double zb = nuclei_bullet ? nuclei_bullet->getZ() : bullet->getCharge();99 100 G4InuclNuclei* nuclei_target = dynamic_cast<G4InuclNuclei*>(target);101 G4double at = nuclei_target ? nuclei_target->getA() : 1; // FIXME102 G4double zt = nuclei_target ? nuclei_target->getZ() : target->getCharge();103 104 // VCOL (Coulomb barrier) used for testing if elastic collision necessary105 const G4double coeff = 0.001 * 1.2;106 107 G4double VCOL = coeff * zt * zb / (G4cbrt(at) + G4cbrt(ab));108 109 G4bool possible = true; // Force inelastic; should be (ekin >= VCOL)110 111 if (verboseLevel > 3) {112 G4cout << " VCOL: " << VCOL << " ekin: " << ekin << " inelastic possible: "113 << possible << G4endl;114 }115 116 return possible;117 }
Note: See TracChangeset
for help on using the changeset viewer.