Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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"
38
40{
41 PDGencoding=PDGcode;
42 theX = 0;
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;
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;
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
142void 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
153void 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}
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:52
const G4String & GetParticleType() const
G4double GetPDGIsospin3() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
G4ParticleDefinition * theDefinition
Definition: G4Parton.hh:103
G4Parton & operator=(const G4Parton &right)
Definition: G4Parton.cc:119
const G4ThreeVector & GetPosition() const
Definition: G4Parton.hh:132
G4int GetPDGcode() const
Definition: G4Parton.hh:127
~G4Parton()
Definition: G4Parton.cc:136
void Set4Momentum(const G4LorentzVector &aMomentum)
Definition: G4Parton.hh:148
void DefineMomentumInZ(G4double aLightConeMomentum, G4bool aDirection)
Definition: G4Parton.cc:142
G4Parton()
Definition: G4Parton.hh:50
const G4LorentzVector & Get4Momentum() const
Definition: G4Parton.hh:143
G4int PDGencoding
Definition: G4Parton.hh:102
T sqr(const T &x)
Definition: templates.hh:128