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