00001 // 00002 // ******************************************************************** 00003 // * License and Disclaimer * 00004 // * * 00005 // * The Geant4 software is copyright of the Copyright Holders of * 00006 // * the Geant4 Collaboration. It is provided under the terms and * 00007 // * conditions of the Geant4 Software License, included in the file * 00008 // * LICENSE and available at http://cern.ch/geant4/license . These * 00009 // * include a list of copyright holders. * 00010 // * * 00011 // * Neither the authors of this software system, nor their employing * 00012 // * institutes,nor the agencies providing financial support for this * 00013 // * work make any representation or warranty, express or implied, * 00014 // * regarding this software system or assume any liability for its * 00015 // * use. Please see the license in the file LICENSE and URL above * 00016 // * for the full disclaimer and the limitation of liability. * 00017 // * * 00018 // * This code implementation is the result of the scientific and * 00019 // * technical work of the GEANT4 collaboration. * 00020 // * By using, copying, modifying or distributing the software (or * 00021 // * any work based on the software) you agree to acknowledge its * 00022 // * use in resulting scientific publications, and indicate your * 00023 // * acceptance of all terms of the Geant4 Software license. * 00024 // ******************************************************************** 00025 // 00026 // 00027 // $Id$ 00028 // 00029 00030 #ifndef G4VSplitableHadron_h 00031 #define G4VSplitableHadron_h 1 00032 00033 // ------------------------------------------------------------ 00034 // GEANT 4 class header file 00035 // 00036 // ---------------- G4VSplitableHadron---------------- 00037 // by Gunter Folger, June 1998. 00038 // class storing an interacting particle. Used by Parton String Models. 00039 // ------------------------------------------------------------ 00040 00041 #include "globals.hh" 00042 #include "G4ParticleDefinition.hh" 00043 #include "G4ReactionProduct.hh" 00044 class G4Nucleon; 00045 #include "G4ThreeVector.hh" 00046 #include "G4LorentzVector.hh" 00047 class G4Parton; 00048 class G4VKineticNucleon; 00049 00050 #include <vector> 00051 00052 class G4VSplitableHadron 00053 { 00054 00055 public: 00056 G4VSplitableHadron(); 00057 G4VSplitableHadron(const G4ReactionProduct & aPrimary); 00058 G4VSplitableHadron(const G4Nucleon & aNucleon); 00059 G4VSplitableHadron(const G4VKineticNucleon * aNucleon); 00060 00061 virtual ~G4VSplitableHadron(); 00062 00063 00064 int operator==(const G4VSplitableHadron &right) const; 00065 int operator!=(const G4VSplitableHadron &right) const; 00066 00067 void Set4Momentum(const G4LorentzVector &a4Momentum); 00068 const G4LorentzVector & Get4Momentum() const; 00069 00070 void SetDefinition(G4ParticleDefinition *aDefinition); 00071 G4ParticleDefinition * GetDefinition() const; 00072 00073 void IncrementCollisionCount(G4int aCount); 00074 void SetCollisionCount(G4int aCount); 00075 00076 void SetTimeOfCreation(G4double aTime); // Uzhi 7.05.08 00077 G4double GetTimeOfCreation(); // Uzhi 7.05.08 00078 00079 void SetPosition(const G4ThreeVector &aPosition); 00080 const G4ThreeVector & GetPosition() const; 00081 00082 void SetStatus(const G4int aStatus); // Uzhi 17.07.09 00083 G4int GetStatus(); // Uzhi 17.07.09 00084 00085 virtual void SplitUp() = 0; 00086 virtual void SetFirstParton(G4int PDGcode) = 0; // Uzhi 24.11.10 00087 virtual void SetSecondParton(G4int PDGcode)= 0; // Uzhi 24.11.10 00088 virtual G4Parton * GetNextParton() = 0 ; 00089 virtual G4Parton * GetNextAntiParton() = 0 ; 00090 G4bool IsSplit() { return isSplit;} 00091 00092 G4int GetSoftCollisionCount(); 00093 protected: 00094 00095 void Splitting() {isSplit = true;} 00096 00097 private: 00098 00099 G4VSplitableHadron(const G4VSplitableHadron &right); 00100 const G4VSplitableHadron & operator=(const G4VSplitableHadron &right); 00101 00102 private: 00103 00104 G4ParticleDefinition *theDefinition; 00105 00106 G4LorentzVector the4Momentum; 00107 00108 G4double TimeOfCreation; // Uzhi 7.05.08 00109 G4ThreeVector thePosition; 00110 G4int theCollisionCount; 00111 00112 G4int curStatus; // Uzhi 17.07.09 00113 G4bool isSplit; 00114 00115 }; 00116 00117 inline G4int G4VSplitableHadron::GetSoftCollisionCount() 00118 { 00119 return theCollisionCount; 00120 } 00121 00122 inline void G4VSplitableHadron::SetCollisionCount(G4int aCount) 00123 { 00124 theCollisionCount = aCount; 00125 } 00126 00127 inline void G4VSplitableHadron::Set4Momentum(const G4LorentzVector &a4Momentum) 00128 { 00129 the4Momentum=a4Momentum; 00130 } 00131 00132 inline const G4LorentzVector & G4VSplitableHadron::Get4Momentum() const 00133 { 00134 return the4Momentum; 00135 } 00136 00137 inline void G4VSplitableHadron::SetDefinition(G4ParticleDefinition *aDefinition) 00138 { 00139 theDefinition=aDefinition; 00140 } 00141 00142 inline G4ParticleDefinition * G4VSplitableHadron::GetDefinition() const 00143 { 00144 return theDefinition; 00145 } 00146 00147 inline void G4VSplitableHadron::IncrementCollisionCount(G4int aCount) 00148 { 00149 theCollisionCount += aCount; 00150 } 00151 00152 inline void G4VSplitableHadron::SetTimeOfCreation(G4double aTime) // Uzhi 7.05.08 00153 { 00154 TimeOfCreation=aTime; 00155 } 00156 00157 inline G4double G4VSplitableHadron::GetTimeOfCreation() // Uzhi 7.05.08 00158 { 00159 return TimeOfCreation; 00160 } 00161 00162 inline void G4VSplitableHadron::SetPosition(const G4ThreeVector &aPosition) 00163 { 00164 thePosition=aPosition; 00165 } 00166 00167 inline const G4ThreeVector & G4VSplitableHadron::GetPosition() const 00168 { 00169 return thePosition; 00170 } 00171 00172 inline void G4VSplitableHadron::SetStatus(G4int aStatus) // Uzhi 17.07.09 00173 { 00174 curStatus=aStatus; 00175 } 00176 00177 inline G4int G4VSplitableHadron::GetStatus() // Uzhi 17.07.09 00178 { 00179 return curStatus; 00180 } 00181 00182 00183 #endif 00184 00185