EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
OpTable.cxx
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file OpTable.cxx
1 
2 //_____________________________________________________________________________
3 //
4 // optical and scintillation properties of PbWO4 crystals,
5 // also provides boundary from crystal to optical photon detector
6 //_____________________________________________________________________________
7 
8 //local headers
9 #include "OpTable.h"
10 
11 //Geant headers
12 #include <Geant4/G4MaterialPropertiesTable.hh>
13 #include <Geant4/G4Material.hh>
14 #include <Geant4/G4SystemOfUnits.hh>
15 #include <Geant4/G4LogicalVolume.hh>
16 #include <Geant4/G4OpticalSurface.hh>
17 #include <Geant4/G4LogicalSkinSurface.hh>
18 #include <Geant4/G4LogicalBorderSurface.hh>
19 
20 
21 //_____________________________________________________________________________
22 void OpTable::CrystalTable(G4Material *mat) {
23 
24  //scintillation and optical properties
25 
26  //already done
27  if(mat->GetMaterialPropertiesTable()) return;
28 
29  //G4cout << "OpTable::CrystalTable, " << mat->GetMaterialPropertiesTable() << G4endl;
30 
31  const G4int ntab = 2;
32  G4double scin_en[] = {2.9*eV, 3.*eV}; // 420 nm (the range is 414 - 428 nm)
33  G4double scin_fast[] = {1., 1.};
34 
35  G4MaterialPropertiesTable *tab = new G4MaterialPropertiesTable();
36 
37  tab->AddProperty("FASTCOMPONENT", scin_en, scin_fast, ntab);
38  tab->AddConstProperty("FASTTIMECONSTANT", 6*ns);
39  tab->AddConstProperty("SCINTILLATIONYIELD", 200/MeV); // 200/MEV nominal 10
40  tab->AddConstProperty("RESOLUTIONSCALE", 1.);
41 
42  G4double opt_en[] = {1.551*eV, 3.545*eV}; // 350 - 800 nm
43  G4double opt_r[] = {2.4, 2.4};
44  G4double opt_abs[] = {200*cm, 200*cm};
45 
46  tab->AddProperty("RINDEX", opt_en, opt_r, ntab);
47  tab->AddProperty("ABSLENGTH", opt_en, opt_abs, ntab);
48 
49  mat->SetMaterialPropertiesTable(tab);
50 
51 }//CrystalTable
52 
53 //_____________________________________________________________________________
54 void OpTable::SurfaceTable(G4LogicalVolume *vol) {
55 
56  //crystal optical surface
57 
58  G4OpticalSurface *surface = new G4OpticalSurface("CrystalSurface", unified, polished, dielectric_metal);
59  //G4LogicalSkinSurface *csurf =
60  new G4LogicalSkinSurface("CrystalSurfaceL", vol, surface);
61 
62  //surface material
63  const G4int ntab = 2;
64  G4double opt_en[] = {1.551*eV, 3.545*eV}; // 350 - 800 nm
65  G4double reflectivity[] = {0.8, 0.8};
66  G4double efficiency[] = {0.9, 0.9};
67  G4MaterialPropertiesTable *surfmat = new G4MaterialPropertiesTable();
68  surfmat->AddProperty("REFLECTIVITY", opt_en, reflectivity, ntab);
69  surfmat->AddProperty("EFFICIENCY", opt_en, efficiency, ntab);
70  surface->SetMaterialPropertiesTable(surfmat);
71  //csurf->DumpInfo();
72 
73 }//SurfaceTable
74 
75 //_____________________________________________________________________________
76 void OpTable::MakeBoundary(G4VPhysicalVolume *crystal, G4VPhysicalVolume *opdet) {
77 
78  //optical boundary between the crystal and optical photons detector
79 
80  G4OpticalSurface *surf = new G4OpticalSurface("OpDetS");
81  //surf->SetType(dielectric_dielectric); // photons go to the detector, must have rindex defined
82  surf->SetType(dielectric_metal); // photon is absorbed when reaching the detector, no material rindex required
83  //surf->SetFinish(ground);
84  surf->SetFinish(polished);
85  //surf->SetModel(unified);
86  surf->SetModel(glisur);
87 
88  new G4LogicalBorderSurface("OpDetB", crystal, opdet, surf);
89 
90  const G4int ntab = 2;
91  G4double opt_en[] = {1.551*eV, 3.545*eV}; // 350 - 800 nm
92  //G4double reflectivity[] = {0., 0.};
93  G4double reflectivity[] = {0.1, 0.1};
94  //G4double reflectivity[] = {0.9, 0.9};
95  //G4double reflectivity[] = {1., 1.};
96  G4double efficiency[] = {1., 1.};
97 
98  G4MaterialPropertiesTable *surfmat = new G4MaterialPropertiesTable();
99  surfmat->AddProperty("REFLECTIVITY", opt_en, reflectivity, ntab);
100  surfmat->AddProperty("EFFICIENCY", opt_en, efficiency, ntab);
101  surf->SetMaterialPropertiesTable(surfmat);
102 
103 
104 
105 }//MakeBoundary
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127