Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 10:23:48

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/detail/UnitInserter.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include "corecel/Types.hh"
0010 #include "corecel/data/CollectionBuilder.hh"
0011 #include "corecel/data/DedupeCollectionBuilder.hh"
0012 
0013 #include "BIHBuilder.hh"
0014 #include "SurfacesRecordBuilder.hh"
0015 #include "TransformRecordInserter.hh"
0016 #include "../BoundingBoxUtils.hh"
0017 #include "../OrangeData.hh"
0018 #include "../OrangeInput.hh"
0019 #include "../OrangeTypes.hh"
0020 
0021 namespace celeritas
0022 {
0023 namespace detail
0024 {
0025 class UniverseInserter;
0026 //---------------------------------------------------------------------------//
0027 /*!
0028  * Convert a unit input to params data.
0029  *
0030  * Linearize the data in a UnitInput and add it to the host.
0031  */
0032 class UnitInserter
0033 {
0034   public:
0035     //!@{
0036     //! \name Type aliases
0037     using Data = HostVal<OrangeParamsData>;
0038     //!@}
0039 
0040   public:
0041     // Construct from full parameter data
0042     UnitInserter(UniverseInserter* insert_universe, Data* orange_data);
0043 
0044     // Create a simple unit and store in in OrangeParamsData
0045     UniverseId operator()(UnitInput&& inp);
0046 
0047   private:
0048     Data* orange_data_{nullptr};
0049     BIHBuilder build_bih_tree_;
0050     TransformRecordInserter insert_transform_;
0051     SurfacesRecordBuilder build_surfaces_;
0052     UniverseInserter* insert_universe_;
0053 
0054     CollectionBuilder<SimpleUnitRecord> simple_units_;
0055 
0056     DedupeCollectionBuilder<LocalSurfaceId> local_surface_ids_;
0057     DedupeCollectionBuilder<LocalVolumeId> local_volume_ids_;
0058     DedupeCollectionBuilder<OpaqueId<real_type>> real_ids_;
0059     DedupeCollectionBuilder<logic_int> logic_ints_;
0060     DedupeCollectionBuilder<real_type> reals_;
0061     DedupeCollectionBuilder<SurfaceType> surface_types_;
0062     CollectionBuilder<ConnectivityRecord> connectivity_records_;
0063     CollectionBuilder<VolumeRecord> volume_records_;
0064     CollectionBuilder<OrientedBoundingZoneRecord> obz_records_;
0065     CollectionBuilder<Daughter> daughters_;
0066     BoundingBoxBumper<fast_real_type, real_type> calc_bumped_;
0067 
0068     //// HELPER METHODS ////
0069 
0070     VolumeRecord
0071     insert_volume(SurfacesRecord const& unit, VolumeInput const& v);
0072 
0073     void process_daughter(VolumeRecord* vol_record,
0074                           DaughterInput const& daughter_input);
0075 
0076     void process_obz_record(VolumeRecord* vol_record,
0077                             OrientedBoundingZoneInput const& obz_input);
0078 };
0079 
0080 //---------------------------------------------------------------------------//
0081 }  // namespace detail
0082 }  // namespace celeritas