Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4ExtDEDXTable Class Reference

#include <G4ExtDEDXTable.hh>

Inheritance diagram for G4ExtDEDXTable:
G4VIonDEDXTable

Public Member Functions

 G4ExtDEDXTable ()
 
virtual ~G4ExtDEDXTable ()
 
G4bool BuildPhysicsVector (G4int ionZ, const G4String &matName)
 
G4bool BuildPhysicsVector (G4int ionZ, G4int matZ)
 
G4bool IsApplicable (G4int atomicNumberIon, G4int atomicNumberElem)
 
G4bool IsApplicable (G4int atomicNumberIon, const G4String &matIdentifier)
 
G4PhysicsVectorGetPhysicsVector (G4int atomicNumberIon, G4int atomicNumberElem)
 
G4PhysicsVectorGetPhysicsVector (G4int atomicNumberIon, const G4String &matIdenfier)
 
G4double GetDEDX (G4double kinEnergyPerNucleon, G4int atomicNumberIon, G4int atomicNumberElem)
 
G4double GetDEDX (G4double kinEnergyPerNucleon, G4int atomicNumberIon, const G4String &matIdenfier)
 
G4bool AddPhysicsVector (G4PhysicsVector *physicsVector, G4int atomicNumberIon, const G4String &matIdenfier, G4int atomicNumberElem=0)
 
G4bool RemovePhysicsVector (G4int atomicNumberIon, const G4String &matIdentifier)
 
G4bool StorePhysicsTable (const G4String &fileName)
 
G4bool RetrievePhysicsTable (const G4String &fileName)
 
void ClearTable ()
 
void DumpMap ()
 
- Public Member Functions inherited from G4VIonDEDXTable
 G4VIonDEDXTable ()
 
virtual ~G4VIonDEDXTable ()
 

Detailed Description

Definition at line 64 of file G4ExtDEDXTable.hh.

Constructor & Destructor Documentation

G4ExtDEDXTable::G4ExtDEDXTable ( )

Definition at line 73 of file G4ExtDEDXTable.cc.

73  {
74 
75 }
G4ExtDEDXTable::~G4ExtDEDXTable ( )
virtual

Definition at line 79 of file G4ExtDEDXTable.cc.

References ClearTable().

79  {
80 
81  ClearTable();
82 }

Member Function Documentation

G4bool G4ExtDEDXTable::AddPhysicsVector ( G4PhysicsVector physicsVector,
G4int  atomicNumberIon,
const G4String matIdenfier,
G4int  atomicNumberElem = 0 
)

Definition at line 216 of file G4ExtDEDXTable.cc.

References G4cout, and G4endl.

Referenced by RetrievePhysicsTable().

