Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4Parton.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 //
27 //
28 // ------------------------------------------------------------
29 // GEANT 4 class implementation file
30 //
31 // ---------------- G4Parton ----------------
32 // by Gunter Folger, June 1998.
33 // class for Parton (inside a string) used by Parton String Models
34 // ------------------------------------------------------------
35 
36 #include "G4Parton.hh"
37 #include "G4HadronicException.hh"
38 
40 {
41  PDGencoding=PDGcode;
42  theX = 0;
43  theDefinition=G4ParticleTable::GetParticleTable()->FindParticle(PDGencoding);
44  if (theDefinition == NULL)
45  {
46  G4cout << "Encoding = "<<PDGencoding<<G4endl;
47  G4String text = "G4Parton::GetDefinition(): Encoding not in particle table";
48  throw G4HadronicException(__FILE__, __LINE__, text);
49  }
50  //
51  // colour by random in (1,2,3)=(R,G,B) for quarks and
52  // in (-1,-2,-3)=(Rbar,Gbar,Bbar) for anti-quarks:
53  //
54  if (theDefinition->GetParticleType() == "quarks") {
55  theColour = ((G4int)(3.*G4UniformRand())+1)*(std::abs(PDGencoding)/PDGencoding) ;
56  }
57  //
58  // colour by random in (-1,-2,-3)=(Rbar,Gbar,Bbar)=(GB,RB,RG) for di-quarks and
59  // in (1,2,3)=(R,G,B)=(GB,RB,RG) for anti-di-quarks:
60  //
61  else if (theDefinition->GetParticleType() == "diquarks") {
62  theColour = -((G4int)(3.*G4UniformRand())+1)*(std::abs(PDGencoding)/PDGencoding);
63  }
64  //
65  // colour by random in (-11,-12,...,-33)=(RRbar,RGbar,RBbar,...,BBbar) for gluons:
66  //
67  else if (theDefinition->GetParticleType() == "gluons") {
68  theColour = -(((G4int)(3.*G4UniformRand())+1)*10 + ((G4int)(3.*G4UniformRand())+1));
69  }
70  else {
71  G4cout << "Encoding = "<<PDGencoding<<G4endl;
72  G4String text = "G4Parton::GetDefinition(): Particle is not a parton";
73  throw G4HadronicException(__FILE__, __LINE__, text);
74  }
75  //
76  // isospin-z from PDG-encoded isospin-z for
77  // quarks, anti-quarks, di-quarks, and anti-di-quarks:
78  //
79  if ((theDefinition->GetParticleType() == "quarks") || (theDefinition->GetParticleType() == "diquarks")){
80  theIsoSpinZ = theDefinition->GetPDGIsospin3();
81  }
82  //
83  // isospin-z choosen at random from PDG-encoded isospin for gluons (should be zero):
84  //
85  else {
86  G4int thisPDGiIsospin=theDefinition->GetPDGiIsospin();
87  if (thisPDGiIsospin == 0) {
88  theIsoSpinZ = 0;
89  }
90  else {
91  theIsoSpinZ = ((G4int)((thisPDGiIsospin+1)*G4UniformRand()))-thisPDGiIsospin*0.5;
92  }
93  }
94  //
95  // spin-z choosen at random from PDG-encoded spin:
96  //
97  G4int thisPDGiSpin=theDefinition->GetPDGiSpin();
98  if (thisPDGiSpin == 0) {
99  theSpinZ = 0;
100  }
101  else {
102  G4int rand=((G4int)((thisPDGiSpin+1)*G4UniformRand()));
103  theSpinZ = rand-thisPDGiSpin*0.5;;
104  }
105 }
106 
108 {
109  PDGencoding = right.PDGencoding;
110  theMomentum = right.theMomentum;
111  thePosition = right.thePosition;
112  theX = right.theX;
113  theDefinition = right.theDefinition;
114  theColour = right.theColour;
115  theIsoSpinZ = right.theIsoSpinZ;
116  theSpinZ = right.theSpinZ;
117 }
118 
120 {
121  if (this != &right)
122  {
123  PDGencoding=right.GetPDGcode();
124  theMomentum=right.Get4Momentum();
125  thePosition=right.GetPosition();
126  theX = right.theX;
127  theDefinition = right.theDefinition;
128  theColour = right.theColour;
129  theIsoSpinZ = right.theIsoSpinZ;
130  theSpinZ = right.theSpinZ;
131  }
132 
133  return *this;
134 }
135 
137 {
138 // cout << "G4Parton::~G4Parton(): this = "<<this <<endl;
139 // cout << "break here"<<this <<endl;
140 }
141 
142 void G4Parton::DefineMomentumInZ(G4double aLightConeMomentum, G4bool aDirection)
143 {
144  G4double Mass = GetMass();
145  G4LorentzVector a4Momentum = Get4Momentum();
146  aLightConeMomentum*=theX;
147  G4double TransverseMass2 = sqr(a4Momentum.px()) + sqr(a4Momentum.py()) + sqr(Mass);
148  a4Momentum.setPz(0.5*(aLightConeMomentum - TransverseMass2/aLightConeMomentum)*(aDirection? 1: -1));
149  a4Momentum.setE( 0.5*(aLightConeMomentum + TransverseMass2/aLightConeMomentum));
150  Set4Momentum(a4Momentum);
151 }
152 
153 void G4Parton::DefineMomentumInZ(G4double aLightConeMomentum,G4double aLightConeE, G4bool aDirection)
154 {
155  G4double Mass = GetMass();
156  G4LorentzVector a4Momentum = Get4Momentum();
157  aLightConeMomentum*=theX;
158  aLightConeE*=theX;
159  G4double TransverseMass2 = sqr(a4Momentum.px()) + sqr(a4Momentum.py()) + sqr(Mass);
160  a4Momentum.setPz(0.5*(aLightConeMomentum - aLightConeE - TransverseMass2/aLightConeMomentum)*(aDirection? 1: -1));
161  a4Momentum.setE( 0.5*(aLightConeMomentum + aLightConeE + TransverseMass2/aLightConeMomentum));
162  Set4Momentum(a4Momentum);
163 }
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
G4int GetPDGcode() const
Definition: G4Parton.hh:124
~G4Parton()
Definition: G4Parton.cc:136
G4double GetPDGIsospin3() const
const G4LorentzVector & Get4Momentum() const
Definition: G4Parton.hh:140
G4Parton & operator=(const G4Parton &right)
Definition: G4Parton.cc:119
void Set4Momentum(const G4LorentzVector &aMomentum)
Definition: G4Parton.hh:145
int G4int
Definition: G4Types.hh:78
void DefineMomentumInZ(G4double aLightConeMomentum, G4bool aDirection)
Definition: G4Parton.cc:142
#define G4UniformRand()
Definition: Randomize.hh:87
G4GLOB_DLL std::ostream G4cout
double py() const
bool G4bool
Definition: G4Types.hh:79
G4Parton()
Definition: G4Parton.hh:50
double px() const
const G4String & GetParticleType() const
const G4ThreeVector & GetPosition() const
Definition: G4Parton.hh:129
static G4ParticleTable * GetParticleTable()
#define G4endl
Definition: G4ios.hh:61
T sqr(const T &x)
Definition: templates.hh:145
double G4double
Definition: G4Types.hh:76