Geant4 plugin

The Geant4 plugin allows to build Acts::TrackingGeometry amnd Acts::Experimental::Detector directly from Geant4 geometry input. Both rely on the conversion of G4VPhysicalVolume into corresponding Acts objects.

Surface conversion

Converting physical volumes into Acts::Surface objects that represent sensitive detector elements, is done via the Acts::Geant4DetectorSurfaceFactory. This helper class allows to select volumes from the Geant4 geometry and convert them either into pairs of Acts::Geant4DetectorElement and Acts::Surface objects in case of sensitive elements, or simnply surfaces objects into case of passive surfaces.

The selection is hereby done by providing one or more Acts::IGeant4PhysicalVolumeSelector objects to the surface factory.

Possible implementations of this type of conversions can be seen in the corresponding unit test ActsUnitTestGeant4DetectorSurfaceFactory

  // Get the box
  auto nameSelector =
      std::make_shared<Acts::Geant4PhysicalVolumeSelectors::NameSelector>(
          std::vector<std::string>{"yl"}, false);

  Acts::Geant4DetectorSurfaceFactory::Cache cache;
  Acts::Geant4DetectorSurfaceFactory::Options options;
  options.sensitiveSurfaceSelector = nameSelector;

  Acts::Geant4DetectorSurfaceFactory factory;
  factory.construct(cache, nominal, *cylinderPV, options);

  BOOST_CHECK_EQUAL(cache.sensitiveSurfaces.size(), 1u);
  BOOST_CHECK_EQUAL(cache.passiveSurfaces.size(), 0u);

  auto [ element, surface ] = cache.sensitiveSurfaces.front();
  BOOST_CHECK(surface->type() == Acts::Surface::SurfaceType::Cylinder);