Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #pragma once
0002 /**
0003 U4SurfacePerfect.h
0004 ===================
0005 
0006 Used for only for dummy testing surfaces with constant properties.
0007 This is not used for real surfaces which have properties that 
0008 vary with energy/wavelength.  
0009 
0010 **/
0011 
0012 #include <vector>
0013 #include <string>
0014 #include <sstream>
0015 #include <iomanip>
0016 
0017 struct U4SurfacePerfect
0018 {
0019     static void Get(std::vector<U4SurfacePerfect>& perfects) ; 
0020     std::string name ; 
0021     double  detect ; 
0022     double  absorb ; 
0023     double  reflect_specular ; 
0024     double  reflect_diffuse ; 
0025 
0026     double sum() const ; 
0027     std::string desc() const ; 
0028 }; 
0029 
0030 inline double U4SurfacePerfect::sum() const 
0031 {
0032     return detect + absorb + reflect_specular + reflect_diffuse ; 
0033 }
0034 
0035 inline std::string U4SurfacePerfect::desc() const 
0036 {
0037     std::stringstream ss ; 
0038     ss << " detect " << std::setw(10) << std::fixed << std::setprecision(3) << detect ; 
0039     ss << " absorb " << std::setw(10) << std::fixed << std::setprecision(3) << absorb ; 
0040     ss << " reflect_specular " << std::setw(10) << std::fixed << std::setprecision(3) << reflect_specular ; 
0041     ss << " reflect_diffuse " << std::setw(10) << std::fixed << std::setprecision(3) << reflect_diffuse ; 
0042     ss << " name " << name ; 
0043     std::string str = ss.str(); 
0044     return str ; 
0045 }
0046 
0047 
0048 inline void U4SurfacePerfect::Get(std::vector<U4SurfacePerfect>& perfects) // static
0049 {
0050     U4SurfacePerfect perfectDetectSurface   = { "perfectDetectSurface",   1., 0., 0., 0. } ; 
0051     U4SurfacePerfect perfectAbsorbSurface   = { "perfectAbsorbSurface",   0., 1., 0., 0. } ; 
0052     U4SurfacePerfect perfectSpecularSurface = { "perfectSpecularSurface", 0., 0., 1., 0. } ; 
0053     U4SurfacePerfect perfectDiffuseSurface  = { "perfectDiffuseSurface",  0., 0., 0., 1. } ; 
0054 
0055     perfects.push_back(perfectDetectSurface) ; 
0056     perfects.push_back(perfectAbsorbSurface) ; 
0057     perfects.push_back(perfectSpecularSurface) ; 
0058     perfects.push_back(perfectDiffuseSurface) ; 
0059 }
0060