diff --git a/compact/central_tracker.xml b/compact/central_tracker.xml index 97a5fdb43d5cc9ea4144ac499f8983d84a57d606..e1eb51e9d6a2a1f1e11af9e581e5d39c65242345 100644 --- a/compact/central_tracker.xml +++ b/compact/central_tracker.xml @@ -410,7 +410,7 @@ zstart="TrackerEndcapOuter_zmin" /> <ring vis="AnlRed" r="TrackerEndcapOuter_rmin1+TrackerEndcapOuterMod1_y/2.0" - zstart="TrackerEndcapOuter_zmin + 1.0*cm" + zstart="0.0*cm" nmodules="12" dz="10 * mm" module="Module1" /> </layer> </detector> diff --git a/src/TrapEndcapTracker_geo.cpp b/src/TrapEndcapTracker_geo.cpp index ed8018959f03e34df1e57efb8779079842a3e0e8..5a0d5064c06e27f544c6aeb3115cc5ec03dedee1 100644 --- a/src/TrapEndcapTracker_geo.cpp +++ b/src/TrapEndcapTracker_geo.cpp @@ -105,6 +105,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s double layer_rmax = l_env.attr<double>(_Unicode(rmax)); double layer_length = l_env.attr<double>(_Unicode(length)); double layer_zstart = l_env.attr<double>(_Unicode(zstart)); + double layer_center_z = layer_zstart + layer_length/2.0; //printout(INFO,"ROOTGDMLParse","+++ Read geometry from GDML file file:%s",input.c_str()); //std::cout << "SiTracker Endcap layer " << l_id << " zstart = " << layer_zstart/dd4hep::mm << "mm ( " << layer_length/dd4hep::mm << " mm thick )\n"; @@ -116,11 +117,16 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s PlacedVolume layer_pv; if (reflect) { - layer_pv = assembly.placeVolume(layer_vol, Position(0,0,-1.0e-9));//-layer_zstart-layer_length/2)); + + layer_pv = assembly.placeVolume( + layer_vol, + Transform3D(RotationZYX(0.0, -M_PI, 0.0), Position(0, 0, -layer_center_z))); + //-layer_zstart-layer_length/2)); layer_pv.addPhysVolID("barrel", 3).addPhysVolID("layer", l_id); layer_name += "_N"; } else { - layer_pv = assembly.placeVolume(layer_vol);//, Position(0, 0, +layer_zstart + layer_length / 2)); + layer_pv = assembly.placeVolume(layer_vol, Position(0, 0, layer_center_z)); + //, Position(0, 0, +layer_zstart + layer_length / 2)); layer_pv.addPhysVolID("barrel", 2).addPhysVolID("layer", l_id); layer_name += "_P"; } @@ -148,20 +154,21 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s string m_base = _toString(l_id, "layer%d") + _toString(mod_num, "_module%d"); double x = -r * std::cos(phi); double y = -r * std::sin(phi); - DetElement module(sdet, m_base + "_pos", det_id); - pv = assembly.placeVolume(m_vol, - Transform3D(RotationZYX(0, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, zstart + dz))); - pv.addPhysVolID("barrel", 1).addPhysVolID("layer", l_id).addPhysVolID("module", mod_num); - module.setPlacement(pv); - for (size_t ic = 0; ic < sensVols.size(); ++ic) { - PlacedVolume sens_pv = sensVols[ic]; - DetElement comp_elt(module, sens_pv.volume().name(), mod_num); - comp_elt.setPlacement(sens_pv); - } - if (reflect) { + if (!reflect) { + DetElement module(sdet, m_base + "_pos", det_id); + pv = assembly.placeVolume( + m_vol, Transform3D(RotationZYX(0, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, zstart + dz))); + pv.addPhysVolID("barrel", 1).addPhysVolID("layer", l_id).addPhysVolID("module", mod_num); + module.setPlacement(pv); + for (size_t ic = 0; ic < sensVols.size(); ++ic) { + PlacedVolume sens_pv = sensVols[ic]; + DetElement comp_elt(module, sens_pv.volume().name(), mod_num); + comp_elt.setPlacement(sens_pv); + } + } else { pv = assembly.placeVolume( - m_vol, Transform3D(RotationZYX(M_PI, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, -zstart - dz))); + m_vol, Transform3D(RotationZYX(0, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, -zstart - dz))); pv.addPhysVolID("barrel", 2).addPhysVolID("layer", l_id).addPhysVolID("module", mod_num); DetElement r_module(sdet, m_base + "_neg", det_id); r_module.setPlacement(pv);