source: trunk/source/processes/hadronic/models/util/src/G4Parton.cc@ 1347

Last change on this file since 1347 was 819, checked in by garnier, 17 years ago

import all except CVS

File size: 6.0 KB
RevLine 
[819]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
39G4Parton::G4Parton(G4int PDGcode)
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
107G4Parton::G4Parton(const G4Parton &right)
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
119const G4Parton & G4Parton::operator=(const G4Parton &right)
120{
121 PDGencoding=right.GetPDGcode();
122 theMomentum=right.Get4Momentum();
123 thePosition=right.GetPosition();
124 theX = right.theX;
125 theDefinition = right.theDefinition;
126 theColour = right.theColour;
127 theIsoSpinZ = right.theIsoSpinZ;
128 theSpinZ = right.theSpinZ;
129
130 return *this;
131}
132
133G4Parton::~G4Parton()
134{
135// cout << "G4Parton::~G4Parton(): this = "<<this <<endl;
136// cout << "break here"<<this <<endl;
137}
138
139void G4Parton::DefineMomentumInZ(G4double aLightConeMomentum, G4bool aDirection)
140{
141 G4double Mass = GetMass();
142 G4LorentzVector a4Momentum = Get4Momentum();
143 aLightConeMomentum*=theX;
144 G4double TransverseMass2 = sqr(a4Momentum.px()) + sqr(a4Momentum.py()) + sqr(Mass);
145 a4Momentum.setPz(0.5*(aLightConeMomentum - TransverseMass2/aLightConeMomentum)*(aDirection? 1: -1));
146 a4Momentum.setE( 0.5*(aLightConeMomentum + TransverseMass2/aLightConeMomentum));
147 Set4Momentum(a4Momentum);
148}
149
150void G4Parton::DefineMomentumInZ(G4double aLightConeMomentum,G4double aLightConeE, G4bool aDirection)
151{
152 G4double Mass = GetMass();
153 G4LorentzVector a4Momentum = Get4Momentum();
154 aLightConeMomentum*=theX;
155 aLightConeE*=theX;
156 G4double TransverseMass2 = sqr(a4Momentum.px()) + sqr(a4Momentum.py()) + sqr(Mass);
157 a4Momentum.setPz(0.5*(aLightConeMomentum - aLightConeE - TransverseMass2/aLightConeMomentum)*(aDirection? 1: -1));
158 a4Momentum.setE( 0.5*(aLightConeMomentum + aLightConeE + TransverseMass2/aLightConeMomentum));
159 Set4Momentum(a4Momentum);
160}
Note: See TracBrowser for help on using the repository browser.