HLTL1TSeed

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
#ifndef HLTrigger_HLTfilters_HLTL1TSeed_h
#define HLTrigger_HLTfilters_HLTL1TSeed_h

/**
 * \class HLTL1TSeed
 *
 *
 * Description: filter L1 bits and extract seed objects from L1 GT for HLT algorithms.
 *
 * Implementation:
 *    This class is an HLTStreamFilter (-> stream::EDFilter). It implements:
 *      - filtering on Level-1 bits, given via a logical expression of algorithm names (currently ignored)
 *      - extraction of the seed objects from L1T uGT object map record
 *
 */

// system include files
#include <string>
#include <vector>

// user include files

//   base class
#include "HLTrigger/HLTcore/interface/HLTStreamFilter.h"
#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"

#include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h"
#include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h"
#include "DataFormats/L1TGlobal/interface/GlobalLogicParser.h"
#include "DataFormats/L1TGlobal/interface/GlobalObject.h"
#include "DataFormats/L1TGlobal/interface/GlobalAlgBlk.h"

#include "FWCore/Utilities/interface/InputTag.h"

// forward declarations
class L1GtTriggerMenu;
class L1GtTriggerMask;
class L1GlobalTriggerReadoutRecord;

class GlobalObjectMapRecord;
namespace edm {
  class ConfigurationDescriptions;
}

// class declaration
class HLTL1TSeed : public HLTStreamFilter {
public:
  /// constructor
  explicit HLTL1TSeed(const edm::ParameterSet&);

  /// destructor
  ~HLTL1TSeed() override = default;

  /// parameter description
  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);

  /// filter the event
  bool hltFilter(edm::Event&, const edm::EventSetup&, trigger::TriggerFilterObjectWithRefs& filterproduct) override;

private:
  /// update the tokenNumber (holding the bit numbers) from m_l1AlgoLogicParser
  /// for a new L1 Trigger menu
  void inline updateAlgoLogicParser(const L1GtTriggerMenu*, const AlgorithmMap&){};

  /// update the tokenResult members from m_l1AlgoLogicParser
  /// for a new event
  void inline updateAlgoLogicParser(const std::vector<bool>& gtWord,
                                    const std::vector<unsigned int>& triggerMask,
                                    const int physicsDaqPartition){};

  /// seeding is done via L1 trigger object maps, considering the objects which fired in L1
  bool seedsL1TriggerObjectMaps(edm::Event&, trigger::TriggerFilterObjectWithRefs&);

  /// detailed print of filter content
  void dumpTriggerFilterObjectWithRefs(trigger::TriggerFilterObjectWithRefs&) const;

private:
  /// logic parser for m_l1SeedsLogicalExpression
  GlobalLogicParser m_l1AlgoLogicParser;

  /// list of required algorithms for seeding
  std::vector<GlobalLogicParser::OperandToken> m_l1AlgoSeeds;

  /// vector of Rpn vectors for the required algorithms for seeding
  std::vector<const std::vector<GlobalLogicParser::TokenRPN>*> m_l1AlgoSeedsRpn;

  /// vector of object-type vectors for each condition in the required algorithms for seeding
  std::vector<std::vector<const std::vector<l1t::GlobalObject>*> > m_l1AlgoSeedsObjType;

private:
  /// option used forL1UseL1TriggerObjectMaps = False only
  /// number of BxInEvent: 1: L1A=0; 3: -1, L1A=0, 1; 5: -2, -1, L1A=0, 1, 2
  int m_l1NrBxInEvent;

  /// logical expression for the required L1 algorithms
  /// the algorithms are specified by name
  std::string m_l1SeedsLogicalExpression;

  /// InputTag for L1 Global Trigger object maps. This is done per menu. Should be part of Run.
  edm::InputTag m_l1GtObjectMapTag;
  edm::EDGetTokenT<GlobalObjectMapRecord> m_l1GtObjectMapToken;

  /// InputTag for L1 Global Trigger
  edm::InputTag m_l1GlobalTag;
  edm::EDGetTokenT<GlobalAlgBlkBxCollection> m_l1GlobalToken;

  //edm::InputTag dummyTag;
  /// Meta InputTag for L1 Muon collection
  edm::InputTag m_l1MuonCollectionsTag;
  edm::InputTag m_l1MuonTag;
  edm::EDGetTokenT<l1t::MuonBxCollection> m_l1MuonToken;

  /// Meta InputTag for L1 Muon collection
  edm::InputTag m_l1MuonShowerCollectionsTag;
  edm::InputTag m_l1MuonShowerTag;
  edm::EDGetTokenT<l1t::MuonShowerBxCollection> m_l1MuonShowerToken;

  /// Meta InputTag for L1 Egamma collection
  edm::InputTag m_l1EGammaCollectionsTag;
  edm::InputTag m_l1EGammaTag;
  edm::EDGetTokenT<l1t::EGammaBxCollection> m_l1EGammaToken;

  /// Meta InputTag for L1 Jet collection
  edm::InputTag m_l1JetCollectionsTag;
  edm::InputTag m_l1JetTag;
  edm::EDGetTokenT<l1t::JetBxCollection> m_l1JetToken;

  /// Meta InputTag for L1 Tau collection
  edm::InputTag m_l1TauCollectionsTag;
  edm::InputTag m_l1TauTag;
  edm::EDGetTokenT<l1t::TauBxCollection> m_l1TauToken;

  /// Meta InputTag for L1 EtSum collection
  edm::InputTag m_l1EtSumCollectionsTag;
  edm::InputTag m_l1EtSumTag;
  edm::EDGetTokenT<l1t::EtSumBxCollection> m_l1EtSumToken;

  /// Meta InputTag for L1 EtSum (ZDC) collection
  edm::InputTag m_l1EtSumZdcCollectionsTag;
  edm::InputTag m_l1EtSumZdcTag;
  edm::EDGetTokenT<l1t::EtSumBxCollection> m_l1EtSumZdcToken;

  /// flag to pass if L1TGlobal accept
  bool m_l1GlobalDecision;

  /// cache edm::isDebugEnabled()
  bool m_isDebugEnabled;
};

#endif  // HLTfilters_HLTL1TSeed_h