diff --git a/src/BarrelTrackerWithFrame_geo.cpp b/src/BarrelTrackerWithFrame_geo.cpp index 719692841f0cbd98eec577ceb73b01be30e2ce0e..99b860ed876349091ec39f1d908af66cc9ab05cd 100644 --- a/src/BarrelTrackerWithFrame_geo.cpp +++ b/src/BarrelTrackerWithFrame_geo.cpp @@ -1,13 +1,9 @@ -/** \addtogroup VertexTracker Vertex Trackers - * \brief Type: **SiVertexBarrel**. +/** \addtogroup Trackers Trackers + * \brief Type: **BarrelTrackerWithFrame**. * \author W. Armstrong * * \ingroup trackers * - * - * \code - * \endcode - * * @{ */ #include "DD4hep/DetFactoryHelper.h" @@ -34,7 +30,10 @@ using namespace dd4hep::detail; * - Optional "frame" tag within the module element. * - Optional "support" tag within the detector element. * + * \ingroup trackers * + * \code + * \endcode */ static Ref_t create_BarrelTrackerWithFrame(Detector& description, xml_h e, SensitiveDetector sens) { typedef vector<PlacedVolume> Placements; @@ -43,16 +42,15 @@ static Ref_t create_BarrelTrackerWithFrame(Detector& description, xml_h e, Sensi int det_id = x_det.id(); string det_name = x_det.nameStr(); DetElement sdet(det_name, det_id); - //Assembly assembly(det_name); - map<string, Volume> volumes; - map<string, Placements> sensitives; - map<string, std::vector<VolPlane>> volplane_surfaces; - //map<string, xml_h> xmleles; - PlacedVolume pv; - dd4hep::xml::Dimension dimensions(x_det.dimensions()); + map<string, Volume> volumes; + map<string, Placements> sensitives; + map<string, std::vector<VolPlane>> volplane_surfaces; map<string, std::array<double, 2>> module_thicknesses; + PlacedVolume pv; + dd4hep::xml::Dimension dimensions(x_det.dimensions()); + Acts::ActsExtension* detWorldExt = new Acts::ActsExtension(); detWorldExt->addType("barrel", "detector"); sdet.addExtension<Acts::ActsExtension>(detWorldExt); @@ -169,29 +167,26 @@ static Ref_t create_BarrelTrackerWithFrame(Detector& description, xml_h e, Sensi sensitives[m_nam].push_back(pv); module_thicknesses[m_nam] = {thickness_so_far + x_comp.thickness()/2.0, total_thickness-thickness_so_far - x_comp.thickness()/2.0}; + // -------- create a measurement plane for the tracking surface attched to the sensitive volume ----- + Vector3D u(0., 1., 0.); + Vector3D v(0., 0., 1.); + Vector3D n(1., 0., 0.); + // Vector3D o( 0. , 0. , 0. ) ; - // -------- create a measurement plane for the tracking surface attched to the sensitive volume ----- - Vector3D u( 0. , 1. , 0. ) ; - Vector3D v( 0. , 0. , 1. ) ; - Vector3D n( 1. , 0. , 0. ) ; - // Vector3D o( 0. , 0. , 0. ) ; - - // compute the inner and outer thicknesses that need to be assigned to the tracking surface - // depending on wether the support is above or below the sensor - double inner_thickness = module_thicknesses[m_nam][0]; - double outer_thickness = module_thicknesses[m_nam][1]; - - SurfaceType type( SurfaceType::Sensitive ) ; + // compute the inner and outer thicknesses that need to be assigned to the tracking surface + // depending on wether the support is above or below the sensor + double inner_thickness = module_thicknesses[m_nam][0]; + double outer_thickness = module_thicknesses[m_nam][1]; - //if( isStripDetector ) - // type.setProperty( SurfaceType::Measurement1D , true ) ; + SurfaceType type(SurfaceType::Sensitive); - VolPlane surf( c_vol , type , inner_thickness , outer_thickness , u,v,n ) ; //,o ) ; - volplane_surfaces[m_nam].push_back(surf); - - //-------------------------------------------- + // if( isStripDetector ) + // type.setProperty( SurfaceType::Measurement1D , true ) ; + VolPlane surf(c_vol, type, inner_thickness, outer_thickness, u, v, n); //,o ) ; + volplane_surfaces[m_nam].push_back(surf); + //-------------------------------------------- } thickness_sum += x_comp.thickness(); thickness_so_far += x_comp.thickness(); @@ -274,9 +269,7 @@ static Ref_t create_BarrelTrackerWithFrame(Detector& description, xml_h e, Sensi // xml_det_t(xmleles[m_nam]).visStr()); // - volSurfaceList( comp_de )->push_back( volplane_surfaces[m_nam][ic] ) ; - - + volSurfaceList(comp_de)->push_back(volplane_surfaces[m_nam][ic]); } /// Increase counters etc. diff --git a/src/TrapEndcapTracker_geo.cpp b/src/TrapEndcapTracker_geo.cpp index 56fe7d11cf9e18d72f4e2a68b56191a1d41c19f4..b20e6d161b7209bfe8313e949bfde636e2740be5 100644 --- a/src/TrapEndcapTracker_geo.cpp +++ b/src/TrapEndcapTracker_geo.cpp @@ -1,14 +1,29 @@ +/** \addtogroup Trackers Trackers + * \brief Type: **BarrelTrackerWithFrame**. + * \author W. Armstrong + * + * \ingroup trackers + * + * @{ + */ #include <map> #include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DD4hep/Shapes.h" +#include "DDRec/Surface.h" +#include "DDRec/DetectorData.h" +#include "XML/Utilities.h" +#include "XML/Layering.h" + #include "Acts/Plugins/DD4hep/ActsExtension.hpp" #include "Acts/Definitions/Units.hpp" -#include "XML/Utilities.h" using namespace std; using namespace dd4hep; +using namespace dd4hep::rec; using namespace dd4hep::detail; -/*! Endcap Trapezoidal Tracker. +/** Endcap Trapezoidal Tracker. * * @author Whitney Armstrong * @@ -24,13 +39,14 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s DetElement sdet(det_name, det_id); Assembly assembly(det_name); - Material air = description.material("Air"); // Volume assembly (det_name,Box(10000,10000,10000),vacuum); Volume motherVol = description.pickMotherVolume(sdet); int m_id = 0, c_id = 0, n_sensor = 0; map<string, Volume> modules; map<string, Placements> sensitives; + map<string, std::vector<VolPlane>> volplane_surfaces; + map<string, std::array<double, 2>> module_thicknesses; PlacedVolume pv; @@ -88,12 +104,15 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s double x1 = trd.x1(); double x2 = trd.x2(); double z = trd.z(); - double y1, y2, total_thickness = 0.; + double total_thickness = 0.; xml_coll_t ci(x_mod, _U(module_component)); for (ci.reset(), total_thickness = 0.0; ci; ++ci) total_thickness += xml_comp_t(ci).thickness(); - y1 = y2 = total_thickness / 2; + double thickness_so_far = 0.0; + double thickness_sum = -total_thickness / 2.0; + double y1 = total_thickness / 2; + double y2 = total_thickness / 2; Trapezoid m_solid(x1, x2, y1, y2, z); Volume m_volume(m_nam, m_solid, vacuum); m_volume.setVisAttributes(description.visAttributes(x_mod.visStr())); @@ -142,6 +161,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s c_vol.setVisAttributes(description.visAttributes(c.visStr())); pv = m_volume.placeVolume(c_vol, Position(0, posY + c_thick / 2, 0)); if (c.isSensitive()) { + module_thicknesses[m_nam] = {thickness_so_far + c_thick/2.0, total_thickness-thickness_so_far - c_thick/2.0}; //std::cout << " adding sensitive volume" << c_name << "\n"; sdet.check(n_sensor > 2, "SiTrackerEndcap2::fromCompact: " + c_name + " Max of 2 modules allowed!"); pv.addPhysVolID("sensor", n_sensor); @@ -149,8 +169,30 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s c_vol.setSensitiveDetector(sens); sensitives[m_nam].push_back(pv); ++n_sensor; + // -------- create a measurement plane for the tracking surface attched to the sensitive volume ----- + Vector3D u(1., 0., 0.); + Vector3D v(0., 1., 0.); + Vector3D n(0., 0., 1.); + // Vector3D o( 0. , 0. , 0. ) ; + + // compute the inner and outer thicknesses that need to be assigned to the tracking surface + // depending on wether the support is above or below the sensor + double inner_thickness = module_thicknesses[m_nam][0]; + double outer_thickness = module_thicknesses[m_nam][1]; + + SurfaceType type(SurfaceType::Sensitive); + + // if( isStripDetector ) + // type.setProperty( SurfaceType::Measurement1D , true ) ; + + VolPlane surf(c_vol, type, inner_thickness, outer_thickness, u, v, n); //,o ) ; + volplane_surfaces[m_nam].push_back(surf); + + //-------------------------------------------- } posY += c_thick; + thickness_sum += c_thick; + thickness_so_far += c_thick; } modules[m_nam] = m_volume; } @@ -229,6 +271,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s //std::cout << " adding ACTS extension" << "\n"; Acts::ActsExtension* moduleExtension = new Acts::ActsExtension("XZY"); comp_elt.addExtension<Acts::ActsExtension>(moduleExtension); + volSurfaceList(comp_elt)->push_back(volplane_surfaces[m_nam][ic]); } } else { pv = layer_vol.placeVolume( @@ -243,6 +286,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s //std::cout << " adding ACTS extension" << "\n"; Acts::ActsExtension* moduleExtension = new Acts::ActsExtension("XZY"); comp_elt.addExtension<Acts::ActsExtension>(moduleExtension); + volSurfaceList(comp_elt)->push_back(volplane_surfaces[m_nam][ic]); } } dz = -dz; @@ -257,6 +301,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s return sdet; } +//@} // clang-format off DECLARE_DETELEMENT(athena_TrapEndcapTracker, create_detector) DECLARE_DETELEMENT(athena_GEMTrackerEndcap, create_detector)