CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions
cms::DTGeometryBuilder Class Reference

#include <DTGeometryBuilder.h>

Public Member Functions

void build (DTGeometry &, const DDDetector *, const MuonGeometryConstants &, const dd4hep::SpecParRefs &)
 
 DTGeometryBuilder ()
 

Private Types

using RCPPlane = ReferenceCountingPointer< Plane >
 

Private Member Functions

DTChamberbuildChamber (DDFilteredView &, const MuonGeometryConstants &) const
 
void buildGeometry (DDFilteredView &, DTGeometry &, const MuonGeometryConstants &) const
 
DTLayerbuildLayer (DDFilteredView &, DTSuperLayer *, const MuonGeometryConstants &) const
 
DTSuperLayerbuildSuperLayer (DDFilteredView &, DTChamber *, const MuonGeometryConstants &) const
 
RCPPlane plane (const DDFilteredView &, Bounds *bounds) const
 

Detailed Description

Definition at line 46 of file DTGeometryBuilder.h.

Member Typedef Documentation

◆ RCPPlane

Definition at line 61 of file DTGeometryBuilder.h.

Constructor & Destructor Documentation

◆ DTGeometryBuilder()

cms::DTGeometryBuilder::DTGeometryBuilder ( )
inline

Definition at line 48 of file DTGeometryBuilder.h.

48 {}

Member Function Documentation

◆ build()

void DTGeometryBuilder::build ( DTGeometry geom,
const DDDetector det,
const MuonGeometryConstants num,
const dd4hep::SpecParRefs &  refs 
)

Definition at line 180 of file DTGeometryBuilder.cc.

References relativeConstraints::geom, cms::DDFilteredView::mergedSpecifics(), EgammaValidation_cff::num, and cms::DDDetector::worldVolume().

Referenced by DTGeometryESProducer::setupGeometry().

183  {
184  Volume top = det->worldVolume();
185  DDFilteredView fview(det, top);
186  fview.mergedSpecifics(refs);
187  buildGeometry(fview, geom, num);
188 }
void buildGeometry(DDFilteredView &, DTGeometry &, const MuonGeometryConstants &) const
dd4hep::Volume Volume
dd4hep::Volume worldVolume() const
Handle to the world volume containing everything.
Definition: DDDetector.cc:67

◆ buildChamber()

DTChamber * DTGeometryBuilder::buildChamber ( DDFilteredView fview,
const MuonGeometryConstants muonConstants 
) const
private

Definition at line 94 of file DTGeometryBuilder.cc.

References DTNumberingScheme::baseNumberToUnitNumber(), relativeConstraints::chamber, MuonGeometryNumbering::geoHistoryToBaseNumber(), cms::DDFilteredView::history(), and cms::DDFilteredView::parameters().

94  {
95  MuonGeometryNumbering mdddnum(muonConstants);
96  DTNumberingScheme dtnum(muonConstants);
97  int rawid = dtnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fview.history()));
98 
99  DTChamberId detId(rawid);
100  auto const& par = fview.parameters();
101 
102  edm::LogVerbatim("DTGeometryBuilder") << "(1) detId: " << rawid << " par[0]: " << par[0] / dd4hep::cm
103  << " par[1]: " << par[1] / dd4hep::cm << " par[2]: " << par[2] / dd4hep::cm;
104 
105  RCPPlane surf(
106  plane(fview, new RectangularPlaneBounds(par[0] / dd4hep::cm, par[1] / dd4hep::cm, par[2] / dd4hep::cm)));
107 
108  DTChamber* chamber = new DTChamber(detId, surf);
109 
110  return chamber;
111 }
Log< level::Info, true > LogVerbatim
const ExpandedNodes & history()
The numbering history of the current node.
RCPPlane plane(const DDFilteredView &, Bounds *bounds) const
const std::vector< double > parameters() const
extract shape parameters
ReferenceCountingPointer< Plane > RCPPlane

