Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Run3-gem39 Use the same numbering scheme for GEM for DDD and DD4Hep #29842

Merged
merged 4 commits into from May 18, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 2 additions & 6 deletions Geometry/GEMGeometryBuilder/plugins/GEMGeometryESModule.cc
Expand Up @@ -38,7 +38,6 @@
#include <memory>

//dd4hep
#include "Geometry/MuonNumbering/interface/DD4hep_MuonNumbering.h"
#include "Geometry/MuonNumbering/interface/MuonDDDNumbering.h"
#include "Geometry/MuonNumbering/interface/MuonBaseNumber.h"
#include "DetectorDescription/DDCMS/interface/DDCompactView.h"
Expand All @@ -65,7 +64,6 @@ class GEMGeometryESModule : public edm::ESProducer {
edm::ESGetToken<DDCompactView, IdealGeometryRecord> cpvToken_;
edm::ESGetToken<MuonGeometryConstants, IdealGeometryRecord> mdcToken_;
edm::ESGetToken<cms::DDCompactView, IdealGeometryRecord> dd4hepcpvToken_;
edm::ESGetToken<cms::MuonNumbering, MuonNumberingRecord> dd4hepmdcToken_;
edm::ESGetToken<RecoIdealGeometry, GEMRecoGeometryRcd> riggemToken_;
edm::ESGetToken<Alignments, GlobalPositionRcd> globalPositionToken_;
edm::ESGetToken<Alignments, GEMAlignmentRcd> alignmentsToken_;
Expand All @@ -78,10 +76,8 @@ GEMGeometryESModule::GEMGeometryESModule(const edm::ParameterSet& p)
applyAlignment_(p.getParameter<bool>("applyAlignment")),
alignmentsLabel_(p.getParameter<std::string>("alignmentsLabel")) {
auto cc = setWhatProduced(this);
if (useDDD_) {
if (useDDD_ || useDD4hep_) {
cc.setConsumes(cpvToken_).setConsumes(mdcToken_);
} else if (useDD4hep_) {
cc.setConsumes(dd4hepcpvToken_).setConsumes(dd4hepmdcToken_);
} else {
cc.setConsumes(riggemToken_);
}
Expand All @@ -104,7 +100,7 @@ std::unique_ptr<GEMGeometry> GEMGeometryESModule::produce(const MuonGeometryReco
builder.build(*gemGeometry, cpv.product(), mdc);
} else if (useDD4hep_) {
edm::ESTransientHandle<cms::DDCompactView> cpv = record.getTransientHandle(dd4hepcpvToken_);
const auto& mdc = record.get(dd4hepmdcToken_);
const auto& mdc = record.get(mdcToken_);
GEMGeometryBuilderFromDDD builder;
builder.build(*gemGeometry, cpv.product(), mdc);
} else {
Expand Down
23 changes: 9 additions & 14 deletions Geometry/GEMGeometryBuilder/src/GEMGeometryBuilderFromDDD.cc
Expand Up @@ -17,7 +17,6 @@
#include <DetectorDescription/DDCMS/interface/DDFilteredView.h>
#include <DetectorDescription/DDCMS/interface/DDCompactView.h>

#include "Geometry/MuonNumbering/interface/DD4hep_MuonNumbering.h"
#include "Geometry/MuonNumbering/interface/MuonDDDNumbering.h"
#include "Geometry/MuonNumbering/interface/MuonBaseNumber.h"
#include "Geometry/MuonNumbering/interface/GEMNumberingScheme.h"
Expand All @@ -26,7 +25,6 @@
#include "DataFormats/GeometryVector/interface/Basic3DVector.h"

#include "DetectorDescription/DDCMS/interface/DDSpecParRegistry.h"
#include "Geometry/MuonNumbering/interface/DD4hep_GEMNumberingScheme.h"

#include "DataFormats/Math/interface/CMSUnits.h"
#include "DataFormats/Math/interface/GeantUnits.h"
Expand Down Expand Up @@ -86,9 +84,7 @@ void GEMGeometryBuilderFromDDD::build(GEMGeometry& theGeometry,
GEMSuperChamber* gemSuperChamber = buildSuperChamber(fv, detIdCh);
superChambers.push_back(gemSuperChamber);
}
GEMChamber* gemChamber = nullptr;
if (detIdCh.station() != GEMDetId::minStationId0)
gemChamber = buildChamber(fv, detIdCh);
GEMChamber* gemChamber = ((detIdCh.station() == GEMDetId::minStationId0) ? nullptr : buildChamber(fv, detIdCh));

// loop over chambers
// only 1 chamber
Expand Down Expand Up @@ -341,7 +337,7 @@ GEMGeometryBuilderFromDDD::RCPBoundPlane GEMGeometryBuilderFromDDD::boundPlane(c

void GEMGeometryBuilderFromDDD::build(GEMGeometry& theGeometry,
const cms::DDCompactView* cview,
const cms::MuonNumbering& muonConstants) {
const MuonGeometryConstants& muonConstants) {
std::string attribute = "MuStructure";
std::string value = "MuonEndCapGEM";
cms::DDFilteredView fv(cview->detector(), cview->detector()->worldVolume());
Expand All @@ -356,26 +352,25 @@ void GEMGeometryBuilderFromDDD::build(GEMGeometry& theGeometry,
std::vector<GEMSuperChamber*> superChambers;

while (doChambers) {
MuonBaseNumber mbn = muonConstants.geoHistoryToBaseNumber(fv.history());
cms::GEMNumberingScheme gemnum(muonConstants.values());
gemnum.baseNumberToUnitNumber(mbn);
GEMDetId detIdCh = GEMDetId(gemnum.getDetId());
MuonDDDNumbering mdddnum(muonConstants);
GEMNumberingScheme gemNum(muonConstants);
int rawidCh = gemNum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fv.history()));
GEMDetId detIdCh = GEMDetId(rawidCh);

if (detIdCh.layer() == 1) { // only make superChambers when doing layer 1
GEMSuperChamber* gemSuperChamber = buildSuperChamber(fv, detIdCh);
superChambers.push_back(gemSuperChamber);
}

// GEMChamber* gemChamber = ((detIdCh.station() == GEMDetId::minStationId0) ? nullptr : buildChamber(fv, detIdCh));
GEMChamber* gemChamber = buildChamber(fv, detIdCh);

fv.down();
fv.down();
bool doEtaPart = fv.nextSibling();
while (doEtaPart) {
MuonBaseNumber mbn = muonConstants.geoHistoryToBaseNumber(fv.history());
cms::GEMNumberingScheme gemnum(muonConstants.values());
gemnum.baseNumberToUnitNumber(mbn);
GEMDetId detId = GEMDetId(gemnum.getDetId());
int rawid = gemNum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fv.history()));
GEMDetId detId = GEMDetId(rawid);
GEMEtaPartition* etaPart = buildEtaPartition(fv, detId);

gemChamber->add(etaPart);
Expand Down
4 changes: 1 addition & 3 deletions Geometry/GEMGeometryBuilder/src/GEMGeometryBuilderFromDDD.h
Expand Up @@ -2,8 +2,6 @@
#define Geometry_GEMGeometry_GEMGeometryBuilderFromDDD_H

#include "DataFormats/GeometrySurface/interface/Plane.h"
#include "Geometry/MuonNumbering/interface/DD4hep_GEMNumberingScheme.h"
#include "Geometry/MuonNumbering/interface/DD4hep_MuonNumbering.h"
/*
//\class GEMGeometryBuilder

Expand Down Expand Up @@ -42,7 +40,7 @@ class GEMGeometryBuilderFromDDD {
// for DDD
void build(GEMGeometry& theGeometry, const DDCompactView* cview, const MuonGeometryConstants& muonConstants);
// for DD4hep
void build(GEMGeometry& theGeometry, const cms::DDCompactView* cview, const cms::MuonNumbering& muonConstants);
void build(GEMGeometry& theGeometry, const cms::DDCompactView* cview, const MuonGeometryConstants& muonConstants);

private:
std::map<GEMDetId, std::vector<GEMDetId>> chids;
Expand Down
38 changes: 0 additions & 38 deletions Geometry/MuonNumbering/interface/DD4hep_GEMNumberingScheme.h

This file was deleted.

6 changes: 4 additions & 2 deletions Geometry/MuonNumbering/interface/MuonDDDNumbering.h
Expand Up @@ -15,6 +15,7 @@
*/

#include "DetectorDescription/Core/interface/DDExpandedNode.h"
#include "DetectorDescription/DDCMS/interface/ExpandedNodes.h"
#include "DetectorDescription/Core/interface/DDLogicalPart.h"

class MuonBaseNumber;
Expand All @@ -25,10 +26,11 @@ class MuonDDDNumbering {
MuonDDDNumbering(const MuonGeometryConstants& muonConstants);
~MuonDDDNumbering(){};

MuonBaseNumber geoHistoryToBaseNumber(const DDGeoHistory& history);
MuonBaseNumber geoHistoryToBaseNumber(const DDGeoHistory& history) const;
MuonBaseNumber geoHistoryToBaseNumber(const cms::ExpandedNodes&) const;

private:
int getInt(const std::string& s, const DDLogicalPart& part);
int getInt(const std::string& s, const DDLogicalPart& part) const;

int theLevelPart;
int theSuperPart;
Expand Down
96 changes: 0 additions & 96 deletions Geometry/MuonNumbering/src/DD4hep_GEMNumberingScheme.cc

This file was deleted.

21 changes: 19 additions & 2 deletions Geometry/MuonNumbering/src/MuonDDDNumbering.cc
Expand Up @@ -34,7 +34,7 @@ MuonDDDNumbering::MuonDDDNumbering(const MuonGeometryConstants &muonConstants) {
#endif
}

MuonBaseNumber MuonDDDNumbering::geoHistoryToBaseNumber(const DDGeoHistory &history) {
MuonBaseNumber MuonDDDNumbering::geoHistoryToBaseNumber(const DDGeoHistory &history) const {
MuonBaseNumber num;

#ifdef LOCAL_DEBUG
Expand Down Expand Up @@ -66,7 +66,24 @@ MuonBaseNumber MuonDDDNumbering::geoHistoryToBaseNumber(const DDGeoHistory &hist
return num;
}

int MuonDDDNumbering::getInt(const std::string &s, const DDLogicalPart &part) {
MuonBaseNumber MuonDDDNumbering::geoHistoryToBaseNumber(const cms::ExpandedNodes &nodes) const {
MuonBaseNumber num;

int ctr(0);
for (auto const &it : nodes.tags) {
int tag = it / theLevelPart;
if (tag > 0) {
int offset = nodes.offsets[ctr];
int copyno = nodes.copyNos[ctr] + offset % theSuperPart;
int super = offset / theSuperPart;
num.addBase(tag, super, copyno - theStartCopyNo);
}
++ctr;
}
return num;
}

int MuonDDDNumbering::getInt(const std::string &s, const DDLogicalPart &part) const {
DDValue val(s);
std::vector<const DDsvalues_type *> result = part.specifics();
std::vector<const DDsvalues_type *>::iterator it = result.begin();
Expand Down