56{
58 const double fWl2E=1239.85;
59 std::string matName;
60 GeoMaterialPropertiesTable *pMPT=nullptr;
61
62 StoredMaterialManager * materialManager = nullptr;
63 if (StatusCode::SUCCESS !=
m_pDetectorStore->retrieve(materialManager, std::string(
"MATERIALS")))
64 {
65 return;
66 }
67
68 double aH,aC,aN,aSi,aP,aS,aCr,aMn,aFe,aNi,aMo,aAl,aO,Atot;
69 const GeoElement*
H = materialManager->
getElement(
"Hydrogen");
70 const GeoElement*
C = materialManager->
getElement(
"Carbon");
71 const GeoElement*
N = materialManager->
getElement(
"Nitrogen");
72 const GeoElement* Si = materialManager->
getElement(
"Silicon");
73 const GeoElement*
P = materialManager->
getElement(
"Phosphorus");
74 const GeoElement*
S = materialManager->
getElement(
"Sulfur");
75 const GeoElement* Cr = materialManager->
getElement(
"Chromium");
76 const GeoElement* Mn = materialManager->
getElement(
"Manganese");
77 const GeoElement* Fe = materialManager->
getElement(
"Iron");
78 const GeoElement* Ni = materialManager->
getElement(
"Nickel");
79 const GeoElement* Mo = materialManager->
getElement(
"Molybdenum");
80 const GeoElement* Al = materialManager->
getElement(
"Aluminium");
81 const GeoElement*
O = materialManager->
getElement(
"Oxygen");
82 const GeoElement* Be = materialManager->
getElement(
"Beryllium");
83
84
85 matName = "std::Vacuum";
86 const GeoMaterial *vacuum = materialManager->
getMaterial(matName);
88
89
90 matName = "OpticalVacuum";
91 GeoExtendedMaterial* pMatOptVacuum=new GeoExtendedMaterial(matName, (1E-24)*CLHEP::g/CLHEP::cm3);
92 pMatOptVacuum->add(
const_cast<GeoElement*
> (
H), 1);
93 double PhotonEnergyOptVac[2] = {0.44*CLHEP::eV, 6.3*CLHEP::eV};
94 double RefractiveIndexOptVac[2] = {1.0, 1.0};
95 double AbsorptionOptVac[2] ={1
E-5*CLHEP::m, 1
E-5*CLHEP::m};
96
97 pMPT= new GeoMaterialPropertiesTable();
98 pMPT->
AddProperty(
"RINDEX", PhotonEnergyOptVac, RefractiveIndexOptVac , 2);
99 pMPT->
AddProperty(
"ABSLENGTH", PhotonEnergyOptVac, AbsorptionOptVac, 2);
101 pMatOptVacuum->lock();
103
104
105 matName="Steel_AFP";
106 GeoMaterial *steel=
new GeoMaterial(matName, 8*g/
cm3);
107
108 aFe=62.045*Fe->getA()/(CLHEP::g/CLHEP::mole);
109 aC =0.03*
C ->getA()/(CLHEP::g/CLHEP::mole);
110 aMn=2.0*Mn ->getA()/(CLHEP::g/CLHEP::mole);
111 aSi=0.75*Si->getA()/(CLHEP::g/CLHEP::mole);
112 aP =0.045*
P->getA()/(CLHEP::g/CLHEP::mole);
113 aS =0.03*
S ->getA()/(CLHEP::g/CLHEP::mole);
114 aCr=18.0*Cr->getA()/(CLHEP::g/CLHEP::mole);
115 aMo=3.0*Mo ->getA()/(CLHEP::g/CLHEP::mole);
116 aNi=14.0*Ni->getA()/(CLHEP::g/CLHEP::mole);
117 aN =0.10*
N ->getA()/(CLHEP::g/CLHEP::mole);
118 Atot=aFe+aC+aMn+aSi+aP+aS+aCr+aMo+aNi+aN;
119
120 steel->add(const_cast<GeoElement*> (Fe),aFe/Atot);
121 steel->add(
const_cast<GeoElement*
> (
C), aC/Atot);
122 steel->add(const_cast<GeoElement*> (Mn),aMn/Atot);
123 steel->add(const_cast<GeoElement*> (Si),aSi/Atot);
124 steel->add(
const_cast<GeoElement*
> (
P), aP/Atot);
125 steel->add(const_cast<GeoElement*> (S), aS/Atot);
126 steel->add(const_cast<GeoElement*> (Cr),aCr/Atot);
127 steel->add(const_cast<GeoElement*> (Mo),aMo/Atot);
128 steel->add(const_cast<GeoElement*> (Ni),aNi/Atot);
129 steel->add(const_cast<GeoElement*> (N), aN/Atot);
130 steel->lock();
132
133
134 matName="CE7";
135 GeoMaterial *pMatCE7=
new GeoMaterial(matName, 2.4*g/
cm3);
136 aSi=0.70*Si->getA()/(
g/
mole);
137 aAl=0.30*Al->getA()/(
g/
mole);
138 Atot=aSi+aAl;
139 pMatCE7->add(const_cast<GeoElement*> (Si),aSi/Atot);
140 pMatCE7->add(const_cast<GeoElement*> (Al),aAl/Atot);
141 pMatCE7->lock();
143
144
145 matName="Quartz";
146 GeoExtendedMaterial *pMatQuartz=
new GeoExtendedMaterial(matName, 2.6*g/
cm3,
stateSolid, CLHEP::STP_Temperature);
147 aSi=1.0*Si->getA()/(
g/
mole);
148 aO=2.0*
O->getA()/(
g/
mole);
149 Atot=aSi+aO;
150 pMatQuartz->add(const_cast<GeoElement*> (Si),aSi/Atot);
151 pMatQuartz->add(const_cast<GeoElement*> (O),aO/Atot);
152
153
154 const int nEntriesCnt1=12;
155 double arrEnergy1[nEntriesCnt1] = { 750.0*
nm, 700.0*
nm, 650.0*
nm, 600.0*
nm, 550.0*
nm, 500.0*
nm, 450.0*
nm, 400.0*
nm, 350.0*
nm, 300.0*
nm, 250.0*
nm, 200.0*
nm };
156 double arrQuartzRefIndex[nEntriesCnt1] = { 1.450, 1.455, 1.456, 1.458, 1.460, 1.462, 1.465, 1.470, 1.475, 1.488, 1.510, 1.541 };
157 double arrQuartzAbsLength[nEntriesCnt1] = { 130.0*
cm, 130.0*
cm, 130.0*
cm, 130.0*
cm, 128.0*
cm, 125.0*
cm, 122.0*
cm, 120.0*
cm, 111.0*
cm, 104.0*
cm, 95.0*
cm, 83.3*
cm };
158 for(i=0;
i<nEntriesCnt1;
i++) arrEnergy1[i]=(fWl2E/(arrEnergy1[i]/nm))*
eV;
159
160 pMPT= new GeoMaterialPropertiesTable();
161 pMPT->
AddProperty(
"RINDEX", arrEnergy1, arrQuartzRefIndex, nEntriesCnt1);
162 pMPT->
AddProperty(
"ABSLENGTH", arrEnergy1, arrQuartzAbsLength, nEntriesCnt1);
164 pMatQuartz->lock();
166
167
168 matName="SiliconPMT";
169 GeoExtendedMaterial *pMatSiliconPMT=
new GeoExtendedMaterial(matName, 2.3290*g/
cm3,
stateSolid, CLHEP::STP_Temperature);
170 aSi=1.0*Si->getA()/(
g/
mole);
171 pMatSiliconPMT->add(const_cast<GeoElement*> (Si),1.0);
172
173 const int nEntriesCnt2=2;
174 double arrEnergy2[nEntriesCnt2] = { 2800.0*
nm, 190.0*
nm };
175 double arrSiliconRefIndex[nEntriesCnt2] = { 4.0, 4.0 };
176 double arrSiliconAbsLength[nEntriesCnt2] = { 0.00001*
m, 0.00001*
m };
177 for(i=0;
i<nEntriesCnt2;
i++) arrEnergy2[i]=(fWl2E/(arrEnergy2[i]/nm))*
eV;
178
179 pMPT = new GeoMaterialPropertiesTable();
180 pMPT->
AddProperty(
"RINDEX", arrEnergy2, arrSiliconRefIndex, nEntriesCnt2);
181 pMPT->
AddProperty(
"ABSLENGTH", arrEnergy2, arrSiliconAbsLength, nEntriesCnt2);
183 pMatSiliconPMT->lock();
185
186
187
188 matName="Silicon";
189 GeoMaterial *pMatSilicon=
new GeoMaterial(matName, 2.3290*g/
cm3);
190 aSi=1.0*Si->getA()/(
g/
mole);
191 pMatSilicon->add(const_cast<GeoElement*> (Si),1.0);
192 pMatSilicon->lock();
194
195
196 matName="Water";
197 GeoMaterial *pMatWater=
new GeoMaterial(matName, 1.0*g/
cm3);
198 aH=0.11*Si->getA()/(
g/
mole);
199 aO=0.89*Al->getA()/(
g/
mole);
200 Atot=aH+aO;
201 pMatWater->add(
const_cast<GeoElement*
> (
H),aH/Atot);
202 pMatWater->add(const_cast<GeoElement*> (O),aO/Atot);
203 pMatWater->lock();
205
206
207 matName="Beryllium_AFP";
208 GeoMaterial* pMaterialBe=new GeoMaterial(matName, 1.848*CLHEP::g/CLHEP::cm3);
209
210 pMaterialBe->add(const_cast<GeoElement*> (Be), 1);
211 pMaterialBe->lock();
213}
void SetMaterialPropertiesTable(GeoMaterialPropertiesTable *MPT)
void AddProperty(const char *key, double *PhotonMomenta, double *PropertyValues, int NumEntries)
virtual const GeoElement * getElement(const std::string &name)=0
virtual const GeoMaterial * getMaterial(const std::string &name)=0