◆ buildGeometry()

void DTGeometryBuilder::buildGeometry ( DDFilteredView fview,
DTGeometry geom,
const MuonGeometryConstants num 
) const
private

Definition at line 53 of file DTGeometryBuilder.cc.

References relativeConstraints::chamber, cms::DDFilteredView::down(), cms::DDFilteredView::firstChild(), relativeConstraints::geom, cmsLHEtoEOSManager::l, cms::DDFilteredView::nextSibling(), EgammaValidation_cff::num, cms::DDFilteredView::parent(), and cms::DDFilteredView::sibling().

53  {
54  edm::LogVerbatim("DTGeometryBuilder") << "(0) DTGeometryBuilder - DD4hep ";
55 
56  bool doChamber = fview.firstChild();
57 
58  while (doChamber) {
59  DTChamber* chamber = buildChamber(fview, num);
60 
61  bool doSL = fview.nextSibling();
62  while (doSL) {
63  DTSuperLayer* sl = buildSuperLayer(fview, chamber, num);
64 
65  fview.down();
66  bool doLayers = fview.sibling();
67  while (doLayers) {
68  DTLayer* l = buildLayer(fview, sl, num);
69  geom.add(l);
70 
71  doLayers = fview.sibling();
72  }
73 
74  geom.add(sl);
75  doSL = fview.nextSibling();
76  }
77  geom.add(chamber);
78 
79  fview.parent();
80  doChamber = fview.firstChild();
81  }
82 }
Log< level::Info, true > LogVerbatim
DTChamber * buildChamber(DDFilteredView &, const MuonGeometryConstants &) const
bool sibling()
set the current node to the next sub sibling
void down()
set current node to the child node in the filtered tree
bool nextSibling()
set the current node to the next sibling
bool parent()
set the current node to the parent node ...
bool firstChild()
set the current node to the first child
DTSuperLayer * buildSuperLayer(DDFilteredView &, DTChamber *, const MuonGeometryConstants &) const
DTLayer * buildLayer(DDFilteredView &, DTSuperLayer *, const MuonGeometryConstants &) const

◆ buildLayer()

DTLayer * DTGeometryBuilder::buildLayer ( DDFilteredView fview,
DTSuperLayer sl,
const MuonGeometryConstants muonConstants 
) const
private

Definition at line 137 of file DTGeometryBuilder.cc.

References DTSuperLayer::add(), DTNumberingScheme::baseNumberToUnitNumber(), cms::DDFilteredView::checkChild(), cms::DDFilteredView::down(), MuonGeometryNumbering::geoHistoryToBaseNumber(), cms::DDFilteredView::history(), cms::DDFilteredView::parameters(), cms::DDFilteredView::sibling(), cms::DDFilteredView::up(), and cms::DDFilteredView::volume().

139  {
140  MuonGeometryNumbering mdddnum(muonConstants);
141  DTNumberingScheme dtnum(muonConstants);
142  int rawid = dtnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fview.history()));
143 
144  DTLayerId layId(rawid);
145 
146  auto const& par = fview.parameters();
147 
148  edm::LogVerbatim("DTGeometryBuilder") << "(3) detId: " << rawid << " par[0]: " << par[0] / dd4hep::cm
149  << " par[1]: " << par[1] / dd4hep::cm << " par[2]: " << par[2] / dd4hep::cm;
150 
151  RCPPlane surf(
152  plane(fview, new RectangularPlaneBounds(par[0] / dd4hep::cm, par[1] / dd4hep::cm, par[2] / dd4hep::cm)));
153 
154  fview.down();
155  bool doWire = fview.sibling();
156  int firstWire = fview.volume()->GetNumber();
157  auto const& wpar = fview.parameters();
158  float wireLength = wpar[1] / dd4hep::cm;
159 
160  edm::LogVerbatim("DTGeometryBuilder") << "(4) detId: " << rawid << " wpar[1]: " << wpar[1] / dd4hep::cm
161  << " firstWire: " << firstWire;
162 
163  int WCounter = 0;
164  while (doWire) {
165  doWire = fview.checkChild();
166  WCounter++;
167  }
168  fview.up();
169 
170  DTTopology topology(firstWire, WCounter, wireLength);
171 
172  DTLayerType layerType;
173 
174  DTLayer* layer = new DTLayer(layId, surf, topology, layerType, sl);
175 
176  sl->add(layer);
177  return layer;
178 }
Log< level::Info, true > LogVerbatim
void up()
set current node to the parent node in the filtered tree
void add(DTLayer *l)
Add layer to the SL which owns it.
Definition: DTSuperLayer.cc:47
bool sibling()
set the current node to the next sub sibling
void down()
set current node to the child node in the filtered tree
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
const ExpandedNodes & history()
The numbering history of the current node.
const PlacedVolume volume() const
The physical volume of the current node.
RCPPlane plane(const DDFilteredView &, Bounds *bounds) const
bool checkChild()
count the number of children matching selection
const std::vector< double > parameters() const
extract shape parameters
ReferenceCountingPointer< Plane > RCPPlane

