Go to the documentation of this file.00001 #include "HLTriggerOffline/Top/interface/TopHLTDQMHelper.h"
00002 #include <iostream>
00003
00004
00005 using namespace std;
00006
00007 CalculateHLT::CalculateHLT(int maxNJets, double wMass):
00008 failed_(false), maxNJets_(maxNJets), wMass_(wMass), massWBoson_(-1.), massTopQuark_(-1.),tmassWBoson_(-1),tmassTopQuark_(-1),mlb_(-1)
00009 {
00010 }
00011
00012
00013 double
00014 CalculateHLT::massWBoson(const std::vector<reco::Jet>& jets)
00015 {
00016 if(!failed_&& massWBoson_<0) operator()(jets); return massWBoson_;
00017 }
00018
00019
00020 double
00021 CalculateHLT::massTopQuark(const std::vector<reco::Jet>& jets)
00022 {
00023 if(!failed_&& massTopQuark_<0) operator()(jets); return massTopQuark_;
00024 }
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 double
00059 CalculateHLT::tmassWBoson(reco::RecoCandidate* mu, const reco::MET& met, const reco::Jet& b)
00060 {
00061 if(!failed_&& tmassWBoson_<0) operator()(b,mu,met); return tmassWBoson_;
00062 }
00063
00064
00065 double
00066 CalculateHLT::masslb(reco::RecoCandidate* mu, const reco::MET& met, const reco::Jet& b)
00067 {
00068 if(!failed_&& mlb_<0) operator()(b,mu,met); return mlb_;
00069 }
00070
00071
00072 double
00073 CalculateHLT::tmassTopQuark(reco::RecoCandidate* lepton, const reco::MET& met, const reco::Jet& b)
00074 {
00075 if(!failed_&& tmassTopQuark_<0) operator()(b,lepton,met); return tmassTopQuark_;
00076 }
00077
00078
00079 void CalculateHLT::operator()( const reco::Jet& bJet, reco::RecoCandidate* lepton, const reco::MET& met){
00080 double metT = sqrt(pow(met.px(),2) + pow(met.py(),2));
00081 double lepT = sqrt(pow(lepton->px(),2) + pow(lepton->py(),2));
00082 double bT = sqrt(pow(bJet.px(),2) + pow(bJet.py(),2));
00083 reco::Particle::LorentzVector WT = lepton->p4() + met.p4();
00084 cout<<"in calculate:\n\t"<<bJet.pt()<<"\t"<<lepton->pt()<<"\t"<<met.pt()<<endl;
00085 tmassWBoson_ = sqrt(pow(metT+lepT,2) - (WT.px()*WT.px()) - (WT.py()*WT.py()));
00086 reco::Particle::LorentzVector topT = WT + bJet.p4();
00087 tmassTopQuark_ = sqrt(pow((metT+lepT+bT),2) - (topT.px()*topT.px()) - (topT.py()*topT.py()));
00088 reco::Particle::LorentzVector lb = bJet.p4() + lepton->p4();
00089 mlb_ = lb.mass();
00090 }
00091
00092
00093 void
00094 CalculateHLT::operator()(const std::vector<reco::Jet>& jets)
00095 {
00096
00097 if(maxNJets_<0) maxNJets_=jets.size();
00098 failed_= jets.size()<(unsigned int) maxNJets_;
00099 if( failed_){ return; }
00100
00101
00102
00103 double maxPt=-1.;
00104 std::vector<int> maxPtIndices;
00105 maxPtIndices.push_back(-1);
00106 maxPtIndices.push_back(-1);
00107 maxPtIndices.push_back(-1);
00108 for(int idx=0; idx<maxNJets_; ++idx){
00109 for(int jdx=0; jdx<maxNJets_; ++jdx){ if(jdx<=idx) continue;
00110 for(int kdx=0; kdx<maxNJets_; ++kdx){ if(kdx==idx || kdx==jdx) continue;
00111 reco::Particle::LorentzVector sum = jets[idx].p4()+jets[jdx].p4()+jets[kdx].p4();
00112 if( maxPt<0. || maxPt<sum.pt() ){
00113 maxPt=sum.pt();
00114 maxPtIndices.clear();
00115 maxPtIndices.push_back(idx);
00116 maxPtIndices.push_back(jdx);
00117 maxPtIndices.push_back(kdx);
00118 }
00119 }
00120 }
00121 }
00122 massTopQuark_= (jets[maxPtIndices[0]].p4()+
00123 jets[maxPtIndices[1]].p4()+
00124 jets[maxPtIndices[2]].p4()).mass();
00125
00126
00127
00128 double wDist =-1.;
00129 std::vector<int> wMassIndices;
00130 wMassIndices.push_back(-1);
00131 wMassIndices.push_back(-1);
00132 for(unsigned idx=0; idx<maxPtIndices.size(); ++idx){
00133 for(unsigned jdx=0; jdx<maxPtIndices.size(); ++jdx){
00134 if( jdx==idx || maxPtIndices[idx]>maxPtIndices[jdx] ) continue;
00135 reco::Particle::LorentzVector sum = jets[maxPtIndices[idx]].p4()+jets[maxPtIndices[jdx]].p4();
00136 if( wDist<0. || wDist>fabs(sum.mass()-wMass_) ){
00137 wDist=fabs(sum.mass()-wMass_);
00138 wMassIndices.clear();
00139 wMassIndices.push_back(maxPtIndices[idx]);
00140 wMassIndices.push_back(maxPtIndices[jdx]);
00141 }
00142 }
00143 }
00144 massWBoson_= (jets[wMassIndices[0]].p4()+
00145 jets[wMassIndices[1]].p4()).mass();
00146 }
00147
00148
00149