Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4VLongitudinalStringDecay.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27//
28// -----------------------------------------------------------------------------
29// GEANT 4 class implementation file
30//
31// History: first implementation, Maxim Komogorov, 1-Jul-1998
32// redesign Gunter Folger, August/September 2001
33// -----------------------------------------------------------------------------
36#include "G4SystemOfUnits.hh"
37#include "G4ios.hh"
38#include "Randomize.hh"
40
42#include "G4ParticleTypes.hh"
43#include "G4ParticleChange.hh"
46#include "G4ParticleTable.hh"
48#include "G4VDecayChannel.hh"
49#include "G4DecayTable.hh"
50
51#include "G4DiQuarks.hh"
52#include "G4Quarks.hh"
53#include "G4Gluons.hh"
54
55#include "G4Exp.hh"
56#include "G4Log.hh"
57
58#include "G4HadronicException.hh"
59
60//------------------------debug switches
61//#define debug_VStringDecay
62//#define debug_heavyHadrons
63
64//******************************************************************************
65// Constructors
66
68 : G4HadronicInteraction(name), ProbCCbar(0.0), ProbBBbar(0.0)
69{
70 MassCut = 210.0*MeV; // Mpi + Delta
71
74
75 // Changable Parameters below.
76 SigmaQT = 0.5 * GeV;
77
78 StrangeSuppress = 0.44; // =0.27/2.27 suppression of strange quark pair production, ie. u:d:s=1:1:0.27
79 DiquarkSuppress = 0.07; // Probability of qq-qqbar pair production
80 DiquarkBreakProb = 0.1; // Probability of (qq)->h+(qq)'
81
82 //... pspin_meson is probability to create pseudo-scalar meson
83 pspin_meson.resize(3);
84 pspin_meson[0] = 0.5; // u or d + anti-u or anti-d
85 pspin_meson[1] = 0.4; // one of the quark is strange, or charm, or bottom
86 pspin_meson[2] = 0.3; // both of the quark are strange, or charm, or bottom
87
88 //... pspin_barion is probability to create 1/2 barion
89 pspin_barion = 0.5;
90
91 //... vectorMesonMix[] is quark mixing parameters for vector mesons (Variable spin = 3)
92 vectorMesonMix.resize(6);
93 vectorMesonMix[0] = 0.0;
94 vectorMesonMix[1] = 0.5;
95 vectorMesonMix[2] = 0.0;
96 vectorMesonMix[3] = 0.5;
97 vectorMesonMix[4] = 1.0;
98 vectorMesonMix[5] = 1.0;
99
100 //... scalarMesonMix[] is quark mixing parameters for scalar mesons (Variable spin=1)
101 scalarMesonMix.resize(6);
102 scalarMesonMix[0] = 0.5;
103 scalarMesonMix[1] = 0.25;
104 scalarMesonMix[2] = 0.5;
105 scalarMesonMix[3] = 0.25;
106 scalarMesonMix[4] = 1.0;
107 scalarMesonMix[5] = 0.5;
108
109 SetProbCCbar(0.0); // Probability of CCbar pair creation
110 SetProbEta_c(0.1); // Mixing of Eta_c and J/Psi
111 SetProbBBbar(0.0); // Probability of BBbar pair creation
112 SetProbEta_b(0.0); // Mixing of Eta_b and Upsilon_b
113
114 // Parameters may be changed until the first fragmentation starts
115 PastInitPhase=false;
118
119 MaxMass=-350.0*GeV; // If there will be a particle with mass larger than Higgs the value must be changed.
120
121 SetMinMasses(); // Re-calculation of minimal mass of strings and weights of particles in 2-part. decays
122
123 Kappa = 1.0 * GeV/fermi;
124 DecayQuark = NewQuark = 0;
125}
126
128{
129 delete hadronizer;
130}
131
134{
135 return nullptr;
136}
137
138//=============================================================================
139
140// For changing Mass Cut used for selection of very small mass strings
143
144//-----------------------------------------------------------------------------
145
146// For handling a string with very low mass
147
149{
150 G4KineticTrackVector* result = nullptr;
151 pDefPair hadrons( nullptr, nullptr );
152 G4FragmentingString aString( *string );
153
154 #ifdef debug_VStringDecay
155 G4cout<<"G4VLongitudinalStringDecay::ProduceOneHadron: PossibleHmass StrMass "
156 <<aString.Mass()<<" MassCut "<<MassCut<<G4endl;
157 #endif
158
159 SetMinimalStringMass( &aString );
160 PossibleHadronMass( &aString, 0, &hadrons );
161 result = new G4KineticTrackVector;
162 if ( hadrons.first != nullptr ) {
163 if ( hadrons.second == nullptr ) {
164 // Substitute string by light hadron, Note that Energy is not conserved here!
165
166 #ifdef debug_VStringDecay
167 G4cout << "VlongSD Warning replacing string by single hadron (G4VLongitudinalStringDecay)" <<G4endl;
168 G4cout << hadrons.first->GetParticleName()<<G4endl
169 << "string .. " << string->Get4Momentum() << " "
170 << string->Get4Momentum().m() << G4endl;
171 #endif
172
173 G4ThreeVector Mom3 = string->Get4Momentum().vect();
174 G4LorentzVector Mom( Mom3, std::sqrt( Mom3.mag2() + sqr( hadrons.first->GetPDGMass() ) ) );
175 result->push_back( new G4KineticTrack( hadrons.first, 0, string->GetPosition(), Mom ) );
176 } else {
177 //... string was qq--qqbar type: Build two stable hadrons,
178
179 #ifdef debug_VStringDecay
180 G4cout << "VlongSD Warning replacing qq-qqbar string by TWO hadrons (G4VLongitudinalStringDecay)"
181 << hadrons.first->GetParticleName() << " / "
182 << hadrons.second->GetParticleName()
183 << "string .. " << string->Get4Momentum() << " "
184 << string->Get4Momentum().m() << G4endl;
185 #endif
186
187 G4LorentzVector Mom1, Mom2;
188 Sample4Momentum( &Mom1, hadrons.first->GetPDGMass(),
189 &Mom2, hadrons.second->GetPDGMass(),
190 string->Get4Momentum().mag() );
191
192 result->push_back( new G4KineticTrack( hadrons.first, 0, string->GetPosition(), Mom1 ) );
193 result->push_back( new G4KineticTrack( hadrons.second, 0, string->GetPosition(), Mom2 ) );
194
195 G4ThreeVector Velocity = string->Get4Momentum().boostVector();
196 result->Boost(Velocity);
197 }
198 }
199 return result;
200}
201
202//----------------------------------------------------------------------------------------
203
205 Pcreate build, pDefPair * pdefs )
206{
207 G4double mass = 0.0;
208
209 if ( build==0 ) build=&G4HadronBuilder::BuildLowSpin;
210
211 G4ParticleDefinition* Hadron1 = nullptr;
212 G4ParticleDefinition* Hadron2 = nullptr;
213
214 if (!string->IsAFourQuarkString() )
215 {
216 // spin 0 meson or spin 1/2 barion will be built
217
218 Hadron1 = (hadronizer->*build)(string->GetLeftParton(), string->GetRightParton());
219 #ifdef debug_VStringDecay
220 G4cout<<"VlongSD PossibleHadronMass"<<G4endl;
221 G4cout<<"VlongSD Quarks at the string ends "<<string->GetLeftParton()->GetParticleName()
222 <<" "<<string->GetRightParton()->GetParticleName()<<G4endl;
223 if ( Hadron1 != nullptr) {
224 G4cout<<"(G4VLongitudinalStringDecay) Hadron "<<Hadron1->GetParticleName()
225 <<" "<<Hadron1->GetPDGMass()<<G4endl;
226 }
227 #endif
228 if ( Hadron1 != nullptr) { mass = (Hadron1)->GetPDGMass();}
229 else { mass = MaxMass;}
230 } else
231 {
232 //... string is qq--qqbar: Build two stable hadrons,
233
234 #ifdef debug_VStringDecay
235 G4cout<<"VlongSD PossibleHadronMass"<<G4endl;
236 G4cout<<"VlongSD string is qq--qqbar: Build two stable hadrons"<<G4endl;
237 #endif
238
239 G4double StringMass = string->Mass();
240 G4int cClusterInterrupt = 0;
241 do
242 {
243 if (cClusterInterrupt++ >= ClusterLoopInterrupt) return false;
244
245 G4int LeftQuark1= string->GetLeftParton()->GetPDGEncoding()/1000;
246 G4int LeftQuark2=(string->GetLeftParton()->GetPDGEncoding()/100)%10;
247
248 G4int RightQuark1= string->GetRightParton()->GetPDGEncoding()/1000;
249 G4int RightQuark2=(string->GetRightParton()->GetPDGEncoding()/100)%10;
250
251 if (G4UniformRand()<0.5) {
252 Hadron1 =hadronizer->Build(FindParticle(LeftQuark1), FindParticle(RightQuark1));
253 Hadron2 =hadronizer->Build(FindParticle(LeftQuark2), FindParticle(RightQuark2));
254 } else {
255 Hadron1 =hadronizer->Build(FindParticle(LeftQuark1), FindParticle(RightQuark2));
256 Hadron2 =hadronizer->Build(FindParticle(LeftQuark2), FindParticle(RightQuark1));
257 }
258 //... repeat procedure, if mass of cluster is too low to produce hadrons
259 //... ClusterMassCut = 0.15*GeV model parameter
260 }
261 while ( Hadron1 == nullptr || Hadron2 == nullptr ||
262 ( StringMass <= Hadron1->GetPDGMass() + Hadron2->GetPDGMass() ) );
263
264 mass = (Hadron1)->GetPDGMass() + (Hadron2)->GetPDGMass();
265 }
266
267 #ifdef debug_VStringDecay
268 G4cout<<"VlongSD *Hadrons 1 and 2, proposed mass "<<Hadron1<<" "<<Hadron2<<" "<<mass<<G4endl;
269 #endif
270
271 if ( pdefs != 0 )
272 { // need to return hadrons as well....
273 pdefs->first = Hadron1;
274 pdefs->second = Hadron2;
275 }
276
277 return mass;
278}
279
280//----------------------------------------------------------------------------
281
283{
284 /*
285 G4cout<<Encoding<<" G4VLongitudinalStringDecay::FindParticle Check di-quarks *******************"<<G4endl;
286 for (G4int i=4; i<6;i++){
287 for (G4int j=1;j<6;j++){
288 G4cout<<i<<" "<<j<<" ";
289 G4int Code = 1000 * i + 100 * j +1;
290 G4ParticleDefinition* ptr1 = G4ParticleTable::GetParticleTable()->FindParticle(Code);
291 Code +=2;
292 G4ParticleDefinition* ptr2 = G4ParticleTable::GetParticleTable()->FindParticle(Code);
293 G4cout<<"Code "<<Code - 2<<" ptr "<<ptr1<<" :: Code "<<Code<<" ptr "<<ptr2<<G4endl;
294 }
295 G4cout<<G4endl;
296 }
297 */
298
300
301 if (ptr == nullptr)
302 {
303 for (size_t i=0; i < NewParticles.size(); i++)
304 {
305 if ( Encoding == NewParticles[i]->GetPDGEncoding() ) { ptr = NewParticles[i]; return ptr;}
306 }
307 }
308
309 return ptr;
310}
311
312//*********************************************************************************
313// For decision on continue or stop string fragmentation
314// virtual G4bool StopFragmenting(const G4FragmentingString * const string)=0;
315// virtual G4bool IsItFragmentable(const G4FragmentingString * const string)=0;
316//
317// If a string can not fragment, make last break into 2 hadrons
318// virtual G4bool SplitLast(G4FragmentingString * string,
319// G4KineticTrackVector * LeftVector,
320// G4KineticTrackVector * RightVector)=0;
321//-----------------------------------------------------------------------------
322//
323// If a string can fragment, do the following
324//
325// For transver of a string to its CMS frame
326//-----------------------------------------------------------------------------
327
329{
330 G4Parton *Left=new G4Parton(*in.GetLeftParton());
331 G4Parton *Right=new G4Parton(*in.GetRightParton());
332 return new G4ExcitedString(Left,Right,in.GetDirection());
333}
334
335//-----------------------------------------------------------------------------
336
338 G4ParticleDefinition *&created )
339{
340 #ifdef debug_VStringDecay
341 G4cout<<"VlongSD QuarkSplitup: quark ID "<<decay->GetPDGEncoding()<<G4endl;
342 #endif
343
344 G4int IsParticle=(decay->GetPDGEncoding()>0) ? -1 : +1; // if we have a quark, we need antiquark (or diquark)
345
346 pDefPair QuarkPair = CreatePartonPair(IsParticle);
347 created = QuarkPair.second;
348
349 DecayQuark = decay->GetPDGEncoding();
350 NewQuark = created->GetPDGEncoding();
351
352 #ifdef debug_VStringDecay
353 G4cout<<"VlongSD QuarkSplitup: "<<decay->GetPDGEncoding()<<" -> "<<QuarkPair.second->GetPDGEncoding()<<G4endl;
354 G4cout<<"hadronizer->Build(QuarkPair.first, decay)"<<G4endl;
355 #endif
356
357 return hadronizer->Build(QuarkPair.first, decay);
358}
359
360//-----------------------------------------------------------------------------
361
363CreatePartonPair(G4int NeedParticle,G4bool AllowDiquarks)
364{
365 // NeedParticle = +1 for Particle, -1 for Antiparticle
366 if ( AllowDiquarks && G4UniformRand() < DiquarkSuppress )
367 {
368 // Create a Diquark - AntiDiquark pair , first in pair is anti to IsParticle
369 #ifdef debug_VStringDecay
370 G4cout<<"VlongSD Create a Diquark - AntiDiquark pair"<<G4endl;
371 #endif
372 G4int q1(0), q2(0), spin(0), PDGcode(0);
373
374 q1 = SampleQuarkFlavor();
375 q2 = SampleQuarkFlavor();
376
377 spin = (q1 != q2 && G4UniformRand() <= 0.5)? 1 : 3;
378 // convention: quark with higher PDG number is first
379 PDGcode = (std::max(q1,q2) * 1000 + std::min(q1,q2) * 100 + spin) * NeedParticle;
380
381 return pDefPair (FindParticle(-PDGcode),FindParticle(PDGcode));
382
383 } else {
384 // Create a Quark - AntiQuark pair, first in pair IsParticle
385 #ifdef debug_VStringDecay
386 G4cout<<"VlongSD Create a Quark - AntiQuark pair"<<G4endl;
387 #endif
388 G4int PDGcode=SampleQuarkFlavor()*NeedParticle;
389 return pDefPair (FindParticle(PDGcode),FindParticle(-PDGcode));
390 }
391}
392
393//-----------------------------------------------------------------------------
394
396{
397 G4int quark(1);
398 G4double ksi = G4UniformRand();
399 if ( ksi < ProbCB ) {
400 if ( ksi < ProbCCbar ) {quark = 4;} // c quark
401 else {quark = 5;} // b quark
402 #ifdef debug_heavyHadrons
403 G4cout << "G4VLongitudinalStringDecay::SampleQuarkFlavor : sampled from the vacuum HEAVY quark = "
404 << quark << G4endl;
405 #endif
406 } else {
407 quark = 1 + (int)(G4UniformRand()/StrangeSuppress);
408 }
409 #ifdef debug_VStringDecay
410 G4cout<<"VlongSD SampleQuarkFlavor "<<quark<<" (ProbCB ProbCCbar ProbBBbar "<<ProbCB
411 <<" "<<ProbCCbar<<" "<<ProbBBbar<<" )"<<G4endl;
412 #endif
413 return quark;
414}
415
416//-----------------------------------------------------------------------------
417
419{
420 G4double Pt;
421 if ( ptMax < 0 ) {
422 // sample full gaussian
423 Pt = -G4Log(G4UniformRand());
424 } else {
425 // sample in limited range
426 G4double q = ptMax/SigmaQT;
427 G4double ymin = (q > 20.) ? 0.0 : G4Exp(-q*q);
428 Pt = -G4Log(G4RandFlat::shoot(ymin, 1.));
429 }
430 Pt = SigmaQT * std::sqrt(Pt);
431 G4double phi = 2.*pi*G4UniformRand();
432 return G4ThreeVector(Pt * std::cos(phi),Pt * std::sin(phi),0);
433}
434
435//******************************************************************************
436
438 G4KineticTrackVector* Hadrons)
439{
440 // `yo-yo` formation time
441 // const G4double kappa = 1.0 * GeV/fermi/4.;
443 for (size_t c1 = 0; c1 < Hadrons->size(); c1++)
444 {
445 G4double SumPz = 0;
446 G4double SumE = 0;
447 for (size_t c2 = 0; c2 < c1; c2++)
448 {
449 SumPz += Hadrons->operator[](c2)->Get4Momentum().pz();
450 SumE += Hadrons->operator[](c2)->Get4Momentum().e();
451 }
452 G4double HadronE = Hadrons->operator[](c1)->Get4Momentum().e();
453 G4double HadronPz = Hadrons->operator[](c1)->Get4Momentum().pz();
454 Hadrons->operator[](c1)->SetFormationTime(
455 (theInitialStringMass - 2.*SumPz + HadronE - HadronPz ) / (2.*kappa) / c_light );
456 G4ThreeVector aPosition( 0, 0,
457 (theInitialStringMass - 2.*SumE - HadronE + HadronPz) / (2.*kappa) );
458 Hadrons->operator[](c1)->SetPosition(aPosition);
459 }
460}
461
462//-----------------------------------------------------------------------------
463
465{
466 if ( PastInitPhase ) {
467 throw G4HadronicException(__FILE__, __LINE__,
468 "G4VLongitudinalStringDecay::SetSigmaTransverseMomentum after FragmentString() not allowed");
469 } else {
470 SigmaQT = aValue;
471 }
472}
473
474//----------------------------------------------------------------------------------------------------------
475
477{
478 StrangeSuppress = aValue;
479}
480
481//----------------------------------------------------------------------------------------------------------
482
484{
485 DiquarkSuppress = aValue;
486}
487
488//----------------------------------------------------------------------------------------
489
491{
492 if ( PastInitPhase ) {
493 throw G4HadronicException(__FILE__, __LINE__,
494 "G4VLongitudinalStringDecay::SetDiquarkBreakProbability after FragmentString() not allowed");
495 } else {
496 DiquarkBreakProb = aValue;
497 }
498}
499
500//----------------------------------------------------------------------------------------------------------
501
503{
504 if ( PastInitPhase ) {
505 throw G4HadronicException(__FILE__, __LINE__,
506 "G4VLongitudinalStringDecay::SetSpinThreeHalfBarionProbability after FragmentString() not allowed");
507 } else {
508 pspin_barion = aValue;
509 delete hadronizer;
512 }
513}
514
515//----------------------------------------------------------------------------------------------------------
516
517void G4VLongitudinalStringDecay::SetScalarMesonMixings(std::vector<G4double> aVector)
518{
519 if ( PastInitPhase ) {
520 throw G4HadronicException(__FILE__, __LINE__,
521 "G4VLongitudinalStringDecay::SetScalarMesonMixings after FragmentString() not allowed");
522 } else {
523 if ( aVector.size() < 6 )
524 throw G4HadronicException(__FILE__, __LINE__,
525 "G4VLongitudinalStringDecay::SetScalarMesonMixings( argument Vector too small");
526 scalarMesonMix[0] = aVector[0];
527 scalarMesonMix[1] = aVector[1];
528 scalarMesonMix[2] = aVector[2];
529 scalarMesonMix[3] = aVector[3];
530 scalarMesonMix[4] = aVector[4];
531 scalarMesonMix[5] = aVector[5];
532 delete hadronizer;
535 }
536}
537
538//----------------------------------------------------------------------------------------------------------
539
540void G4VLongitudinalStringDecay::SetVectorMesonMixings(std::vector<G4double> aVector)
541{
542 if ( PastInitPhase ) {
543 throw G4HadronicException(__FILE__, __LINE__,
544 "G4VLongitudinalStringDecay::SetVectorMesonMixings after FragmentString() not allowed");
545 } else {
546 if ( aVector.size() < 6 )
547 throw G4HadronicException(__FILE__, __LINE__,
548 "G4VLongitudinalStringDecay::SetVectorMesonMixings( argument Vector too small");
549 vectorMesonMix[0] = aVector[0];
550 vectorMesonMix[1] = aVector[1];
551 vectorMesonMix[2] = aVector[2];
552 vectorMesonMix[3] = aVector[3];
553 vectorMesonMix[4] = aVector[4];
554 vectorMesonMix[5] = aVector[5];
555 delete hadronizer;
558 }
559}
560
561//-------------------------------------------------------------------------------------------
562
564{
565 ProbCCbar = aValue;
567}
568
569//-------------------------------------------------------------------------------------------
570
572{
573 ProbEta_c = aValue;
574}
575
576//-------------------------------------------------------------------------------------------
577
579{
580 ProbBBbar = aValue;
582}
583
584//-------------------------------------------------------------------------------------------
585
587{
588 ProbEta_b = aValue;
589}
590
591//-------------------------------------------------------------------------------------------
592
594{
595 Kappa = aValue * GeV/fermi;
596}
597
598//-----------------------------------------------------------------------
599
601{
602 // ------ For estimation of a minimal string mass ---------------
603 Mass_of_light_quark =140.*MeV;
604 Mass_of_s_quark =500.*MeV;
605 Mass_of_c_quark =1600.*MeV;
606 Mass_of_b_quark =4500.*MeV;
608
609 // ---------------- Determination of minimal mass of q-qbar strings -------------------
610 G4ParticleDefinition * hadron1; G4int Code1;
611 G4ParticleDefinition * hadron2; G4int Code2;
612 for (G4int i=1; i < 6; i++) {
613 Code1 = 100*i + 10*1 + 1;
614 hadron1 = FindParticle(Code1);
615
616 if (hadron1 != nullptr) {
617 for (G4int j=1; j < 6; j++) {
618 Code2 = 100*j + 10*1 + 1;
619 hadron2 = FindParticle(Code2);
620 if (hadron2 != nullptr) {
621 minMassQQbarStr[i-1][j-1] = hadron1->GetPDGMass() + hadron2->GetPDGMass() + 70.0 * MeV;
622 }
623 }
624 }
625 }
626
627 minMassQQbarStr[1][1] = minMassQQbarStr[0][0]; // u-ubar = 0.5 Pi0 + 0.24 Eta + 0.25 Eta'
628
629 // ---------------- Determination of minimal mass of qq-q strings -------------------
630 G4ParticleDefinition * hadron3;
631 G4int kfla, kflb;
632 // MaxMass = -350.0*GeV; // If there will be a particle with mass larger than Higgs the value must be changed.
633
634 for (G4int i=1; i < 6; i++) { //i=1
635 Code1 = 100*i + 10*1 + 1;
636 hadron1 = FindParticle(Code1);
637 for (G4int j=1; j < 6; j++) {
638 for (G4int k=1; k < 6; k++) {
639 kfla = std::max(j,k);
640 kflb = std::min(j,k);
641
642 // Add d-quark
643 Code2 = 1000*kfla + 100*kflb + 10*1 + 2;
644 if ( (j == 1) && (k==1)) Code2 = 1000*2 + 100*1 + 10*1 + 2; // In the case - add u-quark.
645
647 hadron3 = G4ParticleTable::GetParticleTable()->FindParticle(Code2 + 2);
648
649 if ((hadron2 == nullptr) && (hadron3 == nullptr)) {minMassQDiQStr[i-1][j-1][k-1] = MaxMass; continue;};
650
651 if ((hadron2 != nullptr) && (hadron3 != nullptr)) {
652 if (hadron2->GetPDGMass() > hadron3->GetPDGMass() ) { hadron2 = hadron3; }
653 };
654
655 if ((hadron2 != nullptr) && (hadron3 == nullptr)) {};
656
657 if ((hadron2 == nullptr) && (hadron3 != nullptr)) {hadron2 = hadron3;};
658
659 minMassQDiQStr[i-1][j-1][k-1] = hadron1->GetPDGMass() + hadron2->GetPDGMass() + 70.0 * MeV;
660 }
661 }
662 }
663
664 // ------ An estimated minimal string mass ----------------------
667 // q charges d u s c b
668 Qcharge[0] = -1; Qcharge[1] = 2; Qcharge[2] = -1; Qcharge[3] = 2; Qcharge[4] = -1;
669
670 // For treating of small string decays
671 for (G4int i=0; i<5; i++)
672 { for (G4int j=0; j<5; j++)
673 { for (G4int k=0; k<7; k++)
674 {
675 Meson[i][j][k]=0; MesonWeight[i][j][k]=0.;
676 }
677 }
678 }
679 //--------------------------
680 G4int StrangeQ = 0;
681 G4int StrangeAQ = 0;
682 for (G4int i=0; i<5; i++)
683 {
684 if( i >= 2 ) StrangeQ=1;
685 for (G4int j=0; j<5; j++)
686 {
687 StrangeAQ = 0;
688 if( j >= 2 ) StrangeAQ=1;
689 Meson[i][j][0] = 100 * (std::max(i,j)+1) + 10 * (std::min(i,j)+1) + 1; // Scalar meson
690 MesonWeight[i][j][0] = ( pspin_meson[StrangeQ + StrangeAQ]);
691 Meson[i][j][1] = 100 * (std::max(i,j)+1) + 10 * (std::min(i,j)+1) + 3; // Vector meson
692 MesonWeight[i][j][1] = (1.-pspin_meson[StrangeQ + StrangeAQ]);
693 }
694 }
695
696 //qqs indexes
697 //dd1 -> scalarMesonMix[0] * 111 + (1-scalarMesonMix[0]-scalarMesonMix[1]) * 221 + scalarMesonMix[1] * 331 (000)
698 //dd1 -> Pi0 Eta Eta'
699
700 Meson[0][0][0] = 111; MesonWeight[0][0][0] = ( pspin_meson[0]) * ( scalarMesonMix[0] ); // Pi0
701 Meson[0][0][2] = 221; MesonWeight[0][0][3] = ( pspin_meson[0]) * (1-scalarMesonMix[0]-scalarMesonMix[1]); // Eta
702 Meson[0][0][3] = 331; MesonWeight[0][0][4] = ( pspin_meson[0]) * ( scalarMesonMix[1]); // Eta'
703
704 //dd3 -> (1-vectorMesonMix[1] * 113 + vectorMesonMix[1] * 223 (001)
705 //dd3 -> rho_0 omega
706
707 Meson[0][0][1] = 113; MesonWeight[0][0][1] = (1.-pspin_meson[0]) * (1-vectorMesonMix[1]); // Rho
708 Meson[0][0][4] = 223; MesonWeight[0][0][4] = (1.-pspin_meson[0]) * ( vectorMesonMix[1]); // omega
709
710 //uu1 -> scalarMesonMix[0] * 111 + (1-scalarMesonMix[0]-scalarMesonMix[1]) * 221 + scalarMesonMix[1] * 331 (110)
711 //uu1 -> Pi0 Eta Eta'
712
713 Meson[1][1][0] = 111; MesonWeight[1][1][0] = ( pspin_meson[0]) * ( scalarMesonMix[0] ); // Pi0
714 Meson[1][1][2] = 221; MesonWeight[1][1][2] = ( pspin_meson[0]) * (1-scalarMesonMix[0]-scalarMesonMix[1]); // Eta
715 Meson[1][1][3] = 331; MesonWeight[1][1][3] = ( pspin_meson[0]) * ( scalarMesonMix[1]); // Eta'
716
717 //uu3 -> (1-vectorMesonMix[1]) * 113 + vectorMesonMix[1] * 223 (111)
718 //uu3 -> rho_0 omega
719
720 Meson[1][1][1] = 113; MesonWeight[1][1][1] = (1.-pspin_meson[0]) * (1-vectorMesonMix[1]); // Rho
721 Meson[1][1][4] = 223; MesonWeight[1][1][4] = (1.-pspin_meson[0]) * ( vectorMesonMix[1]); // omega
722
723 //ss1 -> (1-scalarMesonMix[5]) * 221 + scalarMesonMix[5] * 331 (220)
724 //ss1 -> Eta Eta'
725
726 Meson[2][2][0] = 221; MesonWeight[2][2][0] = ( pspin_meson[2]) * (1-scalarMesonMix[5] ); // Eta
727 Meson[2][2][2] = 331; MesonWeight[2][2][2] = ( pspin_meson[2]) * ( scalarMesonMix[5]); // Eta'
728
729 //ss3 -> vectorMesonMix[5] * 333 (221)
730 //ss3 -> phi
731
732 Meson[2][2][1] = 333; MesonWeight[2][2][1] = (1.-pspin_meson[2]) * ( vectorMesonMix[5]); // phi
733
734 //cc1 -> ProbEta_c /(1-pspin_meson) 441 (330) Probability of Eta_c
735 //cc3 -> (1-ProbEta_c)/( pspin_meson) 443 (331) Probability of J/Psi
736
737 //bb1 -> ProbEta_b /pspin_meson 551 (440) Probability of Eta_b
738 //bb3 -> (1-ProbEta_b)/pspin_meson 553 (441) Probability of Upsilon
739
740 if ( pspin_meson[2] != 0. ) {
741 Meson[3][3][0] *= ( ProbEta_c)/( pspin_meson[2]); // Eta_c
742 Meson[3][3][1] *= (1.0-ProbEta_c)/(1.-pspin_meson[2]); // J/Psi
743
744 Meson[4][4][0] *= ( ProbEta_b)/( pspin_meson[2]); // Eta_b
745 Meson[4][4][1] *= (1.0-ProbEta_b)/(1.-pspin_meson[2]); // Upsilon
746 }
747
748 //--------------------------
749
750 for (G4int i=0; i<5; i++)
751 { for (G4int j=0; j<5; j++)
752 { for (G4int k=0; k<5; k++)
753 { for (G4int l=0; l<4; l++)
754 { Baryon[i][j][k][l]=0; BaryonWeight[i][j][k][l]=0.;}
755 }
756 }
757 }
758
759 kfla =0; kflb =0;
760 G4int kflc(0), kfld(0), kfle(0), kflf(0);
761 for (G4int i=0; i<5; i++)
762 { for (G4int j=0; j<5; j++)
763 { for (G4int k=0; k<5; k++)
764 {
765 kfla = i+1; kflb = j+1; kflc = k+1;
766 kfld = std::max(kfla,kflb);
767 kfld = std::max(kfld,kflc);
768
769 kflf = std::min(kfla,kflb);
770 kflf = std::min(kflf,kflc);
771
772 kfle = kfla + kflb + kflc - kfld - kflf;
773
774 Baryon[i][j][k][0] = 1000 * kfld + 100 * kfle + 10 * kflf + 2; // spin=1/2
775 BaryonWeight[i][j][k][0] = ( pspin_barion);
776 Baryon[i][j][k][1] = 1000 * kfld + 100 * kfle + 10 * kflf + 4; // spin=3/2
777 BaryonWeight[i][j][k][1] = (1.-pspin_barion);
778 }
779 }
780 }
781
782 // Delta- ddd - only 1114
783 Baryon[0][0][0][0] = 1114; BaryonWeight[0][0][0][0] = 1.0;
784 Baryon[0][0][0][1] = 0; BaryonWeight[0][0][0][1] = 0.0;
785
786 // Delta++ uuu - only 2224
787 Baryon[1][1][1][0] = 2224; BaryonWeight[1][1][1][0] = 1.0;
788 Baryon[1][1][1][1] = 0; BaryonWeight[1][1][1][1] = 0.0;
789
790 // Omega- sss - only 3334
791 Baryon[2][2][2][0] = 3334; BaryonWeight[2][2][2][0] = 1.0;
792 Baryon[2][2][2][1] = 0; BaryonWeight[2][2][2][1] = 0.0;
793
794 // Omega_cc++ ccc - only 4444
795 Baryon[3][3][3][0] = 4444; BaryonWeight[3][3][3][0] = 1.0;
796 Baryon[3][3][3][1] = 0; BaryonWeight[3][3][3][1] = 0.0;
797
798 // Omega_bb- bbb - only 5554
799 Baryon[4][4][4][0] = 5554; BaryonWeight[4][4][4][0] = 1.0;
800 Baryon[4][4][4][1] = 0; BaryonWeight[4][4][4][1] = 0.0;
801
802 // Lambda/Sigma0 sud - 3122/3212
803 Baryon[0][1][2][0] = 3122; BaryonWeight[0][1][2][0] *= 0.5; // Lambda
804 Baryon[0][2][1][0] = 3122; BaryonWeight[0][2][1][0] *= 0.5;
805 Baryon[1][0][2][0] = 3122; BaryonWeight[1][0][2][0] *= 0.5;
806 Baryon[1][2][0][0] = 3122; BaryonWeight[1][2][0][0] *= 0.5;
807 Baryon[2][0][1][0] = 3122; BaryonWeight[2][0][1][0] *= 0.5;
808 Baryon[2][1][0][0] = 3122; BaryonWeight[2][1][0][0] *= 0.5;
809
810 Baryon[0][1][2][2] = 3212; BaryonWeight[0][1][2][2] = 0.5 * pspin_barion; // Sigma0
811 Baryon[0][2][1][2] = 3212; BaryonWeight[0][2][1][2] = 0.5 * pspin_barion;
812 Baryon[1][0][2][2] = 3212; BaryonWeight[1][0][2][2] = 0.5 * pspin_barion;
813 Baryon[1][2][0][2] = 3212; BaryonWeight[1][2][0][2] = 0.5 * pspin_barion;
814 Baryon[2][0][1][2] = 3212; BaryonWeight[2][0][1][2] = 0.5 * pspin_barion;
815 Baryon[2][1][0][2] = 3212; BaryonWeight[2][1][0][2] = 0.5 * pspin_barion;
816
817 // Lambda_c+/Sigma_c+ cud - 4122/4212
818 Baryon[0][1][3][0] = 4122; BaryonWeight[0][1][3][0] *= 0.5; // Lambda_c+
819 Baryon[0][3][1][0] = 4122; BaryonWeight[0][3][1][0] *= 0.5;
820 Baryon[1][0][3][0] = 4122; BaryonWeight[1][0][3][0] *= 0.5;
821 Baryon[1][3][0][0] = 4122; BaryonWeight[1][3][0][0] *= 0.5;
822 Baryon[3][0][1][0] = 4122; BaryonWeight[3][0][1][0] *= 0.5;
823 Baryon[3][1][0][0] = 4122; BaryonWeight[3][1][0][0] *= 0.5;
824
825 Baryon[0][1][3][2] = 4212; BaryonWeight[0][1][3][2] = 0.5 * pspin_barion; // SigmaC+
826 Baryon[0][3][1][2] = 4212; BaryonWeight[0][3][1][2] = 0.5 * pspin_barion;
827 Baryon[1][0][3][2] = 4212; BaryonWeight[1][0][3][2] = 0.5 * pspin_barion;
828 Baryon[1][3][0][2] = 4212; BaryonWeight[1][3][0][2] = 0.5 * pspin_barion;
829 Baryon[3][0][1][2] = 4212; BaryonWeight[3][0][1][2] = 0.5 * pspin_barion;
830 Baryon[3][1][0][2] = 4212; BaryonWeight[3][1][0][2] = 0.5 * pspin_barion;
831
832 // Xi_c+/Xi_c+' cus - 4232/4322
833 Baryon[1][2][3][0] = 4232; BaryonWeight[1][2][3][0] *= 0.5; // Xi_c+
834 Baryon[1][3][2][0] = 4232; BaryonWeight[1][3][2][0] *= 0.5;
835 Baryon[2][1][3][0] = 4232; BaryonWeight[2][1][3][0] *= 0.5;
836 Baryon[2][3][1][0] = 4232; BaryonWeight[2][3][1][0] *= 0.5;
837 Baryon[3][1][2][0] = 4232; BaryonWeight[3][1][2][0] *= 0.5;
838 Baryon[3][2][1][0] = 4232; BaryonWeight[3][2][1][0] *= 0.5;
839
840 Baryon[1][2][3][2] = 4322; BaryonWeight[1][2][3][2] = 0.5 * pspin_barion; // Xi_c+'
841 Baryon[1][3][2][2] = 4322; BaryonWeight[1][3][2][2] = 0.5 * pspin_barion;
842 Baryon[2][1][3][2] = 4322; BaryonWeight[2][1][3][2] = 0.5 * pspin_barion;
843 Baryon[2][3][1][2] = 4322; BaryonWeight[2][3][1][2] = 0.5 * pspin_barion;
844 Baryon[3][1][2][2] = 4322; BaryonWeight[3][1][2][2] = 0.5 * pspin_barion;
845 Baryon[3][2][1][2] = 4322; BaryonWeight[3][2][1][2] = 0.5 * pspin_barion;
846
847 // Xi_c0/Xi_c0' cus - 4132/4312
848 Baryon[0][2][3][0] = 4132; BaryonWeight[0][2][3][0] *= 0.5; // Xi_c0
849 Baryon[0][3][2][0] = 4132; BaryonWeight[0][3][2][0] *= 0.5;
850 Baryon[2][0][3][0] = 4132; BaryonWeight[2][0][3][0] *= 0.5;
851 Baryon[2][3][0][0] = 4132; BaryonWeight[2][3][0][0] *= 0.5;
852 Baryon[3][0][2][0] = 4132; BaryonWeight[3][0][2][0] *= 0.5;
853 Baryon[3][2][0][0] = 4132; BaryonWeight[3][2][0][0] *= 0.5;
854
855 Baryon[0][2][3][2] = 4312; BaryonWeight[0][2][3][2] = 0.5 * pspin_barion; // Xi_c0'
856 Baryon[0][3][2][2] = 4312; BaryonWeight[0][3][2][2] = 0.5 * pspin_barion;
857 Baryon[2][0][3][2] = 4312; BaryonWeight[2][0][3][2] = 0.5 * pspin_barion;
858 Baryon[2][3][0][2] = 4312; BaryonWeight[2][3][0][2] = 0.5 * pspin_barion;
859 Baryon[3][0][2][2] = 4312; BaryonWeight[3][0][2][2] = 0.5 * pspin_barion;
860 Baryon[3][2][0][2] = 4312; BaryonWeight[3][2][0][2] = 0.5 * pspin_barion;
861
862 // Lambda_b0/Sigma_b0 bud - 5122/5212
863 Baryon[0][1][4][0] = 5122; BaryonWeight[0][1][4][0] *= 0.5; // Lambda_b0
864 Baryon[0][4][1][0] = 5122; BaryonWeight[0][4][1][0] *= 0.5;
865 Baryon[1][0][4][0] = 5122; BaryonWeight[1][0][4][0] *= 0.5;
866 Baryon[1][4][0][0] = 5122; BaryonWeight[1][4][0][0] *= 0.5;
867 Baryon[4][0][1][0] = 5122; BaryonWeight[4][0][1][0] *= 0.5;
868 Baryon[4][1][0][0] = 5122; BaryonWeight[4][1][0][0] *= 0.5;
869
870 Baryon[0][1][4][2] = 5212; BaryonWeight[0][1][4][2] = 0.5 * pspin_barion; // Sigma_b0
871 Baryon[0][4][1][2] = 5212; BaryonWeight[0][4][1][2] = 0.5 * pspin_barion;
872 Baryon[1][0][4][2] = 5212; BaryonWeight[1][0][4][2] = 0.5 * pspin_barion;
873 Baryon[1][4][0][2] = 5212; BaryonWeight[1][4][0][2] = 0.5 * pspin_barion;
874 Baryon[4][0][1][2] = 5212; BaryonWeight[4][0][1][2] = 0.5 * pspin_barion;
875 Baryon[4][1][0][2] = 5212; BaryonWeight[4][1][0][2] = 0.5 * pspin_barion;
876
877 // Xi_b0/Xi_b0' bus - 5232/5322
878 Baryon[1][2][4][0] = 5232; BaryonWeight[1][2][4][0] *= 0.5; // Xi_b0
879 Baryon[1][4][2][0] = 5232; BaryonWeight[1][4][2][0] *= 0.5;
880 Baryon[2][1][4][0] = 5232; BaryonWeight[2][1][4][0] *= 0.5;
881 Baryon[2][4][1][0] = 5232; BaryonWeight[2][4][1][0] *= 0.5;
882 Baryon[4][1][2][0] = 5232; BaryonWeight[4][1][2][0] *= 0.5;
883 Baryon[4][2][1][0] = 5232; BaryonWeight[4][2][1][0] *= 0.5;
884
885 Baryon[1][2][4][2] = 5322; BaryonWeight[1][2][4][2] = 0.5 * pspin_barion; // Xi_b0'
886 Baryon[1][4][2][2] = 5322; BaryonWeight[1][4][2][2] = 0.5 * pspin_barion;
887 Baryon[2][1][4][2] = 5322; BaryonWeight[2][1][4][2] = 0.5 * pspin_barion;
888 Baryon[2][4][1][2] = 5322; BaryonWeight[2][4][1][2] = 0.5 * pspin_barion;
889 Baryon[4][1][2][2] = 5322; BaryonWeight[4][1][2][2] = 0.5 * pspin_barion;
890 Baryon[4][2][1][2] = 5322; BaryonWeight[4][2][1][2] = 0.5 * pspin_barion;
891
892 // Xi_b-/Xi_b-' bus - 5132/5312
893 Baryon[0][2][4][0] = 5132; BaryonWeight[0][2][4][0] *= 0.5; // Xi_b-
894 Baryon[0][4][2][0] = 5132; BaryonWeight[0][4][2][0] *= 0.5;
895 Baryon[2][0][4][0] = 5132; BaryonWeight[2][0][4][0] *= 0.5;
896 Baryon[2][4][0][0] = 5132; BaryonWeight[2][4][0][0] *= 0.5;
897 Baryon[4][0][2][0] = 5132; BaryonWeight[4][0][2][0] *= 0.5;
898 Baryon[4][2][0][0] = 5132; BaryonWeight[4][2][0][0] *= 0.5;
899
900 Baryon[0][2][4][2] = 5312; BaryonWeight[0][2][4][2] = 0.5 * pspin_barion; // Xi_b-'
901 Baryon[0][4][2][2] = 5312; BaryonWeight[0][4][2][2] = 0.5 * pspin_barion;
902 Baryon[2][0][4][2] = 5312; BaryonWeight[2][0][4][2] = 0.5 * pspin_barion;
903 Baryon[2][4][0][2] = 5312; BaryonWeight[2][4][0][2] = 0.5 * pspin_barion;
904 Baryon[4][0][2][2] = 5312; BaryonWeight[4][0][2][2] = 0.5 * pspin_barion;
905 Baryon[4][2][0][2] = 5312; BaryonWeight[4][2][0][2] = 0.5 * pspin_barion;
906
907 for (G4int i=0; i<5; i++)
908 { for (G4int j=0; j<5; j++)
909 { for (G4int k=0; k<5; k++)
910 { for (G4int l=0; l<4; l++)
911 {
912 G4ParticleDefinition * TestHadron=
914 /*
915 G4cout<<i<<" "<<j<<" "<<k<<" "<<l<<" "<<Baryon[i][j][k][l]<<" "<<TestHadron<<" "<<BaryonWeight[i][j][k][l];
916 if (TestHadron != nullptr) G4cout<<" "<<TestHadron->GetParticleName();
917 if ((TestHadron == nullptr)&&(Baryon[i][j][k][l] != 0)) G4cout<<" *****";
918 if ((TestHadron == nullptr)&&(Baryon[i][j][k][l] == 0)) G4cout<<" ---------------";
919 G4cout<<G4endl;
920 */
921 if ((TestHadron == nullptr)&&(Baryon[i][j][k][l] != 0)) Baryon[i][j][k][l] = 0;
922 }
923 }
924 }
925 }
926
927 // --------- Probabilities of q-qbar pair productions for kink or gluons.
928 G4double ProbUUbar = 0.33;
929 Prob_QQbar[0]=ProbUUbar; // Probability of ddbar production
930 Prob_QQbar[1]=ProbUUbar; // Probability of uubar production
931 Prob_QQbar[2]=1.0-2.*ProbUUbar; // Probability of ssbar production
932 Prob_QQbar[3]=0.0; // Probability of ccbar production
933 Prob_QQbar[4]=0.0; // Probability of bbbar production
934
935 for ( G4int i=0 ; i<350 ; i++ ) { // Must be checked
936 FS_LeftHadron[i] = 0;
937 FS_RightHadron[i] = 0;
938 FS_Weight[i] = 0.0;
939 }
940
941 NumberOf_FS = 0;
942}
943
944// --------------------------------------------------------------
945
947{
948 //MaxMass = -350.0*GeV;
949 G4double EstimatedMass=MaxMass;
950
951 G4ParticleDefinition* LeftParton = string->GetLeftParton();
952 G4ParticleDefinition* RightParton = string->GetRightParton();
953 if( LeftParton->GetParticleSubType() == RightParton->GetParticleSubType() ) { // q qbar, qq qqbar
954 if( LeftParton->GetPDGEncoding() * RightParton->GetPDGEncoding() > 0 ) {
955 // Not allowed combination of the partons
956 throw G4HadronicException(__FILE__, __LINE__,
957 "G4VLongitudinalStringDecay::SetMinimalStringMass: Illegal quark content as input");
958 }
959 }
960 if( LeftParton->GetParticleSubType() != RightParton->GetParticleSubType() ) { // q qq, qbar qqbar
961 if( LeftParton->GetPDGEncoding() * RightParton->GetPDGEncoding() < 0 ) {
962 // Not allowed combination of the partons
963 throw G4HadronicException(__FILE__, __LINE__,
964 "G4VLongitudinalStringDecay::SetMinimalStringMass: Illegal quark content as input");
965 }
966 }
967
968 G4int Qleft =std::abs(string->GetLeftParton()->GetPDGEncoding());
969 G4int Qright=std::abs(string->GetRightParton()->GetPDGEncoding());
970
971 if ((Qleft < 6) && (Qright < 6)) { // Q-Qbar string
972 EstimatedMass=minMassQQbarStr[Qleft-1][Qright-1];
973 MinimalStringMass=EstimatedMass;
974 SetMinimalStringMass2(EstimatedMass);
975 return;
976 }
977
978 if ((Qleft < 6) && (Qright > 1000)) { // Q - DiQ string
979 G4int q1=Qright/1000;
980 G4int q2=(Qright/100)%10;
981 EstimatedMass=minMassQDiQStr[Qleft-1][q1-1][q2-1];
982 MinimalStringMass=EstimatedMass; // It can be negative!
983 SetMinimalStringMass2(EstimatedMass);
984 return;
985 }
986
987 if ((Qleft > 1000) && (Qright < 6)) { // DiQ - Q string 6 6 6
988 G4int q1=Qleft/1000;
989 G4int q2=(Qleft/100)%10;
990 EstimatedMass=minMassQDiQStr[Qright-1][q1-1][q2-1];
991 MinimalStringMass=EstimatedMass; // It can be negative!
992 SetMinimalStringMass2(EstimatedMass);
993 return;
994 }
995
996 // DiQuark - Anti DiQuark string -----------------
997
998 G4double StringM=string->Get4Momentum().mag();
999
1000 #ifdef debug_LUNDfragmentation
1001 // G4cout<<"MinStringMass// Input String mass "<<string->Get4Momentum().mag()<<" Qleft "<<Qleft<<G4endl;
1002 #endif
1003
1004 G4int q1= Qleft/1000 ;
1005 G4int q2=(Qleft/100)%10 ;
1006
1007 G4int q3= Qright/1000 ;
1008 G4int q4=(Qright/100)%10;
1009
1010 // -------------- 2 baryon production or 2 mesons production --------
1011
1012 G4double EstimatedMass1 = minMassQDiQStr[q1-1][q2-1][0];
1013 G4double EstimatedMass2 = minMassQDiQStr[q3-1][q4-1][0];
1014 // Mass is negative if there is no corresponding particle.
1015
1016 if ( (EstimatedMass1 > 0.) && (EstimatedMass2 > 0.)) {
1017 EstimatedMass = EstimatedMass1 + EstimatedMass2;
1018 if ( StringM > EstimatedMass ) { // 2 baryon production is possible.
1019 MinimalStringMass=EstimatedMass1 + EstimatedMass2;
1020 SetMinimalStringMass2(EstimatedMass);
1021 return;
1022 }
1023 }
1024
1025 if ( (EstimatedMass1 < 0.) && (EstimatedMass2 > 0.)) {
1026 EstimatedMass = MaxMass;
1027 MinimalStringMass=EstimatedMass;
1028 SetMinimalStringMass2(EstimatedMass);
1029 return;
1030 }
1031
1032 if ( (EstimatedMass1 > 0.) && (EstimatedMass2 < 0.)) {
1033 EstimatedMass = EstimatedMass1;
1034 MinimalStringMass=EstimatedMass;
1035 SetMinimalStringMass2(EstimatedMass);
1036 return;
1037 }
1038
1039 // if ( EstimatedMass >= StringM ) {
1040 // ------------- Re-orangement ---------------
1041 EstimatedMass=std::min(minMassQQbarStr[q1-1][q3-1] + minMassQQbarStr[q2-1][q4-1],
1042 minMassQQbarStr[q1-1][q4-1] + minMassQQbarStr[q2-1][q3-1]);
1043
1044 // In principle, re-arrangement and 2 baryon production can compete.
1045 // More physics consideration is needed.
1046
1047 MinimalStringMass=EstimatedMass;
1048 SetMinimalStringMass2(EstimatedMass);
1049
1050 return;
1051}
1052
1053//--------------------------------------------------------------------------------------
1054
1056{
1057 MinimalStringMass2=aValue * aValue;
1058}
1059
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:180
G4double G4Log(G4double x)
Definition: G4Log.hh:227
CLHEP::Hep3Vector G4ThreeVector
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:52
double mag2() const
const G4ThreeVector & GetPosition() const
G4int GetDirection(void) const
G4Parton * GetRightParton(void) const
G4Parton * GetLeftParton(void) const
G4LorentzVector Get4Momentum() const
G4bool IsAFourQuarkString(void) const
G4ParticleDefinition * GetLeftParton(void) const
G4ParticleDefinition * GetRightParton(void) const
G4ParticleDefinition * Build(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4ParticleDefinition * BuildLowSpin(G4ParticleDefinition *black, G4ParticleDefinition *white)
void Boost(G4ThreeVector &Velocity)
const G4String & GetParticleName() const
const G4String & GetParticleSubType() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
std::vector< G4double > scalarMesonMix
G4ThreeVector SampleQuarkPt(G4double ptMax=-1.)
void SetSpinThreeHalfBarionProbability(G4double aValue)
std::pair< G4ParticleDefinition *, G4ParticleDefinition * > pDefPair
G4ParticleDefinition * FindParticle(G4int Encoding)
void SetMinimalStringMass2(const G4double aValue)
G4KineticTrackVector * ProduceOneHadron(const G4ExcitedString *const theString)
std::vector< G4double > vectorMesonMix
G4double PossibleHadronMass(const G4FragmentingString *const string, Pcreate build=0, pDefPair *pdefs=0)
virtual G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)
G4ParticleDefinition * FS_RightHadron[350]
G4HadFinalState * ApplyYourself(const G4HadProjectile &, G4Nucleus &) final
void SetScalarMesonMixings(std::vector< G4double > aVector)
virtual void SetMassCut(G4double aValue)
void SetDiquarkSuppression(G4double aValue)
void SetStrangenessSuppression(G4double aValue)
virtual void Sample4Momentum(G4LorentzVector *Mom, G4double Mass, G4LorentzVector *AntiMom, G4double AntiMass, G4double InitialMass)=0
void SetVectorMesonMixings(std::vector< G4double > aVector)
G4ParticleDefinition * FS_LeftHadron[350]
void SetDiquarkBreakProbability(G4double aValue)
pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true)
void SetStringTensionParameter(G4double aValue)
std::vector< G4ParticleDefinition * > NewParticles
void CalculateHadronTimePosition(G4double theInitialStringMass, G4KineticTrackVector *)
void SetMinimalStringMass(const G4FragmentingString *const string)
G4VLongitudinalStringDecay(const G4String &name="StringDecay")
G4ExcitedString * CopyExcited(const G4ExcitedString &string)
T sqr(const T &x)
Definition: templates.hh:128