File indexing completed on 2026-04-10 07:50:33
0001 #pragma once
0002
0003 #include <string>
0004 #include <vector>
0005 #include "G4ThreeVector.hh"
0006 #include "G4RotationMatrix.hh"
0007 class G4VSolid ;
0008 class G4MultiUnion ;
0009 class G4Box ;
0010
0011 #include "U4_API_EXPORT.hh"
0012 #include "plog/Severity.h"
0013
0014
0015 struct U4_API PlacedSolid
0016 {
0017 G4VSolid *solid;
0018 G4ThreeVector pos;
0019 G4RotationMatrix rot;
0020 int copy_no;
0021 std::string log_name;
0022 std::string phy_name;
0023 };
0024
0025
0026 struct U4_API U4SolidMaker
0027 {
0028 static const plog::Severity LEVEL ;
0029 static const char* NAMES ;
0030
0031 static const char* Name( const char* prefix, unsigned idx );
0032 static G4VSolid* PrimitiveClone( const G4VSolid* src, const char* prefix, unsigned idx);
0033
0034 static bool CanMake(const char* name);
0035 static const G4VSolid* Make(const char* name);
0036 static const G4VSolid* Make(const char* name, std::string& meta );
0037
0038 static G4double Sagitta( G4double radius, G4double chord );
0039 static G4double SagittaMax( G4double radius, G4double sy, G4double sz );
0040 static G4double SagittaMax( G4double InnerRadius, G4double OuterRadius, G4double sy, G4double sz );
0041
0042
0043 static const G4VSolid* JustOrb(const char* name);
0044 static const G4VSolid* LHCbRichSphMirr(const char* name);
0045 static const G4VSolid* LHCbRichFlatMirr(const char* name);
0046
0047 static const G4VSolid* JustOrbOrbUnion( const char* name);
0048 static const G4VSolid* JustOrbOrbIntersection(const char* name);
0049 static const G4VSolid* JustOrbOrbDifference( const char* name);
0050 static const G4VSolid* JustOrbOrb_(const char* name, char op);
0051 static const G4VSolid* ThreeOrbUnion(const char* name );
0052
0053 static const G4VSolid* SphereWithPhiCutDEV(const char* name);
0054
0055
0056 static const G4VSolid* GeneralSphereDEV(const char* name, std::string& meta );
0057 static const G4VSolid* SphereWithPhiSegment(const char* name);
0058 static const G4VSolid* SphereWithThetaSegment(const char* name);
0059 static const G4VSolid* AdditionAcrylicConstruction(const char* name);
0060
0061 static const int XJfixtureConstruction_debug_mode ;
0062 static const G4VSolid* XJfixtureConstruction(const char* name);
0063 static const G4VSolid* AltXJfixtureConstruction(const char* name);
0064 static const G4VSolid* AltXJfixtureConstructionU(const char* name);
0065 static const G4VSolid* AltXJfixtureConstruction_(const char* name, const char* opt);
0066 static const G4VSolid* AnnulusBoxUnion(const char* name) ;
0067 static const G4VSolid* AnnulusTwoBoxUnion(const char* name) ;
0068 static const G4VSolid* AnnulusOtherTwoBoxUnion(const char* name) ;
0069 static const G4VSolid* AnnulusCrossTwoBoxUnion(const char* name) ;
0070 static const G4VSolid* AnnulusFourBoxUnion_(const char* name, G4double inner_radius) ;
0071 static const G4VSolid* AnnulusFourBoxUnion(const char* name) ;
0072 static const G4VSolid* CylinderFourBoxUnion(const char* name) ;
0073
0074 static const G4VSolid* BoxFourBoxUnion_(const char* name, const char* opt );
0075 static const G4VSolid* BoxFourBoxUnion(const char* name);
0076 static const G4VSolid* BoxCrossTwoBoxUnion(const char* name );
0077 static const G4VSolid* BoxThreeBoxUnion(const char* name);
0078
0079 static const G4VSolid* OrbOrbMultiUnion(const char* name);
0080
0081 static const G4VSolid* GridMultiUnion_(const char* name, G4VSolid* item, double gridspace, int nx, int ny, int nz );
0082 static const G4VSolid* OrbGridMultiUnion(const char* name);
0083 static const G4VSolid* BoxGridMultiUnion(const char* name);
0084
0085 static const G4VSolid* BoxFourBoxContiguous_(const char* name, const char* opt );
0086 static const G4VSolid* BoxFourBoxContiguous(const char* name);
0087
0088
0089 static G4VSolid* Uncoincide_Box_Box_Union( const G4VSolid* bbu );
0090 static std::string Desc( const G4Box* box );
0091 static std::string Desc( const G4ThreeVector* v );
0092
0093 enum { X, Y, Z, ERR } ;
0094 static int OneAxis( const G4ThreeVector* v );
0095 static double HalfLength( const G4Box* box, int axis );
0096 static void ChangeBoxHalfLength( G4Box* box, int axis, double delta );
0097 static void ChangeThreeVector( G4ThreeVector* v, int axis, double delta );
0098
0099
0100 static const int XJanchorConstruction_debug_mode ;
0101 static const G4VSolid* XJanchorConstruction(const char* name);
0102 static const G4VSolid* SJReceiverConstruction(const char* name);
0103
0104 static const G4VSolid* BoxMinusTubs0(const char* name);
0105 static const G4VSolid* BoxMinusTubs1(const char* name);
0106 static const G4VSolid* BoxMinusOrb(const char* name);
0107 static const G4VSolid* UnionOfHemiEllipsoids(const char* name);
0108 static const G4VSolid* PolyconeWithMultipleRmin(const char* name);
0109 static const G4VSolid* PolyconeWithPhiCut(const char* name);
0110 static const G4VSolid* PolyconeWithPhiCutHalf(const char* name);
0111
0112 static void Extract( std::vector<long>& vals, const char* s );
0113 static bool StartsWith( const char* n, const char* q );
0114
0115 static const G4VSolid* SphereIntersectBox(const char* name);
0116 static const G4VSolid* LocalFastenerAcrylicConstruction(const char* name);
0117 static const G4VSolid* AltLocalFastenerAcrylicConstruction(const char* name);
0118 static const G4VSolid* BltLocalFastenerAcrylicConstruction(const char* name);
0119
0120 static const G4VSolid* WaterDistributer(const char* name);
0121 static const G4VSolid* AltWaterDistributer(const char* name);
0122 static G4VSolid* WaterDistributerHelper(const char* name, double distance, double TubeR);
0123 static void AltWaterDistributerHelper(G4MultiUnion* multiUnion, double distance, double TubeR, double yoffset );
0124 static const G4VSolid* WaterDistributorPartIIIUnion(const char* name);
0125
0126 static constexpr const char* U4SolidMaker__MakeLowerWaterDistributorCurvedCutTubes_UNCOINCIDE_MM = "U4SolidMaker__MakeLowerWaterDistributorCurvedCutTubes_UNCOINCIDE_MM" ;
0127 static std::vector<PlacedSolid> MakeLowerWaterDistributorCurvedCutTubes(double m_lowerchimney_rotangle);
0128
0129 static constexpr const char* U4SolidMaker__OuterReflectorOrbSubtraction_radOuterReflector = "U4SolidMaker__OuterReflectorOrbSubtraction_radOuterReflector" ;
0130 static const G4VSolid* OuterReflectorOrbSubtraction(const char* name_);
0131
0132 static const G4VSolid* R12860_PMTSolid(const char* name_);
0133 static const G4VSolid* LProfileSectorPolycone( const char* );
0134
0135 };
0136
0137