CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
pat::PATTriggerProducer Class Reference

Produces the full or stand-alone PAT trigger information collections. More...

#include "PhysicsTools/PatAlgos/plugins/PATTriggerProducer.h"

Inheritance diagram for pat::PATTriggerProducer:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

 PATTriggerProducer (const edm::ParameterSet &iConfig)
 
 ~PATTriggerProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Member Functions

virtual void beginLuminosityBlock (edm::LuminosityBlock &iLuminosityBlock, const edm::EventSetup &iSetup)
 
virtual void beginRun (edm::Run &iRun, const edm::EventSetup &iSetup)
 
virtual void produce (edm::Event &iEvent, const edm::EventSetup &iSetup)
 

Private Attributes

bool addL1Algos_
 
bool addPathModuleLabels_
 
bool autoProcessName_
 
bool autoProcessNameL1ExtraCenJet_
 
bool autoProcessNameL1ExtraETM_
 
bool autoProcessNameL1ExtraForJet_
 
bool autoProcessNameL1ExtraHTM_
 
bool autoProcessNameL1ExtraIsoEG_
 
bool autoProcessNameL1ExtraMu_
 
bool autoProcessNameL1ExtraNoIsoEG_
 
bool autoProcessNameL1ExtraTauJet_
 
std::vector< std::string > exludeCollections_
 
HLTConfigProvider hltConfig_
 
bool hltConfigInit_
 
std::string hltPrescaleLabel_
 
trigger::HLTPrescaleTable hltPrescaleTableLumi_
 
trigger::HLTPrescaleTable hltPrescaleTableRun_
 
L1GtUtils l1GtUtils_
 
std::string labelHltPrescaleTable_
 
bool mainBxOnly_
 
std::string nameProcess_
 
bool onlyStandAlone_
 
bool saveL1Refs_
 
edm::InputTag tagL1ExtraCenJet_
 
edm::InputTag tagL1ExtraETM_
 
edm::InputTag tagL1ExtraForJet_
 
edm::InputTag tagL1ExtraHTM_
 
edm::InputTag tagL1ExtraIsoEG_
 
edm::InputTag tagL1ExtraMu_
 
edm::InputTag tagL1ExtraNoIsoEG_
 
edm::InputTag tagL1ExtraTauJet_
 
edm::InputTag tagL1GlobalTriggerObjectMapRecord_
 
edm::InputTag tagTriggerEvent_
 
edm::InputTag tagTriggerResults_
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

Produces the full or stand-alone PAT trigger information collections.

This producer extracts the trigger information from

For me information, s. https://twiki.cern.ch/twiki/bin/view/CMS/SWGuidePATTrigger

Author
Volker Adler
Version
Id:
PATTriggerProducer.h,v 1.15 2010/11/27 15:16:21 vadler Exp

Definition at line 54 of file PATTriggerProducer.h.

Constructor & Destructor Documentation

PATTriggerProducer::PATTriggerProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 43 of file PATTriggerProducer.cc.

References addL1Algos_, addPathModuleLabels_, autoProcessName_, autoProcessNameL1ExtraCenJet_, autoProcessNameL1ExtraETM_, autoProcessNameL1ExtraForJet_, autoProcessNameL1ExtraHTM_, autoProcessNameL1ExtraIsoEG_, autoProcessNameL1ExtraMu_, autoProcessNameL1ExtraNoIsoEG_, autoProcessNameL1ExtraTauJet_, edm::ParameterSet::exists(), exludeCollections_, edm::ParameterSet::getParameter(), hltPrescaleLabel_, edm::InputTag::instance(), edm::InputTag::label(), labelHltPrescaleTable_, mainBxOnly_, nameProcess_, onlyStandAlone_, edm::InputTag::process(), saveL1Refs_, tagL1ExtraCenJet_, tagL1ExtraETM_, tagL1ExtraForJet_, tagL1ExtraHTM_, tagL1ExtraIsoEG_, tagL1ExtraMu_, tagL1ExtraNoIsoEG_, tagL1ExtraTauJet_, tagL1GlobalTriggerObjectMapRecord_, tagTriggerEvent_, and tagTriggerResults_.

43  :
44  nameProcess_( iConfig.getParameter< std::string >( "processName" ) ),
46  onlyStandAlone_( iConfig.getParameter< bool >( "onlyStandAlone" ) ),
47  // L1 configuration parameters
48  addL1Algos_( false ),
49  tagL1GlobalTriggerObjectMapRecord_( "hltL1GtObjectMap" ),
50  tagL1ExtraMu_(),
66  mainBxOnly_( true ),
67  saveL1Refs_( false ),
68  // HLT configuration parameters
69  tagTriggerResults_( "TriggerResults" ),
70  tagTriggerEvent_( "hltTriggerSummaryAOD" ),
75  addPathModuleLabels_( false )
76 {
77 
78  // L1 configuration parameters
79  if ( iConfig.exists( "addL1Algos" ) ) addL1Algos_ = iConfig.getParameter< bool >( "addL1Algos" );
80  if ( iConfig.exists( "l1GlobalTriggerObjectMapRecord" ) ) tagL1GlobalTriggerObjectMapRecord_ = iConfig.getParameter< InputTag >( "l1GlobalTriggerObjectMapRecord" );
81  if ( iConfig.exists( "l1ExtraMu" ) ) {
82  tagL1ExtraMu_ = iConfig.getParameter< InputTag >( "l1ExtraMu" );
83  if ( tagL1ExtraMu_.process() == "*" ) {
86  }
87  }
88  if ( iConfig.exists( "l1ExtraNoIsoEG" ) ) {
89  tagL1ExtraNoIsoEG_ = iConfig.getParameter< InputTag >( "l1ExtraNoIsoEG" );
90  if ( tagL1ExtraNoIsoEG_.process() == "*" ) {
93  }
94  }
95  if ( iConfig.exists( "l1ExtraIsoEG" ) ) {
96  tagL1ExtraIsoEG_ = iConfig.getParameter< InputTag >( "l1ExtraIsoEG" );
97  if ( tagL1ExtraIsoEG_.process() == "*" ) {
100  }
101  }
102  if ( iConfig.exists( "l1ExtraCenJet" ) ) {
103  tagL1ExtraCenJet_ = iConfig.getParameter< InputTag >( "l1ExtraCenJet" );
104  if ( tagL1ExtraCenJet_.process() == "*" ) {
107  }
108  }
109  if ( iConfig.exists( "l1ExtraForJet" ) ) {
110  tagL1ExtraForJet_ = iConfig.getParameter< InputTag >( "l1ExtraForJet" );
111  if ( tagL1ExtraForJet_.process() == "*" ) {
114  }
115  }
116  if ( iConfig.exists( "l1ExtraTauJet" ) ) {
117  tagL1ExtraTauJet_ = iConfig.getParameter< InputTag >( "l1ExtraTauJet" );
118  if ( tagL1ExtraTauJet_.process() == "*" ) {
121  }
122  }
123  if ( iConfig.exists( "l1ExtraETM" ) ) {
124  tagL1ExtraETM_ = iConfig.getParameter< InputTag >( "l1ExtraETM" );
125  if ( tagL1ExtraETM_.process() == "*" ) {
128  }
129  }
130  if ( iConfig.exists( "l1ExtraHTM" ) ) {
131  tagL1ExtraHTM_ = iConfig.getParameter< InputTag >( "l1ExtraHTM" );
132  if ( tagL1ExtraHTM_.process() == "*" ) {
135  }
136  }
137  if ( iConfig.exists( "mainBxOnly" ) ) mainBxOnly_ = iConfig.getParameter< bool >( "mainBxOnly" );
138  if ( iConfig.exists( "saveL1Refs" ) ) saveL1Refs_ = iConfig.getParameter< bool >( "saveL1Refs" );
139 
140  // HLT configuration parameters
141  if ( iConfig.exists( "triggerResults" ) ) tagTriggerResults_ = iConfig.getParameter< InputTag >( "triggerResults" );
142  if ( iConfig.exists( "triggerEvent" ) ) tagTriggerEvent_ = iConfig.getParameter< InputTag >( "triggerEvent" );
143  if ( iConfig.exists( "hltPrescaleLabel" ) ) hltPrescaleLabel_ = iConfig.getParameter< std::string >( "hltPrescaleLabel" );
144  if ( iConfig.exists( "hltPrescaleTable" ) ) labelHltPrescaleTable_ = iConfig.getParameter< std::string >( "hltPrescaleTable" );
145  if ( iConfig.exists( "addPathModuleLabels" ) ) addPathModuleLabels_ = iConfig.getParameter< bool >( "addPathModuleLabels" );
146  exludeCollections_.clear();
147  if ( iConfig.exists( "exludeCollections" ) ) exludeCollections_ = iConfig.getParameter< std::vector< std::string > >( "exludeCollections" );
148 
149  if ( ! onlyStandAlone_ ) {
150  produces< TriggerAlgorithmCollection >();
151  produces< TriggerConditionCollection >();
152  produces< TriggerPathCollection >();
153  produces< TriggerFilterCollection >();
154  produces< TriggerObjectCollection >();
155  }
156  produces< TriggerObjectStandAloneCollection >();
157 
158 }
T getParameter(std::string const &) const
edm::InputTag tagTriggerResults_
bool exists(std::string const &parameterName) const
checks if a parameter exists
edm::InputTag tagL1GlobalTriggerObjectMapRecord_
trigger::HLTPrescaleTable hltPrescaleTableLumi_
std::string const & label() const
Definition: InputTag.h:25
std::string const & process() const
Definition: InputTag.h:29
trigger::HLTPrescaleTable hltPrescaleTableRun_
std::vector< std::string > exludeCollections_
std::string const & instance() const
Definition: InputTag.h:26
edm::InputTag tagL1ExtraNoIsoEG_
pat::PATTriggerProducer::~PATTriggerProducer ( )
inline

