00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "BDSGlobalConstants.hh"
00019
00020 #include "BDSMaterials.hh"
00021 #include "G4NistManager.hh"
00022
00023
00024 using namespace std;
00025
00026 BDSMaterials* BDSMaterials::_instance = 0;
00027
00028 BDSMaterials* BDSMaterials::Instance(){
00029 if(_instance==0) {
00030 _instance = new BDSMaterials();
00031 }
00032 return _instance;
00033 }
00034
00035 BDSMaterials::BDSMaterials(){
00036 Initialise();
00037 }
00038
00039 void BDSMaterials::Initialise()
00040 {
00041 G4String name, symbol;
00042 G4double a, z, density;
00043
00044
00045
00046
00047
00048 G4double fractionmass;
00049
00050 G4double temperature, pressure;
00051
00052
00053
00054
00055 #ifdef DEBUG
00056 G4cout << "BDSMaterials: G4 predefined units: " << G4endl;
00057 G4cout << "g= " << g << G4endl;
00058 G4cout << "kg= " << kg << G4endl;
00059 G4cout << "cm= " << cm << G4endl;
00060 G4cout << "m= " << m << G4endl;
00061 G4cout << "mm= " << mm << G4endl;
00062 G4cout << "um= " << um << G4endl;
00063 G4cout << "nm= " << nm << G4endl;
00064 G4cout << "mole= " << mole << G4endl;
00065 G4cout << "kelvin= " << kelvin << G4endl;
00066 G4cout << "tesla= " << tesla << G4endl;
00067 #endif
00068
00069 tmpElement = new G4Element
00070 (name="Hydrogen" , symbol="H" , z= 1., a= 1.00*g/mole); elements[symbol] = tmpElement;
00071
00072 tmpElement = new G4Element
00073 (name="Helium" , symbol="He", z= 2., a= 4.0026*g/mole); elements[symbol] = tmpElement;
00074
00075 tmpElement = new G4Element
00076 (name="Beryllium" , symbol="Be", z= 4., a= 9.0122*g/mole); elements[symbol] = tmpElement;
00077
00078 tmpElement = new G4Element
00079 (name="Boron" , symbol="B", z= 5., a= 10.811*g/mole); elements[symbol] = tmpElement;
00080
00081 tmpElement = new G4Element
00082 (name="Carbon" , symbol="C" , z= 6., a= 12.00*g/mole); elements[symbol] = tmpElement;
00083
00084 tmpElement = new G4Element
00085 (name="Nitrogen" , symbol="N" , z= 7., a= 14.01*g/mole); elements[symbol] = tmpElement;
00086
00087 tmpElement = new G4Element
00088 (name="Oxygen" , symbol="O" , z= 8., a= 16.00*g/mole); elements[symbol] = tmpElement;
00089
00090 tmpElement = new G4Element
00091 (name="Aluminium" , symbol="Al", z= 13., a= 26.98*g/mole); elements[symbol] = tmpElement;
00092
00093 tmpElement = new G4Element
00094 (name="Silicon" , symbol="Si", z= 14., a= 28.09*g/mole); elements[symbol] = tmpElement;
00095
00096 tmpElement = new G4Element
00097 (name="Phosphorous", symbol="P" , z= 15., a= 30.973762*g/mole); elements[symbol] = tmpElement;
00098
00099 tmpElement = new G4Element
00100 (name="Sulphur" , symbol="S" , z= 16., a= 32.066*g/mole); elements[symbol] = tmpElement;
00101
00102 tmpElement = new G4Element
00103 (name="Calcium" , symbol="Ca", z= 20., a= 40.078*g/mole); elements[symbol] = tmpElement;
00104
00105 tmpElement = new G4Element
00106 (name="Titanium" , symbol="Ti", z= 22., a= 47.867*g/mole); elements[symbol] = tmpElement;
00107
00108 tmpElement = new G4Element
00109 (name="Zirkonium" , symbol="Zr", z= 40., a= 91.224*g/mole); elements[symbol] = tmpElement;
00110
00111 tmpElement = new G4Element
00112 (name="Strontium" , symbol="Sr", z= 38., a= 87.62*g/mole); elements[symbol] = tmpElement;
00113
00114 tmpElement = new G4Element
00115 (name="Magnesium" , symbol="Mg", z= 12., a= 24.3050*g/mole); elements[symbol] = tmpElement;
00116
00117 tmpElement = new G4Element
00118 (name="Potassium" , symbol="K", z= 19., a= 39.0983*g/mole); elements[symbol] = tmpElement;
00119
00120 tmpElement = new G4Element
00121 (name="Vanadium" , symbol="V" , z= 23., a= 50.9415*g/mole); elements[symbol] = tmpElement;
00122
00123 tmpElement = new G4Element
00124 (name="Manganese" , symbol="Mn", z= 25., a= 54.93805*g/mole); elements[symbol] = tmpElement;
00125
00126 tmpElement = new G4Element
00127 (name="Iron" , symbol="Fe", z= 26., a= 55.847*g/mole); elements[symbol] = tmpElement;
00128
00129 tmpElement = new G4Element
00130 (name="Cobalt" , symbol="Co", z= 27., a= 58.93*g/mole); elements[symbol] = tmpElement;
00131
00132 tmpElement = new G4Element
00133 (name="Nickel" , symbol="Ni", z= 28., a= 58.693*g/mole); elements[symbol] = tmpElement;
00134
00135 tmpElement = new G4Element
00136 (name="Copper" , symbol="Cu", z= 29., a= 63.546*g/mole); elements[symbol] = tmpElement;
00137
00138 tmpElement = new G4Element
00139 (name="Niobium" , symbol="Nb", z= 41., a= 92.906*g/mole); elements[symbol] = tmpElement;
00140
00141 tmpElement = new G4Element
00142 (name="Samarium" , symbol="Sm", z= 62., a= 150.4*g/mole); elements[symbol] = tmpElement;
00143
00144 tmpElement = new G4Element
00145 (name="Tungsten" , symbol="W" , z= 74., a= 183.84*g/mole); elements[symbol] = tmpElement;
00146
00147 tmpElement = new G4Element
00148 (name="Lead" , symbol="Pb", z= 82., a= 207.2*g/mole); elements[symbol] = tmpElement;
00149
00150 tmpElement = new G4Element
00151 (name="Molybdenum" , symbol="Mo", z= 42., a= 95.94*g/mole); elements[symbol] = tmpElement;
00152
00153 tmpElement = new G4Element
00154 (name="Chromium" , symbol="Cr", z= 24., a= 51.9961*g/mole); elements[symbol] = tmpElement;
00155
00156 tmpElement = new G4Element
00157 (name="Sodium" , symbol="Na", z= 11., a= 22.98976928*g/mole); elements[symbol] = tmpElement;
00158
00159 tmpElement = new G4Element
00160 (name="Zinc" , symbol="Zn", z= 30., a= 65.38*g/mole); elements[symbol] = tmpElement;
00161
00162 tmpElement = new G4Element
00163 (name="Barium" , symbol="Ba", z= 56., a= 137.327*g/mole); elements[symbol] = tmpElement;
00164
00165 tmpElement = new G4Element
00166 (name="Europium" , symbol="Eu", z= 63., a= 151.964*g/mole); elements[symbol] = tmpElement;
00167
00168 tmpElement = new G4Element
00169 (name="Uranium" , symbol="U", z= 92., a= 238.0289*g/mole); elements[symbol] = tmpElement;
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180 tmpMaterial = new G4Material
00181 (name="aluminium" , density= 2.700*g/cm3, 1, kStateSolid);
00182 tmpMaterial->AddElement(elements["Al"],1);
00183 materials[name] = tmpMaterial;
00184
00185 tmpMaterial = new G4Material
00186 (name="vanadium" , density= 5.800*g/cm3, 1, kStateSolid);
00187 tmpMaterial->AddElement(elements["V"],1);
00188 materials[name] = tmpMaterial;
00189
00190 tmpMaterial = new G4Material
00191 (name="tungsten" , density= 19.3 *g/cm3, 1, kStateSolid);
00192 tmpMaterial->AddElement(elements["W"],1);
00193 materials[name] = tmpMaterial;
00194
00195 tmpMaterial = new G4Material
00196 (name="iron" , density= 7.874 *g/cm3, 1, kStateSolid);
00197 tmpMaterial->AddElement(elements["Fe"],1);
00198 materials[name] = tmpMaterial;
00199
00200 tmpMaterial = new G4Material
00201 (name="uranium" , density= 18.9 *g/cm3, 1, kStateSolid);
00202 tmpMaterial->AddElement(elements["U"],1);
00203 materials[name] = tmpMaterial;
00204
00205 tmpMaterial = new G4Material
00206 (name="copper" , density= 8.96 *g/cm3, 1, kStateSolid);
00207 tmpMaterial->AddElement(elements["Cu"],1);
00208 materials[name] = tmpMaterial;
00209
00210 tmpMaterial = new G4Material
00211 (name="weightiron" , density= 7.87 *g/cm3, 1, kStateSolid);
00212 tmpMaterial->AddElement(elements["Fe"],1);
00213 materials[name] = tmpMaterial;
00214
00215 tmpMaterial = new G4Material
00216 (name="titanium" , density= 4.54 *g/cm3, 1, kStateSolid);
00217 tmpMaterial->AddElement(elements["Ti"],1);
00218 materials[name] = tmpMaterial;
00219
00220 tmpMaterial = new G4Material
00221 (name="graphite" , density= 2.265*g/cm3, 1, kStateSolid);
00222 tmpMaterial->AddElement(elements["C"],1);
00223 materials[name] = tmpMaterial;
00224
00225 tmpMaterial = new G4Material
00226 (name="graphitefoam" , density= 0.61*g/cm3, 1, kStateSolid);
00227 tmpMaterial->AddElement(elements["C"],1);
00228 materials[name] = tmpMaterial;
00229
00230 tmpMaterial = new G4Material
00231 (name="lead" , density= 11.35 *g/cm3, 1, kStateSolid);
00232 tmpMaterial->AddElement(elements["Pb"],1);
00233 materials[name] = tmpMaterial;
00234
00235 tmpMaterial = new G4Material
00236 (name="silicon" , density= 2.33 *g/cm3, 1, kStateSolid);
00237 tmpMaterial->AddElement(elements["Si"],1);
00238 materials[name] = tmpMaterial;
00239
00240 tmpMaterial = new G4Material
00241 (name="beryllium" , density= 1.848*g/cm3, 1, kStateSolid);
00242 tmpMaterial->AddElement(elements["Be"],1);
00243 materials[name] = tmpMaterial;
00244
00245 tmpMaterial = new G4Material
00246 (name="smco" , density= 8.4 *g/cm3, 2, kStateSolid, 300*kelvin);
00247 tmpMaterial->AddElement(elements["Sm"],fractionmass=0.338);
00248 tmpMaterial->AddElement(elements["Co"],fractionmass=0.662);
00249 materials[name] = tmpMaterial;
00250
00251 tmpMaterial = new G4Material
00252 (name="niobium" , density= 8.57 *g/cm3, 1, kStateSolid, 2*kelvin);
00253 tmpMaterial->AddElement(elements["Nb"],1);
00254 materials[name] = tmpMaterial;
00255
00256
00257 tmpMaterial = new G4Material
00258 (name="titaniumalloy" , density= 4.48 *g/cm3, 3, kStateSolid, 300*kelvin);
00259 tmpMaterial->AddElement(elements["V"], fractionmass=0.025);
00260 tmpMaterial->AddElement(elements["Al"], fractionmass=0.03 );
00261 tmpMaterial->AddElement(elements["Ti"], fractionmass=0.945);
00262 materials[name] = tmpMaterial;
00263
00264
00265 tmpMaterial = new G4Material
00266 (name="carbonsteel" , density= 7.87 *g/cm3, 5, kStateSolid, 100*kelvin);
00267 tmpMaterial->AddElement(elements["C"], fractionmass=0.0017);
00268 tmpMaterial->AddElement(elements["Mn"], fractionmass=0.0045);
00269 tmpMaterial->AddElement(elements["P"], fractionmass=0.0004);
00270 tmpMaterial->AddElement(elements["S"], fractionmass=0.0005);
00271 tmpMaterial->AddElement(elements["Fe"], fractionmass=0.9929);
00272 materials[name] = tmpMaterial;
00273
00274
00275 tmpMaterial = new G4Material
00276 (name="stainlesssteel" , density= 8000 *kg/m3, 10, kStateSolid, 295*kelvin);
00277 tmpMaterial->AddElement(elements["C"], fractionmass=0.0003);
00278 tmpMaterial->AddElement(elements["Mn"], fractionmass=0.02);
00279 tmpMaterial->AddElement(elements["Si"], fractionmass=0.0075);
00280 tmpMaterial->AddElement(elements["P"], fractionmass=0.00045);
00281 tmpMaterial->AddElement(elements["S"], fractionmass=0.0003);
00282 tmpMaterial->AddElement(elements["Cr"], fractionmass=0.17);
00283 tmpMaterial->AddElement(elements["Mo"], fractionmass=0.025);
00284 tmpMaterial->AddElement(elements["Ni"], fractionmass=0.12);
00285 tmpMaterial->AddElement(elements["N"], fractionmass=0.001);
00286 tmpMaterial->AddElement(elements["Fe"], fractionmass=0.65545);
00287 materials[name] = tmpMaterial;
00288
00289
00290 tmpMaterial = new G4Material
00291 (name="kapton", density= 1.42 *g/cm3, 4, kStateSolid, 295*kelvin);
00292 tmpMaterial->AddElement(elements["H"], fractionmass=0.026362);
00293 tmpMaterial->AddElement(elements["C"], fractionmass=0.691133);
00294 tmpMaterial->AddElement(elements["N"], fractionmass=0.073270);
00295 tmpMaterial->AddElement(elements["O"], fractionmass=0.209235);
00296 materials[name] = tmpMaterial;
00297
00298
00299 tmpMaterial = new G4Material
00300 (name="nbti" , density= 5.6 *g/cm3, 2, kStateSolid, 4*kelvin);
00301 tmpMaterial->AddElement(elements["Nb"], 1);
00302 tmpMaterial->AddElement(elements["Ti"], 1);
00303 materials[name] = tmpMaterial;
00304
00305 tmpMaterial = new G4Material
00306 (name="concrete" , density= 2.3 *g/cm3, 6, kStateSolid, 300*kelvin);
00307 tmpMaterial->AddElement(elements["Si"], 0.227915);
00308 tmpMaterial->AddElement(elements["O"], 0.60541);
00309 tmpMaterial->AddElement(elements["H"], 0.09972);
00310 tmpMaterial->AddElement(elements["Ca"], 0.04986);
00311 tmpMaterial->AddElement(elements["Al"], 0.014245);
00312 tmpMaterial->AddElement(elements["Fe"], 0.00285);
00313 materials[name] = tmpMaterial;
00314
00315
00316 tmpMaterial = new G4Material(name="lhcconcrete", density= 2.42*g/cm3,
00317 20, kStateSolid, 300*kelvin);
00318 tmpMaterial->AddElement(elements["H"], 0.59785345499811 *perCent);
00319 tmpMaterial->AddElement(elements["C"], 5.59989402848226 *perCent);
00320 tmpMaterial->AddElement(elements["O"], 49.1111702720319 *perCent);
00321 tmpMaterial->AddElement(elements["Na"], 0.45137935852357 *perCent);
00322 tmpMaterial->AddElement(elements["Mg"], 0.66062806777291 *perCent);
00323 tmpMaterial->AddElement(elements["Al"], 2.05561946276849 *perCent);
00324 tmpMaterial->AddElement(elements["Si"], 18.7995018924154 *perCent);
00325 tmpMaterial->AddElement(elements["K"], 0.65365311079793 *perCent);
00326 tmpMaterial->AddElement(elements["Ca"], 20.0191229406116 *perCent);
00327 tmpMaterial->AddElement(elements["Fe"], 1.11400027114647 *perCent);
00328 tmpMaterial->AddElement(elements["P"], 0.04782827639985 *perCent);
00329 tmpMaterial->AddElement(elements["S"], 0.01195706909996 *perCent);
00330 tmpMaterial->AddElement(elements["Ti"], 0.3457585814739 *perCent);
00331 tmpMaterial->AddElement(elements["Mn"], 0.03856154784738 *perCent);
00332 tmpMaterial->AddElement(elements["Zn"], 0.02401378044242 *perCent);
00333 tmpMaterial->AddElement(elements["Zr"], 0.00737352594498 *perCent);
00334 tmpMaterial->AddElement(elements["Ba"], 0.01783596140744 *perCent);
00335 tmpMaterial->AddElement(elements["Pb"], 0.04623400051985 *perCent);
00336 tmpMaterial->AddElement(elements["Sr"], 0.39757254757374 *perCent);
00337 tmpMaterial->AddElement(elements["Eu"], 4.184974185E-05 *perCent);
00338 materials[name] = tmpMaterial;
00339
00340
00341 tmpMaterial = new G4Material
00342 (name="bn5000" , density= 1.925 *g/cm3, 5, kStateSolid, 300*kelvin);
00343 tmpMaterial->AddElement(elements["B"], 0.383249242);
00344 tmpMaterial->AddElement(elements["Ni"], 0.472071387);
00345 tmpMaterial->AddElement(elements["O"], 0.0366276887);
00346 tmpMaterial->AddElement(elements["Ca"], 0.0228923054);
00347 tmpMaterial->AddElement(elements["Si"], 0.0851593762);
00348 materials[name] = tmpMaterial;
00349 G4int natoms;
00350
00351 tmpMaterial = new G4Material
00352 (name="aralditef", density = 1.175*g/cm3, 3, kStateSolid, 300*kelvin);
00353 tmpMaterial->AddElement(elements["C"], natoms=12);
00354 tmpMaterial->AddElement(elements["H"], natoms=18);
00355 tmpMaterial->AddElement(elements["O"], natoms=4);
00356 materials[name] = tmpMaterial;
00357
00358
00359 tmpMaterial = new G4Material
00360 (name="hy906", density = 1.225*g/cm3, 3, kStateSolid, 300*kelvin);
00361 tmpMaterial->AddElement(elements["C"], natoms=10);
00362 tmpMaterial->AddElement(elements["H"], natoms=5);
00363 tmpMaterial->AddElement(elements["O"], natoms=3);
00364 materials[name] = tmpMaterial;
00365
00366
00367 tmpMaterial = new G4Material
00368 (name="dy061", density = 1.025*g/cm3, 4, kStateSolid, 300*kelvin);
00369 tmpMaterial->AddElement(elements["C"], natoms=15);
00370 tmpMaterial->AddElement(elements["H"], natoms=25 );
00371 tmpMaterial->AddElement(elements["O"], natoms=1 );
00372 tmpMaterial->AddElement(elements["N"], natoms=3 );
00373 materials[name] = tmpMaterial;
00374
00375
00376 tmpMaterial = new G4Material
00377 (name="epoxyresin3", density = 1.20*g/cm3, 3, kStateSolid, 300*kelvin);
00378 tmpMaterial->AddMaterial(materials["aralditef"],fractionmass=0.497512);
00379 tmpMaterial->AddMaterial(materials["hy906"],fractionmass=0.497512);
00380 tmpMaterial->AddMaterial(materials["dy061"],fractionmass=0.004976);
00381 materials[name] = tmpMaterial;
00382
00383
00384 tmpMaterial = new G4Material
00385 (name="invar" , density= 8.1 *kg/m3, 2, kStateSolid, 2*kelvin);
00386 tmpMaterial->AddElement(elements["Ni"], fractionmass=0.35);
00387 tmpMaterial->AddElement(elements["Fe"], fractionmass=0.65);
00388 materials[name] = tmpMaterial;
00389
00390
00391 tmpMaterial = new G4Material
00392 (name="soil" , density= 1.9 *g/cm3, 4, kStateSolid, 300*kelvin);
00393 tmpMaterial->AddElement(elements["Si"],0.33377483443708611 );
00394 tmpMaterial->AddElement(elements["O"], 0.57218543046357617);
00395 tmpMaterial->AddElement(elements["H"], 0.022516556291390728);
00396 tmpMaterial->AddElement(elements["Al"], 0.071523178807947022);
00397 materials[name] = tmpMaterial;
00398
00399
00400 tmpMaterial = new G4Material
00401 (name="quartz", density= 2.655 *g/cm3, 2, kStateSolid, 300*kelvin);
00402 tmpMaterial->AddElement(elements["Si"],1);
00403 tmpMaterial->AddElement(elements["O"], 2);
00404 materials[name] = tmpMaterial;
00405
00406
00407 tmpMaterial = new G4Material
00408 (name="clay", density= 1746 *kg/m3, 4, kStateSolid, 300*kelvin);
00409 tmpMaterial->AddElement(elements["Al"],1);
00410 tmpMaterial->AddElement(elements["O"], 9);
00411 tmpMaterial->AddElement(elements["Si"], 2);
00412 tmpMaterial->AddElement(elements["H"], 4);
00413 materials[name] = tmpMaterial;
00414
00415
00416 tmpMaterial = new G4Material
00417 (name="calciumCarbonate", density= 1201 *kg/m3, 3, kStateSolid, 300*kelvin);
00418 tmpMaterial->AddElement(elements["Ca"],1);
00419 tmpMaterial->AddElement(elements["O"], 3);
00420 tmpMaterial->AddElement(elements["C"], 1);
00421 materials[name] = tmpMaterial;
00422
00423
00424 tmpMaterial = new G4Material
00425 (name="marl" , density=1474*kg/m3, 2, kStateSolid, 300*kelvin);
00426 tmpMaterial->AddMaterial(materials["clay"], 0.5 );
00427 tmpMaterial->AddMaterial(materials["calciumCarbonate"],0.5);
00428 materials[name] = tmpMaterial;
00429
00430
00431 tmpMaterial = new G4Material
00432 (name="clayousMarl" , density=1555*kg/m3, 2, kStateSolid, 300*kelvin);
00433 tmpMaterial->AddMaterial(materials["clay"], 0.65 );
00434 tmpMaterial->AddMaterial(materials["calciumCarbonate"],0.35);
00435 materials[name] = tmpMaterial;
00436
00437
00438 tmpMaterial = new G4Material
00439 (name="limousMarl" , density=1392*kg/m3, 2, kStateSolid, 300*kelvin);
00440 tmpMaterial->AddMaterial(materials["clay"], 0.35 );
00441 tmpMaterial->AddMaterial(materials["calciumCarbonate"],0.65);
00442 materials[name] = tmpMaterial;
00443
00444 tmpMaterial = new G4Material
00445 (name="leadtungstate" , density= 8.27 *g/cm3, 3, kStateSolid);
00446 tmpMaterial->AddElement(elements["Pb"], 1);
00447 tmpMaterial->AddElement(elements["W"], 1);
00448 tmpMaterial->AddElement(elements["O"], 4);
00449 materials[name] = tmpMaterial;
00450
00451 tmpMaterial = new G4Material
00452 (name="FusedSilica", density=1.032*g/cm3, 2, kStateSolid);
00453 tmpMaterial->AddElement(elements["O"],2);
00454 tmpMaterial->AddElement(elements["Si"],1);
00455 const G4int FusedSilica_NUMENTRIES = 3;
00456 G4double FusedSilica_RIND[FusedSilica_NUMENTRIES]={1.49,1.49,1.49};
00457 G4double FusedSilica_AbsLength[FusedSilica_NUMENTRIES]={420.*cm,420.*cm,420.*cm};
00458 G4double FusedSilica_Energy[FusedSilica_NUMENTRIES] = {2.0*eV,7.0*eV,7.14*eV};
00459 fsMaterialPropertiesTable= new G4MaterialPropertiesTable();
00460 fsMaterialPropertiesTable->AddProperty("ABSLENGTH",FusedSilica_Energy,FusedSilica_AbsLength,FusedSilica_NUMENTRIES);
00461 fsMaterialPropertiesTable->AddProperty("RINDEX",FusedSilica_Energy,FusedSilica_RIND,FusedSilica_NUMENTRIES);
00462 tmpMaterial->SetMaterialPropertiesTable(fsMaterialPropertiesTable);
00463 materials[name] = tmpMaterial;
00464
00465
00466
00467 tmpMaterial = new G4Material
00468 (name="liquidhelium" , density= 0.12498*g/cm3, 1, kStateLiquid, 4.15*kelvin);
00469 tmpMaterial->AddElement(elements["He"],1);
00470 materials[name] = tmpMaterial;
00471
00472 tmpMaterial=new G4Material
00473 (name="water" , density= 1.00 *g/cm3, 2, kStateLiquid, 300*kelvin);
00474 tmpMaterial->AddElement(elements["O"], 1);
00475 tmpMaterial->AddElement(elements["H"], 2);
00476 materials[name] = tmpMaterial;
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490 temperature = 300*kelvin;
00491 pressure = 1.0*atmosphere;
00492
00493 density = (STP_Temperature/temperature) * (pressure/(1.*atmosphere))* 30*g/(22.4e-3*m3) ;
00494 tmpMaterial = new G4Material
00495 (name="air", density, 2, kStateGas, temperature, pressure);
00496 tmpMaterial->AddElement(elements["O"], fractionmass=0.2);
00497 tmpMaterial->AddElement(elements["N"], fractionmass=0.8);
00498 const G4int Air_NUMENTRIES = 3;
00499 G4double Air_RIND[Air_NUMENTRIES] = {1.000292,1.000292,1.000292};
00500 G4double Air_Energy[Air_NUMENTRIES] = {2.0*eV,7.0*eV,7.14*eV};
00501 airMaterialPropertiesTable=new G4MaterialPropertiesTable();
00502 airMaterialPropertiesTable->AddProperty("RINDEX",Air_Energy, Air_RIND, Air_NUMENTRIES);
00503 tmpMaterial->SetMaterialPropertiesTable(airMaterialPropertiesTable);
00504 materials[name] = tmpMaterial;
00505
00506
00507 density = (STP_Temperature/temperature) * (pressure/(1.*atmosphere))
00508 * (12.+16.)*g/(22.4*1.e-3*m3) ;
00509 tmpMaterial = new G4Material
00510 (name="carbonmonoxide", density, 2, kStateGas, temperature, pressure);
00511 tmpMaterial->AddElement(elements["C"], 1);
00512 tmpMaterial->AddElement(elements["O"], 1);
00513 materials[name] = tmpMaterial;
00514
00515
00516 double bp_pressure=0.0133e-9*bar;
00517 density = (STP_Temperature/temperature) * (bp_pressure/(1.*atmosphere))
00518 * (12.+16.)*g/(22.4*1.e-3*m3) ;
00519 tmpMaterial = new G4Material
00520 (name="bp_carbonmonoxide", density, 2, kStateGas, temperature, bp_pressure);
00521 tmpMaterial->AddElement(elements["C"], 1);
00522 tmpMaterial->AddElement(elements["O"], 1);
00523 materials[name] = tmpMaterial;
00524
00525
00526 density = (STP_Temperature/temperature) * (pressure/(1.*atmosphere))
00527 * (14.)*g/(22.4*1.e-3*m3) ;
00528 tmpMaterial = new G4Material
00529 (name="nitrogen", density, 1, kStateGas, temperature, pressure);
00530 tmpMaterial->AddElement(elements["N"], fractionmass=1.0);
00531 materials[name] = tmpMaterial;
00532
00533
00534 pressure=BDSGlobalConstants::Instance()->GetVacuumPressure();
00535 density = (STP_Temperature/temperature) * (pressure/(1.*atmosphere)) * 29*g/(22.4*1.e-3*m3) ;
00536 #ifdef DEBUG
00537 G4cout<< " ***************** defining Vacuum"<<G4endl;
00538 G4cout<< "pressure="<<pressure/bar<<" bar"<<G4endl;
00539 G4cout<< "temp="<<temperature/kelvin<<" K"<<G4endl;
00540 G4cout<< "density="<<density/(g/m3)<<"g/m^3"<<G4endl;
00541 #endif
00542 tmpMaterial = new G4Material
00543 (name="vacuum", density, 3, kStateGas, temperature, pressure);
00544 tmpMaterial->AddElement(elements["H"], fractionmass=0.482);
00545 tmpMaterial->AddElement(elements["C"], fractionmass=0.221);
00546 tmpMaterial->AddElement(elements["O"], fractionmass=0.297);
00547 materials[name] = tmpMaterial;
00548
00549 tmpMaterial = new G4Material
00550 (name="laservac" , density, 1, kStateGas, temperature, pressure);
00551 tmpMaterial->AddMaterial(materials["vacuum"], fractionmass=1.);
00552 materials[name] = tmpMaterial;
00553
00554
00555 density=37.403/10.*g/cm3;
00556 tmpMaterial = new G4Material
00557 (name="beamgasplugmat", density, 2, kStateGas);
00558 tmpMaterial->AddElement(elements["C"], 1);
00559 tmpMaterial->AddElement(elements["O"], 1);
00560 materials[name] = tmpMaterial;
00561 }
00562
00563 void BDSMaterials::AddMaterial(G4Material* aMaterial, G4String aName)
00564 {
00565 aName.toLower();
00566 if(materials.insert(make_pair(aName,aMaterial)).second){
00567 #ifdef DEBUG
00568 G4cout << "New material : " << aName << " added to material table" << G4endl;
00569 #endif
00570
00571 }else{
00572 G4String exceptionString = "Material "+aName+" already exists\n";
00573 G4Exception(exceptionString.c_str(), "-1", FatalException, "");
00574 }
00575 }
00576
00577
00578
00579 void BDSMaterials::AddMaterial(G4String aName, G4double itsZ, G4double itsA, G4double itsDensity)
00580 {
00581 aName.toLower();
00582 G4Material* tmpMaterial = new G4Material(aName, itsZ, itsA*g/mole, itsDensity*g/cm3);
00583 if(materials.insert(make_pair(aName,tmpMaterial)).second){
00584 #ifdef DEBUG
00585 G4cout << "New material : " << aName << " added to material table" << G4endl;
00586 #endif
00587 }else{
00588 G4String exceptionString = "Material "+aName+" already exists\n";
00589 G4Exception(exceptionString.c_str(), "-1", FatalException, "");
00590 }
00591 }
00592
00593 void BDSMaterials::AddMaterial(G4String aName, G4double itsDensity, G4State itsState,
00594 G4double itsTemp, G4double itsPressure,
00595 list<const char*> itsComponents, list<G4double> itsComponentsFractions)
00596 {
00597 aName.toLower();
00598 G4Material* tmpMaterial = new G4Material(aName, itsDensity*g/cm3,
00599 (G4int)itsComponents.size(),itsState, itsTemp*kelvin, itsPressure*atmosphere);
00600 list<const char*>::iterator sIter;
00601 list<G4double>::iterator dIter;
00602 for(sIter = itsComponents.begin(), dIter = itsComponentsFractions.begin();
00603 sIter != itsComponents.end();
00604 sIter++, dIter++)
00605 {
00606 #ifdef DEBUG
00607 G4cout << "BDSMaterials::AddMaterial - Adding element: " << (G4String)*sIter << G4endl;
00608 #endif
00609 if(CheckElement((G4String)*sIter)){
00610 tmpMaterial->AddElement(GetElement((G4String)*sIter),(*dIter));
00611 } else tmpMaterial->AddMaterial(GetMaterial((G4String)*sIter),(*dIter));
00612 }
00613 if(materials.insert(make_pair(aName,tmpMaterial)).second){
00614 #ifdef DEBUG
00615 G4cout << "New material : " << aName << " added to material table" << G4endl;
00616 #endif
00617 }else{
00618 G4String exceptionString = "Material "+aName+" already exists\n";
00619 G4Exception(exceptionString.c_str(), "-1", FatalException, "");
00620 }
00621 }
00622
00623 void BDSMaterials::AddMaterial(G4String aName, G4double itsDensity, G4State itsState,
00624 G4double itsTemp, G4double itsPressure,
00625 list<const char*> itsComponents, list<G4int> itsComponentsWeights)
00626 {
00627 aName.toLower();
00628 G4Material* tmpMaterial = new G4Material(aName, itsDensity*g/cm3,
00629 (G4int)itsComponents.size(),itsState, itsTemp*kelvin, itsPressure*atmosphere);
00630 list<const char*>::iterator sIter;
00631 list<G4int>::iterator iIter;
00632 for(sIter = itsComponents.begin(), iIter = itsComponentsWeights.begin();
00633 sIter != itsComponents.end();
00634 sIter++, iIter++)
00635 {
00636 #ifdef DEBUG
00637 G4cout << "BDSMaterials::AddMaterial - Adding element: " << (G4String)*sIter << G4endl;
00638 #endif
00639 if(CheckElement((G4String)*sIter)){
00640 tmpMaterial->AddElement(GetElement((G4String)*sIter),(*iIter));
00641 } else tmpMaterial->AddMaterial(GetMaterial((G4String)*sIter),(*iIter));
00642 }
00643 if(materials.insert(make_pair(aName,tmpMaterial)).second){
00644 #ifdef DEBUG
00645 G4cout << "New material : " << aName << " added to material table" << G4endl;
00646 #endif
00647 }else{
00648 G4String exceptionString = "Material "+aName+" already exists\n";
00649 G4Exception(exceptionString.c_str(), "-1", FatalException, "");
00650 }
00651 }
00652
00653 void BDSMaterials::AddElement(G4Element* aElement, G4String aSymbol)
00654 {
00655 if(elements.insert(make_pair(aSymbol,aElement)).second){
00656 #ifdef DEBUG
00657 G4cout << "New atom : " << aSymbol << G4endl;
00658 #endif
00659 }else{
00660 G4String exceptionString = "Atom "+aSymbol+" already exists\n";
00661 G4Exception(exceptionString.c_str(), "-1", FatalException, "");
00662 }
00663 }
00664
00665 void BDSMaterials::AddElement(G4String aName, G4String aSymbol, G4double itsZ, G4double itsA)
00666 {
00667 G4Element* tmpElement = new G4Element(aName, aSymbol, itsZ, itsA*g/mole);
00668 if(elements.insert(make_pair(aSymbol,tmpElement)).second){
00669 #ifdef DEBUG
00670 G4cout << "New atom : " << aSymbol << G4endl;
00671 #endif
00672 }else{
00673 G4String exceptionString = "Atom "+aSymbol+" already exists\n";
00674 G4Exception(exceptionString.c_str(), "-1", FatalException, "");
00675 }
00676 }
00677
00678 G4Material* BDSMaterials::GetMaterial(G4String aMaterial)
00679 {
00680 G4String cmpStr1 ("G4_");
00681 G4String cmpStr2 (aMaterial, 3);
00682 #ifdef DEBUG
00683 G4cout << "BDSMaterials::GetMaterial() - " << cmpStr1 << " " << cmpStr2 << " " << cmpStr1.compareTo(cmpStr2) << G4endl;
00684 #endif
00685 if (!cmpStr1.compareTo(cmpStr2)){
00686 #ifdef DEBUG
00687 G4cout << "Using NIST material " << aMaterial << G4endl;
00688 #endif
00689 G4NistManager* nistManager = G4NistManager::Instance();
00690 return nistManager->FindOrBuildMaterial(aMaterial, true, true);
00691 } else {
00692 aMaterial.toLower();
00693 map<G4String,G4Material*>::iterator iter = materials.find(aMaterial);
00694 if(iter != materials.end()) return (*iter).second;
00695 else{
00696 G4String exceptionString = "BDSMaterials::GetMaterial - Material "+aMaterial+" not known. Aborting.";
00697 G4Exception(exceptionString.c_str(), "-1", FatalException, "");
00698 exit(1);
00699 }
00700 }
00701 }
00702
00703 G4Element* BDSMaterials::GetElement(G4String aSymbol)
00704 {
00705 G4String cmpStr1 ("G4_");
00706 G4String cmpStr2 (aSymbol, 3);
00707 #ifdef DEBUG
00708 G4cout << cmpStr1 << " " << cmpStr2 << " " << cmpStr1.compareTo(cmpStr2) << G4endl;
00709 #endif
00710 if (!cmpStr1.compareTo(cmpStr2)){
00711 #ifdef DEBUG
00712 G4cout << "Using NIST material " << aSymbol << G4endl;
00713 #endif
00714 G4NistManager* nistManager = G4NistManager::Instance();
00715 return nistManager->FindOrBuildElement(aSymbol, true);
00716 } else {
00717 map<G4String,G4Element*>::iterator iter = elements.find(aSymbol);
00718 if(iter != elements.end()) return (*iter).second;
00719 else{
00720 G4String exceptionString="BDSMaterials::GetElement - Element "+aSymbol+" not known. Aborting.";
00721 G4Exception(exceptionString.c_str(), "-1", FatalException, "");
00722 exit(1);
00723 }
00724 }
00725 }
00726
00727 G4Element* BDSMaterials::GetElement(const char* aSymbol)
00728 {
00729 return GetElement((G4String)aSymbol);
00730 }
00731
00732 G4bool BDSMaterials::CheckMaterial(G4String aMaterial)
00733 {
00734 aMaterial.toLower();
00735 map<G4String,G4Material*>::iterator iter = materials.find(aMaterial);
00736 if(iter != materials.end()) return true;
00737 else return false;
00738 }
00739
00740 G4bool BDSMaterials::CheckElement(G4String aSymbol)
00741 {
00742 map<G4String,G4Element*>::iterator iter = elements.find(aSymbol);
00743 if(iter != elements.end()) return true;
00744 else return false;
00745 }
00746
00747 void BDSMaterials::ListMaterials(){
00748 G4cout << "Available elements are:" << G4endl;
00749 G4cout << "Boron - B" << G4endl;
00750 G4cout << "Aluminium - Al" << G4endl;
00751 G4cout << "Calcium - Ca" << G4endl;
00752 G4cout << "Carbon - C" << G4endl;
00753 G4cout << "Cobalt - Co" << G4endl;
00754 G4cout << "Helium - He" << G4endl;
00755 G4cout << "Hydrogen - H" << G4endl;
00756 G4cout << "Iron - Fe" << G4endl;
00757 G4cout << "Lead - Pb" << G4endl;
00758 G4cout << "Manganese - Mn" << G4endl;
00759 G4cout << "Niobium - Nb" << G4endl;
00760 G4cout << "Nitrogen - N" << G4endl;
00761 G4cout << "Oxygen - O" << G4endl;
00762 G4cout << "Phosphorus - P" << G4endl;
00763 G4cout << "Samarium - Sm" << G4endl;
00764 G4cout << "Silicon - Si" << G4endl;
00765 G4cout << "Sulphur - S" << G4endl;
00766 G4cout << "Titanium - Ti" << G4endl;
00767 G4cout << "Zirkonium - Zr" << G4endl;
00768 G4cout << "Tungsten - W" << G4endl;
00769 G4cout << "Vanadium - V" << G4endl;
00770 G4cout << "Molybdenum - Mo" << G4endl;
00771 G4cout << "Chromium - Cr" << G4endl;
00772 G4cout << "Sodium - Na" << G4endl;
00773 G4cout << "Barium - Ba" << G4endl;
00774 G4cout << "Zinc - Zn" << G4endl;
00775 G4cout << "Europium - Eu" << G4endl;
00776 G4cout << "***************" << G4endl;
00777 G4cout << "Available materials are:" << G4endl;
00778 G4cout << "Air" << G4endl;
00779 G4cout << "Aluminium" << G4endl;
00780 G4cout << "AralditeF" << G4endl;
00781 G4cout << "Beryllium" << G4endl;
00782 G4cout << "CarbonMonoxide" << G4endl;
00783 G4cout << "CarbonSteel" << G4endl;
00784 G4cout << "Concrete" << G4endl;
00785 G4cout << "LHCConcrete" << G4endl;
00786 G4cout << "Copper" << G4endl;
00787 G4cout << "Graphite" << G4endl;
00788 G4cout << "GraphiteFoam" << G4endl;
00789 G4cout << "BN5000" << G4endl;
00790 G4cout << "Invar" << G4endl;
00791 G4cout << "Iron" << G4endl;
00792 G4cout << "LaserVac" << G4endl;
00793 G4cout << "Lead" << G4endl;
00794 G4cout << "LeadTungstate" << G4endl;
00795 G4cout << "LiquidHelium" << G4endl;
00796 G4cout << "NbTi" << G4endl;
00797 G4cout << "Niobium" << G4endl;
00798 G4cout << "Silicon" << G4endl;
00799 G4cout << "SmCo" << G4endl;
00800 G4cout << "Soil" << G4endl;
00801 G4cout << "StainlessSteel" << G4endl;
00802 G4cout << "Titanium" << G4endl;
00803 G4cout << "TitaniumAlloy" << G4endl;
00804 G4cout << "Tungsten" << G4endl;
00805 G4cout << "Vacuum" << G4endl;
00806 G4cout << "Vanadium" << G4endl;
00807 G4cout << "Water" << G4endl;
00808 G4cout << "WeightIron" << G4endl;
00809 G4cout << "****************************" << G4endl;
00810 G4cout << "Available nist materials are:" << G4endl;
00811 G4NistManager* nistManager = G4NistManager::Instance();
00812 G4String list="all";
00813 nistManager->ListMaterials(list);
00814 }
00815
00816 BDSMaterials::~BDSMaterials(){
00817 map<G4String,G4Material*>::iterator mIter;
00818 for(mIter = materials.begin(); mIter!=materials.end(); mIter++)
00819 delete (*mIter).second;
00820 materials.clear();
00821
00822 map<G4String,G4Element*>::iterator eIter;
00823 for(eIter = elements.begin(); eIter!=elements.end(); eIter++)
00824 delete (*eIter).second;
00825 elements.clear();
00826
00827 delete tmpMaterial;
00828 delete tmpElement;
00829 delete airMaterialPropertiesTable;
00830 delete fsMaterialPropertiesTable;
00831 }