25 #ifndef RecoTauTag_HLTProducers_L1TJetsMatching_h 26 #define RecoTauTag_HLTProducers_L1TJetsMatching_h 41 #include "Math/GenVector/VectorUtil.h" 73 using namespace reco ;
80 std::pair<std::vector<T>,std::vector<T>>
categorise(
const std::vector<T>& pfMatchedJets,
double pt1,
double pt2,
double Mjj)
82 std::pair<std::vector<T>,std::vector<T>>
output;
86 if (pfMatchedJets.size()>1){
87 for (
unsigned int i = 0;
i < pfMatchedJets.size()-1;
i++){
89 const T & myJet1 = (pfMatchedJets)[
i];
91 for (
unsigned int j =
i+1; j < pfMatchedJets.size(); j++)
93 const T & myJet2 = (pfMatchedJets)[j];
95 const double mjj_test = (myJet1.p4()+myJet2.p4()).M();
106 const T & myJet1 = (pfMatchedJets)[i1];
107 const T & myJet2 = (pfMatchedJets)[i2];
109 if ((mjj > Mjj) && (myJet1.pt() >=
pt1) && (myJet2.pt() >
pt2) )
112 output.first.push_back(myJet1);
113 output.first.push_back(myJet2);
117 if ((mjj > Mjj) && (myJet1.pt() <
pt1) && (myJet1.pt() >
pt2) && (myJet2.pt() >
pt2))
120 const T & myJetTest = (pfMatchedJets)[0];
121 if (myJetTest.pt()>
pt1){
122 output.second.push_back(myJet1);
123 output.second.push_back(myJet2);
124 output.second.push_back(myJetTest);
134 template<
typename T>
138 pt1Min_ ( iConfig.getParameter<double>(
"pt1Min")),
139 pt2Min_ ( iConfig.getParameter<double>(
"pt2Min")),
140 mjjMin_ ( iConfig.getParameter<double>(
"mjjMin")),
141 matchingR_ ( iConfig.getParameter<double>(
"matchingR")),
144 produces<std::vector<T>>(
"TwoJets");
145 produces<std::vector<T>>(
"ThreeJets");
148 template<
typename T>
151 template<
typename T>
155 unique_ptr<std::vector<T>> pfMatchedJets(
new std::vector<T>);
156 std::pair<std::vector<T>,std::vector<T>>
output;
174 for(
unsigned int iJet = 0; iJet < pfJets->size(); iJet++){
175 const T & myJet = (*pfJets)[iJet];
176 for(
unsigned int iL1Jet = 0; iL1Jet < jetCandRefVec.size(); iL1Jet++){
180 pfMatchedJets->push_back(myJet);
187 unique_ptr<std::vector<T>> output1(
new std::vector<T>(output.first));
188 unique_ptr<std::vector<T>> output2(
new std::vector<T>(output.second));
194 template<
typename T>
200 desc.
add<
double> (
"pt1Min",95.0)->
setComment(
"Minimal pT1 of PFJets to match");
201 desc.
add<
double> (
"pt2Min",35.0)->
setComment(
"Minimal pT2 of PFJets to match");
202 desc.
add<
double> (
"mjjMin",650.0)->
setComment(
"Minimal mjj of matched PFjets");
203 desc.
add<
double> (
"matchingR",0.5)->
setComment(
"dR value used for matching");
204 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).");
std::string defaultModuleLabel()
void setComment(std::string const &value)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
L1TJetsMatching(const edm::ParameterSet &)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< JetRef > JetVectorRef
const edm::EDGetTokenT< std::vector< T > > jetSrc_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
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_
void setComment(std::string const &value)
XYZPointD XYZPoint
point in space with cartesian internal representation
virtual 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)