221  {
222 
223  if(physicsVector == 0) {
224 
225 #ifdef G4VERBOSE
226  G4cout << "G4IonDEDXTable::AddPhysicsVector() Error: Pointer to vector"
227  << " is null-pointer."
228  << G4endl;
229 #endif
230 
231  return false;
232  }
233 
234  if(matIdentifier.empty()) {
235 
236 #ifdef G4VERBOSE
237  G4cout << "G4IonDEDXTable::AddPhysicsVector() Error: "
238  << "Cannot add physics vector. Invalid name."
239  << G4endl;
240 #endif
241 
242  return false;
243  }
244 
245  if(atomicNumberIon <= 2) {
246 
247 #ifdef G4VERBOSE
248  G4cout << "G4IonDEDXTable::AddPhysicsVector() Error: "
249  << "Cannot add physics vector. Illegal atomic number."
250  << G4endl;
251 #endif
252 
253  return false;
254  }
255 
256  if(atomicNumberElem > 0) {
257 
258  G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem);
259 
260  if(dedxMapElements.count(key) == 1) {
261 
262 #ifdef G4VERBOSE
263  G4cout << "G4IonDEDXTable::AddPhysicsVector() Error: "
264  << "Vector already exists. Remove first before replacing."
265  << G4endl;
266 #endif
267  return false;
268  }
269 
270  dedxMapElements[key] = physicsVector;
271  }
272 
273  G4IonDEDXKeyMat mkey = std::make_pair(atomicNumberIon, matIdentifier);
274 
275  if(dedxMapMaterials.count(mkey) == 1) {
276 
277 #ifdef G4VERBOSE
278  G4cout << "G4IonDEDXTable::AddPhysicsVector() Error: "
279  << "Vector already exists. Remove first before replacing."
280  << G4endl;
281 #endif
282 
283  return false;
284  }
285 
286  dedxMapMaterials[mkey] = physicsVector;
287 
288  return true;
289 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
G4bool G4ExtDEDXTable::BuildPhysicsVector ( G4int  ionZ,
const G4String matName 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 94 of file G4ExtDEDXTable.cc.

References IsApplicable().

95  {
96 
97  return IsApplicable( ionZ, matName );
98 }
G4bool IsApplicable(G4int atomicNumberIon, G4int atomicNumberElem)
G4bool G4ExtDEDXTable::BuildPhysicsVector ( G4int  ionZ,
G4int  matZ 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 86 of file G4ExtDEDXTable.cc.

References IsApplicable().

86  {
87 
88  return IsApplicable( ionZ, matZ );
89 }
G4bool IsApplicable(G4int atomicNumberIon, G4int atomicNumberElem)
void G4ExtDEDXTable::ClearTable ( )

Definition at line 590 of file G4ExtDEDXTable.cc.

References python.hepunit::second.

Referenced by ~G4ExtDEDXTable().

590  {
591 
592  G4IonDEDXMapMat::iterator iterMat = dedxMapMaterials.begin();
593  G4IonDEDXMapMat::iterator iterMat_end = dedxMapMaterials.end();
594 
595  for(;iterMat != iterMat_end; iterMat++) {
596 
597  G4PhysicsVector* vec = iterMat -> second;
598 
599  if(vec != 0) delete vec;
600  }
601 
602  dedxMapElements.clear();
603  dedxMapMaterials.clear();
604 }
void G4ExtDEDXTable::DumpMap ( )

Definition at line 608 of file G4ExtDEDXTable.cc.

References G4cout, G4endl, right, and python.hepunit::second.

608  {
609 
610  G4IonDEDXMapMat::iterator iterMat = dedxMapMaterials.begin();
611  G4IonDEDXMapMat::iterator iterMat_end = dedxMapMaterials.end();
612 
613  G4cout << std::setw(15) << std::right
614  << "Atomic nmb ion"
615  << std::setw(25) << std::right
616  << "Material name"
617  << std::setw(25) << std::right
618  << "Atomic nmb material"
619  << G4endl;
620 
621  for(;iterMat != iterMat_end; iterMat++) {
622  G4IonDEDXKeyMat key = iterMat -> first;
623  G4PhysicsVector* physicsVector = iterMat -> second;
624 
625  G4int atomicNumberIon = key.first;
626  G4String matIdentifier = key.second;
627 
628  G4int atomicNumberElem = FindAtomicNumberElement(physicsVector);
629 
630  if(physicsVector != 0) {
631  G4cout << std::setw(15) << std::right
632  << atomicNumberIon
633  << std::setw(25) << std::right
634  << matIdentifier
635  << std::setw(25) << std::right;
636 
637  if(atomicNumberElem > 0) G4cout << atomicNumberElem;
638  else G4cout << "N/A";
639 
640  G4cout << G4endl;
641  }
642  }
643 
644 }
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
G4double G4ExtDEDXTable::GetDEDX ( G4double  kinEnergyPerNucleon,
G4int  atomicNumberIon,
G4int  atomicNumberElem 
)

Definition at line 170 of file G4ExtDEDXTable.cc.

References test::b, and python.hepunit::second.

174  {
175  G4double dedx = 0;
176 
177  G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem);
178 
179  G4IonDEDXMapElem::iterator iter = dedxMapElements.find(key);
180 
181  if( iter != dedxMapElements.end() ) {
182  G4PhysicsVector* physicsVector = iter -> second;
183 
184  G4bool b;
185  dedx = physicsVector -> GetValue( kinEnergyPerNucleon, b );
186  }
187 
188  return dedx;
189 }
bool G4bool
Definition: G4Types.hh:79
double G4double
Definition: G4Types.hh:76
G4double G4ExtDEDXTable::GetDEDX ( G4double  kinEnergyPerNucleon,
G4int  atomicNumberIon,
const G4String matIdenfier 
)

Definition at line 193 of file G4ExtDEDXTable.cc.

References test::b, and python.hepunit::second.

197  {
198  G4double dedx = 0;
199 
200  G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier);
201 
202  G4IonDEDXMapMat::iterator iter = dedxMapMaterials.find(key);
203 
204  if(iter != dedxMapMaterials.end()) {
205  G4PhysicsVector* physicsVector = iter -> second;
206 
207  G4bool b;
208  dedx = physicsVector -> GetValue( kinEnergyPerNucleon, b );
209  }
210 
211  return dedx;
212 }
bool G4bool
Definition: G4Types.hh:79
double G4double
Definition: G4Types.hh:76
G4PhysicsVector * G4ExtDEDXTable::GetPhysicsVector ( G4int  atomicNumberIon,
G4int  atomicNumberElem 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 134 of file G4ExtDEDXTable.cc.

References python.hepunit::second.

137  {
138 
139  G4PhysicsVector* physVector = 0;
140 
141  G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem);
142 
143  G4IonDEDXMapElem::iterator iter = dedxMapElements.find(key);
144 
145  if(iter != dedxMapElements.end()) physVector = iter -> second;
146 
147  return physVector;
148 }
G4PhysicsVector * G4ExtDEDXTable::GetPhysicsVector ( G4int  atomicNumberIon,
const G4String matIdenfier 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 152 of file G4ExtDEDXTable.cc.

References python.hepunit::second.

155  {
156 
157  G4PhysicsVector* physVector = 0;
158 
159  G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier);
160 
161  G4IonDEDXMapMat::iterator iter = dedxMapMaterials.find(key);
162 
163  if(iter != dedxMapMaterials.end()) physVector = iter -> second;
164 
165  return physVector;
166 }
G4bool G4ExtDEDXTable::IsApplicable ( G4int  atomicNumberIon,
G4int  atomicNumberElem 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 102 of file G4ExtDEDXTable.cc.

Referenced by BuildPhysicsVector().

105  {
106  G4bool isApplicable = true;
107  G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem);
108 
109  G4IonDEDXMapElem::iterator iter = dedxMapElements.find(key);
110 
111  if(iter == dedxMapElements.end()) isApplicable = false;
112 
113  return isApplicable;
114 }
bool G4bool
Definition: G4Types.hh:79
G4bool G4ExtDEDXTable::IsApplicable ( G4int  atomicNumberIon,
const G4String matIdentifier 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 118 of file G4ExtDEDXTable.cc.

121  {
122  G4bool isApplicable = true;
123  G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier);
124 
125  G4IonDEDXMapMat::iterator iter = dedxMapMaterials.find(key);
126 
127  if(iter == dedxMapMaterials.end()) isApplicable = false;
128 
129  return isApplicable;
130 }
bool G4bool
Definition: G4Types.hh:79
G4bool G4ExtDEDXTable::RemovePhysicsVector ( G4int  atomicNumberIon,
const G4String matIdentifier 
)

