47 fState(kMatStateUndefined),
324 return (
char*)name.
Data();
336 if (
fA<0.9 ||
fZ<0.9) {
337 if (radlen<-1e5 || intlen<-1
e-5) {
338 Error(
"SetRadLen",
"Material %s: user values taken for vacuum: radlen=%g or intlen=%g - too small",
GetName(),
fRadLen,
fIntLen);
342 if (radlen>=0)
fRadLen = 1.E30;
343 if (intlen>=0)
fIntLen = 1.E30;
349 const Double_t alr2av=1.39621E-03, al183=5.20948;
362 Fatal(
"SetRadLen",
"Element not found for material %s",
GetName());
367 nilinv *= amu/lambda0;
385 Double_t fp = ( 0.0083*az4 + 0.20206 + 1./(1.+az2) ) * az2;
386 Double_t fm = ( 0.0020*az4 + 0.0369 ) * az4;
395 if (other==
this)
return kTRUE;
411 printf(
"Material %s %s A=%g Z=%g rho=%g radlen=%g intlen=%g index=%i\n",
GetName(),
GetTitle(),
422 out <<
"// Material: " <<
GetName() << std::endl;
423 out <<
" a = " <<
fA <<
";" << std::endl;
424 out <<
" z = " <<
fZ <<
";" << std::endl;
425 out <<
" density = " <<
fDensity <<
";" << std::endl;
426 out <<
" radl = " <<
fRadLen <<
";" << std::endl;
427 out <<
" absl = " <<
fIntLen <<
";" << std::endl;
429 out <<
" " << name <<
" = new TGeoMaterial(\"" <<
GetName() <<
"\", a,z,density,radl,absl);" << std::endl;
430 out <<
" " << name <<
"->SetIndex(" <<
GetIndex() <<
");" << std::endl;
484 if (!ncomp)
return this;
489 for (i=0; i<ncomp; i++) {
496 Int_t ncomp1 = ncomp;
497 for (i=0; i<ncomp; i++) {
498 if ((weight[i]/amed)<precision) {
511 for (i=0; i<ncomp; i++) {
513 if (weight[i]<precision)
continue;
548 Error(
"FillMaterialEvolution",
"Provide an empty array !");
558 Fatal(
"FillMaterialEvolution",
"Element not found for material %s",
GetName());
562 population->
Add(elem);
588 fVecNbOfAtomsPerVolume = 0;
660 const Double_t alr2av = 1.39621E-03 , al183 =5.20948;
683 if (radinv > 0)
fRadLen = 1/radinv;
685 nilinv *= amu/lambda0;
697 Fatal(
"AddElement",
"Cannot add element having Z=%d to mixture %s", (
Int_t)
z,
GetName());
711 Int_t nelements = fNelements+1;
734 Warning(
"DefineElement",
"Mixture %s has element defined with fractional Z=%f",
GetName(), z);
767 for (i=0; i<nelem; i++) {
770 if (!elnew)
continue;
782 if (elfound)
continue;
784 wnew = weight * (mix->
GetWmixt())[i];
802 if (elemold == elem) exist =
kTRUE;
822 else if (elemold != elem)
continue;
823 if ((elem==elemold) ||
841 Fatal(
"AddElement",
"Cannot add element by natoms in mixture %s after defining elements by weight",
845 Int_t nelements = fNelements+1;
866 Int_t iel = fNelements-1;
889 Fatal(
"DefineElement",
"In mixture %s, element with Z=%i not found",
GetName(),z);
906 if (elem)
return elem;
954 printf(
"Mixture %s %s Aeff=%g Zeff=%g rho=%g radlen=%g intlen=%g index=%i\n",
GetName(),
GetTitle(),
971 out <<
"// Mixture: " <<
GetName() << std::endl;
972 out <<
" nel = " <<
fNelements <<
";" << std::endl;
973 out <<
" density = " <<
fDensity <<
";" << std::endl;
974 out <<
" " << name <<
" = new TGeoMixture(\"" <<
GetName() <<
"\", nel,density);" << std::endl;
978 out <<
" " << name <<
"->DefineElement(" << i <<
",a,z,w);" << std::endl;
980 out <<
" " << name <<
"->SetIndex(" <<
GetIndex() <<
");" << std::endl;
994 if (!ncomp)
return this;
1000 for (i=0; i<ncomp; i++) {
1013 Int_t ncomp1 = ncomp;
1014 for (i=0; i<ncomp; i++) {
1015 if ((weight[i]/amed)<precision) {
1028 for (i=0; i<ncomp; i++) {
1030 if (weight[i]<precision)
continue;
1065 Error(
"FillMaterialEvolution",
"Provide an empty array !");
1077 population->
Add(elem);
1094 const Double_t al183= 5.20948 , al1440 = 7.27239;
1126 fRadLen = (radinv <= 0.0 ? DBL_MAX : 1./radinv);
1136 constexpr
Double_t twothird = 2.0/3.0;
1148 fIntLen = (NILinv <= 0.0 ? DBL_MAX : 1./NILinv);
virtual const char * GetName() const
Returns name of object.
virtual UInt_t GetUniqueID() const
Return the unique object id.
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...
virtual Bool_t IsEq(const TGeoMaterial *other) const
Return true if the other material has the same physical properties.
The manager class for any TGeo geometry.
Double_t * fVecNbOfAtomsPerVolume
void DefineElement(Int_t iel, Double_t a, Double_t z, Double_t weight)
TGeoExtension * fFWExtension
Transient user-defined extension to materials.
virtual Double_t GetDensity() const
void ComputeNuclearInterLength()
Compute Nuclear Interaction Length based on Geant4 formula.
TGeoElementTable * GetElementTable()
Returns material table. Creates it if not existing.
Double_t * GetWmixt() const
virtual TGeoElement * GetElement(Int_t i=0) const
Retrieve the pointer to the element corresponding to component I.
static constexpr double amu
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
static constexpr double cm
void SetRadLen(Double_t radlen, Double_t intlen=0.)
Set radiation/absorption lengths.
Base class describing materials.
virtual ~TGeoMaterial()
Destructor.
TObject * At(Int_t idx) const
void AverageProperties()
Compute effective A/Z and radiation length.
static const Double_t STP_pressure
TGeoElement * GetBaseElement() const
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
TList * GetListOfMaterials() const
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...
virtual Bool_t IsRadioNuclide() const
Fill Area Attributes class.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
TGeoExtension * GrabFWExtension() const
Get a copy of the framework extension pointer.
Double_t Neff() const
Returns effective number of nucleons.
void ComputeRadiationLength()
Compute Radiation Length based on Geant4 formula.
The TNamed class is the base class for all named ROOT classes.
virtual void Print(const Option_t *option="") const
print characteristics of this material
void SetUserExtension(TGeoExtension *ext)
Connect user-defined extension to the material.
Double_t Concentration(Double_t time) const
Find concentration of the element 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".
Base class for chemical elements.
virtual Double_t GetA() const
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...
static Double_t Coulomb(Double_t z)
static function Compute Coulomb correction for pair production and Brem REFERENCE : EGS MANUAL SLAC 2...
virtual Bool_t IsEqual(const TObject *obj) const
Default equal comparison (objects are equal if they have the same address in memory).
virtual Double_t GetZ() const
Int_t GetIndex()
Retrieve material index in the list of materials.
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 ...
static constexpr double Avogadro
virtual void Release() const =0
TGeoMaterial()
Default constructor.
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
TGeoMixture()
Default constructor.
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.
virtual TObject * GetCerenkovProperties() const
TGeoMixture & operator=(const TGeoMixture &)
assignment operator
TGeoBatemanSol * Ratio() const
ABC for user objects attached to TGeoVolume or TGeoNode.
TObjArray * GetElementsRN() const
char * GetPointerName() const
Provide a pointer name containing uid.
virtual Int_t GetNelements() const
Int_t GetEntriesFast() const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
void SetFWExtension(TGeoExtension *ext)
Connect framework defined extension to the material.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
Int_t GetNelements() const
constexpr Double_t Na()
Avogadro constant (Avogadro's Number) in .
virtual void AddAt(TObject *obj, Int_t idx)
Add object at position ids.
constexpr Double_t E()
Base of natural log: .
static const Double_t STP_temperature
virtual TGeoElement * GetElement(Int_t i=0) const
Get a pointer to the element this material is made of.
void ComputeDerivedQuantities()
Compute Derived Quantities as in Geant4.
static Double_t ScreenFactor(Double_t z)
static function Compute screening factor for pair production and Bremsstrahlung REFERENCE : EGS MANUA...
void SetUsed(Bool_t flag=kTRUE)
virtual ~TGeoMixture()
Destructor.
R__EXTERN TGeoManager * gGeoManager
Double_t * GetAmixt() const
virtual Bool_t IsMixture() const
Int_t IndexOf(const TObject *obj) const
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
virtual void GetElementProp(Double_t &a, Double_t &z, Double_t &w, Int_t i=0)
Single interface to get element properties.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
void SetDefined(Bool_t flag=kTRUE)
virtual Int_t GetDefaultColor() const
Get some default color related to this material.
Binding & operator=(OUT(*fun)(void))
you should not use this method at all Int_t Int_t z
virtual TGeoExtension * Grab()=0
void SetUsed(Bool_t flag=kTRUE)
TGeoExtension * fUserExtension
static constexpr double cm2
Class representing a radionuclide.
virtual Double_t GetSpecificActivity() const
Double_t * GetZmixt() const
Int_t AddMaterial(const TGeoMaterial *material)
Add a material to the list. Returns index of the material in list.
TGeoMaterial & operator=(const TGeoMaterial &)
assignment operator
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 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...
TGeoElement * GetElement(Int_t z)
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
TGeoExtension * GrabUserExtension() const
Get a copy of the user extension pointer.
virtual void Print(const Option_t *option="") const
print characteristics of this material
void ResetRatio()
Clears the existing ratio.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual const char * GetTitle() const
Returns title of object.
virtual Bool_t IsEq(const TGeoMaterial *other) const
return true if the other material has the same physical properties
virtual Int_t IndexOf(const TObject *obj) const
Return index of object in collection.
const char * Data() const
static constexpr double g