Geant4-11
Public Member Functions | Data Fields | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
G4LundStringFragmentation Class Reference

#include <G4LundStringFragmentation.hh>

Inheritance diagram for G4LundStringFragmentation:
G4VLongitudinalStringDecay G4HadronicInteraction

Public Member Functions

void ActivateFor (const G4Element *anElement)
 
void ActivateFor (const G4Material *aMaterial)
 
void AddNewParticles ()
 
G4HadFinalStateApplyYourself (const G4HadProjectile &, G4Nucleus &) final
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
void DeActivateFor (const G4Element *anElement)
 
void DeActivateFor (const G4Material *aMaterial)
 
void EraseNewParticles ()
 
virtual G4KineticTrackVectorFragmentString (const G4ExcitedString &theString)
 
 G4LundStringFragmentation ()
 
virtual std::pair< G4double, G4doubleGetEnergyMomentumCheckLevels () const
 
virtual const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const
 
G4double GetMaxEnergy () const
 
G4double GetMaxEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
G4double GetMinEnergy () const
 
G4double GetMinEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
const G4StringGetModelName () const
 
G4double GetRecoilEnergyThreshold () const
 
G4int GetVerboseLevel () const
 
virtual void InitialiseModel ()
 
virtual G4bool IsApplicable (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
G4bool IsBlocked (const G4Element *anElement) const
 
G4bool IsBlocked (const G4Material *aMaterial) const
 
virtual void ModelDescription (std::ostream &outFile) const
 
G4bool operator!= (const G4HadronicInteraction &right) const =delete
 
G4bool operator== (const G4HadronicInteraction &right) const =delete
 
virtual G4double SampleInvariantT (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
G4int SampleQuarkFlavor (void)
 
G4ThreeVector SampleQuarkPt (G4double ptMax=-1.)
 
void SetDiquarkBreakProbability (G4double aValue)
 
void SetDiquarkSuppression (G4double aValue)
 
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
 
void SetMaxEnergy (const G4double anEnergy)
 
void SetMaxEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMaxEnergy (G4double anEnergy, const G4Material *aMaterial)
 
void SetMinEnergy (G4double anEnergy)
 
void SetMinEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMinEnergy (G4double anEnergy, const G4Material *aMaterial)
 
void SetMinimalStringMass (const G4FragmentingString *const string)
 
void SetMinimalStringMass2 (const G4double aValue)
 
void SetMinMasses ()
 
void SetProbBBbar (G4double aValue)
 
void SetProbCCbar (G4double aValue)
 
void SetProbEta_b (G4double aValue)
 
void SetProbEta_c (G4double aValue)
 
void SetRecoilEnergyThreshold (G4double val)
 
void SetScalarMesonMixings (std::vector< G4double > aVector)
 
void SetSigmaTransverseMomentum (G4double aQT)
 
void SetSpinThreeHalfBarionProbability (G4double aValue)
 
void SetStrangenessSuppression (G4double aValue)
 
void SetStringTensionParameter (G4double aValue)
 
void SetVectorMesonMixings (std::vector< G4double > aVector)
 
void SetVectorMesonProbability (G4double aValue)
 
void SetVerboseLevel (G4int value)
 
virtual ~G4LundStringFragmentation ()
 

Data Fields

G4int Baryon [5][5][5][4]
 
G4double BaryonWeight [5][5][5][4]
 
G4int DecayQuark
 
G4ParticleDefinitionFS_LeftHadron [350]
 
G4ParticleDefinitionFS_RightHadron [350]
 
G4double FS_Weight [350]
 
G4double Mass_of_b_quark
 
G4double Mass_of_c_quark
 
G4double Mass_of_light_quark
 
G4double Mass_of_s_quark
 
G4double Mass_of_string_junction
 
G4int Meson [5][5][7]
 
G4double MesonWeight [5][5][7]
 
G4double MinimalStringMass
 
G4double MinimalStringMass2
 
G4double minMassQDiQStr [5][5][5]
 
G4double minMassQQbarStr [5][5]
 
G4int NewQuark
 
G4int NumberOf_FS
 
G4double Prob_QQbar [5]
 
G4int Qcharge [5]
 

Protected Types

typedef G4ParticleDefinition *(G4HadronBuilder::* Pcreate) (G4ParticleDefinition *, G4ParticleDefinition *)
 
typedef std::pair< G4ParticleDefinition *, G4ParticleDefinition * > pDefPair
 

Protected Member Functions

void Block ()
 
void CalculateHadronTimePosition (G4double theInitialStringMass, G4KineticTrackVector *)
 
void ConstructParticle ()
 
G4ExcitedStringCopyExcited (const G4ExcitedString &string)
 
G4ParticleDefinitionCreateHadron (G4int id1, G4int id2, G4bool theGivenSpin, G4int theSpin)
 
pDefPair CreatePartonPair (G4int NeedParticle, G4bool AllowDiquarks=true)
 
G4ParticleDefinitionFindParticle (G4int Encoding)
 
G4int GetClusterLoopInterrupt ()
 
G4double GetDiquarkBreakProb ()
 
G4double GetDiquarkSuppress ()
 
G4double GetMassCut ()
 
G4double GetProbBBbar ()
 
G4double GetProbCCbar ()
 
G4double GetProbEta_b ()
 
G4double GetProbEta_c ()
 
G4double GetStrangeSuppress ()
 
G4double GetStringTensionParameter ()
 
G4bool IsBlocked () const
 
G4double PossibleHadronMass (const G4FragmentingString *const string, Pcreate build=0, pDefPair *pdefs=0)
 
G4KineticTrackVectorProduceOneHadron (const G4ExcitedString *const theString)
 
virtual G4ParticleDefinitionQuarkSplitup (G4ParticleDefinition *decay, G4ParticleDefinition *&created)
 
virtual void SetMassCut (G4double aValue)
 
void SetModelName (const G4String &nam)
 

Protected Attributes

G4int ClusterLoopInterrupt
 
G4double DiquarkBreakProb
 
G4double DiquarkSuppress
 
G4HadronBuilderhadronizer
 
G4bool isBlocked
 
G4double Kappa
 
G4double MassCut
 
G4double MaxMass
 
std::vector< G4ParticleDefinition * > NewParticles
 
G4bool PastInitPhase
 
G4double ProbBBbar
 
G4double ProbCB
 
G4double ProbCCbar
 
G4double ProbEta_b
 
G4double ProbEta_c
 
G4double pspin_barion
 
G4double pspin_meson
 
std::vector< G4doublescalarMesonMix
 
G4double SigmaQT
 
G4double StrangeSuppress
 
G4int StringLoopInterrupt
 
G4double theMaxEnergy
 
G4double theMinEnergy
 
G4HadFinalState theParticleChange
 
std::vector< G4doublevectorMesonMix
 
G4int verboseLevel
 

Private Member Functions

G4bool Diquark_AntiDiquark_aboveThreshold_lastSplitting (G4FragmentingString *&string, G4ParticleDefinition *&LeftHadron, G4ParticleDefinition *&RightHadron)
 
G4bool Diquark_AntiDiquark_belowThreshold_lastSplitting (G4FragmentingString *&string, G4ParticleDefinition *&LeftHadron, G4ParticleDefinition *&RightHadron)
 
virtual G4ParticleDefinitionDiQuarkSplitup (G4ParticleDefinition *decay, G4ParticleDefinition *&created)
 
 G4LundStringFragmentation (const G4LundStringFragmentation &right)
 
virtual G4double GetLightConeZ (G4double zmin, G4double zmax, G4int PartonEncoding, G4ParticleDefinition *pHadron, G4double Px, G4double Py)
 
virtual G4bool IsItFragmentable (const G4FragmentingString *const string)
 
G4double lambda (G4double s, G4double m1_Sqr, G4double m2_Sqr)
 
G4bool Loop_toFragmentString (const G4ExcitedString &theStringInCMS, G4KineticTrackVector *&LeftVector, G4KineticTrackVector *&RightVector)
 
G4bool operator!= (const G4LundStringFragmentation &right) const
 
const G4LundStringFragmentationoperator= (const G4LundStringFragmentation &right)
 
G4bool operator== (const G4LundStringFragmentation &right) const
 
G4bool Quark_AntiQuark_lastSplitting (G4FragmentingString *&string, G4ParticleDefinition *&LeftHadron, G4ParticleDefinition *&RightHadron)
 
G4bool Quark_Diquark_lastSplitting (G4FragmentingString *&string, G4ParticleDefinition *&LeftHadron, G4ParticleDefinition *&RightHadron)
 
virtual void Sample4Momentum (G4LorentzVector *Mom, G4double Mass, G4LorentzVector *AntiMom, G4double AntiMass, G4double InitialMass)
 
G4int SampleState (void)
 
virtual G4LorentzVectorSplitEandP (G4ParticleDefinition *pHadron, G4FragmentingString *string, G4FragmentingString *newString)
 
virtual G4bool SplitLast (G4FragmentingString *string, G4KineticTrackVector *LeftVector, G4KineticTrackVector *RightVector)
 
virtual G4KineticTrackSplitup (G4FragmentingString *string, G4FragmentingString *&newString)
 
virtual G4bool StopFragmenting (const G4FragmentingString *const string)
 

Private Attributes

std::pair< G4double, G4doubleepCheckLevels
 
G4double recoilEnergyThreshold
 
G4HadronicInteractionRegistryregistry
 
std::vector< const G4Material * > theBlockedList
 
std::vector< const G4Element * > theBlockedListElements
 
std::vector< std::pair< G4double, const G4Material * > > theMaxEnergyList
 
std::vector< std::pair< G4double, const G4Element * > > theMaxEnergyListElements
 
std::vector< std::pair< G4double, const G4Material * > > theMinEnergyList
 
std::vector< std::pair< G4double, const G4Element * > > theMinEnergyListElements
 
G4String theModelName
 
G4double Tmt
 

Detailed Description

Definition at line 41 of file G4LundStringFragmentation.hh.

Member Typedef Documentation

◆ Pcreate

typedef G4ParticleDefinition *(G4HadronBuilder::* G4VLongitudinalStringDecay::Pcreate) (G4ParticleDefinition *, G4ParticleDefinition *)
protectedinherited

Definition at line 86 of file G4VLongitudinalStringDecay.hh.

◆ pDefPair

Definition at line 83 of file G4VLongitudinalStringDecay.hh.

Constructor & Destructor Documentation

◆ G4LundStringFragmentation() [1/2]

G4LundStringFragmentation::G4LundStringFragmentation ( )

Definition at line 49 of file G4LundStringFragmentation.cc.

50 : G4VLongitudinalStringDecay("LundStringFragmentation")
51{
52 SetMassCut(210.*MeV); // Mpi + Delta
53 // For ProduceOneHadron it is required
54 // that no one pi-meson can be produced.
55 SigmaQT = 0.435 * GeV;
56 Tmt = 190.0 * MeV;
59 SetStrangenessSuppression((1.0 - 0.12)/2.0);
61
62 // Check if charmed and bottom hadrons are enabled: if this is the case, then
63 // set the non-zero probabilities for c-cbar and b-bbar creation from the vacuum,
64 // else set them to 0.0. If these probabilities are/aren't zero then charmed or bottom
65 // hadrons can't/can be created during the string fragmentation of ordinary
66 // (i.e. not heavy) projectile hadron nuclear reactions.
67 if ( G4HadronicParameters::Instance()->EnableBCParticles() ) {
68 SetProbCCbar(0.005); // According to O.I. Piskunova Yad. Fiz. 56 (1993) 1094
69 SetProbBBbar(5.0e-5); // According to O.I. Piskunova Yad. Fiz. 56 (1993) 1094
70 } else {
71 SetProbCCbar(0.0);
72 SetProbBBbar(0.0);
73 }
74
75 SetMinMasses(); // For treating of small string decays
76}
static constexpr double fermi
Definition: G4SIunits.hh:83
static constexpr double GeV
Definition: G4SIunits.hh:203
static constexpr double MeV
Definition: G4SIunits.hh:200
static G4HadronicParameters * Instance()
virtual void SetMassCut(G4double aValue)
void SetDiquarkSuppression(G4double aValue)
void SetStrangenessSuppression(G4double aValue)
void SetDiquarkBreakProbability(G4double aValue)
void SetStringTensionParameter(G4double aValue)
G4VLongitudinalStringDecay(const G4String &name="StringDecay")

References fermi, GeV, G4HadronicParameters::Instance(), MeV, G4VLongitudinalStringDecay::SetDiquarkBreakProbability(), G4VLongitudinalStringDecay::SetDiquarkSuppression(), G4VLongitudinalStringDecay::SetMassCut(), G4VLongitudinalStringDecay::SetMinMasses(), G4VLongitudinalStringDecay::SetProbBBbar(), G4VLongitudinalStringDecay::SetProbCCbar(), G4VLongitudinalStringDecay::SetStrangenessSuppression(), G4VLongitudinalStringDecay::SetStringTensionParameter(), G4VLongitudinalStringDecay::SigmaQT, and Tmt.

◆ ~G4LundStringFragmentation()

G4LundStringFragmentation::~G4LundStringFragmentation ( )
virtual

Definition at line 1347 of file G4LundStringFragmentation.cc.

1348{}

◆ G4LundStringFragmentation() [2/2]

G4LundStringFragmentation::G4LundStringFragmentation ( const G4LundStringFragmentation right)
private

Member Function Documentation

◆ ActivateFor() [1/2]

void G4HadronicInteraction::ActivateFor ( const G4Element anElement)
inlineinherited

◆ ActivateFor() [2/2]

void G4HadronicInteraction::ActivateFor ( const G4Material aMaterial)
inlineinherited

◆ AddNewParticles()

void G4VLongitudinalStringDecay::AddNewParticles ( )
inherited

◆ ApplyYourself()

G4HadFinalState * G4VLongitudinalStringDecay::ApplyYourself ( const G4HadProjectile ,
G4Nucleus  
)
finalvirtualinherited

Reimplemented from G4HadronicInteraction.

Definition at line 131 of file G4VLongitudinalStringDecay.cc.

132{
133 return nullptr;
134}

◆ Block()

void G4HadronicInteraction::Block ( )
inlineprotectedinherited

◆ BuildPhysicsTable()

void G4HadronicInteraction::BuildPhysicsTable ( const G4ParticleDefinition )
virtualinherited

◆ CalculateHadronTimePosition()

void G4VLongitudinalStringDecay::CalculateHadronTimePosition ( G4double  theInitialStringMass,
G4KineticTrackVector Hadrons 
)
protectedinherited

Definition at line 435 of file G4VLongitudinalStringDecay.cc.

437{
438 // `yo-yo` formation time
439 // const G4double kappa = 1.0 * GeV/fermi/4.;
441 for (size_t c1 = 0; c1 < Hadrons->size(); c1++)
442 {
443 G4double SumPz = 0;
444 G4double SumE = 0;
445 for (size_t c2 = 0; c2 < c1; c2++)
446 {
447 SumPz += Hadrons->operator[](c2)->Get4Momentum().pz();
448 SumE += Hadrons->operator[](c2)->Get4Momentum().e();
449 }
450 G4double HadronE = Hadrons->operator[](c1)->Get4Momentum().e();
451 G4double HadronPz = Hadrons->operator[](c1)->Get4Momentum().pz();
452 Hadrons->operator[](c1)->SetFormationTime(
453 (theInitialStringMass - 2.*SumPz + HadronE - HadronPz ) / (2.*kappa) / c_light );
454 G4ThreeVector aPosition( 0, 0,
455 (theInitialStringMass - 2.*SumE - HadronE + HadronPz) / (2.*kappa) );
456 Hadrons->operator[](c1)->SetPosition(aPosition);
457 }
458}
double G4double
Definition: G4Types.hh:83
float c_light
Definition: hepunit.py:256

References source.hepunit::c_light, and G4VLongitudinalStringDecay::GetStringTensionParameter().

Referenced by G4QGSMFragmentation::FragmentString().

◆ ConstructParticle()

void G4VLongitudinalStringDecay::ConstructParticle ( )
protectedinherited

◆ CopyExcited()

G4ExcitedString * G4VLongitudinalStringDecay::CopyExcited ( const G4ExcitedString string)
protectedinherited

Definition at line 326 of file G4VLongitudinalStringDecay.cc.

327{
328 G4Parton *Left=new G4Parton(*in.GetLeftParton());
329 G4Parton *Right=new G4Parton(*in.GetRightParton());
330 return new G4ExcitedString(Left,Right,in.GetDirection());
331}

References G4ExcitedString::GetDirection(), G4ExcitedString::GetLeftParton(), and G4ExcitedString::GetRightParton().

Referenced by G4QGSMFragmentation::FragmentString().

◆ CreateHadron()

G4ParticleDefinition * G4VLongitudinalStringDecay::CreateHadron ( G4int  id1,
G4int  id2,
G4bool  theGivenSpin,
G4int  theSpin 
)
protectedinherited

◆ CreatePartonPair()

G4VLongitudinalStringDecay::pDefPair G4VLongitudinalStringDecay::CreatePartonPair ( G4int  NeedParticle,
G4bool  AllowDiquarks = true 
)
protectedinherited

Definition at line 360 of file G4VLongitudinalStringDecay.cc.

362{
363 // NeedParticle = +1 for Particle, -1 for Antiparticle
364 if ( AllowDiquarks && G4UniformRand() < DiquarkSuppress )
365 {
366 // Create a Diquark - AntiDiquark pair , first in pair is anti to IsParticle
367 #ifdef debug_VStringDecay
368 G4cout<<"VlongSD Create a Diquark - AntiDiquark pair"<<G4endl;
369 #endif
370 G4int q1(0), q2(0), spin(0), PDGcode(0);
371
372 q1 = SampleQuarkFlavor();
373 q2 = SampleQuarkFlavor();
374
375 spin = (q1 != q2 && G4UniformRand() <= 0.5)? 1 : 3;
376 // convention: quark with higher PDG number is first
377 PDGcode = (std::max(q1,q2) * 1000 + std::min(q1,q2) * 100 + spin) * NeedParticle;
378
379 return pDefPair (FindParticle(-PDGcode),FindParticle(PDGcode));
380
381 } else {
382 // Create a Quark - AntiQuark pair, first in pair IsParticle
383 #ifdef debug_VStringDecay
384 G4cout<<"VlongSD Create a Quark - AntiQuark pair"<<G4endl;
385 #endif
386 G4int PDGcode=SampleQuarkFlavor()*NeedParticle;
387 return pDefPair (FindParticle(PDGcode),FindParticle(-PDGcode));
388 }
389}
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:52
std::pair< G4ParticleDefinition *, G4ParticleDefinition * > pDefPair
G4ParticleDefinition * FindParticle(G4int Encoding)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments

References G4VLongitudinalStringDecay::DiquarkSuppress, G4VLongitudinalStringDecay::FindParticle(), G4cout, G4endl, G4UniformRand, G4INCL::Math::max(), G4INCL::Math::min(), and G4VLongitudinalStringDecay::SampleQuarkFlavor().

Referenced by DiQuarkSplitup(), G4QGSMFragmentation::DiQuarkSplitup(), G4VLongitudinalStringDecay::QuarkSplitup(), and G4QGSMFragmentation::SplitLast().

◆ DeActivateFor() [1/2]

void G4HadronicInteraction::DeActivateFor ( const G4Element anElement)
inherited

Definition at line 186 of file G4HadronicInteraction.cc.

187{
188 Block();
189 theBlockedListElements.push_back(anElement);
190}
std::vector< const G4Element * > theBlockedListElements

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theBlockedListElements.

◆ DeActivateFor() [2/2]

void G4HadronicInteraction::DeActivateFor ( const G4Material aMaterial)
inherited

Definition at line 180 of file G4HadronicInteraction.cc.

181{
182 Block();
183 theBlockedList.push_back(aMaterial);
184}
std::vector< const G4Material * > theBlockedList

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theBlockedList.

Referenced by G4HadronHElasticPhysics::ConstructProcess().

◆ Diquark_AntiDiquark_aboveThreshold_lastSplitting()

G4bool G4LundStringFragmentation::Diquark_AntiDiquark_aboveThreshold_lastSplitting ( G4FragmentingString *&  string,
G4ParticleDefinition *&  LeftHadron,
G4ParticleDefinition *&  RightHadron 
)
private

Definition at line 882 of file G4LundStringFragmentation.cc.

886{
887 // StringMass-MinimalStringMass > 0. Creation of 2 baryons is possible ----
888
889 G4double StringMass = string->Mass();
890 G4double StringMassSqr= sqr(StringMass);
891 G4ParticleDefinition * Di_Quark;
892 G4ParticleDefinition * Anti_Di_Quark;
893
894 if (string->GetLeftParton()->GetPDGEncoding() < 0)
895 {
896 Anti_Di_Quark =string->GetLeftParton();
897 Di_Quark=string->GetRightParton();
898 } else
899 {
900 Anti_Di_Quark =string->GetRightParton();
901 Di_Quark=string->GetLeftParton();
902 }
903
904 G4int IDAnti_di_quark =Anti_Di_Quark->GetPDGEncoding();
905 G4int AbsIDAnti_di_quark =std::abs(IDAnti_di_quark);
906 G4int IDdi_quark =Di_Quark->GetPDGEncoding();
907 G4int AbsIDdi_quark =std::abs(IDdi_quark);
908
909 G4int ADi_q1=AbsIDAnti_di_quark/1000;
910 G4int ADi_q2=(AbsIDAnti_di_quark-ADi_q1*1000)/100;
911
912 G4int Di_q1=AbsIDdi_quark/1000;
913 G4int Di_q2=(AbsIDdi_quark-Di_q1*1000)/100;
914
915 NumberOf_FS=0;
916 for (G4int ProdQ=1; ProdQ < 6; ProdQ++)
917 {
918 G4int StateADiQ=0;
919 const G4int maxNumberOfLoops = 1000;
920 G4int loopCounter = 0;
921 do // while(Meson[AbsIDquark-1][ProdQ-1][StateQ]<>0);
922 {
924 -Baryon[ADi_q1-1][ADi_q2-1][ProdQ-1][StateADiQ]);
925
926 if (LeftHadron == NULL) continue;
927 G4double LeftHadronMass=LeftHadron->GetPDGMass();
928
929 G4int StateDiQ=0;
930 const G4int maxNumberOfInternalLoops = 1000;
931 G4int internalLoopCounter = 0;
932 do // while(Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]<>0);
933 {
935 +Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]);
936
937 if (RightHadron == NULL) continue;
938 G4double RightHadronMass=RightHadron->GetPDGMass();
939
940 if (StringMass > LeftHadronMass + RightHadronMass)
941 {
942 if ( NumberOf_FS > 349 ) {
944 ed << " NumberOf_FS exceeds its limit: NumberOf_FS=" << NumberOf_FS << G4endl;
945 G4Exception( "G4LundStringFragmentation::Diquark_AntiDiquark_aboveThreshold_lastSplitting ",
946 "HAD_LUND_001", JustWarning, ed );
947 NumberOf_FS = 349;
948 }
949
950 G4double FS_Psqr=lambda(StringMassSqr,sqr(LeftHadronMass),
951 sqr(RightHadronMass));
952 //FS_Psqr=1.;
953 FS_Weight[NumberOf_FS]=std::sqrt(FS_Psqr)*FS_Psqr*
954 BaryonWeight[ADi_q1-1][ADi_q2-1][ProdQ-1][StateADiQ]*
955 BaryonWeight[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]*
956 Prob_QQbar[ProdQ-1];
957
958 FS_LeftHadron[NumberOf_FS] = LeftHadron;
959 FS_RightHadron[NumberOf_FS]= RightHadron;
960 NumberOf_FS++;
961 } // End of if (StringMass > LeftHadronMass + RightHadronMass)
962
963 StateDiQ++;
964
965 } while( (Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]!=0) &&
966 ++internalLoopCounter < maxNumberOfInternalLoops );
967 if ( internalLoopCounter >= maxNumberOfInternalLoops ) {
968 return false;
969 }
970
971 StateADiQ++;
972 } while( (Baryon[ADi_q1-1][ADi_q2-1][ProdQ-1][StateADiQ]!=0) &&
973 ++loopCounter < maxNumberOfLoops );
974 if ( loopCounter >= maxNumberOfLoops ) {
975 return false;
976 }
977 } // End of for (G4int ProdQ=1; ProdQ < 4; ProdQ++)
978
979 return true;
980}
@ JustWarning
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40
G4ParticleDefinition * GetLeftParton(void) const
G4double lambda(G4double s, G4double m1_Sqr, G4double m2_Sqr)
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
G4ParticleDefinition * FS_RightHadron[350]
G4ParticleDefinition * FS_LeftHadron[350]
T sqr(const T &x)
Definition: templates.hh:128