Definition at line 293 of file G4ExtDEDXTable.cc.

References G4cout, and G4endl.

296  {
297 
298  G4PhysicsVector* physicsVector = 0;
299 
300  // Deleting key of physics vector from material map
301  G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier);
302 
303  G4IonDEDXMapMat::iterator iter = dedxMapMaterials.find(key);
304 
305  if(iter == dedxMapMaterials.end()) {
306 
307 #ifdef G4VERBOSE
308  G4cout << "G4IonDEDXTable::RemovePhysicsVector() Warning: "
309  << "Cannot remove physics vector. Vector not found."
310  << G4endl;
311 #endif
312 
313  return false;
314  }
315 
316  physicsVector = (*iter).second;
317  dedxMapMaterials.erase(key);
318 
319  // Deleting key of physics vector from elemental material map (if it exists)
320  G4IonDEDXMapElem::iterator it;
321 
322  for(it=dedxMapElements.begin(); it!=dedxMapElements.end(); ++it) {
323 
324  if( (*it).second == physicsVector ) {
325  dedxMapElements.erase(it);
326  break;
327  }
328  }
329 
330  // Deleting physics vector
331  delete physicsVector;
332 
333  return true;
334 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
G4bool G4ExtDEDXTable::RetrievePhysicsTable ( const G4String fileName)

Definition at line 409 of file G4ExtDEDXTable.cc.

References AddPhysicsVector(), G4cout, and G4endl.

