|
||||
File indexing completed on 2025-01-18 10:18:22
0001 0002 #include <map> 0003 0004 #include "G4SystemOfUnits.hh" 0005 0006 #ifndef _PFRICH_MATERIALS_ 0007 #define _PFRICH_MATERIALS_ 0008 0009 class G4Element; 0010 class G4Material; 0011 class G4RadiatorMaterial; 0012 0013 #include <CherenkovWaveLengthRange.h> 0014 0015 // Uncomment to disable Rayleigh scattering and / or absorption by hand; 0016 //#define _DISABLE_RAYLEIGH_SCATTERING_ 0017 //#define _DISABLE_ABSORPTION_ 0018 0019 // Eventually this is a single place where these two are defined; 0020 #define _INCH_ (25.4*mm) 0021 #define _MIL_ (_INCH_/1000) 0022 0023 // -- Aerogel --------------------------------------------------------------------------------- 0024 // 0025 #define _AEROGEL_BELLE_II_SMALL_REFRACTIVE_INDEX_ 0 0026 #define _AEROGEL_BELLE_II_LARGE_REFRACTIVE_INDEX_ 1 0027 #define _AEROGEL_BELLE_II_REFRACTIVE_INDEX_1_04_ 2 0028 // FIXME: this does not look nice, but suffices; 0029 #define _AEROGEL_CLAS12_DENSITY_155_MG_CM3_ 155 0030 #define _AEROGEL_CLAS12_DENSITY_225_MG_CM3_ 225 0031 0032 // If uncommented: fixed refractive index, no attenuation (single-layer CLAS12 config only); 0033 //#define _AEROGEL_FIXED_REFRACTIVE_INDEX_ (1.044) 0034 // -------------------------------------------------------------------------------------------- 0035 0036 // -- Acrylic filter -------------------------------------------------------------------------- 0037 // 0038 #define _ACRYLIC_WL_CUTOFF_ (300*nm) 0039 0040 // Does not need to be precise; 0041 #define _ACRYLIC_DENSITY_ (1.18*g/cm3) 0042 0043 // If uncommented: fixed refractive index, no attenuation; 0044 //#define _ACRYLIC_FIXED_REFRACTIVE_INDEX_ (1.50) 0045 // -------------------------------------------------------------------------------------------- 0046 0047 // -- Carbon fiber honeycomb sandwich --------------------------------------------------------- 0048 // 0049 // Rad. length of the carbon fiber, epoxy glue and honeycomb as provided by 0050 // Prakhar on 02/25/2023; 0051 #define _CF_RAD_LENGTH_ (23.4*cm) 0052 #define _EG_RAD_LENGTH_ (35.7*cm) 0053 #define _HC_RAD_LENGTH_ (845.4*cm) 0054 // Used only in the material composition calculation; 0055 #define _CF_THICKNESS_ (10*_MIL_) 0056 #define _EG_THICKNESS_ (10*_MIL_) 0057 0058 #define _FR4_RAD_LENGTH_ (19.4*cm) 0059 // -------------------------------------------------------------------------------------------- 0060 0061 // -- Wavelength range ------------------------------------------------------------------------ 0062 // 0063 // "Nominal" wavelength at which average refractive index will be calculated; FIXME: remove; 0064 // should rather store a fine step n(nu) lookup table in the CherenkovRadiator structure 0065 // after the GEANT pass; the problem is that n(<lambda>) is needed not only for the active 0066 // radiator, where calibration photons are readily available, but also for say quartz to 0067 // calculate the optical path correctly (and photon generation in the window may be suppressed); 0068 //#define _LAMBDA_NOMINAL_ (470.0) 0069 #define _LAMBDA_NOMINAL_ (365.0) 0070 #define _MAGIC_CFF_ (1239.8) 0071 0072 // As 2023/03/09 consider wavelength range from 150um to 800um; 0073 #define _WLDIM_ 27 0074 #define _LAMBDA_MIN_ (150.0) 0075 #define _LAMBDA_MAX_ (800.0) 0076 #define _NU_MIN_ (eV*_MAGIC_CFF_/_LAMBDA_MAX_) 0077 #define _NU_MAX_ (eV*_MAGIC_CFF_/_LAMBDA_MIN_) 0078 #define _NU_STEP_ ((_NU_MAX_ - _NU_MIN_)/(_WLDIM_-1)) 0079 // -------------------------------------------------------------------------------------------- 0080 0081 // FIXME: this needs to be verified (and actually the QE at normal incidence renormalized); 0082 // The problem here is that when the QE is measured on a test stand, a fraction of photons 0083 // actually bounces back off the window-photocathode boundary (I think); since this same 0084 // bouncing is then taken care by GEANT, a double counting must occur; just making this 0085 // refractive index more or less equal to the window one would solve the normalization problem, 0086 // but will also eliminate bouncing all together, which is not realistic either since a 0087 // non-negligible number of photons (especially in case of a photon flash produced in a 0088 // window) actually *will* be bouncing in the window, moving away from their initial 0089 // impact (creation) point; 0090 #define _BIALKALI_REFRACTIVE_INDEX_ (2.80)//(1.47) 0091 0092 class Materials: public CherenkovWaveLengthRange { 0093 public: 0094 Materials(); 0095 virtual ~Materials() {}; 0096 0097 // The only two needed outside of the DetectorConstruction class; 0098 G4RadiatorMaterial *Nitrogen( void ) { return m_Nitrogen; }; 0099 G4RadiatorMaterial *FusedSilica( void ) { return m_FusedSilica; }; 0100 G4Material *Absorber( void ) { return m_Absorber; }; 0101 0102 protected: 0103 void DefineElements( void ); 0104 void DefineMaterials( void ); 0105 0106 // Basic elements; 0107 G4Element *m_C, *m_N, *m_O, *m_F, *m_H, *m_Si, *m_K, *m_Na, *m_Sb, *m_Al, *m_Ca; 0108 0109 // Materials; 0110 G4Material *m_Air, *m_Absorber, *m_Bialkali, *m_Aluminum, *m_CarbonFiber, *m_Ceramic, *m_Silver, *m_Titanium; 0111 // Fake carbon to calibrate radiation length of the honeycomb samples; will be created 0112 // consisting of pure carbon, density 1g/cm^3; 0113 G4Material *m_FakeCarbon_1_g_cm3; 0114 // A honeycomb sandwich with epoxy glue (10mil+10mil+1/2"+10mil+10mil), or a 1/4"-based combination; 0115 G4Material *m_HalfInch_CF_HoneyComb, *m_QuarterInch_CF_HoneyComb; 0116 // FR4 imitation with appropriate rad. length; 0117 G4Material *m_FR4, *m_Water, *m_Copper, *m_Silicon, *m_Delrin, *m_PEEK; 0118 0119 G4RadiatorMaterial *m_Nitrogen, *m_Acrylic, *m_FusedSilica, *m_C2F6, *m_Sapphire; 0120 std::map<unsigned, G4RadiatorMaterial*> m_Aerogel; 0121 }; 0122 0123 #endif
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |