Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ExtDEDXTable Class Reference

#include <G4ExtDEDXTable.hh>

+ Inheritance diagram for G4ExtDEDXTable:

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 ()
 
virtual G4bool BuildPhysicsVector (G4int, G4int)=0
 
virtual G4bool BuildPhysicsVector (G4int, const G4String &)=0
 
virtual G4bool IsApplicable (G4int, G4int)=0
 
virtual G4bool IsApplicable (G4int, const G4String &)=0
 
virtual G4PhysicsVectorGetPhysicsVector (G4int, G4int)=0
 
virtual G4PhysicsVectorGetPhysicsVector (G4int, const G4String &)=0
 

Detailed Description

Definition at line 64 of file G4ExtDEDXTable.hh.

Constructor & Destructor Documentation

◆ G4ExtDEDXTable()

G4ExtDEDXTable::G4ExtDEDXTable ( )

Definition at line 73 of file G4ExtDEDXTable.cc.

73 {
74
75}

◆ ~G4ExtDEDXTable()

G4ExtDEDXTable::~G4ExtDEDXTable ( )
virtual

Definition at line 79 of file G4ExtDEDXTable.cc.

79 {
80
81 ClearTable();
82}

Member Function Documentation

◆ AddPhysicsVector()

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

Definition at line 216 of file G4ExtDEDXTable.cc.

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}
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout

Referenced by RetrievePhysicsTable().

◆ BuildPhysicsVector() [1/2]

G4bool G4ExtDEDXTable::BuildPhysicsVector ( G4int  ionZ,
const G4String matName 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 94 of file G4ExtDEDXTable.cc.

95 {
96
97 return IsApplicable( ionZ, matName );
98}
G4bool IsApplicable(G4int atomicNumberIon, G4int atomicNumberElem)

◆ BuildPhysicsVector() [2/2]

G4bool G4ExtDEDXTable::BuildPhysicsVector ( G4int  ionZ,
G4int  matZ 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 86 of file G4ExtDEDXTable.cc.

86 {
87
88 return IsApplicable( ionZ, matZ );
89}

◆ ClearTable()

void G4ExtDEDXTable::ClearTable ( )

Definition at line 600 of file G4ExtDEDXTable.cc.

600 {
601
602 G4IonDEDXMapMat::iterator iterMat = dedxMapMaterials.begin();
603 G4IonDEDXMapMat::iterator iterMat_end = dedxMapMaterials.end();
604
605 for(;iterMat != iterMat_end; iterMat++) {
606
607 G4PhysicsVector* vec = iterMat -> second;
608
609 if(vec != 0) delete vec;
610 }
611
612 dedxMapElements.clear();
613 dedxMapMaterials.clear();
614}

Referenced by ~G4ExtDEDXTable().

◆ DumpMap()

void G4ExtDEDXTable::DumpMap ( )

Definition at line 618 of file G4ExtDEDXTable.cc.

618 {
619
620 G4IonDEDXMapMat::iterator iterMat = dedxMapMaterials.begin();
621 G4IonDEDXMapMat::iterator iterMat_end = dedxMapMaterials.end();
622
623 G4cout << std::setw(15) << std::right
624 << "Atomic nmb ion"
625 << std::setw(25) << std::right
626 << "Material name"
627 << std::setw(25) << std::right
628 << "Atomic nmb material"
629 << G4endl;
630
631 for(;iterMat != iterMat_end; iterMat++) {
632 G4IonDEDXKeyMat key = iterMat -> first;
633 G4PhysicsVector* physicsVector = iterMat -> second;
634
635 G4int atomicNumberIon = key.first;
636 G4String matIdentifier = key.second;
637
638 G4int atomicNumberElem = FindAtomicNumberElement(physicsVector);
639
640 if(physicsVector != 0) {
641 G4cout << std::setw(15) << std::right
642 << atomicNumberIon
643 << std::setw(25) << std::right
644 << matIdentifier
645 << std::setw(25) << std::right;
646
647 if(atomicNumberElem > 0) G4cout << atomicNumberElem;
648 else G4cout << "N/A";
649
650 G4cout << G4endl;
651 }
652 }
653
654}
int G4int
Definition: G4Types.hh:66

◆ GetDEDX() [1/2]

G4double G4ExtDEDXTable::GetDEDX ( G4double  kinEnergyPerNucleon,
G4int  atomicNumberIon,
const G4String matIdenfier 
)

Definition at line 193 of file G4ExtDEDXTable.cc.

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}
double G4double
Definition: G4Types.hh:64
bool G4bool
Definition: G4Types.hh:67

◆ GetDEDX() [2/2]

G4double G4ExtDEDXTable::GetDEDX ( G4double  kinEnergyPerNucleon,
G4int  atomicNumberIon,
G4int  atomicNumberElem 
)

Definition at line 170 of file G4ExtDEDXTable.cc.

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}