Definition at line 59 of file PATTriggerProducer.h.

59 {};

Member Function Documentation

void PATTriggerProducer::beginLuminosityBlock ( edm::LuminosityBlock iLuminosityBlock,
const edm::EventSetup iSetup 
)
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 238 of file PATTriggerProducer.cc.

References edm::LuminosityBlock::getByLabel(), hltConfigInit_, hltPrescaleTableLumi_, hltPrescaleTableRun_, edm::HandleBase::isValid(), labelHltPrescaleTable_, trigger::HLTPrescaleTable::labels(), nameProcess_, trigger::HLTPrescaleTable::set(), and trigger::HLTPrescaleTable::table().

239 {
240 
241  // Terminate, if auto process name determination failed
242  if ( nameProcess_ == "*" ) return;
243 
244  // Extract pre-scales
245  if ( hltConfigInit_ ) {
246  // Start from run
248  // Try lumi product, if configured and available
249  if ( ! labelHltPrescaleTable_.empty() ) {
250  Handle< trigger::HLTPrescaleTable > handleHltPrescaleTable;
251  iLuminosityBlock.getByLabel( InputTag( labelHltPrescaleTable_, "Lumi", nameProcess_ ), handleHltPrescaleTable );
252  if ( handleHltPrescaleTable.isValid() ) {
253  hltPrescaleTableLumi_ = trigger::HLTPrescaleTable( handleHltPrescaleTable->set(), handleHltPrescaleTable->labels(), handleHltPrescaleTable->table() );
254  }
255  }
256  }
257 
258 }
unsigned int set() const
low-level const accessors for data members
The single EDProduct containing the HLT Prescale Table.
bool getByLabel(std::string const &label, Handle< PROD > &result) const
const std::map< std::string, std::vector< unsigned int > > & table() const
const std::vector< std::string > & labels() const
trigger::HLTPrescaleTable hltPrescaleTableLumi_
bool isValid() const
Definition: HandleBase.h:76
trigger::HLTPrescaleTable hltPrescaleTableRun_
void PATTriggerProducer::beginRun ( edm::Run iRun,
const edm::EventSetup iSetup 
)
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 161 of file PATTriggerProducer.cc.

References autoProcessName_, autoProcessNameL1ExtraCenJet_, autoProcessNameL1ExtraETM_, autoProcessNameL1ExtraForJet_, autoProcessNameL1ExtraHTM_, autoProcessNameL1ExtraIsoEG_, autoProcessNameL1ExtraMu_, autoProcessNameL1ExtraNoIsoEG_, autoProcessNameL1ExtraTauJet_, edm::ParameterSet::exists(), edm::Run::getByLabel(), hltConfig_, hltConfigInit_, hltPrescaleTableRun_, HLTConfigProvider::init(), edm::InputTag::instance(), edm::HandleBase::isValid(), edm::InputTag::label(), labelHltPrescaleTable_, LogDebug, nameProcess_, edm::InputTag::process(), edm::Run::processHistory(), HLTConfigProvider::size(), tagL1ExtraCenJet_, tagL1ExtraETM_, tagL1ExtraForJet_, tagL1ExtraHTM_, tagL1ExtraIsoEG_, tagL1ExtraMu_, tagL1ExtraNoIsoEG_, tagL1ExtraTauJet_, tagTriggerEvent_, and tagTriggerResults_.

162 {
163 
164  // Initialize
165  hltConfigInit_ = false;
166 
167  // Initialize process name
168  if ( autoProcessName_ ) {
169  // reset
170  nameProcess_ = "*";
171  // determine process name from last run TriggerSummaryProducerAOD module in process history of input
172  const ProcessHistory & processHistory( iRun.processHistory() );
173  ProcessConfiguration processConfiguration;
174  ParameterSet processPSet;
175  // unbroken loop, which relies on time ordering (accepts the last found entry)
176  for ( ProcessHistory::const_iterator iHist = processHistory.begin(); iHist != processHistory.end(); ++iHist ) {
177  if ( processHistory.getConfigurationForProcess( iHist->processName(), processConfiguration ) &&
178  pset::Registry::instance()->getMapped( processConfiguration.parameterSetID(), processPSet ) &&
179  processPSet.exists( tagTriggerEvent_.label() )
180  ) {
181  nameProcess_ = iHist->processName();
182  LogDebug( "autoProcessName" ) << "HLT process name '" << nameProcess_ << "' discovered";
183  }
184  }
185  // terminate, if nothing is found
186  if ( nameProcess_ == "*" ) {
187  LogError( "autoProcessName" ) << "trigger::TriggerEvent product with label '" << tagTriggerEvent_.label() << "' not produced according to process history of input data\n"
188  << "No trigger information produced";
189  return;
190  }
191  LogInfo( "autoProcessName" ) << "HLT process name' " << nameProcess_ << "' used for PAT trigger information";
192  }
193  // adapt configuration of used input tags
194  if ( tagTriggerResults_.process().empty() || tagTriggerResults_.process() == "*" ) {
196  } else if ( tagTriggerEvent_.process() != nameProcess_ ) {
197  LogWarning( "triggerResultsTag" ) << "TriggerResults process name '" << tagTriggerResults_.process() << "' differs from HLT process name '" << nameProcess_ << "'";
198  }
199  if ( tagTriggerEvent_.process().empty() || tagTriggerEvent_.process() == "*" ) {
201  } else if ( tagTriggerEvent_.process() != nameProcess_ ) {
202  LogWarning( "triggerEventTag" ) << "TriggerEvent process name '" << tagTriggerEvent_.process() << "' differs from HLT process name '" << nameProcess_ << "'";
203  }
212 
213  // Initialize HLTConfigProvider
214  bool changed( true );
215  if ( ! hltConfig_.init( iRun, iSetup, nameProcess_, changed ) ) {
216  LogError( "hltConfigExtraction" ) << "HLT config extraction error with process name '" << nameProcess_ << "'";
217  } else if ( hltConfig_.size() <= 0 ) {
218  LogError( "hltConfigSize" ) << "HLT config size error";
219  } else hltConfigInit_ = true;
220 
221  // Extract pre-scales
222  if ( hltConfigInit_ ) {
223  // Start empty
225  // Try run product, if configured
226  if ( ! labelHltPrescaleTable_.empty() ) {
227  Handle< trigger::HLTPrescaleTable > handleHltPrescaleTable;
228  iRun.getByLabel( InputTag( labelHltPrescaleTable_, "Run", nameProcess_ ), handleHltPrescaleTable );
229  if ( handleHltPrescaleTable.isValid() ) {
230  hltPrescaleTableRun_ = trigger::HLTPrescaleTable( handleHltPrescaleTable->set(), handleHltPrescaleTable->labels(), handleHltPrescaleTable->table() );
231  }
232  }
233  }
234 
235 }
#define LogDebug(id)
unsigned int size() const
number of trigger paths in trigger table
collection_type::const_iterator const_iterator
bool getByLabel(std::string const &label, Handle< PROD > &result) const
Definition: Run.h:174
HLTConfigProvider hltConfig_
edm::InputTag tagTriggerResults_
The single EDProduct containing the HLT Prescale Table.
bool exists(std::string const &parameterName) const
checks if a parameter exists
ProcessHistory const & processHistory() const
Definition: Run.cc:100
bool isValid() const
Definition: HandleBase.h:76
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
std::string const & label() const
Definition: InputTag.h:25
std::string const & process() const
Definition: InputTag.h:29
trigger::HLTPrescaleTable hltPrescaleTableRun_
std::string const & instance() const
Definition: InputTag.h:26
edm::InputTag tagL1ExtraNoIsoEG_
void PATTriggerProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

Implements edm::EDProducer.

Definition at line 261 of file PATTriggerProducer.cc.

