Construct and return a G4 volume for the object. This is a pure virtual function, which means it must be implemented by the inheriting classes. This returns an unplaced logical volume which faces along the Z axis.
163 std::vector<double> conePlanes;
164 std::vector<double> coneMax;
165 std::vector<double> coneMin;
173 conePlanes.push_back(-
p->fZ);
175 coneMin.push_back(0.0);
178 G4LogicalVolume* logVolume
179 =
new G4LogicalVolume(
183 coneMin.data(), coneMax.data()),
186 logVolume->SetVisAttributes(G4VisAttributes::Invisible);
197 conePlanes.push_back(-
p->fZ);
198 coneMin.push_back(
p->fInner);
199 coneMax.push_back(
p->fOuter);
202 G4LogicalVolume* logOuterVessel
203 =
new G4LogicalVolume(
204 new G4Polycone(
GetName()+
"/OuterVessel",
207 coneMin.data(), coneMax.data()),
210 logOuterVessel->SetVisAttributes(
GetColor(logOuterVessel));
212 new G4PVPlacement(NULL,
213 G4ThreeVector(0,0,0),
215 logOuterVessel->GetName(),
231 conePlanes.push_back(-
p->fZ);
232 coneMin.push_back(
p->fInner);
233 coneMax.push_back(
p->fOuter);
236 G4LogicalVolume* logInnerVessel
237 =
new G4LogicalVolume(
238 new G4Polycone(
GetName()+
"/InnerVessel",
241 coneMin.data(), coneMax.data()),
244 logInnerVessel->SetVisAttributes(
GetColor(logInnerVessel));
246 new G4PVPlacement(NULL,
247 G4ThreeVector(0,0,0),
249 logInnerVessel->GetName(),
265 conePlanes.push_back(-
p->fZ);
266 coneMin.push_back(0.0);
267 coneMax.push_back(
p->fInner);
271 coneMin.push_back(0.0);
272 coneMax.push_back(coneMax.back());
276 =
new G4LogicalVolume(
277 new G4Polycone(
GetName()+
"/Liquid",
280 coneMin.data(), coneMax.data()),
285 new G4PVPlacement(NULL,
286 G4ThreeVector(0,0,0),
296 G4LogicalVolume* logImmersed = immersed.
GetPiece();
298 new G4PVPlacement(NULL,
301 logImmersed->GetName(),
309 = Get<MiniCaptImmersedBuilder>(
"mImmersed");
310 G4LogicalVolume* logImmersed = immersed.
GetPiece();
312 new G4PVPlacement(NULL,
315 logImmersed->GetName(),
322 std::cout <<
"Undefined immersed volume" <<
std::endl;
337 if (conePlanes.empty() ) {
339 coneMin.push_back(0.0);
340 coneMax.push_back(p->fInner);
342 conePlanes.push_back(- p->fZ);
343 coneMin.push_back(0.0);
344 coneMax.push_back(p->fInner);
348 =
new G4LogicalVolume(
349 new G4Polycone(
GetName()+
"/Ullage",
352 coneMin.data(), coneMax.data()),
357 new G4PVPlacement(NULL,
358 G4ThreeVector(0,0,0),
368 G4LogicalVolume* logExposed = exposed.
GetPiece();
371 new G4PVPlacement(NULL,
374 logExposed->GetName(),
382 = Get<MiniCaptExposedBuilder>(
"mExposed");
383 G4LogicalVolume* logExposed = exposed.
GetPiece();
387 new G4PVPlacement(NULL,
390 logExposed->GetName(),
398 std::cout <<
"Undefined exposed volume" <<
std::endl;
static constexpr double cm
G4String GetName(void)
Return the base name of the object that this builds.
G4ThreeVector GetOffset()
void DefineMiniCAPTAINVessel()
Fill the vessel definition with values for miniCAPTAIN.
G4ThreeVector GetOffset()
G4ThreeVector GetOffset()
G4LogicalVolume * fUllageVolume
G4Material * FindMaterial(G4String m)
Shape fInnerVessel
The inner vessel polycone points.
std::string fVesselType
The name of the vessel to be built (currently CAPTAIN or mCAPTAIN).
void DefineCAPTAINVessel()
Fill the vessel definition with values for CAPTAIN.
G4ThreeVector GetTPCOffset()
Shape fOuterVessel
The outer vessel polycone points.
virtual G4LogicalVolume * GetPiece(void)
G4VisAttributes GetColor(G4LogicalVolume *volume, double opacity=0.0)
Shape fVesselEnvelope
The vessel envelop.
virtual G4LogicalVolume * GetPiece(void)
double GetArgonDepth() const
static constexpr double mm
G4ThreeVector GetOffset()
static constexpr double degree
virtual G4LogicalVolume * GetPiece(void)
G4LogicalVolume * fLiquidVolume
QTextStream & endl(QTextStream &s)
virtual G4LogicalVolume * GetPiece(void)