Skip to content

Commit 333d852

Browse files
committed
migrate HLTLevel1GTSeed to an HLTStreamFilter, as it needs a per-stream internal state
1 parent 802aa35 commit 333d852

File tree

3 files changed

+48
-92
lines changed

3 files changed

+48
-92
lines changed

HLTrigger/HLTfilters/interface/HLTLevel1GTSeed.h

+10-21
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Description: filter L1 bits and extract seed objects from L1 GT for HLT algorithms.
99
*
1010
* Implementation:
11-
* This class is an HLTFilter (-> EDFilter). It implements:
11+
* This class is an HLTStreamFilter (-> stream::EDFilter). It implements:
1212
* - filtering on Level-1 bits, given via a logical expression of algorithm names
1313
* - extraction of the seed objects from L1 GT object map record
1414
*
@@ -24,7 +24,7 @@
2424
// user include files
2525

2626
// base class
27-
#include "HLTrigger/HLTcore/interface/HLTFilter.h"
27+
#include "HLTrigger/HLTcore/interface/HLTStreamFilter.h"
2828

2929
#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
3030

@@ -49,7 +49,7 @@ namespace edm {
4949
#include "DataFormats/L1Trigger/interface/L1EtMissParticleFwd.h"
5050

5151
// class declaration
52-
class HLTLevel1GTSeed : public HLTFilter
52+
class HLTLevel1GTSeed : public HLTStreamFilter
5353
{
5454

5555
public:
@@ -69,7 +69,7 @@ class HLTLevel1GTSeed : public HLTFilter
6969
private:
7070

7171
/// get the vector of object types for a condition cndName on the GTL chip chipNumber
72-
const std::vector<L1GtObject>* objectTypeVec(const int chipNumber, const std::string& cndName);
72+
const std::vector<L1GtObject>* objectTypeVec(const int chipNumber, const std::string& cndName) const;
7373

7474
/// update the tokenNumber (holding the bit numbers) from m_l1AlgoLogicParser
7575
/// for a new L1 Trigger menu
@@ -81,17 +81,18 @@ class HLTLevel1GTSeed : public HLTFilter
8181
const std::vector<unsigned int>& triggerMask, const int physicsDaqPartition);
8282

8383
/// for seeding via technical triggers, convert the "name" to tokenNumber
84-
/// (seeding via bit numbers)
84+
/// (seeding via bit numbers) - done once in constructor
8585
void convertStringToBitNumber();
8686

8787
/// debug print grouped in a single function
8888
/// can be called for a new menu (bool "true") or for a new event
89-
void debugPrint(bool);
89+
void debugPrint(bool) const;
9090

9191
/// seeding is done via L1 trigger object maps, considering the objects which fired in L1
9292
bool seedsL1TriggerObjectMaps(
9393
edm::Event &,
9494
trigger::TriggerFilterObjectWithRefs &,
95+
const L1GtTriggerMask *,
9596
const L1GlobalTriggerReadoutRecord *,
9697
const int physicsDaqPartition);
9798

@@ -100,32 +101,20 @@ class HLTLevel1GTSeed : public HLTFilter
100101
/// L1 conditions from the seeding logical expression for bunch crosses F, 0, 1
101102
/// directly from L1Extra and use them as seeds at HLT
102103
/// method and filter return true if at least an object is filled
103-
bool seedsL1Extra(edm::Event &, trigger::TriggerFilterObjectWithRefs &);
104+
bool seedsL1Extra(edm::Event &, trigger::TriggerFilterObjectWithRefs &) const;
104105

105106
/// detailed print of filter content
106-
void dumpTriggerFilterObjectWithRefs(trigger::TriggerFilterObjectWithRefs &);
107+
void dumpTriggerFilterObjectWithRefs(trigger::TriggerFilterObjectWithRefs &) const;
107108

108109

109110
private:
110111

111112
// cached stuff
112113

113114
/// trigger menu
114-
const L1GtTriggerMenu* m_l1GtMenu;
115+
L1GtTriggerMenu * m_l1GtMenu;
115116
unsigned long long m_l1GtMenuCacheID;
116117

117-
/// trigger masks
118-
const L1GtTriggerMask* m_l1GtTmAlgo;
119-
unsigned long long m_l1GtTmAlgoCacheID;
120-
121-
const L1GtTriggerMask* m_l1GtTmTech;
122-
unsigned long long m_l1GtTmTechCacheID;
123-
124-
std::vector<unsigned int> m_triggerMaskAlgoTrig;
125-
std::vector<unsigned int> m_triggerMaskTechTrig;
126-
127-
//
128-
129118
/// logic parser for m_l1SeedsLogicalExpression
130119
L1GtLogicParser m_l1AlgoLogicParser;
131120

HLTrigger/HLTfilters/src/HLTLevel1GTSeed.cc

+38-69
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* Description: filter L1 bits and extract seed objects from L1 GT for HLT algorithms.
66
*
77
* Implementation:
8-
* This class is an HLTFilter (-> EDFilter). It implements:
8+
* This class is an HLTStreamFilter (-> stream::EDFilter). It implements:
99
* - filtering on Level-1 bits, given via a logical expression of algorithm names
1010
* - extraction of the seed objects from L1 GT object map record
1111
*
@@ -73,7 +73,7 @@
7373
#include "FWCore/Framework/interface/ESHandle.h"
7474

7575
// constructors
76-
HLTLevel1GTSeed::HLTLevel1GTSeed(const edm::ParameterSet& parSet) : HLTFilter(parSet),
76+
HLTLevel1GTSeed::HLTLevel1GTSeed(const edm::ParameterSet& parSet) : HLTStreamFilter(parSet),
7777
// seeding done via L1 trigger object maps, with objects that fired
7878
m_l1UseL1TriggerObjectMaps(parSet.getParameter<bool> (
7979
"L1UseL1TriggerObjectMaps")),
@@ -179,12 +179,9 @@ HLTLevel1GTSeed::HLTLevel1GTSeed(const edm::ParameterSet& parSet) : HLTFilter(pa
179179
<< "Input tag for L1 muon collections: "
180180
<< m_l1MuonCollectionTag << " \n" << std::endl;
181181

182-
// initialize cached IDs
182+
// initialize cache
183+
m_l1GtMenu = nullptr;
183184
m_l1GtMenuCacheID = 0ULL;
184-
185-
m_l1GtTmAlgoCacheID = 0ULL;
186-
m_l1GtTmTechCacheID = 0ULL;
187-
188185
}
189186

190187
// destructor
@@ -271,6 +268,10 @@ bool HLTLevel1GTSeed::hltFilter(edm::Event& iEvent, const edm::EventSetup& evSet
271268
filterproduct.addCollectionTag(m_l1EtMissMHTTag);
272269
}
273270

271+
// get the trigger mask from the EventSetup
272+
edm::ESHandle<L1GtTriggerMask> l1GtTmAlgo;
273+
evSetup.get<L1GtTriggerMaskAlgoTrigRcd>().get(l1GtTmAlgo);
274+
274275
// get L1GlobalTriggerReadoutRecord and GT decision
275276
edm::Handle<L1GlobalTriggerReadoutRecord> gtReadoutRecord;
276277
iEvent.getByToken(m_l1GtReadoutRecordToken, gtReadoutRecord);
@@ -312,29 +313,14 @@ bool HLTLevel1GTSeed::hltFilter(edm::Event& iEvent, const edm::EventSetup& evSet
312313
// seeding done via technical trigger bits
313314
if (m_l1TechTriggerSeeding) {
314315

315-
// get / update the trigger mask from the EventSetup
316-
// local cache & check on cacheIdentifier
317-
unsigned long long l1GtTmTechCacheID = evSetup.get<
318-
L1GtTriggerMaskTechTrigRcd>().cacheIdentifier();
319-
320-
if (m_l1GtTmTechCacheID != l1GtTmTechCacheID) {
321-
322-
edm::ESHandle<L1GtTriggerMask> l1GtTmTech;
323-
evSetup.get<L1GtTriggerMaskTechTrigRcd>().get(l1GtTmTech);
324-
m_l1GtTmTech = l1GtTmTech.product();
325-
326-
m_triggerMaskTechTrig = m_l1GtTmTech->gtTriggerMask();
327-
328-
m_l1GtTmTechCacheID = l1GtTmTechCacheID;
329-
330-
}
316+
// get the technical trigger mask from the EventSetup
317+
edm::ESHandle<L1GtTriggerMask> l1GtTmTech;
318+
evSetup.get<L1GtTriggerMaskTechTrigRcd>().get(l1GtTmTech);
331319

332320
// get Global Trigger technical trigger word, update the tokenResult members
333321
// from m_l1AlgoLogicParser and get the result for the logical expression
334-
const std::vector<bool>& gtTechTrigWord =
335-
gtReadoutRecord->technicalTriggerWord();
336-
updateAlgoLogicParser(gtTechTrigWord, m_triggerMaskTechTrig,
337-
physicsDaqPartition);
322+
const std::vector<bool>& gtTechTrigWord = gtReadoutRecord->technicalTriggerWord();
323+
updateAlgoLogicParser(gtTechTrigWord, l1GtTmTech->gtTriggerMask(), physicsDaqPartition);
338324

339325
// always empty filter - GT not aware of objects for technical triggers
340326
bool seedsResult = m_l1AlgoLogicParser.expressionResult();
@@ -359,12 +345,13 @@ bool HLTLevel1GTSeed::hltFilter(edm::Event& iEvent, const edm::EventSetup& evSet
359345

360346
edm::ESHandle<L1GtTriggerMenu> l1GtMenu;
361347
evSetup.get<L1GtTriggerMenuRcd>().get(l1GtMenu);
362-
m_l1GtMenu = l1GtMenu.product();
363-
(const_cast<L1GtTriggerMenu*> (m_l1GtMenu))->buildGtConditionMap(); //...ugly
364-
348+
// make a copy of the L1GtTriggerMenu in order to call buildGtConditionMap() (FIXME - is this really needed ?)
349+
delete m_l1GtMenu;
350+
m_l1GtMenu = new L1GtTriggerMenu(* l1GtMenu.product());
351+
m_l1GtMenu->buildGtConditionMap();
365352
m_l1GtMenuCacheID = l1GtMenuCacheID;
366353

367-
const AlgorithmMap& algorithmMap = l1GtMenu->gtAlgorithmMap();
354+
const AlgorithmMap& algorithmMap = l1GtMenu->gtAlgorithmMap();
368355
const AlgorithmMap& algorithmAliasMap = l1GtMenu->gtAlgorithmAliasMap();
369356

370357
LogTrace("HLTLevel1GTSeed") << "\n L1 trigger menu "
@@ -382,35 +369,13 @@ bool HLTLevel1GTSeed::hltFilter(edm::Event& iEvent, const edm::EventSetup& evSet
382369
}
383370
}
384371

385-
// get / update the trigger mask from the EventSetup
386-
// local cache & check on cacheIdentifier
387-
388-
unsigned long long l1GtTmAlgoCacheID = evSetup.get<
389-
L1GtTriggerMaskAlgoTrigRcd>().cacheIdentifier();
390-
391-
if (m_l1GtTmAlgoCacheID != l1GtTmAlgoCacheID) {
392-
393-
edm::ESHandle<L1GtTriggerMask> l1GtTmAlgo;
394-
evSetup.get<L1GtTriggerMaskAlgoTrigRcd>().get(l1GtTmAlgo);
395-
m_l1GtTmAlgo = l1GtTmAlgo.product();
396-
397-
m_triggerMaskAlgoTrig = m_l1GtTmAlgo->gtTriggerMask();
398-
399-
m_l1GtTmAlgoCacheID = l1GtTmAlgoCacheID;
400-
401-
}
402-
403372
// FinalOR is true, it was tested before
404373
if (m_l1UseL1TriggerObjectMaps) {
405-
if (!(seedsL1TriggerObjectMaps(iEvent, filterproduct,
406-
gtReadoutRecordPtr, physicsDaqPartition))) {
374+
if (not seedsL1TriggerObjectMaps(iEvent, filterproduct, l1GtTmAlgo.product(), gtReadoutRecordPtr, physicsDaqPartition))
407375
return false;
408-
}
409376
} else {
410-
if (!(seedsL1Extra(iEvent, filterproduct))) {
377+
if (not seedsL1Extra(iEvent, filterproduct))
411378
return false;
412-
}
413-
414379
}
415380

416381
if (m_isDebugEnabled) {
@@ -422,7 +387,7 @@ bool HLTLevel1GTSeed::hltFilter(edm::Event& iEvent, const edm::EventSetup& evSet
422387
}
423388

424389
const std::vector<L1GtObject>* HLTLevel1GTSeed::objectTypeVec(const int chipNr,
425-
const std::string& cndName) {
390+
const std::string& cndName) const {
426391

427392
const ConditionMap& conditionMap =
428393
(m_l1GtMenu->gtConditionMap()).at(chipNr);
@@ -437,11 +402,9 @@ const std::vector<L1GtObject>* HLTLevel1GTSeed::objectTypeVec(const int chipNr,
437402

438403
// for a new L1 Trigger menu, update the tokenNumber (holding the bit numbers)
439404
// from m_l1AlgoLogicParser and from m_l1AlgoSeeds, and fill the m_l1AlgoSeedsRpn vector
440-
void HLTLevel1GTSeed::updateAlgoLogicParser(const L1GtTriggerMenu* l1GtMenu,
441-
const AlgorithmMap& algorithmMap) {
405+
void HLTLevel1GTSeed::updateAlgoLogicParser(const L1GtTriggerMenu* l1GtMenu, const AlgorithmMap& algorithmMap) {
442406

443-
std::vector<L1GtLogicParser::OperandToken>& algOpTokenVector =
444-
m_l1AlgoLogicParser.operandTokenVector();
407+
std::vector<L1GtLogicParser::OperandToken>& algOpTokenVector = m_l1AlgoLogicParser.operandTokenVector();
445408

446409
size_t jSeed = 0;
447410
size_t l1AlgoSeedsSize = m_l1AlgoSeeds.size();
@@ -592,7 +555,7 @@ void HLTLevel1GTSeed::updateAlgoLogicParser(const std::vector<bool>& gtWord,
592555
// (seeding via bit numbers) - done once in constructor
593556
void HLTLevel1GTSeed::convertStringToBitNumber() {
594557

595-
std::vector<L1GtLogicParser::OperandToken>& algOpTokenVector =
558+
std::vector<L1GtLogicParser::OperandToken> & algOpTokenVector =
596559
m_l1AlgoLogicParser.operandTokenVector();
597560

598561
for (size_t i = 0; i < algOpTokenVector.size(); ++i) {
@@ -636,7 +599,8 @@ void HLTLevel1GTSeed::convertStringToBitNumber() {
636599

637600
// debug print grouped in a single function
638601
// can be called for a new menu (bool "true") or for a new event
639-
void HLTLevel1GTSeed::debugPrint(bool newMenu) {
602+
void HLTLevel1GTSeed::debugPrint(bool newMenu) const
603+
{
640604

641605
if (m_l1TechTriggerSeeding) {
642606
LogDebug("HLTLevel1GTSeed")
@@ -657,7 +621,7 @@ void HLTLevel1GTSeed::debugPrint(bool newMenu) {
657621
}
658622
}
659623

660-
std::vector<L1GtLogicParser::OperandToken>& algOpTokenVector =
624+
std::vector<L1GtLogicParser::OperandToken> const & algOpTokenVector =
661625
m_l1AlgoLogicParser.operandTokenVector();
662626

663627
LogTrace("HLTLevel1GTSeed")
@@ -748,13 +712,14 @@ void HLTLevel1GTSeed::debugPrint(bool newMenu) {
748712
// seeding is done via L1 trigger object maps, considering the objects which fired in L1
749713
bool HLTLevel1GTSeed::seedsL1TriggerObjectMaps(edm::Event& iEvent,
750714
trigger::TriggerFilterObjectWithRefs & filterproduct,
715+
const L1GtTriggerMask * l1GtTmAlgo,
751716
const L1GlobalTriggerReadoutRecord* gtReadoutRecordPtr,
752717
const int physicsDaqPartition) {
753718

754719
// get Global Trigger decision word, update the tokenResult members
755720
// from m_l1AlgoLogicParser and get the result for the logical expression
756721
const std::vector<bool>& gtDecisionWord = gtReadoutRecordPtr->decisionWord();
757-
updateAlgoLogicParser(gtDecisionWord, m_triggerMaskAlgoTrig, physicsDaqPartition);
722+
updateAlgoLogicParser(gtDecisionWord, l1GtTmAlgo->gtTriggerMask(), physicsDaqPartition);
758723

759724
bool seedsResult = m_l1AlgoLogicParser.expressionResult();
760725

@@ -852,13 +817,13 @@ bool HLTLevel1GTSeed::seedsL1TriggerObjectMaps(edm::Event& iEvent,
852817
}
853818

854819
const std::vector<L1GtLogicParser::OperandToken>& opTokenVecObjMap =
855-
objMap->operandTokenVector();
820+
objMap->operandTokenVector();
856821

857822
const std::vector<L1GtLogicParser::TokenRPN>& algoSeedsRpn =
858-
* ( m_l1AlgoSeedsRpn.at(iAlgo) );
823+
* ( m_l1AlgoSeedsRpn.at(iAlgo) );
859824

860825
const std::vector<const std::vector<L1GtObject>*>& algoSeedsObjTypeVec =
861-
m_l1AlgoSeedsObjType[iAlgo];
826+
m_l1AlgoSeedsObjType[iAlgo];
862827

863828
//
864829
L1GtLogicParser logicParserConditions(algoSeedsRpn, opTokenVecObjMap);
@@ -1321,7 +1286,7 @@ bool HLTLevel1GTSeed::seedsL1TriggerObjectMaps(edm::Event& iEvent,
13211286
// L1 conditions from the seeding logical expression for bunch crosses F, 0, 1
13221287
// directly from L1Extra and use them as seeds at HLT
13231288
// method and filter return true if at least an object is filled
1324-
bool HLTLevel1GTSeed::seedsL1Extra(edm::Event & iEvent, trigger::TriggerFilterObjectWithRefs & filterproduct) {
1289+
bool HLTLevel1GTSeed::seedsL1Extra(edm::Event & iEvent, trigger::TriggerFilterObjectWithRefs & filterproduct) const {
13251290

13261291

13271292

@@ -1856,7 +1821,7 @@ bool HLTLevel1GTSeed::seedsL1Extra(edm::Event & iEvent, trigger::TriggerFilterOb
18561821
}
18571822

18581823
// detailed print of filter content
1859-
void HLTLevel1GTSeed::dumpTriggerFilterObjectWithRefs(trigger::TriggerFilterObjectWithRefs & filterproduct)
1824+
void HLTLevel1GTSeed::dumpTriggerFilterObjectWithRefs(trigger::TriggerFilterObjectWithRefs & filterproduct) const
18601825
{
18611826
LogDebug("HLTLevel1GTSeed") << "\nHLTLevel1GTSeed::hltFilter "
18621827
<< "\n Dump TriggerFilterObjectWithRefs\n" << std::endl;
@@ -2019,3 +1984,7 @@ void HLTLevel1GTSeed::dumpTriggerFilterObjectWithRefs(trigger::TriggerFilterObje
20191984
LogTrace("HLTLevel1GTSeed") << " \n\n" << std::endl;
20201985

20211986
}
1987+
1988+
// register as framework plugin
1989+
#include "FWCore/Framework/interface/MakerMacros.h"
1990+
DEFINE_FWK_MODULE(HLTLevel1GTSeed);

HLTrigger/HLTfilters/src/SealModule.cc

-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
#include "HLTrigger/HLTfilters/interface/HLTBool.h"
44
#include "HLTrigger/HLTfilters/interface/HLTFiltCand.h"
5-
#include "HLTrigger/HLTfilters/interface/HLTLevel1GTSeed.h"
65
#include "HLTrigger/HLTfilters/interface/HLTHighLevel.h"
76

87
#include "DataFormats/L1Trigger/interface/L1EmParticle.h"
@@ -117,7 +116,6 @@ typedef HLTDoubletDZ<Electron ,RecoChargedCandidate> HLT2ElectronMuon
117116

118117
DEFINE_FWK_MODULE(HLTBool);
119118
DEFINE_FWK_MODULE(HLTFiltCand);
120-
DEFINE_FWK_MODULE(HLTLevel1GTSeed);
121119
DEFINE_FWK_MODULE(HLTHighLevel);
122120

123121
DEFINE_FWK_MODULE(HLT2CaloJetCaloJet);

0 commit comments

Comments
 (0)