63 <<
" string model and a stage to de-excite the excited nuclear fragment."
65 <<
"The string model simulates the interaction of\n"
66 <<
"an incident hadron with a nucleus, forming \n"
67 <<
"excited strings, decays these strings into hadrons,\n"
68 <<
"and leaves an excited nucleus. \n"
69 <<
"<p>The string model:\n";
138 G4double targMass2 = targMass*targMass;
158 G4double B = sumE2 + targMass2 - Mx2 - plab2;
162 G4double c = B*B - 4*sumE2*targMass2;
168 det = std::sqrt(det2);
169 qLong = (-b - det)/2./a;
170 eRetard = std::sqrt((plab-qLong)*(plab-qLong)+Mx2);
186 G4double eTarg = std::sqrt( targMass2 + pTarg.mag2());
195 lvRetard.boost(-bst);
199 G4double tMax = 4.0*momentumCMS*momentumCMS;
209 if( cost > 1.0 || cost < -1.0 )
216 sint = std::sqrt( (1.0-cost)*(1.0+cost) );
218 G4ThreeVector v1( sint*std::cos(phi), sint*std::sin(phi), cost);
222 G4LorentzVector lvRes( v1.x(),v1.y(),v1.z(), std::sqrt( momentumCMS*momentumCMS + Mx2));
228 G4double eRecoil = lvTarg.e() - targMass;
237 else if ( Z == 2 && A == 3 ) { recoilDef =
G4He3::He3(); }
247 else if( eRecoil > 0.0 )
261 for(
unsigned int i = 0; i < ddktv->size(); i++ )
265 ddktv->operator[](i)->Get4Momentum());
269 delete ddktv->operator[](i);
286 for( i = 0; i < 60; i++)
288 if( rand >=
fProbMx[i][1] )
break;
291 else if(i >= 59) Mx =
fProbMx[59][0];
327 else if ( Mx <= 1.55 )
415 for( i = 0; i < 23; ++i)
420 else if( i >= 22 ) b =
fMxBdata[22][1];
439 {1.000000e+00, 1.000000e+00},
440 {1.025000e+00, 1.000000e+00},
441 {1.050000e+00, 1.000000e+00},
442 {1.075000e+00, 1.000000e+00},
443 {1.100000e+00, 9.975067e-01},
444 {1.125000e+00, 9.934020e-01},
445 {1.150000e+00, 9.878333e-01},
446 {1.175000e+00, 9.805002e-01},
447 {1.200000e+00, 9.716846e-01},
448 {1.225000e+00, 9.604761e-01},
449 {1.250000e+00, 9.452960e-01},
450 {1.275000e+00, 9.265278e-01},
451 {1.300000e+00, 9.053632e-01},
452 {1.325000e+00, 8.775566e-01},
453 {1.350000e+00, 8.441969e-01},
454 {1.375000e+00, 8.076336e-01},
455 {1.400000e+00, 7.682520e-01},
456 {1.425000e+00, 7.238306e-01},
457 {1.450000e+00, 6.769306e-01},
458 {1.475000e+00, 6.303898e-01},
459 {1.500000e+00, 5.824632e-01},
460 {1.525000e+00, 5.340696e-01},
461 {1.550000e+00, 4.873736e-01},
462 {1.575000e+00, 4.422901e-01},
463 {1.600000e+00, 3.988443e-01},
464 {1.625000e+00, 3.583727e-01},
465 {1.650000e+00, 3.205405e-01},
466 {1.675000e+00, 2.856655e-01},
467 {1.700000e+00, 2.537508e-01},
468 {1.725000e+00, 2.247863e-01},
469 {1.750000e+00, 1.985798e-01},
470 {1.775000e+00, 1.750252e-01},
471 {1.800000e+00, 1.539777e-01},
472 {1.825000e+00, 1.352741e-01},
473 {1.850000e+00, 1.187157e-01},
474 {1.875000e+00, 1.040918e-01},
475 {1.900000e+00, 9.118422e-02},
476 {1.925000e+00, 7.980909e-02},
477 {1.950000e+00, 6.979378e-02},
478 {1.975000e+00, 6.097771e-02},
479 {2.000000e+00, 5.322122e-02},
480 {2.025000e+00, 4.639628e-02},
481 {2.050000e+00, 4.039012e-02},
482 {2.075000e+00, 3.510275e-02},
483 {2.100000e+00, 3.044533e-02},
484 {2.125000e+00, 2.633929e-02},
485 {2.150000e+00, 2.271542e-02},
486 {2.175000e+00, 1.951295e-02},
487 {2.200000e+00, 1.667873e-02},
488 {2.225000e+00, 1.416633e-02},
489 {2.250000e+00, 1.193533e-02},
490 {2.275000e+00, 9.950570e-03},
491 {2.300000e+00, 8.181515e-03},
492 {2.325000e+00, 6.601664e-03},
493 {2.350000e+00, 5.188025e-03},
494 {2.375000e+00, 3.920655e-03},
495 {2.400000e+00, 2.782246e-03},
496 {2.425000e+00, 1.757765e-03},
497 {2.450000e+00, 8.341435e-04},
498 {2.475000e+00, 0.000000e+00}
static G4double GetNuclearMass(const G4double A, const G4double Z)
CLHEP::Hep3Vector G4ThreeVector
G4KineticTrackVector * Decay()
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static const G4double fProbMx[60][2]
const G4String & GetModelName() const
G4bool IsApplicable(const G4HadProjectile &thePrimary, G4Nucleus &theNucleus)
static G4KaonMinus * KaonMinus()
void SetStatusChange(G4HadFinalStateStatus aS)
G4IonTable * GetIonTable() const
const G4ParticleDefinition * GetDefinition() const
G4double SampleMx(const G4HadProjectile *aParticle)
G4double SampleT(G4double Mx)
G4double GetKineticEnergy() const
static G4Triton * Triton()
static G4Proton * Proton()
static G4PionPlus * PionPlus()
static G4Neutron * Neutron()
void ModelDescription(std::ostream &outFile) const
static const G4double A[nN]
const G4LorentzVector & Get4Momentum() const
static G4Deuteron * Deuteron()
G4double G4Log(G4double x)
void SetEnergyChange(G4double anEnergy)
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
G4LMsdGenerator(const G4String &name="LMsdGenerator")
static G4PionMinus * PionMinus()
G4HadFinalState theParticleChange
void SetLocalEnergyDeposit(G4double aE)
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
static G4KaonPlus * KaonPlus()
G4ThreeVector G4ParticleMomentum
void SetMomentumChange(const G4ThreeVector &aV)
static const G4double fMxBdata[23][2]
G4double GetTotalMomentum() const
CLHEP::HepLorentzVector G4LorentzVector
G4HadFinalState * ApplyYourself(const G4HadProjectile &thePrimary, G4Nucleus &theNucleus)