103 G4int atomicNumberIon,
104 G4int atomicNumberElem
106 G4bool isApplicable =
true;
119 G4int atomicNumberIon,
122 G4bool isApplicable =
true;
135 G4int atomicNumberIon,
136 G4int atomicNumberElem
153 G4int atomicNumberIon,
172 G4int atomicNumberIon,
173 G4int atomicNumberElem
185 dedx = physicsVector -> GetValue( kinEnergyPerNucleon, b );
195 G4int atomicNumberIon,
208 dedx = physicsVector -> GetValue( kinEnergyPerNucleon, b );
218 G4int atomicNumberIon,
220 G4int atomicNumberElem
223 if(physicsVector == 0) {
226 G4cout <<
"G4IonDEDXTable::AddPhysicsVector() Error: Pointer to vector" 227 <<
" is null-pointer." 234 if(matIdentifier.empty()) {
237 G4cout <<
"G4IonDEDXTable::AddPhysicsVector() Error: " 238 <<
"Cannot add physics vector. Invalid name." 245 if(atomicNumberIon <= 2) {
248 G4cout <<
"G4IonDEDXTable::AddPhysicsVector() Error: " 249 <<
"Cannot add physics vector. Illegal atomic number." 256 if(atomicNumberElem > 0) {
263 G4cout <<
"G4IonDEDXTable::AddPhysicsVector() Error: " 264 <<
"Vector already exists. Remove first before replacing." 278 G4cout <<
"G4IonDEDXTable::AddPhysicsVector() Error: " 279 <<
"Vector already exists. Remove first before replacing." 294 G4int atomicNumberIon,
308 G4cout <<
"G4IonDEDXTable::RemovePhysicsVector() Warning: " 309 <<
"Cannot remove physics vector. Vector not found." 316 physicsVector = (*iter).second;
320 G4IonDEDXMapElem::iterator it;
324 if( (*it).second == physicsVector ) {
331 delete physicsVector;
343 std::ofstream ofilestream;
345 ofilestream.open( fileName, std::ios::out );
350 G4cout <<
"G4ExtDEDXTable::StorePhysicsVector() " 351 <<
" Cannot open file "<< fileName
366 for(;iterMat != iterMat_end; iterMat++) {
370 G4int atomicNumberIon = key.first;
371 G4String matIdentifier = key.second;
375 if(physicsVector != 0) {
376 ofilestream << atomicNumberIon <<
" " << matIdentifier;
378 if(atomicNumberElem > 0) ofilestream <<
" " << atomicNumberElem;
380 ofilestream <<
" # <Atomic number ion> <Material name> ";
382 if(atomicNumberElem > 0) ofilestream <<
"<Atomic number element>";
384 ofilestream << G4endl << physicsVector -> GetType() <<
G4endl;
386 physicsVector -> Store(ofilestream,
true);
393 G4cout <<
"G4ExtDEDXTable::StorePhysicsVector() " 394 <<
" Cannot store physics vector." 411 std::ifstream ifilestream;
412 ifilestream.open( fileName,
std::ios::in|std::ios::binary );
413 if( ! ifilestream ) {
415 G4cout <<
"G4ExtDEDXTable::RetrievePhysicsTable() " 416 <<
" Cannot open file "<< fileName
423 G4int nmbVectors = 0;
424 ifilestream >> nmbVectors;
425 if( ifilestream.fail() || nmbVectors <= 0) {
426 G4cout <<
"G4ExtDEDXTable::RetrievePhysicsTable() " 427 <<
" File content of " << fileName <<
" ill-formated." 428 <<
" Nvectors= " << nmbVectors
434 for(
G4int i = 0; i<nmbVectors; ++i) {
438 while( line.empty() ) {
440 getline( ifilestream, line );
441 if( ifilestream.fail() ) {
443 G4cout <<
"G4ExtDEDXTable::RetrievePhysicsTable() " 444 <<
" File content of " << fileName <<
" ill-formated." 451 std::string::size_type
pos = line.find_first_of(
"#");
452 if(pos != std::string::npos && pos > 0) {
453 line = line.substr(0, pos);
457 std::istringstream headerstream( line );
459 std::string::size_type atomicNumberIon;
460 headerstream >> atomicNumberIon;
463 headerstream >> materialName;
465 if( headerstream.fail() || std::string::npos == atomicNumberIon) {
468 G4cout <<
"G4ExtDEDXTable::RetrievePhysicsTable() " 469 <<
" File content of " << fileName <<
" ill-formated " 470 <<
" (vector header)." 477 std::string::size_type atomicNumberMat;
478 headerstream >> atomicNumberMat;
480 if( headerstream.eof() || std::string::npos == atomicNumberMat) {
485 ifilestream >> vectorType;
489 if(physicsVector == 0) {
491 G4cout <<
"G4ExtDEDXTable::RetrievePhysicsTable " 492 <<
" illegal physics Vector type " << vectorType
493 <<
" in " << fileName
500 if( !physicsVector -> Retrieve(ifilestream,
true) ) {
503 G4cout <<
"G4ExtDEDXTable::RetrievePhysicsTable() " 504 <<
" File content of " << fileName <<
" ill-formated." 511 physicsVector -> SetSpline(
true);
515 materialName, (
G4int)atomicNumberMat) ) {
517 delete physicsVector;
534 switch (vectorType) {
563 return physicsVector;
572 G4int atomicNumber = 0;
577 for(;iter != iter_end; iter++) {
579 if( (*iter).second == physicsVector ) {
582 atomicNumber = key.second;
596 for(;iterMat != iterMat_end; iterMat++) {
600 if(vec != 0)
delete vec;
619 <<
"Atomic nmb material" 622 for(;iterMat != iterMat_end; iterMat++) {
626 G4int atomicNumberIon = key.first;
627 G4String matIdentifier = key.second;
631 if(physicsVector != 0) {
638 if(atomicNumberElem > 0)
G4cout << atomicNumberElem;
std::pair< G4int, G4String > G4IonDEDXKeyMat
G4double GetDEDX(G4double kinEnergyPerNucleon, G4int atomicNumberIon, G4int atomicNumberElem)
G4bool RetrievePhysicsTable(const G4String &fileName)
G4PhysicsVector * CreatePhysicsVector(G4int vectorType)
G4bool RemovePhysicsVector(G4int atomicNumberIon, const G4String &matIdentifier)
G4IonDEDXMapElem dedxMapElements
G4int FindAtomicNumberElement(G4PhysicsVector *physicsVector)
std::pair< G4int, G4int > G4IonDEDXKeyElem
G4GLOB_DLL std::ostream G4cout
static const double second
G4bool AddPhysicsVector(G4PhysicsVector *physicsVector, G4int atomicNumberIon, const G4String &matIdenfier, G4int atomicNumberElem=0)
G4PhysicsVector * GetPhysicsVector(G4int atomicNumberIon, G4int atomicNumberElem)
G4bool StorePhysicsTable(const G4String &fileName)
G4bool BuildPhysicsVector(G4int ionZ, const G4String &matName)
virtual ~G4ExtDEDXTable()
static const G4double pos
G4IonDEDXMapMat dedxMapMaterials
G4bool IsApplicable(G4int atomicNumberIon, G4int atomicNumberElem)