References pat::TriggerAlgorithm::addConditionKey(), pat::TriggerObjectStandAlone::addFilterLabel(), addL1Algos_, pat::TriggerFilter::addObjectKey(), pat::TriggerCondition::addObjectKey(), addPathModuleLabels_, pat::TriggerObjectStandAlone::addPathName(), pat::TriggerFilter::addTriggerObjectType(), pat::TriggerCondition::addTriggerObjectType(), pat::TriggerObject::addTriggerObjectType(), L1GtUtils::AlgorithmTrigger, L1GtTriggerMenu::buildGtConditionMap(), category(), CenJet, pat::TriggerAlgorithm::decision(), relativeConstraints::empty, edm::InputTag::encode(), error, ETM, exludeCollections_, ForJet, edm::EventSetup::get(), edm::Event::getByLabel(), L1GtTriggerMenu::gtAlgorithmMap(), L1GtTriggerMenu::gtConditionMap(), L1GtTriggerMenu::gtTechnicalTriggerMap(), pat::TriggerObjectStandAlone::hasCollection(), hltConfig_, hltConfigInit_, HLTConfigProvider::hltL1GTSeeds(), hltPrescaleLabel_, hltPrescaleTableLumi_, HTM, IsoEG, edm::EventBase::isRealData(), edm::HandleBase::isValid(), combine::key, relativeConstraints::keys, L1GtUtils::l1AlgoTechTrigBitNumber(), l1GtUtils_, L1GtUtils::l1Results(), edm::InputTag::label(), label, labelHltPrescaleTable_, trigger::HLTPrescaleTable::labels(), LogDebug, mainBxOnly_, HLTConfigProvider::moduleIndex(), HLTConfigProvider::moduleLabel(), HLTConfigProvider::moduleType(), Mu, pat::TriggerCondition::name(), pat::TriggerAlgorithm::name(), nameProcess_, NoIsoEG, L1GlobalTriggerReadoutSetup::NumberPhysTriggers, L1GlobalTriggerReadoutSetup::NumberTechnicalTriggers, onlyStandAlone_, HLTConfigProvider::prescaleLabels(), HLTConfigProvider::prescaleSet(), HLTConfigProvider::prescaleSize(), HLTConfigProvider::prescaleTable(), HLTConfigProvider::prescaleValue(), edm::Event::put(), L1GtUtils::retrieveL1EventSetup(), saveL1Refs_, trigger::HLTPrescaleTable::set(), pat::TriggerCondition::setCategory(), pat::TriggerObject::setCollection(), pat::TriggerAlgorithm::setGtlResult(), pat::TriggerAlgorithm::setLogicalExpression(), pat::TriggerFilter::setStatus(), pat::TriggerFilter::setType(), pat::TriggerCondition::setType(), HLTConfigProvider::size(), trigger::HLTPrescaleTable::table(), tagL1ExtraCenJet_, tagL1ExtraETM_, tagL1ExtraForJet_, tagL1ExtraHTM_, tagL1ExtraIsoEG_, tagL1ExtraMu_, tagL1ExtraNoIsoEG_, tagL1ExtraTauJet_, tagL1GlobalTriggerObjectMapRecord_, tagTriggerEvent_, tagTriggerResults_, TauJet, L1GtUtils::TechnicalTrigger, EcalElecEmulTccFlatFileProducerFromTPG_cfg::tokens, JetPDSkim_cfg::triggerConditions, HLTConfigProvider::triggerIndex(), trigger::TriggerL1CenJet, trigger::TriggerL1ETM, trigger::TriggerL1ForJet, trigger::TriggerL1HTM, trigger::TriggerL1IsoEG, trigger::TriggerL1Mu, trigger::TriggerL1NoIsoEG, trigger::TriggerL1TauJet, HLTConfigProvider::triggerName(), and pat::TriggerCondition::wasAccept().

