44 std::vector<double> scalarMesonMix,
45 std::vector<double> vectorMesonMix)
47 mesonSpinMix=mesonMix;
48 barionSpinMix=barionMix;
49 scalarMesonMixings=scalarMesonMix;
50 vectorMesonMixings=vectorMesonMix;
59 Spin spin = (
G4UniformRand() < barionSpinMix) ? SpinHalf : SpinThreeHalf;
60 return Barion(black,white,spin);
65 Spin spin = (
G4UniformRand() < mesonSpinMix) ? SpinZero : SpinOne;
66 return Meson(black,white,spin);
76 return Meson(black,white, SpinZero);
79 return Barion(black,white, SpinHalf);
88 return Meson(black,white, SpinOne);
90 return Barion(black,white,SpinThreeHalf);
102 if (std::abs(charge) > 2 || std::abs(3.*charge - 3*
G4int(charge*1.001)) >
perCent )
105 G4cerr <<
" Invalid total charge found for on input: "
107 G4cerr <<
" PGDcode input quark1/quark2 : " <<
117 if ( std::abs(id1) < std::abs(id2) )
124 if (std::abs(id1) > 3 )
125 throw G4HadronicException(__FILE__, __LINE__,
"G4HadronBuilder::Meson : Illegal Quark content as input");
129 if (id1 + id2 == 0) {
131 G4int imix = 2*std::abs(id1) - 1;
132 if(theSpin == SpinZero) {
133 PDGEncoding = 110*(1 + (
G4int)(rmix + scalarMesonMixings[imix - 1])
134 + (
G4int)(rmix + scalarMesonMixings[imix])
137 PDGEncoding = 110*(1 + (
G4int)(rmix + vectorMesonMixings[imix - 1])
138 + (
G4int)(rmix + vectorMesonMixings[imix])
142 PDGEncoding = 100 * std::abs(id1) + 10 * std::abs(id2) + theSpin;
143 G4bool IsUp = (std::abs(id1)&1) == 0;
145 if( (IsUp && IsAnti ) || (!IsUp && !IsAnti ) )
146 PDGEncoding = - PDGEncoding;
153 if (MesonDef == 0 ) {
154 G4cerr <<
" G4HadronBuilder - Warning: No particle for PDGcode= "
158 G4cerr <<
" G4HadronBuilder - Warning: Incorrect Charge : "
178 if (std::abs(charge) > 2 || std::abs(3.*charge - 3*
G4int(charge*1.001)) >
perCent )
181 G4cerr <<
" Invalid total charge found for on input: " << charge<<
G4endl;
182 G4cerr <<
" PGDcode input quark1/quark2 : " <<
191 if ( std::abs(id1) < std::abs(id2) )
198 if (std::abs(id1) < 1000 || std::abs(id2) > 3 )
199 throw G4HadronicException(__FILE__, __LINE__,
"G4HadronBuilder::Barion: Illegal quark content as input");
201 G4int ifl1= std::abs(id1)/1000;
202 G4int ifl2 = (std::abs(id1) - ifl1 * 1000)/100;
203 G4int diquarkSpin = std::abs(id1)%10;
211 G4int kfla = std::abs(ifl1);
212 G4int kflb = std::abs(ifl2);
213 G4int kflc = std::abs(ifl3);
220 G4int kfle = kfla + kflb + kflc - kfld - kflf;
223 theSpin = (kfla == kflb && kflb == kflc)? SpinThreeHalf : theSpin;
226 if(theSpin == SpinHalf && kfld > kfle && kfle > kflf) {
231 if(diquarkSpin == 1 ) {
238 if(diquarkSpin == 3 && kfla != kfld)
243 if (kfll == 1) PDGEncoding = 1000 * kfld + 100 * kflf + 10 * kfle + theSpin;
244 else PDGEncoding = 1000 * kfld + 100 * kfle + 10 * kflf + theSpin;
246 if (id1 < 0) PDGEncoding = -PDGEncoding;
252 if (BarionDef == 0 ) {
253 G4cerr <<
" G4HadronBuilder - Warning: No particle for PDGcode= "
257 G4cerr <<
" G4HadronBuilder - Warning: Incorrect Charge : "
258 <<
" DiQuark/Quark = "
G4ParticleDefinition * BuildHighSpin(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
G4ParticleDefinition * BuildLowSpin(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4HadronBuilder(G4double mesonMix, G4double barionMix, std::vector< double > scalarMesonMix, std::vector< double > vectorMesonMix)
static constexpr double perCent
G4ParticleDefinition * Build(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4int GetPDGEncoding() const
const G4String & GetParticleSubType() const
const G4String & GetParticleName() const
static G4ParticleTable * GetParticleTable()
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
G4double GetPDGCharge() const
G4GLOB_DLL std::ostream G4cerr