83 G4bool
const overlapChecking =
false;
85 G4bool
const overlapChecking =
true;
91 const G4double worldSize = 40.0 *
inch;
99 solidWorld->GetName());
106 logicalWorld->GetName(),
115 const G4double floorH = 30.0 *
inch;
116 const G4ThreeVector floorPosition(0.0, 0.0, 0.0);
124 solidFloor->GetName());
126 position.set(0.0, 0.0, -floorH * 0.5);
130 logicalFloor->GetName(),
139 const G4double tankWallThickness = 0.25 *
inch;
140 const G4double tankOR = 18.0 *
inch;
141 const G4double tankH = 39.0 *
inch;
152 solidTank->GetName());
154 position.set(0.0, 0.0, tankH * 0.5);
158 logicalTank->GetName(),
164 const G4double tankAirH = 3.0 *
inch;
165 G4Tubs*
const solidTankAir
168 tankOR - tankWallThickness,
175 solidTankAir->GetName());
177 position.set(0.0, 0.0, (tankH - tankAirH) * 0.5);
181 logicalTankAir->GetName(),
187 const G4double tankH2OH = (tankH - (tankAirH + tankWallThickness));
188 G4Tubs*
const solidTankH2O
191 tankOR - tankWallThickness,
198 solidTankH2O->GetName());
200 const G4double centerOfH2O = (tankH - tankH2OH) * 0.5 - tankAirH;
201 position.set(0.0, 0.0, centerOfH2O);
205 logicalTankH2O->GetName(),
214 const G4double plateX = 3.0 *
inch;
215 const G4double plateY = 0.08 *
inch;
216 const G4double plateZ = 26.0 *
inch;
217 const G4double meatX = 2.75 *
inch;
218 const G4double meatY = 0.04 *
inch;
219 const G4double meatZ = 24.0 *
inch;
220 const G4double xSpacing = 5.0 *
inch;
221 const G4double ySpacing = 0.3 *
inch;
222 const G4double plateRadius = 12.0 *
inch;
224 G4Box*
const solidPlate
225 =
new G4Box(
"Plate_Cladding",
232 solidPlate->GetName());
234 G4Box*
const solidMeat
235 =
new G4Box(
"Plate_Meat",
242 solidMeat->GetName());
248 logicalMeat->GetName(),
271 if(std::sqrt(x * x + y * y) < plateRadius)
275 if(std::sqrt(x * x + y * y) > 1.0 *
inch)
305 G4cout <<
fCopyNumber <<
" plates were added to the subcritical assembly"
314 const G4double sourceH = 2 *
inch;
315 const G4double sourceR = 0.2 *
inch;
317 =
new G4Tubs(
"NeutronSource",
326 solidSource->GetName());
332 logicalSource->GetName(),
341 const G4double polyS = 3.0 *
inch;
342 const G4double polyH = 18.0 *
inch;
343 G4Box*
const solidPoly
351 solidPoly->GetName());
353 G4double radiusToPolyCenter = (tankOR / std::sqrt(2.0)) + std::sqrt(2.0) * polyS;
354 position.set(-radiusToPolyCenter, radiusToPolyCenter, polyH);
358 logicalPoly->GetName(),
364 G4double shellR = 0.3 *
inch;
365 G4double shellH = 6.5 *
inch;
367 =
new G4Tubs(
"Detector_Shell",
376 solidShell->GetName());
382 logicalShell->GetName(),
388 G4double BF3R = 0.2 *
inch;
389 G4double BF3H = 6.0 *
inch;
391 =
new G4Tubs(
"Detector_BF3_Core",
400 solidBF3->GetName());
406 logicalBF3->GetName(),
412 return physicalWorld;
419 static G4NistManager*
const nist = G4NistManager::Instance();
421 fAir = nist->FindOrBuildMaterial(
"G4_AIR");
422 fAluminum = nist->FindOrBuildMaterial(
"G4_Al");
423 fGraphite = nist->FindOrBuildMaterial(
"G4_GRAPHITE");
424 fPolyethylene = nist->FindOrBuildMaterial(
"G4_POLYETHYLENE");
426 fWater = nist->FindOrBuildMaterial(
"G4_WATER");
441 G4double
const U235Enrichment = 0.2;
442 G4double
const U238Enrichment = 0.8;
447 235.053930 * (g / mole));
452 238.050788 * (g / mole));
458 U235->AddIsotope(iU235,
464 U238->AddIsotope(iU238,
466 G4Element*
const oxygen = nist->FindOrBuildElement(
"O");
468 const G4double UO2MolecularWeight = U235->GetA() * U235Enrichment
469 + U238->GetA() * U238Enrichment
470 + oxygen->GetA() * 2;
471 const G4double U235MassFraction = (U235->GetA() * U235Enrichment)
472 / UO2MolecularWeight;
473 const G4double U238MassFraction = (U238->GetA() * U238Enrichment)
474 / UO2MolecularWeight;
475 const G4double oxygenMassFraction = (oxygen->GetA() * 2)
476 / UO2MolecularWeight;
493 G4double
const B10Enrichment = 0.96;
494 G4double
const B11Enrichment = 0.04;
499 10.0129370 * (g / mole));
504 11.0093054 * (g / mole));
510 B10->AddIsotope(iB10,
516 B11->AddIsotope(iB11,
518 G4Element*
const flouride = nist->FindOrBuildElement(
"F");
520 const G4double BF3MolecularWeight = B10->GetA() * B10Enrichment
521 + B11->GetA() * B11Enrichment
522 + flouride->GetA() * 3;
523 const G4double B10MassFraction = (B10->GetA() * B10Enrichment)
524 / BF3MolecularWeight;
525 const G4double B11MassFraction = (B11->GetA() * B11Enrichment)
526 / BF3MolecularWeight;
527 const G4double flourideMassFraction = (flouride->GetA() * 3)
528 / BF3MolecularWeight;
538 flourideMassFraction);