Skip to content

Commit 0bce22c

Browse files
authored
Merge pull request #45063 from mmusich/mm_dev_update_MuonHLTSeedMVAClassifier
`MuonHLTSeedMVAClassifier`: update to use MVA-related parameters according to `isL1` value
2 parents 857da60 + fb54b44 commit 0bce22c

File tree

4 files changed

+122
-44
lines changed

4 files changed

+122
-44
lines changed

HLTrigger/Configuration/python/customizeHLTforCMSSW.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,53 @@ def customizeHLTfor44576(process):
268268
break
269269
return process
270270

271+
def customizeHLTfor45063(process):
272+
"""Assigns value of MuonHLTSeedMVAClassifier mva input file, scales and mean values according to the value of isFromL1"""
273+
for prod in producers_by_type(process, 'MuonHLTSeedMVAClassifier'):
274+
if hasattr(prod, "isFromL1"):
275+
if (prod.isFromL1 == True):
276+
if hasattr(prod, "mvaFileBL1"):
277+
prod.mvaFileB = prod.mvaFileBL1
278+
if hasattr(prod, "mvaFileEL1"):
279+
prod.mvaFileE = prod.mvaFileEL1
280+
if hasattr(prod, "mvaScaleMeanBL1"):
281+
prod.mvaScaleMeanB = prod.mvaScaleMeanBL1
282+
if hasattr(prod, "mvaScaleStdBL1"):
283+
prod.mvaScaleStdB = prod.mvaScaleStdBL1
284+
if hasattr(prod, "mvaScaleMeanEL1"):
285+
prod.mvaScaleMeanE = prod.mvaScaleMeanEL1
286+
if hasattr(prod, "mvaScaleStdEL1"):
287+
prod.mvaScaleStdE = prod.mvaScaleStdEL1
288+
else:
289+
if hasattr(prod, "mvaFileBL2"):
290+
prod.mvaFileB = prod.mvaFileBL2
291+
if hasattr(prod, "mvaFileEL2"):
292+
prod.mvaFileE = prod.mvaFileEL2
293+
if hasattr(prod, "mvaScaleMeanBL2"):
294+
prod.mvaScaleMeanB = prod.mvaScaleMeanBL2
295+
if hasattr(prod, "mvaScaleStdBL2"):
296+
prod.mvaScaleStdB = prod.mvaScaleStdBL2
297+
if hasattr(prod, "mvaScaleMeanEL2"):
298+
prod.mvaScaleMeanE = prod.mvaScaleMeanEL2
299+
if hasattr(prod, "mvaScaleStdEL2"):
300+
prod.mvaScaleStdE = prod.mvaScaleStdEL2
301+
302+
for prod in producers_by_type(process, 'MuonHLTSeedMVAClassifier'):
303+
delattr(prod,"mvaFileBL1")
304+
delattr(prod,"mvaFileEL1")
305+
delattr(prod,"mvaScaleMeanBL1")
306+
delattr(prod,"mvaScaleStdBL1")
307+
delattr(prod,"mvaScaleMeanEL1")
308+
delattr(prod,"mvaScaleStdEL1")
309+
delattr(prod,"mvaFileBL2")
310+
delattr(prod,"mvaFileEL2")
311+
delattr(prod,"mvaScaleMeanBL2")
312+
delattr(prod,"mvaScaleStdBL2")
313+
delattr(prod,"mvaScaleMeanEL2")
314+
delattr(prod,"mvaScaleStdEL2")
315+
316+
return process
317+
271318
# CMSSW version specific customizations
272319
def customizeHLTforCMSSW(process, menuType="GRun"):
273320

@@ -278,5 +325,6 @@ def customizeHLTforCMSSW(process, menuType="GRun"):
278325

279326
process = checkHLTfor43774(process)
280327
process = customizeHLTfor44576(process)
328+
process = customizeHLTfor45063(process)
281329

282330
return process

RecoMuon/TrackerSeedGenerator/interface/SeedMvaEstimator.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,24 @@ namespace edm {
2020
class FileInPath;
2121
}
2222

