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

Last change on this file since 1196 was 819, checked in by garnier, 16 years ago

import all except CVS

File size: 6.0 KB
Line 
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.