Skip to content

Commit 87119e3

Browse files
authored
Merge pull request cms-sw#32544 from ghugo83/dd4hep_perf_test
Improve DD4hep workflow perf, step 4: Improve performance of GeometricDet construction in old DD (DDD) and DD4hep
2 parents d10412c + 0663f49 commit 87119e3

File tree

4 files changed

+61
-46
lines changed

4 files changed

+61
-46
lines changed

DetectorDescription/DDCMS/src/DDFilteredView.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -770,8 +770,9 @@ const int DDFilteredView::nodeCopyNoAt(int level) const {
770770
// Compare if name matches a selection pattern that
771771
// may or may not be defined as a regular expression
772772
bool DDFilteredView::compareEqualName(const std::string_view selection, const std::string_view name) const {
773-
return (!(dd4hep::dd::isRegex(selection)) ? dd4hep::dd::compareEqual(name, selection)
774-
: regex_match(name.begin(), name.end(), regex(std::string(selection))));
773+
return (!(dd4hep::dd::isRegex(selection))
774+
? dd4hep::dd::compareEqual(name, selection)
775+
: regex_match(name.begin(), name.end(), regex(selection.begin(), selection.end())));
775776
}
776777

777778
// Check if both name and it's selection pattern

Geometry/TrackerNumberingBuilder/interface/GeometricDet.h

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -171,28 +171,28 @@ class GeometricDet {
171171
GeometricEnumType type_;
172172

173173
nav_type ddd_;
174-
DetId geographicalID_;
174+
DetId geographicalID_ = 0;
175175

176176
Translation trans_; // in mm
177-
double rho_; // in mm
178-
double phi_;
177+
double rho_ = 0.; // in mm
178+
double phi_ = 0.;
179179
RotationMatrix rot_;
180180

181181
cms::DDSolidShape shape_;
182182
std::vector<double> params_; // in mm
183183

184-
double radLength_;
185-
double xi_;
186-
double pixROCRows_;
187-
double pixROCCols_;
188-
double pixROCx_;
189-
double pixROCy_;
190-
bool stereo_;
191-
bool isLowerSensor_;
192-
bool isUpperSensor_;
193-
double siliconAPVNum_;
194-
195-
bool isFromDD4hep_;
184+
double radLength_ = 0.;
185+
double xi_ = 0.;
186+
double pixROCRows_ = 0.;
187+
double pixROCCols_ = 0.;
188+
double pixROCx_ = 0.;
189+
double pixROCy_ = 0.;
190+
bool stereo_ = false;
191+
bool isLowerSensor_ = false;
192+
bool isUpperSensor_ = false;
193+
double siliconAPVNum_ = 0.;
194+
195+
bool isFromDD4hep_ = false;
196196

197197
ConstGeometricDetContainer container_;
198198
};

Geometry/TrackerNumberingBuilder/plugins/DDDCmsTrackerContruction.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@ std::unique_ptr<GeometricDet> DDDCmsTrackerContruction::construct(const DDCompac
3939
CmsTrackerBuilder<DDFilteredView> theCmsTrackerBuilder;
4040
theCmsTrackerBuilder.build(fv, tracker.get(), attribute);
4141

42-
if (DEBUG) {
43-
printAllTrackerGeometricDetsBeforeDetIDBuilding(tracker.get());
44-
}
45-
4642
edm::LogVerbatim("DDDCmsTrackerContruction") << "Assign DetIds";
4743
CmsTrackerDetIdBuilder theCmsTrackerDetIdBuilder(detidShifts);
4844
theCmsTrackerDetIdBuilder.buildId(*tracker);
4945

46+
if (DEBUG) {
47+
printAllTrackerGeometricDetsBeforeDetIDBuilding(tracker.get());
48+
}
49+
5050
fv.parent();
5151
//
5252
// set the Tracker
@@ -83,14 +83,14 @@ std::unique_ptr<GeometricDet> DDDCmsTrackerContruction::construct(const cms::DDC
8383
CmsTrackerBuilder<cms::DDFilteredView> theCmsTrackerBuilder;
8484
theCmsTrackerBuilder.build(fv, tracker.get(), attribute);
8585

86-
if (DEBUG) {
87-
printAllTrackerGeometricDetsBeforeDetIDBuilding(tracker.get());
88-
}
89-
9086
edm::LogVerbatim("DDDCmsTrackerContruction") << "Assign DetIds";
9187
CmsTrackerDetIdBuilder theCmsTrackerDetIdBuilder(detidShifts);
9288
theCmsTrackerDetIdBuilder.buildId(*tracker);
9389

90+
if (DEBUG) {
91+
printAllTrackerGeometricDetsBeforeDetIDBuilding(tracker.get());
92+
}
93+
9494
return tracker;
9595
}
9696

Geometry/TrackerNumberingBuilder/src/GeometricDet.cc

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -78,20 +78,24 @@ GeometricDet::GeometricDet(DDFilteredView* fv, GeometricEnumType type)
7878
rot_(fv->rotation()),
7979
shape_(cms::dd::name_from_value(cms::LegacySolidShapeMap, fv->shape())),
8080
params_(fv->parameters()),
81-
radLength_(getDouble("TrackerRadLength", *fv)),
82-
xi_(getDouble("TrackerXi", *fv)),
83-
pixROCRows_(getDouble("PixelROCRows", *fv)),
84-
pixROCCols_(getDouble("PixelROCCols", *fv)),
85-
pixROCx_(getDouble("PixelROC_X", *fv)),
86-
pixROCy_(getDouble("PixelROC_Y", *fv)),
87-
stereo_(getString("TrackerStereoDetectors", *fv) == strue),
88-
isLowerSensor_(getString("TrackerLowerDetectors", *fv) == strue),
89-
isUpperSensor_(getString("TrackerUpperDetectors", *fv) == strue),
90-
siliconAPVNum_(getDouble("SiliconAPVNumber", *fv)),
9181
isFromDD4hep_(false) {
9282
// workaround instead of this at initialization
9383
const DDFilteredView::nav_type& nt = fv->navPos();
9484
ddd_ = nav_type(nt.begin(), nt.end());
85+
86+
// Only look for sensor-related info on sensor volumes!
87+
if (type_ == DetUnit) {
88+
radLength_ = getDouble("TrackerRadLength", *fv);
89+
xi_ = getDouble("TrackerXi", *fv);
90+
pixROCRows_ = getDouble("PixelROCRows", *fv);
91+
pixROCCols_ = getDouble("PixelROCCols", *fv);
92+
pixROCx_ = getDouble("PixelROC_X", *fv);
93+
pixROCy_ = getDouble("PixelROC_Y", *fv);
94+
stereo_ = (getString("TrackerStereoDetectors", *fv) == strue);
95+
isLowerSensor_ = (getString("TrackerLowerDetectors", *fv) == strue);
96+
isUpperSensor_ = (getString("TrackerUpperDetectors", *fv) == strue);
97+
siliconAPVNum_ = getDouble("SiliconAPVNumber", *fv);
98+
}
9599
}
96100

97101
/*
@@ -107,18 +111,28 @@ GeometricDet::GeometricDet(cms::DDFilteredView* fv, GeometricEnumType type)
107111
rot_(fv->rotation()),
108112
shape_(fv->shape()),
109113
params_(computeLegacyShapeParameters(shape_, fv->solid())),
110-
pixROCRows_(fv->get<double>("PixelROCRows")),
111-
pixROCCols_(fv->get<double>("PixelROCCols")),
112-
pixROCx_(fv->get<double>("PixelROC_X")),
113-
pixROCy_(fv->get<double>("PixelROC_Y")),
114-
stereo_(fv->get<std::string_view>("TrackerStereoDetectors") == strue),
115-
isLowerSensor_(fv->get<std::string_view>("TrackerLowerDetectors") == strue),
116-
isUpperSensor_(fv->get<std::string_view>("TrackerUpperDetectors") == strue),
117-
siliconAPVNum_(fv->get<double>("SiliconAPVNumber")),
118114
isFromDD4hep_(true) {
119-
fv->findSpecPar("TrackerRadLength", "TrackerXi");
120-
radLength_ = fv->getNextValue("TrackerRadLength");
121-
xi_ = fv->getNextValue("TrackerXi");
115+
// Only look for sensor-related info on sensor volumes!
116+
if (type_ == DetUnit) {
117+
// IT sensors only (NB: hence could add a branch here, but not a critical part on perf)
118+
pixROCRows_ = fv->get<double>("PixelROCRows");
119+
pixROCCols_ = fv->get<double>("PixelROCCols");
120+
pixROCx_ = fv->get<double>("PixelROC_X");
121+
pixROCy_ = fv->get<double>("PixelROC_Y");
122+
123+
// Phase 1 OT sensors only (NB: hence could add a branch here, but not a critical part on perf)
124+
stereo_ = (fv->get<std::string_view>("TrackerStereoDetectors") == strue);
125+
siliconAPVNum_ = fv->get<double>("SiliconAPVNumber");
126+
127+
// Phase 2 OT sensors only (NB: hence could add a branch here, but not a critical part on perf)
128+
isLowerSensor_ = (fv->get<std::string_view>("TrackerLowerDetectors") == strue);
129+
isUpperSensor_ = (fv->get<std::string_view>("TrackerUpperDetectors") == strue);
130+
131+
// All sensors: IT or OT, Phase 1 or Phase 2 (NB: critical part on perf)
132+
fv->findSpecPar("TrackerRadLength", "TrackerXi");
133+
radLength_ = fv->getNextValue("TrackerRadLength");
134+
xi_ = fv->getNextValue("TrackerXi");
135+
}
122136
}
123137

124138
/*

0 commit comments

Comments
 (0)