262 {
263 
264  // Terminate, if auto process name determination failed
265  if ( nameProcess_ == "*" ) return;
266 
267  std::auto_ptr< TriggerObjectCollection > triggerObjects( new TriggerObjectCollection() );
268  if ( onlyStandAlone_ ) triggerObjects->reserve( 0 );
269  std::auto_ptr< TriggerObjectStandAloneCollection > triggerObjectsStandAlone( new TriggerObjectStandAloneCollection() );
270 
271  // HLT
272 
273  // Get and check HLT event data
274  Handle< trigger::TriggerEvent > handleTriggerEvent;
275  iEvent.getByLabel( tagTriggerEvent_, handleTriggerEvent );
276  Handle< TriggerResults > handleTriggerResults;
277  iEvent.getByLabel( tagTriggerResults_, handleTriggerResults );
278  bool goodHlt( hltConfigInit_ );
279  if ( goodHlt ) {
280  if( ! handleTriggerResults.isValid() ) {
281  LogError( "triggerResultsValid" ) << "TriggerResults product with InputTag '" << tagTriggerResults_.encode() << "' not in event\n"
282  << "No HLT information produced";
283  goodHlt = false;
284  } else if ( ! handleTriggerEvent.isValid() ) {
285  LogError( "triggerEventValid" ) << "trigger::TriggerEvent product with InputTag '" << tagTriggerEvent_.encode() << "' not in event\n"
286  << "No HLT information produced";
287  goodHlt = false;
288  }
289  }
290 
291  // Produce HLT paths and determine status of modules
292 
293  if ( goodHlt ) {
294 
295  // Extract pre-scales
296  // Start from lumi
298  // Try event product, if configured and available
299  if ( ! labelHltPrescaleTable_.empty() ) {
300  Handle< trigger::HLTPrescaleTable > handleHltPrescaleTable;
301  iEvent.getByLabel( InputTag( labelHltPrescaleTable_, "Event", nameProcess_ ), handleHltPrescaleTable );
302  if ( handleHltPrescaleTable.isValid() ) {
303  hltPrescaleTable = trigger::HLTPrescaleTable( handleHltPrescaleTable->set(), handleHltPrescaleTable->labels(), handleHltPrescaleTable->table() );
304  }
305  }
306  // Try event setup, if no product
307  if ( hltPrescaleTable.size() == 0 ) {
308  if ( ! labelHltPrescaleTable_.empty() ) {
309  LogWarning( "hltPrescaleInputTag" ) << "HLTPrescaleTable product with label '" << labelHltPrescaleTable_ << "' not found in process" << nameProcess_ << "\n"
310  << "Using default from event setup";
311  }
312  if ( hltConfig_.prescaleSize() > 0 ) {
313  if ( hltConfig_.prescaleSet( iEvent, iSetup ) != -1 ) {
315  LogDebug( "hltPrescaleTable" ) << "HLT prescale table found in event setup";
316  } else {
317  LogWarning( "hltPrescaleSet" ) << "HLTPrescaleTable from event setup has error";
318  }
319  }
320  }
321  unsigned set( hltPrescaleTable.set() );
322  if ( hltPrescaleTable.size() > 0 ) {
323  if ( hltPrescaleLabel_.size() > 0 ) {
324  bool foundPrescaleLabel( false );
325  for ( unsigned iLabel = 0; iLabel < hltPrescaleTable.labels().size(); ++iLabel ) {
326  if ( hltPrescaleTable.labels().at( iLabel ) == hltPrescaleLabel_ ) {
327  set = iLabel;
328  foundPrescaleLabel = true;
329  break;
330  }
331  }
332  if ( ! foundPrescaleLabel ) {
333  LogWarning( "hltPrescaleLabel" ) << "HLT prescale label '" << hltPrescaleLabel_ << "' not in prescale table\n"
334  << "Using default";
335  }
336  }
337  } else if ( iEvent.isRealData() ) {
338  LogWarning( "hltPrescaleTable" ) << "No HLT prescale table found\n"
339  << "Using default empty table with all prescales 1";
340  }
341 
342  const unsigned sizePaths( hltConfig_.size() );
343  const unsigned sizeFilters( handleTriggerEvent->sizeFilters() );
344  const unsigned sizeObjects( handleTriggerEvent->sizeObjects() );
345 
346  std::auto_ptr< TriggerPathCollection > triggerPaths( new TriggerPathCollection() );
347  triggerPaths->reserve( onlyStandAlone_ ? 0 : sizePaths );
348  std::map< std::string, int > moduleStates;
349  std::multimap< std::string, std::pair< std::string, bool > > filterPaths;
350 
351  for ( size_t iP = 0; iP < sizePaths; ++iP ) {
352  const std::string namePath( hltConfig_.triggerName( iP ) );
353  const unsigned indexPath( hltConfig_.triggerIndex( namePath ) );
354  const unsigned sizeModulesPath( hltConfig_.size( namePath ) );
355  const unsigned indexLastFilterPath( handleTriggerResults->index( indexPath ) );
356  unsigned indexLastFilterPathModules( indexLastFilterPath + 1 );
357  unsigned indexLastFilterFilters( sizeFilters );
358  while ( indexLastFilterPathModules > 0 ) {
359  --indexLastFilterPathModules;
360  const std::string labelLastFilterModules( hltConfig_.moduleLabel( indexPath, indexLastFilterPathModules ) );
361  indexLastFilterFilters = handleTriggerEvent->filterIndex( InputTag( labelLastFilterModules, "", nameProcess_ ) );
362  if ( indexLastFilterFilters < sizeFilters ) break;
363  }
364  for ( size_t iM = 0; iM < sizeModulesPath; ++iM ) {
365  const std::string nameFilter( hltConfig_.moduleLabel( indexPath, iM ) );
366  const unsigned indexFilter( handleTriggerEvent->filterIndex( InputTag( nameFilter, "", nameProcess_ ) ) );
367  if ( indexFilter < sizeFilters ) {
368  std::pair< std::string, bool > pathAndStatus( namePath, handleTriggerResults->wasrun( indexPath ) && handleTriggerResults->accept( indexPath ) && indexFilter == indexLastFilterFilters );
369  filterPaths.insert( std::pair< std::string, std::pair< std::string, bool > >( nameFilter, pathAndStatus ) );
370  }
371  }
372  if ( ! onlyStandAlone_ ) {
373  TriggerPath triggerPath( namePath, indexPath, hltConfig_.prescaleValue( set, namePath ), handleTriggerResults->wasrun( indexPath ), handleTriggerResults->accept( indexPath ), handleTriggerResults->error( indexPath ), indexLastFilterPath );
374  // add module names to path and states' map
375  assert( indexLastFilterPath < sizeModulesPath );
376  std::map< unsigned, std::string > indicesModules;
377  for ( size_t iM = 0; iM < sizeModulesPath; ++iM ) {
378  const std::string nameModule( hltConfig_.moduleLabel( indexPath, iM ) );
379  if ( addPathModuleLabels_ ) {
380  triggerPath.addModule( nameModule );
381  }
382  const unsigned indexFilter( handleTriggerEvent->filterIndex( InputTag( nameModule, "", nameProcess_ ) ) );
383  if ( indexFilter < sizeFilters ) {
384  triggerPath.addFilterIndex( indexFilter );
385  }
386  const unsigned slotModule( hltConfig_.moduleIndex( indexPath, nameModule ) );
387  indicesModules.insert( std::pair< unsigned, std::string >( slotModule, nameModule ) );
388  }
389  // add L1 seeds
390  const L1SeedCollection l1Seeds( hltConfig_.hltL1GTSeeds( namePath ) );
391  for ( L1SeedCollection::const_iterator iSeed = l1Seeds.begin(); iSeed != l1Seeds.end(); ++iSeed ) {
392  triggerPath.addL1Seed( *iSeed );
393  }
394  // store path
395  triggerPaths->push_back( triggerPath );
396  // cache module states to be used for the filters
397  for ( std::map< unsigned, std::string >::const_iterator iM = indicesModules.begin(); iM != indicesModules.end(); ++iM ) {
398  if ( iM->first < indexLastFilterPath ) {
399  moduleStates[ iM->second ] = 1;
400  } else if ( iM->first == indexLastFilterPath ) {
401  moduleStates[ iM->second ] = handleTriggerResults->accept( indexPath );
402  } else if ( moduleStates.find( iM->second ) == moduleStates.end() ) {
403  moduleStates[ iM->second ] = -1;
404  }
405  }
406  }
407  }
408 
409  // Put HLT paths to event
410  if ( ! onlyStandAlone_ ) iEvent.put( triggerPaths );
411 
412  // Store used trigger objects and their types for HLT filters
413  // (only last active filter(s) available from trigger::TriggerEvent)
414 
415  std::auto_ptr< TriggerFilterCollection > triggerFilters( new TriggerFilterCollection() );
416  triggerFilters->reserve( onlyStandAlone_ ? 0 : sizeFilters );
417  std::multimap< trigger::size_type, int > objectTypes;
418  std::multimap< trigger::size_type, std::string > filterLabels;
419 
420  for ( size_t iF = 0; iF < sizeFilters; ++iF ) {
421  const std::string nameFilter( handleTriggerEvent->filterTag( iF ).label() );
422  const trigger::Keys & keys = handleTriggerEvent->filterKeys( iF );
423  const trigger::Vids & types = handleTriggerEvent->filterIds( iF );
424  assert( types.size() == keys.size() );
425  for ( size_t iK = 0; iK < keys.size(); ++iK ) {
426  filterLabels.insert( std::pair< trigger::size_type, std::string >( keys[ iK ], nameFilter ) ); // only for objects used in last active filter
427  objectTypes.insert( std::pair< trigger::size_type, int >( keys[ iK ], types[ iK ] ) ); // only for objects used in last active filter
428  }
429  }
430 
431  // HLT objects
432 
433  const trigger::Keys & collectionKeys( handleTriggerEvent->collectionKeys() );
434  std::map< trigger::size_type, trigger::size_type > newObjectKeys;
435  for ( size_t iO = 0, iC = 0; iO < sizeObjects && iC < handleTriggerEvent->sizeCollections(); ++iO ) {
436 
437  TriggerObject triggerObject( handleTriggerEvent->getObjects().at( iO ) );
438  // set collection
439  while ( iO >= collectionKeys[ iC ] ) ++iC; // relies on well ordering of trigger objects with respect to the collections
440  triggerObject.setCollection( handleTriggerEvent->collectionTag( iC ) );
441  // set filter ID
442  for ( std::multimap< trigger::size_type, int >::iterator iM = objectTypes.begin(); iM != objectTypes.end(); ++iM ) {
443  if ( iM->first == iO ) {
444  triggerObject.addTriggerObjectType( iM->second );
445  }
446  }
447 
448  // stand-alone trigger object
449  TriggerObjectStandAlone triggerObjectStandAlone( triggerObject );
450  // check for excluded collections
451  bool excluded( false );
452  for ( size_t iE = 0; iE < exludeCollections_.size(); ++iE ) {
453  if ( triggerObjectStandAlone.hasCollection( exludeCollections_.at( iE ) ) ) {
454  newObjectKeys[ iO ] = trigger::size_type( sizeObjects );
455  excluded = true;
456  break;
457  }
458  }
459  if ( excluded ) continue;
460  for ( std::multimap< trigger::size_type, std::string >::iterator iM = filterLabels.begin(); iM != filterLabels.end(); ++iM ) {
461  if ( iM->first == iO ) {
462  triggerObjectStandAlone.addFilterLabel( iM->second );
463  for ( std::multimap< std::string, std::pair< std::string, bool > >::iterator iP = filterPaths.begin(); iP != filterPaths.end(); ++iP ) {
464  if ( iP->first == iM->second ) {
465  triggerObjectStandAlone.addPathName( iP->second.first, iP->second.second );
466  }
467  }
468  }
469  }
470 
471  if ( ! onlyStandAlone_ ) triggerObjects->push_back( triggerObject );
472  triggerObjectsStandAlone->push_back( triggerObjectStandAlone );
473  newObjectKeys[ iO ] = trigger::size_type( triggerObjectsStandAlone->size() - 1 );
474  }
475 
476  // Re-iterate HLT filters and finally produce them
477  // in ordert to account for optionally skipped objects
478 
479  if ( ! onlyStandAlone_ ) {
480  for ( size_t iF = 0; iF < sizeFilters; ++iF ) {
481  const std::string nameFilter( handleTriggerEvent->filterTag( iF ).label() );
482  const trigger::Keys & keys = handleTriggerEvent->filterKeys( iF ); // not cached
483  const trigger::Vids & types = handleTriggerEvent->filterIds( iF ); // not cached
484  TriggerFilter triggerFilter( nameFilter );
485  // set filter type
486  const std::string typeFilter( hltConfig_.moduleType( nameFilter ) );
487  triggerFilter.setType( typeFilter );
488  // set keys and trigger object types of used objects
489  for ( size_t iK = 0; iK < keys.size(); ++iK ) { // identical to types.size()
490  // check, if current object is excluded
491  if ( newObjectKeys.find( keys.at( iK ) ) != newObjectKeys.end() ) {
492  if ( newObjectKeys[ keys.at( iK ) ] == sizeObjects ) continue;
493  triggerFilter.addObjectKey( keys.at( iK ) );
494  triggerFilter.addTriggerObjectType( types.at( iK ) );
495  } else {
496  LogWarning( "triggerObjectKey" ) << "TriggerFilter '" << nameFilter << "' requests non-existing TriggerObject key " << keys.at( iK ) << "\n"
497  << "Skipping object assignment";
498  }
499  }
500  // set status from path info
501  std::map< std::string, int >::iterator iS( moduleStates.find( nameFilter ) );
502  if ( iS != moduleStates.end() ) {
503  if ( ! triggerFilter.setStatus( iS->second ) ) {
504  triggerFilter.setStatus( -1 ); // FIXME different code for "unvalid status determined" needed?
505  }
506  } else {
507  triggerFilter.setStatus( -1 ); // FIXME different code for "unknown" needed?
508  }
509  // store filter
510  triggerFilters->push_back( triggerFilter );
511  }
512  // put HLT filters to event
513  iEvent.put( triggerFilters );
514  }
515 
516  } // if ( goodHlt )
517 
518  // L1 objects
519  // (needs to be done after HLT objects, since their x-links with filters rely on their collection keys)
520 
521  // map for assignments of objects to conditions
522  std::map< L1GtObject, std::vector< unsigned > > l1ObjectTypeMap;
523 
524  if ( ! tagL1ExtraMu_.label().empty() ) {
526  iEvent.getByLabel( tagL1ExtraMu_, handleL1ExtraMu );
527  if ( handleL1ExtraMu.isValid() ) {
528  std::vector< unsigned > muKeys;
529  for ( size_t l1Mu = 0; l1Mu < handleL1ExtraMu->size(); ++l1Mu ) {
530  if ( mainBxOnly_ && handleL1ExtraMu->at( l1Mu ).bx() != 0 ) continue;
531  TriggerObject triggerObject;
532  if ( saveL1Refs_ ) {
533  const reco::CandidateBaseRef leafCandRef( l1extra::L1MuonParticleRef( handleL1ExtraMu, l1Mu ) );
534  triggerObject = TriggerObject( leafCandRef );
535  } else {
536  const reco::LeafCandidate * leafCandidate( handleL1ExtraMu->at( l1Mu ).reco::LeafCandidate::clone() );
537  triggerObject = TriggerObject( *leafCandidate );
538  }
539  triggerObject.setCollection( tagL1ExtraMu_ );
541  if ( ! onlyStandAlone_ ) triggerObjects->push_back( triggerObject );
542  TriggerObjectStandAlone triggerObjectStandAlone( triggerObject );
543  triggerObjectsStandAlone->push_back( triggerObjectStandAlone );
544  if ( handleL1ExtraMu->at( l1Mu ).bx() == 0 ) muKeys.push_back( triggerObjectsStandAlone->size() - 1 );
545  }
546  l1ObjectTypeMap.insert( std::make_pair( Mu, muKeys ) );
547  } else LogError( "l1ExtraValid" ) << "l1extra::L1MuonParticleCollection product with InputTag '" << tagL1ExtraMu_.encode() << "' not in event";
548  }
549  if ( ! tagL1ExtraNoIsoEG_.label().empty() ) {
550  Handle< l1extra::L1EmParticleCollection > handleL1ExtraNoIsoEG;
551  iEvent.getByLabel( tagL1ExtraNoIsoEG_, handleL1ExtraNoIsoEG );
552  if ( handleL1ExtraNoIsoEG.isValid() ) {
553  std::vector< unsigned > noIsoEGKeys;
554  for ( size_t l1NoIsoEG = 0; l1NoIsoEG < handleL1ExtraNoIsoEG->size(); ++l1NoIsoEG ) {
555  if ( mainBxOnly_ && handleL1ExtraNoIsoEG->at( l1NoIsoEG ).bx() != 0 ) continue;
556  TriggerObject triggerObject;
557  if ( saveL1Refs_ ) {
558  const reco::CandidateBaseRef leafCandRef( l1extra::L1EmParticleRef( handleL1ExtraNoIsoEG, l1NoIsoEG ) );
559  triggerObject = TriggerObject( leafCandRef );
560  } else {
561  const reco::LeafCandidate * leafCandidate( handleL1ExtraNoIsoEG->at( l1NoIsoEG ).reco::LeafCandidate::clone() );
562  triggerObject = TriggerObject( *leafCandidate );
563  }
564  triggerObject.setCollection( tagL1ExtraNoIsoEG_ );
566  if ( ! onlyStandAlone_ ) triggerObjects->push_back( triggerObject );
567  TriggerObjectStandAlone triggerObjectStandAlone( triggerObject );
568  triggerObjectsStandAlone->push_back( triggerObjectStandAlone );
569  if ( handleL1ExtraNoIsoEG->at( l1NoIsoEG ).bx() == 0 ) noIsoEGKeys.push_back( triggerObjectsStandAlone->size() - 1 );
570  }
571  l1ObjectTypeMap.insert( std::make_pair( NoIsoEG, noIsoEGKeys ) );
572  } else LogError( "l1ExtraValid" ) << "l1extra::L1EmParticleCollection product with InputTag '" << tagL1ExtraNoIsoEG_.encode() << "' not in event";
573  }
574  if ( ! tagL1ExtraIsoEG_.label().empty() ) {
576  iEvent.getByLabel( tagL1ExtraIsoEG_, handleL1ExtraIsoEG );
577  if ( handleL1ExtraIsoEG.isValid() ) {
578  std::vector< unsigned > isoEGKeys;
579  for ( size_t l1IsoEG = 0; l1IsoEG < handleL1ExtraIsoEG->size(); ++l1IsoEG ) {
580  if ( mainBxOnly_ && handleL1ExtraIsoEG->at( l1IsoEG ).bx() != 0 ) continue;
581  TriggerObject triggerObject;
582  if ( saveL1Refs_ ) {
583  const reco::CandidateBaseRef leafCandRef( l1extra::L1EmParticleRef( handleL1ExtraIsoEG, l1IsoEG ) );
584  triggerObject = TriggerObject( leafCandRef );
585  } else {
586  const reco::LeafCandidate * leafCandidate( handleL1ExtraIsoEG->at( l1IsoEG ).reco::LeafCandidate::clone() );
587  triggerObject = TriggerObject( *leafCandidate );
588  }
589  triggerObject.setCollection( tagL1ExtraIsoEG_ );
591  if ( ! onlyStandAlone_ ) triggerObjects->push_back( triggerObject );
592  TriggerObjectStandAlone triggerObjectStandAlone( triggerObject );
593  triggerObjectsStandAlone->push_back( triggerObjectStandAlone );
594  if ( handleL1ExtraIsoEG->at( l1IsoEG ).bx() == 0 ) isoEGKeys.push_back( triggerObjectsStandAlone->size() - 1 );
595  }
596  l1ObjectTypeMap.insert( std::make_pair( IsoEG, isoEGKeys ) );
597  } else LogError( "l1ExtraValid" ) << "l1extra::L1EmParticleCollection product with InputTag '" << tagL1ExtraIsoEG_.encode() << "' not in event";
598  }
599  if ( ! tagL1ExtraCenJet_.label().empty() ) {
600  Handle< l1extra::L1JetParticleCollection > handleL1ExtraCenJet;
601  iEvent.getByLabel( tagL1ExtraCenJet_, handleL1ExtraCenJet );
602  if ( handleL1ExtraCenJet.isValid() ) {
603  std::vector< unsigned > cenJetKeys;
604  for ( size_t l1CenJet = 0; l1CenJet < handleL1ExtraCenJet->size(); ++l1CenJet ) {
605  if ( mainBxOnly_ && handleL1ExtraCenJet->at( l1CenJet ).bx() != 0 ) continue;
606  TriggerObject triggerObject;
607  if ( saveL1Refs_ ) {
608  const reco::CandidateBaseRef leafCandRef( l1extra::L1JetParticleRef( handleL1ExtraCenJet, l1CenJet ) );
609  triggerObject = TriggerObject( leafCandRef );
610  } else {
611  const reco::LeafCandidate * leafCandidate( handleL1ExtraCenJet->at( l1CenJet ).reco::LeafCandidate::clone() );
612  triggerObject = TriggerObject( *leafCandidate );
613  }
614  triggerObject.setCollection( tagL1ExtraCenJet_ );
616  if ( ! onlyStandAlone_ ) triggerObjects->push_back( triggerObject );
617  TriggerObjectStandAlone triggerObjectStandAlone( triggerObject );
618  triggerObjectsStandAlone->push_back( triggerObjectStandAlone );
619  if ( handleL1ExtraCenJet->at( l1CenJet ).bx() == 0 ) cenJetKeys.push_back( triggerObjectsStandAlone->size() - 1 );
620  }
621  l1ObjectTypeMap.insert( std::make_pair( CenJet, cenJetKeys ) );
622  } else LogError( "l1ExtraValid" ) << "l1extra::L1JetParticleCollection product with InputTag '" << tagL1ExtraCenJet_.encode() << "' not in event";
623  }
624  if ( ! tagL1ExtraForJet_.label().empty() ) {
625  Handle< l1extra::L1JetParticleCollection > handleL1ExtraForJet;
626  iEvent.getByLabel( tagL1ExtraForJet_, handleL1ExtraForJet );
627  if ( handleL1ExtraForJet.isValid() ) {
628  std::vector< unsigned > forJetKeys;
629  for ( size_t l1ForJet = 0; l1ForJet < handleL1ExtraForJet->size(); ++l1ForJet ) {
630  if ( mainBxOnly_ && handleL1ExtraForJet->at( l1ForJet ).bx() != 0 ) continue;
631  TriggerObject triggerObject;
632  if ( saveL1Refs_ ) {
633  const reco::CandidateBaseRef leafCandRef( l1extra::L1JetParticleRef( handleL1ExtraForJet, l1ForJet ) );
634  triggerObject = TriggerObject( leafCandRef );
635  } else {
636  const reco::LeafCandidate * leafCandidate( handleL1ExtraForJet->at( l1ForJet ).reco::LeafCandidate::clone() );
637  triggerObject = TriggerObject( *leafCandidate );
638  }
639  triggerObject.setCollection( tagL1ExtraForJet_ );
641  if ( ! onlyStandAlone_ ) triggerObjects->push_back( triggerObject );
642  TriggerObjectStandAlone triggerObjectStandAlone( triggerObject );
643  triggerObjectsStandAlone->push_back( triggerObjectStandAlone );
644  if ( handleL1ExtraForJet->at( l1ForJet ).bx() == 0 ) forJetKeys.push_back( triggerObjectsStandAlone->size() - 1 );
645  }
646  l1ObjectTypeMap.insert( std::make_pair( ForJet, forJetKeys ) );
647  } else LogError( "l1ExtraValid" ) << "l1extra::L1JetParticleCollection product with InputTag '" << tagL1ExtraForJet_.encode() << "' not in event";
648  }
649  if ( ! tagL1ExtraTauJet_.label().empty() ) {
650  Handle< l1extra::L1JetParticleCollection > handleL1ExtraTauJet;
651  iEvent.getByLabel( tagL1ExtraTauJet_, handleL1ExtraTauJet );
652  if ( handleL1ExtraTauJet.isValid() ) {
653  std::vector< unsigned > tauJetKeys;
654  for ( size_t l1TauJet = 0; l1TauJet < handleL1ExtraTauJet->size(); ++l1TauJet ) {
655  if ( mainBxOnly_ && handleL1ExtraTauJet->at( l1TauJet ).bx() != 0 ) continue;
656  TriggerObject triggerObject;
657  if ( saveL1Refs_ ) {
658  const reco::CandidateBaseRef leafCandRef( l1extra::L1JetParticleRef( handleL1ExtraTauJet, l1TauJet ) );
659  triggerObject = TriggerObject( leafCandRef );
660  } else {
661  const reco::LeafCandidate * leafCandidate( handleL1ExtraTauJet->at( l1TauJet ).reco::LeafCandidate::clone() );
662  triggerObject = TriggerObject( *leafCandidate );
663  }
664  triggerObject.setCollection( tagL1ExtraTauJet_ );
666  if ( ! onlyStandAlone_ ) triggerObjects->push_back( triggerObject );
667  TriggerObjectStandAlone triggerObjectStandAlone( triggerObject );
668  triggerObjectsStandAlone->push_back( triggerObjectStandAlone );
669  if ( handleL1ExtraTauJet->at( l1TauJet ).bx() == 0 ) tauJetKeys.push_back( triggerObjectsStandAlone->size() - 1 );
670  }
671  l1ObjectTypeMap.insert( std::make_pair( TauJet, tauJetKeys ) );
672  } else LogError( "l1ExtraValid" ) << "l1extra::L1JetParticleCollection product with InputTag '" << tagL1ExtraTauJet_.encode() << "' not in event";
673  }
674  if ( ! tagL1ExtraETM_ .label().empty()) {
676  iEvent.getByLabel( tagL1ExtraETM_, handleL1ExtraETM );
677  if ( handleL1ExtraETM.isValid() ) {
678  std::vector< unsigned > etmKeys;
679  for ( size_t l1ETM = 0; l1ETM < handleL1ExtraETM->size(); ++l1ETM ) {
680  if ( mainBxOnly_ && handleL1ExtraETM->at( l1ETM ).bx() != 0 ) continue;
681  TriggerObject triggerObject;
682  if ( saveL1Refs_ ) {
683  const reco::CandidateBaseRef leafCandRef( l1extra::L1EtMissParticleRef( handleL1ExtraETM, l1ETM ) );
684  triggerObject = TriggerObject( leafCandRef );
685  } else {
686  const reco::LeafCandidate * leafCandidate( handleL1ExtraETM->at( l1ETM ).reco::LeafCandidate::clone() );
687  triggerObject = TriggerObject( *leafCandidate );
688  }
689  triggerObject.setCollection( tagL1ExtraETM_ );
691  if ( ! onlyStandAlone_ ) triggerObjects->push_back( triggerObject );
692  TriggerObjectStandAlone triggerObjectStandAlone( triggerObject );
693  triggerObjectsStandAlone->push_back( triggerObjectStandAlone );
694  if ( handleL1ExtraETM->at( l1ETM ).bx() == 0 ) etmKeys.push_back( triggerObjectsStandAlone->size() - 1 );
695  }
696  l1ObjectTypeMap.insert( std::make_pair( ETM, etmKeys ) );
697  } else LogError( "l1ExtraValid" ) << "l1extra::L1EtMissParticleCollection product with InputTag '" << tagL1ExtraETM_.encode() << "' not in event";
698  }
699  if ( ! tagL1ExtraHTM_.label().empty() ) {
701  iEvent.getByLabel( tagL1ExtraHTM_, handleL1ExtraHTM );
702  if ( handleL1ExtraHTM.isValid() ) {
703  std::vector< unsigned > htmKeys;
704  for ( size_t l1HTM = 0; l1HTM < handleL1ExtraHTM->size(); ++l1HTM ) {
705  if ( mainBxOnly_ && handleL1ExtraHTM->at( l1HTM ).bx() != 0 ) continue;
706  TriggerObject triggerObject;
707  if ( saveL1Refs_ ) {
708  const reco::CandidateBaseRef leafCandRef( l1extra::L1EtMissParticleRef( handleL1ExtraHTM, l1HTM ) );
709  triggerObject = TriggerObject( leafCandRef );
710  } else {
711  const reco::LeafCandidate * leafCandidate( handleL1ExtraHTM->at( l1HTM ).reco::LeafCandidate::clone() );
712  triggerObject = TriggerObject( *leafCandidate );
713  }
714  triggerObject.setCollection( tagL1ExtraHTM_ );
716  if ( ! onlyStandAlone_ ) triggerObjects->push_back( triggerObject );
717  TriggerObjectStandAlone triggerObjectStandAlone( triggerObject );
718  triggerObjectsStandAlone->push_back( triggerObjectStandAlone );
719  if ( handleL1ExtraHTM->at( l1HTM ).bx() == 0 ) htmKeys.push_back( triggerObjectsStandAlone->size() - 1 );
720  }
721  l1ObjectTypeMap.insert( std::make_pair( HTM, htmKeys ) );
722  } else LogError( "l1ExtraValid" ) << "l1extra::L1EtMissParticleCollection product with InputTag '" << tagL1ExtraHTM_.encode() << "' not in event";
723  }
724 
725  // Put trigger objects to event
726  if ( ! onlyStandAlone_ ) iEvent.put( triggerObjects );
727 
728  // L1 algorithms
729  if ( ! onlyStandAlone_ ) {
730  std::auto_ptr< TriggerAlgorithmCollection > triggerAlgos( new TriggerAlgorithmCollection() );
731  std::auto_ptr< TriggerConditionCollection > triggerConditions( new TriggerConditionCollection() );
732  if ( addL1Algos_ ) {
733  // create trigger object types transalation map (yes, it's ugly!)
734  std::map< L1GtObject, trigger::TriggerObjectType > mapObjectTypes;
735  mapObjectTypes.insert( std::make_pair( Mu , trigger::TriggerL1Mu ) );
736  mapObjectTypes.insert( std::make_pair( NoIsoEG, trigger::TriggerL1NoIsoEG ) );
737  mapObjectTypes.insert( std::make_pair( IsoEG , trigger::TriggerL1IsoEG ) );
738  mapObjectTypes.insert( std::make_pair( CenJet , trigger::TriggerL1CenJet ) );
739  mapObjectTypes.insert( std::make_pair( ForJet , trigger::TriggerL1ForJet ) );
740  mapObjectTypes.insert( std::make_pair( TauJet , trigger::TriggerL1TauJet ) );
741  mapObjectTypes.insert( std::make_pair( ETM , trigger::TriggerL1ETM ) );
742  mapObjectTypes.insert( std::make_pair( HTM , trigger::TriggerL1HTM ) );
743  // get and cache L1 menu
745  ESHandle< L1GtTriggerMenu > handleL1GtTriggerMenu;
746  iSetup.get< L1GtTriggerMenuRcd >().get( handleL1GtTriggerMenu );
747  L1GtTriggerMenu l1GtTriggerMenu( *handleL1GtTriggerMenu );
748  const AlgorithmMap l1GtAlgorithms( l1GtTriggerMenu.gtAlgorithmMap() );
749  const AlgorithmMap l1GtTechTriggers( l1GtTriggerMenu.gtTechnicalTriggerMap() );
750  l1GtTriggerMenu.buildGtConditionMap();
751  const std::vector< ConditionMap > l1GtConditionsVector( l1GtTriggerMenu.gtConditionMap() );
752  // cache conditions in one single condition map
753  ConditionMap l1GtConditions;
754  for ( size_t iCv = 0; iCv < l1GtConditionsVector.size(); ++iCv ) {
755  l1GtConditions.insert( l1GtConditionsVector.at( iCv ).begin(), l1GtConditionsVector.at( iCv ).end() );
756  }
757  triggerAlgos->reserve( l1GtAlgorithms.size() + l1GtTechTriggers.size() );
758  Handle< L1GlobalTriggerObjectMapRecord > handleL1GlobalTriggerObjectMapRecord;
759  iEvent.getByLabel( tagL1GlobalTriggerObjectMapRecord_, handleL1GlobalTriggerObjectMapRecord );
760  if( ! handleL1GlobalTriggerObjectMapRecord.isValid() ) {
761  LogWarning( "l1ObjectMap" ) << "L1GlobalTriggerObjectMapRecord product with InputTag '" << tagL1GlobalTriggerObjectMapRecord_.encode() << "' not in event\n"
762  << "No L1 objects and GTL results available for physics algorithms";
763  }
764  // physics algorithms
765  for ( CItAlgo iAlgo = l1GtAlgorithms.begin(); iAlgo != l1GtAlgorithms.end(); ++iAlgo ) {
766  const std::string & algoName( iAlgo->second.algoName() );
767  if ( ! ( iAlgo->second.algoBitNumber() < int( L1GlobalTriggerReadoutSetup::NumberPhysTriggers ) ) ) {
768  LogError( "l1Algo" ) << "L1 physics algorithm '" << algoName << "' has bit number " << iAlgo->second.algoBitNumber() << " >= " << L1GlobalTriggerReadoutSetup::NumberPhysTriggers << "\n"
769  << "Skipping";
770  continue;
771  }
773  int bit;
774  if ( ! l1GtUtils_.l1AlgoTechTrigBitNumber( algoName, category, bit ) ) {
775  LogError( "l1Algo" ) << "L1 physics algorithm '" << algoName << "' not found in the L1 menu\n"
776  << "Skipping";
777  continue;
778  }
779  if ( category != L1GtUtils::AlgorithmTrigger ) {
780  LogError( "l1Algo" ) << "L1 physics algorithm '" << algoName << "' does not have category 'AlgorithmTrigger' from 'L1GtUtils'\n"
781  << "Skipping";
782  continue;
783  }
784  bool decisionBeforeMask;
785  bool decisionAfterMask;
786  int prescale;
787  int mask;
788  int error( l1GtUtils_.l1Results( iEvent, algoName, decisionBeforeMask, decisionAfterMask, prescale, mask ) );
789  if ( error ) {
790  LogError( "l1Algo" ) << "L1 physics algorithm '" << algoName << "' decision has error code " << error << " from 'L1GtUtils'\n"
791  << "Skipping";
792  continue;
793  }
794  TriggerAlgorithm triggerAlgo( algoName, iAlgo->second.algoAlias(), category == L1GtUtils::TechnicalTrigger, (unsigned)bit, (unsigned)prescale, (bool)mask, decisionBeforeMask, decisionAfterMask );
795  triggerAlgo.setLogicalExpression( iAlgo->second.algoLogicalExpression() );
796  // GTL result and used conditions in physics algorithm
797  if( ! handleL1GlobalTriggerObjectMapRecord.isValid() ) {
798  triggerAlgos->push_back( triggerAlgo );
799  continue; // LogWarning already earlier (before loop)
800  }
801  const L1GlobalTriggerObjectMap * l1ObjectMap( handleL1GlobalTriggerObjectMapRecord->getObjectMap( algoName ) );
802  if ( ! l1ObjectMap ) {
803  LogError( "l1ObjectMap" ) << "L1 physics algorithm '" << algoName << "' is missing in L1GlobalTriggerObjectMapRecord\n"
804  << "Skipping conditions and GTL result";
805  triggerAlgos->push_back( triggerAlgo );
806  continue;
807  }
808 // if ( ( l1ObjectMap->algoGtlResult() != decisionBeforeMask ) && ( decisionBeforeMask == true || prescale == 1 ) ) {
809  if ( ( l1ObjectMap->algoGtlResult() != decisionBeforeMask ) && ( decisionBeforeMask == true ) ) { // FIXME: understand the difference for un-prescaled algos 118, 119, 123
810  LogInfo( "l1ObjectMap" ) << "L1 physics algorithm '" << algoName << "' with different decisions in\n"
811  << "L1GlobalTriggerObjectMapRecord (GTL result) : " << l1ObjectMap->algoGtlResult() << "\n"
812  << "L1GlobalTriggerReadoutRecord (decision before mask): " << decisionBeforeMask;
813  }
814  triggerAlgo.setGtlResult( l1ObjectMap->algoGtlResult() );
815  // conditions in algorithm
816  const std::vector< L1GtLogicParser::OperandToken > & tokens( l1ObjectMap->operandTokenVector() );
817  for ( size_t iT = 0; iT < tokens.size(); ++iT ) {
818  const L1GtLogicParser::OperandToken & token( tokens.at( iT ) );
819  size_t key( triggerConditions->size() );
820  for ( size_t iC = 0; iC < triggerConditions->size(); ++iC ) {
821  if ( token.tokenName == triggerConditions->at( iC ).name() ) {
822  key = iC;
823  break;
824  }
825  }
826  if ( key == triggerConditions->size() ) {
827  TriggerCondition triggerCond( token.tokenName, token.tokenResult );
828  if ( l1GtConditions.find( triggerCond.name() ) != l1GtConditions.end() ) {
829  triggerCond.setCategory( l1GtConditions[ triggerCond.name() ]->condCategory() );
830  triggerCond.setType( l1GtConditions[ triggerCond.name() ]->condType() );
831  const std::vector< L1GtObject > l1ObjectTypes( l1GtConditions[ triggerCond.name() ]->objectType() );
832  for ( size_t iT = 0 ; iT < l1ObjectTypes.size(); ++iT ) {
833  triggerCond.addTriggerObjectType( mapObjectTypes[ l1ObjectTypes.at( iT ) ] );
834  }
835  // objects in condition
836  CombinationsInCond combis( l1ObjectMap->combinationVector().at( token.tokenNumber ) );
837  for ( size_t iVV = 0; iVV < combis.size(); ++iVV ) {
838  SingleCombInCond combi( combis.at( iVV ) );
839  for ( size_t iV = 0; iV < combi.size(); ++iV ) {
840  if ( iV >= l1ObjectTypes.size() ) {
841  LogError( "l1CondMap" ) << "Index " << iV << " in combinations vector overshoots size " << l1ObjectTypes.size() << " of types vector in conditions map\n"
842  << "Skipping object key in condition " << triggerCond.name();
843  } else if ( l1ObjectTypeMap.find( l1ObjectTypes.at( iV ) ) != l1ObjectTypeMap.end() ) {
844  if ( combi.at( iV ) >= int( l1ObjectTypeMap[ l1ObjectTypes.at( iV ) ].size() ) ) {
845  LogError( "l1CondMap" ) << "Index " << combi.at( iV ) << " in combination overshoots number " << l1ObjectTypeMap[ l1ObjectTypes.at( iV ) ].size() << "of according trigger objects\n"
846  << "Skipping object key in condition " << triggerCond.name();
847  }
848  const unsigned objectKey( l1ObjectTypeMap[ l1ObjectTypes.at( iV ) ].at( combi.at( iV ) ) );
849  triggerCond.addObjectKey( objectKey );
850  // add current condition and algorithm also to the according stand-alone trigger object
851  triggerObjectsStandAlone->at( objectKey ).addAlgorithmName( triggerAlgo.name(), ( triggerAlgo.decision() && triggerCond.wasAccept() ) );
852  triggerObjectsStandAlone->at( objectKey ).addConditionName( triggerCond.name() );
853  }
854  }
855  }
856  } else {
857  LogWarning( "l1CondMap" ) << "L1 conditions '" << triggerCond.name() << "' not found in the L1 menu\n"
858  << "Remains incomplete";
859  }
860  triggerConditions->push_back( triggerCond );
861  }
862  triggerAlgo.addConditionKey( key );
863  }
864  triggerAlgos->push_back( triggerAlgo );
865  }
866  // technical triggers
867  for ( CItAlgo iAlgo = l1GtTechTriggers.begin(); iAlgo != l1GtTechTriggers.end(); ++iAlgo ) {
868  const std::string & algoName( iAlgo->second.algoName() );
869  if ( ! ( iAlgo->second.algoBitNumber() < int( L1GlobalTriggerReadoutSetup::NumberTechnicalTriggers ) ) ) {
870  LogError( "l1Algo" ) << "L1 technical trigger '" << algoName << "' has bit number " << iAlgo->second.algoBitNumber() << " >= " << L1GlobalTriggerReadoutSetup::NumberTechnicalTriggers << "\n"
871  << "Skipping";
872  continue;
873  }
875  int bit;
876  if ( ! l1GtUtils_.l1AlgoTechTrigBitNumber( algoName, category, bit ) ) {
877  LogError( "l1Algo" ) << "L1 technical trigger '" << algoName << "' not found in the L1 menu\n"
878  << "Skipping";
879  continue;
880  }
881  if ( category != L1GtUtils::TechnicalTrigger ) {
882  LogError( "l1Algo" ) << "L1 technical trigger '" << algoName << "' does not have category 'TechnicalTrigger' from 'L1GtUtils'\n"
883  << "Skipping";
884  continue;
885  }
886  bool decisionBeforeMask;
887  bool decisionAfterMask;
888  int prescale;
889  int mask;
890  int error( l1GtUtils_.l1Results( iEvent, algoName, decisionBeforeMask, decisionAfterMask, prescale, mask ) );
891  if ( error ) {
892  LogError( "l1Algo" ) << "L1 technical trigger '" << algoName << "' decision has error code " << error << " from 'L1GtUtils'\n"
893  << "Skipping";
894  continue;
895  }
896  TriggerAlgorithm triggerAlgo( algoName, iAlgo->second.algoAlias(), category == L1GtUtils::TechnicalTrigger, (unsigned)bit, (unsigned)prescale, (bool)mask, decisionBeforeMask, decisionAfterMask );
897  triggerAlgo.setLogicalExpression( iAlgo->second.algoLogicalExpression() );
898  triggerAlgos->push_back( triggerAlgo );
899  }
900  }
901 
902  // Put L1 algorithms and conditions to event
903  iEvent.put( triggerAlgos );
904  iEvent.put( triggerConditions );
905  }
906 
907  // Put (finally) stand-alone trigger objects to event
908  iEvent.put( triggerObjectsStandAlone );
909 
910 }
#define LogDebug(id)
unsigned int set() const
low-level const accessors for data members
unsigned int size() const
number of trigger paths in trigger table
Analysis-level L1 trigger algorithm class.
const int l1Results(const edm::Event &iEvent, const edm::InputTag &l1GtRecordInputTag, const edm::InputTag &l1GtReadoutRecordInputTag, const std::string &nameAlgoTechTrig, bool &decisionBeforeMask, bool &decisionAfterMask, int &prescaleFactor, int &triggerMask) const
Definition: L1GtUtils.cc:614
const std::string moduleType(const std::string &module) const
C++ class name of module.
const std::string & label
Definition: MVAComputer.cc:186
const std::string & triggerName(unsigned int triggerIndex) const
HLTConfigProvider hltConfig_
enum start value shifted to 81 so as to avoid clashes with PDG codes
std::map< std::string, L1GtCondition * > ConditionMap
map containing the conditions
edm::InputTag tagTriggerResults_
tuple triggerConditions
std::map< std::string, L1GtAlgorithm > AlgorithmMap
map containing the algorithms
const bool l1AlgoTechTrigBitNumber(const std::string &nameAlgoTechTrig, TriggerCategory &trigCategory, int &bitNumber) const
Definition: L1GtUtils.cc:470
static const unsigned int NumberTechnicalTriggers
TriggerCategory
Definition: L1GtUtils.h:59
const std::vector< std::vector< std::pair< bool, std::string > > > & hltL1GTSeeds() const
The single EDProduct containing the HLT Prescale Table.
std::vector< int > SingleCombInCond
typedefs
std::vector< TriggerObjectStandAlone > TriggerObjectStandAloneCollection
Collection of TriggerObjectStandAlone.
const std::map< std::string, std::vector< unsigned int > > & prescaleTable() const
Analysis-level trigger object class.
Definition: TriggerObject.h:49
uint16_t size_type
bool isRealData() const
Definition: EventBase.h:60
const std::map< std::string, std::vector< unsigned int > > & table() const
std::string encode() const
Definition: InputTag.cc:72
const std::string & moduleLabel(unsigned int trigger, unsigned int module) const
void put(edm::Event &evt, double value, const char *instanceName)
AlgorithmMap::const_iterator CItAlgo
iterators through map containing the algorithms
unsigned int triggerIndex(const std::string &triggerName) const
slot position of trigger path in trigger table (0 to size-1)
U second(std::pair< T, U > const &p)
std::vector< TriggerAlgorithm > TriggerAlgorithmCollection
Collection of TriggerAlgorithm.
Analysis-level HLTrigger filter class.
Definition: TriggerFilter.h:37
unsigned int prescaleValue(unsigned int set, const std::string &trigger) const
HLT prescale value in specific prescale set for a specific trigger path.
unsigned int moduleIndex(unsigned int trigger, const std::string &module) const
slot position of module on trigger path (0 to size-1)
void setCollection(const std::string &collName)
Methods.
Definition: TriggerObject.h:86
Analysis-level L1 trigger condition class.
Analysis-level HLTrigger path class.
Definition: TriggerPath.h:41
edm::InputTag tagL1GlobalTriggerObjectMapRecord_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
const std::vector< std::string > & labels() const
trigger::HLTPrescaleTable hltPrescaleTableLumi_
static const unsigned int NumberPhysTriggers
void retrieveL1EventSetup(const edm::EventSetup &)
retrieve all the relevant L1 trigger event setup records and cache them to improve the speed ...
Definition: L1GtUtils.cc:107
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:359
std::vector< TriggerFilter > TriggerFilterCollection
Collection of TriggerFilter.
int prescaleSet(const edm::Event &iEvent, const edm::EventSetup &iSetup) const
std::vector< size_type > Keys
const T & get() const
Definition: EventSetup.h:55
const std::vector< std::string > & prescaleLabels() const
low-level data member access
std::string const & label() const
Definition: InputTag.h:25
list key
Definition: combine.py:13
static const std::string category("Muon|RecoMuon|L3MuonCandidateProducerFromMuons")
std::vector< TriggerObject > TriggerObjectCollection
Collection of TriggerObject.
unsigned int prescaleSize() const
perl if(1 lt scalar(@::datatypes))
Definition: edlooper.cc:31
std::vector< TriggerCondition > TriggerConditionCollection
Collection of TriggerCondition.
std::vector< std::string > exludeCollections_
std::vector< L1Seed > L1SeedCollection
Collection of L1Seed.
Definition: TriggerPath.h:39
void addTriggerObjectType(trigger::TriggerObjectType triggerObjectType)
Add a new trigger object type identifier.
Definition: TriggerObject.h:89
std::vector< SingleCombInCond > CombinationsInCond
all the object combinations evaluated to true in the condition
std::vector< TriggerPath > TriggerPathCollection
Collection of TriggerPath.
Definition: TriggerPath.h:144
edm::InputTag tagL1ExtraNoIsoEG_
std::vector< int > Vids
Analysis-level trigger object class (stand-alone)

