Skip to content
Snippets Groups Projects
Commit 0c23facb authored by Whitney Armstrong's avatar Whitney Armstrong
Browse files

Added dd4hep tracking surfaces for TrapEndcapTracker

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