Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:59:08

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 
0026 ////////////////////////////////////////////////////////////////////////
0027 // G4SurfaceProperty Definition
0028 ////////////////////////////////////////////////////////////////////////
0029 //
0030 // Class Description:
0031 //
0032 // A base class describing a surface property.
0033 // Derived classes are G4Opticalsurface, G4Firovsurface, etc.
0034 // Contains the enumeration G4SurfaceType.
0035 
0036 // File:        G4SurfaceProperty.hh
0037 // Description: A base class for for descriping surface property such
0038 //              as G4OpticalSurface, G4FirsovSurface, G4X-raySurface
0039 // Version:     1.0
0040 // Created:     13-10-2003
0041 // Author:      Fan Lei
0042 // Updated:     Mariele Stockhoff 2017-02-24 add DAVIS model
0043 ////////////////////////////////////////////////////////////////////////
0044 
0045 #ifndef G4SurfaceProperty_h
0046 #define G4SurfaceProperty_h 1
0047 
0048 #include "G4String.hh"
0049 #include "G4Types.hh"
0050 
0051 #include <vector>
0052 
0053 class G4SurfaceProperty;
0054 
0055 using G4SurfacePropertyTable = std::vector<G4SurfaceProperty*>;
0056 
0057 // clang-format off
0058 enum G4SurfaceType
0059 {
0060   dielectric_metal,       // dielectric-metal interface
0061   dielectric_dielectric,  // dielectric-dielectric interface
0062   dielectric_LUT,         // dielectric-Look-Up-Table interface
0063   dielectric_LUTDAVIS,    // dielectric-Look-Up-Table DAVIS interface
0064   dielectric_dichroic,    // dichroic filter interface
0065   firsov,                 // for Firsov Process
0066   x_ray,                  // for x-ray mirror process
0067   coated                 // coated_dielectric-dielectric interface
0068 };
0069 // clang-format on
0070 
0071 class G4SurfaceProperty
0072 {
0073  public:
0074   // Constructor of a X-ray optical surface object.
0075   G4SurfaceProperty();
0076   G4SurfaceProperty(const G4String& name, G4SurfaceType type = x_ray);
0077   virtual ~G4SurfaceProperty() = default;
0078 
0079   // Returns the surface name.
0080   const G4String& GetName() const { return theName; }
0081   // Sets the surface name.
0082   void SetName(const G4String& name) { theName = name; }
0083 
0084   // Returns the surface type.
0085   const G4SurfaceType& GetType() const { return theType; }
0086   // Sets the surface type.
0087   virtual void SetType(const G4SurfaceType& type) { theType = type; }
0088 
0089   // To handle the table of surface properties.
0090   static void CleanSurfacePropertyTable();
0091   static const G4SurfacePropertyTable* GetSurfacePropertyTable();
0092   static size_t GetNumberOfSurfaceProperties();
0093   static void DumpTableInfo();
0094 
0095  protected:
0096   G4String theName;  // Surface name
0097 
0098   G4SurfaceType theType;  // Surface type
0099 
0100   static G4SurfacePropertyTable theSurfacePropertyTable;  // The static Table of SurfaceProperties.
0101 };
0102 
0103 #endif /* G4SurfaceProperty_h */