23+
namespace {
24+
enum inputIndexes {
25+
kTsosErr0, // 0
26+
kTsosErr2, // 1
27+
kTsosErr5, // 2
28+
kTsosDxdz, // 3
29+
kTsosDydz, // 4
30+
kTsosQbp, // 5
31+
kDRdRL1SeedP, // 6
32+
kDPhidRL1SeedP, // 7
33+
kLastL1, // 8
34+
35+
kDRdRL2SeedP = 8, // 8
36+
kDPhidRL2SeedP, // 9
37+
kLastL2, // 10
38+
};
39+
} // namespace
40+
2341
class SeedMvaEstimator {
2442
public:
2543
SeedMvaEstimator(const edm::FileInPath& weightsfile,

RecoMuon/TrackerSeedGenerator/plugins/MuonHLTSeedMVAClassifier.cc

Lines changed: 56 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
// system include files
99
#include <memory>
1010
#include <cmath>
11+
#include <tinyxml2.h>
1112

1213
// user include files
1314
#include "FWCore/Framework/interface/Frameworkfwd.h"
@@ -23,6 +24,8 @@
2324
#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
2425
#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
2526

27+
#include "CommonTools/MVAUtils/interface/TMVAZipReader.h"
28+
2629
// TrajectorySeed
2730
#include "DataFormats/TrajectorySeed/interface/TrajectorySeed.h"
2831
#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
@@ -44,6 +47,7 @@ class MuonHLTSeedMVAClassifier : public edm::stream::EDProducer<> {
4447
~MuonHLTSeedMVAClassifier() override = default;
4548

4649
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
50+
bool checkMVAFileConsistency(const std::string& weightsFileFullPath, bool isFromL1) const;
4751

4852
private:
4953
void produce(edm::Event&, const edm::EventSetup&) override;
@@ -87,33 +91,67 @@ class MuonHLTSeedMVAClassifier : public edm::stream::EDProducer<> {
8791
const reco::RecoChargedCandidateCollection& l2Muons);
8892
};
8993

94+
bool MuonHLTSeedMVAClassifier::checkMVAFileConsistency(const std::string& weightsFileFullPath,
95+
const bool isFromL1) const {
96+
tinyxml2::XMLDocument xmlDoc;
97+
if (reco::details::hasEnding(weightsFileFullPath, ".xml")) {
98+
xmlDoc.LoadFile(weightsFileFullPath.c_str());
99+
} else {
100+
edm::LogError("MuonHLTSeedMVAClassifier") << "unsupported file extension, it should be a .xml file!";
101+
return false;
102+
}
103+
tinyxml2::XMLElement* root = xmlDoc.FirstChildElement("MethodSetup");
104+
if (root == nullptr) {
105+
edm::LogError("MuonHLTSeedMVAClassifier") << "could not retrieve the MethodSetup node from XML file!";
106+
return false;
107+
}
108+
109+
const auto& vars = root->FirstChildElement("Variables");
110+
size_t n = 0;
111+
if (vars != nullptr) {
112+
for (tinyxml2::XMLElement* e = vars->FirstChildElement("Variable"); e != nullptr;
113+
e = e->NextSiblingElement("Variable")) {
114+
++n;
115+
}
116+
} else {
117+
edm::LogError("MuonHLTSeedMVAClassifier") << "could not retrieve the Variables node from XML file!";
118+
return false;
119+
}
120+
121+
LogTrace("MuonHLTSeedMVAClassifier") << "MVA file:" << weightsFileFullPath.c_str() << " n Var:" << n;
122+
bool condition = (isFromL1 && (n == inputIndexes::kLastL1)) || (!isFromL1 && (n == inputIndexes::kLastL2));
123+
return condition;
124+
}
125+
90126
MuonHLTSeedMVAClassifier::MuonHLTSeedMVAClassifier(const edm::ParameterSet& iConfig)
91127
: seedToken_(consumes<TrajectorySeedCollection>(iConfig.getParameter<edm::InputTag>("src"))),
92128
l1MuonToken_(consumes<l1t::MuonBxCollection>(iConfig.getParameter<edm::InputTag>("L1Muon"))),
93129
l2MuonToken_(consumes<reco::RecoChargedCandidateCollection>(iConfig.getParameter<edm::InputTag>("L2Muon"))),
94130
trackerGeometryToken_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>()),
95-
96131
rejectAll_(iConfig.getParameter<bool>("rejectAll")),
97132
isFromL1_(iConfig.getParameter<bool>("isFromL1")),
98-
99-
mvaFileB_(iConfig.getParameter<edm::FileInPath>(isFromL1_ ? "mvaFileBL1" : "mvaFileBL2")),
100-
mvaFileE_(iConfig.getParameter<edm::FileInPath>(isFromL1_ ? "mvaFileEL1" : "mvaFileEL2")),
101-
102-
mvaScaleMeanB_(iConfig.getParameter<std::vector<double>>(isFromL1_ ? "mvaScaleMeanBL1" : "mvaScaleMeanBL2")),
103-
mvaScaleStdB_(iConfig.getParameter<std::vector<double>>(isFromL1_ ? "mvaScaleStdBL1" : "mvaScaleStdBL2")),
104-
mvaScaleMeanE_(iConfig.getParameter<std::vector<double>>(isFromL1_ ? "mvaScaleMeanEL1" : "mvaScaleMeanEL2")),
105-
mvaScaleStdE_(iConfig.getParameter<std::vector<double>>(isFromL1_ ? "mvaScaleStdEL1" : "mvaScaleStdEL2")),
106-
133+
mvaFileB_(iConfig.getParameter<edm::FileInPath>("mvaFileB")),
134+
mvaFileE_(iConfig.getParameter<edm::FileInPath>("mvaFileE")),
135+
mvaScaleMeanB_(iConfig.getParameter<std::vector<double>>("mvaScaleMeanB")),
136+
mvaScaleStdB_(iConfig.getParameter<std::vector<double>>("mvaScaleStdB")),
137+
mvaScaleMeanE_(iConfig.getParameter<std::vector<double>>("mvaScaleMeanE")),
138+
mvaScaleStdE_(iConfig.getParameter<std::vector<double>>("mvaScaleStdE")),
107139
doSort_(iConfig.getParameter<bool>("doSort")),
108140
nSeedsMaxB_(iConfig.getParameter<int>("nSeedsMaxB")),
109141
nSeedsMaxE_(iConfig.getParameter<int>("nSeedsMaxE")),
110-
111142
etaEdge_(iConfig.getParameter<double>("etaEdge")),
112143
mvaCutB_(iConfig.getParameter<double>("mvaCutB")),
113144
mvaCutE_(iConfig.getParameter<double>("mvaCutE")),
114-
115145
minL1Qual_(iConfig.getParameter<int>("minL1Qual")),
116146
baseScore_(iConfig.getParameter<double>("baseScore")) {
147+
const auto& mvaFileBPath = mvaFileB_.fullPath();
148+
const auto& mvaFileEPath = mvaFileE_.fullPath();
149+
150+
if (!checkMVAFileConsistency(mvaFileBPath, isFromL1_) || !checkMVAFileConsistency(mvaFileEPath, isFromL1_)) {
151+
throw cms::Exception("ConfigurationError") << " MVA files appear to be not consistent with the value of isFromL1 "
152+
"parameter.\n Please check your configuration.";
153+
}
154+
117155
if (!rejectAll_) {
118156
mvaEstimator_ = std::make_pair(
119157
std::make_unique<SeedMvaEstimator>(mvaFileB_, mvaScaleMeanB_, mvaScaleStdB_, isFromL1_, minL1Qual_),
@@ -247,22 +285,14 @@ void MuonHLTSeedMVAClassifier::fillDescriptions(edm::ConfigurationDescriptions&
247285
desc.add<bool>("rejectAll", false);
248286
desc.add<bool>("isFromL1", false);
249287

250-
desc.add<edm::FileInPath>("mvaFileBL1",
288+
desc.add<edm::FileInPath>("mvaFileB",
251289
edm::FileInPath("RecoMuon/TrackerSeedGenerator/data/xgb_Run3_Iter2FromL1Seeds_barrel.xml"));
252-
desc.add<edm::FileInPath>("mvaFileEL1",
290+
desc.add<edm::FileInPath>("mvaFileE",
253291
edm::FileInPath("RecoMuon/TrackerSeedGenerator/data/xgb_Run3_Iter2FromL1Seeds_endcap.xml"));
254-
desc.add<edm::FileInPath>("mvaFileBL2",
255-
edm::FileInPath("RecoMuon/TrackerSeedGenerator/data/xgb_Run3_Iter2Seeds_barrel.xml"));
256-
desc.add<edm::FileInPath>("mvaFileEL2",
257-
edm::FileInPath("RecoMuon/TrackerSeedGenerator/data/xgb_Run3_Iter2Seeds_endcap.xml"));
258-
desc.add<std::vector<double>>("mvaScaleMeanBL1", {0., 0., 0., 0., 0., 0., 0., 0.});
259-
desc.add<std::vector<double>>("mvaScaleStdBL1", {1., 1., 1., 1., 1., 1., 1., 1.});
260-
desc.add<std::vector<double>>("mvaScaleMeanEL1", {0., 0., 0., 0., 0., 0., 0., 0.});
261-
desc.add<std::vector<double>>("mvaScaleStdEL1", {1., 1., 1., 1., 1., 1., 1., 1.});
262-
desc.add<std::vector<double>>("mvaScaleMeanBL2", {0., 0., 0., 0., 0., 0., 0., 0., 0., 0.});
263-
desc.add<std::vector<double>>("mvaScaleStdBL2", {1., 1., 1., 1., 1., 1., 1., 1., 1., 1.});
264-
desc.add<std::vector<double>>("mvaScaleMeanEL2", {0., 0., 0., 0., 0., 0., 0., 0., 0., 0.});
265-
desc.add<std::vector<double>>("mvaScaleStdEL2", {1., 1., 1., 1., 1., 1., 1., 1., 1., 1.});
292+
desc.add<std::vector<double>>("mvaScaleMeanB", {0., 0., 0., 0., 0., 0., 0., 0.});
293+
desc.add<std::vector<double>>("mvaScaleStdB", {1., 1., 1., 1., 1., 1., 1., 1.});
294+
desc.add<std::vector<double>>("mvaScaleMeanE", {0., 0., 0., 0., 0., 0., 0., 0.});
295+
desc.add<std::vector<double>>("mvaScaleStdE", {1., 1., 1., 1., 1., 1., 1., 1.});
266296

267297
desc.add<bool>("doSort", false);
268298
desc.add<int>("nSeedsMaxB", 1e6);

RecoMuon/TrackerSeedGenerator/src/SeedMvaEstimator.cc

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,6 @@ SeedMvaEstimator::SeedMvaEstimator(const edm::FileInPath& weightsfile,
2020

2121
SeedMvaEstimator::~SeedMvaEstimator() {}
2222

23-
namespace {
24-
enum inputIndexes {
25-
kTsosErr0, // 0
26-
kTsosErr2, // 1
27-
kTsosErr5, // 2
28-
kTsosDxdz, // 3
29-
kTsosDydz, // 4
30-
kTsosQbp, // 5
31-
kDRdRL1SeedP, // 6
32-
kDPhidRL1SeedP, // 7
33-
kLastL1, // 8
34-
35-
kDRdRL2SeedP = 8, // 8
36-
kDPhidRL2SeedP, // 9
37-
kLastL2, // 10
38-
};
39-
} // namespace
40-
4123
void SeedMvaEstimator::getL1MuonVariables(const GlobalVector& global_p,
4224
const l1t::MuonBxCollection& l1Muons,
4325
float& dR2dRL1SeedP,

0 commit comments

Comments
 (0)