Go to the documentation of this file.00001
00008 #include "HLTrigger/JetMET/interface/HLTForwardBackwardJetsFilter.h"
00009
00010 #include "DataFormats/Common/interface/Handle.h"
00011
00012 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00013
00014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00015
00016 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00017
00018 #include "FWCore/Framework/interface/ESHandle.h"
00019 #include "FWCore/Framework/interface/EventSetup.h"
00020
00021 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
00022 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
00023 #include "FWCore/Utilities/interface/InputTag.h"
00024
00025
00026
00027
00028 HLTForwardBackwardJetsFilter::HLTForwardBackwardJetsFilter(const edm::ParameterSet& iConfig)
00029 {
00030 inputTag_ = iConfig.getParameter< edm::InputTag > ("inputTag");
00031 saveTag_ = iConfig.getUntrackedParameter<bool>("saveTag");
00032 minPt_ = iConfig.getParameter<double> ("minPt");
00033 minEta_ = iConfig.getParameter<double> ("minEta");
00034 maxEta_ = iConfig.getParameter<double> ("maxEta");
00035
00036
00037 produces<trigger::TriggerFilterObjectWithRefs>();
00038 }
00039
00040 HLTForwardBackwardJetsFilter::~HLTForwardBackwardJetsFilter(){}
00041
00042 void
00043 HLTForwardBackwardJetsFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
00044 edm::ParameterSetDescription desc;
00045 desc.add<edm::InputTag>("inputTag",edm::InputTag("hltIterativeCone5CaloJetsRegional"));
00046 desc.addUntracked<bool>("saveTag",false);
00047 desc.add<double>("minPt",15.0);
00048 desc.add<double>("minEta",3.0);
00049 desc.add<double>("maxEta",5.1);
00050 descriptions.add("hltForwardBackwardJetsFilter",desc);
00051 }
00052
00053
00054 bool
00055 HLTForwardBackwardJetsFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00056 {
00057 using namespace trigger;
00058
00059 std::auto_ptr<trigger::TriggerFilterObjectWithRefs>
00060 filterobject (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00061 if (saveTag_) filterobject->addCollectionTag(inputTag_);
00062
00063 edm::Handle<reco::CaloJetCollection> recocalojets;
00064 iEvent.getByLabel(inputTag_,recocalojets);
00065
00066
00067 int nplusjets(0);
00068 int nminusjets(0);
00069
00070 if(recocalojets->size() > 1){
00071
00072
00073
00074 for (reco::CaloJetCollection::const_iterator recocalojet = recocalojets->begin();
00075 recocalojet!=(recocalojets->end()); recocalojet++) {
00076
00077 float ptjet=recocalojet->pt();
00078 float etajet=recocalojet->eta();
00079 if( ptjet > minPt_ ){
00080 if ( etajet > minEta_ && etajet < maxEta_ ){
00081 nplusjets++;
00082 reco::CaloJetRef ref(reco::CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet)));
00083 filterobject->addObject(TriggerJet,ref);
00084 }
00085 }
00086 }
00087 if (nplusjets > 0) {
00088 for (reco::CaloJetCollection::const_iterator recocalojet = recocalojets->begin();
00089 recocalojet!=(recocalojets->end()); recocalojet++) {
00090
00091 float ptjet=recocalojet->pt();
00092 float etajet=recocalojet->eta();
00093
00094 if( ptjet > minPt_ ){
00095 if ( etajet < -minEta_ && etajet > -maxEta_ ){
00096 nminusjets++;
00097 reco::CaloJetRef ref(reco::CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet)));
00098 filterobject->addObject(TriggerJet,ref);
00099 }
00100 }
00101 }
00102 }
00103 }
00104
00105
00106
00107
00108 bool accept(nplusjets>0 && nminusjets>0);
00109
00110 iEvent.put(filterobject);
00111
00112 return accept;
00113 }