◆ buildSuperLayer()

DTSuperLayer * DTGeometryBuilder::buildSuperLayer ( DDFilteredView fview,
DTChamber chamber,
const MuonGeometryConstants muonConstants 
) const
private

Definition at line 113 of file DTGeometryBuilder.cc.

References DTNumberingScheme::baseNumberToUnitNumber(), relativeConstraints::chamber, MuonGeometryNumbering::geoHistoryToBaseNumber(), cms::DDFilteredView::history(), and cms::DDFilteredView::parameters().

115  {
116  MuonGeometryNumbering mdddnum(muonConstants);
117  DTNumberingScheme dtnum(muonConstants);
118  int rawid = dtnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fview.history()));
119 
120  DTSuperLayerId slId(rawid);
121 
122  auto const& par = fview.parameters();
123 
124  edm::LogVerbatim("DTGeometryBuilder") << "(2) detId: " << rawid << " par[0]: " << par[0] / dd4hep::cm
125  << " par[1]: " << par[1] / dd4hep::cm << " par[2]: " << par[2] / dd4hep::cm;
126 
127  RCPPlane surf(
128  plane(fview, new RectangularPlaneBounds(par[0] / dd4hep::cm, par[1] / dd4hep::cm, par[2] / dd4hep::cm)));
129 
130  DTSuperLayer* slayer = new DTSuperLayer(slId, surf, chamber);
131 
132  chamber->add(slayer);
133 
134  return slayer;
135 }
Log< level::Info, true > LogVerbatim
const ExpandedNodes & history()
The numbering history of the current node.
RCPPlane plane(const DDFilteredView &, Bounds *bounds) const
const std::vector< double > parameters() const
extract shape parameters
ReferenceCountingPointer< Plane > RCPPlane

◆ plane()

DTGeometryBuilder::RCPPlane DTGeometryBuilder::plane ( const DDFilteredView fview,
Bounds bounds 
) const
private

Definition at line 84 of file DTGeometryBuilder.cc.

References cms::DDFilteredView::rot(), makeMuonMisalignmentScenario::rot, and cms::DDFilteredView::trans().

84  {
85  const Double_t* tr = fview.trans();
86  const Double_t* rot = fview.rot();
87 
88  return RCPPlane(
89  new Plane(Surface::PositionType(tr[0] / dd4hep::cm, tr[1] / dd4hep::cm, tr[2] / dd4hep::cm),
90  Surface::RotationType(rot[0], rot[3], rot[6], rot[1], rot[4], rot[7], rot[2], rot[5], rot[8]),
91  bounds));
92 }
const Double_t * rot() const
The absolute rotation of the current node.
Definition: Plane.h:16
const Double_t * trans() const
The absolute translation of the current node.
ReferenceCountingPointer< Plane > RCPPlane