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 // GEANT 4 class implementation file 29 // ------------------------------------------------------------ 30 // 31 32 #include "G4ErrorTrajState.hh" 33 #include "G4ParticleTable.hh" 34 #include "G4ParticleDefinition.hh" 35 #include "G4ErrorPropagatorData.hh" 36 37 #include <iomanip> 38 39 //-------------------------------------------------------------------------- 40 G4ErrorTrajState::G4ErrorTrajState(const G4String& partType, 41 const G4Point3D& pos, const G4Vector3D& mom, 42 const G4ErrorTrajErr& errmat) 43 : fParticleType(partType) 44 , fPosition(pos) 45 , fMomentum(mom) 46 , fError(errmat) 47 , theTSType(G4eTS_FREE) 48 { 49 iverbose = G4ErrorPropagatorData::verbose(); 50 } 51 52 //-------------------------------------------------------------------------- 53 G4ErrorTrajState::G4ErrorTrajState(const G4ErrorTrajState& ts) { *this = ts; } 54 55 //-------------------------------------------------------------------------- 56 G4ErrorTrajState::G4ErrorTrajState(G4ErrorTrajState&& ts) 57 : fParticleType(ts.fParticleType) 58 , fPosition(ts.fPosition) 59 , fMomentum(ts.fMomentum) 60 , fCharge(ts.fCharge) 61 , fError(ts.fError) 62 , theTSType(ts.theTSType) 63 , theG4Track(ts.theG4Track) 64 , iverbose(ts.iverbose) 65 { 66 // Release data from source object 67 ts.theG4Track = nullptr; 68 } 69 70 //-------------------------------------------------------------------------- 71 G4ErrorTrajState& G4ErrorTrajState::operator=(const G4ErrorTrajState& ts) 72 { 73 if(this != &ts) 74 { 75 fParticleType = ts.fParticleType; 76 fPosition = ts.fPosition; 77 fMomentum = ts.fMomentum; 78 fCharge = ts.fCharge; 79 fError = ts.fError; 80 theTSType = ts.theTSType; 81 iverbose = ts.iverbose; 82 delete theG4Track; 83 theG4Track = new G4Track(*ts.theG4Track); 84 } 85 return *this; 86 } 87 88 //-------------------------------------------------------------------------- 89 G4ErrorTrajState& G4ErrorTrajState::operator=(G4ErrorTrajState&& ts) 90 { 91 if(this != &ts) 92 { 93 fParticleType = ts.fParticleType; 94 fPosition = ts.fPosition; 95 fMomentum = ts.fMomentum; 96 fCharge = ts.fCharge; 97 fError = ts.fError; 98 theTSType = ts.theTSType; 99 iverbose = ts.iverbose; 100 delete theG4Track; 101 theG4Track = ts.theG4Track; 102 103 // Release data from source object 104 ts.theG4Track = nullptr; 105 } 106 return *this; 107 } 108 109 //-------------------------------------------------------------------------- 110 G4int G4ErrorTrajState::PropagateError(const G4Track*) 111 { 112 std::ostringstream message; 113 message << "Wrong trajectory state type !" << G4endl 114 << "Called for trajectory state type: " << G4int(GetTSType()); 115 G4Exception("G4ErrorTrajState::PropagateError()", "GEANT4e-Error", 116 FatalException, message); 117 return -1; 118 } 119 120 //-------------------------------------------------------------------------- 121 void G4ErrorTrajState::UpdatePosMom(const G4Point3D& pos, const G4Vector3D& mom) 122 { 123 fPosition = pos; 124 fMomentum = mom; 125 } 126 127 //-------------------------------------------------------------------------- 128 void G4ErrorTrajState::SetData(const G4String& partType, const G4Point3D& pos, 129 const G4Vector3D& mom) 130 { 131 fParticleType = partType; 132 BuildCharge(); 133 fPosition = pos; 134 fMomentum = mom; 135 } 136 137 //-------------------------------------------------------------------------- 138 void G4ErrorTrajState::BuildCharge() 139 { 140 G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); 141 G4ParticleDefinition* particle = particleTable->FindParticle(fParticleType); 142 if(particle == nullptr) 143 { 144 std::ostringstream message; 145 message << "Particle type not defined: " << fParticleType; 146 G4Exception("G4ErrorTrajState::BuildCharge()", "GEANT4e-error", 147 FatalException, message); 148 } 149 else 150 { 151 fCharge = particle->GetPDGCharge(); 152 } 153 } 154 155 //------------------------------------------------------------------------ 156 void G4ErrorTrajState::DumpPosMomError(std::ostream& out) const 157 { 158 out << *this; 159 } 160 161 //-------------------------------------------------------------------------- 162 std::ostream& operator<<(std::ostream& out, const G4ErrorTrajState& ts) 163 { 164 // long mode = out.setf(std::ios::fixed,std::ios::floatfield); 165 out << " G4ErrorTrajState of type " << ts.theTSType 166 << " : partycle: " << ts.fParticleType << " position: " << std::setw(6) 167 << ts.fPosition << " momentum: " << ts.fMomentum 168 << " error matrix "; 169 G4cout << ts.fError << G4endl; 170 171 return out; 172 } 173