CMS 3D CMS Logo

HLTDiJetEtaTopologyFilter.cc
Go to the documentation of this file.
1 
9 
13 
22 
23 #include<typeinfo>
24 
25 //
26 // constructors and destructor
27 //
28 template<typename T>
30  inputJetTag_ (iConfig.template getParameter< edm::InputTag > ("inputJetTag")),
31  m_theJetToken(consumes<std::vector<T>>(inputJetTag_)),
32  minPtAve_ (iConfig.template getParameter<double> ("minPtAve")),
33  atLeastOneJetAbovePT_(iConfig.template getParameter<double> ("atLeastOneJetAbovePT")),
34  minPtTag_(iConfig.template getParameter<double> ("minPtTag")),
35  minPtProbe_(iConfig.template getParameter<double> ("minPtProbe")),
36  minDphi_ (iConfig.template getParameter<double> ("minDphi")),
37  tagEtaMin_ (iConfig.template getParameter<double> ("minTagEta")),
38  tagEtaMax_ (iConfig.template getParameter<double> ("maxTagEta")),
39  probeEtaMin_ (iConfig.template getParameter<double> ("minProbeEta")),
40  probeEtaMax_ (iConfig.template getParameter<double> ("maxProbeEta")),
41  applyAbsToTag_ (iConfig.template getParameter<bool> ("applyAbsToTag")),
42  applyAbsToProbe_ (iConfig.template getParameter<bool> ("applyAbsToProbe")),
43  oppositeEta_ (iConfig.template getParameter<bool> ("oppositeEta")),
44 
45  triggerType_ (iConfig.template getParameter<int> ("triggerType"))
46 {
47  LogDebug("") << "HLTDiJetEtaTopologyFilter: Input/minDphi/triggerType : "
48  << inputJetTag_.encode() << " "
49  //<< minPtJet3_ << " "
50  << minDphi_ << " "
51  << triggerType_;
52 }
53 
54 template<typename T>
56 
57 template<typename T>
58 void
62  desc.add<edm::InputTag>("inputJetTag",edm::InputTag("hltIterativeCone5CaloJets"));
63  desc.add<double>("minPtAve",0.0);
64  desc.add<double>("atLeastOneJetAbovePT",0.0)->setComment("At least one jet with pt above threshold");
65  desc.add<double>("minPtTag",50.0)->setComment("pt requirement on tag jet");
66  desc.add<double>("minPtProbe",50.0)->setComment("pt requirement on probe jet");
67  //desc.add<double>("minPtJet3",99999.0);
68  desc.add<double>("minDphi",-1.0);
69  desc.add<double>("minTagEta", -1.);
70  desc.add<double>("maxTagEta", 1.4);
71  desc.add<double>("minProbeEta", 2.7);
72  desc.add<double>("maxProbeEta", 5.5);
73  desc.add<bool> ("applyAbsToTag", false),
74  desc.add<bool> ("applyAbsToProbe", false),
75  desc.add<bool> ("oppositeEta", false),
76  desc.add<int>("triggerType",trigger::TriggerJet);
77  descriptions.add(defaultModuleLabel<HLTDiJetEtaTopologyFilter<T> >(), desc);
78 }
79 
80 // ------------ method called to produce the data ------------
81 template<typename T>
82 bool
84 {
85  using namespace std;
86  using namespace edm;
87  using namespace reco;
88  using namespace trigger;
89 
90  typedef vector<T> TCollection;
91  typedef Ref<TCollection> TRef;
92 
93  // The filter object
94  if (saveTags()) filterproduct.addCollectionTag(inputJetTag_);
95 
96  // get hold of collection of objects
98  iEvent.getByToken (m_theJetToken,objects);
99 
100  int n(0);
101 
102  if(objects->size() > 1){ // events with two or more jets
103  typename TCollection::const_iterator iProbe ( objects->begin() );
104  typename TCollection::const_iterator iEnd ( objects->end() );
105  for (; iProbe!=iEnd; ++iProbe) {
106  if (iProbe->pt() < minPtProbe_) continue;
107 
108  // for easier trigger efficiency evaluation save all probe/tag
109  // objects passing the minPT/eta criteria (outer loop)
110  float eta = iProbe->eta();
111  float etaForProbeTest = eta;
112  float etaForTagTest = eta;
113  //applyAbsToTag_ (iConfig.template getParameter<bool> ("applyAbsToTag")),
114  //applyAbsToProbe_ (iConfig.template getParameter<bool> ("applyAbsToProbe")),
115  if (applyAbsToProbe_) {
116  etaForProbeTest = abs(etaForProbeTest);
117  }
118  if (applyAbsToTag_) {
119  etaForTagTest = abs(etaForTagTest);
120  }
121 
122  bool isGood = false; // probe or tag
123  bool isProbe = false;
124  if (etaForProbeTest > probeEtaMin_ && etaForProbeTest < probeEtaMax_ ){
125  isGood = true;
126  isProbe = true;
127  }
128  if (etaForTagTest > tagEtaMin_ && etaForTagTest < tagEtaMax_ ){
129  isGood = true;
130  }
131  if (isGood){
132  filterproduct.addObject(triggerType_, TRef(objects,distance(objects->begin(),iProbe)));
133  }
134 
135  if (!isProbe) continue;
136 
137  typename TCollection::const_iterator iTag ( objects->begin() );
138  for (;iTag != iEnd; ++iTag){
139  if (iTag==iProbe) continue;
140  if (iTag->pt() < minPtTag_) continue;
141  if (std::max(iTag->pt(), iProbe->pt())<atLeastOneJetAbovePT_ ) continue;
142 
143 
144  float eta2 = iTag->eta();
145  if (applyAbsToTag_) {
146  eta2 = abs(eta2);
147  }
148 
149  if ( eta2 < tagEtaMin_ || eta2 > tagEtaMax_ ) continue;
150  double dphi = std::abs(deltaPhi(iProbe->phi(),iTag->phi() ));
151  if (dphi<minDphi_) {
152  continue;
153  }
154  if (oppositeEta_ && etaForProbeTest*eta2 > 0 ) {
155  continue;
156  }
157 
158  double ptAve = (iProbe->pt() + iTag->pt())/2;
159  if (ptAve<minPtAve_ ) {
160  continue;
161  }
162  ++n;
163  }
164  }
165  } // events with two or more jets
166  // filter decision
167  bool accept(n>=1);
168  return accept;
169 }
#define LogDebug(id)
void setComment(std::string const &value)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
std::string defaultModuleLabel()
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:30
std::string encode() const
Definition: InputTag.cc:159
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
int iEvent
Definition: GenABIO.cc:224
const edm::EDGetTokenT< std::vector< T > > m_theJetToken
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
def template(fileName, svg, replaceme="REPLACEME")
Definition: svgfig.py:521
~HLTDiJetEtaTopologyFilter() override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
HLTDiJetEtaTopologyFilter(const edm::ParameterSet &)
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
fixed size matrix
bool saveTags() const
Definition: HLTFilter.h:45
HLT enums.
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
long double T