Member Data Documentation

bool pat::PATTriggerProducer::addL1Algos_
private

Definition at line 72 of file PATTriggerProducer.h.

Referenced by PATTriggerProducer(), and produce().

bool pat::PATTriggerProducer::addPathModuleLabels_
private

Definition at line 101 of file PATTriggerProducer.h.

Referenced by PATTriggerProducer(), and produce().

bool pat::PATTriggerProducer::autoProcessName_
private

Definition at line 68 of file PATTriggerProducer.h.

Referenced by beginRun(), and PATTriggerProducer().

bool pat::PATTriggerProducer::autoProcessNameL1ExtraCenJet_
private

Definition at line 85 of file PATTriggerProducer.h.

Referenced by beginRun(), and PATTriggerProducer().

bool pat::PATTriggerProducer::autoProcessNameL1ExtraETM_
private

Definition at line 88 of file PATTriggerProducer.h.

Referenced by beginRun(), and PATTriggerProducer().

bool pat::PATTriggerProducer::autoProcessNameL1ExtraForJet_
private

Definition at line 86 of file PATTriggerProducer.h.

Referenced by beginRun(), and PATTriggerProducer().

bool pat::PATTriggerProducer::autoProcessNameL1ExtraHTM_
private

Definition at line 89 of file PATTriggerProducer.h.

