Skip to content

Commit 4193a38

Browse files
committed
Remove obsolete v1 BTL geometry from constructions
1 parent 06d30e1 commit 4193a38

File tree

5 files changed

+57
-187
lines changed

5 files changed

+57
-187
lines changed

Geometry/MTDGeometryBuilder/interface/MTDTopology.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ class MTDTopology {
4040

4141
int getMTDTopologyMode() const { return mtdTopologyMode_; }
4242

43+
uint32_t btlRods() const { return btlVals_.nBTLphi_; }
44+
uint32_t btlModulesPerRod() const { return btlVals_.nBTLeta_; }
45+
uint32_t btlModules() const { return btlVals_.nBTLmodules_; }
46+
4347
// BTL topology navigation is based on a predefined order of dets in MTDGeometry, mapped onto phi/eta grid
4448

4549
std::pair<uint32_t, uint32_t> btlIndex(const uint32_t detId) const;

Geometry/MTDNumberingBuilder/plugins/CmsMTDConstruction.cc

Lines changed: 17 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -57,48 +57,20 @@ void CmsMTDConstruction<DDFilteredView>::buildBTLModule(DDFilteredView& fv, Geom
5757
GeometricTimingDet* det =
5858
new GeometricTimingDet(&fv, theCmsMTDStringToEnum.type(nodeName.substr(0, CmsMTDStringToEnum::kModStrLen)));
5959

60-
if (isBTLV2(fv)) {
61-
auto& gh = fv.geoHistory();
62-
63-
baseNumber_.reset();
64-
baseNumber_.setSize(gh.size());
65-
66-
for (uint i = gh.size(); i-- > 0;) {
67-
baseNumber_.addLevel(gh[i].logicalPart().name().name(), gh[i].copyno());
68-
#ifdef EDM_ML_DEBUG
69-
edm::LogVerbatim("CmsMTDConstruction") << gh[i].logicalPart().name().name() << " " << gh[i].copyno();
70-
#endif
71-
}
72-
73-
det->setGeographicalID(BTLDetId(btlScheme_.getUnitID(baseNumber_)));
74-
75-
} else {
76-
const auto& copyNumbers = fv.copyNumbers();
77-
auto module_number = copyNumbers[copyNumbers.size() - 2];
78-
79-
constexpr char positive[] = "PositiveZ";
80-
constexpr char negative[] = "NegativeZ";
60+
auto& gh = fv.geoHistory();
8161

82-
const std::string& modname(fv.name());
83-
size_t delim1 = modname.find("BModule");
84-
size_t delim2 = modname.find("Layer");
85-
module_number += atoi(modname.substr(delim1 + CmsMTDStringToEnum::kModStrLen, delim2).c_str()) - 1;
62+
baseNumber_.reset();
63+
baseNumber_.setSize(gh.size());
8664

65+
for (uint i = gh.size(); i-- > 0;) {
66+
baseNumber_.addLevel(gh[i].logicalPart().name().name(), gh[i].copyno());
8767
#ifdef EDM_ML_DEBUG
88-
edm::LogVerbatim("CmsMTDConstruction")
89-
<< "BTLModule = " << modname << " " << copyNumbers[copyNumbers.size() - 3] << " " << module_number;
68+
edm::LogVerbatim("CmsMTDConstruction") << gh[i].logicalPart().name().name() << " " << gh[i].copyno();
9069
#endif
91-
92-
if (modname.find(positive) != std::string::npos) {
93-
det->setGeographicalID(BTLDetId(1, copyNumbers[copyNumbers.size() - 3], module_number, 0, 1));
94-
} else if (modname.find(negative) != std::string::npos) {
95-
det->setGeographicalID(BTLDetId(0, copyNumbers[copyNumbers.size() - 3], module_number, 0, 1));
96-
} else {
97-
throw cms::Exception("CmsMTDConstruction::buildBTLModule")
98-
<< "BTL Module " << module_number << " is neither positive nor negative in Z!";
99-
}
10070
}
10171

72+
det->setGeographicalID(BTLDetId(btlScheme_.getUnitID(baseNumber_)));
73+
10274
mother->addComponent(det);
10375
}
10476

@@ -108,48 +80,20 @@ void CmsMTDConstruction<cms::DDFilteredView>::buildBTLModule(cms::DDFilteredView
10880
GeometricTimingDet* det =
10981
new GeometricTimingDet(&fv, theCmsMTDStringToEnum.type(nodeName.substr(0, CmsMTDStringToEnum::kModStrLen)));
11082

111-
if (isBTLV2(fv)) {
112-
baseNumber_.reset();
113-
baseNumber_.setSize(fv.copyNos().size());
114-
115-
for (uint i = 0; i < fv.copyNos().size(); i++) {
116-
std::string_view name((fv.geoHistory()[i])->GetName());
117-
size_t ipos = name.rfind('_');
118-
baseNumber_.addLevel(name.substr(0, ipos), fv.copyNos()[i]);
119-
#ifdef EDM_ML_DEBUG
120-
edm::LogVerbatim("CmsMTDConstruction") << name.substr(0, ipos) << " " << fv.copyNos()[i];
121-
#endif
122-
}
123-
124-
det->setGeographicalID(BTLDetId(btlScheme_.getUnitID(baseNumber_)));
125-
126-
} else {
127-
const auto& copyNumbers = fv.copyNumbers();
128-
auto module_number = copyNumbers[1];
129-
130-
constexpr char positive[] = "PositiveZ";
131-
constexpr char negative[] = "NegativeZ";
132-
133-
const std::string modname(fv.name());
134-
size_t delim1 = modname.find("BModule");
135-
size_t delim2 = modname.find("Layer");
136-
module_number += atoi(modname.substr(delim1 + CmsMTDStringToEnum::kModStrLen, delim2).c_str()) - 1;
83+
baseNumber_.reset();
84+
baseNumber_.setSize(fv.copyNos().size());
13785

86+
for (uint i = 0; i < fv.copyNos().size(); i++) {
87+
std::string_view name((fv.geoHistory()[i])->GetName());
88+
size_t ipos = name.rfind('_');
89+
baseNumber_.addLevel(name.substr(0, ipos), fv.copyNos()[i]);
13890
#ifdef EDM_ML_DEBUG
139-
edm::LogVerbatim("MTDNumbering") << fv.path() << "\nBTLModule = " << modname << " " << copyNumbers[2] << " "
140-
<< module_number;
91+
edm::LogVerbatim("CmsMTDConstruction") << name.substr(0, ipos) << " " << fv.copyNos()[i];
14192
#endif
142-
143-
if (modname.find(positive) != std::string::npos) {
144-
det->setGeographicalID(BTLDetId(1, copyNumbers[2], module_number, 0, 1));
145-
} else if (modname.find(negative) != std::string::npos) {
146-
det->setGeographicalID(BTLDetId(0, copyNumbers[2], module_number, 0, 1));
147-
} else {
148-
throw cms::Exception("CmsMTDConstruction::buildBTLModule")
149-
<< "BTL Module " << module_number << " is neither positive nor negative in Z!";
150-
}
15193
}
15294

95+
det->setGeographicalID(BTLDetId(btlScheme_.getUnitID(baseNumber_)));
96+
15397
mother->addComponent(det);
15498
}
15599

@@ -245,11 +189,6 @@ GeometricTimingDet* CmsMTDConstruction<FilteredView>::buildLayer(FilteredView& f
245189
return layer;
246190
}
247191

248-
template <class FilteredView>
249-
bool CmsMTDConstruction<FilteredView>::isBTLV2(FilteredView& fv) {
250-
return (fv.name().substr(0, 9) == "BTLModule");
251-
}
252-
253192
template <class FilteredView>
254193
bool CmsMTDConstruction<FilteredView>::isETLpreV8(FilteredView& fv) {
255194
return (fv.name().find("EModule") != std::string::npos);

Geometry/MTDNumberingBuilder/plugins/CmsMTDConstruction.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class CmsMTDConstruction {
3030

3131
void baseNumberFromHistory(const DDGeoHistory& gh);
3232

33-
bool isBTLV2(FilteredView&);
3433
bool isETLpreV8(FilteredView&);
3534

3635
protected:

Geometry/MTDNumberingBuilder/plugins/DDCmsMTDConstruction.cc

Lines changed: 15 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,6 @@ std::unique_ptr<GeometricTimingDet> DDCmsMTDConstruction::construct(const DDComp
7272
DDFilteredView fv(cpv, filter);
7373

7474
CmsMTDStringToEnum theCmsMTDStringToEnum;
75-
// temporary workaround to distinguish BTL scenarios ordering without introducing a dependency on MTDTopologyMode
76-
auto isBTLV2 = false;
7775
// temporary workaround to distinguish ETL scenarios ordering without introducing a dependency on MTDTopologyMode
7876
const bool prev8(fv.name().find("EModule") != std::string::npos);
7977

@@ -136,12 +134,7 @@ std::unique_ptr<GeometricTimingDet> DDCmsMTDConstruction::construct(const DDComp
136134
// the level chosen for old corresponds to wafers for D50 and previous scenarios
137135
//
138136
if ((thisNode == GeometricTimingDet::BTLModule) && limit == 0) {
139-
if (theCmsMTDConstruction.isBTLV2(fv)) {
140-
limit = num;
141-
isBTLV2 = true;
142-
} else {
143-
limit = num + 1;
144-
}
137+
limit = num;
145138
} else if ((thisNode == ETLEndComponent) && limit == 0) {
146139
limit = num;
147140
}
@@ -174,26 +167,15 @@ std::unique_ptr<GeometricTimingDet> DDCmsMTDConstruction::construct(const DDComp
174167
edm::LogVerbatim("MTDNumbering") << "GeometricTimingDet order before sorting \n" << before.str();
175168
#endif
176169

177-
if (!isBTLV2) {
178-
for (size_t index = 0; index < layer.size(); index++) {
179-
GeometricTimingDet::ConstGeometricTimingDetContainer& icomp = layer[index]->components();
170+
for (size_t index = 0; index < layer.size(); index++) {
171+
GeometricTimingDet::ConstGeometricTimingDetContainer& icomp = layer[index]->components();
172+
if (index > 0) {
180173
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderZ);
181174
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderRR);
182-
if (index > 0) {
183-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderPhi);
184-
}
185-
}
186-
} else {
187-
for (size_t index = 0; index < layer.size(); index++) {
188-
GeometricTimingDet::ConstGeometricTimingDetContainer& icomp = layer[index]->components();
189-
if (index > 0) {
190-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderZ);
191-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderRR);
192-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderPhi);
193-
} else {
194-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::btlOrderPhi);
195-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::btlOrderZ);
196-
}
175+
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderPhi);
176+
} else {
177+
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::btlOrderPhi);
178+
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::btlOrderZ);
197179
}
198180
}
199181

