Skip to content
Snippets Groups Projects
Commit d442744e authored by Chao Peng's avatar Chao Peng
Browse files

update LGC

parent 11f72a14
Branches
No related tags found
No related merge requests found
Pipeline #92486 passed with warnings
......@@ -19,7 +19,10 @@
vis="RedVis">
<placement x="0*cm" y="0*cm" z="260*cm" />
<dimensions numsides="30" rmin="10*cm" rmax1="80*cm" rmax2="120*cm" zmin="20*cm" zmax="220*cm"/>
<dimensions numsides="30">
<main rmin1="71*cm" rmax1="265*cm" rmin2="85*cm" rmax2="265*cm" length="155*cm" />
<snout rmin1="58*cm" rmax1="127*cm" rmin2="58*cm" rmax2="144*cm" length="107*cm" />
</dimensions>
<radiator material="N2Optical"/>
<comment>
......@@ -27,12 +30,12 @@
</comment>
<mirrors>
<support material="Copper"/>
<piece id="1" material="PyrexGlassOptical">
<piece id="1" material="N2Optical" surface="MirrorOpticalSurface">
<dimensions radius="277.51*cm" length="114.53*cm" width1="16.26*cm" width2="36.03*cm" thickness="2.0*mm"/>
<placement x="0*cm" y="129.9*cm" z="30.3125*cm"/>
<rotation x="135.0*degree" y="180*degree" z="180*degree"/>
</piece>
<piece id="2" material="PyrexGlassOptical">
<piece id="2" material="PyrexGlassOptical" surface="MirrorOpticalSurface">
<dimensions radius="157.99*cm" length="59.260*cm" width1="37.06*cm" width2="45.95*cm" thickness="2.0*mm"/>
<placement x="0*cm" y="211.411*cm" z="50.6678*cm"/>
<rotation x="85.0*degree" y="180*degree" z="180*degree"/>
......@@ -42,13 +45,16 @@
<comment>
Light Gas Cherenkov: Winston cones
</comment>
<winston_cone material="PyrexGlassOptical">
<winston_cone material="PyrexGlassOptical" surface="MirrorOpticalSurface">
<placement x="0*cm" y="255*cm" z="-40*cm"/>
<rotation x="55.0*degree" y="0" z="0"/>
<cone_dimensions thickness="4*mm" length="30.*cm" radius1="7.0*cm" radius2="21.0*cm"/>
<cone_dimensions thickness="4*mm" length="30.*cm" radius1="7.0*cm" radius2="15.0*cm"/>
<tube_dimensions radius="11.28*cm" length="30.*cm"/>
</winston_cone>
<pmt_array surface="PMTOpticalSurface">
<dimensions x="20*cm" y="20*cm"/>
</pmt_aarray>
<comment>
Light Gas Cherenkov End
......
......@@ -45,7 +45,7 @@
</comment>
<matrix name= "REFLECTIVITY_LGCMirror" coldim="2" values="
<matrix name= "REFLECTIVITY_Mirror" coldim="2" values="
1.0*eV 0.8
4.0*eV 0.8
5.1*eV 0.8
......@@ -147,7 +147,7 @@
</materials>
<surfaces>
<opticalsurface finish="polished" model="glisur" name="MirrorOpticalSurface" type="dielectric_metal" value="0">
<property name="REFLECTIVITY" ref="REFLECTIVITY_LGCMirror"/>
<property name="REFLECTIVITY" ref="REFLECTIVITY_Mirror"/>
<property name="RINDEX" coldim="2" values="1.034*eV 1.5 4.136*eV 1.5"/>
<!--<property name="EFFICIENCY" ref="EFFICIENCY0x8b77240"/>-->
</opticalsurface>
......
......@@ -33,31 +33,15 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
sens.setType("tracker");
auto dims = x_det.dimensions();
auto r0 = dims.rmin();
auto r1 = dims.rmax1();
auto r2 = dims.rmax2();
auto zmin = dims.zmin();
auto zmax = dims.zmax();
int nsec = dims.numsides();
xml_dim_t dims_tank = dims.child(_Unicode(main));
xml_dim_t dims_snout = dims.child(_Unicode(snout));
xml_dim_t x_place = x_det.child(_U(placement));
auto pos_x = x_place.x();
auto pos_y = x_place.y();
auto pos_z = x_place.z();
double LGC_inner_radius1 = 71.0*cm;
double LGC_inner_radius2 = 85.0*cm;
double LGC_outer_radius1 = 265.0*cm;
double LGC_main_length = 105.0*cm;
double LGC_snout_length = 107.0*cm;
double LGC_snout_inner_radius1 = 58.0*cm;
double LGC_snout_inner_radius2 = LGC_inner_radius1;
double LGC_snout_outer_radius1 = 127.0*cm;
double LGC_snout_outer_radius2 = 144.0*cm;
double LGC_entrance_window_thickness = 0.05*mm; // something tells this might be 5 mil, not mm
double LGC_exit_window_thickness = 0.1*mm; // same here
double LGC_pmt_array_size = 20.0*cm;
// Everything that goes in the tank will be copies of the sector assembly volume
Assembly v_sector("cherenkov_sector_1");
DetElement de_sector("de_sector" + std::to_string(1), 1);
......@@ -65,11 +49,9 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
// gas tank
auto x_rad = x_det.child(_U(radiator));
auto rad_mat = desc.material(x_rad.attr<std::string>(_U(material)));
ConeSegment tank_main(0.5 * LGC_main_length, LGC_inner_radius1, LGC_outer_radius1,
LGC_inner_radius2, LGC_outer_radius1);
ConeSegment tank_snout(0.5 * LGC_snout_length, LGC_snout_inner_radius1, LGC_snout_outer_radius1,
LGC_snout_inner_radius2, LGC_snout_outer_radius2);
UnionSolid tank_solid(tank_main,tank_snout,Position(0, 0, -0.5 * LGC_main_length - 0.5 * LGC_snout_length));
ConeSegment tank_main(dims_tank.length()/2., dims_tank.rmin1(), dims_tank.rmax1(), dims_tank.rmin2(), dims_tank.rmax2());
ConeSegment tank_snout(dims_snout.length()/2., dims_snout.rmin1(), dims_snout.rmax1(), dims_snout.rmin2(), dims_snout.rmax2());
UnionSolid tank_solid(tank_main,tank_snout,Position(0, 0, -(dims_tank.length() + dims_snout.length())/2.));
Volume v_tank("vol_gas_tank", tank_solid, rad_mat);
v_tank.setVisAttributes(desc, dd4hep::getAttrOrDefault<std::string>(x_det, _Unicode(vis), "BlueVis"));
Volume motherVol = desc.pickMotherVolume(det);
......@@ -77,10 +59,8 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
envPV.addPhysVolID("system", det_id);
det.setPlacement(envPV);
// optical surfaces
// optical surface manager
OpticalSurfaceManager surfMgr = desc.surfaceManager();
OpticalSurface mirrorSurf = surfMgr.opticalSurface("MirrorOpticalSurface");
OpticalSurface pmtSurf = surfMgr.opticalSurface("PMTOpticalSurface");
// mirrors
auto x_mirrors = x_det.child(_Unicode(mirrors));
......@@ -96,17 +76,20 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
Trd1 mir_cutout(mdim.attr<double>(_Unicode(width1))/2., mdim.attr<double>(_Unicode(width2))/2.,
mdim.length()/2., mdim.length()/2.);
auto mir_trans = RotationX(M_PI/2.)*Transform3D(Position(0., 0., -mdim.radius()));
Volume v_mir("vol_mirror_" + std::to_string(i), IntersectionSolid(mir_cutout, mir_shell, mir_trans), mmat);
auto mir_trans2 = Transform3D(Position(mloc.x(), mloc.y(), mloc.z()))*RotationZYX(mrot.z(), mrot.y(), mrot.x());
PlacedVolume pv_mir = v_sector.placeVolume(v_mir, mir_trans2);
DetElement de_mir(det, "de_mirror" + std::to_string(i), i);
pv_mir.addPhysVolID("mirror", i);
de_mir.setPlacement(pv_mir);
v_mir.setSensitiveDetector(sens);
// v_mir.setSensitiveDetector(sens);
auto surface = surfMgr.opticalSurface(x_mir.attr<std::string>(_Unicode(surface)));
// optical surface
// SkinSurface mirrorBorder_Surf(desc, de_mir, "LGCmirror", mirrorSurf, v_mir);
// mirrorBorder_Surf.isValid();
SkinSurface mirror_skin(desc, de_mir, "mirror_surface_" + std::to_string(i), surface, v_mir);
mirror_skin.isValid();
i++;
}
......@@ -152,13 +135,20 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
Transform3D(Position(0, 0, tube_length / 2.0 + 5.0 * mm)));
de_winston_cone.setPlacement(pv_winston_cone_solid);
// optical surface
SkinSurface winstonBorder_Surf(desc, de_winston_cone, "LGCWinstonCone", mirrorSurf, v_winston_cone_solid);
winstonBorder_Surf.isValid();
auto surface = surfMgr.opticalSurface(x_winston.attr<std::string>(_Unicode(surface)));
SkinSurface winston_skin(desc, de_winston_cone, "winston_surface", surface, v_winston_cone_solid);
winston_skin.isValid();
// ---------------
// Dummy PMT surface
auto x_pmt = x_det.child(_Unicode(pmt_array));
xml_dim_t dims_pmt = x_pmt.child(_Unicode(dimensions));
auto pmt_x = dims_pmt.x();
auto pmt_y = dims_pmt.y();
auto pmt_surf = surfMgr.opticalSurface(x_pmt.attr<std::string>(_Unicode(surface)));
//// ---------------
//// Dummy PMT surface
DetElement de_pmt_array(det, "PMT_DE", 1);
Box pmt_array(LGC_pmt_array_size / 2.0, LGC_pmt_array_size / 2.0, 5 * mm / 2.0);
Box pmt_array(pmt_x/2., pmt_y/2., 5 * mm / 2.0);
Volume v_pmt_array("v_pmt_array", pmt_array, rad_mat);
PlacedVolume pv_pmt_array =
v_sector.placeVolume(v_pmt_array, Transform3D(Position(wpl.x(), wpl.y(), wpl.z())) *
......@@ -169,14 +159,15 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
v_pmt_array.setSensitiveDetector(sens);
// optical surface
SkinSurface pmtBorder_Surf(desc, de_pmt_array, "LGCPMTsurface", pmtSurf, v_pmt_array);
pmtBorder_Surf.isValid();
SkinSurface pmt_skin(desc, de_pmt_array, "LGCPMTsurface", pmt_surf, v_pmt_array);
pmt_skin.isValid();
// copper layer inside to stop photons
Box pmt_array_backing(LGC_pmt_array_size/2.0, LGC_pmt_array_size/2.0, 1*mm/2.0);
Box pmt_array_backing(pmt_x/2., pmt_y/2., 1*mm/2.0);
auto Copper = desc.material("Copper");
Volume v_pmt_array_backing("v_pmt_array_backing", pmt_array_backing, Copper);
PlacedVolume pv_pmt_array_backing = v_pmt_array.placeVolume(v_pmt_array_backing, Position(0,0,0));
// PlacedVolume pv_pmt_array_backing =
v_pmt_array.placeVolume(v_pmt_array_backing, Position(0,0,0));
return det;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment