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