References G4VLongitudinalStringDecay::Baryon, G4VLongitudinalStringDecay::BaryonWeight, G4ParticleTable::FindParticle(), G4VLongitudinalStringDecay::FS_LeftHadron, G4VLongitudinalStringDecay::FS_RightHadron, G4VLongitudinalStringDecay::FS_Weight, G4endl, G4Exception(), G4FragmentingString::GetLeftParton(), G4ParticleTable::GetParticleTable(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGMass(), JustWarning, lambda(), G4VLongitudinalStringDecay::NumberOf_FS, G4VLongitudinalStringDecay::Prob_QQbar, and sqr().

Referenced by SplitLast().

◆ Diquark_AntiDiquark_belowThreshold_lastSplitting()

G4bool G4LundStringFragmentation::Diquark_AntiDiquark_belowThreshold_lastSplitting ( G4FragmentingString *&  string,
G4ParticleDefinition *&  LeftHadron,
G4ParticleDefinition *&  RightHadron 
)
private

Definition at line 836 of file G4LundStringFragmentation.cc.

840{
841 G4double StringMass = string->Mass();
842
843 G4int cClusterInterrupt = 0;
844 G4bool isOK = false;
845 do
846 {
847 G4int LeftQuark1= string->GetLeftParton()->GetPDGEncoding()/1000;
848 G4int LeftQuark2=(string->GetLeftParton()->GetPDGEncoding()/100)%10;
849
850 G4int RightQuark1= string->GetRightParton()->GetPDGEncoding()/1000;
851 G4int RightQuark2=(string->GetRightParton()->GetPDGEncoding()/100)%10;
852
853 if (G4UniformRand()<0.5)
854 {
855 LeftHadron =hadronizer->Build(FindParticle( LeftQuark1),
856 FindParticle(RightQuark1));
857 RightHadron= (LeftHadron == nullptr) ? nullptr :
858 hadronizer->Build(FindParticle( LeftQuark2),
859 FindParticle(RightQuark2));
860 } else
861 {
862 LeftHadron =hadronizer->Build(FindParticle( LeftQuark1),
863 FindParticle(RightQuark2));
864 RightHadron=(LeftHadron == nullptr) ? nullptr :
865 hadronizer->Build(FindParticle( LeftQuark2),
866 FindParticle(RightQuark1));
867 }
868
869 isOK = (LeftHadron != nullptr) && (RightHadron != nullptr);
870 if(isOK) { isOK = (StringMass > LeftHadron->GetPDGMass() + RightHadron->GetPDGMass()); }
871 ++cClusterInterrupt;
872 //... repeat procedure, if mass of cluster is too low to produce hadrons
873 //... ClusterMassCut = 0.15*GeV model parameter
874 }
875 while (isOK == false || cClusterInterrupt < ClusterLoopInterrupt);
876 /* Loop checking, 07.08.2015, A.Ribon */
877 return isOK;
878}
bool G4bool
Definition: G4Types.hh:86
G4ParticleDefinition * Build(G4ParticleDefinition *black, G4ParticleDefinition *white)

References G4HadronBuilder::Build(), G4VLongitudinalStringDecay::ClusterLoopInterrupt, G4VLongitudinalStringDecay::FindParticle(), G4UniformRand, G4ParticleDefinition::GetPDGMass(), and G4VLongitudinalStringDecay::hadronizer.

Referenced by SplitLast().

◆ DiQuarkSplitup()

G4ParticleDefinition * G4LundStringFragmentation::DiQuarkSplitup ( G4ParticleDefinition decay,
G4ParticleDefinition *&  created 
)
privatevirtual

Implements G4VLongitudinalStringDecay.

Definition at line 458 of file G4LundStringFragmentation.cc.

460{
462 G4double ProbQQbar = (1.0 - 2.0*StrSup);
463
464 //... can Diquark break or not?
466
467 //... Diquark break
468 G4int stableQuarkEncoding = decay->GetPDGEncoding()/1000;
469 G4int decayQuarkEncoding = (decay->GetPDGEncoding()/100)%10;
470 if (G4UniformRand() < 0.5)
471 {
472 G4int Swap = stableQuarkEncoding;
473 stableQuarkEncoding = decayQuarkEncoding;
474 decayQuarkEncoding = Swap;
475 }
476
477 G4int IsParticle=(decayQuarkEncoding>0) ? -1 : +1; // if we have a quark, we need antiquark
478
479 pDefPair QuarkPair = CreatePartonPair(IsParticle,false); // no diquarks wanted
480
481 //... Build new Diquark
482 G4int QuarkEncoding=QuarkPair.second->GetPDGEncoding();
483 G4int i10 = std::max(std::abs(QuarkEncoding), std::abs(stableQuarkEncoding));
484 G4int i20 = std::min(std::abs(QuarkEncoding), std::abs(stableQuarkEncoding));
485 G4int spin = (i10 != i20 && G4UniformRand() <= 0.5)? 1 : 3;
486 G4int NewDecayEncoding = -1*IsParticle*(i10 * 1000 + i20 * 100 + spin);
487 created = FindParticle(NewDecayEncoding);
488 G4ParticleDefinition * decayQuark=FindParticle(decayQuarkEncoding);
489 G4ParticleDefinition * had=hadronizer->Build(QuarkPair.first, decayQuark);
490 StrangeSuppress=StrSup;
491
492 return had;
493
494 } else {
495 //... Diquark does not break
496
497 G4int IsParticle=(decay->GetPDGEncoding()>0) ? +1 : -1; // if we have a diquark, we need quark
498
499 StrangeSuppress=(1.0 - ProbQQbar * 0.9)/2.0;
500 pDefPair QuarkPair = CreatePartonPair(IsParticle,false); // no diquarks wanted
501
502 created = QuarkPair.second;
503
504 G4ParticleDefinition * had=hadronizer->Build(QuarkPair.first, decay);
505 StrangeSuppress=StrSup;
506
507 return had;
508 }
509}
pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true)
ParticleList decay(Cluster *const c)
Carries out a cluster decay.

References G4HadronBuilder::Build(), G4VLongitudinalStringDecay::CreatePartonPair(), G4INCL::ClusterDecay::decay(), G4VLongitudinalStringDecay::DiquarkBreakProb, G4VLongitudinalStringDecay::FindParticle(), G4UniformRand, G4VLongitudinalStringDecay::GetStrangeSuppress(), G4VLongitudinalStringDecay::hadronizer, G4INCL::Math::max(), G4INCL::Math::min(), and G4VLongitudinalStringDecay::StrangeSuppress.

Referenced by Splitup().

◆ EraseNewParticles()

void G4VLongitudinalStringDecay::EraseNewParticles ( )
inherited

◆ FindParticle()

G4ParticleDefinition * G4VLongitudinalStringDecay::FindParticle ( G4int  Encoding)
protectedinherited

Definition at line 280 of file G4VLongitudinalStringDecay.cc.

281{
282 /*
283 G4cout<<Encoding<<" G4VLongitudinalStringDecay::FindParticle Check di-quarks *******************"<<G4endl;
284 for (G4int i=4; i<6;i++){
285 for (G4int j=1;j<6;j++){
286 G4cout<<i<<" "<<j<<" ";
287 G4int Code = 1000 * i + 100 * j +1;
288 G4ParticleDefinition* ptr1 = G4ParticleTable::GetParticleTable()->FindParticle(Code);
289 Code +=2;
290 G4ParticleDefinition* ptr2 = G4ParticleTable::GetParticleTable()->FindParticle(Code);
291 G4cout<<"Code "<<Code - 2<<" ptr "<<ptr1<<" :: Code "<<Code<<" ptr "<<ptr2<<G4endl;
292 }
293 G4cout<<G4endl;
294 }
295 */
296
298
299 if (ptr == nullptr)
300 {
301 for (size_t i=0; i < NewParticles.size(); i++)
302 {
303 if ( Encoding == NewParticles[i]->GetPDGEncoding() ) { ptr = NewParticles[i]; return ptr;}
304 }
305 }
306
307 return ptr;
308}
std::vector< G4ParticleDefinition * > NewParticles

References G4ParticleTable::FindParticle(), G4ParticleTable::GetParticleTable(), and G4VLongitudinalStringDecay::NewParticles.

Referenced by G4VLongitudinalStringDecay::CreatePartonPair(), Diquark_AntiDiquark_belowThreshold_lastSplitting(), DiQuarkSplitup(), G4QGSMFragmentation::DiQuarkSplitup(), G4VLongitudinalStringDecay::PossibleHadronMass(), G4VLongitudinalStringDecay::SetMinMasses(), and G4QGSMFragmentation::SplitLast().

◆ FragmentString()

G4KineticTrackVector * G4LundStringFragmentation::FragmentString ( const G4ExcitedString theString)
virtual

Implements G4VLongitudinalStringDecay.

Definition at line 80 of file G4LundStringFragmentation.cc.

81{
82 // Can no longer modify Parameters for Fragmentation.
83
84 PastInitPhase=true;
85
86 G4FragmentingString aString(theString);
87 SetMinimalStringMass(&aString);
88
89 #ifdef debug_LUNDfragmentation
90 G4cout<<G4endl<<"LUND StringFragmentation ------------------------------------"<<G4endl;
91 G4cout<<G4endl<<"LUND StringFragm: String Mass "
92 <<theString.Get4Momentum().mag()<<G4endl
93 <<"4Mom "<<theString.Get4Momentum()<<G4endl
94 <<"------------------------------------"<<G4endl;
95 G4cout<<"String ends Direct "<<theString.GetLeftParton()->GetPDGcode()<<" "
96 <<theString.GetRightParton()->GetPDGcode()<<" "
97 <<theString.GetDirection()<< G4endl;
98 G4cout<<"Left mom "<<theString.GetLeftParton()->Get4Momentum()<<G4endl;
99 G4cout<<"Right mom "<<theString.GetRightParton()->Get4Momentum()<<G4endl<<G4endl;
100 G4cout<<"Check for Fragmentation "<<G4endl;
101 #endif
102
103 G4KineticTrackVector * LeftVector(0);
104
105 if (!aString.IsAFourQuarkString() && !IsItFragmentable(&aString))
106 {
107 #ifdef debug_LUNDfragmentation
108 G4cout<<"Non fragmentable - the string is converted to one hadron "<<G4endl;
109 #endif
110 // SetMassCut(210.*MeV); // For ProduceOneHadron it is required
111 // that no one pi-meson can be produced.
112
113 G4double Mcut = GetMassCut();
114 SetMassCut(10000.*MeV);
115 LeftVector=ProduceOneHadron(&theString);
116 SetMassCut(Mcut);
117
118 if ( LeftVector )
119 {
120 if ( LeftVector->size() > 0)
121 {
122 LeftVector->operator[](0)->SetFormationTime(theString.GetTimeOfCreation());
123 LeftVector->operator[](0)->SetPosition(theString.GetPosition());
124 }
125 if (LeftVector->size() > 1)
126 {
127 // 2 hadrons created from qq-qqbar are stored
128 LeftVector->operator[](1)->SetFormationTime(theString.GetTimeOfCreation());
129 LeftVector->operator[](1)->SetPosition(theString.GetPosition());
130 }
131 }
132 return LeftVector;
133 }
134
135 #ifdef debug_LUNDfragmentation
136 G4cout<<"The string will be fragmented. "<<G4endl;
137 #endif
138
139 // The string can fragment. At least two particles can be produced.
140 LeftVector =new G4KineticTrackVector;
142
143 G4bool success = Loop_toFragmentString(theString, LeftVector, RightVector);
144
145 if ( ! success )
146 {
147 std::for_each(LeftVector->begin(), LeftVector->end(), DeleteKineticTrack());
148 LeftVector->clear();
149 std::for_each(RightVector->begin(), RightVector->end(), DeleteKineticTrack());
150 delete RightVector;
151 return LeftVector;
152 }
153
154 // Join Left- and RightVector into LeftVector in correct order.
155 while (!RightVector->empty())
156 {
157 LeftVector->push_back(RightVector->back());
158 RightVector->erase(RightVector->end()-1);
159 }
160 delete RightVector;
161
162 return LeftVector;
163}
G4double GetTimeOfCreation() const
const G4ThreeVector & GetPosition() const
G4int GetDirection(void) const
G4Parton * GetRightParton(void) const
G4Parton * GetLeftParton(void) const
G4LorentzVector Get4Momentum() const
G4bool Loop_toFragmentString(const G4ExcitedString &theStringInCMS, G4KineticTrackVector *&LeftVector, G4KineticTrackVector *&RightVector)
virtual G4bool IsItFragmentable(const G4FragmentingString *const string)
G4int GetPDGcode() const
Definition: G4Parton.hh:127
const G4LorentzVector & Get4Momentum() const
Definition: G4Parton.hh:143
G4KineticTrackVector * ProduceOneHadron(const G4ExcitedString *const theString)
void SetMinimalStringMass(const G4FragmentingString *const string)

References G4cout, G4endl, G4ExcitedString::Get4Momentum(), G4Parton::Get4Momentum(), G4ExcitedString::GetDirection(), G4ExcitedString::GetLeftParton(), G4VLongitudinalStringDecay::GetMassCut(), G4Parton::GetPDGcode(), G4ExcitedString::GetPosition(), G4ExcitedString::GetRightParton(), G4ExcitedString::GetTimeOfCreation(), G4FragmentingString::IsAFourQuarkString(), IsItFragmentable(), Loop_toFragmentString(), CLHEP::HepLorentzVector::mag(), MeV, G4VLongitudinalStringDecay::PastInitPhase, G4VLongitudinalStringDecay::ProduceOneHadron(), G4VLongitudinalStringDecay::SetMassCut(), and G4VLongitudinalStringDecay::SetMinimalStringMass().

◆ GetClusterLoopInterrupt()

G4int G4VLongitudinalStringDecay::GetClusterLoopInterrupt ( )
inlineprotectedinherited

◆ GetDiquarkBreakProb()

G4double G4VLongitudinalStringDecay::GetDiquarkBreakProb ( )
inlineprotectedinherited

◆ GetDiquarkSuppress()

G4double G4VLongitudinalStringDecay::GetDiquarkSuppress ( )
inlineprotectedinherited

◆ GetEnergyMomentumCheckLevels()

std::pair< G4double, G4double > G4HadronicInteraction::GetEnergyMomentumCheckLevels ( ) const
virtualinherited

◆ GetFatalEnergyCheckLevels()

const std::pair< G4double, G4double > G4HadronicInteraction::GetFatalEnergyCheckLevels ( ) const
virtualinherited

Reimplemented in G4FissLib, G4LFission, G4LENDFission, G4ParticleHPCapture, G4ParticleHPElastic, G4ParticleHPFission, G4ParticleHPInelastic, and G4ParticleHPThermalScattering.

Definition at line 210 of file G4HadronicInteraction.cc.

211{
212 // default level of Check
213 return std::pair<G4double, G4double>(2.*perCent, 1. * GeV);
214}
static constexpr double perCent
Definition: G4SIunits.hh:325

References GeV, and perCent.

Referenced by G4HadronicProcess::CheckResult().

◆ GetLightConeZ()

G4double G4LundStringFragmentation::GetLightConeZ ( G4double  zmin,
G4double  zmax,
G4int  PartonEncoding,
G4ParticleDefinition pHadron,
G4double  Px,
G4double  Py 
)
privatevirtual

Implements G4VLongitudinalStringDecay.

Definition at line 628 of file G4LundStringFragmentation.cc.

632{
633 G4double Mass = pHadron->GetPDGMass();
634 G4int HadronEncoding=std::abs(pHadron->GetPDGEncoding());
635
636 G4double Mt2 = Px*Px + Py*Py + Mass*Mass;
637
638 G4double Alund, Blund;
639 G4double zOfMaxyf(0.), maxYf(1.), z(0.), yf(1.);
640
641 if (!((std::abs(PDGEncodingOfDecayParton) > 1000) && (HadronEncoding > 1000)) )
642 { // ---------------- Quark fragmentation and qq-> meson ----------------------
643 Alund=1.;
644 Blund=0.7/GeV/GeV;
645
646 G4double BMt2 = Blund*Mt2;
647 if (Alund == 1.0) {
648 zOfMaxyf=BMt2/(Blund*Mt2 + 1.);}
649 else {
650 zOfMaxyf = ((1.0+BMt2) - std::sqrt(sqr(1.0-BMt2) + 4.0*BMt2*Alund))/2.0/(1.-Alund);
651 }
652
653 if (zOfMaxyf < zmin) {zOfMaxyf=zmin;}
654 if (zOfMaxyf > zmax) {zOfMaxyf=zmax;}
655 maxYf=(1-zOfMaxyf)/zOfMaxyf * G4Exp(-Blund*Mt2/zOfMaxyf);
656
657 const G4int maxNumberOfLoops = 1000;
658 G4int loopCounter = 0;
659 do
660 {
661 z = zmin + G4UniformRand()*(zmax-zmin);
662 //yf = (1-z)/z * G4Exp(-Blund*Mt2/z);
663 yf = G4Pow::GetInstance()->powA(1.0-z,Alund)/z*G4Exp(-BMt2/z);
664 }
665 while ( (G4UniformRand()*maxYf > yf) && ++loopCounter < maxNumberOfLoops );
666 if ( loopCounter >= maxNumberOfLoops ) {
667 z = 0.5*(zmin + zmax); // Just a value between zmin and zmax, no physics considerations at all!
668 }
669 return z;
670 }
671
672 if (std::abs(PDGEncodingOfDecayParton) > 1000)
673 {
674 G4double an = 2.5;
675 an +=(sqr(Px)+sqr(Py))/sqr(GeV)-0.5;
676 z=zmin + (zmax-zmin)*G4Pow::GetInstance()->powA(G4UniformRand(),1./an);
677 }
678
679 return z;
680}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:230

