63 , taggingMode_ ( iConfig.getParameter<bool> (
"taggingMode") )
64 , ptMin_ ( iConfig.getParameter<double> (
"ptMin") )
65 , metSignifMin_ ( iConfig.getParameter<double> (
"MetSignifMin") )
66 , p1_ ( iConfig.getParameter<double> (
"p1") )
67 , p2_ ( iConfig.getParameter<double> (
"p2") )
68 , p3_ ( iConfig.getParameter<double> (
"p3") )
69 , debug_ ( iConfig.getParameter<bool> (
"debug") )
93 bool foundBadTrack =
false;
94 if (
debug_ )
cout <<
"starting loop over pfCandidates" << endl;
105 const double Pt = trackref->pt();
106 const double DPt = trackref->ptError();
107 if (Pt <
ptMin_)
continue;
108 if (
debug_ )
cout <<
"charged hadron track pT > " << Pt <<
" GeV - " <<
" dPt: " << DPt <<
" GeV - algorithm: " << trackref->algo() << std::endl;
110 const double P = trackref->p();
112 const unsigned int LostHits = trackref->numberOfLostHits();
116 const double MET_px =
pfMET->begin()->px();
117 const double MET_py =
pfMET->begin()->py();
118 const double MET_et =
pfMET->begin()->et();
119 const double MET_sumEt =
pfMET->begin()->sumEt();
120 const double hadron_px = cand.
px();
121 const double hadron_py = cand.
py();
122 if (MET_sumEt == 0)
continue;
123 const double MET_signif = MET_et/MET_sumEt;
124 const double MET_et_corr =
sqrt( (MET_px + hadron_px)*(MET_px + hadron_px) + (MET_py + hadron_py)*(MET_py + hadron_py) );
125 const double MET_signif_corr = MET_et_corr/MET_sumEt;
126 if (
debug_ )
std::cout <<
"MET signif before: " << MET_signif <<
" - after: " << MET_signif_corr <<
" - reduction factor: " << MET_signif/MET_signif_corr << endl;
130 foundBadTrack =
true;
133 cout << cand << endl;
134 cout <<
"charged hadron \t" <<
"track pT = " << Pt <<
" +/- " << DPt;
136 cout <<
"MET: " << MET_et <<
" MET phi: " <<
pfMET->begin()->phi()<<
137 " MET sumet: " << MET_sumEt <<
" MET significance: " << MET_et/MET_sumEt << endl;
138 cout <<
"MET_px: " << MET_px <<
" MET_py: " << MET_py <<
" hadron_px: " << hadron_px <<
" hadron_py: " << hadron_py << endl;
139 cout <<
"corrected: " <<
sqrt(
pow((MET_px + hadron_px),2) +
pow((MET_py + hadron_py),2)) << endl;
146 bool pass = !foundBadTrack;
148 iEvent.
put( std::auto_ptr<bool>(
new bool(pass)) );
virtual int pdgId() const
PDG identifier.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< reco::PFMETCollection > tokenPFMET_
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< reco::PFCandidateCollection > tokenPFCandidates_
std::vector< PFCandidatePtr > pfCandidates(const PFJet &jet, int particleId, bool sort=true)
reco::TrackRef trackRef() const
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Abs< T >::type abs(const T &t)
bool isNull() const
Checks for null.
ChargedHadronTrackResolutionFilter(const edm::ParameterSet &)
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
virtual bool filter(edm::StreamID iID, edm::Event &, const edm::EventSetup &) const override
virtual double px() const
x coordinate of momentum vector
Particle reconstructed by the particle flow algorithm.
const double metSignifMin_
~ChargedHadronTrackResolutionFilter()
virtual double py() const
y coordinate of momentum vector
Power< A, B >::type pow(const A &a, const B &b)