@@ -276,8 +258,6 @@ std::unique_ptr<GeometricTimingDet> DDCmsMTDConstruction::construct(const cms::D
276258
CmsMTDStringToEnum theCmsMTDStringToEnum;
277259

278260
CmsMTDConstruction<cms::DDFilteredView> theCmsMTDConstruction;
279-
// temporary workaround to distinguish BTL scenarios ordering without introducing a dependency on MTDTopologyMode
280-
auto isBTLV2 = false;
281261
// temporary workaround to distinguish ETL scenarios ordering without introducing a dependency on MTDTopologyMode
282262
const bool prev8(fv.name().find("EModule") != std::string::npos);
283263

@@ -319,11 +299,6 @@ std::unique_ptr<GeometricTimingDet> DDCmsMTDConstruction::construct(const cms::D
319299
#ifdef EDM_ML_DEBUG
320300
edm::LogVerbatim("DD4hep_MTDNumbering") << "Registered in GeometricTimingDet as type " << thisNode;
321301
#endif
322-
if (isBTLV2 == false) {
323-
if (theCmsMTDConstruction.isBTLV2(fv)) {
324-
isBTLV2 = true;
325-
}
326-
}
327302
theCmsMTDConstruction.buildBTLModule(fv, layer.back());
328303
} else if (thisNode == ETLEndComponent) {
329304
#ifdef EDM_ML_DEBUG
@@ -346,26 +321,15 @@ std::unique_ptr<GeometricTimingDet> DDCmsMTDConstruction::construct(const cms::D
346321
edm::LogVerbatim("DD4hep_MTDNumbering") << "GeometricTimingDet order before sorting \n" << before.str();
347322
#endif
348323

349-
if (!isBTLV2) {
350-
for (size_t index = 0; index < layer.size(); index++) {
351-
GeometricTimingDet::ConstGeometricTimingDetContainer& icomp = layer[index]->components();
324+
for (size_t index = 0; index < layer.size(); index++) {
325+
GeometricTimingDet::ConstGeometricTimingDetContainer& icomp = layer[index]->components();
326+
if (index > 0) {
352327
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderZ);
353328
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderRR);
354-
if (index > 0) {
355-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderPhi);
356-
}
357-
}
358-
} else {
359-
for (size_t index = 0; index < layer.size(); index++) {
360-
GeometricTimingDet::ConstGeometricTimingDetContainer& icomp = layer[index]->components();
361-
if (index > 0) {
362-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderZ);
363-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderRR);
364-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderPhi);
365-
} else {
366-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::btlOrderPhi);
367-
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::btlOrderZ);
368-
}
329+
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::mtdOrderPhi);
330+
} else {
331+
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::btlOrderPhi);
332+
std::stable_sort(icomp.begin(), icomp.end(), CmsMTDConstruction<DDFilteredView>::btlOrderZ);
369333
}
370334
}
371335

