Geant4  10.03.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4Pythia6Decayer.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 // $Id: G4Pythia6Decayer.cc 98498 2016-07-20 15:39:59Z ihrivnac $
27 //
30 
31 // ----------------------------------------------------------------------------
32 // According to TPythia6Decayer class in Root:
33 // http://root.cern.ch/
34 // see http://root.cern.ch/root/License.html
35 // ----------------------------------------------------------------------------
36 
37 #include "G4Pythia6Decayer.hh"
38 #include "Pythia6.hh"
39 
40 #include "G4DynamicParticle.hh"
41 #include "G4DecayProducts.hh"
42 #include "G4DecayTable.hh"
43 #include "G4ParticleTable.hh"
44 #include "G4Track.hh"
45 #include "G4SystemOfUnits.hh"
46 
48 
49 #include <cmath>
50 
51 const EDecayType G4Pythia6Decayer::fgkDefaultDecayType = kAll;
52 
53 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
54 
56  : G4VExtDecayer("G4Pythia6Decayer"),
57  fMessenger(this),
58  fVerboseLevel(0),
59  fDecayType(fgkDefaultDecayType),
60  fDecayProductsArray(0)
61 {
63 
64  fDecayProductsArray = new ParticleVector();
65 
66  ForceDecay(fDecayType);
67 }
68 
69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
70 
72 {
74 
75  delete fDecayProductsArray;
76 }
77 
78 //
79 // private methods
80 //
81 
82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
83 
84 G4ParticleDefinition* G4Pythia6Decayer::
85 GetParticleDefinition(const Pythia6Particle* particle, G4bool warn) const
86 {
88 
89  // get particle definition from G4ParticleTable
90  G4int pdgEncoding = particle->fKF;
91  G4ParticleTable* particleTable
93  G4ParticleDefinition* particleDefinition = 0;
94  if (pdgEncoding != 0)
95  particleDefinition = particleTable->FindParticle(pdgEncoding);
96 
97  if ( particleDefinition == 0 && warn) {
98  G4cerr
99  << "G4Pythia6Decayer: GetParticleDefinition: " << std::endl
100  << "G4ParticleTable::FindParticle() for particle with PDG = "
101  << pdgEncoding
102  << " failed." << std::endl;
103  }
104 
105  return particleDefinition;
106 }
107 
108 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
109 
111 G4Pythia6Decayer::CreateDynamicParticle(const Pythia6Particle* particle) const
112 {
114 
115  // get particle properties
116  const G4ParticleDefinition* particleDefinition
117  = GetParticleDefinition(particle);
118  if ( ! particleDefinition ) return 0;
119 
120  G4ThreeVector momentum = GetParticleMomentum(particle);
121 
122  // create G4DynamicParticle
123  G4DynamicParticle* dynamicParticle
124  = new G4DynamicParticle(particleDefinition, momentum);
125 
126  return dynamicParticle;
127 }
128 
129 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
130 
131 G4ThreeVector G4Pythia6Decayer::GetParticlePosition(
132  const Pythia6Particle* particle) const
133 {
135 
137  = G4ThreeVector(particle->fVx * cm,
138  particle->fVy * cm,
139  particle->fVz * cm);
140  return position;
141 }
142 
143 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
144 
145 G4ThreeVector G4Pythia6Decayer::GetParticleMomentum(
146  const Pythia6Particle* particle) const
147 {
149 
150  G4ThreeVector momentum
151  = G4ThreeVector(particle->fPx * GeV,
152  particle->fPy * GeV,
153  particle->fPz * GeV);
154  return momentum;
155 }
156 
157 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
158 
159 G4int G4Pythia6Decayer::CountProducts(G4int channel, G4int particle)
160 {
162 
163  G4int np = 0;
164  for ( G4int i=1; i<=5; i++ )
165  if ( std::abs(Pythia6::Instance()->GetKFDP(channel,i) ) == particle )
166  np++;
167  return np;
168 }
169 
170 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
171 
172 void
173 G4Pythia6Decayer::ForceParticleDecay(G4int particle, G4int product, G4int mult)
174 {
176 
177  Pythia6* pythia6 = Pythia6::Instance();
178 
179  G4int kc = pythia6->Pycomp(particle);
180  pythia6->SetMDCY(kc,1,1);
181 
182  G4int ifirst = pythia6->GetMDCY(kc,2);
183  G4int ilast = ifirst + pythia6->GetMDCY(kc,3)-1;
184 
185  //
186  // Loop over decay channels
187  for (G4int channel= ifirst; channel <= ilast; channel++) {
188  if (CountProducts(channel,product) >= mult) {
189  pythia6->SetMDME(channel,1,1);
190  } else {
191  pythia6->SetMDME(channel,1,0);
192  }
193  }
194 }
195 
196 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
197 
198 void G4Pythia6Decayer::ForceParticleDecay(G4int particle, G4int* products,
199  G4int* mult, G4int npart)
200 {
202 
203  Pythia6* pythia6 = Pythia6::Instance();
204 
205  G4int kc = pythia6->Pycomp(particle);
206  pythia6->SetMDCY(kc,1,1);
207  G4int ifirst = pythia6->GetMDCY(kc,2);
208  G4int ilast = ifirst+pythia6->GetMDCY(kc,3)-1;
209  //
210  // Loop over decay channels
211  for (G4int channel = ifirst; channel <= ilast; channel++) {
212  G4int nprod = 0;
213  for (G4int i = 0; i < npart; i++)
214  nprod += (CountProducts(channel, products[i]) >= mult[i]);
215  if (nprod)
216  pythia6->SetMDME(channel,1,1);
217  else {
218  pythia6->SetMDME(channel,1,0);
219  }
220  }
221 }
222 
223 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
224 
225 void G4Pythia6Decayer::ForceHadronicD()
226 {
228 
229  const G4int kNHadrons = 4;
230  G4int channel;
231  G4int hadron[kNHadrons] = {411, 421, 431, 4112};
232 
233  // for D+ -> K0* (-> K- pi+) pi+
234  G4int iKstar0 = 313;
235  G4int iKstarbar0 = -313;
236  G4int iKPlus = 321;
237  G4int iKMinus = -321;
238  G4int iPiPlus = 211;
239  G4int iPiMinus = -211;
240 
241  G4int products[2] = {iKPlus, iPiMinus}, mult[2] = {1, 1};
242  ForceParticleDecay(iKstar0, products, mult, 2);
243 
244  // for Ds -> Phi pi+
245  G4int iPhi = 333;
246  ForceParticleDecay(iPhi,iKPlus,2); // Phi->K+K-
247 
248  G4int decayP1[kNHadrons][3] = {
249  {iKMinus, iPiPlus, iPiPlus},
250  {iKMinus, iPiPlus, 0 },
251  {iKPlus , iKstarbar0, 0 },
252  {-1 , -1 , -1 }
253  };
254  G4int decayP2[kNHadrons][3] = {
255  {iKstarbar0, iPiPlus, 0 },
256  {-1 , -1 , -1 },
257  {iPhi , iPiPlus, 0 },
258  {-1 , -1 , -1 }
259  };
260 
261  Pythia6* pythia6 = Pythia6::Instance();
262  for ( G4int ihadron = 0; ihadron < kNHadrons; ihadron++ ) {
263  G4int kc = pythia6->Pycomp(hadron[ihadron]);
264  pythia6->SetMDCY(kc,1,1);
265  G4int ifirst = pythia6->GetMDCY(kc,2);
266  G4int ilast = ifirst + pythia6->GetMDCY(kc,3)-1;
267 
268  for (channel = ifirst; channel <= ilast; channel++) {
269  if ((pythia6->GetKFDP(channel,1) == decayP1[ihadron][0] &&
270  pythia6->GetKFDP(channel,2) == decayP1[ihadron][1] &&
271  pythia6->GetKFDP(channel,3) == decayP1[ihadron][2] &&
272  pythia6->GetKFDP(channel,4) == 0) ||
273  (pythia6->GetKFDP(channel,1) == decayP2[ihadron][0] &&
274  pythia6->GetKFDP(channel,2) == decayP2[ihadron][1] &&
275  pythia6->GetKFDP(channel,3) == decayP2[ihadron][2] &&
276  pythia6->GetKFDP(channel,4) == 0)) {
277  pythia6->SetMDME(channel,1,1);
278  } else {
279  pythia6->SetMDME(channel,1,0);
280  } // selected channel ?
281  } // decay channels
282  } // hadrons
283 }
284 
285 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
286 
287 void G4Pythia6Decayer::ForceOmega()
288 {
290 
291  Pythia6* pythia6 = Pythia6::Instance();
292 
293  G4int iLambda0 = 3122;
294  G4int iKMinus = -321;
295 
296  G4int kc = pythia6->Pycomp(3334);
297  pythia6->SetMDCY(kc,1,1);
298  G4int ifirst = pythia6->GetMDCY(kc,2);
299  G4int ilast = ifirst + pythia6->GetMDCY(kc,3)-1;
300 
301  for (G4int channel = ifirst; channel <= ilast; channel++) {
302  if (pythia6->GetKFDP(channel,1) == iLambda0 &&
303  pythia6->GetKFDP(channel,2) == iKMinus &&
304  pythia6->GetKFDP(channel,3) == 0)
305  pythia6->SetMDME(channel,1,1);
306  else
307  pythia6->SetMDME(channel,1,0);
308  // selected channel ?
309  } // decay channels
310 }
311 
312 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
313 
314 void G4Pythia6Decayer::ForceDecay(EDecayType decayType)
315 {
317 
318  Pythia6::Instance()->SetMSTJ(21,2);
319 
320  if ( fDecayType == kNoDecayHeavy ) return;
321 
322  //
323  // select mode
324  G4int products[3];
325  G4int mult[3];
326 
327  switch ( decayType ) {
328 
329  case kHardMuons:
330  products[0] = 13;
331  products[1] = 443;
332  products[2] = 100443;
333  mult[0] = 1;
334  mult[1] = 1;
335  mult[2] = 1;
336  ForceParticleDecay( 511, products, mult, 3);
337  ForceParticleDecay( 521, products, mult, 3);
338  ForceParticleDecay( 531, products, mult, 3);
339  ForceParticleDecay( 5122, products, mult, 3);
340  ForceParticleDecay( 5132, products, mult, 3);
341  ForceParticleDecay( 5232, products, mult, 3);
342  ForceParticleDecay( 5332, products, mult, 3);
343  ForceParticleDecay( 100443, 443, 1); // Psi' -> J/Psi X
344  ForceParticleDecay( 443, 13, 2); // J/Psi -> mu+ mu-
345 
346  ForceParticleDecay( 411,13,1); // D+/-
347  ForceParticleDecay( 421,13,1); // D0
348  ForceParticleDecay( 431,13,1); // D_s
349  ForceParticleDecay( 4122,13,1); // Lambda_c
350  ForceParticleDecay( 4132,13,1); // Xsi_c
351  ForceParticleDecay( 4232,13,1); // Sigma_c
352  ForceParticleDecay( 4332,13,1); // Omega_c
353  break;
354 
355  case kSemiMuonic:
356  ForceParticleDecay( 411,13,1); // D+/-
357  ForceParticleDecay( 421,13,1); // D0
358  ForceParticleDecay( 431,13,1); // D_s
359  ForceParticleDecay( 4122,13,1); // Lambda_c
360  ForceParticleDecay( 4132,13,1); // Xsi_c
361  ForceParticleDecay( 4232,13,1); // Sigma_c
362  ForceParticleDecay( 4332,13,1); // Omega_c
363  ForceParticleDecay( 511,13,1); // B0
364  ForceParticleDecay( 521,13,1); // B+/-
365  ForceParticleDecay( 531,13,1); // B_s
366  ForceParticleDecay( 5122,13,1); // Lambda_b
367  ForceParticleDecay( 5132,13,1); // Xsi_b
368  ForceParticleDecay( 5232,13,1); // Sigma_b
369  ForceParticleDecay( 5332,13,1); // Omega_b
370  break;
371 
372  case kDiMuon:
373  ForceParticleDecay( 113,13,2); // rho
374  ForceParticleDecay( 221,13,2); // eta
375  ForceParticleDecay( 223,13,2); // omega
376  ForceParticleDecay( 333,13,2); // phi
377  ForceParticleDecay( 443,13,2); // J/Psi
378  ForceParticleDecay(100443,13,2);// Psi'
379  ForceParticleDecay( 553,13,2); // Upsilon
380  ForceParticleDecay(100553,13,2);// Upsilon'
381  ForceParticleDecay(200553,13,2);// Upsilon''
382  break;
383 
384  case kSemiElectronic:
385  ForceParticleDecay( 411,11,1); // D+/-
386  ForceParticleDecay( 421,11,1); // D0
387  ForceParticleDecay( 431,11,1); // D_s
388  ForceParticleDecay( 4122,11,1); // Lambda_c
389  ForceParticleDecay( 4132,11,1); // Xsi_c
390  ForceParticleDecay( 4232,11,1); // Sigma_c
391  ForceParticleDecay( 4332,11,1); // Omega_c
392  ForceParticleDecay( 511,11,1); // B0
393  ForceParticleDecay( 521,11,1); // B+/-
394  ForceParticleDecay( 531,11,1); // B_s
395  ForceParticleDecay( 5122,11,1); // Lambda_b
396  ForceParticleDecay( 5132,11,1); // Xsi_b
397  ForceParticleDecay( 5232,11,1); // Sigma_b
398  ForceParticleDecay( 5332,11,1); // Omega_b
399  break;
400 
401  case kDiElectron:
402  ForceParticleDecay( 113,11,2); // rho
403  ForceParticleDecay( 333,11,2); // phi
404  ForceParticleDecay( 221,11,2); // eta
405  ForceParticleDecay( 223,11,2); // omega
406  ForceParticleDecay( 443,11,2); // J/Psi
407  ForceParticleDecay(100443,11,2);// Psi'
408  ForceParticleDecay( 553,11,2); // Upsilon
409  ForceParticleDecay(100553,11,2);// Upsilon'
410  ForceParticleDecay(200553,11,2);// Upsilon''
411  break;
412 
413  case kBJpsiDiMuon:
414 
415  products[0] = 443;
416  products[1] = 100443;
417  mult[0] = 1;
418  mult[1] = 1;
419 
420  ForceParticleDecay( 511, products, mult, 2); // B0 -> J/Psi (Psi') X
421  ForceParticleDecay( 521, products, mult, 2); // B+/- -> J/Psi (Psi') X
422  ForceParticleDecay( 531, products, mult, 2); // B_s -> J/Psi (Psi') X
423  ForceParticleDecay( 5122, products, mult, 2); // Lambda_b -> J/Psi (Psi')X
424  ForceParticleDecay( 100443, 443, 1); // Psi' -> J/Psi X
425  ForceParticleDecay( 443,13,2); // J/Psi -> mu+ mu-
426  break;
427 
428  case kBPsiPrimeDiMuon:
429  ForceParticleDecay( 511,100443,1); // B0
430  ForceParticleDecay( 521,100443,1); // B+/-
431  ForceParticleDecay( 531,100443,1); // B_s
432  ForceParticleDecay( 5122,100443,1); // Lambda_b
433  ForceParticleDecay(100443,13,2); // Psi'
434  break;
435 
436  case kBJpsiDiElectron:
437  ForceParticleDecay( 511,443,1); // B0
438  ForceParticleDecay( 521,443,1); // B+/-
439  ForceParticleDecay( 531,443,1); // B_s
440  ForceParticleDecay( 5122,443,1); // Lambda_b
441  ForceParticleDecay( 443,11,2); // J/Psi
442  break;
443 
444  case kBJpsi:
445  ForceParticleDecay( 511,443,1); // B0
446  ForceParticleDecay( 521,443,1); // B+/-
447  ForceParticleDecay( 531,443,1); // B_s
448  ForceParticleDecay( 5122,443,1); // Lambda_b
449  break;
450 
452  ForceParticleDecay( 511,100443,1); // B0
453  ForceParticleDecay( 521,100443,1); // B+/-
454  ForceParticleDecay( 531,100443,1); // B_s
455  ForceParticleDecay( 5122,100443,1); // Lambda_b
456  ForceParticleDecay(100443,11,2); // Psi'
457  break;
458 
459  case kPiToMu:
460  ForceParticleDecay(211,13,1); // pi->mu
461  break;
462 
463  case kKaToMu:
464  ForceParticleDecay(321,13,1); // K->mu
465  break;
466 
467  case kWToMuon:
468  ForceParticleDecay( 24, 13,1); // W -> mu
469  break;
470 
471  case kWToCharm:
472  ForceParticleDecay( 24, 4,1); // W -> c
473  break;
474 
475  case kWToCharmToMuon:
476  ForceParticleDecay( 24, 4,1); // W -> c
477  ForceParticleDecay( 411,13,1); // D+/- -> mu
478  ForceParticleDecay( 421,13,1); // D0 -> mu
479  ForceParticleDecay( 431,13,1); // D_s -> mu
480  ForceParticleDecay( 4122,13,1); // Lambda_c
481  ForceParticleDecay( 4132,13,1); // Xsi_c
482  ForceParticleDecay( 4232,13,1); // Sigma_c
483  ForceParticleDecay( 4332,13,1); // Omega_c
484  break;
485 
486  case kZDiMuon:
487  ForceParticleDecay( 23, 13,2); // Z -> mu+ mu-
488  break;
489 
490  case kHadronicD:
491  ForceHadronicD();
492  break;
493 
494  case kPhiKK:
495  ForceParticleDecay(333,321,2); // Phi->K+K-
496  break;
497 
498  case kOmega:
499  ForceOmega();
500 
501  case kAll:
502  break;
503 
504  case kNoDecay:
505  Pythia6::Instance()->SetMSTJ(21,0);
506  break;
507 
508  case kNoDecayHeavy: break;
509 
510  case kMaxDecay: break;
511  }
512 }
513 
514 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
515 
516 void G4Pythia6Decayer::Decay(G4int pdg, const CLHEP::HepLorentzVector& p)
517 {
519 
520  Pythia6::Instance()->Py1ent(0, pdg, p.e(), p.theta(), p.phi());
521 }
522 
523 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
524 
525 G4int G4Pythia6Decayer::ImportParticles(ParticleVector* particles)
526 {
528 
529  return Pythia6::Instance()->ImportParticles(particles,"All");
530 }
531 
532 //
533 // public methods
534 //
535 
536 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
537 
539 {
541 
542  // get particle momentum
543  G4ThreeVector momentum = track.GetMomentum();
544  G4double etot = track.GetDynamicParticle()->GetTotalEnergy();;
546  p[0] = momentum.x() / GeV;
547  p[1] = momentum.y() / GeV;
548  p[2] = momentum.z() / GeV;
549  p[3] = etot / GeV;
550 
551  // get particle PDG
552  // ask G4Pythia6Decayer to get PDG encoding
553  // (in order to get PDG from extended TDatabasePDG
554  // in case the standard PDG code is not defined)
555  G4ParticleDefinition* particleDef = track.GetDefinition();
556  G4int pdgEncoding = particleDef->GetPDGEncoding();
557 
558  // let Pythia6Decayer decay the particle
559  // and import the decay products
560  Decay(pdgEncoding, p);
561  G4int nofParticles = ImportParticles(fDecayProductsArray);
562 
563  if ( fVerboseLevel > 0 ) {
564  G4cout << "nofParticles: " << nofParticles << G4endl;
565  }
566 
567  // convert decay products Pythia6Particle type
568  // to G4DecayProducts
569  G4DecayProducts* decayProducts
570  = new G4DecayProducts(*(track.GetDynamicParticle()));
571 
572  G4int counter = 0;
573  for (G4int i=0; i<nofParticles; i++) {
574 
575  // get particle from ParticleVector
576  Pythia6Particle* particle = (*fDecayProductsArray)[i];
577 
578  G4int status = particle->fKS;
579  G4int pdg = particle->fKF;
580  if ( status>0 && status<11 &&
581  std::abs(pdg)!=12 && std::abs(pdg)!=14 && std::abs(pdg)!=16 ) {
582  // pass to tracking final particles only;
583  // skip neutrinos
584 
585  if ( fVerboseLevel > 0 ) {
586  G4cout << " " << i << "th particle PDG: " << pdg << " ";
587  }
588 
589  // create G4DynamicParticle
590  G4DynamicParticle* dynamicParticle
591  = CreateDynamicParticle(particle);
592 
593  if (dynamicParticle) {
594 
595  if ( fVerboseLevel > 0 ) {
596  G4cout << " G4 particle name: "
597  << dynamicParticle->GetDefinition()->GetParticleName()
598  << G4endl;
599  }
600 
601  // add dynamicParticle to decayProducts
602  decayProducts->PushProducts(dynamicParticle);
603 
604  counter++;
605  }
606  }
607  }
608  if ( fVerboseLevel > 0 ) {
609  G4cout << "nofParticles for tracking: " << counter << G4endl;
610  }
611 
612  return decayProducts;
613 }
614 
615 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
616 
618 {
620 
621  // Do nothing if the decay type is not different from current one
622  if ( decayType == fDecayType ) return;
623 
624  fDecayType = decayType;
625  ForceDecay(fDecayType);
626 }
void SetMSTJ(int i, int m)
Definition: Pythia6.hh:182
G4ParticleDefinition * GetDefinition() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
CLHEP::Hep3Vector G4ThreeVector
static Pythia6 * Instance()
Definition: Pythia6.cc:125
int Pycomp(int kf)
Definition: Pythia6.cc:184
G4double GetTotalEnergy() const
double x() const
const G4DynamicParticle * GetDynamicParticle() const
G4int PushProducts(G4DynamicParticle *aParticle)
int GetMDCY(int i, int j)
Definition: Pythia6.hh:186
const char * p
Definition: xmltok.h:285
Structure for Pythia6 particle properties.
Definition: Pythia6.hh:119
void Py1ent(int line, int kf, double pe, double theta, double phi)
Definition: Pythia6.cc:193
G4ParticleDefinition * GetDefinition() const
Definition of the G4Pythia6Decayer class.
int G4int
Definition: G4Types.hh:78
const G4String & GetParticleName() const
double z() const
double phi() const
std::vector< Pythia6Particle * > ParticleVector
Definition: Pythia6.hh:149
int GetKFDP(int i, int j)
Definition: Pythia6.hh:187
ParticleVector * ImportParticles()
#define position
Definition: xmlparse.cc:622
G4GLOB_DLL std::ostream G4cout
double theta() const
bool G4bool
Definition: G4Types.hh:79
Definition of the Pythia6 class.
static constexpr double cm
Definition: G4SIunits.hh:119
G4ThreeVector GetMomentum() const
virtual ~G4Pythia6Decayer()
static G4ParticleTable * GetParticleTable()
double y() const
static constexpr double GeV
Definition: G4SIunits.hh:217
virtual G4DecayProducts * ImportDecayProducts(const G4Track &track)
#define G4endl
Definition: G4ios.hh:61
EDecayType
Definition: EDecayType.hh:41
void SetMDCY(int i, int j, int m)
Definition: Pythia6.hh:188
void ForceDecayType(EDecayType decayType)
double G4double
Definition: G4Types.hh:76
Definition: Decay.hh:48
G4GLOB_DLL std::ostream G4cerr
void SetMDME(int i, int j, int m)
Definition: Pythia6.hh:189