Referenced by beginRun(), and PATTriggerProducer().

bool pat::PATTriggerProducer::autoProcessNameL1ExtraIsoEG_
private

Definition at line 84 of file PATTriggerProducer.h.

Referenced by beginRun(), and PATTriggerProducer().

bool pat::PATTriggerProducer::autoProcessNameL1ExtraMu_
private

Definition at line 82 of file PATTriggerProducer.h.

Referenced by beginRun(), and PATTriggerProducer().

bool pat::PATTriggerProducer::autoProcessNameL1ExtraNoIsoEG_
private

Definition at line 83 of file PATTriggerProducer.h.

Referenced by beginRun(), and PATTriggerProducer().

bool pat::PATTriggerProducer::autoProcessNameL1ExtraTauJet_
private

Definition at line 87 of file PATTriggerProducer.h.

Referenced by beginRun(), and PATTriggerProducer().

std::vector< std::string > pat::PATTriggerProducer::exludeCollections_
private

Definition at line 102 of file PATTriggerProducer.h.

Referenced by PATTriggerProducer(), and produce().

HLTConfigProvider pat::PATTriggerProducer::hltConfig_
private

Definition at line 93 of file PATTriggerProducer.h.

Referenced by beginRun(), and produce().

bool pat::PATTriggerProducer::hltConfigInit_
private

