Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 // ------------------------------------------- 27 // ------------------------------------------------------------ 28 // GEANT 4 class implementation file << 28 // GEANT 4 class implementation file 29 // ------------------------------------------- 29 // ------------------------------------------------------------ 30 // 30 // 31 31 32 #include "G4ErrorTrajState.hh" 32 #include "G4ErrorTrajState.hh" 33 #include "G4ParticleTable.hh" 33 #include "G4ParticleTable.hh" 34 #include "G4ParticleDefinition.hh" 34 #include "G4ParticleDefinition.hh" 35 #include "G4ErrorPropagatorData.hh" 35 #include "G4ErrorPropagatorData.hh" 36 36 37 #include <iomanip> 37 #include <iomanip> 38 38 39 //-------------------------------------------- 39 //-------------------------------------------------------------------------- 40 G4ErrorTrajState::G4ErrorTrajState(const G4Str << 40 G4ErrorTrajState::G4ErrorTrajState( const G4String& partType, 41 const G4Poi << 41 const G4Point3D& pos, 42 const G4Err << 42 const G4Vector3D& mom, 43 : fParticleType(partType) << 43 const G4ErrorTrajErr& errmat) 44 , fPosition(pos) << 44 : fParticleType(partType), fPosition(pos), fMomentum(mom), fCharge(0.), 45 , fMomentum(mom) << 45 fError(errmat), theTSType(G4eTS_FREE), theG4Track(0) 46 , fError(errmat) << 47 , theTSType(G4eTS_FREE) << 48 { 46 { 49 iverbose = G4ErrorPropagatorData::verbose(); 47 iverbose = G4ErrorPropagatorData::verbose(); 50 } 48 } 51 49 52 //-------------------------------------------- << 53 G4ErrorTrajState::G4ErrorTrajState(const G4Err << 54 50 55 //-------------------------------------------- 51 //-------------------------------------------------------------------------- 56 G4ErrorTrajState::G4ErrorTrajState(G4ErrorTraj << 52 G4int G4ErrorTrajState::PropagateError( const G4Track* ) 57 : fParticleType(ts.fParticleType) << 53 { 58 , fPosition(ts.fPosition) << 54 std::ostringstream message; 59 , fMomentum(ts.fMomentum) << 55 message << "Wrong trajectory state type !" << G4endl 60 , fCharge(ts.fCharge) << 56 << "Called for trajectory state type: " << G4int(GetTSType()); 61 , fError(ts.fError) << 57 G4Exception("G4ErrorTrajState::PropagateError()", "GEANT4e-Error", 62 , theTSType(ts.theTSType) << 58 FatalException, message); 63 , theG4Track(ts.theG4Track) << 59 return -1; 64 , iverbose(ts.iverbose) << 65 { << 66 // Release data from source object << 67 ts.theG4Track = nullptr; << 68 } 60 } 69 61 70 //-------------------------------------------- << 71 G4ErrorTrajState& G4ErrorTrajState::operator=( << 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 62 88 //-------------------------------------------- 63 //-------------------------------------------------------------------------- 89 G4ErrorTrajState& G4ErrorTrajState::operator=( << 64 void G4ErrorTrajState::UpdatePosMom( const G4Point3D& pos, 90 { << 65 const G4Vector3D& mom ) 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 G << 111 { << 112 std::ostringstream message; << 113 message << "Wrong trajectory state type !" < << 114 << "Called for trajectory state type << 115 G4Exception("G4ErrorTrajState::PropagateErro << 116 FatalException, message); << 117 return -1; << 118 } << 119 << 120 //-------------------------------------------- << 121 void G4ErrorTrajState::UpdatePosMom(const G4Po << 122 { 66 { 123 fPosition = pos; 67 fPosition = pos; 124 fMomentum = mom; 68 fMomentum = mom; 125 } 69 } 126 70 >> 71 127 //-------------------------------------------- 72 //-------------------------------------------------------------------------- 128 void G4ErrorTrajState::SetData(const G4String& << 73 void G4ErrorTrajState::SetData( const G4String& partType, 129 const G4Vector3 << 74 const G4Point3D& pos, const G4Vector3D& mom ) 130 { 75 { 131 fParticleType = partType; 76 fParticleType = partType; 132 BuildCharge(); 77 BuildCharge(); 133 fPosition = pos; 78 fPosition = pos; 134 fMomentum = mom; 79 fMomentum = mom; 135 } 80 } 136 81 >> 82 137 //-------------------------------------------- 83 //-------------------------------------------------------------------------- 138 void G4ErrorTrajState::BuildCharge() 84 void G4ErrorTrajState::BuildCharge() 139 { 85 { 140 G4ParticleTable* particleTable = G4ParticleT 86 G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); 141 G4ParticleDefinition* particle = particleTab << 87 G4ParticleDefinition* particle = particleTable->FindParticle(fParticleType); 142 if(particle == nullptr) << 88 if( particle == 0) 143 { 89 { 144 std::ostringstream message; 90 std::ostringstream message; 145 message << "Particle type not defined: " < 91 message << "Particle type not defined: " << fParticleType; 146 G4Exception("G4ErrorTrajState::BuildCharge << 92 G4Exception( "G4ErrorTrajState::BuildCharge()", "GEANT4e-error", 147 FatalException, message); << 93 FatalException, message); 148 } 94 } 149 else 95 else 150 { 96 { 151 fCharge = particle->GetPDGCharge(); 97 fCharge = particle->GetPDGCharge(); 152 } 98 } 153 } 99 } 154 100 >> 101 155 //-------------------------------------------- 102 //------------------------------------------------------------------------ 156 void G4ErrorTrajState::DumpPosMomError(std::os << 103 void G4ErrorTrajState::DumpPosMomError( std::ostream& out ) const 157 { 104 { 158 out << *this; 105 out << *this; 159 } 106 } 160 107 >> 108 161 //-------------------------------------------- 109 //-------------------------------------------------------------------------- 162 std::ostream& operator<<(std::ostream& out, co 110 std::ostream& operator<<(std::ostream& out, const G4ErrorTrajState& ts) 163 { 111 { 164 // long mode = out.setf(std::ios::fixed,std 112 // long mode = out.setf(std::ios::fixed,std::ios::floatfield); 165 out << " G4ErrorTrajState of type " << ts.th << 113 out 166 << " : partycle: " << ts.fParticleType < << 114 << " G4ErrorTrajState of type " << ts.theTSType << " : partycle: " 167 << ts.fPosition << " moment << 115 << ts.fParticleType << " position: " << std::setw(6) << ts.fPosition 168 << " error matrix "; << 116 << " momentum: " << ts.fMomentum >> 117 << " error matrix "; 169 G4cout << ts.fError << G4endl; 118 G4cout << ts.fError << G4endl; 170 119 171 return out; 120 return out; 172 } 121 } >> 122 173 123