12 #include <structure/geometry/GeoCOILCreator.h>
13 #include <structure/dbobjects/COILGeometryPar.h>
15 #include <geometry/Materials.h>
16 #include <geometry/CreatorFactory.h>
18 #include <framework/gearbox/Unit.h>
19 #include <framework/gearbox/GearDir.h>
20 #include <framework/logging/Logger.h>
22 #include <framework/database/DBObjPtr.h>
23 #include <framework/database/DBImportObjPtr.h>
24 #include <framework/database/IntervalOfValidity.h>
28 #include <G4LogicalVolume.hh>
29 #include <G4PVPlacement.hh>
31 #include <G4Transform3D.hh>
32 #include <G4VisAttributes.hh>
57 using namespace geometry;
64 geometry::CreatorFactory<GeoCOILCreator> GeoCOILFactory(
"COILCreator");
69 GeoCOILCreator::GeoCOILCreator()
71 m_VisAttributes.clear();
72 m_VisAttributes.push_back(
new G4VisAttributes(
false));
76 GeoCOILCreator::~GeoCOILCreator()
78 for (G4VisAttributes* visAttr : m_VisAttributes)
delete visAttr;
79 m_VisAttributes.clear();
86 createGeometry(config, topVolume, type);
93 importObj.
construct(readConfiguration(content));
103 B2FATAL(
"No configuration for " << name <<
" found.");
105 createGeometry(*dbObj, topVolume, type);
115 parameters.setGlobalRotAngle(content.getAngle(
"Rotation") / Unit::rad);
116 parameters.setGlobalOffsetZ(content.getLength(
"OffsetZ") / Unit::mm);
119 parameters.setCryoMaterial(content.getString(
"Cryostat/Material",
"Air"));
120 parameters.setCryoRmin(content.getLength(
"Cryostat/Rmin") / Unit::mm);
121 parameters.setCryoRmax(content.getLength(
"Cryostat/Rmax") / Unit::mm);
122 parameters.setCryoLength(content.getLength(
"Cryostat/HalfLength") / Unit::mm);
125 parameters.setCav1Material(content.getString(
"Cavity1/Material",
"Air"));
126 parameters.setCav1Rmin(content.getLength(
"Cavity1/Rmin") / Unit::mm);
127 parameters.setCav1Rmax(content.getLength(
"Cavity1/Rmax") / Unit::mm);
128 parameters.setCav1Length(content.getLength(
"Cavity1/HalfLength") / Unit::mm);
131 parameters.setShieldMaterial(content.getString(
"RadShield/Material",
"Air"));
132 parameters.setShieldRmin(content.getLength(
"RadShield/Rmin") / Unit::mm);
133 parameters.setShieldRmax(content.getLength(
"RadShield/Rmax") / Unit::mm);
134 parameters.setShieldLength(content.getLength(
"RadShield/HalfLength") / Unit::mm);
137 parameters.setCav2Material(content.getString(
"Cavity2/Material",
"Air"));
138 parameters.setCav2Rmin(content.getLength(
"Cavity2/Rmin") / Unit::mm);
139 parameters.setCav2Rmax(content.getLength(
"Cavity2/Rmax") / Unit::mm);
140 parameters.setCav2Length(content.getLength(
"Cavity2/HalfLength") / Unit::mm);
143 parameters.setCoilMaterial(content.getString(
"Coil/Material",
"Air"));
144 parameters.setCoilRmin(content.getLength(
"Coil/Rmin") / Unit::mm);
145 parameters.setCoilRmax(content.getLength(
"Coil/Rmax") / Unit::mm);
146 parameters.setCoilLength(content.getLength(
"Coil/HalfLength") / Unit::mm);
155 double GlobalRotAngle = parameters.getGlobalRotAngle();
156 double GlobalOffsetZ = parameters.getGlobalOffsetZ();
162 string strMatCryo = parameters.getCryoMaterial();
163 double CryoRmin = parameters.getCryoRmin();
164 double CryoRmax = parameters.getCryoRmax();
165 double CryoLength = parameters.getCryoLength();
167 G4Material* matCryostat = Materials::get(strMatCryo);
169 new G4Tubs(
"Cryostat", CryoRmin, CryoRmax, CryoLength, 0.0, M_PI * 2.0);
170 G4LogicalVolume* CryoLV =
171 new G4LogicalVolume(CryoTube, matCryostat,
"LVCryo", 0, 0, 0);
172 new G4PVPlacement(G4TranslateZ3D(GlobalOffsetZ) * G4RotateZ3D(GlobalRotAngle),
173 CryoLV,
"PVCryo", &topVolume,
false, 0);
178 string strMatCav1 = parameters.getCav1Material();
179 double Cav1Rmin = parameters.getCav1Rmin();
180 double Cav1Rmax = parameters.getCav1Rmax();
181 double Cav1Length = parameters.getCav1Length();
183 G4Material* matCav1 = Materials::get(strMatCav1);
186 new G4Tubs(
"Cavity1", Cav1Rmin, Cav1Rmax, Cav1Length, 0.0, M_PI * 2.0);
187 G4LogicalVolume* Cav1LV =
188 new G4LogicalVolume(Cav1Tube, matCav1,
"LVCav1", 0, 0, 0);
189 m_VisAttributes.push_back(
new G4VisAttributes(G4Colour(0., 1., 0.)));
190 Cav1LV->SetVisAttributes(m_VisAttributes.back());
191 new G4PVPlacement(0, G4ThreeVector(0.0, 0.0, 0.0), Cav1LV,
"PVCav1", CryoLV,
false, 0);
196 string strMatShield = parameters.getShieldMaterial();
197 double ShieldRmin = parameters.getShieldRmin();
198 double ShieldRmax = parameters.getShieldRmax();
199 double ShieldLength = parameters.getShieldLength();
201 G4Material* matShield = Materials::get(strMatShield);
204 new G4Tubs(
"RadShield", ShieldRmin, ShieldRmax, ShieldLength, 0.0, M_PI * 2.0);
205 G4LogicalVolume* ShieldLV =
206 new G4LogicalVolume(ShieldTube, matShield,
"LVShield", 0, 0, 0);
207 m_VisAttributes.push_back(
new G4VisAttributes(G4Colour(1., 1., 0.)));
208 ShieldLV->SetVisAttributes(m_VisAttributes.back());
209 new G4PVPlacement(0, G4ThreeVector(0.0, 0.0, 0.0), ShieldLV,
"PVShield", Cav1LV,
false, 0);
214 string strMatCav2 = parameters.getCav2Material();
215 double Cav2Rmin = parameters.getCav2Rmin();
216 double Cav2Rmax = parameters.getCav2Rmax();
217 double Cav2Length = parameters.getCav2Length();
219 G4Material* matCav2 = Materials::get(strMatCav2);
222 new G4Tubs(
"Cavity2", Cav2Rmin, Cav2Rmax, Cav2Length, 0.0, M_PI * 2.0);
223 G4LogicalVolume* Cav2LV =
224 new G4LogicalVolume(Cav2Tube, matCav2,
"LVCav2", 0, 0, 0);
225 m_VisAttributes.push_back(
new G4VisAttributes(G4Colour(1., 1., 1.)));
226 Cav2LV->SetVisAttributes(m_VisAttributes.back());
227 new G4PVPlacement(0, G4ThreeVector(0.0, 0.0, 0.0), Cav2LV,
"PVCav2", ShieldLV,
false, 0);
232 string strMatCoil = parameters.getCoilMaterial();
233 double CoilRmin = parameters.getCoilRmin();
234 double CoilRmax = parameters.getCoilRmax();
235 double CoilLength = parameters.getCoilLength();
237 G4Material* matCoil = Materials::get(strMatCoil);
240 new G4Tubs(
"Coil", CoilRmin, CoilRmax, CoilLength, 0.0, M_PI * 2.0);
241 G4LogicalVolume* CoilLV =
242 new G4LogicalVolume(CoilTube, matCoil,
"LVCoil", 0, 0, 0);
243 m_VisAttributes.push_back(
new G4VisAttributes(G4Colour(0., 1., 1.)));
244 CoilLV->SetVisAttributes(m_VisAttributes.back());
245 new G4PVPlacement(0, G4ThreeVector(0.0, 0.0, 0.0), CoilLV,
"PVCoil", Cav2LV,
false, 0);