9#include <beast/cave/geometry/CaveCreator.h>
10#include <beast/cave/simulation/SensitiveDetector.h>
12#include <geometry/CreatorFactory.h>
13#include <framework/gearbox/GearDir.h>
14#include <framework/logging/Logger.h>
16#include <G4LogicalVolume.hh>
17#include <G4PVPlacement.hh>
21#include <G4UserLimits.hh>
57 G4String name, symbol;
59 A = 1.01 * CLHEP::g / CLHEP::mole;
60 G4Element* elH =
new G4Element(name =
"Hydrogen", symbol =
"H", Z = 1, A);
62 A = 12.01 * CLHEP::g / CLHEP::mole;
63 G4Element* elC =
new G4Element(name =
"Carbon", symbol =
"C", Z = 6, A);
65 A = 16.00 * CLHEP::g / CLHEP::mole;
66 G4Element* elO =
new G4Element(name =
"Oxygen", symbol =
"O", Z = 8, A);
68 A = 22.99 * CLHEP::g / CLHEP::mole;
69 G4Element* elNa =
new G4Element(name =
"Natrium", symbol =
"Na", Z = 11, A);
71 A = 200.59 * CLHEP::g / CLHEP::mole;
72 G4Element* elHg =
new G4Element(name =
"Hg", symbol =
"Hg", Z = 80, A);
74 A = 26.98 * CLHEP::g / CLHEP::mole;
75 G4Element* elAl =
new G4Element(name =
"Aluminium", symbol =
"Al", Z = 13, A);
77 A = 28.09 * CLHEP::g / CLHEP::mole;
78 G4Element* elSi =
new G4Element(name =
"Silicon", symbol =
"Si", Z = 14, A);
80 A = 39.1 * CLHEP::g / CLHEP::mole;
81 G4Element* elK =
new G4Element(name =
"K", symbol =
"K", Z = 19, A);
83 A = 69.72 * CLHEP::g / CLHEP::mole;
84 G4Element* elCa =
new G4Element(name =
"Calzium", symbol =
"Ca", Z = 31, A);
86 A = 55.85 * CLHEP::g / CLHEP::mole;
87 G4Element* elFe =
new G4Element(name =
"Iron", symbol =
"Fe", Z = 26, A);
89 density = 2.03 * CLHEP::g / CLHEP::cm3;
90 G4Material* Concrete =
new G4Material(
"Concrete", density, 10);
91 Concrete->AddElementByMassFraction(elH, 0.01);
92 Concrete->AddElementByMassFraction(elO, 0.529);
93 Concrete->AddElementByMassFraction(elNa, 0.016);
94 Concrete->AddElementByMassFraction(elHg, 0.002);
95 Concrete->AddElementByMassFraction(elAl, 0.034);
96 Concrete->AddElementByMassFraction(elSi, 0.337);
97 Concrete->AddElementByMassFraction(elK, 0.013);
98 Concrete->AddElementByMassFraction(elCa, 0.044);
99 Concrete->AddElementByMassFraction(elFe, 0.014);
100 Concrete->AddElementByMassFraction(elC, 0.001);
104 double stepSize = content.getLength(
"stepSize", 5 * CLHEP::um);
108 vector<double> bar = content.getArray(
"bar");
109 B2INFO(
"Contents of bar: ");
110 for (
double value : bar) {
111 B2INFO(
"value: " << value);
115 for (
const GearDir& activeParams : content.getNodes(
"Active")) {
118 G4Box* s_CAVE =
new G4Box(
"s_CAVE",
119 activeParams.getLength(
"px")*CLHEP::cm,
120 activeParams.getLength(
"py")*CLHEP::cm,
121 activeParams.getLength(
"pz")*CLHEP::cm);
124 G4LogicalVolume* l_CAVE =
new G4LogicalVolume(s_CAVE, Concrete,
"l_CAVE", 0, 0);
127 l_CAVE->SetUserLimits(
new G4UserLimits(stepSize));
130 G4ThreeVector CAVEpos = G4ThreeVector(
131 activeParams.getLength(
"x_cave") * CLHEP::cm,
132 activeParams.getLength(
"y_cave") * CLHEP::cm,
133 activeParams.getLength(
"z_cave") * CLHEP::cm
136 G4RotationMatrix* rot_cave =
new G4RotationMatrix();
137 rot_cave->rotateX(activeParams.getLength(
"AngleX"));
138 rot_cave->rotateY(activeParams.getLength(
"AngleY"));
139 rot_cave->rotateZ(activeParams.getLength(
"AngleZ"));
146 new G4PVPlacement(rot_cave, CAVEpos, l_CAVE,
"p_CAVE", &topVolume,
false, detID);
GearDir is the basic class used for accessing the parameter store.
virtual ~CaveCreator()
Destructor.
virtual void create(const GearDir &content, G4LogicalVolume &topVolume, geometry::GeometryTypes type)
Creation of the detector geometry from Gearbox (XML).
CaveCreator()
Constructor.
SensitiveDetector * m_sensitive
SensitiveDetector cave.
Sensitive Detector implementation of the CAVE detector.
geometry::CreatorFactory< CaveCreator > CaveFactory("CAVECreator")
Creator creates the cave geometry.
GeometryTypes
Flag indicating the type of geometry to be used.
Abstract base class for different kinds of events.
Very simple class to provide an easy way to register creators with the CreatorManager.