Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 #include "G4HadProjectile.hh" 23 #include "G4HadProjectile.hh" 27 #include "G4Track.hh" 24 #include "G4Track.hh" 28 #include "G4DynamicParticle.hh" << 25 #include "G4ParticleDefinition.hh" >> 26 #include "G4LorentzVector.hh" 29 27 30 G4HadProjectile::G4HadProjectile() << 28 G4HadProjectile:: 31 : theMat(nullptr),theTime(0.0),theBoundEnerg << 29 G4HadProjectile(const G4Track &aT) >> 30 : theMat(aT.GetMaterial()), >> 31 theOrgMom(aT.GetDynamicParticle()->Get4Momentum()), >> 32 theDef(aT.GetDefinition()) 32 { 33 { 33 theDef = nullptr; << 34 G4LorentzRotation toZ; 34 theMass = 0.0; << 35 toZ.rotateZ(-theOrgMom.phi()); 35 theKinEnergy = 0.0; << 36 toZ.rotateY(-theOrgMom.theta()); 36 theDirection.set(0.,0.,0.); << 37 theMom = toZ*theOrgMom; 37 theMom.set(0.,0.,0.,0.); << 38 toLabFrame = toZ.inverse(); >> 39 theTime = aT.GetGlobalTime(); >> 40 G4LorentzVector it(toLabFrame*theMom); 38 } 41 } 39 42 40 G4HadProjectile::G4HadProjectile(const G4Track << 43 G4HadProjectile:: >> 44 G4HadProjectile(const G4DynamicParticle &aT) >> 45 : theMat(NULL), >> 46 theOrgMom(aT.Get4Momentum()), >> 47 theDef(aT.GetDefinition()) 41 { 48 { 42 Initialise(aT); << 49 G4LorentzRotation toZ; >> 50 toZ.rotateZ(-theOrgMom.phi()); >> 51 toZ.rotateY(-theOrgMom.theta()); >> 52 theMom = toZ*theOrgMom; >> 53 toLabFrame = toZ.inverse(); >> 54 theTime = 0; 43 } 55 } 44 56 45 G4HadProjectile::G4HadProjectile(const G4Dynam << 57 G4double G4HadProjectile::GetTotalEnergy() const 46 : theMat(nullptr),theTime(0.0),theBoundEnerg << 47 { 58 { 48 InitialiseLocal(&dp); << 59 return Get4Momentum().e(); 49 } 60 } 50 61 51 G4HadProjectile::~G4HadProjectile() << 62 G4double G4HadProjectile::GetTotalMomentum() const 52 {} << 53 << 54 void G4HadProjectile::Initialise(const G4Track << 55 { 63 { 56 theMat = aT.GetMaterial(); << 64 return Get4Momentum().vect().mag(); 57 //VI time of interaction starts from zero << 58 // not global time of a track << 59 theTime = 0.0; << 60 theBoundEnergy = 0.0; << 61 << 62 InitialiseLocal(aT.GetDynamicParticle()); << 63 } 65 } 64 66 65 void G4HadProjectile::InitialiseLocal(const G4 << 67 G4double G4HadProjectile:: >> 68 GetKineticEnergy() const 66 { 69 { 67 theDef = dp->GetDefinition(); << 70 G4double m=GetDefinition()->GetPDGMass(); 68 theDirection = dp->GetMomentumDirection(); << 71 return sqrt(Get4Momentum().vect().mag2()+m*m)-m; 69 theMass = theDef->GetPDGMass(); << 72 } 70 theKinEnergy = dp->GetKineticEnergy(); << 71 73 72 G4LorentzVector theOrgMom = dp->Get4Momentum << 74 const G4Material * G4HadProjectile:: 73 G4LorentzRotation toZ; << 75 GetMaterial() const {return theMat;} 74 toZ.rotateZ(-theOrgMom.phi()); << 75 toZ.rotateY(-theOrgMom.theta()); << 76 toLabFrame = toZ.inverse(); << 77 76 78 theMom.set(0.,0.,std::sqrt(theKinEnergy*(the << 77 const G4ParticleDefinition * G4HadProjectile:: 79 theMass+theKinEnergy); << 78 GetDefinition() const {return theDef;} 80 } << 81 79 82 80