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