File indexing completed on 2026-04-10 07:50:31
0001 #pragma once
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include <cstring>
0025 #include <cassert>
0026 #include <csignal>
0027 #include "G4OpticalSurface.hh"
0028
0029 struct U4OpticalSurfaceFinish
0030 {
0031 static bool IsPolished(unsigned finish);
0032 static bool IsGround( unsigned finish);
0033
0034 static const char* Name(unsigned finish);
0035 static unsigned Finish(const char* name);
0036
0037 static constexpr const char* polished_ = "polished" ;
0038 static constexpr const char* polishedfrontpainted_ = "polishedfrontpainted" ;
0039 static constexpr const char* polishedbackpainted_ = "polishedbackpainted" ;
0040 static constexpr const char* ground_ = "ground" ;
0041 static constexpr const char* groundfrontpainted_ = "groundfrontpainted" ;
0042 static constexpr const char* groundbackpainted_ = "groundbackpainted" ;
0043 };
0044
0045 inline bool U4OpticalSurfaceFinish::IsPolished(unsigned finish)
0046 {
0047 return finish == polished || finish == polishedfrontpainted || finish == polishedbackpainted ;
0048 }
0049 inline bool U4OpticalSurfaceFinish::IsGround(unsigned finish)
0050 {
0051 return finish == ground || finish == groundfrontpainted || finish == groundbackpainted ;
0052 }
0053 inline const char* U4OpticalSurfaceFinish::Name(unsigned finish)
0054 {
0055 const char* n = nullptr ;
0056 switch(finish)
0057 {
0058 case polished: n = polished_ ; break ;
0059 case polishedfrontpainted: n = polishedfrontpainted_ ; break ;
0060 case polishedbackpainted: n = polishedbackpainted_ ; break ;
0061 case ground: n = ground_ ; break ;
0062 case groundfrontpainted: n = groundfrontpainted_ ; break ;
0063 case groundbackpainted: n = groundbackpainted_ ; break ;
0064 }
0065 assert(n);
0066 return n ;
0067 }
0068
0069 inline unsigned U4OpticalSurfaceFinish::Finish(const char* name)
0070 {
0071 assert(name);
0072 unsigned finish = 0 ;
0073 if(strcmp(name, polished_)==0) finish = polished ;
0074 if(strcmp(name, polishedfrontpainted_)==0) finish = polishedfrontpainted ;
0075 if(strcmp(name, polishedbackpainted_)==0) finish = polishedbackpainted ;
0076 if(strcmp(name, ground_)==0) finish = ground ;
0077 if(strcmp(name, groundfrontpainted_)==0) finish = groundfrontpainted ;
0078 if(strcmp(name, groundbackpainted_)==0) finish = groundbackpainted ;
0079
0080 bool match = strcmp( Name(finish), name ) == 0 ;
0081 assert( match );
0082 if(!match) std::raise(SIGINT);
0083
0084 return finish ;
0085 }
0086