36 inputTag_(iConfig.getParameter< edm::InputTag > (
"inputTag")),
37 originalTag_(iConfig.getParameter< edm::InputTag > (
"originalTag")),
38 softJetPt_(iConfig.getParameter<double> (
"SoftJetPt")),
39 hardJetPt_(iConfig.getParameter<double> (
"HardJetPt")),
40 minDeltaEta_(iConfig.getParameter<double> (
"MinDeltaEta")),
41 thirdJetPt_(iConfig.getParameter<double> (
"ThirdJetPt")),
42 maxAbsJetEta_(iConfig.getParameter<double> (
"MaxAbsJetEta")),
43 maxAbsThirdJetEta_(iConfig.getParameter<double> (
"MaxAbsThirdJetEta")),
44 minNJets_(iConfig.getParameter<unsigned int> (
"MinNJets")),
45 triggerType_(iConfig.getParameter<int> (
"TriggerType"))
58 desc.
add<
bool>(
"saveTags",
false);
59 desc.
add<
double>(
"SoftJetPt",25.0);
60 desc.
add<
double>(
"HardJetPt",35.0);
61 desc.
add<
double>(
"MinDeltaEta",3.0);
62 desc.
add<
double>(
"ThirdJetPt",20.0);
63 desc.
add<
double>(
"MaxAbsJetEta",9999.);
64 desc.
add<
double>(
"MaxAbsThirdJetEta",2.6);
65 desc.
add<
unsigned int>(
"MinNJets",2);
78 using namespace trigger;
80 typedef vector<T> TCollection;
89 iEvent.
getByLabel(inputTag_,theJetCollectionsHandle);
90 const TCollectionVector & theJetCollections = *theJetCollectionsHandle;
93 std::vector < TRef > goodJetRefs;
97 const TRefVector & refVector = theJetCollections[
collection];
98 if(refVector.size() < minNJets_)
continue;
101 bool thereAreVBFJets(
false);
103 bool goodThirdJet(
false);
104 if ( minNJets_ < 3 ) goodThirdJet =
true;
111 typename TRefVector::const_iterator jetOne ( refVector.begin() );
112 int firstJetIndex=100, secondJetIndex=100, thirdJetIndex=100;
115 for (; jetOne != refVector.end(); jetOne++) {
116 TRef jetOneRef(*jetOne);
118 if ( thereAreVBFJets )
break;
119 if ( jetOneRef->pt() < hardJetPt_ )
break;
120 if (
std::abs(jetOneRef->eta()) > maxAbsJetEta_ )
continue;
122 typename TRefVector::const_iterator jetTwo = jetOne + 1;
123 secondJetIndex = firstJetIndex;
124 for (; jetTwo != refVector.end(); jetTwo++) {
125 TRef jetTwoRef(*jetTwo);
127 if ( jetTwoRef->pt() < softJetPt_ )
break;
128 if (
std::abs(jetTwoRef->eta()) > maxAbsJetEta_ )
continue;
130 if (
std::abs(jetTwoRef->eta() - jetOneRef->eta()) < minDeltaEta_ )
continue;
132 thereAreVBFJets =
true;
133 refOne = TRef(refVector, distance(refVector.begin(), jetOne));
134 goodJetRefs.push_back(refOne);
135 refTwo = TRef(refVector, distance(refVector.begin(), jetTwo));
136 goodJetRefs.push_back(refTwo);
138 firstJetIndex = (int) (jetOne - refVector.begin());
139 secondJetIndex= (int) (jetTwo - refVector.begin());
147 if ( minNJets_ > 2 && thereAreVBFJets ) {
149 typename TRefVector::const_iterator jetThree ( refVector.begin() );
150 for (; jetThree != refVector.end(); jetThree++) {
151 thirdJetIndex = (int) (jetThree - refVector.begin());
153 TRef jetThreeRef(*jetThree);
155 if ( thirdJetIndex == firstJetIndex || thirdJetIndex == secondJetIndex )
continue;
157 if (jetThreeRef->pt() >= thirdJetPt_ &&
std::abs(jetThreeRef->eta()) <= maxAbsThirdJetEta_) {
159 refThree = TRef(refVector, distance(refVector.begin(), jetThree));
160 goodJetRefs.push_back(refThree);
166 if(thereAreVBFJets && goodThirdJet){
174 for (
unsigned int refIndex = 0; refIndex < goodJetRefs.size(); ++refIndex) {
175 filterproduct.
addObject(triggerType_, goodJetRefs.at(refIndex));
virtual bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct)
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
HLTJetCollectionsVBFFilter(const edm::ParameterSet &)
~HLTJetCollectionsVBFFilter()
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)