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";
140 G4double targMass2 = targMass*targMass;
160 G4double B = sumE2 + targMass2 - Mx2 - plab2;
164 G4double c = B*B - 4*sumE2*targMass2;
170 det = std::sqrt(det2);
171 qLong = (-b - det)/2./a;
172 eRetard = std::sqrt((plab-qLong)*(plab-qLong)+Mx2);
188 G4double eTarg = std::sqrt( targMass2 + pTarg.mag2());
197 lvRetard.boost(-bst);
201 G4double tMax = 4.0*momentumCMS*momentumCMS;
211 if( cost > 1.0 || cost < -1.0 )
218 sint = std::sqrt( (1.0-cost)*(1.0+cost) );
220 G4ThreeVector v1( sint*std::cos(phi), sint*std::sin(phi), cost);
224 G4LorentzVector lvRes( v1.x(),v1.y(),v1.z(), std::sqrt( momentumCMS*momentumCMS + Mx2));
230 G4double eRecoil = lvTarg.e() - targMass;
239 else if ( Z == 2 && A == 3 ) { recoilDef =
G4He3::He3(); }
249 else if( eRecoil > 0.0 )
271 for(
unsigned int i = 0; i < ddktv->size(); i++ )
275 ddktv->operator[](i)->Get4Momentum());
280 delete ddktv->operator[](i);
297 for( i = 0; i < 60; i++)
299 if( rand >=
fProbMx[i][1] )
break;
302 else if(i >= 59) Mx =
fProbMx[59][0];
345 else if ( Mx <= 1.55 )
430 if ( myResonance ) Mx = myResonance->
GetPDGMass();
447 for( i = 0; i < 23; ++i)
452 else if( i >= 22 ) b =
fMxBdata[22][1];
455 if( eTkin > rTkin ) b *= 1. +
G4Log(eTkin/rTkin);
473 {1.000000e+00, 1.000000e+00},
474 {1.025000e+00, 1.000000e+00},
475 {1.050000e+00, 1.000000e+00},
476 {1.075000e+00, 1.000000e+00},
477 {1.100000e+00, 9.975067e-01},
478 {1.125000e+00, 9.934020e-01},
479 {1.150000e+00, 9.878333e-01},
480 {1.175000e+00, 9.805002e-01},
481 {1.200000e+00, 9.716846e-01},
482 {1.225000e+00, 9.604761e-01},
483 {1.250000e+00, 9.452960e-01},
484 {1.275000e+00, 9.265278e-01},
485 {1.300000e+00, 9.053632e-01},
486 {1.325000e+00, 8.775566e-01},
487 {1.350000e+00, 8.441969e-01},
488 {1.375000e+00, 8.076336e-01},
489 {1.400000e+00, 7.682520e-01},
490 {1.425000e+00, 7.238306e-01},
491 {1.450000e+00, 6.769306e-01},
492 {1.475000e+00, 6.303898e-01},
493 {1.500000e+00, 5.824632e-01},
494 {1.525000e+00, 5.340696e-01},
495 {1.550000e+00, 4.873736e-01},
496 {1.575000e+00, 4.422901e-01},
497 {1.600000e+00, 3.988443e-01},
498 {1.625000e+00, 3.583727e-01},
499 {1.650000e+00, 3.205405e-01},
500 {1.675000e+00, 2.856655e-01},
501 {1.700000e+00, 2.537508e-01},
502 {1.725000e+00, 2.247863e-01},
503 {1.750000e+00, 1.985798e-01},
504 {1.775000e+00, 1.750252e-01},
505 {1.800000e+00, 1.539777e-01},
506 {1.825000e+00, 1.352741e-01},
507 {1.850000e+00, 1.187157e-01},
508 {1.875000e+00, 1.040918e-01},
509 {1.900000e+00, 9.118422e-02},
510 {1.925000e+00, 7.980909e-02},
511 {1.950000e+00, 6.979378e-02},
512 {1.975000e+00, 6.097771e-02},
513 {2.000000e+00, 5.322122e-02},
514 {2.025000e+00, 4.639628e-02},
515 {2.050000e+00, 4.039012e-02},
516 {2.075000e+00, 3.510275e-02},
517 {2.100000e+00, 3.044533e-02},
518 {2.125000e+00, 2.633929e-02},
519 {2.150000e+00, 2.271542e-02},
520 {2.175000e+00, 1.951295e-02},
521 {2.200000e+00, 1.667873e-02},
522 {2.225000e+00, 1.416633e-02},
523 {2.250000e+00, 1.193533e-02},
524 {2.275000e+00, 9.950570e-03},
525 {2.300000e+00, 8.181515e-03},
526 {2.325000e+00, 6.601664e-03},
527 {2.350000e+00, 5.188025e-03},
528 {2.375000e+00, 3.920655e-03},
529 {2.400000e+00, 2.782246e-03},
530 {2.425000e+00, 1.757765e-03},
531 {2.450000e+00, 8.341435e-04},
532 {2.475000e+00, 0.000000e+00}
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
CLHEP::Hep3Vector G4ThreeVector
G4KineticTrackVector * Decay()
std::vector< ExP01TrackerHit * > a
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
const char * name(G4int ptype)
double B(double temperature)
static const G4double fProbMx[60][2]
const G4String & GetModelName() const
G4bool IsApplicable(const G4HadProjectile &thePrimary, G4Nucleus &theNucleus)
static G4KaonMinus * KaonMinus()
static constexpr double twopi
void SetStatusChange(G4HadFinalStateStatus aS)
G4IonTable * GetIonTable() const
double A(double temperature)
ParticleList decay(Cluster *const c)
Carries out a cluster decay.
const G4ParticleDefinition * GetDefinition() const
G4double SampleMx(const G4HadProjectile *aParticle)
G4double GetKineticEnergy() const
static G4Triton * Triton()
static G4Proton * Proton()
static G4PionPlus * PionPlus()
static G4Neutron * Neutron()
void ModelDescription(std::ostream &outFile) const
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()
G4double SampleT(const G4HadProjectile *aParticle, G4double Mx)
static constexpr double GeV
G4HadFinalState theParticleChange
void SetLocalEnergyDeposit(G4double aE)
static constexpr double MeV
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)