RecoMTD/DetLayers/src/BTLDetLayerGeometryBuilder.cc

Lines changed: 21 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
#include <Geometry/CommonDetUnit/interface/GeomDet.h>
77
#include <RecoMTD/DetLayers/interface/MTDTrayBarrelLayer.h>
88
#include <RecoMTD/DetLayers/interface/MTDDetTray.h>
9-
#include <Geometry/MTDCommonData/interface/MTDTopologyMode.h>
109

1110
#include <Utilities/General/interface/precomputed_value_sort.h>
1211
#include <Geometry/CommonDetUnit/interface/DetSorting.h>
@@ -27,65 +26,30 @@ vector<DetLayer*> BTLDetLayerGeometryBuilder::buildLayers(const MTDGeometry& geo
2726

2827
vector<const DetRod*> btlDetTrays;
2928

30-
const int mtdTopologyMode = topo.getMTDTopologyMode();
31-
BTLDetId::CrysLayout btlL = MTDTopologyMode::crysLayoutFromTopoMode(mtdTopologyMode);
32-
33-
if (btlL != BTLDetId::CrysLayout::v2 && btlL != BTLDetId::CrysLayout::v3) {
34-
for (unsigned tray = 1; tray <= BTLDetId::HALF_ROD; ++tray) {
35-
vector<const GeomDet*> geomDets;
36-
for (unsigned module = 1; module <= BTLDetId::kModulesPerRODBarPhiFlat; ++module) {
37-
for (unsigned side = 0; side <= 1; ++side) {
38-
const GeomDet* geomDet = geo.idToDet(BTLDetId(side, tray, module, 0, 1));
39-
if (geomDet != nullptr) {
40-
geomDets.push_back(geomDet);
41-
LogTrace("MTDDetLayers") << "get BTL module " << std::hex << BTLDetId(side, tray, module, 0, 1).rawId()
42-
<< std::dec << " at R=" << geomDet->position().perp()
43-
<< ", phi=" << geomDet->position().phi();
44-
}
45-
}
46-
}
47-
48-
if (!geomDets.empty()) {
49-
precomputed_value_sort(geomDets.begin(), geomDets.end(), geomsort::DetZ());
50-
btlDetTrays.push_back(new MTDDetTray(geomDets));
51-
LogTrace("MTDDetLayers") << " New BTLDetTray with " << geomDets.size()
52-
<< " modules at R=" << btlDetTrays.back()->position().perp()
53-
<< ", phi=" << btlDetTrays.back()->position().phi();
54-
}
29+
vector<const GeomDet*> geomDets;
30+
31+
// logical tracking trays are now rows along z of modules, 3 per each mechanical tray, running from -z to z
32+
// MTDGeometry is already built with the proper ordering, it is enough to exploit that
33+
geomDets.reserve(topo.btlModulesPerRod());
34+
35+
uint32_t index(0);
36+
for (const auto& det : geo.detsBTL()) {
37+
index++;
38+
geomDets.emplace_back(det);
39+
if (index == topo.btlModulesPerRod()) {
40+
btlDetTrays.emplace_back(new MTDDetTray(geomDets));
41+
LogTrace("MTDDetLayers") << " New BTLDetTray with " << geomDets.size()
42+
<< " modules at R=" << btlDetTrays.back()->position().perp()
43+
<< ", phi=" << btlDetTrays.back()->position().phi();
44+
index = 0;
45+
geomDets.clear();
5546
}
56-
57-
precomputed_value_sort(btlDetTrays.begin(), btlDetTrays.end(), geomsort::ExtractPhi<GeometricSearchDet, float>());
58-
result.push_back(new MTDTrayBarrelLayer(btlDetTrays));
59-
LogTrace("MTDDetLayers") << "BTLDetLayerGeometryBuilder: new MTDTrayBarrelLayer with " << btlDetTrays.size()
60-
<< " rods, at R " << result.back()->specificSurface().radius();
61-
} else {
62-
vector<const GeomDet*> geomDets;
63-
64-
// logical tracking trays are now rows along z of modules, 3 per each mechanical tray, running from -z to z
65-
// MTDGeometry is already built with the proper ordering, it is enough to exploit that
66-
const uint32_t modulesPerDetTray =
67-
2 * BTLDetId::kRUPerTypeV2 * BTLDetId::kCrystalTypes * BTLDetId::kModulesPerRUV2 / BTLDetId::kModulesPerTrkV2;
68-
geomDets.reserve(modulesPerDetTray);
69-
70-
uint32_t index(0);
71-
for (const auto& det : geo.detsBTL()) {
72-
index++;
73-
geomDets.emplace_back(det);
74-
if (index == modulesPerDetTray) {
75-
btlDetTrays.emplace_back(new MTDDetTray(geomDets));
76-
LogTrace("MTDDetLayers") << " New BTLDetTray with " << geomDets.size()
77-
<< " modules at R=" << btlDetTrays.back()->position().perp()
78-
<< ", phi=" << btlDetTrays.back()->position().phi();
79-
index = 0;
80-
geomDets.clear();
81-
}
82-
}
83-
84-
result.emplace_back(new MTDTrayBarrelLayer(btlDetTrays));
85-
LogTrace("MTDDetLayers") << "BTLDetLayerGeometryBuilder: new MTDTrayBarrelLayer with " << btlDetTrays.size()
86-
<< " rods, at R " << result.back()->specificSurface().radius();
8747
}
8848

49+
result.emplace_back(new MTDTrayBarrelLayer(btlDetTrays));
50+
LogTrace("MTDDetLayers") << "BTLDetLayerGeometryBuilder: new MTDTrayBarrelLayer with " << btlDetTrays.size()
51+
<< " rods, at R " << result.back()->specificSurface().radius();
52+
8953
for (vector<MTDTrayBarrelLayer*>::const_iterator it = result.begin(); it != result.end(); it++)
9054
detlayers.push_back((DetLayer*)(*it));
9155

0 commit comments

Comments
 (0)