CMS 3D CMS Logo

DTGeometryBuilder.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: DetectorDescription/DTGeometryBuilder
4 // Class: DTGeometryBuilder
5 //
14 //
15 // Original Author: Ianna Osborne
16 // Created: Wed, 16 Jan 2019 10:19:37 GMT
17 // Modified by Sergio Lo Meo (sergio.lo.meo@cern.ch) Mon, 31 August 2020
18 //
19 //
41 #include "DTGeometryBuilder.h"
42 #include "DD4hep/Detector.h"
43 
44 #include <memory>
45 #include <string>
46 #include <string_view>
47 
48 using namespace edm;
49 using namespace std;
50 using namespace cms;
51 
52 void DTGeometryBuilder::buildGeometry(DDFilteredView& fview, DTGeometry& geom, const MuonGeometryConstants& num) const {
53  bool doChamber = fview.firstChild();
54 
55  while (doChamber) {
56  DTChamber* chamber = buildChamber(fview, num);
57 
58  bool doSL = fview.nextSibling();
59  while (doSL) {
60  DTSuperLayer* sl = buildSuperLayer(fview, chamber, num);
61 
62  fview.down();
63  bool doLayers = fview.sibling();
64  while (doLayers) {
65  DTLayer* l = buildLayer(fview, sl, num);
66  geom.add(l);
67 
68  doLayers = fview.sibling();
69  }
70 
71  geom.add(sl);
72  doSL = fview.nextSibling();
73  }
74  geom.add(chamber);
75 
76  fview.parent();
77  doChamber = fview.firstChild();
78  }
79 }
80 
81 DTGeometryBuilder::RCPPlane DTGeometryBuilder::plane(const DDFilteredView& fview, Bounds* bounds) const {
82  const Double_t* tr = fview.trans();
83  const Double_t* rot = fview.rot();
84 
85  return RCPPlane(
86  new Plane(Surface::PositionType(tr[0], tr[1], tr[2]),
87  Surface::RotationType(rot[0], rot[3], rot[6], rot[1], rot[4], rot[7], rot[2], rot[5], rot[8]),
88  bounds));
89 }
90 
91 DTChamber* DTGeometryBuilder::buildChamber(DDFilteredView& fview, const MuonGeometryConstants& muonConstants) const {
92  MuonGeometryNumbering mdddnum(muonConstants);
93  DTNumberingScheme dtnum(muonConstants);
94  int rawid = dtnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fview.history()));
95 
96  DTChamberId detId(rawid);
97  auto const& par = fview.parameters();
98 
99  RCPPlane surf(plane(fview, new RectangularPlaneBounds(par[0], par[1], par[2])));
100 
101  DTChamber* chamber = new DTChamber(detId, surf);
102 
103  return chamber;
104 }
105 
106 DTSuperLayer* DTGeometryBuilder::buildSuperLayer(DDFilteredView& fview,
108  const MuonGeometryConstants& muonConstants) const {
109  MuonGeometryNumbering mdddnum(muonConstants);
110  DTNumberingScheme dtnum(muonConstants);
111  int rawid = dtnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fview.history()));
112 
113  DTSuperLayerId slId(rawid);
114 
115  auto const& par = fview.parameters();
116 
117  RCPPlane surf(plane(fview, new RectangularPlaneBounds(par[0], par[1], par[2])));
118 
119  DTSuperLayer* slayer = new DTSuperLayer(slId, surf, chamber);
120 
121  chamber->add(slayer);
122 
123  return slayer;
124 }
125 
126 DTLayer* DTGeometryBuilder::buildLayer(DDFilteredView& fview,
127  DTSuperLayer* sl,
128  const MuonGeometryConstants& muonConstants) const {
129  MuonGeometryNumbering mdddnum(muonConstants);
130  DTNumberingScheme dtnum(muonConstants);
131  int rawid = dtnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fview.history()));
132 
133  DTLayerId layId(rawid);
134 
135  auto const& par = fview.parameters();
136 
137  RCPPlane surf(plane(fview, new RectangularPlaneBounds(par[0], par[1], par[2])));
138 
139  fview.down();
140  bool doWire = fview.sibling();
141  int firstWire = fview.volume()->GetNumber();
142  auto const& wpar = fview.parameters();
143  float wireLength = wpar[1];
144 
145  int WCounter = 0;
146  while (doWire) {
147  doWire = fview.checkChild();
148  WCounter++;
149  }
150  fview.up();
151 
152  DTTopology topology(firstWire, WCounter, wireLength);
153 
154  DTLayerType layerType;
155 
156  DTLayer* layer = new DTLayer(layId, surf, topology, layerType, sl);
157 
158  sl->add(layer);
159  return layer;
160 }
161 
163  const DDDetector* det,
164  const MuonGeometryConstants& num,
165  const dd4hep::SpecParRefs& refs) {
166  Volume top = det->worldVolume();
167  DDFilteredView fview(det, top);
168  fview.mergedSpecifics(refs);
169  buildGeometry(fview, geom, num);
170 }
AlignmentErrorsExtended.h
cms::DDFilteredView::rot
const Double_t * rot() const
The absolute rotation of the current node.
Definition: DDFilteredView.cc:120
cms::DDFilteredView::volume
const PlacedVolume volume() const
The physical volume of the current node.
Definition: DDFilteredView.cc:68
DTGeometry
Definition: DTGeometry.h:28
TkRotation< float >
DTSuperLayerId
Definition: DTSuperLayerId.h:12
MuonGeometryConstants
Definition: MuonGeometryConstants.h:20
GlobalPositionRcd.h
cms::DDFilteredView::parameters
const std::vector< double > parameters() const
extract shape parameters
Definition: DDFilteredView.cc:536
cms::DDFilteredView::sibling
bool sibling()
set the current node to the next sub sibling
Definition: DDFilteredView.cc:450
MuonGeometryNumbering::geoHistoryToBaseNumber
MuonBaseNumber geoHistoryToBaseNumber(const DDGeoHistory &history) const
Definition: MuonGeometryNumbering.cc:38
DTRecoGeometryRcd.h
DTAlignmentErrorExtendedRcd.h
edm
HLT enums.
Definition: AlignableModifier.h:19
DTChamber
Definition: DTChamber.h:24
cms::DDFilteredView::parent
bool parent()
set the current node to the parent node ...
Definition: DDFilteredView.cc:481
Bounds
Definition: Bounds.h:18
DetectorGlobalPosition.h
MuonGeometryNumbering.h
ReferenceCountingPointer< Plane >
DTSuperLayer
Definition: DTSuperLayer.h:24
cms::DDFilteredView
Definition: DDFilteredView.h:70
newFWLiteAna.build
build
Definition: newFWLiteAna.py:126
MuonNumberingRecord.h
DDDetector.h
cms::DDFilteredView::nextSibling
bool nextSibling()
set the current node to the next sibling
Definition: DDFilteredView.cc:427
DTTopology
Definition: DTTopology.h:28
Plane.h
GeometryFileRcd.h
cms::DDFilteredView::trans
const Double_t * trans() const
The absolute translation of the current node.
Definition: DDFilteredView.cc:101
ecaldqm::topology
const CaloTopology * topology(nullptr)
cms::DDFilteredView::firstChild
bool firstChild()
set the current node to the first child
Definition: DDFilteredView.cc:268
RectangularPlaneBounds.h
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
cms::DDFilteredView::mergedSpecifics
void mergedSpecifics(DDSpecParRefs const &)
User specific data.
Definition: DDFilteredView.cc:159
DDFilteredView.h
DTNumberingScheme::baseNumberToUnitNumber
int baseNumberToUnitNumber(const MuonBaseNumber &num) const override
Definition: DTNumberingScheme.cc:38
cms::DDFilteredView::down
void down()
set current node to the child node in the filtered tree
Definition: DDFilteredView.cc:505
Bounds.h
Point3DBase< float, GlobalTag >
DTLayerId
Definition: DTLayerId.h:12
RecoIdealGeometry.h
DTSuperLayer::add
void add(DTLayer *l)
Add layer to the SL which owns it.
Definition: DTSuperLayer.cc:47
DTGeometry.h
cms::Volume
dd4hep::Volume Volume
Definition: DDFilteredView.h:47
DTAlignmentErrorRcd.h
MuonBaseNumber.h
cms::DDDetector::worldVolume
dd4hep::Volume worldVolume() const
Handle to the world volume containing everything.
Definition: DDDetector.cc:40
cms::DDFilteredView::history
const ExpandedNodes & history()
The numbering history of the current node.
Definition: DDFilteredView.cc:683
cms::DDFilteredView::up
void up()
set current node to the parent node in the filtered tree
Definition: DDFilteredView.cc:516
DTAlignmentRcd.h
DTNumberingScheme.h
DTLayer
Definition: DTLayer.h:25
EgammaValidation_cff.num
num
Definition: EgammaValidation_cff.py:34
cmsLHEtoEOSManager.l
l
Definition: cmsLHEtoEOSManager.py:204
std
Definition: JetResolutionObject.h:76
RectangularPlaneBounds
Definition: RectangularPlaneBounds.h:12
GeometryAligner.h
cms::DDFilteredView::checkChild
bool checkChild()
count the number of children matching selection
Definition: DDFilteredView.cc:466
DTLayerType
Definition: DTLayerType.h:15
cms::DDDetector
Definition: DDDetector.h:12
Plane
Definition: Plane.h:16
makeMuonMisalignmentScenario.rot
rot
Definition: makeMuonMisalignmentScenario.py:322
relativeConstraints.chamber
chamber
Definition: relativeConstraints.py:53
MuonGeometryNumbering
Definition: MuonGeometryNumbering.h:24
DTGeometryBuilder.h
DTChamberId
Definition: DTChamberId.h:14
MuonGeometryRecord.h
cms
Namespace of DDCMS conversion namespace.
Definition: ProducerAnalyzer.cc:21
DTNumberingScheme
Definition: DTNumberingScheme.h:20