26 inputTag_(iConfig.getParameter<
edm::InputTag > (
"inputTag")),
27 originalTag_(iConfig.getParameter<
edm::InputTag > (
"originalTag")),
28 softJetPt_(iConfig.getParameter<double> (
"SoftJetPt")),
29 hardJetPt_(iConfig.getParameter<double> (
"HardJetPt")),
30 minDeltaEta_(iConfig.getParameter<double> (
"MinDeltaEta")),
31 thirdJetPt_(iConfig.getParameter<double> (
"ThirdJetPt")),
32 maxAbsJetEta_(iConfig.getParameter<double> (
"MaxAbsJetEta")),
33 maxAbsThirdJetEta_(iConfig.getParameter<double> (
"MaxAbsThirdJetEta")),
34 minNJets_(iConfig.getParameter<unsigned
int> (
"MinNJets")),
35 triggerType_(iConfig.getParameter<
int> (
"TriggerType"))
51 desc.
add<
double>(
"SoftJetPt",25.0);
52 desc.
add<
double>(
"HardJetPt",35.0);
53 desc.
add<
double>(
"MinDeltaEta",3.0);
54 desc.
add<
double>(
"ThirdJetPt",20.0);
55 desc.
add<
double>(
"MaxAbsJetEta",9999.);
56 desc.
add<
double>(
"MaxAbsThirdJetEta",2.6);
57 desc.
add<
unsigned int>(
"MinNJets",2);
72 typedef vector<T> TCollection;
82 const TCollectionVector & theJetCollections = *theJetCollectionsHandle;
85 std::vector < TRef > goodJetRefs;
89 const TRefVector & refVector = theJetCollections[
collection];
90 if(refVector.size() <
minNJets_)
continue;
93 bool thereAreVBFJets(
false);
95 bool goodThirdJet(
false);
103 typename TRefVector::const_iterator jetOne ( refVector.begin() );
104 int firstJetIndex=100, secondJetIndex=100, thirdJetIndex=100;
107 for (; jetOne != refVector.end(); jetOne++) {
108 TRef jetOneRef(*jetOne);
110 if ( thereAreVBFJets )
break;
114 typename TRefVector::const_iterator jetTwo = jetOne + 1;
115 secondJetIndex = firstJetIndex;
116 for (; jetTwo != refVector.end(); jetTwo++) {
117 TRef jetTwoRef(*jetTwo);
124 thereAreVBFJets =
true;
126 goodJetRefs.push_back(refOne);
128 goodJetRefs.push_back(refTwo);
130 firstJetIndex = (
int) (jetOne - refVector.begin());
131 secondJetIndex= (
int) (jetTwo - refVector.begin());
139 if (
minNJets_ > 2 && thereAreVBFJets ) {
141 typename TRefVector::const_iterator jetThree ( refVector.begin() );
142 for (; jetThree != refVector.end(); jetThree++) {
143 thirdJetIndex = (
int) (jetThree - refVector.begin());
145 TRef jetThreeRef(*jetThree);
147 if ( thirdJetIndex == firstJetIndex || thirdJetIndex == secondJetIndex )
continue;
151 refThree = *jetThree;
152 goodJetRefs.push_back(refThree);
158 if(thereAreVBFJets && goodThirdJet){
166 for (
unsigned int refIndex = 0; refIndex < goodJetRefs.size(); ++refIndex) {
edm::EDGetTokenT< std::vector< edm::RefVector< std::vector< T >, T, edm::refhelper::FindUsingAdvance< std::vector< T >, T > > > > m_theJetToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::InputTag originalTag_
std::string defaultModuleLabel()
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
~HLTJetCollectionsVBFFilter() override
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
Abs< T >::type abs(const T &t)
HLTJetCollectionsVBFFilter(const edm::ParameterSet &)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
double maxAbsThirdJetEta_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)