Changeset 1315 for trunk/source/processes/hadronic/models/cascade/cascade/src/G4IntraNucleiCascader.cc
- Timestamp:
- Jun 18, 2010, 11:42:07 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/cascade/cascade/src/G4IntraNucleiCascader.cc
r1007 r1315 23 23 // * acceptance of all terms of the Geant4 Software license. * 24 24 // ******************************************************************** 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 $ 25 27 // 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" 27 38 #define RUN 28 39 29 #include "G4IntraNucleiCascader.hh" 40 #include "G4CascadParticle.hh" 41 #include "G4CollisionOutput.hh" 42 #include "G4ElementaryParticleCollider.hh" 43 #include "G4HadTmpUtil.hh" 30 44 #include "G4InuclElementaryParticle.hh" 31 45 #include "G4InuclNuclei.hh" 32 #include "G4LorentzConvertor.hh" 46 #include "G4InuclSpecialFunctions.hh" 47 #include "G4NucleiModel.hh" 48 #include "G4NucleiProperties.hh" 33 49 #include "G4ParticleLargerEkin.hh" 34 #include "G4NucleiModel.hh"35 #include "G4CascadParticle.hh"36 50 #include "Randomize.hh" 37 51 #include <algorithm> 38 52 53 using namespace G4InuclSpecialFunctions; 54 55 39 56 typedef std::vector<G4InuclElementaryParticle>::iterator particleIterator; 40 57 41 58 G4IntraNucleiCascader::G4IntraNucleiCascader() 42 : verboseLevel(1) { 59 : G4VCascadeCollider("G4IntraNucleiCascader"), 60 theElementaryParticleCollider(new G4ElementaryParticleCollider) {} 61 62 G4IntraNucleiCascader::~G4IntraNucleiCascader() { 63 delete theElementaryParticleCollider; 64 } 65 66 67 void G4IntraNucleiCascader::collide(G4InuclParticle* bullet, 68 G4InuclParticle* target, 69 G4CollisionOutput& output) { 43 70 44 71 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; 55 74 } 56 75 … … 63 82 target->printParticle(); 64 83 } 65 66 G4CollisionOutput output;67 84 68 85 #ifdef RUN … … 73 90 G4NucleiModel model(tnuclei); 74 91 G4double coulombBarrier = 0.00126*tnuclei->getZ()/ 75 (1.+ std::pow(tnuclei->getA(),0.333));76 77 G4 CascadeMomentummomentum_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()); 80 97 81 98 G4double ekin_in; … … 83 100 if (verboseLevel > 3) { 84 101 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; 87 105 } 88 106 … … 117 135 zfin += zb; 118 136 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); 121 139 122 140 cascad_particles = all_particles.first; … … 139 157 140 158 for (i = 0; i < ihn; i++) theExitonConfiguration.incrementHoles(2); 141 142 159 for (i = 0; i < ihz; i++) theExitonConfiguration.incrementHoles(1); 143 160 }; … … 208 225 (1./KE - 1./coulombBarrier)* 209 226 std::sqrt(mass*(coulombBarrier-KE)) ); 227 210 228 if (G4UniformRand() < CBP) { 211 229 output_particles.push_back(currentParticle); … … 241 259 } 242 260 243 G4 CascadeMomentummomentum_out;261 G4LorentzVector momentum_out; 244 262 particleIterator ipart; 245 263 246 264 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(); 250 266 251 267 zfin -= ipart->getCharge(); … … 260 276 G4InuclNuclei outgoing_nuclei(afin, zfin); 261 277 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; 265 281 266 282 if (verboseLevel > 3) { 267 G4cout << " Eex + Ekin " << momentum_out [0]<< G4endl;283 G4cout << " Eex + Ekin " << momentum_out.e() << G4endl; 268 284 } 269 285 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(); 274 288 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); 276 290 277 291 if (verboseLevel > 3) { … … 283 297 output.addOutgoingParticles(output_particles); 284 298 outgoing_nuclei.setMomentum(momentum_out); 285 outgoing_nuclei.setEnergy();286 299 outgoing_nuclei.setExitationEnergy(Eex); 287 300 outgoing_nuclei.setExitonConfiguration(theExitonConfiguration); 288 301 output.addTargetFragment(outgoing_nuclei); 289 302 290 return output;303 return; 291 304 }; 292 305 }; … … 296 309 if (afin == 1.0) { // recoiling nucleon 297 310 298 for (int j = 0; j < 4; j++) momentum_out[j] = momentum_in[j] - momentum_out[j];311 momentum_out = momentum_in - momentum_out; 299 312 300 313 G4InuclElementaryParticle last_particle; … … 314 327 output.addOutgoingParticles(output_particles); 315 328 316 return output;329 return; 317 330 }; 318 331 }; … … 322 335 // special branch to avoid the cascad generation but to get the input for evaporation etc 323 336 324 G4 CascadeMomentummomentum_out;337 G4LorentzVector momentum_out; 325 338 G4InuclNuclei outgoing_nuclei(169, 69); 326 339 327 340 outgoing_nuclei.setMomentum(momentum_out); 328 outgoing_nuclei.setEnergy();329 341 outgoing_nuclei.setExitationEnergy(150.0); 330 342 … … 334 346 output.addTargetFragment(outgoing_nuclei); 335 347 336 return output;348 return; 337 349 338 350 /* … … 342 354 output.addOutgoingParticle(*bparticle); 343 355 output.addTargetFragment(*tnuclei); 344 return output;356 return; 345 357 */ 346 358 … … 354 366 output.trivialise(bullet, target); 355 367 356 return output;368 return; 357 369 } 358 370 … … 374 386 if (eexs > eexs_cut) { 375 387 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)); 377 390 G4double eexs_max = eexs_max0z > reason_cut*dm ? eexs_max0z : reason_cut * dm; 378 391
Note: See TracChangeset
for help on using the changeset viewer.