49 fState(kMatStateUndefined),
77 fState(kMatStateUndefined),
112 fState(kMatStateUndefined),
151 fTemperature(temperature),
187 fState(kMatStateUndefined),
221 fDensity(gm.fDensity),
224 fTemperature(gm.fTemperature),
225 fPressure(gm.fPressure),
228 fCerenkov(gm.fCerenkov),
229 fElement(gm.fElement),
230 fUserExtension(gm.fUserExtension->Grab()),
231 fFWExtension(gm.fFWExtension->Grab())
301 return (prop) ? prop->
GetTitle() :
nullptr;
309 if ( !prop )
return nullptr;
318 if ( !prop )
return nullptr;
327 return (prop) ? prop->
GetTitle() :
nullptr;
336 if (err) *err =
kTRUE;
348 if (err) *err =
kTRUE;
359 Error(
"AddProperty",
"Property %s already added to material %s",
372 Error(
"AddConstProperty",
"Constant property %s already added to material %s",
424 return (
char*)
name.Data();
436 if (
fA<0.9 ||
fZ<0.9) {
437 if (radlen<-1e5 || intlen<-1
e-5) {
438 Error(
"SetRadLen",
"Material %s: user values taken for vacuum: radlen=%g or intlen=%g - too small",
GetName(),
fRadLen,
fIntLen);
442 if (radlen>=0)
fRadLen = 1.E30;
443 if (intlen>=0)
fIntLen = 1.E30;
470 Fatal(
"SetRadLen",
"Element not found for material %s",
GetName());
483 Fatal(
"SetRadLen",
"Element not found for material %s",
GetName());
505 Double_t fp = ( 0.0083*az4 + 0.20206 + 1./(1.+az2) ) * az2;
506 Double_t fm = ( 0.0020*az4 + 0.0369 ) * az4;
515 if (other==
this)
return kTRUE;
531 printf(
"Material %s %s A=%g Z=%g rho=%g radlen=%g intlen=%g index=%i\n",
GetName(),
GetTitle(),
542 out <<
"// Material: " <<
GetName() << std::endl;
543 out <<
" a = " <<
fA <<
";" << std::endl;
544 out <<
" z = " <<
fZ <<
";" << std::endl;
545 out <<
" density = " <<
fDensity <<
";" << std::endl;
546 out <<
" radl = " <<
fRadLen <<
";" << std::endl;
547 out <<
" absl = " <<
fIntLen <<
";" << std::endl;
549 out <<
" " <<
name <<
" = new TGeoMaterial(\"" <<
GetName() <<
"\", a,z,density,radl,absl);" << std::endl;
550 out <<
" " <<
name <<
"->SetIndex(" <<
GetIndex() <<
");" << std::endl;
604 if (!ncomp)
return this;
609 for (i=0; i<ncomp; i++) {
616 Int_t ncomp1 = ncomp;
617 for (i=0; i<ncomp; i++) {
618 if ((weight[i]/amed)<precision) {
631 for (i=0; i<ncomp; i++) {
633 if (weight[i]<precision)
continue;
668 Error(
"FillMaterialEvolution",
"Provide an empty array !");
678 Fatal(
"FillMaterialEvolution",
"Element not found for material %s",
GetName());
682 population->
Add(elem);
734 fNelements(gm.fNelements),
735 fZmixture(gm.fZmixture),
736 fAmixture(gm.fAmixture),
737 fWeights(gm.fWeights),
739 fVecNbOfAtomsPerVolume(gm.fVecNbOfAtomsPerVolume),
740 fElements(gm.fElements)
809 nilinv *=
amu/lambda0;
821 Fatal(
"AddElement",
"Cannot add element having Z=%d to mixture %s", (
Int_t)z,
GetName());
858 Warning(
"DefineElement",
"Mixture %s has element defined with fractional Z=%f",
GetName(), z);
891 for (i=0; i<nelem; i++) {
894 if (!elnew)
continue;
906 if (elfound)
continue;
908 wnew = weight * (mix->
GetWmixt())[i];
926 if (elemold == elem) exist =
kTRUE;
946 else if (elemold != elem)
continue;
947 if ((elem==elemold) ||
965 Fatal(
"AddElement",
"Cannot add element by natoms in mixture %s after defining elements by weight",
1013 Fatal(
"DefineElement",
"In mixture %s, element with Z=%i not found",
GetName(),z);
1030 if (elem)
return elem;
1078 printf(
"Mixture %s %s Aeff=%g Zeff=%g rho=%g radlen=%g intlen=%g index=%i\n",
GetName(),
GetTitle(),
1095 out <<
"// Mixture: " <<
GetName() << std::endl;
1096 out <<
" nel = " <<
fNelements <<
";" << std::endl;
1097 out <<
" density = " <<
fDensity <<
";" << std::endl;
1098 out <<
" " <<
name <<
" = new TGeoMixture(\"" <<
GetName() <<
"\", nel,density);" << std::endl;
1102 out <<
" " <<
name <<
"->DefineElement(" << i <<
",a,z,w);" << std::endl;
1104 out <<
" " <<
name <<
"->SetIndex(" <<
GetIndex() <<
");" << std::endl;
1118 if (!ncomp)
return this;
1124 for (i=0; i<ncomp; i++) {
1137 Int_t ncomp1 = ncomp;
1138 for (i=0; i<ncomp; i++) {
1139 if ((weight[i]/amed)<precision) {
1152 for (i=0; i<ncomp; i++) {
1154 if (weight[i]<precision)
continue;
1189 Error(
"FillMaterialEvolution",
"Provide an empty array !");
1201 population->
Add(elem);
1218 const Double_t al183= 5.20948 , al1440 = 7.27239;
1256 fRadLen = (radinv <= 0.0 ? DBL_MAX :
cm/radinv);
1280 NILinv *=
amu/lambda0;
1281 fIntLen = (NILinv <= 0.0 ? DBL_MAX :
cm/NILinv);
R__EXTERN TGeoManager * gGeoManager
static const Double_t STP_temperature
static const Double_t STP_pressure
Binding & operator=(OUT(*fun)(void))
Fill Area Attributes class.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
This class is used in the process of reading and writing the GDML "matrix" tag.
Double_t Concentration(Double_t time) const
Find concentration of the element at a given time.
Class representing a radionuclide.
void FillPopulation(TObjArray *population, Double_t precision=0.001, Double_t factor=1.)
Fills the input array with the set of RN elements resulting from the decay of this one.
TGeoBatemanSol * Ratio() const
void ResetRatio()
Clears the existing ratio.
TGeoElement * GetElement(Int_t z)
TObjArray * GetElementsRN() const
Int_t GetNelements() const
Base class for chemical elements.
virtual Double_t GetSpecificActivity() const
void SetDefined(Bool_t flag=kTRUE)
virtual Bool_t IsRadioNuclide() const
Double_t Neff() const
Returns effective number of nucleons.
void SetUsed(Bool_t flag=kTRUE)
ABC for user objects attached to TGeoVolume or TGeoNode.
virtual TGeoExtension * Grab()=0
virtual void Release() const =0
The manager class for any TGeo geometry.
TGeoElementTable * GetElementTable()
Returns material table. Creates it if not existing.
Int_t AddMaterial(const TGeoMaterial *material)
Add a material to the list. Returns index of the material in list.
Double_t GetProperty(const char *name, Bool_t *error=nullptr) const
Get a user-defined property.
TGDMLMatrix * GetGDMLMatrix(const char *name) const
Get GDML matrix with a given name;.
TList * GetListOfMaterials() const
Base class describing materials.
virtual ~TGeoMaterial()
Destructor.
Double_t GetConstProperty(const char *property, Bool_t *error=nullptr) const
void SetUserExtension(TGeoExtension *ext)
Connect user-defined extension to the material.
char * GetPointerName() const
Provide a pointer name containing uid.
virtual TObject * GetCerenkovProperties() const
static Double_t ScreenFactor(Double_t z)
static function Compute screening factor for pair production and Bremsstrahlung REFERENCE : EGS MANUA...
const char * GetConstPropertyRef(const char *property) const
virtual Bool_t IsMixture() const
void SetFWExtension(TGeoExtension *ext)
Connect framework defined extension to the material.
bool AddConstProperty(const char *property, const char *ref)
virtual void GetElementProp(Double_t &a, Double_t &z, Double_t &w, Int_t i=0)
Single interface to get element properties.
virtual void Print(const Option_t *option="") const
print characteristics of this material
virtual TGeoMaterial * DecayMaterial(Double_t time, Double_t precision=0.001)
Create the material representing the decay product of this material at a given time.
bool AddProperty(const char *property, const char *ref)
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
void SetRadLen(Double_t radlen, Double_t intlen=0.)
Set radiation/absorption lengths.
virtual Bool_t IsEq(const TGeoMaterial *other) const
return true if the other material has the same physical properties
TGeoElement * GetBaseElement() const
const char * GetPropertyRef(const char *property) const
TGDMLMatrix * GetProperty(const char *name) const
void SetUsed(Bool_t flag=kTRUE)
virtual void FillMaterialEvolution(TObjArray *population, Double_t precision=0.001)
Fills a user array with all the elements deriving from the possible decay of the top element composin...
Int_t GetIndex()
Retrieve material index in the list of materials.
TGeoExtension * fUserExtension
TGeoMaterial & operator=(const TGeoMaterial &)
assignment operator
TGeoExtension * GrabUserExtension() const
Get a copy of the user extension pointer.
virtual TGeoElement * GetElement(Int_t i=0) const
Get a pointer to the element this material is made of.
TGeoExtension * GrabFWExtension() const
Get a copy of the framework extension pointer.
virtual Int_t GetDefaultColor() const
Get some default color related to this material.
TGeoMaterial()
Default constructor.
static Double_t Coulomb(Double_t z)
static function Compute Coulomb correction for pair production and Brem REFERENCE : EGS MANUAL SLAC 2...
virtual Double_t GetA() const
TGeoExtension * fFWExtension
Transient user-defined extension to materials.
virtual Double_t GetDensity() const
virtual Double_t GetZ() const
virtual TGeoElement * GetElement(Int_t i=0) const
Retrieve the pointer to the element corresponding to component I.
void ComputeNuclearInterLength()
Compute Nuclear Interaction Length based on Geant4 formula.
Double_t * GetZmixt() const
void AddElement(Double_t a, Double_t z, Double_t weight)
add an element to the mixture using fraction by weight Check if the element is already defined
TGeoMixture & operator=(const TGeoMixture &)
assignment operator
virtual Double_t GetSpecificActivity(Int_t i=-1) const
Get specific activity (in Bq/gram) for the whole mixture (no argument) or for a given component.
TGeoMixture()
Default constructor.
virtual ~TGeoMixture()
Destructor.
void ComputeDerivedQuantities()
Compute Derived Quantities as in Geant4.
virtual void Print(const Option_t *option="") const
print characteristics of this material
void ComputeRadiationLength()
Compute Radiation Length based on Geant4 formula.
Double_t * fVecNbOfAtomsPerVolume
virtual void FillMaterialEvolution(TObjArray *population, Double_t precision=0.001)
Fills a user array with all the elements deriving from the possible decay of the top elements composi...
void AverageProperties()
Compute effective A/Z and radiation length.
Double_t * GetWmixt() const
virtual TGeoMaterial * DecayMaterial(Double_t time, Double_t precision=0.001)
Create the mixture representing the decay product of this material at a given time.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual Int_t GetNelements() const
virtual Bool_t IsEq(const TGeoMaterial *other) const
Return true if the other material has the same physical properties.
void DefineElement(Int_t iel, Double_t a, Double_t z, Double_t weight)
Double_t * GetAmixt() const
virtual void Add(TObject *obj)
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
The TNamed class is the base class for all named ROOT classes.
virtual const char * GetTitle() const
Returns title of object.
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
virtual const char * GetName() const
Returns name of object.
Int_t IndexOf(const TObject *obj) const
Int_t GetEntriesFast() const
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
virtual void AddAt(TObject *obj, Int_t idx)
Add object at position ids.
TObject * At(Int_t idx) const
virtual Bool_t IsEqual(const TObject *obj) const
Default equal comparison (objects are equal if they have the same address in memory).
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual UInt_t GetUniqueID() const
Return the unique object id.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual Int_t IndexOf(const TObject *obj) const
Return index of object in collection.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
static constexpr double amu
static constexpr double fine_structure_const
static constexpr double gram
static constexpr double cm2
static constexpr double Avogadro
UnitType
System of units flavor. Must be kept in sync with TGeoUnits::UnitType.
static constexpr double g
static constexpr double cm
UnitType setUnitType(UnitType new_type)
Set the currently used unit type (Only ONCE possible)
UnitType unitType()
Access the currently set units type.
constexpr Double_t E()
Base of natural log:
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
constexpr Double_t Na()
Avogadro constant (Avogadro's Number) in .