Logo ROOT  
Reference Guide
TGeoMaterial.h
Go to the documentation of this file.
1// @(#)root/geom:$Id$
2// Author: Andrei Gheata 25/10/01
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TGeoMaterial
13#define ROOT_TGeoMaterial
14
15#include <TNamed.h>
16#include <TAttFill.h>
17#include <TList.h>
18
19#include "TGeoElement.h"
20
21// forward declarations
22class TGeoExtension;
23class TGDMLMatrix;
24
25// Some units used in G4
26static const Double_t STP_temperature = 273.15; // [K]
27static const Double_t STP_pressure = 6.32420e+8; // [MeV/mm3]
28
29class TGeoMaterial : public TNamed,
30 public TAttFill
31{
32public:
36 };
42 };
43
44protected:
45 Int_t fIndex; // material index
46 Double_t fA; // A of material
47 Double_t fZ; // Z of material
48 Double_t fDensity; // density of material
49 Double_t fRadLen; // radiation length
50 Double_t fIntLen; // interaction length
51 Double_t fTemperature; // temperature
52 Double_t fPressure; // pressure
53 EGeoMaterialState fState; // material state
54 TObject *fShader; // shader with optical properties
55 TObject *fCerenkov; // pointer to class with Cerenkov properties
56 TGeoElement *fElement; // pointer to element composing the material
57 TList fProperties; // user-defined properties
58 TList fConstProperties; // user-defined constant properties
59 TGeoExtension *fUserExtension; //! Transient user-defined extension to materials
60 TGeoExtension *fFWExtension; //! Transient framework-defined extension to materials
61
62// methods
65
66
67public:
68 // constructors
70 TGeoMaterial(const char *name);
71 TGeoMaterial(const char *name, Double_t a, Double_t z,
72 Double_t rho, Double_t radlen=0, Double_t intlen=0);
73 TGeoMaterial(const char *name, Double_t a, Double_t z, Double_t rho,
75 TGeoMaterial(const char *name, TGeoElement *elem, Double_t rho);
76
77 // destructor
78 virtual ~TGeoMaterial();
79 // methods
80 static Double_t Coulomb(Double_t z);
81 // radioactive mixture evolution
82 virtual TGeoMaterial *DecayMaterial(Double_t time, Double_t precision=0.001);
83 virtual void FillMaterialEvolution(TObjArray *population, Double_t precision=0.001);
84 // getters & setters
85 bool AddProperty(const char *property, const char *ref);
86 bool AddConstProperty(const char *property, const char *ref);
89 const char *GetPropertyRef(const char *property) const;
90 const char *GetPropertyRef(Int_t i) const { return (fProperties.At(i) ? fProperties.At(i)->GetTitle() : nullptr); }
91 Double_t GetConstProperty(const char *property, Bool_t *error = nullptr) const;
92 Double_t GetConstProperty(Int_t i, Bool_t *error = nullptr) const;
93 const char *GetConstPropertyRef(const char *property) const;
94 const char *GetConstPropertyRef(Int_t i) const { return (fConstProperties.At(i) ? fConstProperties.At(i)->GetTitle() : nullptr); }
95 TList const &GetProperties() const { return fProperties; }
96 TList const &GetConstProperties() const { return fConstProperties; }
97 TGDMLMatrix* GetProperty(const char* name) const;
99 virtual Int_t GetByteCount() const {return sizeof(*this);}
100 virtual Double_t GetA() const {return fA;}
101 virtual Double_t GetZ() const {return fZ;}
102 virtual Int_t GetDefaultColor() const;
103 virtual Double_t GetDensity() const {return fDensity;}
104 virtual Int_t GetNelements() const {return 1;}
105 virtual TGeoElement *GetElement(Int_t i=0) const;
106 virtual void GetElementProp(Double_t &a, Double_t &z, Double_t &w, Int_t i=0);
108 char *GetPointerName() const;
109 virtual Double_t GetRadLen() const {return fRadLen;}
110 virtual Double_t GetIntLen() const {return fIntLen;}
111 Int_t GetIndex();
112 virtual TObject *GetCerenkovProperties() const {return fCerenkov;}
113 Char_t GetTransparency() const {return (fFillStyle<3000 || fFillStyle>3100)?0:Char_t(fFillStyle-3000);}
117 virtual Double_t GetSpecificActivity(Int_t) const {return 0.;}
122 virtual Bool_t IsEq(const TGeoMaterial *other) const;
124 virtual Bool_t IsMixture() const {return kFALSE;}
125 virtual void Print(const Option_t *option="") const;
126 virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
127 virtual void SetA(Double_t a) {fA = a; SetRadLen(0);}
128 virtual void SetZ(Double_t z) {fZ = z; SetRadLen(0);}
129 virtual void SetDensity(Double_t density) {fDensity = density; SetRadLen(0);}
130 void SetIndex(Int_t index) {fIndex=index;}
131 virtual void SetCerenkovProperties(TObject* cerenkov) {fCerenkov = cerenkov;}
132 void SetRadLen(Double_t radlen, Double_t intlen=0.);
134 void SetTransparency(Char_t transparency=0) {fFillStyle = 3000+transparency;}
135 void SetTemperature(Double_t temperature) {fTemperature = temperature;}
136 void SetPressure(Double_t pressure) {fPressure = pressure;}
137 void SetState(EGeoMaterialState state) {fState = state;}
139 void SetFWExtension(TGeoExtension *ext);
141
142
143
144 ClassDef(TGeoMaterial, 7) // base material class
145
146//***** Need to add classes and globals to LinkDef.h *****
147};
148
149
151{
152protected :
153// data members
154 Int_t fNelements; // number of elements
155 Double_t *fZmixture; // [fNelements] array of Z of the elements
156 Double_t *fAmixture; // [fNelements] array of A of the elements
157 Double_t *fWeights; // [fNelements] array of relative proportions by mass
158 Int_t *fNatoms; // [fNelements] array of numbers of atoms
159 Double_t *fVecNbOfAtomsPerVolume; //[fNelements] array of numbers of atoms per unit volume
160 TObjArray *fElements; // array of elements composing the mixture
161// methods
162 TGeoMixture(const TGeoMixture&); // Not implemented
163 TGeoMixture& operator=(const TGeoMixture&); // Not implemented
164 void AverageProperties();
165
166public:
167 // constructors
168 TGeoMixture();
169 TGeoMixture(const char *name, Int_t nel, Double_t rho=-1);
170 // destructor
171 virtual ~TGeoMixture();
172 // methods for adding elements
173 void AddElement(Double_t a, Double_t z, Double_t weight);
174 void AddElement(TGeoMaterial *mat, Double_t weight);
175 void AddElement(TGeoElement *elem, Double_t weight);
176 void AddElement(TGeoElement *elem, Int_t natoms);
177 // backward compatibility for defining elements
178 void DefineElement(Int_t iel, Double_t a, Double_t z, Double_t weight);
179 void DefineElement(Int_t iel, TGeoElement *elem, Double_t weight);
180 void DefineElement(Int_t iel, Int_t z, Int_t natoms);
181 // radioactive mixture evolution
182 virtual TGeoMaterial *DecayMaterial(Double_t time, Double_t precision=0.001);
183 virtual void FillMaterialEvolution(TObjArray *population, Double_t precision=0.001);
184 // getters
185 virtual Int_t GetByteCount() const {return 48+12*fNelements;}
186 virtual TGeoElement *GetElement(Int_t i=0) const;
187 virtual void GetElementProp(Double_t &a, Double_t &z, Double_t &w, Int_t i=0) {a=fAmixture[i]; z=fZmixture[i]; w=fWeights[i];}
188 virtual Int_t GetNelements() const {return fNelements;}
189 Double_t *GetZmixt() const {return fZmixture;}
190 Double_t *GetAmixt() const {return fAmixture;}
191 Double_t *GetWmixt() const {return fWeights;}
192 Int_t *GetNmixt() const {return fNatoms;}
193 virtual Double_t GetSpecificActivity(Int_t i=-1) const;
194 // utilities
195 virtual Bool_t IsEq(const TGeoMaterial *other) const;
196 virtual Bool_t IsMixture() const {return kTRUE;}
197 virtual void Print(const Option_t *option="") const;
198 virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
199 virtual void SetA(Double_t a) {fA = a;}
200 virtual void SetZ(Double_t z) {fZ = z;}
201 virtual void SetDensity(Double_t density) {fDensity = density; AverageProperties();}
205
206 ClassDef(TGeoMixture, 3) // material mixtures
207};
208
210 {return AddElement(a,z,weight);}
212 {return AddElement(elem,weight);}
213
214
215#endif
216
int Int_t
Definition: RtypesCore.h:41
char Char_t
Definition: RtypesCore.h:29
const Bool_t kFALSE
Definition: RtypesCore.h:88
bool Bool_t
Definition: RtypesCore.h:59
double Double_t
Definition: RtypesCore.h:55
const Bool_t kTRUE
Definition: RtypesCore.h:87
const char Option_t
Definition: RtypesCore.h:62
#define ClassDef(name, id)
Definition: Rtypes.h:326
#define BIT(n)
Definition: Rtypes.h:83
char name[80]
Definition: TGX11.cxx:109
static const Double_t STP_temperature
Definition: TGeoMaterial.h:26
static const Double_t STP_pressure
Definition: TGeoMaterial.h:27
Fill Area Attributes class.
Definition: TAttFill.h:19
Style_t fFillStyle
Fill area style.
Definition: TAttFill.h:23
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
Definition: TCollection.h:182
This class is used in the process of reading and writing the GDML "matrix" tag.
Definition: TGDMLMatrix.h:34
Base class for chemical elements.
Definition: TGeoElement.h:37
ABC for user objects attached to TGeoVolume or TGeoNode.
Definition: TGeoExtension.h:20
Base class describing materials.
Definition: TGeoMaterial.h:31
virtual ~TGeoMaterial()
Destructor.
Double_t GetConstProperty(const char *property, Bool_t *error=nullptr) const
virtual Double_t GetIntLen() const
Definition: TGeoMaterial.h:110
virtual void SetDensity(Double_t density)
Definition: TGeoMaterial.h:129
virtual void SetZ(Double_t z)
Definition: TGeoMaterial.h:128
void SetUserExtension(TGeoExtension *ext)
Connect user-defined extension to the material.
TGeoExtension * GetUserExtension() const
Definition: TGeoMaterial.h:118
TGeoExtension * GetFWExtension() const
Definition: TGeoMaterial.h:119
char * GetPointerName() const
Provide a pointer name containing uid.
virtual TObject * GetCerenkovProperties() const
Definition: TGeoMaterial.h:112
EGeoMaterialState fState
Definition: TGeoMaterial.h:53
virtual void SetCerenkovProperties(TObject *cerenkov)
Definition: TGeoMaterial.h:131
Bool_t IsUsed() const
Definition: TGeoMaterial.h:123
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
Int_t GetNconstProperties() const
Definition: TGeoMaterial.h:88
virtual Bool_t IsMixture() const
Definition: TGeoMaterial.h:124
Double_t fPressure
Definition: TGeoMaterial.h:52
virtual Int_t GetByteCount() const
Definition: TGeoMaterial.h:99
void SetFWExtension(TGeoExtension *ext)
Connect framework defined extension to the material.
bool AddConstProperty(const char *property, const char *ref)
Double_t fTemperature
Definition: TGeoMaterial.h:51
TList const & GetConstProperties() const
Definition: TGeoMaterial.h:96
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.
TList fProperties
Definition: TGeoMaterial.h:57
void SetState(EGeoMaterialState state)
Definition: TGeoMaterial.h:137
EGeoMaterialState GetState() const
Definition: TGeoMaterial.h:116
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".
Double_t GetTemperature() const
Definition: TGeoMaterial.h:114
virtual Double_t GetSpecificActivity(Int_t) const
Definition: TGeoMaterial.h:117
virtual Int_t GetNelements() const
Definition: TGeoMaterial.h:104
Double_t fZ
Definition: TGeoMaterial.h:47
void SetRadLen(Double_t radlen, Double_t intlen=0.)
Set radiation/absorption lengths.
TList const & GetProperties() const
Definition: TGeoMaterial.h:95
virtual Bool_t IsEq(const TGeoMaterial *other) const
return true if the other material has the same physical properties
TGeoElement * GetBaseElement() const
Definition: TGeoMaterial.h:107
const char * GetPropertyRef(const char *property) const
Int_t GetNproperties() const
Definition: TGeoMaterial.h:87
Double_t fA
Definition: TGeoMaterial.h:46
TGDMLMatrix * GetProperty(const char *name) const
TObject * fCerenkov
Definition: TGeoMaterial.h:55
void SetIndex(Int_t index)
Definition: TGeoMaterial.h:130
Double_t fDensity
Definition: TGeoMaterial.h:48
void SetUsed(Bool_t flag=kTRUE)
Definition: TGeoMaterial.h:133
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.
Double_t fIntLen
Definition: TGeoMaterial.h:50
Double_t GetPressure() const
Definition: TGeoMaterial.h:115
TGeoExtension * fUserExtension
Definition: TGeoMaterial.h:59
Char_t GetTransparency() const
Definition: TGeoMaterial.h:113
TList fConstProperties
Definition: TGeoMaterial.h:58
void SetPressure(Double_t pressure)
Definition: TGeoMaterial.h:136
TGeoElement * fElement
Definition: TGeoMaterial.h:56
void SetTransparency(Char_t transparency=0)
Definition: TGeoMaterial.h:134
const char * GetConstPropertyRef(Int_t i) const
Definition: TGeoMaterial.h:94
TGeoMaterial & operator=(const TGeoMaterial &)
assignment operator
TObject * fShader
Definition: TGeoMaterial.h:54
TGeoExtension * GrabUserExtension() const
Get a copy of the user extension pointer.
Double_t fRadLen
Definition: TGeoMaterial.h:49
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 void SetA(Double_t a)
Definition: TGeoMaterial.h:127
virtual Double_t GetRadLen() const
Definition: TGeoMaterial.h:109
virtual Double_t GetA() const
Definition: TGeoMaterial.h:100
TGeoExtension * fFWExtension
Transient user-defined extension to materials.
Definition: TGeoMaterial.h:60
const char * GetPropertyRef(Int_t i) const
Definition: TGeoMaterial.h:90
virtual Double_t GetDensity() const
Definition: TGeoMaterial.h:103
virtual Double_t GetZ() const
Definition: TGeoMaterial.h:101
void SetTemperature(Double_t temperature)
Definition: TGeoMaterial.h:135
Mixtures of elements.
Definition: TGeoMaterial.h:151
Int_t * GetNmixt() const
Definition: TGeoMaterial.h:192
TObjArray * fElements
Definition: TGeoMaterial.h:160
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
Definition: TGeoMaterial.h:189
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
Double_t * fZmixture
Definition: TGeoMaterial.h:155
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 Int_t GetByteCount() const
Definition: TGeoMaterial.h:185
virtual ~TGeoMixture()
Destructor.
void ComputeDerivedQuantities()
Compute Derived Quantities as in Geant4.
virtual void Print(const Option_t *option="") const
print characteristics of this material
virtual void SetZ(Double_t z)
Definition: TGeoMaterial.h:200
void ComputeRadiationLength()
Compute Radiation Length based on Geant4 formula.
Double_t * fVecNbOfAtomsPerVolume
Definition: TGeoMaterial.h:159
virtual void SetDensity(Double_t density)
Definition: TGeoMaterial.h:201
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...
Double_t * fAmixture
Definition: TGeoMaterial.h:156
void AverageProperties()
Compute effective A/Z and radiation length.
Int_t fNelements
Definition: TGeoMaterial.h:154
Double_t * GetWmixt() const
Definition: TGeoMaterial.h:191
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
Definition: TGeoMaterial.h:188
virtual void GetElementProp(Double_t &a, Double_t &z, Double_t &w, Int_t i=0)
Single interface to get element properties.
Definition: TGeoMaterial.h:187
Int_t * fNatoms
Definition: TGeoMaterial.h:158
virtual void SetA(Double_t a)
Definition: TGeoMaterial.h:199
virtual Bool_t IsEq(const TGeoMaterial *other) const
Return true if the other material has the same physical properties.
virtual Bool_t IsMixture() const
Definition: TGeoMaterial.h:196
Double_t * fWeights
Definition: TGeoMaterial.h:157
void DefineElement(Int_t iel, Double_t a, Double_t z, Double_t weight)
Definition: TGeoMaterial.h:209
Double_t * GetAmixt() const
Definition: TGeoMaterial.h:190
A doubly linked list.
Definition: TList.h:44
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
Definition: TList.cxx:354
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
An array of TObjects.
Definition: TObjArray.h:37
Mother of all ROOT objects.
Definition: TObject.h:37
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
Definition: TObject.h:172
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition: TObject.cxx:694
virtual const char * GetTitle() const
Returns title of object.
Definition: TObject.cxx:401
auto * a
Definition: textangle.C:12