Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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// $Id$
28//
29// -----------------------------------------------------------------------------
30// GEANT 4 class implementation file
31//
32// History: first implementation, Maxim Komogorov, 1-Jul-1998
33// redesign Gunter Folger, August/September 2001
34// -----------------------------------------------------------------------------
37#include "G4SystemOfUnits.hh"
38#include "G4ios.hh"
39#include "Randomize.hh"
41
43#include "G4ParticleTypes.hh"
44#include "G4ParticleChange.hh"
47#include "G4ParticleTable.hh"
48#include "G4ShortLivedTable.hh"
50#include "G4VDecayChannel.hh"
51#include "G4DecayTable.hh"
52
53#include "G4DiQuarks.hh"
54#include "G4Quarks.hh"
55#include "G4Gluons.hh"
56
57//------------------------debug switches
58//#define DEBUG_LightFragmentationTest 1
59
60
61//********************************************************************************
62// Constructors
63
65{
66 MassCut = 0.35*GeV;
67 ClusterMass = 0.15*GeV;
68
69 SmoothParam = 0.9;
72
73// Changable Parameters below.
74 SigmaQT = 0.5 * GeV; // 0.5 0.1
75
76 StrangeSuppress = 0.44; // 27 % strange quarks produced, ie. u:d:s=1:1:0.27
77 DiquarkSuppress = 0.07;
78 DiquarkBreakProb = 0.1;
79
80 //... pspin_meson is probability to create vector meson
81 pspin_meson = 0.5;
82
83 //... pspin_barion is probability to create 3/2 barion
84 pspin_barion = 0.5;
85
86 //... vectorMesonMix[] is quark mixing parameters for vector mesons (Variable spin = 3)
87 vectorMesonMix.resize(6);
88 vectorMesonMix[0] = 0.5;
89 vectorMesonMix[1] = 0.0;
90 vectorMesonMix[2] = 0.5;
91 vectorMesonMix[3] = 0.0;
92 vectorMesonMix[4] = 1.0;
93 vectorMesonMix[5] = 1.0;
94
95 //... scalarMesonMix[] is quark mixing parameters for scalar mesons (Variable spin=1)
96 scalarMesonMix.resize(6);
97 scalarMesonMix[0] = 0.5;
98 scalarMesonMix[1] = 0.25;
99 scalarMesonMix[2] = 0.5;
100 scalarMesonMix[3] = 0.25;
101 scalarMesonMix[4] = 1.0;
102 scalarMesonMix[5] = 0.5;
103
104// Parameters may be changed until the first fragmentation starts
105 PastInitPhase=false;
108 Kappa = 1.0 * GeV/fermi;
109
110
111}
112
113
115 {
116 delete hadronizer;
117 }
118
119//=============================================================================
120
121// Operators
122
123//const & G4VLongitudinalStringDecay::operator=(const G4VLongitudinalStringDecay &)
124// {
125// }
126
127//-----------------------------------------------------------------------------
128
129int G4VLongitudinalStringDecay::operator==(const G4VLongitudinalStringDecay &) const
130 {
131 throw G4HadronicException(__FILE__, __LINE__, "G4VLongitudinalStringDecay::operator== forbidden");
132 return false;
133 }
134
135//-------------------------------------------------------------------------------------
136
137int G4VLongitudinalStringDecay::operator!=(const G4VLongitudinalStringDecay &) const
138 {
139 throw G4HadronicException(__FILE__, __LINE__, "G4VLongitudinalStringDecay::operator!= forbidden");
140 return true;
141 }
142
143//***********************************************************************************
144
145// For changing Mass Cut used for selection of very small mass strings
147
148//-----------------------------------------------------------------------------
149
150// For handling a string with very low mass
151
153 G4ExcitedString * const string)
154{
155 // Check string decay threshold
156
157 G4KineticTrackVector * result=0; // return 0 when string exceeds the mass cut
158
160
161 G4FragmentingString aString(*string);
162
163 if ( sqr(FragmentationMass(&aString,0,&hadrons)+MassCut) < aString.Mass2()) {
164 return 0;
165 }
166
167// The string mass is very low ---------------------------
168
169 result=new G4KineticTrackVector;
170
171 if ( hadrons.second ==0 )
172 {
173// Substitute string by light hadron, Note that Energy is not conserved here!
174
175/*
176#ifdef DEBUG_LightFragmentationTest
177 G4cout << "VlongSF Warning replacing string by single hadron " <<G4endl;
178 G4cout << hadrons.first->GetParticleName()
179 << "string .. " << string->Get4Momentum() << " "
180 << string->Get4Momentum().m() << G4endl;
181#endif
182*/
183 G4ThreeVector Mom3 = string->Get4Momentum().vect();
184 G4LorentzVector Mom(Mom3,
185 std::sqrt(Mom3.mag2() +
186 sqr(hadrons.first->GetPDGMass())));
187 result->push_back(new G4KineticTrack(hadrons.first, 0,
188 string->GetPosition(),
189 Mom));
190 } else
191 {
192//... string was qq--qqbar type: Build two stable hadrons,
193
194#ifdef DEBUG_LightFragmentationTest
195 G4cout << "VlongSF Warning replacing qq-qqbar string by TWO hadrons "
196 << hadrons.first->GetParticleName() << " / "
197 << hadrons.second->GetParticleName()
198 << "string .. " << string->Get4Momentum() << " "
199 << string->Get4Momentum().m() << G4endl;
200#endif
201
202 G4LorentzVector Mom1, Mom2;
203 Sample4Momentum(&Mom1, hadrons.first->GetPDGMass(),
204 &Mom2,hadrons.second->GetPDGMass(),
205 string->Get4Momentum().mag());
206
207 result->push_back(new G4KineticTrack(hadrons.first, 0,
208 string->GetPosition(),
209 Mom1));
210 result->push_back(new G4KineticTrack(hadrons.second, 0,
211 string->GetPosition(),
212 Mom2));
213
214 G4ThreeVector Velocity = string->Get4Momentum().boostVector();
215 result->Boost(Velocity);
216 }
217
218 return result;
219
220}
221
222//----------------------------------------------------------------------------------------
223
225 const G4FragmentingString * const string,
226 Pcreate build, pDefPair * pdefs )
227{
228
229 G4double mass;
230 static G4bool NeedInit(true);
231 static std::vector<double> nomix;
232 static G4HadronBuilder * minMassHadronizer;
233 if ( NeedInit )
234 {
235 NeedInit = false;
236 nomix.resize(6);
237 for ( G4int i=0; i<6 ; i++ ) nomix[i]=0;
238
239// minMassHadronizer=new G4HadronBuilder(pspin_meson,pspin_barion,nomix,nomix);
240 minMassHadronizer=hadronizer;
241 }
242
243 if ( build==0 ) build=&G4HadronBuilder::BuildLowSpin;
244
245 G4ParticleDefinition *Hadron1, *Hadron2=0;
246
247 if (!string->FourQuarkString() )
248 {
249 // spin 0 meson or spin 1/2 barion will be built
250
251//G4cout<<"String Left Right "<<string->GetLeftParton()<<" "<<string->GetRightParton()<<G4endl;
252 Hadron1 = (minMassHadronizer->*build)(string->GetLeftParton(),
253 string->GetRightParton());
254//G4cout<<"Hadron1 "<<Hadron1->GetParticleName()<<G4endl;
255 mass= (Hadron1)->GetPDGMass();
256 } else
257 {
258 //... string is qq--qqbar: Build two stable hadrons,
259 //... with extra uubar or ddbar quark pair
260 G4int iflc = (G4UniformRand() < 0.5)? 1 : 2;
261 if (string->GetLeftParton()->GetPDGEncoding() < 0) iflc = -iflc;
262
263 //... theSpin = 4; spin 3/2 baryons will be built
264 Hadron1 = (minMassHadronizer->*build)(string->GetLeftParton(),
265 FindParticle(iflc) );
266 Hadron2 = (minMassHadronizer->*build)(string->GetRightParton(),
267 FindParticle(-iflc) );
268 mass = (Hadron1)->GetPDGMass() + (Hadron2)->GetPDGMass();
269 }
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 {
285 if (ptr == NULL)
286 {
287 G4cout << "Particle with encoding "<<Encoding<<" does not exist!!!"<<G4endl;
288 throw G4HadronicException(__FILE__, __LINE__, "Check your particle table");
289 }
290 return ptr;
291 }
292
293//-----------------------------------------------------------------------------
294// virtual void Sample4Momentum(G4LorentzVector* Mom, G4double Mass,
295// G4LorentzVector* AntiMom, G4double AntiMass,
296// G4double InitialMass)=0;
297//-----------------------------------------------------------------------------
298
299//*********************************************************************************
300// For decision on continue or stop string fragmentation
301// virtual G4bool StopFragmenting(const G4FragmentingString * const string)=0;
302// virtual G4bool IsFragmentable(const G4FragmentingString * const string)=0;
303
304// If a string can not fragment, make last break into 2 hadrons
305// virtual G4bool SplitLast(G4FragmentingString * string,
306// G4KineticTrackVector * LeftVector,
307// G4KineticTrackVector * RightVector)=0;
308//-----------------------------------------------------------------------------
309//
310// If a string fragments, do the following
311//
312// For transver of a string to its CMS frame
313//-----------------------------------------------------------------------------
314
316{
317 G4Parton *Left=new G4Parton(*in.GetLeftParton());
318 G4Parton *Right=new G4Parton(*in.GetRightParton());
319 return new G4ExcitedString(Left,Right,in.GetDirection());
320}
321
322//-----------------------------------------------------------------------------
323
325 G4FragmentingString *string,
326 G4FragmentingString *&newString)
327{
328//G4cout<<"Start SplitUP"<<G4endl;
329 //... random choice of string end to use for creating the hadron (decay)
330 G4int SideOfDecay = (G4UniformRand() < 0.5)? 1: -1;
331 if (SideOfDecay < 0)
332 {
333 string->SetLeftPartonStable();
334 } else
335 {
336 string->SetRightPartonStable();
337 }
338
339 G4ParticleDefinition *newStringEnd;
340 G4ParticleDefinition * HadronDefinition;
341 if (string->DecayIsQuark())
342 {
343 HadronDefinition= QuarkSplitup(string->GetDecayParton(), newStringEnd);
344 } else {
345 HadronDefinition= DiQuarkSplitup(string->GetDecayParton(), newStringEnd);
346 }
347
348//G4cout<<"New had "<<HadronDefinition->GetParticleName()<<G4endl;
349// create new String from old, ie. keep Left and Right order, but replace decay
350
351 newString=new G4FragmentingString(*string,newStringEnd); // To store possible
352 // quark containt of new string
353//G4cout<<"SplitEandP "<<G4endl;
354 G4LorentzVector* HadronMomentum=SplitEandP(HadronDefinition, string, newString);
355
356 delete newString; newString=0;
357
358 G4KineticTrack * Hadron =0;
359 if ( HadronMomentum != 0 ) {
360
362 Hadron = new G4KineticTrack(HadronDefinition, 0,Pos, *HadronMomentum);
363
364 newString=new G4FragmentingString(*string,newStringEnd,
365 HadronMomentum);
366
367 delete HadronMomentum;
368 }
369//G4cout<<"End SplitUP"<<G4endl;
370 return Hadron;
371}
372
373//--------------------------------------------------------------------------------------
374
377 decay, G4ParticleDefinition *&created)
378{
379 G4int IsParticle=(decay->GetPDGEncoding()>0) ? -1 : +1; // if we have a quark,
380 // we need antiquark
381 // (or diquark)
382 pDefPair QuarkPair = CreatePartonPair(IsParticle);
383 created = QuarkPair.second;
384 return hadronizer->Build(QuarkPair.first, decay);
385
386}
387
388//-----------------------------------------------------------------------------
389
392 G4ParticleDefinition *&created)
393{
394 //... can Diquark break or not?
396 //... Diquark break
397
398 G4int stableQuarkEncoding = decay->GetPDGEncoding()/1000;
399 G4int decayQuarkEncoding = (decay->GetPDGEncoding()/100)%10;
400 if (G4UniformRand() < 0.5)
401 {
402 G4int Swap = stableQuarkEncoding;
403 stableQuarkEncoding = decayQuarkEncoding;
404 decayQuarkEncoding = Swap;
405 }
406
407 G4int IsParticle=(decayQuarkEncoding>0) ? -1 : +1;
408 // if we have a quark, we need antiquark)
409 pDefPair QuarkPair = CreatePartonPair(IsParticle,false); // no diquarks wanted
410 //... Build new Diquark
411 G4int QuarkEncoding=QuarkPair.second->GetPDGEncoding();
412 G4int i10 = std::max(std::abs(QuarkEncoding), std::abs(stableQuarkEncoding));
413 G4int i20 = std::min(std::abs(QuarkEncoding), std::abs(stableQuarkEncoding));
414 G4int spin = (i10 != i20 && G4UniformRand() <= 0.5)? 1 : 3;
415 G4int NewDecayEncoding = -1*IsParticle*(i10 * 1000 + i20 * 100 + spin);
416 created = FindParticle(NewDecayEncoding);
417 G4ParticleDefinition * decayQuark=FindParticle(decayQuarkEncoding);
418 G4ParticleDefinition * had=hadronizer->Build(QuarkPair.first, decayQuark);
419 return had;
420// return hadronizer->Build(QuarkPair.first, decayQuark);
421
422 } else {
423 //... Diquark does not break
424
425 G4int IsParticle=(decay->GetPDGEncoding()>0) ? +1 : -1;
426 // if we have a diquark, we need quark)
427 pDefPair QuarkPair = CreatePartonPair(IsParticle,false); // no diquarks wanted
428 created = QuarkPair.second;
429
430 G4ParticleDefinition * had=hadronizer->Build(QuarkPair.first, decay);
431 return had;
432// return G4ParticleDefinition * had=hadronizer->Build(QuarkPair.first, decay);
433 }
434}
435
436//-----------------------------------------------------------------------------
437
439 {
440 return (1 + (int)(G4UniformRand()/StrangeSuppress));
441 }
442
443//-----------------------------------------------------------------------------
444
446{
447// NeedParticle = +1 for Particle, -1 for Antiparticle
448
449 if ( AllowDiquarks && G4UniformRand() < DiquarkSuppress )
450 {
451 // Create a Diquark - AntiDiquark pair , first in pair is anti to IsParticle
454 G4int spin = (q1 != q2 && G4UniformRand() <= 0.5)? 1 : 3;
455 // convention: quark with higher PDG number is first
456 G4int PDGcode = (std::max(q1,q2) * 1000 + std::min(q1,q2) * 100 + spin) * NeedParticle;
457 return pDefPair (FindParticle(-PDGcode),FindParticle(PDGcode));
458
459
460 } else {
461 // Create a Quark - AntiQuark pair, first in pair IsParticle
462 G4int PDGcode=SampleQuarkFlavor()*NeedParticle;
463 return pDefPair (FindParticle(PDGcode),FindParticle(-PDGcode));
464 }
465
466}
467
468//-----------------------------------------------------------------------------
470 {
471 G4double Pt;
472 if ( ptMax < 0 ) {
473 // sample full gaussian
474 Pt = -std::log(G4UniformRand());
475 } else {
476 // sample in limited range
477 Pt = -std::log(CLHEP::RandFlat::shoot(std::exp(-sqr(ptMax)/sqr(SigmaQT)), 1.));
478 }
479 Pt = SigmaQT * std::sqrt(Pt);
480 G4double phi = 2.*pi*G4UniformRand();
481 return G4ThreeVector(Pt * std::cos(phi),Pt * std::sin(phi),0);
482 }
483
484//******************************************************************************
485
487 {
488
489// `yo-yo` formation time
490// const G4double kappa = 1.0 * GeV/fermi/4.;
492 for(size_t c1 = 0; c1 < Hadrons->size(); c1++)
493 {
494 G4double SumPz = 0;
495 G4double SumE = 0;
496 for(size_t c2 = 0; c2 < c1; c2++)
497 {
498 SumPz += Hadrons->operator[](c2)->Get4Momentum().pz();
499 SumE += Hadrons->operator[](c2)->Get4Momentum().e();
500 }
501 G4double HadronE = Hadrons->operator[](c1)->Get4Momentum().e();
502 G4double HadronPz = Hadrons->operator[](c1)->Get4Momentum().pz();
503 Hadrons->operator[](c1)->SetFormationTime(
504(theInitialStringMass - 2.*SumPz + HadronE - HadronPz)/(2.*kappa)/c_light);
505
506 G4ThreeVector aPosition(0, 0,
507(theInitialStringMass - 2.*SumE - HadronE + HadronPz)/(2.*kappa));
508 Hadrons->operator[](c1)->SetPosition(aPosition);
509
510 }
511 }
512
513//-----------------------------------------------------------------------------
514
516{
517 if ( PastInitPhase ) {
518 throw G4HadronicException(__FILE__, __LINE__, "4VLongitudinalStringDecay::SetSigmaTransverseMomentum after FragmentString() not allowed");
519 } else {
520 SigmaQT = aValue;
521 }
522}
523
524//----------------------------------------------------------------------------------------------------------
525
527{
528 if ( PastInitPhase ) {
529 throw G4HadronicException(__FILE__, __LINE__, "4VLongitudinalStringDecay::SetStrangenessSuppression after FragmentString() not allowed");
530 } else {
531 StrangeSuppress = aValue;
532 }
533}
534
535//----------------------------------------------------------------------------------------------------------
536
538{
539 if ( PastInitPhase ) {
540 throw G4HadronicException(__FILE__, __LINE__, "4VLongitudinalStringDecay::SetDiquarkSuppression after FragmentString() not allowed");
541 } else {
542 DiquarkSuppress = aValue;
543 }
544}
545
546//----------------------------------------------------------------------------------------
547
549{
550 if ( PastInitPhase ) {
551 throw G4HadronicException(__FILE__, __LINE__, "4VLongitudinalStringDecay::SetDiquarkBreakProbability after FragmentString() not allowed");
552 } else {
553 DiquarkBreakProb = aValue;
554 }
555}
556
557//----------------------------------------------------------------------------------------------------------
558
560{
561 if ( PastInitPhase ) {
562 throw G4HadronicException(__FILE__, __LINE__, "G4VLongitudinalStringDecay::SetVectorMesonProbability after FragmentString() not allowed");
563 } else {
564 pspin_meson = aValue;
565 delete hadronizer;
568 }
569}
570
571//----------------------------------------------------------------------------------------------------------
572
574{
575 if ( PastInitPhase ) {
576 throw G4HadronicException(__FILE__, __LINE__, "G4VLongitudinalStringDecay::SetSpinThreeHalfBarionProbability after FragmentString() not allowed");
577 } else {
578 pspin_barion = aValue;
579 delete hadronizer;
582 }
583}
584
585//----------------------------------------------------------------------------------------------------------
586
587void G4VLongitudinalStringDecay::SetScalarMesonMixings(std::vector<G4double> aVector)
588{
589 if ( PastInitPhase ) {
590 throw G4HadronicException(__FILE__, __LINE__, "G4VLongitudinalStringDecay::SetScalarMesonMixings after FragmentString() not allowed");
591 } else {
592 if ( aVector.size() < 6 )
593 throw G4HadronicException(__FILE__, __LINE__, "G4VLongitudinalStringDecay::SetScalarMesonMixings( argument Vector too small");
594 scalarMesonMix[0] = aVector[0];
595 scalarMesonMix[1] = aVector[1];
596 scalarMesonMix[2] = aVector[2];
597 scalarMesonMix[3] = aVector[3];
598 scalarMesonMix[4] = aVector[4];
599 scalarMesonMix[5] = aVector[5];
600 delete hadronizer;
603 }
604}
605
606//----------------------------------------------------------------------------------------------------------
607
608void G4VLongitudinalStringDecay::SetVectorMesonMixings(std::vector<G4double> aVector)
609{
610 if ( PastInitPhase ) {
611 throw G4HadronicException(__FILE__, __LINE__, "G4VLongitudinalStringDecay::SetVectorMesonMixings after FragmentString() not allowed");
612 } else {
613 if ( aVector.size() < 6 )
614 throw G4HadronicException(__FILE__, __LINE__, "G4VLongitudinalStringDecay::SetVectorMesonMixings( argument Vector too small");
615 vectorMesonMix[0] = aVector[0];
616 vectorMesonMix[1] = aVector[1];
617 vectorMesonMix[2] = aVector[2];
618 vectorMesonMix[3] = aVector[3];
619 vectorMesonMix[4] = aVector[4];
620 vectorMesonMix[5] = aVector[5];
621 delete hadronizer;
624
625 }
626}
627
628//-------------------------------------------------------------------------------------------
630{
631 Kappa = aValue * GeV/fermi;
632}
633//**************************************************************************************
634
CLHEP::Hep3Vector G4ThreeVector
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:53
double mag2() const
static double shoot()
Definition: RandFlat.cc:59
const G4ThreeVector & GetPosition() const
G4int GetDirection(void) const
G4Parton * GetRightParton(void) const
G4Parton * GetLeftParton(void) const
G4LorentzVector Get4Momentum() const
G4ParticleDefinition * GetLeftParton(void) const
G4ParticleDefinition * GetRightParton(void) const
G4ParticleDefinition * GetDecayParton() const
G4bool FourQuarkString(void) const
G4ParticleDefinition * Build(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4ParticleDefinition * BuildLowSpin(G4ParticleDefinition *black, G4ParticleDefinition *white)
void Boost(G4ThreeVector &Velocity)
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
std::vector< G4double > scalarMesonMix
G4ThreeVector SampleQuarkPt(G4double ptMax=-1.)
G4KineticTrack * Splitup(G4FragmentingString *string, G4FragmentingString *&newString)
void SetSpinThreeHalfBarionProbability(G4double aValue)
std::pair< G4ParticleDefinition *, G4ParticleDefinition * > pDefPair
virtual G4LorentzVector * SplitEandP(G4ParticleDefinition *pHadron, G4FragmentingString *string, G4FragmentingString *newString)=0
G4ParticleDefinition * FindParticle(G4int Encoding)
void SetVectorMesonProbability(G4double aValue)
std::vector< G4double > vectorMesonMix
G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)
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)
void SetDiquarkBreakProbability(G4double aValue)
G4ParticleDefinition * DiQuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)
pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true)
void SetStringTensionParameter(G4double aValue)
void CalculateHadronTimePosition(G4double theInitialStringMass, G4KineticTrackVector *)
G4ExcitedString * CPExcited(const G4ExcitedString &string)
G4double FragmentationMass(const G4FragmentingString *const string, Pcreate build=0, pDefPair *pdefs=0)
G4KineticTrackVector * LightFragmentationTest(const G4ExcitedString *const theString)
ush Pos
Definition: deflate.h:82
T sqr(const T &x)
Definition: templates.hh:145