SHiP Geometry Service
Framework-agnostic C++20 library wrapping the SHiP GeoModel geometry behind a stable interface.
Loading...
Searching...
No Matches
SHiPGeometryService.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2025 CERN for the benefit of the SHiP Collaboration
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4#pragma once
5
7
8#include <GeoModelKernel/GeoVPhysVol.h>
9#include <memory>
10#include <mutex>
11#include <string>
12
13class G4LogicalVolume;
14
15namespace ship {
16
23 public:
25 static std::unique_ptr<SHiPGeometryService> fromSource();
26
28 static std::unique_ptr<SHiPGeometryService> fromFile(const std::string& dbPath);
29
30 ~SHiPGeometryService() override = default;
31
32 // Non-copyable and non-movable (std::once_flag member; instances are
33 // only handed out via unique_ptr, so moves are not needed).
38
39 const GeoVPhysVol* geoModelWorld() const override;
40 G4LogicalVolume* geant4WorldLogical() override;
41 G4LogicalVolume* getLogicalVolume(const std::string& name) const override;
42
43 private:
44 SHiPGeometryService() = default;
45
46 PVConstLink m_world;
47 mutable std::once_flag m_g4ConversionDone;
48 G4LogicalVolume* m_g4WorldLV{nullptr};
49};
50
51} // namespace ship
Framework-agnostic interface to the SHiP detector geometry.
Definition IGeometryService.h:15
Concrete implementation of IGeometryService backed by GeoModel.
Definition SHiPGeometryService.h:22
SHiPGeometryService & operator=(const SHiPGeometryService &)=delete
const GeoVPhysVol * geoModelWorld() const override
GeoModel world physical volume (const — tree is immutable after build).
Definition SHiPGeometryService.cpp:56
static std::unique_ptr< SHiPGeometryService > fromSource()
Build geometry from the C++ SHiPGeometryBuilder.
Definition SHiPGeometryService.cpp:25
SHiPGeometryService(const SHiPGeometryService &)=delete
G4LogicalVolume * getLogicalVolume(const std::string &name) const override
Look up a G4LogicalVolume by name (via G4LogicalVolumeStore).
Definition SHiPGeometryService.cpp:70
G4LogicalVolume * geant4WorldLogical() override
G4LogicalVolume* for the world.
Definition SHiPGeometryService.cpp:60
~SHiPGeometryService() override=default
SHiPGeometryService & operator=(SHiPGeometryService &&)=delete
SHiPGeometryService(SHiPGeometryService &&)=delete
static std::unique_ptr< SHiPGeometryService > fromFile(const std::string &dbPath)
Load geometry from a previously written GeoModel SQLite database.
Definition SHiPGeometryService.cpp:38
Definition IGeometryService.h:11