Geant4-11
G4MaterialPropertiesTable.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27//
28//
30// G4MaterialPropertiesTable Implementation
32//
33// File: G4MaterialPropertiesTable.cc
34// Version: 1.0
35// Created: 1996-02-08
36// Author: Juliet Armstrong
37// Updated: 2005-05-12 add SetGROUPVEL(), courtesy of
38// Horton-Smith (bug report #741), by P. Gumplinger
39// 2002-11-05 add named material constants by P. Gumplinger
40// 1999-11-05 Migration from G4RWTPtrHashDictionary to STL
41// by John Allison
42// 1997-03-26 by Peter Gumplinger
43// > cosmetics (only)
44//
46
48
49#include "globals.hh"
50#include "G4Log.hh"
53
54#include <algorithm>
55#include <cassert>
56
57#ifdef G4MULTITHREADED
58# include "G4AutoLock.hh"
59namespace
60{
61 G4Mutex materialPropertyTableMutex = G4MUTEX_INITIALIZER;
62}
63#endif
64
66{
67 // elements of these 2 vectors must be in same order as
68 // the corresponding enums in G4MaterialPropertiesIndex.hh
69 fMatPropNames.push_back(G4String("RINDEX"));
70 fMatPropNames.push_back(G4String("REFLECTIVITY"));
71 fMatPropNames.push_back(G4String("REALRINDEX"));
72 fMatPropNames.push_back(G4String("IMAGINARYRINDEX"));
73 fMatPropNames.push_back(G4String("EFFICIENCY"));
74 fMatPropNames.push_back(G4String("TRANSMITTANCE"));
75 fMatPropNames.push_back(G4String("SPECULARLOBECONSTANT"));
76 fMatPropNames.push_back(G4String("SPECULARSPIKECONSTANT"));
77 fMatPropNames.push_back(G4String("BACKSCATTERCONSTANT"));
78 fMatPropNames.push_back(G4String("GROUPVEL"));
79 fMatPropNames.push_back(G4String("MIEHG"));
80 fMatPropNames.push_back(G4String("RAYLEIGH"));
81 fMatPropNames.push_back(G4String("WLSCOMPONENT"));
82 fMatPropNames.push_back(G4String("WLSABSLENGTH"));
83 fMatPropNames.push_back(G4String("WLSCOMPONENT2"));
84 fMatPropNames.push_back(G4String("WLSABSLENGTH2"));
85 fMatPropNames.push_back(G4String("ABSLENGTH"));
86 fMatPropNames.push_back(G4String("PROTONSCINTILLATIONYIELD"));
87 fMatPropNames.push_back(G4String("DEUTERONSCINTILLATIONYIELD"));
88 fMatPropNames.push_back(G4String("TRITONSCINTILLATIONYIELD"));
89 fMatPropNames.push_back(G4String("ALPHASCINTILLATIONYIELD"));
90 fMatPropNames.push_back(G4String("IONSCINTILLATIONYIELD"));
91 fMatPropNames.push_back(G4String("ELECTRONSCINTILLATIONYIELD"));
92 fMatPropNames.push_back(G4String("SCINTILLATIONCOMPONENT1"));
93 fMatPropNames.push_back(G4String("SCINTILLATIONCOMPONENT2"));
94 fMatPropNames.push_back(G4String("SCINTILLATIONCOMPONENT3"));
95
96 assert(fMatPropNames.size() == kNumberOfPropertyIndex);
97
98 fMP.assign(kNumberOfPropertyIndex, nullptr);
99
100 fMatConstPropNames.push_back(G4String("SURFACEROUGHNESS"));
101 fMatConstPropNames.push_back(G4String("ISOTHERMAL_COMPRESSIBILITY"));
102 fMatConstPropNames.push_back(G4String("RS_SCALE_FACTOR"));
103 fMatConstPropNames.push_back(G4String("WLSMEANNUMBERPHOTONS"));
104 fMatConstPropNames.push_back(G4String("WLSTIMECONSTANT"));
105 fMatConstPropNames.push_back(G4String("WLSMEANNUMBERPHOTONS2"));
106 fMatConstPropNames.push_back(G4String("WLSTIMECONSTANT2"));
107 fMatConstPropNames.push_back(G4String("MIEHG_FORWARD"));
108 fMatConstPropNames.push_back(G4String("MIEHG_BACKWARD"));
109 fMatConstPropNames.push_back(G4String("MIEHG_FORWARD_RATIO"));
110 fMatConstPropNames.push_back(G4String("SCINTILLATIONYIELD"));
111 fMatConstPropNames.push_back(G4String("RESOLUTIONSCALE"));
112 fMatConstPropNames.push_back(G4String("FERMIPOT"));
113 fMatConstPropNames.push_back(G4String("DIFFUSION"));
114 fMatConstPropNames.push_back(G4String("SPINFLIP"));
115 fMatConstPropNames.push_back(G4String("LOSS"));
116 fMatConstPropNames.push_back(G4String("LOSSCS"));
117 fMatConstPropNames.push_back(G4String("ABSCS"));
118 fMatConstPropNames.push_back(G4String("SCATCS"));
119 fMatConstPropNames.push_back(G4String("MR_NBTHETA"));
120 fMatConstPropNames.push_back(G4String("MR_NBE"));
121 fMatConstPropNames.push_back(G4String("MR_RRMS"));
122 fMatConstPropNames.push_back(G4String("MR_CORRLEN"));
123 fMatConstPropNames.push_back(G4String("MR_THETAMIN"));
124 fMatConstPropNames.push_back(G4String("MR_THETAMAX"));
125 fMatConstPropNames.push_back(G4String("MR_EMIN"));
126 fMatConstPropNames.push_back(G4String("MR_EMAX"));
127 fMatConstPropNames.push_back(G4String("MR_ANGNOTHETA"));
128 fMatConstPropNames.push_back(G4String("MR_ANGNOPHI"));
129 fMatConstPropNames.push_back(G4String("MR_ANGCUT"));
130 fMatConstPropNames.push_back(G4String("SCINTILLATIONTIMECONSTANT1"));
131 fMatConstPropNames.push_back(G4String("SCINTILLATIONTIMECONSTANT2"));
132 fMatConstPropNames.push_back(G4String("SCINTILLATIONTIMECONSTANT3"));
133 fMatConstPropNames.push_back(G4String("SCINTILLATIONRISETIME1"));
134 fMatConstPropNames.push_back(G4String("SCINTILLATIONRISETIME2"));
135 fMatConstPropNames.push_back(G4String("SCINTILLATIONRISETIME3"));
136 fMatConstPropNames.push_back(G4String("SCINTILLATIONYIELD1"));
137 fMatConstPropNames.push_back(G4String("SCINTILLATIONYIELD2"));
138 fMatConstPropNames.push_back(G4String("SCINTILLATIONYIELD3"));
139 fMatConstPropNames.push_back(G4String("PROTONSCINTILLATIONYIELD1"));
140 fMatConstPropNames.push_back(G4String("PROTONSCINTILLATIONYIELD2"));
141 fMatConstPropNames.push_back(G4String("PROTONSCINTILLATIONYIELD3"));
142 fMatConstPropNames.push_back(G4String("DEUTERONSCINTILLATIONYIELD1"));
143 fMatConstPropNames.push_back(G4String("DEUTERONSCINTILLATIONYIELD2"));
144 fMatConstPropNames.push_back(G4String("DEUTERONSCINTILLATIONYIELD3"));
145 fMatConstPropNames.push_back(G4String("TRITONSCINTILLATIONYIELD1"));
146 fMatConstPropNames.push_back(G4String("TRITONSCINTILLATIONYIELD2"));
147 fMatConstPropNames.push_back(G4String("TRITONSCINTILLATIONYIELD3"));
148 fMatConstPropNames.push_back(G4String("ALPHASCINTILLATIONYIELD1"));
149 fMatConstPropNames.push_back(G4String("ALPHASCINTILLATIONYIELD2"));
150 fMatConstPropNames.push_back(G4String("ALPHASCINTILLATIONYIELD3"));
151 fMatConstPropNames.push_back(G4String("IONSCINTILLATIONYIELD1"));
152 fMatConstPropNames.push_back(G4String("IONSCINTILLATIONYIELD2"));
153 fMatConstPropNames.push_back(G4String("IONSCINTILLATIONYIELD3"));
154 fMatConstPropNames.push_back(G4String("ELECTRONSCINTILLATIONYIELD1"));
155 fMatConstPropNames.push_back(G4String("ELECTRONSCINTILLATIONYIELD2"));
156 fMatConstPropNames.push_back(G4String("ELECTRONSCINTILLATIONYIELD3"));
157
159
160 fMCP.assign(kNumberOfConstPropertyIndex, { 0., false });
161}
162
164{
165 for(auto prop : fMP)
166 {
167 delete(prop);
168 }
169}
170
172 const G4String& key) const
173{
174 // Returns the constant material property index corresponding to a key
175
176 size_t index = std::distance(
177 fMatConstPropNames.begin(),
178 std::find(fMatConstPropNames.begin(), fMatConstPropNames.end(), key));
179 if(index < fMatConstPropNames.size())
180 return index;
181
183 ed << "Constant Material Property Index for key " << key << " not found.";
184 G4Exception("G4MaterialPropertiesTable::GetConstPropertyIndex()", "mat200",
185 FatalException, ed);
186 return 0;
187}
188
190{
191 // Returns the material property index corresponding to a key
192 size_t index =
193 std::distance(fMatPropNames.begin(),
194 std::find(fMatPropNames.begin(), fMatPropNames.end(), key));
195 if(index < fMatPropNames.size())
196 return index;
198 ed << "Material Property Index for key " << key << " not found.";
199 G4Exception("G4MaterialPropertiesTable::GetPropertyIndex()", "mat201",
200 FatalException, ed);
201 return 0;
202}
203
205{
206 // Returns the constant material property corresponding to an index
207 // fatal exception if property not found
208
209 if(index < (G4int) fMCP.size() && fMCP[index].second == true)
210 return fMCP[index].first;
212 ed << "Constant Material Property Index " << index << " not found.";
213 G4Exception("G4MaterialPropertiesTable::GetConstProperty()", "mat202",
214 FatalException, ed);
215 return 0.;
216}
217
219{
220 // Returns the constant material property corresponding to a key
221 // fatal exception if property not found
222
224}
225
227{
229}
230
232{
233 // Returns true if a const property corresponding to 'index' exists
234
235 if(index >= 0 && index < (G4int) fMCP.size() && fMCP[index].second == true)
236 {
237 return true;
238 }
239 return false;
240}
241
243{
244 // Returns true if a const property 'key' exists
245 size_t index = std::distance(
246 fMatConstPropNames.begin(),
247 std::find(fMatConstPropNames.begin(), fMatConstPropNames.end(), key));
248 if(index < fMatConstPropNames.size()) // index is type size_t so >= 0
249 return ConstPropertyExists(index);
250 return false;
251}
252
254{
255 size_t index = std::distance(
256 fMatConstPropNames.begin(),
257 std::find(fMatConstPropNames.begin(), fMatConstPropNames.end(), key));
258 if(index < fMatConstPropNames.size()) // index is type size_t so >= 0
259 return ConstPropertyExists(index);
260 return false;
261}
262
264 const G4String& key) const
265{
266 // Returns a Material Property Vector corresponding to a key
267 if(std::find(fMatPropNames.begin(), fMatPropNames.end(), key) !=
268 fMatPropNames.end())
269 {
270 const G4int index = GetPropertyIndex(G4String(key));
271 return GetProperty(index);
272 }
273 return nullptr;
274}
275
277 const char* key) const
278{
279 if(std::find(fMatPropNames.begin(), fMatPropNames.end(), key) !=
280 fMatPropNames.end())
281 {
282 const G4int index = GetPropertyIndex(G4String(key));
283 return GetProperty(index);
284 }
285 return nullptr;
286}
287
289 const G4int index) const
290{
291 // Returns a Material Property Vector corresponding to an index
292 // returns nullptr if the property has not been defined by user
293 if(index >= 0 && index < (G4int) fMP.size())
294 return fMP[index];
295 return nullptr;
296}
297
299 const G4String& key, const std::vector<G4double>& photonEnergies,
300 const std::vector<G4double>& propertyValues, G4bool createNewKey,
301 G4bool spline)
302{
303 if(photonEnergies.size() != propertyValues.size())
304 {
306 ed << "AddProperty error!";
307 G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat204",
308 FatalException, ed);
309 }
310
311 // if the key doesn't exist, add it if requested
312 if(std::find(fMatPropNames.begin(), fMatPropNames.end(), key) ==
313 fMatPropNames.end())
314 {
315 if(createNewKey)
316 {
317 fMatPropNames.push_back(key);
318 fMP.push_back(nullptr);
319 }
320 else
321 {
323 ed << "Attempting to create a new material property key " << key
324 << " without setting\n"
325 << "createNewKey parameter of AddProperty to true.";
326 G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat205",
327 FatalException, ed);
328 }
329 }
330
332 new G4MaterialPropertyVector(photonEnergies, propertyValues, spline);
333 mpv->SetVerboseLevel(1);
334 if(spline)
335 {
337 }
338 G4int index = GetPropertyIndex(key);
339 fMP[index] = mpv;
340
341 // if key is RINDEX, we calculate GROUPVEL -
342 // contribution from Tao Lin (IHEP, the JUNO experiment)
343 if(key == "RINDEX")
344 {
346 }
347
348 return mpv;
349}
350
352 const char* key, G4double* photonEnergies, G4double* propertyValues,
353 G4int numEntries, G4bool createNewKey, G4bool spline)
354{
355
356 // Provides a way of adding a property to the Material Properties
357 // Table given a pair of arrays and a key
358 G4String k(key);
359
360 std::vector<G4double> energies(photonEnergies, photonEnergies + numEntries);
361 std::vector<G4double> values(propertyValues, propertyValues + numEntries);
362 return AddProperty(k, energies, values, createNewKey, spline);
363}
364
367 G4bool createNewKey)
368{
369 // Provides a way of adding a property to the Material Properties
370 // Table given an G4MaterialPropertyVector Reference and a key
371 // if the key doesn't exist, add it
372 if(std::find(fMatPropNames.begin(), fMatPropNames.end(), key) ==
373 fMatPropNames.end())
374 {
375 if(createNewKey)
376 {
377 fMatPropNames.push_back(key);
378 fMP.push_back(nullptr);
379 }
380 else
381 {
383 ed << "Attempting to create a new material property key " << key
384 << " without setting\n"
385 << "createNewKey parameter of AddProperty to true.";
386 G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat206",
387 FatalException, ed);
388 }
389 }
390 G4int index = GetPropertyIndex(key);
391 fMP[index] = mpv;
392
393 // if key is RINDEX, we calculate GROUPVEL -
394 // contribution from Tao Lin (IHEP, the JUNO experiment)
395 if(key == "RINDEX")
396 {
398 }
399}
400
403 G4bool createNewKey)
404{
405 AddProperty(G4String(key), mpv, createNewKey);
406}
407
409 const G4String& mat)
410{
411 // load a material property vector defined in Geant4 source
414 AddProperty(key, v);
415}
416
418 G4double propertyValue,
419 G4bool createNewKey)
420{
421 // Provides a way of adding a constant property to the Material Properties
422 // Table given a key
423 if(std::find(fMatConstPropNames.begin(), fMatConstPropNames.end(), key) ==
424 fMatConstPropNames.end())
425 {
426 if(createNewKey)
427 {
428 fMatConstPropNames.push_back(key);
429 fMCP.push_back(std::pair<G4double, G4bool>{ 0., true });
430 }
431 else
432 {
434 ed << "Attempting to create a new material constant property key " << key
435 << " without setting"
436 << " createNewKey parameter of AddProperty to true.";
437 G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat207",
438 FatalException, ed);
439 }
440 }
441 G4int index = GetConstPropertyIndex(key);
442
443 fMCP[index] = std::pair<G4double, G4bool>{ propertyValue, true };
444}
445
447 G4double propertyValue,
448 G4bool createNewKey)
449{
450 // Provides a way of adding a constant property to the Material Properties
451 // Table given a key
452 AddConstProperty(G4String(key), propertyValue, createNewKey);
453}
454
456{
457 G4int index = GetConstPropertyIndex(key);
458 if(index < (G4int) fMCP.size())
459 fMCP[index] = std::pair<G4double, G4bool>{ 0., false };
460}
461
463{
465}
466
468{
469 G4int index = GetPropertyIndex(key);
470 delete fMP[index];
471 fMP[index] = nullptr;
472}
473
475{
477}
478
480 G4double aPhotonEnergy,
481 G4double aPropertyValue)
482{
483 // Allows to add an entry pair directly to the Material Property Vector
484 // given a key
485 if(std::find(fMatPropNames.begin(), fMatPropNames.end(), key) ==
486 fMatPropNames.end())
487 {
488 G4Exception("G4MaterialPropertiesTable::AddEntry()", "mat214",
489 FatalException, "Material Property Vector not found.");
490 }
491 G4int index = GetPropertyIndex(key);
492
493 G4MaterialPropertyVector* targetVector = fMP[index];
494 if(targetVector != nullptr)
495 {
496 targetVector->InsertValues(aPhotonEnergy, aPropertyValue);
497 }
498 else
499 {
500 G4Exception("G4MaterialPropertiesTable::AddEntry()", "mat208",
501 FatalException, "Material Property Vector not found.");
502 }
503 if(key == "RINDEX")
504 {
506 }
507}
508
510 G4double aPhotonEnergy,
511 G4double aPropertyValue)
512{
513 AddEntry(G4String(key), aPhotonEnergy, aPropertyValue);
514}
515
517{
518 // material properties
519 G4int j = 0;
520 for(const auto& prop : fMP)
521 {
522 if(prop != nullptr)
523 {
524 G4cout << j << ": " << fMatPropNames[j] << G4endl;
525 prop->DumpValues();
526 }
527 ++j;
528 }
529 // material constant properties
530 j = 0;
531 for(const auto& cprop : fMCP)
532 {
533 if(cprop.second == true)
534 {
535 G4cout << j << ": " << fMatConstPropNames[j] << " " << cprop.first
536 << G4endl;
537 }
538 ++j;
539 }
540}
541
543{
544#ifdef G4MULTITHREADED
545 G4AutoLock mptm(&materialPropertyTableMutex);
546#endif
547
548 // check if "GROUPVEL" already exists. If so, remove it.
549 if(fMP[kGROUPVEL] != nullptr)
550 {
551 this->RemoveProperty("GROUPVEL");
552 }
553
554 // fetch RINDEX data, give up if unavailable
556 if(rindex == nullptr)
557 {
558 return nullptr;
559 }
560
561 // RINDEX exists but has no entries, give up
562 if(rindex->GetVectorLength() == 0)
563 {
564 return nullptr;
565 }
566
567 // add GROUPVEL vector
569 groupvel->SetVerboseLevel(1);
570
571 // fill GROUPVEL vector using RINDEX values
572 // rindex built-in "iterator" was advanced to first entry above
573 G4double E0 = rindex->Energy(0);
574 G4double n0 = (*rindex)[0];
575
576 if(E0 <= 0.)
577 {
578 G4Exception("G4MaterialPropertiesTable::CalculateGROUPVEL()", "mat211",
579 FatalException, "Optical Photon Energy <= 0");
580 }
581
582 if(rindex->GetVectorLength() >= 2)
583 {
584 // good, we have at least two entries in RINDEX
585 // get next energy/value pair
586
587 G4double E1 = rindex->Energy(1);
588 G4double n1 = (*rindex)[1];
589
590 if(E1 <= 0.)
591 {
592 G4Exception("G4MaterialPropertiesTable::CalculateGROUPVEL()", "mat212",
593 FatalException, "Optical Photon Energy <= 0");
594 }
595
596 G4double vg;
597
598 // add entry at first photon energy
599 vg = c_light / (n0 + (n1 - n0) / G4Log(E1 / E0));
600
601 // allow only for 'normal dispersion' -> dn/d(logE) > 0
602 if((vg < 0) || (vg > c_light / n0))
603 {
604 vg = c_light / n0;
605 }
606
607 groupvel->InsertValues(E0, vg);
608
609 // add entries at midpoints between remaining photon energies
610 for(size_t i = 2; i < rindex->GetVectorLength(); ++i)
611 {
612 vg = c_light / (0.5 * (n0 + n1) + (n1 - n0) / G4Log(E1 / E0));
613
614 // allow only for 'normal dispersion' -> dn/d(logE) > 0
615 if((vg < 0) || (vg > c_light / (0.5 * (n0 + n1))))
616 {
617 vg = c_light / (0.5 * (n0 + n1));
618 }
619 groupvel->InsertValues(0.5 * (E0 + E1), vg);
620
621 // get next energy/value pair, or exit loop
622 E0 = E1;
623 n0 = n1;
624 E1 = rindex->Energy(i);
625 n1 = (*rindex)[i];
626
627 if(E1 <= 0.)
628 {
629 G4Exception("G4MaterialPropertiesTable::CalculateGROUPVEL()", "mat213",
630 FatalException, "Optical Photon Energy <= 0");
631 }
632 }
633
634 // add entry at last photon energy
635 vg = c_light / (n1 + (n1 - n0) / G4Log(E1 / E0));
636
637 // allow only for 'normal dispersion' -> dn/d(logE) > 0
638 if((vg < 0) || (vg > c_light / n1))
639 {
640 vg = c_light / n1;
641 }
642 groupvel->InsertValues(E1, vg);
643 }
644 else // only one entry in RINDEX -- weird!
645 {
646 groupvel->InsertValues(E0, c_light / n0);
647 }
648
649 this->AddProperty("GROUPVEL", groupvel);
650
651 return groupvel;
652}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40
G4double G4Log(G4double x)
Definition: G4Log.hh:226
@ kNumberOfPropertyIndex
@ kNumberOfConstPropertyIndex
G4PhysicsFreeVector G4MaterialPropertyVector
#define G4MUTEX_INITIALIZER
Definition: G4Threading.hh:85
std::mutex G4Mutex
Definition: G4Threading.hh:81
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
G4MaterialPropertyVector * CalculateGROUPVEL()
G4int GetConstPropertyIndex(const G4String &key) const
void AddConstProperty(const G4String &key, G4double propertyValue, G4bool createNewKey=false)
G4bool ConstPropertyExists(const G4String &key) const
void RemoveProperty(const G4String &key)
G4int GetPropertyIndex(const G4String &key) const
std::vector< std::pair< G4double, G4bool > > fMCP
G4double GetConstProperty(const G4String &key) const
void AddEntry(const G4String &key, G4double aPhotonEnergy, G4double aPropertyValue)
G4MaterialPropertyVector * AddProperty(const G4String &key, const std::vector< G4double > &photonEnergies, const std::vector< G4double > &propertyValues, G4bool createNewKey=false, G4bool spline=false)
std::vector< G4MaterialPropertyVector * > fMP
std::vector< G4String > fMatConstPropNames
G4MaterialPropertyVector * GetProperty(const char *key) const
std::vector< G4String > fMatPropNames
void RemoveConstProperty(const G4String &key)
void InsertValues(const G4double energy, const G4double value)
void SetVerboseLevel(G4int value)
G4double Energy(const std::size_t index) const
std::size_t GetVectorLength() const
void FillSecondDerivatives(const G4SplineType=G4SplineType::Base, const G4double dir1=0.0, const G4double dir2=0.0)
G4MaterialPropertyVector * GetProperty(const G4String &key, const G4String &mat)
float c_light
Definition: hepunit.py:256