Definition at line 94 of file PATTriggerProducer.h.

Referenced by beginLuminosityBlock(), beginRun(), and produce().

std::string pat::PATTriggerProducer::hltPrescaleLabel_
private

Definition at line 97 of file PATTriggerProducer.h.

Referenced by PATTriggerProducer(), and produce().

trigger::HLTPrescaleTable pat::PATTriggerProducer::hltPrescaleTableLumi_
private

Definition at line 100 of file PATTriggerProducer.h.

Referenced by beginLuminosityBlock(), and produce().

trigger::HLTPrescaleTable pat::PATTriggerProducer::hltPrescaleTableRun_
private

Definition at line 99 of file PATTriggerProducer.h.

Referenced by beginLuminosityBlock(), and beginRun().

L1GtUtils pat::PATTriggerProducer::l1GtUtils_
private

Definition at line 71 of file PATTriggerProducer.h.

Referenced by produce().

std::string pat::PATTriggerProducer::labelHltPrescaleTable_
private

Definition at line 98 of file PATTriggerProducer.h.

Referenced by beginLuminosityBlock(), beginRun(), PATTriggerProducer(), and produce().

bool pat::PATTriggerProducer::mainBxOnly_
private

Definition at line 90 of file PATTriggerProducer.h.

Referenced by PATTriggerProducer(), and produce().

