Back to home page

EIC code displayed by LXR

 
 

    


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