Go to the documentation of this file.00001
00009 #include "HLTrigger/JetMET/interface/HLTJetVBFFilter.h"
00010
00011 #include "DataFormats/Common/interface/Handle.h"
00012
00013 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00014
00015 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00016
00017 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00018
00019 #include "FWCore/Framework/interface/ESHandle.h"
00020 #include "FWCore/Framework/interface/EventSetup.h"
00021
00022
00023
00024
00025
00026 HLTJetVBFFilter::HLTJetVBFFilter(const edm::ParameterSet& iConfig)
00027 {
00028 inputTag_ = iConfig.getParameter< edm::InputTag > ("inputTag");
00029 saveTag_ = iConfig.getUntrackedParameter<bool>("saveTag",false);
00030 minEtLow_ = iConfig.getParameter<double> ("minEtLow");
00031 minEtHigh_ = iConfig.getParameter<double> ("minEtHigh");
00032 etaOpposite_ = iConfig.getParameter<bool> ("etaOpposite");
00033 minDeltaEta_ = iConfig.getParameter<double> ("minDeltaEta");
00034 minInvMass_ = iConfig.getParameter<double> ("minInvMass");
00035
00036
00037 produces<trigger::TriggerFilterObjectWithRefs>();
00038 }
00039
00040 HLTJetVBFFilter::~HLTJetVBFFilter(){}
00041
00042
00043
00044 bool
00045 HLTJetVBFFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00046 {
00047 using namespace trigger;
00048
00049 std::auto_ptr<trigger::TriggerFilterObjectWithRefs>
00050 filterobject (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00051 if (saveTag_) filterobject->addCollectionTag(inputTag_);
00052
00053 edm::Handle<reco::CaloJetCollection> recocalojets;
00054 iEvent.getByLabel(inputTag_,recocalojets);
00055
00056
00057 int n(0);
00058
00059
00060
00061 if(recocalojets->size() > 1){
00062
00063 double ejet1 = 0.;
00064 double pxjet1 = 0.;
00065 double pyjet1 = 0.;
00066 double pzjet1 = 0.;
00067 double etjet1 = 0.;
00068 double etajet1 = 0.;
00069
00070 double ejet2 = 0.;
00071 double pxjet2 = 0.;
00072 double pyjet2 = 0.;
00073 double pzjet2 = 0.;
00074 double etjet2 = 0.;
00075 double etajet2 = 0.;
00076
00077
00078 for (reco::CaloJetCollection::const_iterator recocalojet1 = recocalojets->begin();
00079 recocalojet1 != recocalojets->end(); ++recocalojet1) {
00080
00081 if( recocalojet1->et() < minEtHigh_ ) break;
00082
00083 for (reco::CaloJetCollection::const_iterator recocalojet2 = recocalojet1+1;
00084 recocalojet2 != recocalojets->end(); ++recocalojet2) {
00085
00086 if( recocalojet2->et() < minEtLow_ ) break;
00087
00088 ejet1 = recocalojet1->energy();
00089 pxjet1 = recocalojet1->px();
00090 pyjet1 = recocalojet1->py();
00091 pzjet1 = recocalojet1->pz();
00092 etjet1 = recocalojet1->et();
00093 etajet1 = recocalojet1->eta();
00094
00095 ejet2 = recocalojet2->energy();
00096 pxjet2 = recocalojet2->px();
00097 pyjet2 = recocalojet2->py();
00098 pzjet2 = recocalojet2->pz();
00099 etjet2 = recocalojet2->et();
00100 etajet2 = recocalojet2->eta();
00101
00102 float deltaetajet = etajet1 - etajet2;
00103
00104 float invmassjet = sqrt( (ejet1 + ejet2) * (ejet1 + ejet2) -
00105 (pxjet1 + pxjet2) * (pxjet1 + pxjet2) -
00106 (pyjet1 + pyjet2) * (pyjet1 + pyjet2) -
00107 (pzjet1 + pzjet2) * (pzjet1 + pzjet2) );
00108
00109
00110 if ( (etjet1 > minEtHigh_) &&
00111 (etjet2 > minEtLow_) &&
00112 ( (etaOpposite_ == true && etajet1*etajet2 < 0) || (etaOpposite_ == false) ) &&
00113 (fabs(deltaetajet) > minDeltaEta_) &&
00114 (fabs(invmassjet) > minInvMass_) ){
00115
00116 ++n;
00117 reco::CaloJetRef ref1(reco::CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet1)));
00118 filterobject->addObject(TriggerJet,ref1);
00119 reco::CaloJetRef ref2(reco::CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet2)));
00120 filterobject->addObject(TriggerJet,ref2);
00121
00122 }
00123
00124 }
00125 }
00126
00127 }
00128
00129
00130
00131
00132 bool accept(n>=1);
00133
00134
00135 iEvent.put(filterobject);
00136
00137 return accept;
00138 }