Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-01-07 10:14:28

0001 //------------------------------- -*- C++ -*- -------------------------------//
0002 // Copyright Celeritas contributors: see top-level COPYRIGHT file for details
0003 // SPDX-License-Identifier: (Apache-2.0 OR MIT)
0004 //---------------------------------------------------------------------------//
0005 //! \file orange/g4org/Volume.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include <memory>
0010 #include <vector>
0011 
0012 #include "corecel/io/Label.hh"
0013 #include "geocel/GeoParamsInterface.hh"
0014 #include "orange/OrangeTypes.hh"
0015 #include "orange/transform/VariantTransform.hh"
0016 
0017 class G4LogicalVolume;
0018 
0019 namespace celeritas
0020 {
0021 namespace orangeinp
0022 {
0023 class ObjectInterface;
0024 }
0025 
0026 namespace g4org
0027 {
0028 //---------------------------------------------------------------------------//
0029 struct LogicalVolume;
0030 
0031 //---------------------------------------------------------------------------//
0032 /*!
0033  * An unconstructed ORANGE CSG Object with a transform.
0034  *
0035  * This holds equivalent information to a Geant4 \c G4VPhysicalVolume, but with
0036  * \em only ORANGE data structures.
0037  */
0038 struct PhysicalVolume
0039 {
0040     using ReplicaId = GeantPhysicalInstance::ReplicaId;
0041 
0042     //! Corresponding Geant4 physical volume
0043     VolumeInstanceId id;
0044     //! Replica/parameterization (see GeantGeoParams::id_to_geant TODO)
0045     ReplicaId replica_id;
0046 
0047     VariantTransform transform;
0048     std::shared_ptr<LogicalVolume const> lv;
0049 };
0050 
0051 //---------------------------------------------------------------------------//
0052 /*!
0053  * A reusable object that can be turned into a UnitProto or a Material.
0054  *
0055  * This holds equivalent information to a Geant4 \c G4LogicalVolume, but with
0056  * \em only ORANGE data structures.
0057  */
0058 struct LogicalVolume
0059 {
0060     using SPConstObject = std::shared_ptr<orangeinp::ObjectInterface const>;
0061 
0062     //! Corresponding Geant4 logical volume
0063     VolumeId id;
0064     //! Filled material ID
0065     GeoMatId material_id;
0066 
0067     //! "Unplaced" parent shape
0068     SPConstObject solid;
0069     //! Embedded child volumes
0070     std::vector<PhysicalVolume> children;
0071 };
0072 
0073 //---------------------------------------------------------------------------//
0074 }  // namespace g4org
0075 }  // namespace celeritas