Go to the documentation of this file.00001
00010 #include <string>
00011 #include "HLTrigger/JetMET/interface/HLTAcoFilter.h"
00012
00013 #include "DataFormats/Common/interface/Handle.h"
00014
00015 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00016
00017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00018
00019 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00020 #include "DataFormats/METReco/interface/CaloMET.h"
00021
00022 #include "FWCore/Framework/interface/ESHandle.h"
00023 #include "FWCore/Framework/interface/EventSetup.h"
00024
00025
00026
00027
00028
00029 HLTAcoFilter::HLTAcoFilter(const edm::ParameterSet& iConfig)
00030 {
00031 inputJetTag_ = iConfig.getParameter< edm::InputTag > ("inputJetTag");
00032 inputMETTag_ = iConfig.getParameter< edm::InputTag > ("inputMETTag");
00033 saveTags_ = iConfig.getUntrackedParameter<bool>("saveTags",false);
00034 minDPhi_ = iConfig.getParameter<double> ("minDeltaPhi");
00035 maxDPhi_ = iConfig.getParameter<double> ("maxDeltaPhi");
00036 minEtjet1_ = iConfig.getParameter<double> ("minEtJet1");
00037 minEtjet2_ = iConfig.getParameter<double> ("minEtJet2");
00038 AcoString_ = iConfig.getParameter<std::string> ("Acoplanar");
00039
00040
00041 produces<trigger::TriggerFilterObjectWithRefs>();
00042 }
00043
00044 HLTAcoFilter::~HLTAcoFilter(){}
00045
00046
00047
00048 bool
00049 HLTAcoFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00050 {
00051 using namespace std;
00052 using namespace edm;
00053 using namespace reco;
00054 using namespace trigger;
00055
00056
00057 auto_ptr<trigger::TriggerFilterObjectWithRefs>
00058 filterobject (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00059 if (saveTags_) {
00060 filterobject->addCollectionTag(inputJetTag_);
00061 filterobject->addCollectionTag(inputMETTag_);
00062 }
00063
00064 Handle<CaloJetCollection> recocalojets;
00065 iEvent.getByLabel(inputJetTag_,recocalojets);
00066 Handle<trigger::TriggerFilterObjectWithRefs> metcal;
00067 iEvent.getByLabel(inputMETTag_,metcal);
00068
00069
00070 int n(0);
00071 int JetNum = recocalojets->size();
00072
00073
00074
00075 double etjet1=0.;
00076 double etjet2=0.;
00077 double phijet1=0.;
00078 double phijet2=0.;
00079 double etmiss=0.;
00080 double phimiss=0.;
00081
00082 VRcalomet vrefMET;
00083 metcal->getObjects(TriggerMET,vrefMET);
00084 CaloMETRef metRef=vrefMET.at(0);
00085 etmiss = vrefMET.at(0)->et();
00086 phimiss = vrefMET.at(0)->phi();
00087
00088 CaloJetRef ref1,ref2;
00089
00090 if (JetNum>0) {
00091 CaloJetCollection::const_iterator recocalojet = recocalojets->begin();
00092
00093 etjet1 = recocalojet->et();
00094 phijet1 = recocalojet->phi();
00095 ref1 = CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet));
00096
00097 if(JetNum>1) {
00098 recocalojet++;
00099 etjet2 = recocalojet->et();
00100 phijet2 = recocalojet->phi();
00101 ref2 = CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet));
00102 }
00103 double Dphi= -1.;
00104 int JetSel = 0;
00105
00106 if (AcoString_ == "Jet2Met") {
00107 Dphi = fabs(phimiss-phijet2);
00108 if (JetNum>=2 && etjet1>minEtjet1_ && etjet2>minEtjet2_) {JetSel=1;}
00109 }
00110 if (AcoString_ == "Jet1Jet2") {
00111 Dphi = fabs(phijet1-phijet2);
00112 if (JetNum>=2 && etjet1>minEtjet1_ && etjet2>minEtjet2_) {JetSel=1;}
00113 }
00114 if (AcoString_ == "Jet1Met") {
00115 Dphi = fabs(phimiss-phijet1);
00116 if (JetNum>=1 && etjet1>minEtjet1_ ) {JetSel=1;}
00117 }
00118
00119
00120 if (Dphi>M_PI) {Dphi=2.0*M_PI-Dphi;}
00121 if(JetSel>0 && Dphi>=minDPhi_ && Dphi<=maxDPhi_){
00122
00123 if (AcoString_=="Jet2Met" || AcoString_=="Jet1Met") {filterobject->addObject(TriggerMET,metRef);}
00124 if (AcoString_=="Jet1Met" || AcoString_=="Jet1Jet2") {filterobject->addObject(TriggerJet,ref1);}
00125 if (AcoString_=="Jet2Met" || AcoString_=="Jet1Jet2") {filterobject->addObject(TriggerJet,ref2);}
00126 n++;
00127 }
00128
00129
00130 }
00131
00132
00133
00134 bool accept(n>=1);
00135
00136
00137 iEvent.put(filterobject);
00138
00139 return accept;
00140 }