diff --git a/compact/LGC.xml b/compact/LGC.xml index 0e7937c204f278c51339444f1278b3314819bed3..8fde58649d448b595631c6407abca3b551f1c0f0 100644 --- a/compact/LGC.xml +++ b/compact/LGC.xml @@ -49,10 +49,10 @@ <comment> Light Gas Cherenkov: Winston cones </comment> -<winston_cone> +<winston_cone material="PyrexGlass"> <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" inset_length="7.90909*cm"/> + <cone_dimensions thickness="4*mm" length="30.*cm" radius1="7.0*cm" radius2="21.0*cm"/> <tube_dimensions radius="11.28*cm" length="30.*cm"/> </winston_cone> diff --git a/src/GasCherenkov_geo.cpp b/src/GasCherenkov_geo.cpp index b476aae4380bdad6b5fd81da0752f689de265e28..cfb46d1626768b06ae9a2567a17043abbf554fb0 100644 --- a/src/GasCherenkov_geo.cpp +++ b/src/GasCherenkov_geo.cpp @@ -91,7 +91,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec 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(0., mloc.y(), mloc.z()))*RotationZYX(mrot.z(), mrot.y(), mrot.x()); + 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); } @@ -107,37 +107,34 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec // --------------- // Winston Cone - auto x_winston = x_det.child(_Unicode(winston_cone)); - - xml_dim_t cdims = x_winston.child(_Unicode(cone_dimensions)); - double cone_thickness = cdims.thickness(); - double cone_length = cdims.length1(); - double cone_radius1 = cdims.radius1(); - double cone_radius2 = cdims.radius2(); - double cone_inset_length = cdims.inset_length(); - - xml_dim_t tdims = x_winston.child(_Unicode(tube_dimensions)); - double tube_radius = tdims.radius(); - double tube_length = tdims.length(); - auto winston_mat = desc.material(x_winstone.materialStr()); - - DetElement de_wcone(det, "de_winston_cone1", 1); - Tube winston_tube(LGC_winston_tube_inner_radius, - LGC_winston_tube_inner_radius + LGC_winston_cone_thickness, - LGC_winston_tube_length / 2.0); - Paraboloid winston_cone1(LGC_winston_cone_inner_radius1 + LGC_winston_cone_thickness, - LGC_winston_cone_inner_radius2 + LGC_winston_cone_thickness, - LGC_winston_cone_length / 2.0 ); - Paraboloid winston_cone2(LGC_winston_cone_inner_radius1, - LGC_winston_cone_inner_radius2, - LGC_winston_cone_length / 2.0 ); - SubtractionSolid winston_cone(winston_cone1, winston_cone2); + auto x_winston = x_det.child(_Unicode(winston_cone)); + auto winston_mat = desc.material(x_winston.attr<std::string>(_Unicode(material))); + + xml_dim_t wpl = x_winston.child(_U(placement)); + xml_dim_t wrot = x_winston.child(_U(rotation)); + + xml_dim_t cdims = x_winston.child(_Unicode(cone_dimensions)); + double cone_thickness = cdims.thickness(); + double cone_length = cdims.attr<double>(_Unicode(length)); + double cone_radius1 = cdims.attr<double>(_Unicode(radius1)); + double cone_radius2 = cdims.attr<double>(_Unicode(radius2)); + // double cone_inset_length = cdims.attr<double>(_Unicode(inset_length)); + + xml_dim_t tdims = x_winston.child(_Unicode(tube_dimensions)); + double tube_radius = tdims.radius(); + double tube_length = tdims.length(); + + DetElement de_wcone(det, "de_winston_cone1", 1); + Tube winston_tube(tube_radius, tube_radius + cone_thickness, tube_length / 2.0); + Paraboloid winston_cone1(cone_radius1 + cone_thickness, cone_radius2 + cone_thickness, cone_length / 2.0 ); + Paraboloid winston_cone2(cone_radius1, cone_radius2, cone_length / 2.0 ); + SubtractionSolid winston_cone(winston_cone1, winston_cone2); Volume v_winston_cone_solid("v_winston_cone_solid", winston_cone, winston_mat); PlacedVolume pv_winston_cone_solid = v_sector.placeVolume( - v_winston_cone_solid, Transform3D(Position(0, LGC_pmt_y_pos, LGC_pmt_z_pos)) * - RotationX(LGC_pmt_tilt_angle) * - Transform3D(Position(0, 0, LGC_winston_tube_length / 2.0 + 5.0 * mm))); + v_winston_cone_solid, Transform3D(Position(wpl.x(), wpl.y(), wpl.z())) * + RotationZYX(wrot.z(), wrot.y(), wrot.x()) * + Transform3D(Position(0, 0, tube_length / 2.0 + 5.0 * mm))); //// --------------- return det;