std::string pat::PATTriggerProducer::nameProcess_
private

Definition at line 67 of file PATTriggerProducer.h.

Referenced by beginLuminosityBlock(), beginRun(), PATTriggerProducer(), and produce().

bool pat::PATTriggerProducer::onlyStandAlone_
private

Definition at line 69 of file PATTriggerProducer.h.

Referenced by PATTriggerProducer(), and produce().

bool pat::PATTriggerProducer::saveL1Refs_
private

Definition at line 91 of file PATTriggerProducer.h.

Referenced by PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagL1ExtraCenJet_
private

Definition at line 77 of file PATTriggerProducer.h.

Referenced by beginRun(), PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagL1ExtraETM_
private

Definition at line 80 of file PATTriggerProducer.h.

Referenced by beginRun(), PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagL1ExtraForJet_
private

Definition at line 78 of file PATTriggerProducer.h.

Referenced by beginRun(), PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagL1ExtraHTM_
private

Definition at line 81 of file PATTriggerProducer.h.

Referenced by beginRun(), PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagL1ExtraIsoEG_
private

Definition at line 76 of file PATTriggerProducer.h.

Referenced by beginRun(), PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagL1ExtraMu_
private

Definition at line 74 of file PATTriggerProducer.h.

Referenced by beginRun(), PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagL1ExtraNoIsoEG_
private

Definition at line 75 of file PATTriggerProducer.h.

Referenced by beginRun(), PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagL1ExtraTauJet_
private

Definition at line 79 of file PATTriggerProducer.h.

Referenced by beginRun(), PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagL1GlobalTriggerObjectMapRecord_
private

Definition at line 73 of file PATTriggerProducer.h.

Referenced by PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagTriggerEvent_
private

Definition at line 96 of file PATTriggerProducer.h.

Referenced by beginRun(), PATTriggerProducer(), and produce().

edm::InputTag pat::PATTriggerProducer::tagTriggerResults_
private

Definition at line 95 of file PATTriggerProducer.h.

Referenced by beginRun(), PATTriggerProducer(), and produce().