Geant4 Cross Reference |
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 #ifndef G4FragmentingString_h 30 #define G4FragmentingString_h 1 31 32 // ------------------------------------------------------------ 33 // GEANT 4 class header file 34 // 35 // ---------------- G4FragmentingString ---------------- 36 // by Gunter Folger, September 2001. 37 // class for an excited string used in Fragmention 38 // ------------------------------------------------------------ 39 40 #include "G4ios.hh" 41 #include "globals.hh" 42 #include "G4ThreeVector.hh" 43 #include "G4LorentzVector.hh" 44 #include "G4LorentzRotation.hh" 45 #include "G4ParticleDefinition.hh" 46 47 class G4ExcitedString; 48 49 class G4FragmentingString 50 { 51 public: 52 G4FragmentingString(const G4FragmentingString &right); 53 G4FragmentingString(const G4ExcitedString &excited); 54 G4FragmentingString(const G4FragmentingString &old, 55 G4ParticleDefinition * newdecay, 56 const G4LorentzVector *momentum); 57 G4FragmentingString(const G4FragmentingString &old, 58 G4ParticleDefinition * newdecay); 59 60 ~G4FragmentingString(); 61 62 G4FragmentingString& operator=(const G4FragmentingString &); 63 G4bool operator==(const G4FragmentingString &right) const; 64 65 G4bool operator!=(const G4FragmentingString &right) const; 66 67 G4LorentzVector Get4Momentum() const; 68 69 G4ThreeVector StablePt(); 70 G4ThreeVector DecayPt(); 71 72 G4double LightConePlus(); 73 G4double LightConeMinus(); 74 G4double LightConeDecay(); 75 76 G4double Mass() const; 77 G4double Mass2() const; 78 G4double MassT2() const; 79 80 G4ParticleDefinition* GetLeftParton(void) const; 81 G4ParticleDefinition* GetRightParton(void) const; 82 83 G4ParticleDefinition* GetStableParton() const; // stable at the moment 84 G4ParticleDefinition* GetDecayParton() const; // currently involved in fragmentation 85 86 void SetLeftPartonStable(); 87 void SetRightPartonStable(); 88 89 G4int GetDecayDirection() const; 90 91 G4bool DecayIsQuark(); 92 G4bool StableIsQuark(); 93 G4bool IsAFourQuarkString(void) const; 94 95 G4LorentzVector GetPstring(); 96 G4LorentzVector GetPleft(); 97 void SetPleft(G4LorentzVector a4momentum); 98 G4LorentzVector GetPright(); 99 void SetPright(G4LorentzVector a4momentum); 100 void LorentzRotate(const G4LorentzRotation & rotation); 101 G4LorentzRotation TransformToCenterOfMass(); 102 G4LorentzRotation TransformToAlignedCms(); 103 void Boost(G4ThreeVector& Velocity); 104 105 private: 106 G4ParticleDefinition *LeftParton, *RightParton; 107 G4ThreeVector Ptleft,Ptright; // Pt (px,py) for partons (pz ignored!) 108 G4double Pplus, Pminus; // p-, p+ of string, Plus associated to Left! 109 110 G4ParticleDefinition * theStableParton, * theDecayParton; 111 112 G4LorentzVector Pstring, Pleft, Pright; 113 enum DecaySide { None, Left, Right }; 114 DecaySide decaying; 115 }; 116 117 inline 118 G4bool G4FragmentingString::operator==(const G4FragmentingString &right) const 119 { 120 return this == &right; 121 } 122 123 inline 124 G4bool G4FragmentingString::operator!=(const G4FragmentingString &right) const 125 { 126 return this != &right; 127 } 128 129 130 inline 131 G4ParticleDefinition * G4FragmentingString::GetStableParton() const 132 { 133 return theStableParton; 134 } 135 136 inline 137 G4ParticleDefinition * G4FragmentingString::GetDecayParton() const 138 { 139 return theDecayParton; 140 } 141 142 inline 143 G4ParticleDefinition* G4FragmentingString::GetLeftParton(void) const 144 { 145 return LeftParton; 146 } 147 148 inline 149 G4ParticleDefinition* G4FragmentingString::GetRightParton(void) const 150 { 151 return RightParton; 152 } 153 154 //+++++++++++++++++++++++++++ 155 inline 156 void G4FragmentingString::LorentzRotate(const G4LorentzRotation & rotation) 157 { 158 SetPleft(rotation*Pleft); 159 SetPright(rotation*Pright); 160 Pstring = Pleft+Pright; 161 Ptleft =Pleft.vect(); Ptleft.setZ(0.); 162 Ptright=Pright.vect(); Ptright.setZ(0.); 163 Pplus =Pstring.plus(); 164 Pminus=Pstring.minus(); 165 } 166 167 inline 168 G4LorentzRotation G4FragmentingString::TransformToCenterOfMass() 169 { 170 G4LorentzVector momentum=Pstring; 171 G4LorentzRotation toCMS(-1*momentum.boostVector()); 172 173 Pleft *= toCMS; 174 Pright *= toCMS; 175 Pstring *= toCMS; 176 Ptleft =Pleft.vect(); Ptleft.setZ(0.); 177 Ptright=Pright.vect(); Ptright.setZ(0.); 178 Pplus =Pstring.plus(); 179 Pminus=Pstring.minus(); 180 return toCMS; 181 } 182 183 inline 184 void G4FragmentingString::SetPleft(G4LorentzVector a4momentum) 185 { 186 Pleft = a4momentum; 187 Ptleft = Pleft.vect(); Ptleft.setZ(0.); 188 Pstring = Pleft + Pright; 189 Pplus = Pstring.plus(); 190 Pminus = Pstring.minus(); 191 } 192 193 inline 194 void G4FragmentingString::SetPright(G4LorentzVector a4momentum) 195 { 196 Pright = a4momentum; 197 Ptright = Pright.vect(); Ptright.setZ(0.); 198 Pstring = Pleft + Pright; 199 Pplus = Pstring.plus(); 200 Pminus = Pstring.minus(); 201 } 202 203 #endif 204 205