Ignore:
Timestamp:
Nov 5, 2010, 3:45:55 PM (14 years ago)
Author:
garnier
Message:

update ti head

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/hadronic/models/cascade/cascade/src/G4VCascadeCollider.cc

    r1337 r1340  
    2323// * acceptance of all terms of the Geant4 Software license.          *
    2424// ********************************************************************
     25// $Id: G4VCascadeCollider.cc,v 1.4 2010/07/14 15:41:13 mkelsey Exp $
     26// Geant4 tag: $Name: hadr-casc-V09-03-85 $
    2527//
    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
    2832
    2933#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"
    3634#include "G4ios.hh"
    37 
    38 using namespace G4InuclSpecialFunctions;
    3935
    4036
     
    4339G4VCascadeCollider::G4VCascadeCollider(const char* name, G4int verbose)
    4440  : theName(name), verboseLevel(verbose) {
    45   if (verbose > 3) G4cout << " >>> " << theName << " ctor " << G4endl;
     41  if (verboseLevel) G4cout << " >>> " << theName << " ctor " << G4endl;
    4642}
    47 
    48 
    49 // Both bullet and target must be hadrons or leptons for this to work
    50 
    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 G4BigBanger
    59 
    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 explode
    73   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 cascade
    82 
    83 G4bool
    84 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 ElementaryParticleCollider
    92   if (useEPCollider(bullet, target)) return true;
    93 
    94   // See which one of the two (or both) is a nucleus, get properties
    95   // FIXME:  Should set a = baryon() for both, but that's not in base
    96   G4InuclNuclei* nuclei_bullet = dynamic_cast<G4InuclNuclei*>(bullet);
    97   G4double ab = nuclei_bullet ? nuclei_bullet->getA() : 1;      // FIXME
    98   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;      // FIXME
    102   G4double zt = nuclei_target ? nuclei_target->getZ() : target->getCharge();
    103  
    104   // VCOL (Coulomb barrier) used for testing if elastic collision necessary
    105   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.