ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4Parton.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4Parton.cc
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;
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") {
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") {
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")){
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 
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 }