Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-10 07:50:31

0001 #pragma once
0002 /**
0003 U4OpticalSurfaceFinish.h
0004 ===========================
0005 
0006 Basis G4OpticalSurfaceFinish enum is defined in G4OpticalSurface.hh::
0007 
0008      62 enum G4OpticalSurfaceFinish
0009      63 {
0010      64    polished,                    // smooth perfectly polished surface
0011      65    polishedfrontpainted,        // smooth top-layer (front) paint
0012      66    polishedbackpainted,         // same is 'polished' but with a back-paint
0013      67 
0014      68    ground,                      // rough surface
0015      69    groundfrontpainted,          // rough top-layer (front) paint
0016      70    groundbackpainted,           // same as 'ground' but with a back-paint
0017      71 
0018 
0019 Note that the 6 finish types are only the first of 30 or so.
0020 Only finish types used by active geometries have any hope of being supported. 
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" ;              // smooth perfectly polished surface
0038     static constexpr const char* polishedfrontpainted_ = "polishedfrontpainted" ;  // smooth top-layer (front) paint
0039     static constexpr const char* polishedbackpainted_  = "polishedbackpainted"  ;  // same is 'polished' but with a back-paint
0040     static constexpr const char* ground_               = "ground" ;                // rough surface
0041     static constexpr const char* groundfrontpainted_   = "groundfrontpainted" ;    // rough top-layer (front) paint
0042     static constexpr const char* groundbackpainted_    = "groundbackpainted" ;     // same as 'ground' but with a back-paint
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