CMS 3D CMS Logo

L1TJetsMatching.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: RecoTauTag/HLTProducers
4 // Class: L1TJetsMatching
5 //
16 //
17 // Original Author: Vukasin Milosevic
18 // Created: Thu, 01 Jun 2017 17:23:00 GMT
19 //
20 //
21 
22 
23 
24 
25 #ifndef RecoTauTag_HLTProducers_L1TJetsMatching_h
26 #define RecoTauTag_HLTProducers_L1TJetsMatching_h
27 
28 // user include files
40 
41 #include "Math/GenVector/VectorUtil.h"
45 
48 
49 #include <map>
50 #include <vector>
51 
52 template< typename T>
54  public:
55  explicit L1TJetsMatching(const edm::ParameterSet&);
56  ~L1TJetsMatching() override;
57  void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
58  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
59 
60  private:
61 
64  const double pt1Min_;
65  const double pt2Min_;
66  const double mjjMin_;
67  const double matchingR_;
68  const double matchingR2_;
69  };
70  //
71  // class decleration
72  //
73  template< typename T>
74  std::pair<std::vector<T>,std::vector<T>> categorise(const std::vector<T>& pfMatchedJets, double pt1, double pt2, double Mjj)
75  {
76  std::pair<std::vector<T>,std::vector<T>> output;
77  unsigned int i1 = 0;
78  unsigned int i2 = 0;
79  double mjj = 0;
80  if (pfMatchedJets.size()>1){
81  for (unsigned int i = 0; i < pfMatchedJets.size()-1; i++){
82 
83  const T & myJet1 = (pfMatchedJets)[i];
84 
85  for (unsigned int j = i+1; j < pfMatchedJets.size(); j++)
86  {
87  const T & myJet2 = (pfMatchedJets)[j];
88 
89  const double mjj_test = (myJet1.p4()+myJet2.p4()).M();
90 
91  if (mjj_test > mjj){
92 
93  mjj =mjj_test;
94  i1 = i;
95  i2 = j;
96  }
97  }
98  }
99 
100  const T & myJet1 = (pfMatchedJets)[i1];
101  const T & myJet2 = (pfMatchedJets)[i2];
102 
103  if ((mjj > Mjj) && (myJet1.pt() >= pt1) && (myJet2.pt() > pt2) )
104  {
105 
106  output.first.push_back(myJet1);
107  output.first.push_back(myJet2);
108 
109  }
110 
111  if ((mjj > Mjj) && (myJet1.pt() < pt1) && (myJet1.pt() > pt2) && (myJet2.pt() > pt2))
112  {
113 
114  const T & myJetTest = (pfMatchedJets)[0];
115  if (myJetTest.pt()>pt1){
116  output.second.push_back(myJet1);
117  output.second.push_back(myJet2);
118  output.second.push_back(myJetTest);
119 
120  }
121  }
122 
123  }
124 
125  return output;
126 
127  }
128  template< typename T>
130  jetSrc_ ( consumes<std::vector<T>> (iConfig.getParameter<edm::InputTag>("JetSrc" ) ) ),
131  jetTrigger_( consumes<trigger::TriggerFilterObjectWithRefs>(iConfig.getParameter<edm::InputTag>("L1JetTrigger") ) ),
132  pt1Min_ ( iConfig.getParameter<double>("pt1Min")),
133  pt2Min_ ( iConfig.getParameter<double>("pt2Min")),
134  mjjMin_ ( iConfig.getParameter<double>("mjjMin")),
135  matchingR_ ( iConfig.getParameter<double>("matchingR")),
137  {
138  produces<std::vector<T>>("TwoJets");
139  produces<std::vector<T>>("ThreeJets");
140 
141  }
142  template< typename T>
144 
145  template< typename T>
147  {
148 
149  unique_ptr<std::vector<T>> pfMatchedJets(new std::vector<T>);
150  std::pair<std::vector<T>,std::vector<T>> output;
151 
152 
153 
154  // Getting HLT jets to be matched
156  iEvent.getByToken( jetSrc_, pfJets );
157 
159  iEvent.getByToken(jetTrigger_,l1TriggeredJets);
160 
161  //l1t::TauVectorRef jetCandRefVec;
162  l1t::JetVectorRef jetCandRefVec;
163  l1TriggeredJets->getObjects( trigger::TriggerL1Jet,jetCandRefVec);
164 
165  math::XYZPoint a(0.,0.,0.);
166 
167  //std::cout<<"PFsize= "<<pfJets->size()<<endl<<" L1size= "<<jetCandRefVec.size()<<std::endl;
168  for(unsigned int iJet = 0; iJet < pfJets->size(); iJet++){
169  const T & myJet = (*pfJets)[iJet];
170  for(unsigned int iL1Jet = 0; iL1Jet < jetCandRefVec.size(); iL1Jet++){
171  // Find the relative L2pfJets, to see if it has been reconstructed
172  // if ((iJet<3) && (iL1Jet==0)) std::cout<<myJet.p4().Pt()<<" ";
173  if ((reco::deltaR2(myJet.p4(), jetCandRefVec[iL1Jet]->p4()) < matchingR2_ ) && (myJet.pt()>pt2Min_)) {
174  pfMatchedJets->push_back(myJet);
175  break;
176  }
177  }
178  }
179 
180  output= categorise(*pfMatchedJets,pt1Min_,pt2Min_, mjjMin_);
181  unique_ptr<std::vector<T>> output1(new std::vector<T>(output.first));
182  unique_ptr<std::vector<T>> output2(new std::vector<T>(output.second));
183 
184  iEvent.put(std::move(output1),"TwoJets");
185  iEvent.put(std::move(output2),"ThreeJets");
186 
187  }
188  template< typename T>
190  {
192  desc.add<edm::InputTag>("L1JetTrigger", edm::InputTag("hltL1DiJetVBF"))->setComment("Name of trigger filter" );
193  desc.add<edm::InputTag>("JetSrc" , edm::InputTag("hltAK4PFJetsTightIDCorrected"))->setComment("Input collection of PFJets");
194  desc.add<double> ("pt1Min",95.0)->setComment("Minimal pT1 of PFJets to match");
195  desc.add<double> ("pt2Min",35.0)->setComment("Minimal pT2 of PFJets to match");
196  desc.add<double> ("mjjMin",650.0)->setComment("Minimal mjj of matched PFjets");
197  desc.add<double> ("matchingR",0.5)->setComment("dR value used for matching");
198  descriptions.setComment("This module produces collection of PFJetss matched to L1 Taus / Jets passing a HLT filter (Only p4 and vertex of returned PFJetss are set).");
199  descriptions.add(defaultModuleLabel<L1TJetsMatching<T>>(), desc);
200  }
201 
202 
203 
204 #endif
void setComment(std::string const &value)
const double mjjMin_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:136
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
L1TJetsMatching(const edm::ParameterSet &)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
std::vector< JetRef > JetVectorRef
Definition: Jet.h:14
std::string defaultModuleLabel()
const edm::EDGetTokenT< std::vector< T > > jetSrc_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
~L1TJetsMatching() override
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
int iEvent
Definition: GenABIO.cc:230
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::pair< std::vector< T >, std::vector< T > > categorise(const std::vector< T > &pfMatchedJets, double pt1, double pt2, double Mjj)
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > jetTrigger_
const double matchingR2_
void setComment(std::string const &value)
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
const double pt1Min_
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
void add(std::string const &label, ParameterSetDescription const &psetDescription)
T1 deltaR2(T1 eta1, T2 phi1, T3 eta2, T4 phi2)
Definition: deltaR.h:36
HLT enums.
double a
Definition: hdecay.h:121
const double matchingR_
long double T
const double pt2Min_
def move(src, dest)
Definition: eostools.py:510