Go to the documentation of this file.00001
00008 #include "HLTrigger/JetMET/interface/HLTDiJetAveFilter.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 "DataFormats/Math/interface/deltaPhi.h"
00022
00023 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
00024 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
00025 #include "FWCore/Utilities/interface/InputTag.h"
00026
00027
00028
00029
00030 HLTDiJetAveFilter::HLTDiJetAveFilter(const edm::ParameterSet& iConfig)
00031 {
00032 inputJetTag_ = iConfig.getParameter< edm::InputTag > ("inputJetTag");
00033 saveTag_ = iConfig.getUntrackedParameter<bool>("saveTag");
00034 minPtAve_ = iConfig.getParameter<double> ("minPtAve");
00035 minPtJet3_ = iConfig.getParameter<double> ("minPtJet3");
00036 minDphi_ = iConfig.getParameter<double> ("minDphi");
00037
00038 produces<trigger::TriggerFilterObjectWithRefs>();
00039 }
00040
00041 HLTDiJetAveFilter::~HLTDiJetAveFilter(){}
00042
00043 void
00044 HLTDiJetAveFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
00045 edm::ParameterSetDescription desc;
00046 desc.add<edm::InputTag>("inputJetTag",edm::InputTag("hltIterativeCone5CaloJets"));
00047 desc.addUntracked<bool>("saveTag",false);
00048 desc.add<double>("minPtAve",100.0);
00049 desc.add<double>("minPtJet3",99999.0);
00050 desc.add<double>("minDphi",-1.0);
00051 descriptions.add("hltDiJetAveFilter",desc);
00052 }
00053
00054
00055 bool
00056 HLTDiJetAveFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00057 {
00058 using namespace std;
00059 using namespace edm;
00060 using namespace reco;
00061 using namespace trigger;
00062
00063 auto_ptr<trigger::TriggerFilterObjectWithRefs>
00064 filterobject (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00065 if (saveTag_) filterobject->addCollectionTag(inputJetTag_);
00066
00067 Handle<CaloJetCollection> recocalojets;
00068 iEvent.getByLabel(inputJetTag_,recocalojets);
00069
00070
00071 int n(0);
00072
00073 if(recocalojets->size() > 1){
00074
00075
00076 double ptjet1=0., ptjet2=0.,ptjet3=0.;
00077 double phijet1=0.,phijet2=0;
00078 int countjets =0;
00079
00080 int nmax=1;
00081 if (recocalojets->size() > 2) nmax=2;
00082
00083 CaloJetRef JetRef1,JetRef2;
00084
00085 for (CaloJetCollection::const_iterator recocalojet = recocalojets->begin();
00086 recocalojet<=(recocalojets->begin()+nmax); ++recocalojet) {
00087
00088 if(countjets==0) {
00089 ptjet1 = recocalojet->pt();
00090 phijet1 = recocalojet->phi();
00091 JetRef1 = CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet));
00092 }
00093 if(countjets==1) {
00094 ptjet2 = recocalojet->pt();
00095 phijet2 = recocalojet->phi();
00096 JetRef2 = CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet));
00097 }
00098 if(countjets==2) {
00099 ptjet3 = recocalojet->pt();
00100 }
00101 ++countjets;
00102 }
00103
00104 double PtAve=(ptjet1 + ptjet2) / 2.;
00105 double Dphi = fabs(deltaPhi(phijet1,phijet2));
00106
00107 if( PtAve>minPtAve_ && ptjet3<minPtJet3_ && Dphi>minDphi_){
00108 filterobject->addObject(TriggerJet,JetRef1);
00109 filterobject->addObject(TriggerJet,JetRef2);
00110 ++n;
00111 }
00112
00113 }
00114
00115
00116
00117
00118 bool accept(n>=1);
00119
00120
00121 iEvent.put(filterobject);
00122
00123 return accept;
00124 }