100   if ( Parton[0] != NULL ) 
return;
 
  104   G4int stringStart, stringEnd;
 
  105   ChooseStringEnds( PDGcode, &stringStart, &stringEnd );
 
  107   Parton[0] = 
new G4Parton( stringStart );
 
  108   Parton[1] = 
new G4Parton( stringEnd );
 
  128   if ( PartonIndex > 1  ||  PartonIndex < 0 ) 
return NULL;
 
  129   G4int PartonInd( PartonIndex );
 
  130   if ( PartonIndex == 1 ) PartonIndex = -1;
 
  131   return Parton[ PartonInd ];
 
  139   if ( PartonIndex > 1  ||  PartonIndex < 0 ) 
return NULL;
 
  140   G4int PartonInd( PartonIndex );
 
  141   if ( PartonIndex == 1 ) PartonIndex = -1;
 
  142   return Parton[ PartonInd ];
 
  150   Parton[0] = 
new G4Parton( PDGcode );
 
  158   Parton[1] = 
new G4Parton( PDGcode );
 
  164 void G4DiffractiveSplitableHadron::ChooseStringEnds( 
G4int PDGcode, 
G4int* aEnd,
 
  165                                                      G4int* bEnd )
 const {
 
  166   G4int absPDGcode = std::abs( PDGcode );
 
  168   if ( absPDGcode < 1000 ) {  
 
  169     G4int heavy(0), light(0);
 
  170     if(!((absPDGcode == 111)||(absPDGcode == 221)||(absPDGcode == 331)))
 
  172      heavy = absPDGcode/100;
 
  173      light = (absPDGcode % 100)/10;
 
  176      if (PDGcode < 0 ) anti *= -1;
 
  183      else                        {heavy = 2; light = -2;}
 
  193     G4int j1000 = PDGcode/1000;
 
  194     G4int j100  = (PDGcode % 1000)/100;
 
  195     G4int j10   = (PDGcode % 100)/10;
 
  198     if((j1000 == j100) && (j1000 == j10)) SuppresUUDDSS=1.; 
 
  201     const G4int maxNumberOfLoops = 1000;
 
  202     G4int loopCounter = 0;
 
  209         if(( j100 == j10 ) && ( 
G4UniformRand() > SuppresUUDDSS )) 
continue;
 
  211         if( j100 == j10 )             {*bEnd = Diquark( j100, j10, 1 );}
 
  213           if( 
G4UniformRand() > 0.25) {*bEnd = Diquark( j100, j10, 0 );}
 
  214           else                        {*bEnd = Diquark( j100, j10, 1 );}
 
  217        else if(random < 0.66667)
 
  219         if(( j1000 == j10 ) && ( 
G4UniformRand() > SuppresUUDDSS )) 
continue;
 
  221         if( j1000 == j10 )            {*bEnd = Diquark( j1000, j10, 1 );}
 
  223           if( 
G4UniformRand() > 0.25) {*bEnd = Diquark( j1000, j10, 0 );}
 
  224           else                        {*bEnd = Diquark( j1000, j10, 1 );}
 
  229         if(( j1000 == j100 ) && ( 
G4UniformRand() > SuppresUUDDSS )) 
continue;
 
  231         if( j1000 == j100 )           {*bEnd = Diquark( j1000, j100, 1 );}
 
  233           if( 
G4UniformRand() > 0.25) {*bEnd = Diquark( j1000, j100, 0 );}
 
  234           else                        {*bEnd = Diquark( j1000, j100, 1 );}
 
  238               ++loopCounter < maxNumberOfLoops );  
 
  239     if ( loopCounter >= maxNumberOfLoops ) {
 
  240       *aEnd = j10; *bEnd = Diquark( j1000, j100, 1 );  
 
  279   G4int diquarkPDG = 
std::max( std::abs( aquark ), std::abs( bquark ) ) * 1000 +
 
  280                      std::min( std::abs( aquark ), std::abs( bquark ) ) * 100  +
 
  282   return ( aquark > 0  &&  bquark > 0 ) ? diquarkPDG : -1*diquarkPDG;
 
G4Parton * GetNextParton()
 
G4DiffractiveSplitableHadron()
 
G4int GetPDGEncoding() const 
 
G4Parton * GetNextAntiParton()
 
void SetFirstParton(G4int PDGcode)
 
const G4ParticleDefinition * GetDefinition() const 
 
void SetSecondParton(G4int PDGcode)
 
~G4DiffractiveSplitableHadron()
 
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