125 throw G4HadronicException(__FILE__, __LINE__,
"G4VLongitudinalStringDecay::operator== forbidden");
133 throw G4HadronicException(__FILE__, __LINE__,
"G4VLongitudinalStringDecay::operator!= forbidden");
163 if ( hadrons.second ==0 )
168 #ifdef debug_VStringDecay
169 G4cout <<
"VlongSF Warning replacing string by single hadron (G4VLongitudinalStringDecay)" <<
G4endl;
170 G4cout << hadrons.first->GetParticleName()<<G4endl
171 <<
"string .. " <<
string->Get4Momentum() <<
" "
172 <<
string->Get4Momentum().m() <<
G4endl;
177 std::sqrt(Mom3.mag2() +
178 sqr(hadrons.first->GetPDGMass())));
187 #ifdef debug_VStringDecay
188 G4cout <<
"VlongSF Warning replacing qq-qqbar string by TWO hadrons (G4VLongitudinalStringDecay)"
189 << hadrons.first->GetParticleName() <<
" / "
190 << hadrons.second->GetParticleName()
191 <<
"string .. " <<
string->Get4Momentum() <<
" "
192 <<
string->Get4Momentum().m() <<
G4endl;
197 &Mom2,hadrons.second->GetPDGMass(),
198 string->Get4Momentum().mag());
207 G4ThreeVector Velocity =
string->Get4Momentum().boostVector();
208 result->
Boost(Velocity);
223 static G4ThreadLocal std::vector<double> *nomix_G4MT_TLS_ = 0 ;
if (!nomix_G4MT_TLS_) nomix_G4MT_TLS_ =
new std::vector<double> ; std::vector<double> &nomix = *nomix_G4MT_TLS_;
229 for (
G4int i=0; i<6 ; i++ ) nomix[i]=0;
243 Hadron1 = (minMassHadronizer->*build)(string->
GetLeftParton(),
244 string->GetRightParton());
247 #ifdef debug_VStringDecay
248 G4cout<<
"Quarks at the string ends "<<
string->GetLeftParton()->GetParticleName()<<
" "<<
string->GetRightParton()->GetParticleName()<<
G4endl;
251 mass= (Hadron1)->GetPDGMass();
260 Hadron1 = (minMassHadronizer->*build)(string->
GetLeftParton(),
264 mass = (Hadron1)->GetPDGMass() + (Hadron2)->GetPDGMass();
269 pdefs->first = Hadron1;
270 pdefs->second = Hadron2;
283 G4cout <<
"Particle with encoding "<<Encoding<<
" does not exist!!!"<<
G4endl;
319 #ifdef debug_VStringDecay
321 G4cout<<
"Start SplitUP (G4VLongitudinalStringDecay) ========================="<<
G4endl;
322 G4cout<<
"String partons: " <<
string->GetLeftParton()->GetPDGEncoding()<<
" "
323 <<
string->GetRightParton()->GetPDGEncoding()<<
" "
324 <<
"Direction " <<
string->GetDecayDirection()<<
G4endl;
331 string->SetLeftPartonStable();
334 string->SetRightPartonStable();
347 #ifdef debug_VStringDecay
348 G4cout<<
"The parton "<<
string->GetDecayParton()->GetPDGEncoding()<<
" "
351 G4cout<<
"The side of the string decay Left/Right (1/-1) "<<SideOfDecay<<
G4endl;
359 #ifdef debug_VStringDecay
360 G4cout<<
"An attempt to determine its energy (SplitEandP)"<<
G4endl;
364 delete newString; newString=0;
367 if ( HadronMomentum != 0 ) {
370 #ifdef debug_VStringDecay
374 Hadron =
new G4KineticTrack(HadronDefinition, 0,Pos, *HadronMomentum);
379 delete HadronMomentum;
385 #ifdef debug_VStringDecay
391 #ifdef debug_VStringDecay
392 G4cout<<
"End SplitUP (G4VLongitudinalStringDecay) ====================="<<
G4endl;
408 created = QuarkPair.second;
508 return G4ThreeVector(Pt * std::cos(phi),Pt * std::sin(phi),0);
519 for(
size_t c1 = 0;
c1 < Hadrons->size();
c1++)
525 SumPz += Hadrons->operator[](
c2)->Get4Momentum().pz();
526 SumE += Hadrons->operator[](
c2)->Get4Momentum().e();
528 G4double HadronE = Hadrons->operator[](
c1)->Get4Momentum().e();
529 G4double HadronPz = Hadrons->operator[](
c1)->Get4Momentum().pz();
530 Hadrons->operator[](
c1)->SetFormationTime(
531 (theInitialStringMass - 2.*SumPz + HadronE - HadronPz)/(2.*kappa)/c_light);
534 (theInitialStringMass - 2.*SumE - HadronE + HadronPz)/(2.*kappa));
535 Hadrons->operator[](
c1)->SetPosition(aPosition);
545 throw G4HadronicException(__FILE__, __LINE__,
"4VLongitudinalStringDecay::SetSigmaTransverseMomentum after FragmentString() not allowed");
556 throw G4HadronicException(__FILE__, __LINE__,
"4VLongitudinalStringDecay::SetStrangenessSuppression after FragmentString() not allowed");
567 throw G4HadronicException(__FILE__, __LINE__,
"4VLongitudinalStringDecay::SetDiquarkSuppression after FragmentString() not allowed");
578 throw G4HadronicException(__FILE__, __LINE__,
"4VLongitudinalStringDecay::SetDiquarkBreakProbability after FragmentString() not allowed");
589 throw G4HadronicException(__FILE__, __LINE__,
"G4VLongitudinalStringDecay::SetVectorMesonProbability after FragmentString() not allowed");
603 throw G4HadronicException(__FILE__, __LINE__,
"G4VLongitudinalStringDecay::SetSpinThreeHalfBarionProbability after FragmentString() not allowed");
617 throw G4HadronicException(__FILE__, __LINE__,
"G4VLongitudinalStringDecay::SetScalarMesonMixings after FragmentString() not allowed");
619 if ( aVector.size() < 6 )
620 throw G4HadronicException(__FILE__, __LINE__,
"G4VLongitudinalStringDecay::SetScalarMesonMixings( argument Vector too small");
638 throw G4HadronicException(__FILE__, __LINE__,
"G4VLongitudinalStringDecay::SetVectorMesonMixings after FragmentString() not allowed");
640 if ( aVector.size() < 6 )
641 throw G4HadronicException(__FILE__, __LINE__,
"G4VLongitudinalStringDecay::SetVectorMesonMixings( argument Vector too small");
G4ParticleDefinition * GetRightParton(void) const
int operator!=(const G4VLongitudinalStringDecay &right) const
ThreeVector shoot(const G4int Ap, const G4int Af)
static c2_factory< G4double > c2
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)
CLHEP::Hep3Vector G4ThreeVector
G4ParticleDefinition * BuildLowSpin(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4ExcitedString * CPExcited(const G4ExcitedString &string)
void SetStrangenessSuppression(G4double aValue)
G4ParticleDefinition * Build(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4int StringLoopInterrupt
G4Parton * GetLeftParton(void) const
G4int ClusterLoopInterrupt
G4int GetPDGEncoding() const
G4ThreeVector SampleQuarkPt(G4double ptMax=-1.)
std::vector< G4double > vectorMesonMix
G4double FragmentationMass(const G4FragmentingString *const string, Pcreate build=0, pDefPair *pdefs=0)
virtual void SetMassCut(G4double aValue)
G4VLongitudinalStringDecay()
G4int SampleQuarkFlavor(void)
const G4String & GetParticleName() const
virtual ~G4VLongitudinalStringDecay()
G4ParticleDefinition * GetDecayParton() const
pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true)
void SetStringTensionParameter(G4double aValue)
const G4ThreeVector & GetPosition() const
G4ParticleDefinition * GetLeftParton(void) const
void SetDiquarkBreakProbability(G4double aValue)
G4GLOB_DLL std::ostream G4cout
ParticleList decay(Cluster *const c)
Carries out a cluster decay.
G4KineticTrackVector * LightFragmentationTest(const G4ExcitedString *const theString)
std::pair< G4ParticleDefinition *, G4ParticleDefinition * > pDefPair
G4ParticleDefinition * FindParticle(G4int Encoding)
virtual void Sample4Momentum(G4LorentzVector *Mom, G4double Mass, G4LorentzVector *AntiMom, G4double AntiMass, G4double InitialMass)=0
void Boost(G4ThreeVector &Velocity)
G4bool FourQuarkString(void) const
std::vector< G4double > scalarMesonMix
int operator==(const G4VLongitudinalStringDecay &right) const
void SetVectorMesonProbability(G4double aValue)
G4Parton * GetRightParton(void) const
G4double GetStringTensionParameter()
G4double GetPDGMass() const
G4HadronBuilder * hadronizer
static G4ParticleTable * GetParticleTable()
T max(const T t1, const T t2)
brief Return the largest of the two arguments
void SetVectorMesonMixings(std::vector< G4double > aVector)
void SetSpinThreeHalfBarionProbability(G4double aValue)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
G4double DiquarkBreakProb
void SetSigmaTransverseMomentum(G4double aQT)
G4int GetDirection(void) const
virtual G4ParticleDefinition * DiQuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)=0
void SetScalarMesonMixings(std::vector< G4double > aVector)
void CalculateHadronTimePosition(G4double theInitialStringMass, G4KineticTrackVector *)
virtual G4LorentzVector * SplitEandP(G4ParticleDefinition *pHadron, G4FragmentingString *string, G4FragmentingString *newString)=0
static const double fermi
G4KineticTrack * Splitup(G4FragmentingString *string, G4FragmentingString *&newString)
void SetDiquarkSuppression(G4double aValue)
CLHEP::HepLorentzVector G4LorentzVector