101 if (
Parton[0] != NULL )
return;
105 G4int stringStart, stringEnd;
135 return Parton[ PartonInd ];
146 return Parton[ PartonInd ];
174 G4int* bEnd )
const {
175 G4int absPDGcode = std::abs( PDGcode );
177 if ( absPDGcode < 1000 ) {
178 G4int heavy(0), light(0);
179 if(!((absPDGcode == 111)||(absPDGcode == 221)||(absPDGcode == 331)))
181 heavy = absPDGcode/100;
182 light = (absPDGcode % 100)/10;
185 if (PDGcode < 0 ) anti *= -1;
192 else {heavy = 2; light = -2;}
202 G4int j1000 = PDGcode/1000;
203 G4int j100 = (PDGcode % 1000)/100;
204 G4int j10 = (PDGcode % 100)/10;
207 if((j1000 == j100) && (j1000 == j10)) SuppresUUDDSS=1.;
210 const G4int maxNumberOfLoops = 1000;
211 G4int loopCounter = 0;
218 if(( j100 == j10 ) && (
G4UniformRand() > SuppresUUDDSS ))
continue;
220 if( j100 == j10 ) {*bEnd =
Diquark( j100, j10, 1 );}
223 else {*bEnd =
Diquark( j100, j10, 1 );}
226 else if(random < 0.66667)
228 if(( j1000 == j10 ) && (
G4UniformRand() > SuppresUUDDSS ))
continue;
230 if( j1000 == j10 ) {*bEnd =
Diquark( j1000, j10, 1 );}
233 else {*bEnd =
Diquark( j1000, j10, 1 );}
238 if(( j1000 == j100 ) && (
G4UniformRand() > SuppresUUDDSS ))
continue;
240 if( j1000 == j100 ) {*bEnd =
Diquark( j1000, j100, 1 );}
243 else {*bEnd =
Diquark( j1000, j100, 1 );}
247 ++loopCounter < maxNumberOfLoops );
248 if ( loopCounter >= maxNumberOfLoops ) {
249 *aEnd = j10; *bEnd =
Diquark( j1000, j100, 1 );
288 G4int diquarkPDG =
std::max( std::abs( aquark ), std::abs( bquark ) ) * 1000 +
289 std::min( std::abs( aquark ), std::abs( bquark ) ) * 100 +
291 return ( aquark > 0 && bquark > 0 ) ? diquarkPDG : -1*diquarkPDG;
T max(const T t1, const T t2)
brief Return the largest of the two arguments
const G4ParticleDefinition * GetDefinition() const
G4Parton * GetNextAntiParton()
~G4DiffractiveSplitableHadron()
G4Parton * GetNextParton()
G4int Diquark(G4int aquark, G4int bquark, G4int Spin) const
void ChooseStringEnds(G4int PDGcode, G4int *aEnd, G4int *bEnd) const
G4DiffractiveSplitableHadron()
void SetSecondParton(G4int PDGcode)
G4int GetPDGEncoding() const
CLHEP::HepLorentzVector G4LorentzVector
void SetFirstParton(G4int PDGcode)
void Set4Momentum(const G4LorentzVector &aMomentum)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments