00001
00002
00003
00004
00005
00006
00007 #ifndef __GLG4_PMT_LogicalVolume_hh__
00008 #define __GLG4_PMT_LogicalVolume_hh__
00009
00010 #include "G4LogicalVolume.hh"
00011
00012 class G4Material;
00013 class G4OpticalSurface;
00014
00015 typedef enum
00016 { kPmtStyle_TorusStack, kPmtStyle_Ellipsoid } ePmtStyle;
00017
00018
00019 class GLG4_PMT_LogicalVolume : public G4LogicalVolume {
00020 public:
00021
00022 GLG4_PMT_LogicalVolume
00023 (const G4String& plabel,
00024 G4double r_bound,
00025 G4double hh_bound,
00026 G4Material* ExteriorMat);
00027
00028 G4double GetZEquator() { return z_equator; }
00029
00030 protected:
00031 G4double z_equator;
00032
00033 static G4OpticalSurface* our_Mirror_opsurf;
00034
00035 void ConstructPMT_UsingTorusStack
00036 (const G4int n_edge,
00037 const G4double outer_z_edge[],
00038 const G4double outer_rho_edge[],
00039 const G4double outer_z_o[],
00040 G4double r_dynode,
00041 G4double z_dynode,
00042 G4double d_wall,
00043 G4Material* Exterior,
00044 G4Material* Glass,
00045 G4OpticalSurface* Photocathode_opsurf,
00046 G4Material* PMT_Vac,
00047 G4Material* Dynode_mat,
00048 G4VSensitiveDetector *detector
00049 );
00050
00051 void ConstructPMT_UsingEllipsoid
00052 (G4double r_equat,
00053 G4double h_face,
00054 G4double h_back,
00055 G4double r_stem,
00056 G4double l_stem,
00057 G4double r_dynode,
00058 G4double z_dynode,
00059 G4double d_wall,
00060 G4Material* Exterior,
00061 G4Material* Glass,
00062 G4OpticalSurface* Photocathode_opsurf,
00063 G4Material* PMT_Vac,
00064 G4Material* Dynode_mat,
00065 G4VSensitiveDetector *detector
00066 );
00067 };
00068
00069
00070
00071
00072 class GLG4_17inch_LogicalVolume : public GLG4_PMT_LogicalVolume {
00073 public:
00074
00075 GLG4_17inch_LogicalVolume
00076 (const G4String& plabel,
00077 G4Material* ExteriorMat,
00078 G4Material* GlassMat,
00079 G4OpticalSurface* Photocathode_opsurf,
00080 G4Material* PMT_Vacuum,
00081 G4Material* DynodeMat,
00082 G4Material* MaskMat,
00083
00084 G4VSensitiveDetector *detector,
00085 ePmtStyle PmtStyle
00086 );
00087 };
00088
00089
00090
00091 class GLG4_20inch_LogicalVolume : public GLG4_PMT_LogicalVolume {
00092 public:
00093
00094 GLG4_20inch_LogicalVolume
00095 (const G4String& plabel,
00096 G4Material* ExteriorMat,
00097 G4Material* GlassMat,
00098 G4OpticalSurface* Photocathode_opsurf,
00099 G4Material* PMT_Vacuum,
00100 G4Material* DynodeMat,
00101 G4Material* MaskMat,
00102
00103 G4VSensitiveDetector *detector,
00104 ePmtStyle PmtStyle
00105 );
00106 };
00107
00108
00109
00110
00111 class GLG4_8inch_LogicalVolume : public GLG4_PMT_LogicalVolume {
00112 public:
00113
00114 GLG4_8inch_LogicalVolume
00115 (const G4String& plabel,
00116 G4Material* ExteriorMat,
00117 G4Material* GlassMat,
00118 G4OpticalSurface* Photocathode_opsurf,
00119 G4Material* PMT_Vacuum,
00120 G4Material* DynodeMat,
00121 G4Material* MaskMat,
00122
00123 G4VSensitiveDetector *detector,
00124 ePmtStyle PmtStyle
00125 );
00126 };
00127
00128 class GLG4_5inch_LogicalVolume : public GLG4_PMT_LogicalVolume {
00129 public:
00130
00131 GLG4_5inch_LogicalVolume
00132 (const G4String& plabel,
00133 G4Material* ExteriorMat,
00134 G4Material* GlassMat,
00135 G4OpticalSurface* Photocathode_opsurf,
00136 G4Material* PMT_Vacuum,
00137 G4Material* DynodeMat,
00138 G4Material* MaskMat,
00139
00140 G4VSensitiveDetector *detector,
00141 ePmtStyle PmtStyle
00142 );
00143 };
00144
00145 #endif
00146
00147