65 subDir( leDirectory ) {
79 G4int atomicNumberIon,
80 G4int atomicNumberElem
82 G4bool isApplicable =
true;
95 G4int atomicNumberIon,
98 G4bool isApplicable =
true;
111 G4int atomicNumberIon,
112 G4int atomicNumberElem
129 G4int atomicNumberIon,
148 G4int atomicNumberIon,
149 G4int atomicNumberElem
161 dedx = physicsVector -> GetValue( kinEnergyPerNucleon, b );
171 G4int atomicNumberIon,
184 dedx = physicsVector -> GetValue( kinEnergyPerNucleon, b );
194 G4int atomicNumberIon,
198 if(physicsVector == 0) {
201 G4cerr <<
"G4IonStoppingData::AddPhysicsVector() Error: Pointer to vector" 202 <<
" is null-pointer." 209 if(matIdentifier.empty()) {
212 G4cerr <<
"G4IonStoppingData::AddPhysicsVector() Error: " 213 <<
"Cannot add physics vector. Invalid name." 220 if(atomicNumberIon <= 0) {
223 G4cerr <<
"G4IonStoppingData::AddPhysicsVector() Error: " 224 <<
"Cannot add physics vector. Illegal atomic number." 236 G4cerr <<
"G4IonStoppingData::AddPhysicsVector() Error: " 237 <<
"Vector with Z1 = " << atomicNumberIon <<
", mat = " 239 <<
"already exists. Remove first before replacing." 255 G4int atomicNumberIon,
256 G4int atomicNumberElem
259 if(physicsVector == 0) {
262 G4cerr <<
"G4IonStoppingData::AddPhysicsVector() Error: " 263 <<
"Pointer to vector is null-pointer." 270 if(atomicNumberIon <= 0) {
273 G4cerr <<
"G4IonStoppingData::AddPhysicsVector() Error: " 274 <<
"Cannot add physics vector. Illegal atomic number." 281 if(atomicNumberElem <= 0) {
284 G4cerr <<
"G4IonStoppingData::AddPhysicsVector() Error: " 285 <<
"Atomic number of element < 0." 296 G4cerr <<
"G4IonStoppingData::AddPhysicsVector() Error: " 297 <<
"Vector with Z1 = " << atomicNumberIon <<
", Z2 = " 299 <<
" already exists. Remove first before replacing." 313 G4int atomicNumberIon,
324 G4cerr <<
"G4IonStoppingData::RemovePhysicsVector() Warning: " 325 <<
"Cannot remove physics vector. Vector not found." 338 delete physicsVector;
346 G4int atomicNumberIon,
347 G4int atomicNumberElem
356 G4cerr <<
"G4IonStoppingData::RemovePhysicsVector() Warning: " 357 <<
"Cannot remove physics vector. Vector not found." 370 delete physicsVector;
378 G4int atomicNumberIon,
382 if(
IsApplicable(atomicNumberIon, matIdentifier) )
return true;
384 char* path = getenv(
"G4LEDATA");
386 G4Exception(
"G4IonStoppingData::BuildPhysicsVector()",
"mat521",
391 std::ostringstream
file;
393 file << path <<
"/" <<
subDir <<
"/z" 394 << atomicNumberIon <<
"_" << matIdentifier
399 std::ifstream ifilestream( fileName );
401 if ( !ifilestream.is_open() )
return false;
405 if( !physicsVector -> Retrieve(ifilestream,
true) ) {
411 physicsVector -> ScaleVector(
MeV,
MeV *
cm2 /( 0.001 *
g) );
412 physicsVector -> SetSpline(
true );
413 physicsVector -> FillSecondDerivatives();
417 delete physicsVector;
429 G4int atomicNumberIon,
430 G4int atomicNumberElem
433 if(
IsApplicable(atomicNumberIon, atomicNumberElem) )
return true;
435 char* path = getenv(
"G4LEDATA");
437 G4Exception(
"G4IonStoppingData::BuildPhysicsVector()",
"mat522",
441 std::ostringstream
file;
443 file << path <<
"/" <<
subDir <<
"/z" 444 << atomicNumberIon <<
"_" << atomicNumberElem
449 std::ifstream ifilestream( fileName );
451 if ( !ifilestream.is_open() )
return false;
455 if( !physicsVector -> Retrieve(ifilestream,
true) ) {
461 physicsVector -> ScaleVector(
MeV,
MeV *
cm2 /( 0.001 *
g) );
462 physicsVector -> SetSpline(
true );
463 physicsVector -> FillSecondDerivatives();
467 delete physicsVector;
483 for(;iterMat != iterMat_end; iterMat++) {
487 if(vec != 0)
delete vec;
495 for(;iterElem != iterElem_end; iterElem++) {
499 if(vec != 0)
delete vec;
518 for(;iterMat != iterMat_end; iterMat++) {
522 G4int atomicNumberIon = key.first;
523 G4String matIdentifier = key.second;
525 if(physicsVector != 0) {
540 <<
"Atomic nmb material" 543 for(;iterElem != iterElem_end; iterElem++) {
547 G4int atomicNumberIon = key.first;
548 G4int atomicNumberElem = key.second;
550 if(physicsVector != 0) {
G4bool BuildPhysicsVector(G4int ionZ, const G4String &matName)
G4IonDEDXMapMat dedxMapMaterials
G4bool AddPhysicsVector(G4PhysicsVector *physicsVector, G4int atomicNumberIon, const G4String &matIdentifier)
G4GLOB_DLL std::ostream G4cout
G4IonStoppingData(const G4String &leDirectory)
G4IonDEDXMapElem dedxMapElements
static const double second
G4bool IsApplicable(G4int atomicNumberIon, G4int atomicNumberElem)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4bool RemovePhysicsVector(G4int atomicNumberIon, const G4String &matIdentifier)
virtual ~G4IonStoppingData()
G4double GetDEDX(G4double kinEnergyPerNucleon, G4int atomicNumberIon, G4int atomicNumberElem)
std::pair< G4int, G4int > G4IonDEDXKeyElem
G4PhysicsVector * GetPhysicsVector(G4int atomicNumberIon, G4int atomicNumberElem)
std::pair< G4int, G4String > G4IonDEDXKeyMat
G4GLOB_DLL std::ostream G4cerr