53 LogDebug(
"GEMGeometryParsFromDD") <<
"Building the geometry service";
54 LogDebug(
"GEMGeometryParsFromDD") <<
"About to run through the GEM structure\n"
57 edm::LogVerbatim(
"GEMGeometryParsFromDD") <<
"(0) GEMGeometryParsFromDD - DDD ";
63 LogDebug(
"GEMGeometryParsFromDD") <<
"doSuperChamber = " << doSuper;
78 if (detIdCh.
layer() == 1) {
115 double dx1 = dpar[4];
116 double dx2 = dpar[8];
123 std::vector<double> pars{dx1, dx2,
dy, dz};
127 LogDebug(
"GEMGeometryParsFromDD") <<
"dimension dx1 " << dx1 <<
", dx2 " << dx2 <<
", dy " << dy <<
", dz " <<
dz;
130 <<
" dx2 " << dx2 <<
" dy " << dy <<
" dz " <<
dz;
142 double dx1 = dpar[4];
143 double dx2 = dpar[8];
149 std::vector<double> pars{dx1, dx2,
dy, dz};
153 LogDebug(
"GEMGeometryParsFromDD") <<
"dimension dx1 " << dx1 <<
", dx2 " << dx2 <<
", dy " << dy <<
", dz " <<
dz;
156 <<
" dx2 " << dx2 <<
" dy " << dy <<
" dz " <<
dz;
165 DDValue numbOfStrips(
"nStrips");
168 const std::vector<const DDsvalues_type*>& specs = fv.
specifics();
169 double nStrips = 0., nPads = 0., dPhi = 0.;
170 for (
auto const& is : specs) {
172 nStrips = numbOfStrips.
doubles()[0];
174 nPads = numbOfPads.
doubles()[0];
178 LogDebug(
"GEMGeometryParsFromDD") << ((nStrips == 0.) ? (
"No nStrips found!!")
179 : (
"Number of strips: " + std::to_string(nStrips)));
180 LogDebug(
"GEMGeometryParsFromDD") << ((nPads == 0.) ? (
"No nPads found!!")
181 : (
"Number of pads: " + std::to_string(nPads)));
188 double dx1 = dpar[4];
189 double dx2 = dpar[8];
191 std::vector<double> pars{dx1, dx2,
dy,
dz,
nStrips, nPads, dPhi};
195 LogDebug(
"GEMGeometryParsFromDD") <<
" dx1 " << dx1 <<
" dx2 " << dx2 <<
" dy " << dy <<
" dz " << dz <<
" nStrips "
196 << nStrips <<
" nPads " << nPads <<
" dPhi " << dPhi;
200 <<
" dx2 " << dx2 <<
" dy " << dy <<
" dz " << dz <<
" nStrips " << nStrips <<
" nPads " << nPads <<
" dPhi "
208 <<
"(1) DDD, tran vector " << tran.x() <<
" " << tran.y() <<
" " << tran.z();
209 return {tran.x(), tran.y(), tran.z()};
215 rota.GetComponents(x, y, z);
217 <<
"(2) DDD, rot matrix " << x.X() <<
" " << x.Y() <<
" " << x.Z() <<
" " << y.X() <<
" " << y.Y() <<
" "
218 << y.Z() <<
" " << z.X() <<
" " << z.Y() <<
" " << z.Z();
219 return {x.X(), x.Y(), x.Z(), y.X(), y.Y(), y.Z(), z.X(), z.Y(), z.Z()};
239 edm::LogVerbatim(
"GEMGeometryParsFromDD") <<
"(0) GEMGeometryParsFromDD - DD4hep ";
243 static constexpr uint32_t levelChamb = 7;
245 int theLevelPart = muonConstants.
getValue(
"level");
246 int theRingLevel = muonConstants.
getValue(
"mg_ring") / theLevelPart;
247 int theSectorLevel = muonConstants.
getValue(
"mg_sector") / theLevelPart;
255 if (
num.getLevels() == theRingLevel) {
256 if (detId.region() !=
region) {
261 detId =
GEMDetId(detId.region(), detId.ring(), detId.station(), detId.layer(), chamb, 0);
263 }
else if (
num.getLevels() == theSectorLevel) {
269 if (fv.
level() == levelChamb) {
270 if (detId.layer() == 1) {
274 }
else if (
num.getLevels() > theSectorLevel) {
283 auto solidA = solid.
solidA();
284 std::vector<double> dpar = solidA.dimensions();
286 double dy = dpar[3] / dd4hep::mm;
287 double dz = dpar[2] / dd4hep::mm;
288 double dx1 = dpar[0] / dd4hep::mm;
289 double dx2 = dpar[1] / dd4hep::mm;
291 auto solidB = solid.solidB();
292 dpar = solidB.dimensions();
294 const double chgap = 2.105;
299 dz += (dpar[2] / dd4hep::mm);
303 std::vector<double> pars{dx1, dx2,
dy, dz};
308 <<
"(3) DD4hep, SuperChamber DetID " << gemid.
rawId() <<
" Name " <<
std::string(name) <<
" dx1 " << dx1
309 <<
" dx2 " << dx2 <<
" dy " << dy <<
" dz " <<
dz;
315 auto solidA = solid.
solidA();
316 std::vector<double> dpar = solidA.dimensions();
318 double dy = dpar[3] / dd4hep::mm;
319 double dz = dpar[2] / dd4hep::mm;
320 double dx1 = dpar[0] / dd4hep::mm;
321 double dx2 = dpar[1] / dd4hep::mm;
323 auto solidB = solid.solidB();
324 dpar = solidB.dimensions();
326 dz += (dpar[2] / dd4hep::mm);
331 std::vector<double> pars{dx1, dx2,
dy, dz};
336 <<
"(4) DD4hep, Chamber DetID " << gemid.
rawId() <<
" Name " <<
std::string(name) <<
" dx1 " << dx1 <<
" dx2 "
337 << dx2 <<
" dy " << dy <<
" dz " <<
dz;
343 auto nPads = fv.
get<
double>(
"nPads");
344 auto dPhi = fv.
get<
double>(
"dPhi");
349 double dx1 = dpar[0] / dd4hep::mm;
350 double dx2 = dpar[1] / dd4hep::mm;
351 double dy = dpar[3] / dd4hep::mm;
352 double dz = dpar[2] / dd4hep::mm;
354 std::vector<double> pars{dx1, dx2,
dy,
dz,
nStrips, nPads, dPhi};
359 <<
"(5) DD4hep, Eta Partion DetID " << detId.
rawId() <<
" Name " <<
std::string(name) <<
" dx1 " << dx1 <<
" dx2 "
360 << dx2 <<
" dy " << dy <<
" dz " << dz <<
" nStrips " <<
nStrips <<
" nPads " << nPads <<
" dPhi " << dPhi;
365 std::vector<double> tran(3);
366 tran[0] =
static_cast<double>(fv.
translation().X()) / dd4hep::mm;
367 tran[1] =
static_cast<double>(fv.
translation().Y()) / dd4hep::mm;
368 tran[2] =
static_cast<double>(fv.
translation().Z()) / dd4hep::mm;
371 <<
"(1) DD4hep, tran vector " << tran[0] <<
" " << tran[1] <<
" " << tran[2];
372 return {tran[0], tran[1], tran[2]};
379 rota.GetComponents(x, y, z);
380 const std::vector<double>
rot = {x.X(), x.Y(), x.Z(), y.X(), y.Y(), y.Z(), z.X(), z.Y(), z.Z()};
382 <<
"(2) DD4hep, rot matrix " << rot[0] <<
" " << rot[1] <<
" " << rot[2] <<
" " << rot[3] <<
" " << rot[4]
383 <<
" " << rot[5] <<
" " << rot[6] <<
" " << rot[7] <<
" " << rot[8];
384 return {rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]};
Log< level::Info, true > LogVerbatim
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
bool parent()
set the current node to the parent node ...
MuonBaseNumber geoHistoryToBaseNumber(const DDGeoHistory &history) const
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the filtered-view.
const std::vector< double > & doubles() const
a reference to the double-valued values stored in the given instance of DDValue
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double >> DD3Vector
int getValue(const std::string &name) const
void buildGeometry(DDFilteredView &fview, const MuonGeometryConstants &muonConstants, RecoIdealGeometry &rgeo)
bool nextSibling()
set the current node to the next sibling ...
dd4hep::Solid solidA() const
const DDRotationMatrix & rotation() const
The absolute rotation of the current node.
bool insert(DetId id, const std::vector< double > &trans, const std::vector< double > &rot, const std::vector< double > &pars)
constexpr uint32_t rawId() const
get the raw id
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
void buildEtaPartition(DDFilteredView &fv, GEMDetId detId, RecoIdealGeometry &rgeo)
Compact representation of the geometrical detector hierarchy.
const DDGeoHistory & geoHistory() const
The list of ancestors up to the root-node of the current node.
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
tuple nStrips
1.2 is to make the matching window safely the two nearest strips 0.35 is the size of an ME0 chamber i...
DDSolid solidB(void) const
const Translation translation() const
std::vector< double > getRotation(DDFilteredView &fv)
static double delPhi(const double phi1, const double phi2)
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
const ExpandedNodes & history()
The numbering history of the current node.
constexpr int region() const
static constexpr int32_t minStationId0
const Double_t * rot() const
The absolute rotation of the current node.
void buildChamber(DDFilteredView &fv, GEMDetId detId, RecoIdealGeometry &rgeo)
constexpr GEMDetId chamberId() const
std::string_view name() const
bool firstChild()
set the current node to the first child
DDSolid solidA(void) const
T get(const std::string &)
extract attribute value
std::vector< double > getTranslation(DDFilteredView &fv)
constexpr int layer() const
void buildSuperChamber(DDFilteredView &fv, GEMDetId detId, RecoIdealGeometry &rgeo)
bool firstChild()
set the current node to the first child ...
int baseNumberToUnitNumber(const MuonBaseNumber &) const override
const std::vector< double > parameters() const
extract shape parameters
const DDTranslation & translation() const
The absolute translation of the current node.
constexpr GEMDetId superChamberId() const
std::vector< const DDsvalues_type * > specifics() const
const int level() const
get Iterator level
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
const std::string & name() const
Returns the name.
dd4hep::Solid solid() const
void build(const DDCompactView *cview, const MuonGeometryConstants &muonConstants, RecoIdealGeometry &rgeo)