Back to home page

EIC code displayed by LXR

 
 

    


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