57 "housing", pMotherLogical, pMany, pCopyNo)
70 new G4Box(
"housing_box", housing_x / 2., housing_y / 2., housing_z / 2.);
75 fHousing_box, G4Material::GetMaterial(
"Al"),
"housing_log");
81 fSphere =
new G4Sphere(
"sphere", 0., 2. * cm, 0. * deg, 360. * deg, 0. * deg,
86 new G4PVPlacement(
nullptr, G4ThreeVector(5. * cm, 5. * cm, 5. * cm),
90 G4double innerRadius_pmt = 0.;
91 G4double height_pmt =
fD_mtl / 2.;
92 G4double startAngle_pmt = 0.;
93 G4double spanningAngle_pmt = 360. * deg;
96 startAngle_pmt, spanningAngle_pmt);
102 height_pmt / 2., startAngle_pmt, spanningAngle_pmt);
107 fPhotocath, G4Material::GetMaterial(
"Al"),
"photocath_log");
109 new G4PVPlacement(
nullptr, G4ThreeVector(0., 0., -height_pmt / 2.),
119 G4double xmin = -
fScint_x / 2. - dx / 2.;
120 G4double ymin = -
fScint_y / 2. - dy / 2.;
121 G4double zmin = -
fScint_z / 2. - dz / 2.;
125 PlacePMTs(
fPmt_log,
nullptr, x, y, dx, dy, xmin, ymin,
fNx,
fNy, x, y, z, k);
127 auto rm_z =
new G4RotationMatrix();
128 rm_z->rotateY(180. * deg);
130 PlacePMTs(
fPmt_log, rm_z, x, y, dx, dy, xmin, ymin,
fNx,
fNy, x, y, z, k);
132 auto rm_y1 =
new G4RotationMatrix();
133 rm_y1->rotateY(-90. * deg);
135 PlacePMTs(
fPmt_log, rm_y1, y, z, dy, dz, ymin, zmin,
fNy,
fNz, x, y, z, k);
137 auto rm_y2 =
new G4RotationMatrix();
138 rm_y2->rotateY(90. * deg);
140 PlacePMTs(
fPmt_log, rm_y2, y, z, dy, dz, ymin, zmin,
fNy,
fNz, x, y, z, k);
142 auto rm_x1 =
new G4RotationMatrix();
143 rm_x1->rotateX(90. * deg);
145 PlacePMTs(
fPmt_log, rm_x1, x, z, dx, dz, xmin, zmin,
fNx,
fNz, x, y, z, k);
147 auto rm_x2 =
new G4RotationMatrix();
148 rm_x2->rotateX(-90. * deg);
150 PlacePMTs(
fPmt_log, rm_x2, x, z, dx, dz, xmin, zmin,
fNx,
fNz, x, y, z, k);
177 G4double&
a, G4double& b, G4double da,
178 G4double db, G4double amin, G4double bmin,
179 G4int na, G4int nb, G4double& x, G4double& y,
180 G4double& z, G4int& k)
196 for(G4int j = 1; j <= na; ++j)
200 for(G4int i = 1; i <= nb; ++i)
203 new G4PVPlacement(rot, G4ThreeVector(x, y, z), pmt_log,
"pmt",
227 std::vector<G4double> ephoton = { 7.0 * eV, 7.14 * eV };
230 std::vector<G4double> reflectivity = {
fRefl,
fRefl };
231 std::vector<G4double> efficiency = { 0.0, 0.0 };
233 scintHsngPT->AddProperty(
"REFLECTIVITY", ephoton, reflectivity);
234 scintHsngPT->AddProperty(
"EFFICIENCY", ephoton, efficiency);
235 auto OpScintHousingSurface =
236 new G4OpticalSurface(
"HousingSurface", unified, polished, dielectric_metal);
237 OpScintHousingSurface->SetMaterialPropertiesTable(scintHsngPT);
240 std::vector<G4double> sphereReflectivity = { 1.0, 1.0 };
241 std::vector<G4double> sphereEfficiency = { 0.0, 0.0 };
243 spherePT->AddProperty(
"REFLECTIVITY", ephoton, sphereReflectivity);
244 spherePT->AddProperty(
"EFFICIENCY", ephoton, sphereEfficiency);
245 auto OpSphereSurface =
247 OpSphereSurface->SetMaterialPropertiesTable(spherePT);
250 std::vector<G4double> photocath_EFF = { 1., 1. };
251 std::vector<G4double> photocath_ReR = { 1.92, 1.92 };
252 std::vector<G4double> photocath_ImR = { 1.69, 1.69 };
254 photocath_mt->AddProperty(
"EFFICIENCY", ephoton, photocath_EFF);
255 photocath_mt->AddProperty(
"REALRINDEX", ephoton, photocath_ReR);
256 photocath_mt->AddProperty(
"IMAGINARYRINDEX", ephoton, photocath_ImR);
258 "photocath_opsurf", glisur, polished, dielectric_metal);
259 photocath_opsurf->SetMaterialPropertiesTable(photocath_mt);
263 OpScintHousingSurface);
Definition of the LXeMainVolume class.
LXeMainVolume(G4RotationMatrix *pRot, const G4ThreeVector &tlate, G4LogicalVolume *pMotherLogical, G4bool pMany, G4int pCopyNo, LXeDetectorConstruction *c)
G4LogicalVolume * fScint_log
G4LogicalVolume * fPhotocath_log
G4LogicalVolume * fHousing_log
G4double fOuterRadius_pmt
G4LogicalVolume * fPmt_log
G4LogicalVolume * fSphere_log
void PlacePMTs(G4LogicalVolume *pmt_Log, G4RotationMatrix *rot, G4double &a, G4double &b, G4double da, G4double db, G4double amin, G4double bmin, G4int na, G4int nb, G4double &x, G4double &y, G4double &z, G4int &k)
LXeDetectorConstruction * fConstructor
std::vector< G4ThreeVector > fPmtPositions