◆ GetPhysicsVector() [1/2]

G4PhysicsVector * G4ExtDEDXTable::GetPhysicsVector ( G4int  atomicNumberIon,
const G4String matIdenfier 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 152 of file G4ExtDEDXTable.cc.

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}

◆ GetPhysicsVector() [2/2]

G4PhysicsVector * G4ExtDEDXTable::GetPhysicsVector ( G4int  atomicNumberIon,
G4int  atomicNumberElem 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 134 of file G4ExtDEDXTable.cc.

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}

◆ IsApplicable() [1/2]

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}

◆ IsApplicable() [2/2]

G4bool G4ExtDEDXTable::IsApplicable ( G4int  atomicNumberIon,
G4int  atomicNumberElem 
)
virtual

Implements G4VIonDEDXTable.

Definition at line 102 of file G4ExtDEDXTable.cc.

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}

Referenced by BuildPhysicsVector().

◆ RemovePhysicsVector()

G4bool G4ExtDEDXTable::RemovePhysicsVector ( G4int  atomicNumberIon,
const G4String matIdentifier 
)

Definition at line 293 of file G4ExtDEDXTable.cc.

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}

◆ RetrievePhysicsTable()

G4bool G4ExtDEDXTable::RetrievePhysicsTable ( const G4String fileName)

Definition at line 409 of file G4ExtDEDXTable.cc.

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;
424 ifilestream >> nmbVectors;
425 if( ifilestream.fail() ) {
426 G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() "
427 << " File content of " << fileName << " ill-formated."
428 << G4endl;
429 ifilestream.close();
430 return false;
431 }
432
433 // if(nmbVectors == std::string::npos) {
434 /*
435 if(nmbVectors <= 0) {
436#ifdef G4VERBOSE
437 G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() "
438 << " The file is corrupted " << G4endl;
439#endif
440 return false;
441 }
442 */
443 //size_t nm = size_t(nmbVectors);
444 for(G4int i = 0; i<nmbVectors; ++i) {
445
446 G4String line = "";
447 while( line.empty() ) {
448
449 getline( ifilestream, line );
450 if( ifilestream.fail() ) {
451#ifdef G4VERBOSE
452 G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() "
453 << " File content of " << fileName << " ill-formated."
454 << G4endl;
455#endif
456 ifilestream.close();
457 return false;
458 }
459
460 std::string::size_type pos = line.find_first_of("#");
461 if(pos != std::string::npos && pos > 0) {
462 line = line.substr(0, pos);
463 }
464 }
465
466 std::istringstream headerstream( line );
467
468 std::string::size_type atomicNumberIon;
469 headerstream >> atomicNumberIon;
470
471 G4String materialName;
472 headerstream >> materialName;
473
474 if( headerstream.fail() || std::string::npos == atomicNumberIon) {
475
476#ifdef G4VERBOSE
477 G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() "
478 << " File content of " << fileName << " ill-formated "
479 << " (vector header)."
480 << G4endl;
481#endif
482 ifilestream.close();
483 return false;
484 }
485
486 std::string::size_type atomicNumberMat;
487 headerstream >> atomicNumberMat;
488
489 if( headerstream.eof() || std::string::npos == atomicNumberMat) {
490 atomicNumberMat = 0;
491 }
492
493 G4int vectorType;
494 ifilestream >> vectorType;
495
496 G4PhysicsVector* physicsVector = CreatePhysicsVector(vectorType);
497
498 if(physicsVector == 0) {
499#ifdef G4VERBOSE
500 G4cout << "G4ExtDEDXTable::RetrievePhysicsTable "
501 << " illegal physics Vector type " << vectorType
502 << " in " << fileName
503 << G4endl;
504#endif
505 ifilestream.close();
506 return false;
507 }
508
509 if( !physicsVector -> Retrieve(ifilestream, true) ) {
510
511#ifdef G4VERBOSE
512 G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() "
513 << " File content of " << fileName << " ill-formated."
514 << G4endl;
515#endif
516 ifilestream.close();
517 return false;
518 }
519
520 physicsVector -> SetSpline(true);
521
522 // Retrieved vector is added to material store
523 if( !AddPhysicsVector(physicsVector, (G4int)atomicNumberIon,
524 materialName, (G4int)atomicNumberMat) ) {
525
526 delete physicsVector;
527 ifilestream.close();
528 return false;
529 }
530 }
531
532 ifilestream.close();
533
534 return true;
535}
G4bool AddPhysicsVector(G4PhysicsVector *physicsVector, G4int atomicNumberIon, const G4String &matIdenfier, G4int atomicNumberElem=0)

◆ StorePhysicsTable()

G4bool G4ExtDEDXTable::StorePhysicsTable ( const G4String fileName)

Definition at line 338 of file G4ExtDEDXTable.cc.

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}

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