410 {
411  std::ifstream ifilestream;
412  ifilestream.open( fileName, std::ios::in|std::ios::binary );
413  if( ! ifilestream ) {
414 #ifdef G4VERBOSE
415  G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() "
416  << " Cannot open file "<< fileName
417  << G4endl;
418 #endif
419  return false;
420  }
421 
422  //std::string::size_type nmbVectors;
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
429  << G4endl;
430  ifilestream.close();
431  return false;
432  }
433 
434  for(G4int i = 0; i<nmbVectors; ++i) {
435 
436  G4String line = "";
437  while( line.empty() ) {
438 
439  getline( ifilestream, line );
440  if( ifilestream.fail() ) {
441 #ifdef G4VERBOSE
442  G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() "
443  << " File content of " << fileName << " ill-formated."
444  << G4endl;
445 #endif
446  ifilestream.close();
447  return false;
448  }
449 
450  std::string::size_type pos = line.find_first_of("#");
451  if(pos != std::string::npos && pos > 0) {
452  line = line.substr(0, pos);
453  }
454  }
455 
456  std::istringstream headerstream( line );
457 
458  std::string::size_type atomicNumberIon;
459  headerstream >> atomicNumberIon;
460 
461  G4String materialName;
462  headerstream >> materialName;
463 
464  if( headerstream.fail() || std::string::npos == atomicNumberIon) {
465 
466 #ifdef G4VERBOSE
467  G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() "
468  << " File content of " << fileName << " ill-formated "
469  << " (vector header)."
470  << G4endl;
471 #endif
472  ifilestream.close();
473  return false;
474  }
475 
476  std::string::size_type atomicNumberMat;
477  headerstream >> atomicNumberMat;
478 
479  if( headerstream.eof() || std::string::npos == atomicNumberMat) {
480  atomicNumberMat = 0;
481  }
482 
483  G4int vectorType;
484  ifilestream >> vectorType;
485 
486  G4PhysicsVector* physicsVector = CreatePhysicsVector(vectorType);
487 
488  if(physicsVector == 0) {
489 #ifdef G4VERBOSE
490  G4cout << "G4ExtDEDXTable::RetrievePhysicsTable "
491  << " illegal physics Vector type " << vectorType
492  << " in " << fileName
493  << G4endl;
494 #endif
495  ifilestream.close();
496  return false;
497  }
498 
499  if( !physicsVector -> Retrieve(ifilestream, true) ) {
500 
501 #ifdef G4VERBOSE
502  G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() "
503  << " File content of " << fileName << " ill-formated."
504  << G4endl;
505 #endif
506  ifilestream.close();
507  return false;
508  }
509 
510  physicsVector -> SetSpline(true);
511 
512  // Retrieved vector is added to material store
513  if( !AddPhysicsVector(physicsVector, (G4int)atomicNumberIon,
514  materialName, (G4int)atomicNumberMat) ) {
515 
516  delete physicsVector;
517  ifilestream.close();
518  return false;
519  }
520  }
521 
522  ifilestream.close();
523 
524  return true;
525 }
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
G4bool AddPhysicsVector(G4PhysicsVector *physicsVector, G4int atomicNumberIon, const G4String &matIdenfier, G4int atomicNumberElem=0)
#define G4endl
Definition: G4ios.hh:61
G4bool G4ExtDEDXTable::StorePhysicsTable ( const G4String fileName)

Definition at line 338 of file G4ExtDEDXTable.cc.

References G4cout, G4endl, and python.hepunit::second.

340  {
341  G4bool success = true;
342 
343  std::ofstream ofilestream;
344 
345  ofilestream.open( fileName, std::ios::out );
346 
347  if( !ofilestream ) {
348 
349 #ifdef G4VERBOSE
350  G4cout << "G4ExtDEDXTable::StorePhysicsVector() "
351  << " Cannot open file "<< fileName
352  << G4endl;
353 #endif
354 
355  success = false;
356  }
357  else {
358 
359  size_t nmbMatTables = dedxMapMaterials.size();
360 
361  ofilestream << nmbMatTables << G4endl << G4endl;
362 
363  G4IonDEDXMapMat::iterator iterMat = dedxMapMaterials.begin();
364  G4IonDEDXMapMat::iterator iterMat_end = dedxMapMaterials.end();
365 
366  for(;iterMat != iterMat_end; iterMat++) {
367  G4IonDEDXKeyMat key = iterMat -> first;
368  G4PhysicsVector* physicsVector = iterMat -> second;
369 
370  G4int atomicNumberIon = key.first;
371  G4String matIdentifier = key.second;
372 
373  G4int atomicNumberElem = FindAtomicNumberElement(physicsVector);
374 
375  if(physicsVector != 0) {
376  ofilestream << atomicNumberIon << " " << matIdentifier;
377 
378  if(atomicNumberElem > 0) ofilestream << " " << atomicNumberElem;
379 
380  ofilestream << " # <Atomic number ion> <Material name> ";
381 
382  if(atomicNumberElem > 0) ofilestream << "<Atomic number element>";
383 
384  ofilestream << G4endl << physicsVector -> GetType() << G4endl;
385 
386  physicsVector -> Store(ofilestream, true);
387 
388  ofilestream << G4endl;
389  }
390  else {
391 
392 #ifdef G4VERBOSE
393  G4cout << "G4ExtDEDXTable::StorePhysicsVector() "
394  << " Cannot store physics vector."
395  << G4endl;
396 #endif
397 
398  }
399  }
400  }
401 
402  ofilestream.close();
403 
404  return success;
405 }
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
#define G4endl
Definition: G4ios.hh:61

The documentation for this class was generated from the following files: