86 if (Parton[0] != NULL)
return;
92 G4int stringStart, stringEnd;
93 ChooseStringEnds(PDGcode, &stringStart,&stringEnd);
95 Parton[0] =
new G4Parton(stringStart);
103 if ( PartonIndex > 1 || PartonIndex < 0 )
return NULL;
104 G4int PartonInd(PartonIndex);
105 if(PartonIndex == 1) PartonIndex=-1;
106 return Parton[PartonInd];
113 if ( PartonIndex > 1 || PartonIndex < 0 )
return NULL;
114 G4int PartonInd(PartonIndex);
115 if(PartonIndex == 1) PartonIndex=-1;
116 return Parton[PartonInd];
134void G4DiffractiveSplitableHadron::ChooseStringEnds(
G4int PDGcode,
G4int * aEnd,
G4int * bEnd)
const
140 G4int absPDGcode=std::abs(PDGcode);
142 if ( absPDGcode < 1000 )
144 G4int heavy= absPDGcode/ 100;
145 G4int light= (absPDGcode %100)/10;
148 G4int anti= 1 -2 * ( std::max( heavy, light ) % 2 );
149 if (PDGcode < 0 ) anti *=-1;
167 G4int j1000 = PDGcode/ 1000;
168 G4int j100 = (PDGcode % 1000) / 100;
169 G4int j10 = (PDGcode % 100) / 10;
174 if ( std::abs(j100) >= std::abs(j10) )
176 if ( random < udspin1 )
179 *bEnd= Diquark( j100, j10, 1);
180 }
else if ( random < (udspin1 + uuspin1) )
183 *bEnd= Diquark( j1000, j100, 1);
189 *bEnd= Diquark( j1000, j10, j1000 != j100 ? 0 : 1);
194 if ( random < udspin1 )
198 *bEnd= Diquark( j100, j10, j100 != j10 ? 0 : 10);
199 }
else if ( random < (udspin1 + uuspin1) )
202 *bEnd= Diquark( j1000, j100, 1);
206 *bEnd= Diquark( j1000, j10, 1);
221 diquarkPDG = std::max( std::abs(aquark), std::abs(bquark) )*1000 +
222 std::min( std::abs(aquark), std::abs(bquark) )*100 +
224 return ( aquark > 0 && bquark > 0 ) ? diquarkPDG : -1*diquarkPDG;
void SetFirstParton(G4int PDGcode)
G4Parton * GetNextAntiParton()
G4DiffractiveSplitableHadron()
G4Parton * GetNextParton()
~G4DiffractiveSplitableHadron()
void SetSecondParton(G4int PDGcode)
G4int GetPDGEncoding() const
G4ParticleDefinition * GetDefinition() const