Ignore:
Timestamp:
Jun 18, 2010, 11:42:07 AM (14 years ago)
Author:
garnier
Message:

update geant4-09-04-beta-cand-01 interfaces-V09-03-09 vis-V09-03-08

File:
1 edited

Legend:

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

    r1007 r1315  
    2323// * acceptance of all terms of the Geant4 Software license.          *
    2424// ********************************************************************
     25// $Id: G4IntraNucleiCascader.cc,v 1.35 2010/05/21 17:56:34 mkelsey Exp $
     26// Geant4 tag: $Name: geant4-09-04-beta-cand-01 $
    2527//
    26 
     28// 20100114  M. Kelsey -- Remove G4CascadeMomentum, use G4LorentzVector directly
     29// 20100307  M. Kelsey -- Bug fix: momentum_out[0] should be momentum_out.e()
     30// 20100309  M. Kelsey -- Eliminate some unnecessary std::pow()
     31// 20100407  M. Kelsey -- Pass "all_particles" as argument to initializeCascad,
     32//              following recent change to G4NucleiModel.
     33// 20100413  M. Kelsey -- Pass G4CollisionOutput by ref to ::collide()
     34// 20100517  M. Kelsey -- Inherit from common base class, make other colliders
     35//              simple data members
     36
     37#include "G4IntraNucleiCascader.hh"
    2738#define RUN
    2839
    29 #include "G4IntraNucleiCascader.hh"
     40#include "G4CascadParticle.hh"
     41#include "G4CollisionOutput.hh"
     42#include "G4ElementaryParticleCollider.hh"
     43#include "G4HadTmpUtil.hh"
    3044#include "G4InuclElementaryParticle.hh"
    3145#include "G4InuclNuclei.hh"
    32 #include "G4LorentzConvertor.hh"
     46#include "G4InuclSpecialFunctions.hh"
     47#include "G4NucleiModel.hh"
     48#include "G4NucleiProperties.hh"
    3349#include "G4ParticleLargerEkin.hh"
    34 #include "G4NucleiModel.hh"
    35 #include "G4CascadParticle.hh"
    3650#include "Randomize.hh"
    3751#include <algorithm>
    3852
     53using namespace G4InuclSpecialFunctions;
     54
     55
    3956typedef std::vector<G4InuclElementaryParticle>::iterator particleIterator;
    4057
    4158G4IntraNucleiCascader::G4IntraNucleiCascader()
    42   : verboseLevel(1) {
     59  : G4VCascadeCollider("G4IntraNucleiCascader"),
     60    theElementaryParticleCollider(new G4ElementaryParticleCollider) {}
     61
     62G4IntraNucleiCascader::~G4IntraNucleiCascader() {
     63  delete theElementaryParticleCollider;
     64}
     65
     66
     67void G4IntraNucleiCascader::collide(G4InuclParticle* bullet,
     68                                    G4InuclParticle* target,
     69                                    G4CollisionOutput& output) {
    4370
    4471  if (verboseLevel > 3) {
    45     G4cout << " >>> G4IntraNucleiCascader::G4IntraNucleiCascader" << G4endl;
    46   }
    47 
    48 }
    49 
    50 G4CollisionOutput G4IntraNucleiCascader::collide(G4InuclParticle* bullet,
    51                                                  G4InuclParticle* target) {
    52 
    53   if (verboseLevel > 3) {
    54     G4cout << " >>> G4IntraNucleiCascader::collide" << G4endl;
     72    G4cout << " >>> G4IntraNucleiCascader::collide inter_case " << inter_case
     73           << G4endl;
    5574  }
    5675
     
    6382    target->printParticle();
    6483  }
    65 
    66   G4CollisionOutput output;
    6784
    6885#ifdef RUN
     
    7390  G4NucleiModel model(tnuclei);
    7491  G4double coulombBarrier = 0.00126*tnuclei->getZ()/
    75                                       (1.+std::pow(tnuclei->getA(),0.333));
    76 
    77   G4CascadeMomentum momentum_in = bullet->getMomentum();
    78 
    79   momentum_in[0] += tnuclei->getMass();
     92                                      (1.+G4cbrt(tnuclei->getA()));
     93
     94  G4LorentzVector momentum_in = bullet->getMomentum();
     95
     96  momentum_in.setE(momentum_in.e()+tnuclei->getMass());
    8097
    8198  G4double ekin_in;
     
    83100  if (verboseLevel > 3) {
    84101    model.printModel();
    85     G4cout << " intitial momentum  E " << momentum_in[0] << " Px " << momentum_in[1]
    86            << " Py " << momentum_in[2] << " Pz " << momentum_in[3] << G4endl;
     102    G4cout << " intitial momentum  E " << momentum_in.e() << " Px "
     103           << momentum_in.x() << " Py " << momentum_in.y() << " Pz "
     104           << momentum_in.z() << G4endl;
    87105  }
    88106
     
    117135      zfin += zb;
    118136
    119       std::pair<std::vector<G4CascadParticle>, std::vector<G4InuclElementaryParticle> >
    120         all_particles = model.initializeCascad(bnuclei, tnuclei);
     137      G4NucleiModel::modelLists all_particles;    // Buffer to receive lists
     138      model.initializeCascad(bnuclei, tnuclei, all_particles);
    121139
    122140      cascad_particles = all_particles.first;
     
    139157
    140158        for (i = 0; i < ihn; i++) theExitonConfiguration.incrementHoles(2);
    141 
    142159        for (i = 0; i < ihz; i++) theExitonConfiguration.incrementHoles(1);
    143160      };
     
    208225                                            (1./KE - 1./coulombBarrier)*
    209226                                         std::sqrt(mass*(coulombBarrier-KE)) );
     227
    210228            if (G4UniformRand() < CBP) {
    211229              output_particles.push_back(currentParticle);
     
    241259    }
    242260
    243     G4CascadeMomentum momentum_out;
     261    G4LorentzVector momentum_out;
    244262    particleIterator ipart;
    245263
    246264    for (ipart = output_particles.begin(); ipart != output_particles.end(); ipart++) {
    247       const G4CascadeMomentum& mom = ipart->getMomentum();
    248 
    249       for (G4int j = 0; j < 4; j++) momentum_out[j] += mom[j];
     265      momentum_out += ipart->getMomentum();
    250266
    251267      zfin -= ipart->getCharge();
     
    260276      G4InuclNuclei outgoing_nuclei(afin, zfin);
    261277      G4double mass = outgoing_nuclei.getMass();
    262       momentum_out[0] += mass;       
    263 
    264       for (int j = 0; j < 4; j++) momentum_out[j] = momentum_in[j] - momentum_out[j];
     278      momentum_out.setE(momentum_out.e()+mass);
     279
     280      momentum_out = momentum_in - momentum_out;
    265281
    266282      if (verboseLevel > 3) {
    267         G4cout << "  Eex + Ekin " << momentum_out[0]  <<  G4endl;
     283        G4cout << "  Eex + Ekin " << momentum_out.e()  <<  G4endl;
    268284      }
    269285
    270       if (momentum_out[0] > 0.0) { // Eex + Ekin > 0.0
    271         G4double pnuc = momentum_out[1] * momentum_out[1] +
    272           momentum_out[2] * momentum_out[2] +
    273           momentum_out[3] * momentum_out[3];
     286      if (momentum_out.e() > 0.0) { // Eex + Ekin > 0.0
     287        G4double pnuc = momentum_out.vect().mag2();
    274288        G4double ekin = std::sqrt(mass * mass + pnuc) - mass;
    275         G4double Eex = 1000.0 * (momentum_out[0] - ekin);
     289        G4double Eex = 1000.0 * (momentum_out.e() - ekin);
    276290
    277291        if (verboseLevel > 3) {
     
    283297          output.addOutgoingParticles(output_particles);
    284298          outgoing_nuclei.setMomentum(momentum_out);
    285           outgoing_nuclei.setEnergy();
    286299          outgoing_nuclei.setExitationEnergy(Eex);
    287300          outgoing_nuclei.setExitonConfiguration(theExitonConfiguration);                                         
    288301          output.addTargetFragment(outgoing_nuclei);
    289302
    290           return output;
     303          return;
    291304        };
    292305      };
     
    296309      if (afin == 1.0) { // recoiling nucleon
    297310
    298         for (int j = 0; j < 4; j++) momentum_out[j] = momentum_in[j] - momentum_out[j];
     311        momentum_out = momentum_in - momentum_out;
    299312
    300313        G4InuclElementaryParticle  last_particle;
     
    314327      output.addOutgoingParticles(output_particles);
    315328
    316       return output;
     329      return;
    317330    };
    318331  };
     
    322335  // special branch to avoid the cascad generation but to get the input for evaporation etc
    323336
    324   G4CascadeMomentum momentum_out;
     337  G4LorentzVector momentum_out;
    325338  G4InuclNuclei outgoing_nuclei(169, 69);
    326339
    327340  outgoing_nuclei.setMomentum(momentum_out);
    328   outgoing_nuclei.setEnergy();
    329341  outgoing_nuclei.setExitationEnergy(150.0);
    330342
     
    334346  output.addTargetFragment(outgoing_nuclei);
    335347
    336   return output;
     348  return;
    337349
    338350  /*
     
    342354    output.addOutgoingParticle(*bparticle);
    343355    output.addTargetFragment(*tnuclei);
    344     return output;
     356    return;
    345357  */
    346358
     
    354366  output.trivialise(bullet, target);
    355367
    356   return output;
     368  return;
    357369}
    358370
     
    374386  if (eexs > eexs_cut) {
    375387    G4double eexs_max0z = 1000.0 * ein / ediv_cut;
    376     G4double dm = bindingEnergy(a, z);
     388    //    G4double dm = bindingEnergy(a, z);
     389    G4double dm = G4NucleiProperties::GetBindingEnergy(G4lrint(a), G4lrint(z));
    377390    G4double eexs_max = eexs_max0z > reason_cut*dm ? eexs_max0z : reason_cut * dm;
    378391
Note: See TracChangeset for help on using the changeset viewer.