References G4InuclParticleNames::an, G4Exp(), G4UniformRand, G4Pow::GetInstance(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGMass(), GeV, G4Pow::powA(), and sqr().

Referenced by SplitEandP().

◆ GetMassCut()

G4double G4VLongitudinalStringDecay::GetMassCut ( )
protectedinherited

◆ GetMaxEnergy() [1/2]

G4double G4HadronicInteraction::GetMaxEnergy ( ) const
inlineinherited

◆ GetMaxEnergy() [2/2]

G4double G4HadronicInteraction::GetMaxEnergy ( const G4Material aMaterial,
const G4Element anElement 
) const
inherited

Definition at line 131 of file G4HadronicInteraction.cc.

133{
134 if(!IsBlocked()) { return theMaxEnergy; }
135 if( IsBlocked(aMaterial) || IsBlocked(anElement) ) { return 0.0; }
136 if(!theMaxEnergyListElements.empty()) {
137 for(auto const& elmlist : theMaxEnergyListElements) {
138 if( anElement == elmlist.second )
139 { return elmlist.first; }
140 }
141 }
142 if(!theMaxEnergyList.empty()) {
143 for(auto const& matlist : theMaxEnergyList) {
144 if( aMaterial == matlist.second )
145 { return matlist.first; }
146 }
147 }
148 return theMaxEnergy;
149}
std::vector< std::pair< G4double, const G4Material * > > theMaxEnergyList
std::vector< std::pair< G4double, const G4Element * > > theMaxEnergyListElements

References G4HadronicInteraction::IsBlocked(), G4HadronicInteraction::theMaxEnergy, G4HadronicInteraction::theMaxEnergyList, and G4HadronicInteraction::theMaxEnergyListElements.

◆ GetMinEnergy() [1/2]

G4double G4HadronicInteraction::GetMinEnergy ( ) const
inlineinherited

◆ GetMinEnergy() [2/2]

G4double G4HadronicInteraction::GetMinEnergy ( const G4Material aMaterial,
const G4Element anElement 
) const
inherited

Definition at line 81 of file G4HadronicInteraction.cc.

83{
84 if(!IsBlocked()) { return theMinEnergy; }
85 if( IsBlocked(aMaterial) || IsBlocked(anElement) ) { return DBL_MAX; }
86 if(!theMinEnergyListElements.empty()) {
87 for(auto const& elmlist : theMinEnergyListElements) {
88 if( anElement == elmlist.second )
89 { return elmlist.first; }
90 }
91 }
92 if(!theMinEnergyList.empty()) {
93 for(auto const & matlist : theMinEnergyList) {
94 if( aMaterial == matlist.second )
95 { return matlist.first; }
96 }
97 }
98 return theMinEnergy;
99}
std::vector< std::pair< G4double, const G4Element * > > theMinEnergyListElements
std::vector< std::pair< G4double, const G4Material * > > theMinEnergyList
#define DBL_MAX
Definition: templates.hh:62

References DBL_MAX, G4HadronicInteraction::IsBlocked(), G4HadronicInteraction::theMinEnergy, G4HadronicInteraction::theMinEnergyList, and G4HadronicInteraction::theMinEnergyListElements.

◆ GetModelName()

const G4String & G4HadronicInteraction::GetModelName ( ) const
inlineinherited

Definition at line 115 of file G4HadronicInteraction.hh.

116 { return theModelName; }

References G4HadronicInteraction::theModelName.

Referenced by G4MuMinusCapturePrecompound::ApplyYourself(), G4HadronElastic::ApplyYourself(), G4INCLXXInterface::ApplyYourself(), G4TheoFSGenerator::ApplyYourself(), G4HadronStoppingProcess::AtRestDoIt(), G4VHadronPhysics::BuildModel(), G4HadronicProcess::CheckEnergyMomentumConservation(), G4HadronicProcess::CheckResult(), G4ChargeExchangePhysics::ConstructProcess(), G4MuonicAtomDecay::DecayIt(), G4LENDModel::DumpLENDTargetInfo(), G4AblaInterface::G4AblaInterface(), G4ElectroVDNuclearModel::G4ElectroVDNuclearModel(), G4EMDissociation::G4EMDissociation(), G4ExcitedStringDecay::G4ExcitedStringDecay(), G4LEHadronProtonElastic::G4LEHadronProtonElastic(), G4LENDModel::G4LENDModel(), G4LENDorBERTModel::G4LENDorBERTModel(), G4LEnp::G4LEnp(), G4LEpp::G4LEpp(), G4LFission::G4LFission(), G4LowEGammaNuclearModel::G4LowEGammaNuclearModel(), G4LowEIonFragmentation::G4LowEIonFragmentation(), G4MuonVDNuclearModel::G4MuonVDNuclearModel(), G4NeutrinoElectronCcModel::G4NeutrinoElectronCcModel(), G4NeutrinoNucleusModel::G4NeutrinoNucleusModel(), G4WilsonAbrasionModel::G4WilsonAbrasionModel(), G4INCLXXInterface::GetDeExcitationModelName(), G4EnergyRangeManager::GetHadronicInteraction(), G4VHighEnergyGenerator::GetProjectileNucleus(), G4NeutronRadCapture::InitialiseModel(), G4BinaryCascade::ModelDescription(), G4LMsdGenerator::ModelDescription(), G4VPartonStringModel::ModelDescription(), G4TheoFSGenerator::ModelDescription(), G4VHadronPhysics::NewModel(), G4NeutrinoElectronProcess::PostStepDoIt(), G4HadronicProcess::PostStepDoIt(), G4ElNeutrinoNucleusProcess::PostStepDoIt(), G4HadronElasticProcess::PostStepDoIt(), G4MuNeutrinoNucleusProcess::PostStepDoIt(), G4HadronicProcessStore::PrintModelHtml(), G4BinaryCascade::PropagateModelDescription(), G4HadronicProcessStore::RegisterInteraction(), and G4LENDModel::returnUnchanged().

◆ GetProbBBbar()

G4double G4VLongitudinalStringDecay::GetProbBBbar ( )
inlineprotectedinherited

◆ GetProbCCbar()

G4double G4VLongitudinalStringDecay::GetProbCCbar ( )
inlineprotectedinherited

◆ GetProbEta_b()

G4double G4VLongitudinalStringDecay::GetProbEta_b ( )
inlineprotectedinherited

◆ GetProbEta_c()

G4double G4VLongitudinalStringDecay::GetProbEta_c ( )
inlineprotectedinherited

◆ GetRecoilEnergyThreshold()

G4double G4HadronicInteraction::GetRecoilEnergyThreshold ( ) const
inlineinherited

◆ GetStrangeSuppress()

G4double G4VLongitudinalStringDecay::GetStrangeSuppress ( )
inlineprotectedinherited

◆ GetStringTensionParameter()

G4double G4VLongitudinalStringDecay::GetStringTensionParameter ( )
inlineprotectedinherited

◆ GetVerboseLevel()

G4int G4HadronicInteraction::GetVerboseLevel ( ) const
inlineinherited

Definition at line 109 of file G4HadronicInteraction.hh.

References G4HadronicInteraction::verboseLevel.

◆ InitialiseModel()

void G4HadronicInteraction::InitialiseModel ( )
virtualinherited

◆ IsApplicable()

G4bool G4HadronicInteraction::IsApplicable ( const G4HadProjectile aTrack,
G4Nucleus targetNucleus 
)
virtualinherited

◆ IsBlocked() [1/3]

G4bool G4HadronicInteraction::IsBlocked ( ) const
inlineprotectedinherited

◆ IsBlocked() [2/3]

G4bool G4HadronicInteraction::IsBlocked ( const G4Element anElement) const
inherited

Definition at line 202 of file G4HadronicInteraction.cc.

203{
204 for (auto const& elm : theBlockedListElements) {
205 if (anElement == elm) return true;
206 }
207 return false;
208}

References G4HadronicInteraction::theBlockedListElements.

◆ IsBlocked() [3/3]

G4bool G4HadronicInteraction::IsBlocked ( const G4Material aMaterial) const
inherited

Definition at line 193 of file G4HadronicInteraction.cc.

194{
195 for (auto const& mat : theBlockedList) {
196 if (aMaterial == mat) return true;
197 }
198 return false;
199}

References G4HadronicInteraction::theBlockedList.

◆ IsItFragmentable()

G4bool G4LundStringFragmentation::IsItFragmentable ( const G4FragmentingString *const  string)
privatevirtual

Implements G4VLongitudinalStringDecay.

Definition at line 167 of file G4LundStringFragmentation.cc.

168{
169 SetMinimalStringMass(string);
170 //G4cout<<"MinM StrM "<<MinimalStringMass<<" "<< string->Get4Momentum().mag()<<G4endl;
171
172 return std::abs(MinimalStringMass) < string->Get4Momentum().mag();
173
174 //MinimalStringMass is negative and large for a string with unknown particles in a final 2-particle decay.
175}

References G4VLongitudinalStringDecay::MinimalStringMass, and G4VLongitudinalStringDecay::SetMinimalStringMass().

Referenced by FragmentString().

◆ lambda()

G4double G4LundStringFragmentation::lambda ( G4double  s,
G4double  m1_Sqr,
G4double  m2_Sqr 
)
private

Definition at line 1340 of file G4LundStringFragmentation.cc.

1341{
1342 G4double lam = sqr(S - m1_Sqr - m2_Sqr) - 4.*m1_Sqr*m2_Sqr;
1343 return lam;
1344}
G4double S(G4double temp)

References G4InuclParticleNames::lam, S(), and sqr().

Referenced by Diquark_AntiDiquark_aboveThreshold_lastSplitting(), Quark_AntiQuark_lastSplitting(), and Quark_Diquark_lastSplitting().

◆ Loop_toFragmentString()

G4bool G4LundStringFragmentation::Loop_toFragmentString ( const G4ExcitedString theStringInCMS,
G4KineticTrackVector *&  LeftVector,
G4KineticTrackVector *&  RightVector 
)
private

Definition at line 179 of file G4LundStringFragmentation.cc.

182{
183 #ifdef debug_LUNDfragmentation
184 G4cout<<"Loop_toFrag "<<theString.GetLeftParton()->GetPDGcode()<<" "
185 <<theString.GetLeftParton()->Get4Momentum()<<G4endl
186 <<" "<<theString.GetRightParton()->GetPDGcode()<<" "
187 <<theString.GetRightParton()->Get4Momentum()<<G4endl
188 <<"Direction "<<theString.GetDirection()<< G4endl;
189 #endif
190
191 G4LorentzRotation toCmsI, toObserverFrameI;
192
193 G4bool final_success=false;
194 G4bool inner_success=true;
195
196 G4int attempt=0;
197
198 while ( ! final_success && attempt++ < StringLoopInterrupt )
199 { // If the string fragmentation does not be happend,
200 // repeat the fragmentation.
201
202 G4FragmentingString *currentString = new G4FragmentingString(theString);
203 toCmsI = currentString->TransformToAlignedCms();
204 toObserverFrameI = toCmsI.inverse();
205
206 G4LorentzRotation toCms, toObserverFrame;
207
208 //G4cout<<"Main loop start whilecounter "<<attempt<<G4endl;
209
210 // Cleaning up the previously produced hadrons
211 std::for_each(LeftVector->begin(), LeftVector->end(), DeleteKineticTrack());
212 LeftVector->clear();
213 std::for_each(RightVector->begin(), RightVector->end(), DeleteKineticTrack());
214 RightVector->clear();
215
216 // Main fragmentation loop until the string will not be able to fragment
217 inner_success=true; // set false on failure.
218 const G4int maxNumberOfLoops = 1000;
219 G4int loopCounter = -1;
220
221 while ( (! StopFragmenting(currentString)) && ++loopCounter < maxNumberOfLoops )
222 { // Split current string into hadron + new string
223 #ifdef debug_LUNDfragmentation
224 G4cout<<"The string will fragment. "<<G4endl;;
225 //G4cout<<"1 "<<currentString->GetDecayDirection()<<G4endl;
226 #endif
227 G4FragmentingString *newString=0; // used as output from SplitUp.
228
229 toCms=currentString->TransformToAlignedCms();
230 toObserverFrame= toCms.inverse();
231
232 #ifdef debug_LUNDfragmentation
233 //G4cout<<"CMS Left mom "<<currentString->GetPleft()<<G4endl;
234 //G4cout<<"CMS Right mom "<<currentString->GetPright()<<G4endl;
235 //G4cout<<"CMS String M "<<currentString->GetPstring()<<G4endl;
236 #endif
237
238 G4KineticTrack * Hadron=Splitup(currentString,newString);
239
240 if ( Hadron != 0 ) // Store the hadron
241 {
242 #ifdef debug_LUNDfragmentation
243 G4cout<<"Hadron prod at fragm. "<<Hadron->GetDefinition()->GetParticleName()<<G4endl;
244 //G4cout<<"2 "<<currentString->GetDecayDirection()<<G4endl;
245 #endif
246
247 Hadron->Set4Momentum(toObserverFrame*Hadron->Get4Momentum());
248
249 G4double TimeOftheStringCreation=theString.GetTimeOfCreation();
250 G4ThreeVector PositionOftheStringCreation(theString.GetPosition());
251
252 G4LorentzVector Coordinate(Hadron->GetPosition(), Hadron->GetFormationTime());
253 G4LorentzVector Momentum = toObserverFrame*Coordinate;
254 Hadron->SetFormationTime(TimeOftheStringCreation + Momentum.e() - fermi/c_light);
255 G4ThreeVector aPosition(Momentum.vect());
256 Hadron->SetPosition(PositionOftheStringCreation+aPosition);
257
258 // Open to protect hadron production at fragmentation
259 if ( currentString->GetDecayDirection() > 0 )
260 {
261 LeftVector->push_back(Hadron);
262 } else
263 {
264 RightVector->push_back(Hadron);
265 }
266 delete currentString;
267 currentString=newString;
268 } else {
269 if ( newString ) delete newString;
270 }
271
272 currentString->LorentzRotate(toObserverFrame);
273 };
274
275 if ( loopCounter >= maxNumberOfLoops ) {
276 inner_success=false;
277 }
278
279 // Split remaining string into 2 final hadrons.
280 #ifdef debug_LUNDfragmentation
281 if (inner_success) G4cout<<"Split remaining string into 2 final hadrons."<<G4endl;
282 #endif
283
284 if ( inner_success && SplitLast(currentString, LeftVector, RightVector) ) // Close to protect Last Str. Decay
285 {
286 final_success = true;
287 }
288
289 delete currentString;
290 } // End of the loop where we try to fragment the string.
291
292 G4int sign = +1;
293 if ( theString.GetDirection() < 0 ) sign = -1;
294 for ( unsigned int hadronI = 0; hadronI < LeftVector->size(); ++hadronI ) {
295 G4LorentzVector Tmp = LeftVector->operator[](hadronI)->Get4Momentum();
296 Tmp.setZ(sign*Tmp.getZ());
297 Tmp *= toObserverFrameI;
298 LeftVector->operator[](hadronI)->Set4Momentum(Tmp);
299 }
300 for ( unsigned int hadronI = 0; hadronI < RightVector->size(); ++hadronI ) {
301 G4LorentzVector Tmp = RightVector->operator[](hadronI)->Get4Momentum();
302 Tmp.setZ(sign*Tmp.getZ());
303 Tmp *= toObserverFrameI;
304 RightVector->operator[](hadronI)->Set4Momentum(Tmp);
305 }
306
307 return final_success;
308}
HepLorentzRotation inverse() const
void LorentzRotate(const G4LorentzRotation &rotation)
G4LorentzRotation TransformToAlignedCms()
G4int GetDecayDirection() const
G4double GetFormationTime() const
void SetPosition(const G4ThreeVector aPosition)
void Set4Momentum(const G4LorentzVector &a4Momentum)
const G4ThreeVector & GetPosition() const
const G4ParticleDefinition * GetDefinition() const
void SetFormationTime(G4double aFormationTime)
const G4LorentzVector & Get4Momentum() const
virtual G4bool StopFragmenting(const G4FragmentingString *const string)
virtual G4bool SplitLast(G4FragmentingString *string, G4KineticTrackVector *LeftVector, G4KineticTrackVector *RightVector)
virtual G4KineticTrack * Splitup(G4FragmentingString *string, G4FragmentingString *&newString)
const G4String & GetParticleName() const
G4int sign(const T t)

References source.hepunit::c_light, fermi, G4cout, G4endl, G4KineticTrack::Get4Momentum(), G4Parton::Get4Momentum(), G4FragmentingString::GetDecayDirection(), G4KineticTrack::GetDefinition(), G4ExcitedString::GetDirection(), G4KineticTrack::GetFormationTime(), G4ExcitedString::GetLeftParton(), G4ParticleDefinition::GetParticleName(), G4Parton::GetPDGcode(), G4ExcitedString::GetPosition(), G4KineticTrack::GetPosition(), G4ExcitedString::GetRightParton(), G4ExcitedString::GetTimeOfCreation(), CLHEP::HepLorentzVector::getZ(), CLHEP::HepLorentzRotation::inverse(), G4FragmentingString::LorentzRotate(), G4KineticTrack::Set4Momentum(), G4KineticTrack::SetFormationTime(), G4KineticTrack::SetPosition(), CLHEP::HepLorentzVector::setZ(), G4INCL::Math::sign(), SplitLast(), Splitup(), StopFragmenting(), G4VLongitudinalStringDecay::StringLoopInterrupt, and G4FragmentingString::TransformToAlignedCms().

Referenced by FragmentString().

◆ ModelDescription()

void G4HadronicInteraction::ModelDescription ( std::ostream &  outFile) const
virtualinherited

◆ operator!=() [1/2]

G4bool G4HadronicInteraction::operator!= ( const G4HadronicInteraction right) const
deleteinherited

◆ operator!=() [2/2]

G4bool G4LundStringFragmentation::operator!= ( const G4LundStringFragmentation right) const
private

◆ operator=()

const G4LundStringFragmentation & G4LundStringFragmentation::operator= ( const G4LundStringFragmentation right)
private

◆ operator==() [1/2]

G4bool G4HadronicInteraction::operator== ( const G4HadronicInteraction right) const
deleteinherited

◆ operator==() [2/2]

G4bool G4LundStringFragmentation::operator== ( const G4LundStringFragmentation right) const
private

◆ PossibleHadronMass()

G4double G4VLongitudinalStringDecay::PossibleHadronMass ( const G4FragmentingString *const  string,
Pcreate  build = 0,
pDefPair pdefs = 0 
)
protectedinherited

Definition at line 202 of file G4VLongitudinalStringDecay.cc.

204{
205 G4double mass = 0.0;
206
207 if ( build==0 ) build=&G4HadronBuilder::BuildLowSpin;
208
209 G4ParticleDefinition* Hadron1 = nullptr;
210 G4ParticleDefinition* Hadron2 = nullptr;
211
212 if (!string->IsAFourQuarkString() )
213 {
214 // spin 0 meson or spin 1/2 barion will be built
215
216 Hadron1 = (hadronizer->*build)(string->GetLeftParton(), string->GetRightParton());
217 #ifdef debug_VStringDecay
218 G4cout<<"VlongSD PossibleHadronMass"<<G4endl;
219 G4cout<<"VlongSD Quarks at the string ends "<<string->GetLeftParton()->GetParticleName()
220 <<" "<<string->GetRightParton()->GetParticleName()<<G4endl;
221 if ( Hadron1 != nullptr) {
222 G4cout<<"(G4VLongitudinalStringDecay) Hadron "<<Hadron1->GetParticleName()
223 <<" "<<Hadron1->GetPDGMass()<<G4endl;
224 }
225 #endif
226 if ( Hadron1 != nullptr) { mass = (Hadron1)->GetPDGMass();}
227 else { mass = MaxMass;}
228 } else
229 {
230 //... string is qq--qqbar: Build two stable hadrons,
231
232 #ifdef debug_VStringDecay
233 G4cout<<"VlongSD PossibleHadronMass"<<G4endl;
234 G4cout<<"VlongSD string is qq--qqbar: Build two stable hadrons"<<G4endl;
235 #endif
236
237 G4double StringMass = string->Mass();
238 G4int cClusterInterrupt = 0;
239 do
240 {
241 if (cClusterInterrupt++ >= ClusterLoopInterrupt) return false;
242
243 G4int LeftQuark1= string->GetLeftParton()->GetPDGEncoding()/1000;
244 G4int LeftQuark2=(string->GetLeftParton()->GetPDGEncoding()/100)%10;
245
246 G4int RightQuark1= string->GetRightParton()->GetPDGEncoding()/1000;
247 G4int RightQuark2=(string->GetRightParton()->GetPDGEncoding()/100)%10;
248
249 if (G4UniformRand()<0.5) {
250 Hadron1 =hadronizer->Build(FindParticle(LeftQuark1), FindParticle(RightQuark1));
251 Hadron2 =hadronizer->Build(FindParticle(LeftQuark2), FindParticle(RightQuark2));
252 } else {
253 Hadron1 =hadronizer->Build(FindParticle(LeftQuark1), FindParticle(RightQuark2));
254 Hadron2 =hadronizer->Build(FindParticle(LeftQuark2), FindParticle(RightQuark1));
255 }
256 //... repeat procedure, if mass of cluster is too low to produce hadrons
257 //... ClusterMassCut = 0.15*GeV model parameter
258 }
259 while ( Hadron1 == nullptr || Hadron2 == nullptr ||
260 ( StringMass <= Hadron1->GetPDGMass() + Hadron2->GetPDGMass() ) );
261
262 mass = (Hadron1)->GetPDGMass() + (Hadron2)->GetPDGMass();
263 }
264
265 #ifdef debug_VStringDecay
266 G4cout<<"VlongSD *Hadrons 1 and 2, proposed mass "<<Hadron1<<" "<<Hadron2<<" "<<mass<<G4endl;
267 #endif
268
269 if ( pdefs != 0 )
270 { // need to return hadrons as well....
271 pdefs->first = Hadron1;
272 pdefs->second = Hadron2;
273 }
274
275 return mass;
276}
G4bool IsAFourQuarkString(void) const
G4ParticleDefinition * BuildLowSpin(G4ParticleDefinition *black, G4ParticleDefinition *white)

References G4HadronBuilder::Build(), G4HadronBuilder::BuildLowSpin(), G4VLongitudinalStringDecay::ClusterLoopInterrupt, G4VLongitudinalStringDecay::FindParticle(), G4cout, G4endl, G4UniformRand, G4FragmentingString::GetLeftParton(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetPDGMass(), G4VLongitudinalStringDecay::hadronizer, G4FragmentingString::IsAFourQuarkString(), and G4VLongitudinalStringDecay::MaxMass.

Referenced by G4VLongitudinalStringDecay::ProduceOneHadron().

◆ ProduceOneHadron()

G4KineticTrackVector * G4VLongitudinalStringDecay::ProduceOneHadron ( const G4ExcitedString *const  theString)
protectedinherited

Definition at line 146 of file G4VLongitudinalStringDecay.cc.

147{
148 G4KineticTrackVector* result = nullptr;
149 pDefPair hadrons( nullptr, nullptr );
150 G4FragmentingString aString( *string );
151
152 #ifdef debug_VStringDecay
153 G4cout<<"G4VLongitudinalStringDecay::ProduceOneHadron: PossibleHmass StrMass "
154 <<aString.Mass()<<" MassCut "<<MassCut<<G4endl;
155 #endif
156
157 SetMinimalStringMass( &aString );
158 PossibleHadronMass( &aString, 0, &hadrons );
159 result = new G4KineticTrackVector;
160 if ( hadrons.first != nullptr ) {
161 if ( hadrons.second == nullptr ) {
162 // Substitute string by light hadron, Note that Energy is not conserved here!
163
164 #ifdef debug_VStringDecay
165 G4cout << "VlongSD Warning replacing string by single hadron (G4VLongitudinalStringDecay)" <<G4endl;
166 G4cout << hadrons.first->GetParticleName()<<G4endl
167 << "string .. " << string->Get4Momentum() << " "
168 << string->Get4Momentum().m() << G4endl;
169 #endif
170
171 G4ThreeVector Mom3 = string->Get4Momentum().vect();
172 G4LorentzVector Mom( Mom3, std::sqrt( Mom3.mag2() + sqr( hadrons.first->GetPDGMass() ) ) );
173 result->push_back( new G4KineticTrack( hadrons.first, 0, string->GetPosition(), Mom ) );
174 } else {
175 //... string was qq--qqbar type: Build two stable hadrons,
176
177 #ifdef debug_VStringDecay
178 G4cout << "VlongSD Warning replacing qq-qqbar string by TWO hadrons (G4VLongitudinalStringDecay)"
179 << hadrons.first->GetParticleName() << " / "
180 << hadrons.second->GetParticleName()
181 << "string .. " << string->Get4Momentum() << " "
182 << string->Get4Momentum().m() << G4endl;
183 #endif
184
185 G4LorentzVector Mom1, Mom2;
186 Sample4Momentum( &Mom1, hadrons.first->GetPDGMass(),
187 &Mom2, hadrons.second->GetPDGMass(),
188 string->Get4Momentum().mag() );
189
190 result->push_back( new G4KineticTrack( hadrons.first, 0, string->GetPosition(), Mom1 ) );
191 result->push_back( new G4KineticTrack( hadrons.second, 0, string->GetPosition(), Mom2 ) );
192
193 G4ThreeVector Velocity = string->Get4Momentum().boostVector();
194 result->Boost(Velocity);
195 }
196 }
197 return result;
198}
double mag2() const
void Boost(G4ThreeVector &Velocity)
G4double PossibleHadronMass(const G4FragmentingString *const string, Pcreate build=0, pDefPair *pdefs=0)
virtual void Sample4Momentum(G4LorentzVector *Mom, G4double Mass, G4LorentzVector *AntiMom, G4double AntiMass, G4double InitialMass)=0

References G4KineticTrackVector::Boost(), G4cout, G4endl, G4ExcitedString::Get4Momentum(), G4ExcitedString::GetPosition(), CLHEP::HepLorentzVector::mag(), CLHEP::Hep3Vector::mag2(), G4FragmentingString::Mass(), G4VLongitudinalStringDecay::MassCut, G4VLongitudinalStringDecay::PossibleHadronMass(), G4VLongitudinalStringDecay::Sample4Momentum(), G4VLongitudinalStringDecay::SetMinimalStringMass(), and sqr().

Referenced by FragmentString(), and G4QGSMFragmentation::FragmentString().

◆ Quark_AntiQuark_lastSplitting()

G4bool G4LundStringFragmentation::Quark_AntiQuark_lastSplitting ( G4FragmentingString *&  string,
G4ParticleDefinition *&  LeftHadron,
G4ParticleDefinition *&  RightHadron 
)
private

Definition at line 1102 of file G4LundStringFragmentation.cc.

1105{
1106 G4double StringMass = string->Mass();
1107 G4double StringMassSqr= sqr(StringMass);
1108
1109 G4ParticleDefinition * Quark;
1110 G4ParticleDefinition * Anti_Quark;
1111
1112 if (string->GetLeftParton()->GetPDGEncoding()>0)
1113 {
1114 Quark =string->GetLeftParton();
1115 Anti_Quark=string->GetRightParton();
1116 } else
1117 {
1118 Quark =string->GetRightParton();
1119 Anti_Quark=string->GetLeftParton();
1120 }
1121
1122 G4int IDquark =Quark->GetPDGEncoding();
1123 G4int AbsIDquark =std::abs(IDquark);
1124 G4int QuarkCharge =Qcharge[IDquark-1];
1125
1126 G4int IDanti_quark =Anti_Quark->GetPDGEncoding();
1127 G4int AbsIDanti_quark =std::abs(IDanti_quark);
1128 G4int AntiQuarkCharge =-Qcharge[AbsIDanti_quark-1];
1129
1130 G4int LeftHadronCharge(0), RightHadronCharge(0);
1131
1132 //G4cout<<"Q Qbar "<<IDquark<<" "<<IDanti_quark<<G4endl;
1133
1134 NumberOf_FS=0;
1135 for (G4int ProdQ=1; ProdQ < 4; ProdQ++) // Loop over quark-antiquark cases: u-ubar, d-dbar, s-sbar
1136 { // (as last splitting, do not consider c-cbar and b-bbar cases)
1137 LeftHadronCharge = QuarkCharge - Qcharge[ProdQ-1];
1138 G4int SignQ = LeftHadronCharge/3; if (SignQ == 0) SignQ = 1;
1139
1140 if ((IDquark == 1) && (ProdQ == 3)) SignQ= 1; // K0 (d,sbar)
1141 if ((IDquark == 3) && (ProdQ == 1)) SignQ=-1; // K0bar (s,dbar)
1142 if ((IDquark == 4) && (ProdQ == 2)) SignQ= 1; // D0 (c,ubar)
1143 if ((IDquark == 5) && (ProdQ == 1)) SignQ=-1; // anti_B0 (b,dbar)
1144 if ((IDquark == 5) && (ProdQ == 3)) SignQ=-1; // anti_Bs0 (b,sbar)
1145
1146 RightHadronCharge = AntiQuarkCharge + Qcharge[ProdQ-1];
1147 G4int SignAQ = RightHadronCharge/3; if (SignAQ == 0) SignAQ = 1;
1148
1149 if ((IDanti_quark ==-1) && (ProdQ == 3)) SignAQ=-1; // K0bar (dbar,s)
1150 if ((IDanti_quark ==-3) && (ProdQ == 1)) SignAQ= 1; // K0 (sbar,d)
1151 if ((IDanti_quark ==-4) && (ProdQ == 2)) SignAQ=-1; // anti_D0 (cbar,u)
1152 if ((IDanti_quark ==-5) && (ProdQ == 1)) SignAQ= 1; // B0 (bbar,d)
1153 if ((IDanti_quark ==-5) && (ProdQ == 3)) SignAQ= 1; // Bs0 (bbar,s)
1154
1155 //G4cout<<"ProQ signs "<<ProdQ<<" "<<SignQ<<" "<<SignAQ<<G4endl;
1156
1157 G4int StateQ=0;
1158 const G4int maxNumberOfLoops = 1000;
1159 G4int loopCounter = 0;
1160 do
1161 {
1162 //G4cout<<"[AbsIDquark-1][ProdQ-1][StateQ "<<AbsIDquark-1<<" "
1163 //<<ProdQ-1<<" "<<StateQ<<" "<<SignQ*Meson[AbsIDquark-1][ProdQ-1][StateQ]<<G4endl;
1165 Meson[AbsIDquark-1][ProdQ-1][StateQ]);
1166 //G4cout<<"LeftHadron "<<LeftHadron<<G4endl;
1167 if (LeftHadron == NULL) { StateQ++; continue; }
1168 //G4cout<<"LeftHadron "<<LeftHadron->GetParticleName()<<G4endl;
1169 G4double LeftHadronMass=LeftHadron->GetPDGMass();
1170
1171 G4int StateAQ=0;
1172 const G4int maxNumberOfInternalLoops = 1000;
1173 G4int internalLoopCounter = 0;
1174 do
1175 {
1176 //G4cout<<" [AbsIDanti_quark-1][ProdQ-1][StateAQ] "<<AbsIDanti_quark-1<<" "
1177 // <<ProdQ-1<<" "<<StateAQ<<" "<<SignAQ*Meson[AbsIDanti_quark-1][ProdQ-1][StateAQ]<<G4endl;
1178 RightHadron=G4ParticleTable::GetParticleTable()->FindParticle(SignAQ*
1179 Meson[AbsIDanti_quark-1][ProdQ-1][StateAQ]);
1180 //G4cout<<"RightHadron "<<RightHadron<<G4endl;
1181 if(RightHadron == NULL) { StateAQ++; continue; }
1182 //G4cout<<"RightHadron "<<RightHadron->GetParticleName()<<G4endl;
1183 G4double RightHadronMass=RightHadron->GetPDGMass();
1184
1185 if (StringMass > LeftHadronMass + RightHadronMass)
1186 {
1187 if ( NumberOf_FS > 349 ) {
1189 ed << " NumberOf_FS exceeds its limit: NumberOf_FS=" << NumberOf_FS << G4endl;
1190 G4Exception( "G4LundStringFragmentation::Quark_AntiQuark_lastSplitting ",
1191 "HAD_LUND_003", JustWarning, ed );
1192 NumberOf_FS = 349;
1193 }
1194
1195 G4double FS_Psqr=lambda(StringMassSqr,sqr(LeftHadronMass),
1196 sqr(RightHadronMass));
1197 //FS_Psqr=1.;
1198 FS_Weight[NumberOf_FS]=std::sqrt(FS_Psqr)*
1199 MesonWeight[AbsIDquark-1][ProdQ-1][StateQ]*
1200 MesonWeight[AbsIDanti_quark-1][ProdQ-1][StateAQ]*
1201 Prob_QQbar[ProdQ-1];
1202
1203 if (string->GetLeftParton()->GetPDGEncoding()>0)
1204 {
1205 FS_LeftHadron[NumberOf_FS] = RightHadron;
1206 FS_RightHadron[NumberOf_FS]= LeftHadron;
1207 } else
1208 {
1209 FS_LeftHadron[NumberOf_FS] = LeftHadron;
1210 FS_RightHadron[NumberOf_FS]= RightHadron;
1211 }
1212
1213 NumberOf_FS++;
1214
1215 }
1216
1217 StateAQ++;
1218 //G4cout<<" StateAQ Meson[AbsIDanti_quark-1][ProdQ-1][StateAQ] "<<StateAQ<<" "
1219 // <<Meson[AbsIDanti_quark-1][ProdQ-1][StateAQ]<<" "<<internalLoopCounter<<G4endl;
1220 } while ( (Meson[AbsIDanti_quark-1][ProdQ-1][StateAQ]!=0) &&
1221 ++internalLoopCounter < maxNumberOfInternalLoops );
1222 if ( internalLoopCounter >= maxNumberOfInternalLoops ) {
1223 return false;
1224 }
1225
1226 StateQ++;
1227 //G4cout<<"StateQ Meson[AbsIDquark-1][ProdQ-1][StateQ] "<<StateQ<<" "
1228 // <<Meson[AbsIDquark-1][ProdQ-1][StateQ]<<" "<<loopCounter<<G4endl;
1229
1230 } while ( (Meson[AbsIDquark-1][ProdQ-1][StateQ]!=0) &&
1231 ++loopCounter < maxNumberOfLoops );
1232 if ( loopCounter >= maxNumberOfLoops ) {
1233 return false;
1234 }
1235 } // End of for (G4int ProdQ=1; ProdQ < 4; ProdQ++)
1236
1237 return true;
1238}

References G4ParticleTable::FindParticle(), G4VLongitudinalStringDecay::FS_LeftHadron, G4VLongitudinalStringDecay::FS_RightHadron, G4VLongitudinalStringDecay::FS_Weight, G4endl, G4Exception(), G4FragmentingString::GetLeftParton(), G4ParticleTable::GetParticleTable(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGMass(), JustWarning, lambda(), G4VLongitudinalStringDecay::Meson, G4VLongitudinalStringDecay::MesonWeight, G4VLongitudinalStringDecay::NumberOf_FS, G4VLongitudinalStringDecay::Prob_QQbar, G4VLongitudinalStringDecay::Qcharge, and sqr().

Referenced by SplitLast().

◆ Quark_Diquark_lastSplitting()

G4bool G4LundStringFragmentation::Quark_Diquark_lastSplitting ( G4FragmentingString *&  string,
G4ParticleDefinition *&  LeftHadron,
G4ParticleDefinition *&  RightHadron 
)
private

Definition at line 984 of file G4LundStringFragmentation.cc.

987{
988 G4double StringMass = string->Mass();
989 G4double StringMassSqr= sqr(StringMass);
990
991 G4ParticleDefinition * Di_Quark;
992 G4ParticleDefinition * Quark;
993
994 if (string->GetLeftParton()->GetParticleSubType()== "quark")
995 {
996 Quark =string->GetLeftParton();
997 Di_Quark=string->GetRightParton();
998 } else
999 {
1000 Quark =string->GetRightParton();
1001 Di_Quark=string->GetLeftParton();
1002 }
1003
1004 G4int IDquark =Quark->GetPDGEncoding();
1005 G4int AbsIDquark =std::abs(IDquark);
1006 G4int IDdi_quark =Di_Quark->GetPDGEncoding();
1007 G4int AbsIDdi_quark=std::abs(IDdi_quark);
1008 G4int Di_q1=AbsIDdi_quark/1000;
1009 G4int Di_q2=(AbsIDdi_quark-Di_q1*1000)/100;
1010 G4int SignDiQ= 1;
1011 if (IDdi_quark < 0) SignDiQ=-1;
1012
1013 NumberOf_FS=0;
1014 for (G4int ProdQ=1; ProdQ < 4; ProdQ++) // Loop over quark-antiquark cases: u-ubar, d-dbar, s-sbar
1015 { // (as last splitting, do not consider c-cbar and b-bbar cases)
1016 G4int SignQ;
1017 if (IDquark > 0)
1018 {
1019 SignQ=-1;
1020 if (IDquark == 2) SignQ= 1;
1021 if ((IDquark == 1) && (ProdQ == 3)) SignQ= 1; // K0
1022 if ((IDquark == 3) && (ProdQ == 1)) SignQ=-1; // K0bar
1023 if (IDquark == 4) SignQ= 1; // D+, D0, Ds+
1024 if (IDquark == 5) SignQ=-1; // B-, anti_B0, anti_Bs0
1025 } else
1026 {
1027 SignQ= 1;
1028 if (IDquark == -2) SignQ=-1;
1029 if ((IDquark ==-1) && (ProdQ == 3)) SignQ=-1; // K0bar
1030 if ((IDquark ==-3) && (ProdQ == 1)) SignQ= 1; // K0
1031 if (IDquark == -4) SignQ=-1; // D-, anti_D0, anti_Ds+
1032 if (IDquark == -5) SignQ= 1; // B+, B0, Bs0
1033 }
1034
1035 if (AbsIDquark == ProdQ) SignQ= 1;
1036
1037 G4int StateQ=0;
1038 const G4int maxNumberOfLoops = 1000;
1039 G4int loopCounter = 0;
1040 do // while(Meson[AbsIDquark-1][ProdQ-1][StateQ]<>0);
1041 {
1043 Meson[AbsIDquark-1][ProdQ-1][StateQ]);
1044 if (LeftHadron == NULL) continue;
1045 G4double LeftHadronMass=LeftHadron->GetPDGMass();
1046
1047 G4int StateDiQ=0;
1048 const G4int maxNumberOfInternalLoops = 1000;
1049 G4int internalLoopCounter = 0;
1050 do // while(Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]<>0);
1051 {
1052 RightHadron=G4ParticleTable::GetParticleTable()->FindParticle(SignDiQ*
1053 Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]);
1054 if (RightHadron == NULL) continue;
1055 G4double RightHadronMass=RightHadron->GetPDGMass();
1056
1057 if (StringMass > LeftHadronMass + RightHadronMass)
1058 {
1059 if ( NumberOf_FS > 349 ) {
1061 ed << " NumberOf_FS exceeds its limit: NumberOf_FS=" << NumberOf_FS << G4endl;
1062 G4Exception( "G4LundStringFragmentation::Quark_Diquark_lastSplitting ",
1063 "HAD_LUND_002", JustWarning, ed );
1064 NumberOf_FS = 349;
1065 }
1066
1067 G4double FS_Psqr=lambda(StringMassSqr,sqr(LeftHadronMass),
1068 sqr(RightHadronMass));
1069 FS_Weight[NumberOf_FS]=std::sqrt(FS_Psqr)*
1070 MesonWeight[AbsIDquark-1][ProdQ-1][StateQ]*
1071 BaryonWeight[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]*
1072 Prob_QQbar[ProdQ-1];
1073
1074 FS_LeftHadron[NumberOf_FS] = LeftHadron;
1075 FS_RightHadron[NumberOf_FS]= RightHadron;
1076
1077 NumberOf_FS++;
1078 } // End of if (StringMass > LeftHadronMass + RightHadronMass)
1079
1080 StateDiQ++;
1081
1082 } while( (Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]!=0) &&
1083 ++internalLoopCounter < maxNumberOfInternalLoops );
1084 if ( internalLoopCounter >= maxNumberOfInternalLoops ) {
1085 return false;
1086 }
1087
1088 StateQ++;
1089 } while( (Meson[AbsIDquark-1][ProdQ-1][StateQ]!=0) &&
1090 ++loopCounter < maxNumberOfLoops ); /* Loop checking, 07.08.2015, A.Ribon */
1091
1092 if ( loopCounter >= maxNumberOfLoops ) {
1093 return false;
1094 }
1095 }
1096
1097 return true;
1098}
const G4String & GetParticleSubType() const

References G4VLongitudinalStringDecay::Baryon, G4VLongitudinalStringDecay::BaryonWeight, G4ParticleTable::FindParticle(), G4VLongitudinalStringDecay::FS_LeftHadron, G4VLongitudinalStringDecay::FS_RightHadron, G4VLongitudinalStringDecay::FS_Weight, G4endl, G4Exception(), G4FragmentingString::GetLeftParton(), G4ParticleDefinition::GetParticleSubType(), G4ParticleTable::GetParticleTable(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGMass(), JustWarning, lambda(), G4VLongitudinalStringDecay::Meson, G4VLongitudinalStringDecay::MesonWeight, G4VLongitudinalStringDecay::NumberOf_FS, G4VLongitudinalStringDecay::Prob_QQbar, and sqr().

Referenced by SplitLast().

◆ QuarkSplitup()

G4ParticleDefinition * G4VLongitudinalStringDecay::QuarkSplitup ( G4ParticleDefinition decay,
G4ParticleDefinition *&  created 
)
protectedvirtualinherited

Definition at line 335 of file G4VLongitudinalStringDecay.cc.

337{
338 #ifdef debug_VStringDecay
339 G4cout<<"VlongSD QuarkSplitup: quark ID "<<decay->GetPDGEncoding()<<G4endl;
340 #endif
341
342 G4int IsParticle=(decay->GetPDGEncoding()>0) ? -1 : +1; // if we have a quark, we need antiquark (or diquark)
343
344 pDefPair QuarkPair = CreatePartonPair(IsParticle);
345 created = QuarkPair.second;
346
347 DecayQuark = decay->GetPDGEncoding();
348 NewQuark = created->GetPDGEncoding();
349
350 #ifdef debug_VStringDecay
351 G4cout<<"VlongSD QuarkSplitup: "<<decay->GetPDGEncoding()<<" -> "<<QuarkPair.second->GetPDGEncoding()<<G4endl;
352 G4cout<<"hadronizer->Build(QuarkPair.first, decay)"<<G4endl;
353 #endif
354
355 return hadronizer->Build(QuarkPair.first, decay);
356}

References G4HadronBuilder::Build(), G4VLongitudinalStringDecay::CreatePartonPair(), G4INCL::ClusterDecay::decay(), G4VLongitudinalStringDecay::DecayQuark, G4cout, G4endl, G4ParticleDefinition::GetPDGEncoding(), G4VLongitudinalStringDecay::hadronizer, and G4VLongitudinalStringDecay::NewQuark.

Referenced by Splitup(), and G4QGSMFragmentation::Splitup().

◆ Sample4Momentum()

void G4LundStringFragmentation::Sample4Momentum ( G4LorentzVector Mom,
G4double  Mass,
G4LorentzVector AntiMom,
G4double  AntiMass,
G4double  InitialMass 
)
privatevirtual

Implements G4VLongitudinalStringDecay.

Definition at line 1270 of file G4LundStringFragmentation.cc.

1273{
1274 // ------ Sampling of momenta of 2 last produced hadrons --------------------
1275 G4ThreeVector Pt;
1276 G4double MassMt, AntiMassMt;
1277 G4double AvailablePz, AvailablePz2;
1278 #ifdef debug_LUNDfragmentation
1279 G4cout<<"Sampling of momenta of 2 last produced hadrons ----------------"<<G4endl;
1280 G4cout<<"Init Mass "<<InitialMass<<" FirstM "<<Mass<<" SecondM "<<AntiMass<<" ProbIsotropy "<<G4endl;
1281 #endif
1282
1283 G4double r_val = sqr(InitialMass*InitialMass - Mass*Mass - AntiMass*AntiMass) -
1284 sqr(2.*Mass*AntiMass);
1285 G4double Pabs = (r_val > 0.)? std::sqrt(r_val)/(2.*InitialMass) : 0;
1286
1287 const G4int maxNumberOfLoops = 1000;
1288 G4double SigmaQTw = SigmaQT;
1289 if ( Mass > 930. || AntiMass > 930. ) {
1290 SigmaQT *= ( 1.0 - 0.55*sqr( (Mass+AntiMass)/InitialMass ) );
1291 }
1292 if ( Mass < 930. && AntiMass < 930. ) {} // q-qbar string
1293 if ( ( Mass < 930. && AntiMass > 930. ) ||
1294 ( Mass > 930. && AntiMass < 930. ) ) { // q-di_q string
1295 //SigmaQT = -1.; // isotropical decay
1296 }
1297 if ( Mass > 930. && AntiMass > 930. ) { // qq-qqbar string
1298 SigmaQT *= ( 1.0 - 0.55*sqr( (Mass+AntiMass)/InitialMass ) );
1299 }
1300
1301 G4int loopCounter = 0;
1302 do
1303 {
1304 Pt=SampleQuarkPt(Pabs); Pt.setZ(0); G4double Pt2=Pt.mag2();
1305 MassMt = std::sqrt( Mass * Mass + Pt2);
1306 AntiMassMt= std::sqrt(AntiMass * AntiMass + Pt2);
1307 }
1308 while ( (InitialMass < MassMt + AntiMassMt) && ++loopCounter < maxNumberOfLoops );
1309
1310 SigmaQT = SigmaQTw;
1311
1312 if ( loopCounter >= maxNumberOfLoops ) {
1313 AvailablePz2 = 0.0;
1314 }
1315
1316 AvailablePz2= sqr(InitialMass*InitialMass - sqr(MassMt) - sqr(AntiMassMt)) -
1317 4.*sqr(MassMt*AntiMassMt);
1318
1319 AvailablePz2 /=(4.*InitialMass*InitialMass);
1320 AvailablePz = std::sqrt(AvailablePz2);
1321
1322 G4double Px=Pt.getX();
1323 G4double Py=Pt.getY();
1324
1325 Mom->setPx(Px); Mom->setPy(Py); Mom->setPz(AvailablePz);
1326 Mom->setE(std::sqrt(sqr(MassMt)+AvailablePz2));
1327
1328 AntiMom->setPx(-Px); AntiMom->setPy(-Py); AntiMom->setPz(-AvailablePz);
1329 AntiMom->setE (std::sqrt(sqr(AntiMassMt)+AvailablePz2));
1330
1331 #ifdef debug_LUNDfragmentation
1332 G4cout<<"Fmass Mom "<<Mom->getX()<<" "<<Mom->getY()<<" "<<Mom->getZ()<<" "<<Mom->getT()<<G4endl;
1333 G4cout<<"Smass Mom "<<AntiMom->getX()<<" "<<AntiMom->getY()<<" "<<AntiMom->getZ()
1334 <<" "<<AntiMom->getT()<<G4endl;
1335 #endif
1336}
void setZ(double)
double getX() const
double getY() const
G4ThreeVector SampleQuarkPt(G4double ptMax=-1.)

References G4cout, G4endl, CLHEP::HepLorentzVector::getT(), CLHEP::HepLorentzVector::getX(), CLHEP::Hep3Vector::getX(), CLHEP::HepLorentzVector::getY(), CLHEP::Hep3Vector::getY(), CLHEP::HepLorentzVector::getZ(), CLHEP::Hep3Vector::mag2(), G4VLongitudinalStringDecay::SampleQuarkPt(), CLHEP::HepLorentzVector::setE(), CLHEP::HepLorentzVector::setPx(), CLHEP::HepLorentzVector::setPy(), CLHEP::HepLorentzVector::setPz(), CLHEP::Hep3Vector::setZ(), G4VLongitudinalStringDecay::SigmaQT, and sqr().

Referenced by SplitLast().

◆ SampleInvariantT()

G4double G4HadronicInteraction::SampleInvariantT ( const G4ParticleDefinition p,
G4double  plab,
G4int  Z,
G4int  A 
)
virtualinherited

◆ SampleQuarkFlavor()

G4int G4VLongitudinalStringDecay::SampleQuarkFlavor ( void  )
inherited

Definition at line 393 of file G4VLongitudinalStringDecay.cc.

394{
395 G4int quark(1);
396 G4double ksi = G4UniformRand();
397 if ( ksi < ProbCB ) {
398 if ( ksi < ProbCCbar ) {quark = 4;} // c quark
399 else {quark = 5;} // b quark
400 #ifdef debug_heavyHadrons
401 G4cout << "G4VLongitudinalStringDecay::SampleQuarkFlavor : sampled from the vacuum HEAVY quark = "
402 << quark << G4endl;
403 #endif
404 } else {
405 quark = 1 + (int)(G4UniformRand()/StrangeSuppress);
406 }
407 #ifdef debug_VStringDecay
408 G4cout<<"VlongSD SampleQuarkFlavor "<<quark<<" (ProbCB ProbCCbar ProbBBbar "<<ProbCB
409 <<" "<<ProbCCbar<<" "<<ProbBBbar<<" )"<<G4endl;
410 #endif
411 return quark;
412}

References G4cout, G4endl, G4UniformRand, G4VLongitudinalStringDecay::ProbBBbar, G4VLongitudinalStringDecay::ProbCB, G4VLongitudinalStringDecay::ProbCCbar, and G4VLongitudinalStringDecay::StrangeSuppress.

Referenced by G4VLongitudinalStringDecay::CreatePartonPair().

◆ SampleQuarkPt()

G4ThreeVector G4VLongitudinalStringDecay::SampleQuarkPt ( G4double  ptMax = -1.)
inherited

Definition at line 416 of file G4VLongitudinalStringDecay.cc.

417{
418 G4double Pt;
419 if ( ptMax < 0 ) {
420 // sample full gaussian
421 Pt = -G4Log(G4UniformRand());
422 } else {
423 // sample in limited range
424 G4double q = ptMax/SigmaQT;
425 G4double ymin = (q > 20.) ? 0.0 : G4Exp(-q*q);
426 Pt = -G4Log(G4RandFlat::shoot(ymin, 1.));
427 }
428 Pt = SigmaQT * std::sqrt(Pt);
429 G4double phi = 2.*pi*G4UniformRand();
430 return G4ThreeVector(Pt * std::cos(phi),Pt * std::sin(phi),0);
431}
G4double G4Log(G4double x)
Definition: G4Log.hh:226
static constexpr double pi
Definition: G4SIunits.hh:55
CLHEP::Hep3Vector G4ThreeVector
ThreeVector shoot(const G4int Ap, const G4int Af)

References G4Exp(), G4Log(), G4UniformRand, pi, G4INCL::DeJongSpin::shoot(), and G4VLongitudinalStringDecay::SigmaQT.

Referenced by Sample4Momentum().

◆ SampleState()

G4int G4LundStringFragmentation::SampleState ( void  )
private

Definition at line 1242 of file G4LundStringFragmentation.cc.

1243{
1244 if ( NumberOf_FS > 349 ) {
1246 ed << " NumberOf_FS exceeds its limit: NumberOf_FS=" << NumberOf_FS << G4endl;
1247 G4Exception( "G4LundStringFragmentation::SampleState ", "HAD_LUND_004", JustWarning, ed );
1248 NumberOf_FS = 349;
1249 }
1250
1251 G4double SumWeights=0.;
1252
1253 for (G4int i=0; i<NumberOf_FS; i++) {SumWeights+=FS_Weight[i];}
1254
1255 G4double ksi=G4UniformRand();
1256 G4double Sum=0.;
1257 G4int indexPosition = 0;
1258
1259 for (G4int i=0; i<NumberOf_FS; i++)
1260 {
1261 Sum+=(FS_Weight[i]/SumWeights);
1262 indexPosition=i;
1263 if (Sum >= ksi) break;
1264 }
1265 return indexPosition;
1266}

References G4VLongitudinalStringDecay::FS_Weight, G4endl, G4Exception(), G4UniformRand, JustWarning, and G4VLongitudinalStringDecay::NumberOf_FS.

Referenced by SplitLast().

◆ SetDiquarkBreakProbability()

void G4VLongitudinalStringDecay::SetDiquarkBreakProbability ( G4double  aValue)
inherited

Definition at line 488 of file G4VLongitudinalStringDecay.cc.

489{
490 if ( PastInitPhase ) {
491 throw G4HadronicException(__FILE__, __LINE__,
492 "G4VLongitudinalStringDecay::SetDiquarkBreakProbability after FragmentString() not allowed");
493 } else {
494 DiquarkBreakProb = aValue;
495 }
496}

References G4VLongitudinalStringDecay::DiquarkBreakProb, and G4VLongitudinalStringDecay::PastInitPhase.

Referenced by G4LundStringFragmentation(), and G4QGSMFragmentation::G4QGSMFragmentation().

◆ SetDiquarkSuppression()

void G4VLongitudinalStringDecay::SetDiquarkSuppression ( G4double  aValue)
inherited

◆ SetEnergyMomentumCheckLevels()

void G4HadronicInteraction::SetEnergyMomentumCheckLevels ( G4double  relativeLevel,
G4double  absoluteLevel 
)
inlineinherited

Definition at line 149 of file G4HadronicInteraction.hh.

150 { epCheckLevels.first = relativeLevel;
151 epCheckLevels.second = absoluteLevel; }

References G4HadronicInteraction::epCheckLevels.

Referenced by G4BinaryCascade::G4BinaryCascade(), G4CascadeInterface::G4CascadeInterface(), and G4FTFModel::G4FTFModel().

◆ SetMassCut()

void G4VLongitudinalStringDecay::SetMassCut ( G4double  aValue)
protectedvirtualinherited

Definition at line 139 of file G4VLongitudinalStringDecay.cc.

139{ MassCut=aValue; }

References G4VLongitudinalStringDecay::MassCut.

Referenced by FragmentString(), and G4LundStringFragmentation().

◆ SetMaxEnergy() [1/3]

void G4HadronicInteraction::SetMaxEnergy ( const G4double  anEnergy)
inlineinherited

Definition at line 102 of file G4HadronicInteraction.hh.

103 { theMaxEnergy = anEnergy; }

References G4HadronicInteraction::theMaxEnergy.

Referenced by G4HadronicInteraction::ActivateFor(), G4IonINCLXXPhysics::AddProcess(), G4BertiniElectroNuclearBuilder::Build(), G4LENDBertiniGammaElectroNuclearBuilder::Build(), G4NeutronLENDBuilder::Build(), G4NeutronPHPBuilder::Build(), G4AlphaPHPBuilder::Build(), G4BertiniKaonBuilder::Build(), G4BertiniNeutronBuilder::Build(), G4BertiniPiKBuilder::Build(), G4BertiniPionBuilder::Build(), G4BertiniProtonBuilder::Build(), G4BinaryAlphaBuilder::Build(), G4BinaryDeuteronBuilder::Build(), G4BinaryHe3Builder::Build(), G4BinaryNeutronBuilder::Build(), G4BinaryPiKBuilder::Build(), G4BinaryPionBuilder::Build(), G4BinaryProtonBuilder::Build(), G4BinaryTritonBuilder::Build(), G4DeuteronPHPBuilder::Build(), G4FTFBinaryKaonBuilder::Build(), G4FTFBinaryNeutronBuilder::Build(), G4FTFBinaryPionBuilder::Build(), G4FTFBinaryProtonBuilder::Build(), G4FTFPAntiBarionBuilder::Build(), G4FTFPKaonBuilder::Build(), G4FTFPNeutronBuilder::Build(), G4FTFPPiKBuilder::Build(), G4FTFPPionBuilder::Build(), G4FTFPProtonBuilder::Build(), G4He3PHPBuilder::Build(), G4HyperonFTFPBuilder::Build(), G4HyperonQGSPBuilder::Build(), G4INCLXXNeutronBuilder::Build(), G4INCLXXPionBuilder::Build(), G4INCLXXProtonBuilder::Build(), G4PrecoNeutronBuilder::Build(), G4PrecoProtonBuilder::Build(), G4ProtonPHPBuilder::Build(), G4QGSBinaryKaonBuilder::Build(), G4QGSBinaryNeutronBuilder::Build(), G4QGSBinaryPiKBuilder::Build(), G4QGSBinaryPionBuilder::Build(), G4QGSBinaryProtonBuilder::Build(), G4QGSPAntiBarionBuilder::Build(), G4QGSPKaonBuilder::Build(), G4QGSPLundStrFragmProtonBuilder::Build(), G4QGSPNeutronBuilder::Build(), G4QGSPPiKBuilder::Build(), G4QGSPPionBuilder::Build(), G4TritonPHPBuilder::Build(), G4QGSPProtonBuilder::Build(), G4HadronicBuilder::BuildFTFP_BERT(), G4HadronicBuilder::BuildFTFQGSP_BERT(), G4QGSBuilder::BuildModel(), G4VHadronPhysics::BuildModel(), G4HadronicBuilder::BuildQGSP_FTFP_BERT(), G4EmExtraPhysics::ConstructGammaElectroNuclear(), LBE::ConstructHad(), G4EmExtraPhysics::ConstructLENDGammaNuclear(), G4HadronDElasticPhysics::ConstructProcess(), G4HadronElasticPhysics::ConstructProcess(), G4HadronHElasticPhysics::ConstructProcess(), G4IonINCLXXPhysics::ConstructProcess(), G4IonPhysics::ConstructProcess(), G4IonPhysicsPHP::ConstructProcess(), G4IonQMDPhysics::ConstructProcess(), G4ANuElNucleusNcModel::G4ANuElNucleusNcModel(), G4ANuMuNucleusNcModel::G4ANuMuNucleusNcModel(), G4BertiniKaonBuilder::G4BertiniKaonBuilder(), G4BertiniPiKBuilder::G4BertiniPiKBuilder(), G4BertiniPionBuilder::G4BertiniPionBuilder(), G4BinaryCascade::G4BinaryCascade(), G4BinaryPiKBuilder::G4BinaryPiKBuilder(), G4BinaryPionBuilder::G4BinaryPionBuilder(), G4ChargeExchange::G4ChargeExchange(), G4DiffuseElastic::G4DiffuseElastic(), G4DiffuseElasticV2::G4DiffuseElasticV2(), G4ElectroVDNuclearModel::G4ElectroVDNuclearModel(), G4EMDissociation::G4EMDissociation(), G4FissLib::G4FissLib(), G4FTFBinaryKaonBuilder::G4FTFBinaryKaonBuilder(), G4FTFBinaryNeutronBuilder::G4FTFBinaryNeutronBuilder(), G4FTFBinaryPiKBuilder::G4FTFBinaryPiKBuilder(), G4FTFBinaryPionBuilder::G4FTFBinaryPionBuilder(), G4FTFBinaryProtonBuilder::G4FTFBinaryProtonBuilder(), G4FTFPAntiBarionBuilder::G4FTFPAntiBarionBuilder(), G4FTFPKaonBuilder::G4FTFPKaonBuilder(), G4FTFPNeutronBuilder::G4FTFPNeutronBuilder(), G4FTFPPiKBuilder::G4FTFPPiKBuilder(), G4FTFPPionBuilder::G4FTFPPionBuilder(), G4FTFPProtonBuilder::G4FTFPProtonBuilder(), G4HadronElastic::G4HadronElastic(), G4HadronicAbsorptionFritiof::G4HadronicAbsorptionFritiof(), G4HadronicAbsorptionFritiofWithBinaryCascade::G4HadronicAbsorptionFritiofWithBinaryCascade(), G4hhElastic::G4hhElastic(), G4HyperonFTFPBuilder::G4HyperonFTFPBuilder(), G4HyperonQGSPBuilder::G4HyperonQGSPBuilder(), G4INCLXXPionBuilder::G4INCLXXPionBuilder(), G4LEHadronProtonElastic::G4LEHadronProtonElastic(), G4LENDModel::G4LENDModel(), G4LEnp::G4LEnp(), G4LEpp::G4LEpp(), G4LFission::G4LFission(), G4LowEGammaNuclearModel::G4LowEGammaNuclearModel(), G4MuonVDNuclearModel::G4MuonVDNuclearModel(), G4NeutrinoElectronCcModel::G4NeutrinoElectronCcModel(), G4NeutrinoElectronNcModel::G4NeutrinoElectronNcModel(), G4NeutrinoNucleusModel::G4NeutrinoNucleusModel(), G4NeutronElectronElModel::G4NeutronElectronElModel(), G4NeutronRadCapture::G4NeutronRadCapture(), G4NuclNuclDiffuseElastic::G4NuclNuclDiffuseElastic(), G4NuElNucleusNcModel::G4NuElNucleusNcModel(), G4NuMuNucleusNcModel::G4NuMuNucleusNcModel(), G4ParticleHPCapture::G4ParticleHPCapture(), G4ParticleHPElastic::G4ParticleHPElastic(), G4ParticleHPFission::G4ParticleHPFission(), G4ParticleHPInelastic::G4ParticleHPInelastic(), G4ParticleHPThermalScattering::G4ParticleHPThermalScattering(), G4QGSPAntiBarionBuilder::G4QGSPAntiBarionBuilder(), G4WilsonAbrasionModel::G4WilsonAbrasionModel(), G4HadronPhysicsFTFP_BERT_HP::Neutron(), G4HadronPhysicsINCLXX::Neutron(), G4HadronPhysicsQGSP_BERT_HP::Neutron(), G4HadronPhysicsQGSP_BIC_HP::Neutron(), G4HadronPhysicsShielding::Neutron(), and G4VHadronPhysics::NewModel().

◆ SetMaxEnergy() [2/3]

void G4HadronicInteraction::SetMaxEnergy ( G4double  anEnergy,
const G4Element anElement 
)
inherited

Definition at line 151 of file G4HadronicInteraction.cc.

153{
154 Block();
155 if(!theMaxEnergyListElements.empty()) {
156 for(auto & elmlist : theMaxEnergyListElements) {
157 if( anElement == elmlist.second ) {
158 elmlist.first = anEnergy;
159 return;
160 }
161 }
162 }
163 theMaxEnergyListElements.push_back(std::pair<G4double, const G4Element *>(anEnergy, anElement));
164}

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theMaxEnergyListElements.

◆ SetMaxEnergy() [3/3]

void G4HadronicInteraction::SetMaxEnergy ( G4double  anEnergy,
const G4Material aMaterial 
)
inherited

Definition at line 166 of file G4HadronicInteraction.cc.

167{
168 Block();
169 if(!theMaxEnergyList.empty()) {
170 for(auto & matlist: theMaxEnergyList) {
171 if( aMaterial == matlist.second ) {
172 matlist.first = anEnergy;
173 return;
174 }
175 }
176 }
177 theMaxEnergyList.push_back(std::pair<G4double, const G4Material *>(anEnergy, aMaterial));
178}

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theMaxEnergyList.

◆ SetMinEnergy() [1/3]

void G4HadronicInteraction::SetMinEnergy ( G4double  anEnergy)
inlineinherited

Definition at line 89 of file G4HadronicInteraction.hh.

90 { theMinEnergy = anEnergy; }

References G4HadronicInteraction::theMinEnergy.

Referenced by G4HadronicInteraction::ActivateFor(), G4BertiniElectroNuclearBuilder::Build(), G4LENDBertiniGammaElectroNuclearBuilder::Build(), G4NeutronLENDBuilder::Build(), G4NeutronPHPBuilder::Build(), G4AlphaPHPBuilder::Build(), G4BertiniKaonBuilder::Build(), G4BertiniNeutronBuilder::Build(), G4BertiniPiKBuilder::Build(), G4BertiniPionBuilder::Build(), G4BertiniProtonBuilder::Build(), G4BinaryAlphaBuilder::Build(), G4BinaryDeuteronBuilder::Build(), G4BinaryHe3Builder::Build(), G4BinaryNeutronBuilder::Build(), G4BinaryPiKBuilder::Build(), G4BinaryPionBuilder::Build(), G4BinaryProtonBuilder::Build(), G4BinaryTritonBuilder::Build(), G4DeuteronPHPBuilder::Build(), G4FTFBinaryKaonBuilder::Build(), G4FTFBinaryNeutronBuilder::Build(), G4FTFBinaryPiKBuilder::Build(), G4FTFBinaryPionBuilder::Build(), G4FTFBinaryProtonBuilder::Build(), G4FTFPAntiBarionBuilder::Build(), G4FTFPKaonBuilder::Build(), G4FTFPNeutronBuilder::Build(), G4FTFPPiKBuilder::Build(), G4FTFPPionBuilder::Build(), G4FTFPProtonBuilder::Build(), G4He3PHPBuilder::Build(), G4HyperonFTFPBuilder::Build(), G4HyperonQGSPBuilder::Build(), G4INCLXXNeutronBuilder::Build(), G4INCLXXPionBuilder::Build(), G4INCLXXProtonBuilder::Build(), G4PrecoNeutronBuilder::Build(), G4PrecoProtonBuilder::Build(), G4ProtonPHPBuilder::Build(), G4QGSBinaryKaonBuilder::Build(), G4QGSBinaryNeutronBuilder::Build(), G4QGSBinaryPiKBuilder::Build(), G4QGSBinaryPionBuilder::Build(), G4QGSBinaryProtonBuilder::Build(), G4QGSPAntiBarionBuilder::Build(), G4QGSPKaonBuilder::Build(), G4QGSPLundStrFragmProtonBuilder::Build(), G4QGSPNeutronBuilder::Build(), G4QGSPPiKBuilder::Build(), G4QGSPPionBuilder::Build(), G4TritonPHPBuilder::Build(), G4QGSPProtonBuilder::Build(), G4QGSBuilder::BuildModel(), G4VHadronPhysics::BuildModel(), G4EmExtraPhysics::ConstructGammaElectroNuclear(), LBE::ConstructHad(), G4EmExtraPhysics::ConstructLENDGammaNuclear(), G4HadronElasticPhysicsHP::ConstructProcess(), G4HadronElasticPhysicsLEND::ConstructProcess(), G4HadronElasticPhysicsPHP::ConstructProcess(), G4HadronDElasticPhysics::ConstructProcess(), G4HadronElasticPhysics::ConstructProcess(), G4HadronHElasticPhysics::ConstructProcess(), G4IonElasticPhysics::ConstructProcess(), G4IonINCLXXPhysics::ConstructProcess(), G4IonPhysics::ConstructProcess(), G4IonPhysicsPHP::ConstructProcess(), G4IonQMDPhysics::ConstructProcess(), G4ANuElNucleusNcModel::G4ANuElNucleusNcModel(), G4ANuMuNucleusNcModel::G4ANuMuNucleusNcModel(), G4BertiniKaonBuilder::G4BertiniKaonBuilder(), G4BertiniPiKBuilder::G4BertiniPiKBuilder(), G4BertiniPionBuilder::G4BertiniPionBuilder(), G4BinaryCascade::G4BinaryCascade(), G4BinaryPiKBuilder::G4BinaryPiKBuilder(), G4BinaryPionBuilder::G4BinaryPionBuilder(), G4ChargeExchange::G4ChargeExchange(), G4DiffuseElastic::G4DiffuseElastic(), G4DiffuseElasticV2::G4DiffuseElasticV2(), G4ElectroVDNuclearModel::G4ElectroVDNuclearModel(), G4EMDissociation::G4EMDissociation(), G4FissLib::G4FissLib(), G4FTFBinaryKaonBuilder::G4FTFBinaryKaonBuilder(), G4FTFBinaryNeutronBuilder::G4FTFBinaryNeutronBuilder(), G4FTFBinaryPiKBuilder::G4FTFBinaryPiKBuilder(), G4FTFBinaryPionBuilder::G4FTFBinaryPionBuilder(), G4FTFBinaryProtonBuilder::G4FTFBinaryProtonBuilder(), G4FTFPAntiBarionBuilder::G4FTFPAntiBarionBuilder(), G4FTFPKaonBuilder::G4FTFPKaonBuilder(), G4FTFPNeutronBuilder::G4FTFPNeutronBuilder(), G4FTFPPiKBuilder::G4FTFPPiKBuilder(), G4FTFPPionBuilder::G4FTFPPionBuilder(), G4FTFPProtonBuilder::G4FTFPProtonBuilder(), G4HadronElastic::G4HadronElastic(), G4HadronicAbsorptionBertini::G4HadronicAbsorptionBertini(), G4HadronicAbsorptionFritiof::G4HadronicAbsorptionFritiof(), G4HadronicAbsorptionFritiofWithBinaryCascade::G4HadronicAbsorptionFritiofWithBinaryCascade(), G4hhElastic::G4hhElastic(), G4HyperonFTFPBuilder::G4HyperonFTFPBuilder(), G4HyperonQGSPBuilder::G4HyperonQGSPBuilder(), G4INCLXXPionBuilder::G4INCLXXPionBuilder(), G4LEHadronProtonElastic::G4LEHadronProtonElastic(), G4LENDModel::G4LENDModel(), G4LEnp::G4LEnp(), G4LEpp::G4LEpp(), G4LFission::G4LFission(), G4LowEGammaNuclearModel::G4LowEGammaNuclearModel(), G4MuonVDNuclearModel::G4MuonVDNuclearModel(), G4NeutrinoElectronCcModel::G4NeutrinoElectronCcModel(), G4NeutrinoElectronNcModel::G4NeutrinoElectronNcModel(), G4NeutrinoNucleusModel::G4NeutrinoNucleusModel(), G4NeutronElectronElModel::G4NeutronElectronElModel(), G4NeutronRadCapture::G4NeutronRadCapture(), G4NuclNuclDiffuseElastic::G4NuclNuclDiffuseElastic(), G4NuElNucleusNcModel::G4NuElNucleusNcModel(), G4NuMuNucleusNcModel::G4NuMuNucleusNcModel(), G4ParticleHPCapture::G4ParticleHPCapture(), G4ParticleHPElastic::G4ParticleHPElastic(), G4ParticleHPFission::G4ParticleHPFission(), G4ParticleHPInelastic::G4ParticleHPInelastic(), G4ParticleHPThermalScattering::G4ParticleHPThermalScattering(), G4QGSPAntiBarionBuilder::G4QGSPAntiBarionBuilder(), G4WilsonAbrasionModel::G4WilsonAbrasionModel(), G4NeutrinoElectronCcModel::IsApplicable(), G4HadronPhysicsFTFP_BERT_HP::Neutron(), G4HadronPhysicsINCLXX::Neutron(), G4HadronPhysicsQGSP_BERT_HP::Neutron(), G4HadronPhysicsQGSP_BIC_HP::Neutron(), G4HadronPhysicsShielding::Neutron(), and G4VHadronPhysics::NewModel().

◆ SetMinEnergy() [2/3]

void G4HadronicInteraction::SetMinEnergy ( G4double  anEnergy,
const G4Element anElement 
)
inherited

Definition at line 101 of file G4HadronicInteraction.cc.

103{
104 Block();
105 if(!theMinEnergyListElements.empty()) {
106 for(auto & elmlist : theMinEnergyListElements) {
107 if( anElement == elmlist.second ) {
108 elmlist.first = anEnergy;
109 return;
110 }
111 }
112 }
113 theMinEnergyListElements.push_back(std::pair<G4double, const G4Element *>(anEnergy, anElement));
114}

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theMinEnergyListElements.

◆ SetMinEnergy() [3/3]

void G4HadronicInteraction::SetMinEnergy ( G4double  anEnergy,
const G4Material aMaterial 
)
inherited

Definition at line 116 of file G4HadronicInteraction.cc.

118{
119 Block();
120 if(!theMinEnergyList.empty()) {
121 for(auto & matlist : theMinEnergyList) {
122 if( aMaterial == matlist.second ) {
123 matlist.first = anEnergy;
124 return;
125 }
126 }
127 }
128 theMinEnergyList.push_back(std::pair<G4double, const G4Material *>(anEnergy, aMaterial));
129}

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theMinEnergyList.

◆ SetMinimalStringMass()

void G4VLongitudinalStringDecay::SetMinimalStringMass ( const G4FragmentingString *const  string)
inherited

Definition at line 952 of file G4VLongitudinalStringDecay.cc.

953{
954 //MaxMass = -350.0*GeV;
955 G4double EstimatedMass=MaxMass;
956
957 G4ParticleDefinition* LeftParton = string->GetLeftParton();
958 G4ParticleDefinition* RightParton = string->GetRightParton();
959 if( LeftParton->GetParticleSubType() == RightParton->GetParticleSubType() ) { // q qbar, qq qqbar
960 if( LeftParton->GetPDGEncoding() * RightParton->GetPDGEncoding() > 0 ) {
961 // Not allowed combination of the partons
962 throw G4HadronicException(__FILE__, __LINE__,
963 "G4VLongitudinalStringDecay::SetMinimalStringMass: Illegal quark content as input");
964 }
965 }
966 if( LeftParton->GetParticleSubType() != RightParton->GetParticleSubType() ) { // q qq, qbar qqbar
967 if( LeftParton->GetPDGEncoding() * RightParton->GetPDGEncoding() < 0 ) {
968 // Not allowed combination of the partons
969 throw G4HadronicException(__FILE__, __LINE__,
970 "G4VLongitudinalStringDecay::SetMinimalStringMass: Illegal quark content as input");
971 }
972 }
973
974 G4int Qleft =std::abs(string->GetLeftParton()->GetPDGEncoding());
975 G4int Qright=std::abs(string->GetRightParton()->GetPDGEncoding());
976
977 if ((Qleft < 6) && (Qright < 6)) { // Q-Qbar string
978 EstimatedMass=minMassQQbarStr[Qleft-1][Qright-1];
979 MinimalStringMass=EstimatedMass;
980 SetMinimalStringMass2(EstimatedMass);
981 return;
982 }
983
984 if ((Qleft < 6) && (Qright > 1000)) { // Q - DiQ string
985 G4int q1=Qright/1000;
986 G4int q2=(Qright/100)%10;
987 EstimatedMass=minMassQDiQStr[Qleft-1][q1-1][q2-1];
988 MinimalStringMass=EstimatedMass; // It can be negative!
989 SetMinimalStringMass2(EstimatedMass);
990 return;
991 }
992
993 if ((Qleft > 1000) && (Qright < 6)) { // DiQ - Q string 6 6 6
994 G4int q1=Qleft/1000;
995 G4int q2=(Qleft/100)%10;
996 EstimatedMass=minMassQDiQStr[Qright-1][q1-1][q2-1];
997 MinimalStringMass=EstimatedMass; // It can be negative!
998 SetMinimalStringMass2(EstimatedMass);
999 return;
1000 }
1001
1002 // DiQuark - Anti DiQuark string -----------------
1003
1004 G4double StringM=string->Get4Momentum().mag();
1005
1006 #ifdef debug_LUNDfragmentation
1007 // G4cout<<"MinStringMass// Input String mass "<<string->Get4Momentum().mag()<<" Qleft "<<Qleft<<G4endl;
1008 #endif
1009
1010 G4int q1= Qleft/1000 ;
1011 G4int q2=(Qleft/100)%10 ;
1012
1013 G4int q3= Qright/1000 ;
1014 G4int q4=(Qright/100)%10;
1015
1016 // -------------- 2 baryon production or 2 mesons production --------
1017
1018 G4double EstimatedMass1 = minMassQDiQStr[q1-1][q2-1][0];
1019 G4double EstimatedMass2 = minMassQDiQStr[q3-1][q4-1][0];
1020 // Mass is negative if there is no corresponding particle.
1021
1022 if ( (EstimatedMass1 > 0.) && (EstimatedMass2 > 0.)) {
1023 EstimatedMass = EstimatedMass1 + EstimatedMass2;
1024 if ( StringM > EstimatedMass ) { // 2 baryon production is possible.
1025 MinimalStringMass=EstimatedMass1 + EstimatedMass2;
1026 SetMinimalStringMass2(EstimatedMass);
1027 return;
1028 }
1029 }
1030
1031 if ( (EstimatedMass1 < 0.) && (EstimatedMass2 > 0.)) {
1032 EstimatedMass = MaxMass;
1033 MinimalStringMass=EstimatedMass;
1034 SetMinimalStringMass2(EstimatedMass);
1035 return;
1036 }
1037
1038 if ( (EstimatedMass1 > 0.) && (EstimatedMass2 < 0.)) {
1039 EstimatedMass = EstimatedMass1;
1040 MinimalStringMass=EstimatedMass;
1041 SetMinimalStringMass2(EstimatedMass);
1042 return;
1043 }
1044
1045 // if ( EstimatedMass >= StringM ) {
1046 // ------------- Re-orangement ---------------
1047 EstimatedMass=std::min(minMassQQbarStr[q1-1][q3-1] + minMassQQbarStr[q2-1][q4-1],
1048 minMassQQbarStr[q1-1][q4-1] + minMassQQbarStr[q2-1][q3-1]);
1049
1050 // In principle, re-arrangement and 2 baryon production can compete.
1051 // More physics consideration is needed.
1052
1053 MinimalStringMass=EstimatedMass;
1054 SetMinimalStringMass2(EstimatedMass);
1055
1056 return;
1057}
G4ParticleDefinition * GetRightParton(void) const
void SetMinimalStringMass2(const G4double aValue)

References G4FragmentingString::GetLeftParton(), G4ParticleDefinition::GetParticleSubType(), G4ParticleDefinition::GetPDGEncoding(), G4FragmentingString::GetRightParton(), G4VLongitudinalStringDecay::MaxMass, G4INCL::Math::min(), G4VLongitudinalStringDecay::MinimalStringMass, G4VLongitudinalStringDecay::minMassQDiQStr, G4VLongitudinalStringDecay::minMassQQbarStr, and G4VLongitudinalStringDecay::SetMinimalStringMass2().

Referenced by FragmentString(), G4QGSMFragmentation::FragmentString(), IsItFragmentable(), G4VLongitudinalStringDecay::ProduceOneHadron(), SplitEandP(), G4QGSMFragmentation::SplitEandP(), SplitLast(), StopFragmenting(), and G4QGSMFragmentation::StopFragmenting().

◆ SetMinimalStringMass2()

void G4VLongitudinalStringDecay::SetMinimalStringMass2 ( const G4double  aValue)
inherited

◆ SetMinMasses()

void G4VLongitudinalStringDecay::SetMinMasses ( )
inherited

Definition at line 609 of file G4VLongitudinalStringDecay.cc.

610{
611 // ------ For estimation of a minimal string mass ---------------
613 Mass_of_s_quark =500.*MeV;
614 Mass_of_c_quark =1600.*MeV;
615 Mass_of_b_quark =4500.*MeV;
617
618 // ---------------- Determination of minimal mass of q-qbar strings -------------------
619 G4ParticleDefinition * hadron1; G4int Code1;
620 G4ParticleDefinition * hadron2; G4int Code2;
621 for (G4int i=1; i < 6; i++) {
622 Code1 = 100*i + 10*1 + 1;
623 hadron1 = FindParticle(Code1);
624
625 if (hadron1 != nullptr) {
626 for (G4int j=1; j < 6; j++) {
627 Code2 = 100*j + 10*1 + 1;
628 hadron2 = FindParticle(Code2);
629 if (hadron2 != nullptr) {
630 minMassQQbarStr[i-1][j-1] = hadron1->GetPDGMass() + hadron2->GetPDGMass() + 70.0 * MeV;
631 }
632 }
633 }
634 }
635
636 minMassQQbarStr[1][1] = minMassQQbarStr[0][0]; // u-ubar = 0.5 Pi0 + 0.24 Eta + 0.25 Eta'
637
638 // ---------------- Determination of minimal mass of qq-q strings -------------------
639 G4ParticleDefinition * hadron3;
640 G4int kfla, kflb;
641 // MaxMass = -350.0*GeV; // If there will be a particle with mass larger than Higgs the value must be changed.
642
643 for (G4int i=1; i < 6; i++) { //i=1
644 Code1 = 100*i + 10*1 + 1;
645 hadron1 = FindParticle(Code1);
646 for (G4int j=1; j < 6; j++) {
647 for (G4int k=1; k < 6; k++) {
648 kfla = std::max(j,k);
649 kflb = std::min(j,k);
650
651 // Add d-quark
652 Code2 = 1000*kfla + 100*kflb + 10*1 + 2;
653 if ( (j == 1) && (k==1)) Code2 = 1000*2 + 100*1 + 10*1 + 2; // In the case - add u-quark.
654
656 hadron3 = G4ParticleTable::GetParticleTable()->FindParticle(Code2 + 2);
657
658 if ((hadron2 == nullptr) && (hadron3 == nullptr)) {minMassQDiQStr[i-1][j-1][k-1] = MaxMass; continue;};
659
660 if ((hadron2 != nullptr) && (hadron3 != nullptr)) {
661 if (hadron2->GetPDGMass() > hadron3->GetPDGMass() ) { hadron2 = hadron3; }
662 };
663
664 if ((hadron2 != nullptr) && (hadron3 == nullptr)) {};
665
666 if ((hadron2 == nullptr) && (hadron3 != nullptr)) {hadron2 = hadron3;};
667
668 minMassQDiQStr[i-1][j-1][k-1] = hadron1->GetPDGMass() + hadron2->GetPDGMass() + 70.0 * MeV;
669 }
670 }
671 }
672
673 // ------ An estimated minimal string mass ----------------------
676 // q charges d u s c b
677 Qcharge[0] = -1; Qcharge[1] = 2; Qcharge[2] = -1; Qcharge[3] = 2; Qcharge[4] = -1;
678
679 // For treating of small string decays
680 for (G4int i=0; i<5; i++)
681 { for (G4int j=0; j<5; j++)
682 { for (G4int k=0; k<7; k++)
683 {
684 Meson[i][j][k]=0; MesonWeight[i][j][k]=0.;
685 }
686 }
687 }
688 //--------------------------
689 for (G4int i=0; i<5; i++)
690 { for (G4int j=0; j<5; j++)
691 {
692 Meson[i][j][0] = 100 * (std::max(i,j)+1) + 10 * (std::min(i,j)+1) + 1; // Scalar meson
693 MesonWeight[i][j][0] = ( pspin_meson);
694 Meson[i][j][1] = 100 * (std::max(i,j)+1) + 10 * (std::min(i,j)+1) + 3; // Vector meson
695 MesonWeight[i][j][1] = (1.-pspin_meson);
696 }
697 }
698
699 //qqs indexes
700 //dd1 -> scalarMesonMix[0] * 111 + (1-scalarMesonMix[0]-scalarMesonMix[1]) * 221 + scalarMesonMix[1] * 331 (000)
701 //dd1 -> Pi0 Eta Eta'
702
703 Meson[0][0][0] = 111; MesonWeight[0][0][0] = ( pspin_meson) * ( scalarMesonMix[0] ); // Pi0
704 Meson[0][0][2] = 221; MesonWeight[0][0][3] = ( pspin_meson) * (1-scalarMesonMix[0]-scalarMesonMix[1]); // Eta
705 Meson[0][0][3] = 331; MesonWeight[0][0][4] = ( pspin_meson) * ( scalarMesonMix[1]); // Eta'
706
707 //dd3 -> vectorMesonMix[0] * 113 + (1-vectorMesonMix[0]-vectorMesonMix[1]) * 223 + vectorMesonMix[1] * 333 (001)
708 //dd3 -> rho_0 omega phi
709
710 Meson[0][0][1] = 113; MesonWeight[0][0][1] = (1.-pspin_meson) * ( vectorMesonMix[0] ); // Rho
711 Meson[0][0][4] = 223; MesonWeight[0][0][4] = (1.-pspin_meson) * (1-vectorMesonMix[0]-vectorMesonMix[1]); // omega
712 Meson[0][0][5] = 333; MesonWeight[0][0][5] = (1.-pspin_meson) * ( vectorMesonMix[1]); // phi
713
714 //uu1 -> scalarMesonMix[0] * 111 + (1-scalarMesonMix[0]-scalarMesonMix[1]) * 221 + scalarMesonMix[1] * 331 (110)
715 //uu1 -> Pi0 Eta Eta'
716
717 Meson[1][1][0] = 111; MesonWeight[1][1][0] = ( pspin_meson) * ( scalarMesonMix[0] ); // Pi0
718 Meson[1][1][2] = 221; MesonWeight[1][1][2] = ( pspin_meson) * (1-scalarMesonMix[0]-scalarMesonMix[1]); // Eta
719 Meson[1][1][3] = 331; MesonWeight[1][1][3] = ( pspin_meson) * ( scalarMesonMix[1]); // Eta'
720
721 //uu3 -> vectorMesonMix[0] * 113 + (1-vectorMesonMix[0]-vectorMesonMix[1]) * 223 + vectorMesonMix[1] * 333 (111)
722 //uu3 -> rho_0 omega phi
723
724 Meson[1][1][1] = 113; MesonWeight[1][1][1] = (1.-pspin_meson) * ( vectorMesonMix[0] ); // Rho
725 Meson[1][1][4] = 223; MesonWeight[1][1][4] = (1.-pspin_meson) * (1-vectorMesonMix[0]-vectorMesonMix[1]); // omega
726 Meson[1][1][5] = 333; MesonWeight[1][1][5] = (1.-pspin_meson) * ( vectorMesonMix[1]); // phi
727
728 //ss1 -> (1-scalarMesonMix[5]) * 221 + scalarMesonMix[5] * 331 (220)
729 //ss1 -> Eta Eta'
730
731 Meson[2][2][0] = 221; MesonWeight[2][2][0] = ( pspin_meson) * (1-scalarMesonMix[5] ); // Eta
732 Meson[2][2][2] = 331; MesonWeight[2][2][2] = ( pspin_meson) * ( scalarMesonMix[5]); // Eta'
733
734 //ss3 -> (1-vectorMesonMix[5]) * 223 + vectorMesonMix[5] * 333 (221)
735 //ss3 -> omega phi
736
737 Meson[2][2][1] = 223; MesonWeight[2][2][1] = (1.-pspin_meson) * (1-vectorMesonMix[5] ); // omega
738 Meson[2][2][3] = 333; MesonWeight[2][2][3] = (1.-pspin_meson) * ( vectorMesonMix[5]); // phi
739
740 //cc1 -> ProbEta_c /(1-pspin_meson) 441 (330) Probability of Eta_c
741 //cc3 -> (1-ProbEta_c)/( pspin_meson) 443 (331) Probability of J/Psi
742
743 //bb1 -> ProbEta_b /pspin_meson 551 (440) Probability of Eta_b
744 //bb3 -> (1-ProbEta_b)/pspin_meson 553 (441) Probability of Upsilon
745
746 if ( pspin_meson != 0. ) {
747 Meson[3][3][0] *= ( ProbEta_c)/( pspin_meson); // Eta_c
748 Meson[3][3][1] *= (1.0-ProbEta_c)/(1.-pspin_meson); // J/Psi
749
750 Meson[4][4][0] *= ( ProbEta_b)/( pspin_meson); // Eta_b
751 Meson[4][4][1] *= (1.0-ProbEta_b)/(1.-pspin_meson); // Upsilon
752 }
753
754 //--------------------------
755
756 for (G4int i=0; i<5; i++)
757 { for (G4int j=0; j<5; j++)
758 { for (G4int k=0; k<5; k++)
759 { for (G4int l=0; l<4; l++)
760 { Baryon[i][j][k][l]=0; BaryonWeight[i][j][k][l]=0.;}
761 }
762 }
763 }
764
765 kfla =0; kflb =0;
766 G4int kflc(0), kfld(0), kfle(0), kflf(0);
767 for (G4int i=0; i<5; i++)
768 { for (G4int j=0; j<5; j++)
769 { for (G4int k=0; k<5; k++)
770 {
771 kfla = i+1; kflb = j+1; kflc = k+1;
772 kfld = std::max(kfla,kflb);
773 kfld = std::max(kfld,kflc);
774
775 kflf = std::min(kfla,kflb);
776 kflf = std::min(kflf,kflc);
777
778 kfle = kfla + kflb + kflc - kfld - kflf;
779
780 Baryon[i][j][k][0] = 1000 * kfld + 100 * kfle + 10 * kflf + 2; // spin=1/2
781 BaryonWeight[i][j][k][0] = ( pspin_barion);
782 Baryon[i][j][k][1] = 1000 * kfld + 100 * kfle + 10 * kflf + 4; // spin=3/2
783 BaryonWeight[i][j][k][1] = (1.-pspin_barion);
784 }
785 }
786 }
787
788 // Delta- ddd - only 1114
789 Baryon[0][0][0][0] = 1114; BaryonWeight[0][0][0][0] = 1.0;
790 Baryon[0][0][0][1] = 0; BaryonWeight[0][0][0][1] = 0.0;
791
792 // Delta++ uuu - only 2224
793 Baryon[1][1][1][0] = 2224; BaryonWeight[1][1][1][0] = 1.0;
794 Baryon[1][1][1][1] = 0; BaryonWeight[1][1][1][1] = 0.0;
795
796 // Omega- sss - only 3334
797 Baryon[2][2][2][0] = 3334; BaryonWeight[2][2][2][0] = 1.0;
798 Baryon[2][2][2][1] = 0; BaryonWeight[2][2][2][1] = 0.0;
799
800 // Omega_cc++ ccc - only 4444
801 Baryon[3][3][3][0] = 4444; BaryonWeight[3][3][3][0] = 1.0;
802 Baryon[3][3][3][1] = 0; BaryonWeight[3][3][3][1] = 0.0;
803
804 // Omega_bb- bbb - only 5554
805 Baryon[4][4][4][0] = 5554; BaryonWeight[4][4][4][0] = 1.0;
806 Baryon[4][4][4][1] = 0; BaryonWeight[4][4][4][1] = 0.0;
807
808 // Lambda/Sigma0 sud - 3122/3212
809 Baryon[0][1][2][0] = 3122; BaryonWeight[0][1][2][0] *= 0.5; // Lambda
810 Baryon[0][2][1][0] = 3122; BaryonWeight[0][2][1][0] *= 0.5;
811 Baryon[1][0][2][0] = 3122; BaryonWeight[1][0][2][0] *= 0.5;
812 Baryon[1][2][0][0] = 3122; BaryonWeight[1][2][0][0] *= 0.5;
813 Baryon[2][0][1][0] = 3122; BaryonWeight[2][0][1][0] *= 0.5;
814 Baryon[2][1][0][0] = 3122; BaryonWeight[2][1][0][0] *= 0.5;
815
816 Baryon[0][1][2][2] = 3212; BaryonWeight[0][1][2][2] = 0.5 * pspin_barion; // Sigma0
817 Baryon[0][2][1][2] = 3212; BaryonWeight[0][2][1][2] = 0.5 * pspin_barion;
818 Baryon[1][0][2][2] = 3212; BaryonWeight[1][0][2][2] = 0.5 * pspin_barion;
819 Baryon[1][2][0][2] = 3212; BaryonWeight[1][2][0][2] = 0.5 * pspin_barion;
820 Baryon[2][0][1][2] = 3212; BaryonWeight[2][0][1][2] = 0.5 * pspin_barion;
821 Baryon[2][1][0][2] = 3212; BaryonWeight[2][1][0][2] = 0.5 * pspin_barion;
822
823 // Lambda_c+/Sigma_c+ cud - 4122/4212
824 Baryon[0][1][3][0] = 4122; BaryonWeight[0][1][3][0] *= 0.5; // Lambda_c+
825 Baryon[0][3][1][0] = 4122; BaryonWeight[0][3][1][0] *= 0.5;
826 Baryon[1][0][3][0] = 4122; BaryonWeight[1][0][3][0] *= 0.5;
827 Baryon[1][3][0][0] = 4122; BaryonWeight[1][3][0][0] *= 0.5;
828 Baryon[3][0][1][0] = 4122; BaryonWeight[3][0][1][0] *= 0.5;
829 Baryon[3][1][0][0] = 4122; BaryonWeight[3][1][0][0] *= 0.5;
830
831 Baryon[0][1][3][2] = 4212; BaryonWeight[0][1][3][2] = 0.5 * pspin_barion; // SigmaC+
832 Baryon[0][3][1][2] = 4212; BaryonWeight[0][3][1][2] = 0.5 * pspin_barion;
833 Baryon[1][0][3][2] = 4212; BaryonWeight[1][0][3][2] = 0.5 * pspin_barion;
834 Baryon[1][3][0][2] = 4212; BaryonWeight[1][3][0][2] = 0.5 * pspin_barion;
835 Baryon[3][0][1][2] = 4212; BaryonWeight[3][0][1][2] = 0.5 * pspin_barion;
836 Baryon[3][1][0][2] = 4212; BaryonWeight[3][1][0][2] = 0.5 * pspin_barion;
837
838 // Xi_c+/Xi_c+' cus - 4232/4322
839 Baryon[1][2][3][0] = 4232; BaryonWeight[1][2][3][0] *= 0.5; // Xi_c+
840 Baryon[1][3][2][0] = 4232; BaryonWeight[1][3][2][0] *= 0.5;
841 Baryon[2][1][3][0] = 4232; BaryonWeight[2][1][3][0] *= 0.5;
842 Baryon[2][3][1][0] = 4232; BaryonWeight[2][3][1][0] *= 0.5;
843 Baryon[3][1][2][0] = 4232; BaryonWeight[3][1][2][0] *= 0.5;
844 Baryon[3][2][1][0] = 4232; BaryonWeight[3][2][1][0] *= 0.5;
845
846 Baryon[1][2][3][2] = 4322; BaryonWeight[1][2][3][2] = 0.5 * pspin_barion; // Xi_c+'
847 Baryon[1][3][2][2] = 4322; BaryonWeight[1][3][2][2] = 0.5 * pspin_barion;
848 Baryon[2][1][3][2] = 4322; BaryonWeight[2][1][3][2] = 0.5 * pspin_barion;
849 Baryon[2][3][1][2] = 4322; BaryonWeight[2][3][1][2] = 0.5 * pspin_barion;
850 Baryon[3][1][2][2] = 4322; BaryonWeight[3][1][2][2] = 0.5 * pspin_barion;
851 Baryon[3][2][1][2] = 4322; BaryonWeight[3][2][1][2] = 0.5 * pspin_barion;
852
853 // Xi_c0/Xi_c0' cus - 4132/4312
854 Baryon[0][2][3][0] = 4132; BaryonWeight[0][2][3][0] *= 0.5; // Xi_c0
855 Baryon[0][3][2][0] = 4132; BaryonWeight[0][3][2][0] *= 0.5;
856 Baryon[2][0][3][0] = 4132; BaryonWeight[2][0][3][0] *= 0.5;
857 Baryon[2][3][0][0] = 4132; BaryonWeight[2][3][0][0] *= 0.5;
858 Baryon[3][0][2][0] = 4132; BaryonWeight[3][0][2][0] *= 0.5;
859 Baryon[3][2][0][0] = 4132; BaryonWeight[3][2][0][0] *= 0.5;
860
861 Baryon[0][2][3][2] = 4312; BaryonWeight[0][2][3][2] = 0.5 * pspin_barion; // Xi_c0'
862 Baryon[0][3][2][2] = 4312; BaryonWeight[0][3][2][2] = 0.5 * pspin_barion;
863 Baryon[2][0][3][2] = 4312; BaryonWeight[2][0][3][2] = 0.5 * pspin_barion;
864 Baryon[2][3][0][2] = 4312; BaryonWeight[2][3][0][2] = 0.5 * pspin_barion;
865 Baryon[3][0][2][2] = 4312; BaryonWeight[3][0][2][2] = 0.5 * pspin_barion;
866 Baryon[3][2][0][2] = 4312; BaryonWeight[3][2][0][2] = 0.5 * pspin_barion;
867
868 // Lambda_b0/Sigma_b0 bud - 5122/5212
869 Baryon[0][1][4][0] = 5122; BaryonWeight[0][1][4][0] *= 0.5; // Lambda_b0
870 Baryon[0][4][1][0] = 5122; BaryonWeight[0][4][1][0] *= 0.5;
871 Baryon[1][0][4][0] = 5122; BaryonWeight[1][0][4][0] *= 0.5;
872 Baryon[1][4][0][0] = 5122; BaryonWeight[1][4][0][0] *= 0.5;
873 Baryon[4][0][1][0] = 5122; BaryonWeight[4][0][1][0] *= 0.5;
874 Baryon[4][1][0][0] = 5122; BaryonWeight[4][1][0][0] *= 0.5;
875
876 Baryon[0][1][4][2] = 5212; BaryonWeight[0][1][4][2] = 0.5 * pspin_barion; // Sigma_b0
877 Baryon[0][4][1][2] = 5212; BaryonWeight[0][4][1][2] = 0.5 * pspin_barion;
878 Baryon[1][0][4][2] = 5212; BaryonWeight[1][0][4][2] = 0.5 * pspin_barion;
879 Baryon[1][4][0][2] = 5212; BaryonWeight[1][4][0][2] = 0.5 * pspin_barion;
880 Baryon[4][0][1][2] = 5212; BaryonWeight[4][0][1][2] = 0.5 * pspin_barion;
881 Baryon[4][1][0][2] = 5212; BaryonWeight[4][1][0][2] = 0.5 * pspin_barion;
882
883 // Xi_b0/Xi_b0' bus - 5232/5322
884 Baryon[1][2][4][0] = 5232; BaryonWeight[1][2][4][0] *= 0.5; // Xi_b0
885 Baryon[1][4][2][0] = 5232; BaryonWeight[1][4][2][0] *= 0.5;
886 Baryon[2][1][4][0] = 5232; BaryonWeight[2][1][4][0] *= 0.5;
887 Baryon[2][4][1][0] = 5232; BaryonWeight[2][4][1][0] *= 0.5;
888 Baryon[4][1][2][0] = 5232; BaryonWeight[4][1][2][0] *= 0.5;
889 Baryon[4][2][1][0] = 5232; BaryonWeight[4][2][1][0] *= 0.5;
890
891 Baryon[1][2][4][2] = 5322; BaryonWeight[1][2][4][2] = 0.5 * pspin_barion; // Xi_b0'
892 Baryon[1][4][2][2] = 5322; BaryonWeight[1][4][2][2] = 0.5 * pspin_barion;
893 Baryon[2][1][4][2] = 5322; BaryonWeight[2][1][4][2] = 0.5 * pspin_barion;
894 Baryon[2][4][1][2] = 5322; BaryonWeight[2][4][1][2] = 0.5 * pspin_barion;
895 Baryon[4][1][2][2] = 5322; BaryonWeight[4][1][2][2] = 0.5 * pspin_barion;
896 Baryon[4][2][1][2] = 5322; BaryonWeight[4][2][1][2] = 0.5 * pspin_barion;
897
898 // Xi_b-/Xi_b-' bus - 5132/5312
899 Baryon[0][2][4][0] = 5132; BaryonWeight[0][2][4][0] *= 0.5; // Xi_b-
900 Baryon[0][4][2][0] = 5132; BaryonWeight[0][4][2][0] *= 0.5;
901 Baryon[2][0][4][0] = 5132; BaryonWeight[2][0][4][0] *= 0.5;
902 Baryon[2][4][0][0] = 5132; BaryonWeight[2][4][0][0] *= 0.5;
903 Baryon[4][0][2][0] = 5132; BaryonWeight[4][0][2][0] *= 0.5;
904 Baryon[4][2][0][0] = 5132; BaryonWeight[4][2][0][0] *= 0.5;
905
906 Baryon[0][2][4][2] = 5312; BaryonWeight[0][2][4][2] = 0.5 * pspin_barion; // Xi_b-'
907 Baryon[0][4][2][2] = 5312; BaryonWeight[0][4][2][2] = 0.5 * pspin_barion;
908 Baryon[2][0][4][2] = 5312; BaryonWeight[2][0][4][2] = 0.5 * pspin_barion;
909 Baryon[2][4][0][2] = 5312; BaryonWeight[2][4][0][2] = 0.5 * pspin_barion;
910 Baryon[4][0][2][2] = 5312; BaryonWeight[4][0][2][2] = 0.5 * pspin_barion;
911 Baryon[4][2][0][2] = 5312; BaryonWeight[4][2][0][2] = 0.5 * pspin_barion;
912
913 for (G4int i=0; i<5; i++)
914 { for (G4int j=0; j<5; j++)
915 { for (G4int k=0; k<5; k++)
916 { for (G4int l=0; l<4; l++)
917 {
918 G4ParticleDefinition * TestHadron=
920 /*
921 G4cout<<i<<" "<<j<<" "<<k<<" "<<l<<" "<<Baryon[i][j][k][l]<<" "<<TestHadron<<" "<<BaryonWeight[i][j][k][l];
922 if (TestHadron != nullptr) G4cout<<" "<<TestHadron->GetParticleName();
923 if ((TestHadron == nullptr)&&(Baryon[i][j][k][l] != 0)) G4cout<<" *****";
924 if ((TestHadron == nullptr)&&(Baryon[i][j][k][l] == 0)) G4cout<<" ---------------";
925 G4cout<<G4endl;
926 */
927 if ((TestHadron == nullptr)&&(Baryon[i][j][k][l] != 0)) Baryon[i][j][k][l] = 0;
928 }
929 }
930 }
931 }
932
933 // --------- Probabilities of q-qbar pair productions for kink or gluons.
934 G4double ProbUUbar = 0.33;
935 Prob_QQbar[0]=ProbUUbar; // Probability of ddbar production
936 Prob_QQbar[1]=ProbUUbar; // Probability of uubar production
937 Prob_QQbar[2]=1.0-2.*ProbUUbar; // Probability of ssbar production
938 Prob_QQbar[3]=0.0; // Probability of ccbar production
939 Prob_QQbar[4]=0.0; // Probability of bbbar production
940
941 for ( G4int i=0 ; i<350 ; i++ ) { // Must be checked
942 FS_LeftHadron[i] = 0;
943 FS_RightHadron[i] = 0;
944 FS_Weight[i] = 0.0;
945 }
946
947 NumberOf_FS = 0;
948}
std::vector< G4double > scalarMesonMix
std::vector< G4double > vectorMesonMix

References G4VLongitudinalStringDecay::Baryon, G4VLongitudinalStringDecay::BaryonWeight, G4VLongitudinalStringDecay::FindParticle(), G4ParticleTable::FindParticle(), G4VLongitudinalStringDecay::FS_LeftHadron, G4VLongitudinalStringDecay::FS_RightHadron, G4VLongitudinalStringDecay::FS_Weight, G4ParticleTable::GetParticleTable(), G4ParticleDefinition::GetPDGMass(), G4VLongitudinalStringDecay::Mass_of_b_quark, G4VLongitudinalStringDecay::Mass_of_c_quark, G4VLongitudinalStringDecay::Mass_of_light_quark, G4VLongitudinalStringDecay::Mass_of_s_quark, G4VLongitudinalStringDecay::Mass_of_string_junction, G4INCL::Math::max(), G4VLongitudinalStringDecay::MaxMass, G4VLongitudinalStringDecay::Meson, G4VLongitudinalStringDecay::MesonWeight, MeV, G4INCL::Math::min(), G4VLongitudinalStringDecay::MinimalStringMass, G4VLongitudinalStringDecay::MinimalStringMass2, G4VLongitudinalStringDecay::minMassQDiQStr, G4VLongitudinalStringDecay::minMassQQbarStr, G4VLongitudinalStringDecay::NumberOf_FS, G4VLongitudinalStringDecay::Prob_QQbar, G4VLongitudinalStringDecay::ProbEta_b, G4VLongitudinalStringDecay::ProbEta_c, G4VLongitudinalStringDecay::pspin_barion, G4VLongitudinalStringDecay::pspin_meson, G4VLongitudinalStringDecay::Qcharge, G4VLongitudinalStringDecay::scalarMesonMix, and G4VLongitudinalStringDecay::vectorMesonMix.

Referenced by G4LundStringFragmentation(), G4QGSMFragmentation::G4QGSMFragmentation(), and G4VLongitudinalStringDecay::G4VLongitudinalStringDecay().

◆ SetModelName()

void G4HadronicInteraction::SetModelName ( const G4String nam)
inlineprotectedinherited

◆ SetProbBBbar()

void G4VLongitudinalStringDecay::SetProbBBbar ( G4double  aValue)
inherited

◆ SetProbCCbar()

void G4VLongitudinalStringDecay::SetProbCCbar ( G4double  aValue)
inherited

◆ SetProbEta_b()

void G4VLongitudinalStringDecay::SetProbEta_b ( G4double  aValue)
inherited

◆ SetProbEta_c()

void G4VLongitudinalStringDecay::SetProbEta_c ( G4double  aValue)
inherited

◆ SetRecoilEnergyThreshold()

void G4HadronicInteraction::SetRecoilEnergyThreshold ( G4double  val)
inlineinherited

◆ SetScalarMesonMixings()

void G4VLongitudinalStringDecay::SetScalarMesonMixings ( std::vector< G4double aVector)
inherited

Definition at line 528 of file G4VLongitudinalStringDecay.cc.

529{
530 if ( PastInitPhase ) {
531 throw G4HadronicException(__FILE__, __LINE__,
532 "G4VLongitudinalStringDecay::SetScalarMesonMixings after FragmentString() not allowed");
533 } else {
534 if ( aVector.size() < 6 )
535 throw G4HadronicException(__FILE__, __LINE__,
536 "G4VLongitudinalStringDecay::SetScalarMesonMixings( argument Vector too small");
537 scalarMesonMix[0] = aVector[0];
538 scalarMesonMix[1] = aVector[1];
539 scalarMesonMix[2] = aVector[2];
540 scalarMesonMix[3] = aVector[3];
541 scalarMesonMix[4] = aVector[4];
542 scalarMesonMix[5] = aVector[5];
543 delete hadronizer;
545 }
546}

References G4VLongitudinalStringDecay::hadronizer, G4VLongitudinalStringDecay::PastInitPhase, G4VLongitudinalStringDecay::ProbEta_b, G4VLongitudinalStringDecay::ProbEta_c, G4VLongitudinalStringDecay::pspin_barion, G4VLongitudinalStringDecay::pspin_meson, G4VLongitudinalStringDecay::scalarMesonMix, and G4VLongitudinalStringDecay::vectorMesonMix.

◆ SetSigmaTransverseMomentum()

void G4VLongitudinalStringDecay::SetSigmaTransverseMomentum ( G4double  aQT)
inherited

Definition at line 462 of file G4VLongitudinalStringDecay.cc.

463{
464 if ( PastInitPhase ) {
465 throw G4HadronicException(__FILE__, __LINE__,
466 "G4VLongitudinalStringDecay::SetSigmaTransverseMomentum after FragmentString() not allowed");
467 } else {
468 SigmaQT = aValue;
469 }
470}

References G4VLongitudinalStringDecay::PastInitPhase, and G4VLongitudinalStringDecay::SigmaQT.

◆ SetSpinThreeHalfBarionProbability()

void G4VLongitudinalStringDecay::SetSpinThreeHalfBarionProbability ( G4double  aValue)
inherited

◆ SetStrangenessSuppression()

void G4VLongitudinalStringDecay::SetStrangenessSuppression ( G4double  aValue)
inherited

◆ SetStringTensionParameter()

void G4VLongitudinalStringDecay::SetStringTensionParameter ( G4double  aValue)
inherited

Definition at line 602 of file G4VLongitudinalStringDecay.cc.

603{
604 Kappa = aValue * GeV/fermi;
605}

References fermi, GeV, and G4VLongitudinalStringDecay::Kappa.

Referenced by G4LundStringFragmentation().

◆ SetVectorMesonMixings()

void G4VLongitudinalStringDecay::SetVectorMesonMixings ( std::vector< G4double aVector)
inherited

Definition at line 550 of file G4VLongitudinalStringDecay.cc.

551{
552 if ( PastInitPhase ) {
553 throw G4HadronicException(__FILE__, __LINE__,
554 "G4VLongitudinalStringDecay::SetVectorMesonMixings after FragmentString() not allowed");
555 } else {
556 if ( aVector.size() < 6 )
557 throw G4HadronicException(__FILE__, __LINE__,
558 "G4VLongitudinalStringDecay::SetVectorMesonMixings( argument Vector too small");
559 vectorMesonMix[0] = aVector[0];
560 vectorMesonMix[1] = aVector[1];
561 vectorMesonMix[2] = aVector[2];
562 vectorMesonMix[3] = aVector[3];
563 vectorMesonMix[4] = aVector[4];
564 vectorMesonMix[5] = aVector[5];
565 delete hadronizer;
567 }
568}

References G4VLongitudinalStringDecay::hadronizer, G4VLongitudinalStringDecay::PastInitPhase, G4VLongitudinalStringDecay::ProbEta_b, G4VLongitudinalStringDecay::ProbEta_c, G4VLongitudinalStringDecay::pspin_barion, G4VLongitudinalStringDecay::pspin_meson, G4VLongitudinalStringDecay::scalarMesonMix, and G4VLongitudinalStringDecay::vectorMesonMix.

◆ SetVectorMesonProbability()

void G4VLongitudinalStringDecay::SetVectorMesonProbability ( G4double  aValue)
inherited

◆ SetVerboseLevel()

void G4HadronicInteraction::SetVerboseLevel ( G4int  value)
inlineinherited

◆ SplitEandP()

G4LorentzVector * G4LundStringFragmentation::SplitEandP ( G4ParticleDefinition pHadron,
G4FragmentingString string,
G4FragmentingString newString 
)
privatevirtual

Implements G4VLongitudinalStringDecay.

Definition at line 513 of file G4LundStringFragmentation.cc.

516{
517 G4LorentzVector String4Momentum=string->Get4Momentum();
518 G4double StringMT2=string->MassT2();
519 G4double StringMT =std::sqrt(StringMT2);
520
521 G4double HadronMass = pHadron->GetPDGMass();
522 SetMinimalStringMass(newString);
523
524 if ( MinimalStringMass < 0.0 ) return nullptr;
525
526 #ifdef debug_LUNDfragmentation
527 G4cout<<G4endl<<"Start LUND SplitEandP "<<G4endl;
528 G4cout<<"String 4 mom, String M and Mt "<<String4Momentum<<" "<<String4Momentum.mag()
529 <<" "<<std::sqrt(StringMT2)<<G4endl;
530 G4cout<<"Hadron "<<pHadron->GetParticleName()<<G4endl;
531 G4cout<<"HadM MinimalStringMassLeft StringM hM+sM "<<HadronMass<<" "<<MinimalStringMass<<" "
532 <<String4Momentum.mag()<<" "<<HadronMass+MinimalStringMass<<G4endl;
533 #endif
534
535 if ((HadronMass + MinimalStringMass > string->Mass()) || MinimalStringMass < 0.)
536 {
537 #ifdef debug_LUNDfragmentation
538 G4cout<<"Mass of the string is not sufficient to produce the hadron!"<<G4endl;
539 #endif
540 return 0;
541 } // have to start all over!
542
543 String4Momentum.setPz(0.);
544 G4ThreeVector StringPt=String4Momentum.vect();
545 StringPt.setZ(0.);
546
547 // calculate and assign hadron transverse momentum component HadronPx and HadronPy
548 G4ThreeVector HadronPt , RemSysPt;
549 G4double HadronMassT2, ResidualMassT2;
550 G4double HadronMt, Pt, Pt2, phi;
551
552 G4double TmtCur = Tmt;
553 if ( (string->GetDecayParton()->GetParticleSubType()== "quark") &&
554 (pHadron->GetBaryonNumber() != 0) ) {
555 TmtCur = Tmt*0.37; // q->B
556 } else if ( (string->GetDecayParton()->GetParticleSubType()== "quark") &&
557 (pHadron->GetBaryonNumber() == 0) ) {
558 //TmtCur = Tmt; // q->M
559 } else if ( (string->GetDecayParton()->GetParticleSubType()== "di_quark") &&
560 (pHadron->GetBaryonNumber() == 0) ) {
561 //TmtCur = Tmt*0.89; // qq -> M
562 } else if ( (string->GetDecayParton()->GetParticleSubType()== "di_quark") &&
563 (pHadron->GetBaryonNumber() != 0) ) {
564 TmtCur = Tmt*1.35; // qq -> B
565 }
566
567 //... sample Pt of the hadron
568 G4int attempt=0;
569 do
570 {
571 attempt++; if (attempt > StringLoopInterrupt) {return 0;}
572
573 HadronMt = HadronMass - TmtCur*G4Log(G4UniformRand());
574 Pt2 = sqr(HadronMt)-sqr(HadronMass); Pt=std::sqrt(Pt2);
575 phi = 2.*pi*G4UniformRand();
576 HadronPt = G4ThreeVector( Pt*std::cos(phi), Pt*std::sin(phi), 0. );
577 RemSysPt = StringPt - HadronPt;
578 HadronMassT2 = sqr(HadronMass) + HadronPt.mag2();
579 ResidualMassT2=sqr(MinimalStringMass) + RemSysPt.mag2();
580
581 } while (std::sqrt(HadronMassT2) + std::sqrt(ResidualMassT2) > StringMT);
582
583 //... sample z to define hadron longitudinal momentum and energy
584 //... but first check the available phase space
585
586 G4double Pz2 = (sqr(StringMT2 - HadronMassT2 - ResidualMassT2) -
587 4*HadronMassT2 * ResidualMassT2)/4./StringMT2;
588
589 if (Pz2 < 0 ) {return 0;} // have to start all over!
590
591 //... then compute allowed z region z_min <= z <= z_max
592
593 G4double Pz = std::sqrt(Pz2);
594 G4double zMin = (std::sqrt(HadronMassT2+Pz2) - Pz)/std::sqrt(StringMT2);
595 // G4double zMin = (std::sqrt(HadronMassT2+Pz2) - 0.)/std::sqrt(StringMT2); // For testing purposes
596 G4double zMax = (std::sqrt(HadronMassT2+Pz2) + Pz)/std::sqrt(StringMT2);
597
598 if (zMin >= zMax) return 0; // have to start all over!
599
600 G4double z = GetLightConeZ(zMin, zMax,
601 string->GetDecayParton()->GetPDGEncoding(), pHadron,
602 HadronPt.x(), HadronPt.y());
603
604 //... now compute hadron longitudinal momentum and energy
605 // longitudinal hadron momentum component HadronPz
606
607 HadronPt.setZ(0.5* string->GetDecayDirection() *
608 (z * string->LightConeDecay() -
609 HadronMassT2/(z * string->LightConeDecay())));
610 G4double HadronE = 0.5* (z * string->LightConeDecay() +
611 HadronMassT2/(z * string->LightConeDecay()));
612
613 G4LorentzVector * a4Momentum= new G4LorentzVector(HadronPt,HadronE);
614
615 #ifdef debug_LUNDfragmentation
616 G4cout<<G4endl<<" string->GetDecayDirection() "<<string->GetDecayDirection()<<G4endl<<G4endl;
617 G4cout<<"string->LightConeDecay() "<<string->LightConeDecay()<<G4endl;
618 G4cout<<"HadronPt,HadronE "<<HadronPt<<" "<<HadronE<<G4endl;
619 G4cout<<"String4Momentum "<<String4Momentum<<G4endl;
620 G4cout<<"Out of LUND SplitEandP "<<G4endl<<G4endl;
621 #endif
622
623 return a4Momentum;
624}
CLHEP::HepLorentzVector G4LorentzVector
Hep3Vector vect() const
G4ParticleDefinition * GetDecayParton() const
virtual G4double GetLightConeZ(G4double zmin, G4double zmax, G4int PartonEncoding, G4ParticleDefinition *pHadron, G4double Px, G4double Py)

References G4cout, G4endl, G4Log(), G4UniformRand, G4ParticleDefinition::GetBaryonNumber(), G4FragmentingString::GetDecayDirection(), G4FragmentingString::GetDecayParton(), GetLightConeZ(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetParticleSubType(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGMass(), G4FragmentingString::LightConeDecay(), CLHEP::HepLorentzVector::mag(), CLHEP::Hep3Vector::mag2(), G4FragmentingString::Mass(), G4VLongitudinalStringDecay::MinimalStringMass, pi, G4VLongitudinalStringDecay::SetMinimalStringMass(), CLHEP::HepLorentzVector::setPz(), CLHEP::Hep3Vector::setZ(), sqr(), G4VLongitudinalStringDecay::StringLoopInterrupt, Tmt, CLHEP::HepLorentzVector::vect(), CLHEP::Hep3Vector::x(), and CLHEP::Hep3Vector::y().

Referenced by Splitup().

◆ SplitLast()

G4bool G4LundStringFragmentation::SplitLast ( G4FragmentingString string,
G4KineticTrackVector LeftVector,
G4KineticTrackVector RightVector 
)
privatevirtual

Implements G4VLongitudinalStringDecay.

Definition at line 684 of file G4LundStringFragmentation.cc.

687{
688 //... perform last cluster decay
689 SetMinimalStringMass( string);
690 if ( MinimalStringMass < 0.) return false;
691 #ifdef debug_LUNDfragmentation
692 G4cout<<G4endl<<"Split last-----------------------------------------"<<G4endl;
693 G4cout<<"MinimalStringMass "<<MinimalStringMass<<G4endl;
694 G4cout<<"Left "<<string->GetLeftParton()->GetPDGEncoding()<<" "<<string->GetPleft()<<G4endl;
695 G4cout<<"Right "<<string->GetRightParton()->GetPDGEncoding()<<" "<<string->GetPright()<<G4endl;
696 G4cout<<"String4mom "<<string->GetPstring()<<" "<<string->GetPstring().mag()<<G4endl;
697 #endif
698
699 G4LorentzVector Str4Mom=string->Get4Momentum();
700 G4LorentzRotation toCms(-1*Str4Mom.boostVector());
701 G4LorentzVector Pleft = toCms * string->GetPleft();
702 toCms.rotateZ(-1*Pleft.phi());
703 toCms.rotateY(-1*Pleft.theta());
704
705 G4LorentzRotation toObserverFrame= toCms.inverse();
706
707 G4double StringMass=string->Mass();
708
709 G4ParticleDefinition * LeftHadron(0), * RightHadron(0);
710
711 NumberOf_FS=0;
712 for (G4int i=0; i<350; i++) {FS_Weight[i]=0.;}
713
714 G4int sampledState = 0;
715
716 #ifdef debug_LUNDfragmentation
717 G4cout<<"StrMass "<<StringMass<<" q's "
718 <<string->GetLeftParton()->GetParticleName()<<" "
719 <<string->GetRightParton()->GetParticleName()<<G4endl;
720 #endif
721
722 string->SetLeftPartonStable(); // to query quark contents..
723
724 if (string->IsAFourQuarkString() )
725 {
726 // The string is qq-qqbar type. Diquarks are on the string ends
727 if (StringMass-MinimalStringMass < 0.)
728 {
729 if (! Diquark_AntiDiquark_belowThreshold_lastSplitting(string, LeftHadron, RightHadron) )
730 {
731 return false;
732 }
733 } else
734 {
735 Diquark_AntiDiquark_aboveThreshold_lastSplitting(string, LeftHadron, RightHadron);
736
737 if (NumberOf_FS == 0) return false;
738
739 sampledState = SampleState();
740 if (string->GetLeftParton()->GetPDGEncoding() < 0)
741 {
742 LeftHadron =FS_LeftHadron[sampledState];
743 RightHadron=FS_RightHadron[sampledState];
744 } else
745 {
746 LeftHadron =FS_RightHadron[sampledState];
747 RightHadron=FS_LeftHadron[sampledState];
748 }
749 }
750 } else
751 {
752 if (string->DecayIsQuark() && string->StableIsQuark() )
753 { //... there are quarks on cluster ends
754 #ifdef debug_LUNDfragmentation
755 G4cout<<"Q Q string LastSplit"<<G4endl;
756 #endif
757
758 Quark_AntiQuark_lastSplitting(string, LeftHadron, RightHadron);
759
760 if (NumberOf_FS == 0) return false;
761 sampledState = SampleState();
762 if (string->GetLeftParton()->GetPDGEncoding() < 0)
763 {
764 LeftHadron =FS_RightHadron[sampledState];
765 RightHadron=FS_LeftHadron[sampledState];
766 } else
767 {
768 LeftHadron =FS_LeftHadron[sampledState];
769 RightHadron=FS_RightHadron[sampledState];
770 }
771 } else
772 { //... there is a Diquark on one of the cluster ends
773 #ifdef debug_LUNDfragmentation
774 G4cout<<"DiQ Q string Last Split"<<G4endl;
775 #endif
776
777 Quark_Diquark_lastSplitting(string, LeftHadron, RightHadron);
778
779 if (NumberOf_FS == 0) return false;
780 sampledState = SampleState();
781
782 if (string->GetLeftParton()->GetParticleSubType() == "quark")
783 {
784 LeftHadron =FS_LeftHadron[sampledState];
785 RightHadron=FS_RightHadron[sampledState];
786 } else
787 {
788 LeftHadron =FS_RightHadron[sampledState];
789 RightHadron=FS_LeftHadron[sampledState];
790 }
791 }
792
793 }
794
795 #ifdef debug_LUNDfragmentation
796 G4cout<<"Sampled hadrons: "<<LeftHadron->GetParticleName()<<" "<<RightHadron->GetParticleName()<<G4endl;
797 #endif
798
799 G4LorentzVector P_left =string->GetPleft(), P_right = string->GetPright();
800
801 G4LorentzVector LeftMom, RightMom;
803
804 Sample4Momentum(&LeftMom, LeftHadron->GetPDGMass(),
805 &RightMom, RightHadron->GetPDGMass(),
806 StringMass);
807
808 // Sample4Momentum ascribes LeftMom.pz() along positive Z axis for baryons in many cases.
809 // It must be negative in case when the system is moving against Z axis.
810
811 if (!(string->DecayIsQuark() && string->StableIsQuark() ))
812 { // Only for qq - q, q - qq, and qq - qqbar -------------------
813
814 if ( G4UniformRand() <= 0.5 )
815 {
816 if (P_left.z() <= 0.) {G4LorentzVector tmp = LeftMom; LeftMom=RightMom; RightMom=tmp;}
817 }
818 else
819 {
820 if (P_right.z() >= 0.) {G4LorentzVector tmp = LeftMom; LeftMom=RightMom; RightMom=tmp;}
821 }
822 }
823
824 LeftMom *=toObserverFrame;
825 RightMom*=toObserverFrame;
826
827 LeftVector->push_back(new G4KineticTrack(LeftHadron, 0, Pos, LeftMom));
828 RightVector->push_back(new G4KineticTrack(RightHadron, 0, Pos, RightMom));
829
830 string->LorentzRotate(toObserverFrame);
831 return true;
832}
double theta() const
Hep3Vector boostVector() const
HepLorentzVector & rotateZ(double)
HepLorentzVector & rotateY(double)
G4bool Quark_AntiQuark_lastSplitting(G4FragmentingString *&string, G4ParticleDefinition *&LeftHadron, G4ParticleDefinition *&RightHadron)
virtual void Sample4Momentum(G4LorentzVector *Mom, G4double Mass, G4LorentzVector *AntiMom, G4double AntiMass, G4double InitialMass)
G4bool Diquark_AntiDiquark_aboveThreshold_lastSplitting(G4FragmentingString *&string, G4ParticleDefinition *&LeftHadron, G4ParticleDefinition *&RightHadron)
G4bool Quark_Diquark_lastSplitting(G4FragmentingString *&string, G4ParticleDefinition *&LeftHadron, G4ParticleDefinition *&RightHadron)
G4bool Diquark_AntiDiquark_belowThreshold_lastSplitting(G4FragmentingString *&string, G4ParticleDefinition *&LeftHadron, G4ParticleDefinition *&RightHadron)
ush Pos
Definition: deflate.h:91

References CLHEP::HepLorentzVector::boostVector(), G4FragmentingString::DecayIsQuark(), Diquark_AntiDiquark_aboveThreshold_lastSplitting(), Diquark_AntiDiquark_belowThreshold_lastSplitting(), G4VLongitudinalStringDecay::FS_LeftHadron, G4VLongitudinalStringDecay::FS_RightHadron, G4VLongitudinalStringDecay::FS_Weight, G4cout, G4endl, G4UniformRand, G4FragmentingString::GetLeftParton(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetParticleSubType(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGMass(), CLHEP::HepLorentzRotation::inverse(), G4FragmentingString::IsAFourQuarkString(), G4VLongitudinalStringDecay::MinimalStringMass, G4VLongitudinalStringDecay::NumberOf_FS, CLHEP::HepLorentzVector::phi(), Quark_AntiQuark_lastSplitting(), Quark_Diquark_lastSplitting(), CLHEP::HepLorentzRotation::rotateY(), CLHEP::HepLorentzRotation::rotateZ(), Sample4Momentum(), SampleState(), G4VLongitudinalStringDecay::SetMinimalStringMass(), G4FragmentingString::StableIsQuark(), CLHEP::HepLorentzVector::theta(), and CLHEP::HepLorentzVector::z().

Referenced by Loop_toFragmentString().

◆ Splitup()

G4KineticTrack * G4LundStringFragmentation::Splitup ( G4FragmentingString string,
G4FragmentingString *&  newString 
)
privatevirtual

Implements G4VLongitudinalStringDecay.

Definition at line 340 of file G4LundStringFragmentation.cc.

342{
343 #ifdef debug_LUNDfragmentation
344 G4cout<<G4endl;
345 G4cout<<"Start SplitUP ========================="<<G4endl;
346 G4cout<<"String partons: " <<string->GetLeftParton()->GetPDGEncoding()<<" "
347 <<string->GetRightParton()->GetPDGEncoding()<<" "
348 <<"Direction " <<string->GetDecayDirection()<<G4endl;
349 #endif
350
351 //... random choice of string end to use for creating the hadron (decay)
352 G4int SideOfDecay = (G4UniformRand() < 0.5)? 1: -1;
353 if (SideOfDecay < 0)
354 {
355 string->SetLeftPartonStable();
356 } else
357 {
358 string->SetRightPartonStable();
359 }
360
361 G4ParticleDefinition *newStringEnd;
362 G4ParticleDefinition * HadronDefinition;
363
364 G4double StringMass=string->Mass();
365
366 G4double ProbDqADq = GetDiquarkSuppress();
367 G4double ProbSaS = 1.0 - 2.0 * GetStrangeSuppress();
368
369 #ifdef debug_LUNDfragmentation
370 G4cout<<"StrMass DiquarkSuppression "<<StringMass<<" "<<GetDiquarkSuppress()<<G4endl;
371 #endif
372
373 G4int NumberOfpossibleBaryons = 2;
374
375 if (string->GetLeftParton()->GetParticleSubType() != "quark") NumberOfpossibleBaryons++;
376 if (string->GetRightParton()->GetParticleSubType() != "quark") NumberOfpossibleBaryons++;
377
378 G4double ActualProb = ProbDqADq ;
379 ActualProb *= (1.0-sqr(NumberOfpossibleBaryons*1400.0/StringMass));
380
381 SetDiquarkSuppression(ActualProb);
382
383 G4double Mth = 1250.0; // 2 Mk + Mpi
384 if ( NumberOfpossibleBaryons == 3 ){Mth = 2520.0;} // Mlambda/Msigma + Mk + Mpi
385 else if ( NumberOfpossibleBaryons == 4 ){Mth = 2380.0;} // 2 Mlambda/Msigma + Mk + Mpi
386 else {}
387
388 ActualProb = ProbSaS * (1.0 - G4Pow::GetInstance()->powA( Mth/StringMass , 4.0 ));
389 if ( ActualProb < 0.0 ) ActualProb = 0.0;
390 SetStrangenessSuppression((1.0-ActualProb)/2.0);
391
392 #ifdef debug_LUNDfragmentation
393 G4cout<<"StrMass DiquarkSuppression corrected "<<StringMass<<" "<<GetDiquarkSuppress()<<G4endl;
394 #endif
395
396 if (string->DecayIsQuark())
397 {
398 HadronDefinition= QuarkSplitup(string->GetDecayParton(), newStringEnd);
399 } else {
400 HadronDefinition= DiQuarkSplitup(string->GetDecayParton(), newStringEnd);
401 }
402
403 SetDiquarkSuppression(ProbDqADq);
404 SetStrangenessSuppression((1.0-ProbSaS)/2.0);
405
406 if ( HadronDefinition == NULL ) { G4KineticTrack * Hadron =0; return Hadron; }
407
408 #ifdef debug_LUNDfragmentation
409 G4cout<<"The parton "<<string->GetDecayParton()->GetPDGEncoding()<<" "
410 <<" produces hadron "<<HadronDefinition->GetParticleName()
411 <<" and is transformed to "<<newStringEnd->GetPDGEncoding()<<G4endl;
412 G4cout<<"The side of the string decay Left/Right (1/-1) "<<SideOfDecay<<G4endl;
413 #endif
414 // create new String from old, ie. keep Left and Right order, but replace decay
415
416 if ( newString ) delete newString;
417
418 newString=new G4FragmentingString(*string,newStringEnd); // To store possible quark containt of new string
419
420 #ifdef debug_LUNDfragmentation
421 G4cout<<"An attempt to determine its energy (SplitEandP)"<<G4endl;
422 #endif
423 G4LorentzVector* HadronMomentum=SplitEandP(HadronDefinition, string, newString);
424
425 delete newString; newString=0;
426
427 G4KineticTrack * Hadron =0;
428 if ( HadronMomentum != 0 ) {
429
430 #ifdef debug_LUNDfragmentation
431 G4cout<<"The attempt was successful"<<G4endl;
432 #endif
434 Hadron = new G4KineticTrack(HadronDefinition, 0,Pos, *HadronMomentum);
435
436 if ( newString ) delete newString;
437
438 newString=new G4FragmentingString(*string,newStringEnd,
439 HadronMomentum);
440 delete HadronMomentum;
441 }
442 else
443 {
444 #ifdef debug_LUNDfragmentation
445 G4cout<<"The attempt was not successful !!!"<<G4endl;
446 #endif
447 }
448
449 #ifdef debug_LUNDfragmentation
450 G4cout<<"End SplitUP (G4VLongitudinalStringDecay) ====================="<<G4endl;
451 #endif
452
453 return Hadron;
454}
virtual G4LorentzVector * SplitEandP(G4ParticleDefinition *pHadron, G4FragmentingString *string, G4FragmentingString *newString)
virtual G4ParticleDefinition * DiQuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)
virtual G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)

References G4FragmentingString::DecayIsQuark(), DiQuarkSplitup(), G4cout, G4endl, G4UniformRand, G4FragmentingString::GetDecayParton(), G4VLongitudinalStringDecay::GetDiquarkSuppress(), G4Pow::GetInstance(), G4FragmentingString::GetLeftParton(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetParticleSubType(), G4ParticleDefinition::GetPDGEncoding(), G4FragmentingString::GetRightParton(), G4VLongitudinalStringDecay::GetStrangeSuppress(), G4Pow::powA(), G4VLongitudinalStringDecay::QuarkSplitup(), G4VLongitudinalStringDecay::SetDiquarkSuppression(), G4VLongitudinalStringDecay::SetStrangenessSuppression(), SplitEandP(), and sqr().

Referenced by Loop_toFragmentString().

◆ StopFragmenting()

G4bool G4LundStringFragmentation::StopFragmenting ( const G4FragmentingString *const  string)
privatevirtual

Implements G4VLongitudinalStringDecay.

Definition at line 312 of file G4LundStringFragmentation.cc.

313{
314 SetMinimalStringMass(string);
315
316 if ( MinimalStringMass < 0.) return true;
317
318 if (string->IsAFourQuarkString())
319 {
320 return G4UniformRand() < G4Exp(-0.0005*(string->Mass() - MinimalStringMass));
321 } else {
322
323 if (MinimalStringMass < 0.0 ) return false; // For a string with di-quark having c or b quarks and s, c, b quarks
324
325 G4bool Result = G4UniformRand() <
326 G4Exp(-0.66e-6*(string->Mass()*string->Mass() - MinimalStringMass*MinimalStringMass));
327 // G4bool Result = string->Mass() < MinimalStringMass + 150.*MeV*G4UniformRand(); // a'la LUND
328
329 #ifdef debug_LUNDfragmentation
330 G4cout<<"StopFragmenting MinimalStringMass string->Mass() "<<MinimalStringMass
331 <<" "<<string->Mass()<<G4endl;
332 G4cout<<"StopFragmenting - Yes/No "<<Result<<G4endl;
333 #endif
334 return Result;
335 }
336}

References G4cout, G4endl, G4Exp(), G4UniformRand, G4FragmentingString::IsAFourQuarkString(), G4FragmentingString::Mass(), G4VLongitudinalStringDecay::MinimalStringMass, and G4VLongitudinalStringDecay::SetMinimalStringMass().

Referenced by Loop_toFragmentString().

Field Documentation

◆ Baryon

G4int G4VLongitudinalStringDecay::Baryon[5][5][5][4]
inherited

◆ BaryonWeight

G4double G4VLongitudinalStringDecay::BaryonWeight[5][5][5][4]
inherited

◆ ClusterLoopInterrupt

G4int G4VLongitudinalStringDecay::ClusterLoopInterrupt
protectedinherited

◆ DecayQuark

G4int G4VLongitudinalStringDecay::DecayQuark
inherited

◆ DiquarkBreakProb

G4double G4VLongitudinalStringDecay::DiquarkBreakProb
protectedinherited

◆ DiquarkSuppress

G4double G4VLongitudinalStringDecay::DiquarkSuppress
protectedinherited

◆ epCheckLevels

std::pair<G4double, G4double> G4HadronicInteraction::epCheckLevels
privateinherited

◆ FS_LeftHadron

G4ParticleDefinition* G4VLongitudinalStringDecay::FS_LeftHadron[350]
inherited

◆ FS_RightHadron

G4ParticleDefinition * G4VLongitudinalStringDecay::FS_RightHadron[350]
inherited

◆ FS_Weight

G4double G4VLongitudinalStringDecay::FS_Weight[350]
inherited

◆ hadronizer

G4HadronBuilder* G4VLongitudinalStringDecay::hadronizer
protectedinherited

◆ isBlocked

G4bool G4HadronicInteraction::isBlocked
protectedinherited

◆ Kappa

G4double G4VLongitudinalStringDecay::Kappa
protectedinherited

◆ Mass_of_b_quark

G4double G4VLongitudinalStringDecay::Mass_of_b_quark
inherited

◆ Mass_of_c_quark

G4double G4VLongitudinalStringDecay::Mass_of_c_quark
inherited

◆ Mass_of_light_quark

G4double G4VLongitudinalStringDecay::Mass_of_light_quark
inherited

◆ Mass_of_s_quark

G4double G4VLongitudinalStringDecay::Mass_of_s_quark
inherited

◆ Mass_of_string_junction

G4double G4VLongitudinalStringDecay::Mass_of_string_junction
inherited

◆ MassCut

G4double G4VLongitudinalStringDecay::MassCut
protectedinherited

◆ MaxMass

G4double G4VLongitudinalStringDecay::MaxMass
protectedinherited

◆ Meson

G4int G4VLongitudinalStringDecay::Meson[5][5][7]
inherited

◆ MesonWeight

G4double G4VLongitudinalStringDecay::MesonWeight[5][5][7]
inherited

◆ MinimalStringMass

G4double G4VLongitudinalStringDecay::MinimalStringMass
inherited

◆ MinimalStringMass2

G4double G4VLongitudinalStringDecay::MinimalStringMass2
inherited

◆ minMassQDiQStr

G4double G4VLongitudinalStringDecay::minMassQDiQStr[5][5][5]
inherited

◆ minMassQQbarStr

G4double G4VLongitudinalStringDecay::minMassQQbarStr[5][5]
inherited

◆ NewParticles

std::vector<G4ParticleDefinition *> G4VLongitudinalStringDecay::NewParticles
protectedinherited

◆ NewQuark

G4int G4VLongitudinalStringDecay::NewQuark
inherited

◆ NumberOf_FS

G4int G4VLongitudinalStringDecay::NumberOf_FS
inherited

◆ PastInitPhase

G4bool G4VLongitudinalStringDecay::PastInitPhase
protectedinherited

◆ Prob_QQbar

G4double G4VLongitudinalStringDecay::Prob_QQbar[5]
inherited

◆ ProbBBbar

G4double G4VLongitudinalStringDecay::ProbBBbar
protectedinherited

◆ ProbCB

G4double G4VLongitudinalStringDecay::ProbCB
protectedinherited

◆ ProbCCbar

G4double G4VLongitudinalStringDecay::ProbCCbar
protectedinherited

◆ ProbEta_b

G4double G4VLongitudinalStringDecay::ProbEta_b
protectedinherited

◆ ProbEta_c

G4double G4VLongitudinalStringDecay::ProbEta_c
protectedinherited

◆ pspin_barion

G4double G4VLongitudinalStringDecay::pspin_barion
protectedinherited

◆ pspin_meson

G4double G4VLongitudinalStringDecay::pspin_meson
protectedinherited

◆ Qcharge

G4int G4VLongitudinalStringDecay::Qcharge[5]
inherited

◆ recoilEnergyThreshold

G4double G4HadronicInteraction::recoilEnergyThreshold
privateinherited

◆ registry

G4HadronicInteractionRegistry* G4HadronicInteraction::registry
privateinherited

◆ scalarMesonMix

std::vector<G4double> G4VLongitudinalStringDecay::scalarMesonMix
protectedinherited

◆ SigmaQT

G4double G4VLongitudinalStringDecay::SigmaQT
protectedinherited

◆ StrangeSuppress

G4double G4VLongitudinalStringDecay::StrangeSuppress
protectedinherited

◆ StringLoopInterrupt

G4int G4VLongitudinalStringDecay::StringLoopInterrupt
protectedinherited

◆ theBlockedList

std::vector<const G4Material *> G4HadronicInteraction::theBlockedList
privateinherited

◆ theBlockedListElements

std::vector<const G4Element *> G4HadronicInteraction::theBlockedListElements
privateinherited

◆ theMaxEnergy

G4double G4HadronicInteraction::theMaxEnergy
protectedinherited

◆ theMaxEnergyList

std::vector<std::pair<G4double, const G4Material *> > G4HadronicInteraction::theMaxEnergyList
privateinherited

◆ theMaxEnergyListElements

std::vector<std::pair<G4double, const G4Element *> > G4HadronicInteraction::theMaxEnergyListElements
privateinherited

◆ theMinEnergy

G4double G4HadronicInteraction::theMinEnergy
protectedinherited

◆ theMinEnergyList

std::vector<std::pair<G4double, const G4Material *> > G4HadronicInteraction::theMinEnergyList
privateinherited

◆ theMinEnergyListElements

std::vector<std::pair<G4double, const G4Element *> > G4HadronicInteraction::theMinEnergyListElements
privateinherited

◆ theModelName

G4String G4HadronicInteraction::theModelName
privateinherited

◆ theParticleChange

G4HadFinalState G4HadronicInteraction::theParticleChange
protectedinherited

Definition at line 172 of file G4HadronicInteraction.hh.

Referenced by G4WilsonAbrasionModel::ApplyYourself(), G4EMDissociation::ApplyYourself(), G4LENDCapture::ApplyYourself(), G4LENDElastic::ApplyYourself(), G4LENDFission::ApplyYourself(), G4LENDInelastic::ApplyYourself(), G4ElectroVDNuclearModel::ApplyYourself(), G4ParticleHPThermalScattering::ApplyYourself(), G4NeutrinoElectronNcModel::ApplyYourself(), G4NeutronElectronElModel::ApplyYourself(), G4LFission::ApplyYourself(), G4ANuElNucleusCcModel::ApplyYourself(), G4ANuElNucleusNcModel::ApplyYourself(), G4ANuMuNucleusCcModel::ApplyYourself(), G4ANuMuNucleusNcModel::ApplyYourself(), G4MuonVDNuclearModel::ApplyYourself(), G4NeutrinoElectronCcModel::ApplyYourself(), G4NuElNucleusCcModel::ApplyYourself(), G4NuElNucleusNcModel::ApplyYourself(), G4NuMuNucleusCcModel::ApplyYourself(), G4NuMuNucleusNcModel::ApplyYourself(), G4QMDReaction::ApplyYourself(), G4NeutronRadCapture::ApplyYourself(), G4LowEGammaNuclearModel::ApplyYourself(), G4ChargeExchange::ApplyYourself(), G4HadronElastic::ApplyYourself(), G4LEHadronProtonElastic::ApplyYourself(), G4LEnp::ApplyYourself(), G4LEpp::ApplyYourself(), G4BinaryCascade::ApplyYourself(), G4CascadeInterface::ApplyYourself(), G4LMsdGenerator::ApplyYourself(), G4ElectroVDNuclearModel::CalculateEMVertex(), G4MuonVDNuclearModel::CalculateEMVertex(), G4ElectroVDNuclearModel::CalculateHadronicVertex(), G4MuonVDNuclearModel::CalculateHadronicVertex(), G4NeutrinoNucleusModel::CoherentPion(), G4CascadeInterface::copyOutputToHadronicResult(), G4BinaryCascade::DebugEpConservation(), G4BinaryCascade::DebugFinalEpConservation(), G4NeutrinoNucleusModel::FinalBarion(), G4NeutrinoNucleusModel::FinalMeson(), G4WilsonAbrasionModel::GetAbradedNucleons(), G4CascadeInterface::NoInteraction(), G4CascadeInterface::Propagate(), G4NeutrinoNucleusModel::RecoilDeexcitation(), G4LEHadronProtonElastic::~G4LEHadronProtonElastic(), G4LEnp::~G4LEnp(), and G4LFission::~G4LFission().

◆ Tmt

G4double G4LundStringFragmentation::Tmt
private

Definition at line 111 of file G4LundStringFragmentation.hh.

Referenced by G4LundStringFragmentation(), and SplitEandP().

◆ vectorMesonMix

std::vector<G4double> G4VLongitudinalStringDecay::vectorMesonMix
protectedinherited

◆ verboseLevel

G4int G4HadronicInteraction::verboseLevel
protectedinherited

Definition at line 177 of file G4HadronicInteraction.hh.

Referenced by G4WilsonAbrasionModel::ApplyYourself(), G4EMDissociation::ApplyYourself(), G4LFission::ApplyYourself(), G4MuMinusCapturePrecompound::ApplyYourself(), G4NeutronRadCapture::ApplyYourself(), G4LowEGammaNuclearModel::ApplyYourself(), G4ChargeExchange::ApplyYourself(), G4HadronElastic::ApplyYourself(), G4LEHadronProtonElastic::ApplyYourself(), G4LEnp::ApplyYourself(), G4LEpp::ApplyYourself(), G4CascadeInterface::ApplyYourself(), G4CascadeInterface::checkFinalResult(), G4CascadeInterface::copyOutputToHadronicResult(), G4CascadeInterface::copyOutputToReactionProducts(), G4LENDModel::create_used_target_map(), G4CascadeInterface::createBullet(), G4CascadeInterface::createTarget(), G4ElasticHadrNucleusHE::DefineHadronValues(), G4ElasticHadrNucleusHE::FillData(), G4ElasticHadrNucleusHE::FillFq2(), G4DiffuseElastic::G4DiffuseElastic(), G4DiffuseElasticV2::G4DiffuseElasticV2(), G4ElasticHadrNucleusHE::G4ElasticHadrNucleusHE(), G4EMDissociation::G4EMDissociation(), G4hhElastic::G4hhElastic(), G4NuclNuclDiffuseElastic::G4NuclNuclDiffuseElastic(), G4WilsonAbrasionModel::G4WilsonAbrasionModel(), G4ElasticHadrNucleusHE::GetFt(), G4ElasticHadrNucleusHE::GetLightFq2(), G4ElasticHadrNucleusHE::GetQ2_2(), G4HadronicInteraction::GetVerboseLevel(), G4ElasticHadrNucleusHE::HadronNucleusQ2_2(), G4ElasticHadrNucleusHE::HadronProtonQ2(), G4LFission::init(), G4DiffuseElastic::Initialise(), G4DiffuseElasticV2::Initialise(), G4NuclNuclDiffuseElastic::Initialise(), G4DiffuseElastic::InitialiseOnFly(), G4DiffuseElasticV2::InitialiseOnFly(), G4NuclNuclDiffuseElastic::InitialiseOnFly(), G4CascadeInterface::makeDynamicParticle(), G4CascadeInterface::NoInteraction(), G4CascadeInterface::Propagate(), G4ElasticHadrNucleusHE::SampleInvariantT(), G4AntiNuclElastic::SampleThetaCMS(), G4DiffuseElastic::SampleThetaLab(), G4NuclNuclDiffuseElastic::SampleThetaLab(), G4AntiNuclElastic::SampleThetaLab(), G4WilsonAbrasionModel::SetUseAblation(), G4HadronicInteraction::SetVerboseLevel(), G4WilsonAbrasionModel::SetVerboseLevel(), G4DiffuseElastic::ThetaCMStoThetaLab(), G4DiffuseElasticV2::ThetaCMStoThetaLab(), G4NuclNuclDiffuseElastic::ThetaCMStoThetaLab(), G4DiffuseElastic::ThetaLabToThetaCMS(), G4DiffuseElasticV2::ThetaLabToThetaCMS(), and G4NuclNuclDiffuseElastic::ThetaLabToThetaCMS().


The documentation for this class was generated from the following files: