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;
96 for (
unsigned i=0;
i<pfCandidates->size(); ++
i ) {
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::make_unique<bool>(pass));
int pdgId() const final
PDG identifier.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< reco::PFMETCollection > tokenPFMET_
double px() const final
x coordinate of momentum vector
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::EDGetTokenT< reco::PFCandidateCollection > tokenPFCandidates_
reco::TrackRef trackRef() const
#define DEFINE_FWK_MODULE(type)
Abs< T >::type abs(const T &t)
bool isNull() const
Checks for null.
ChargedHadronTrackResolutionFilter(const edm::ParameterSet &)
bool filter(edm::StreamID iID, edm::Event &, const edm::EventSetup &) const override
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
double py() const final
y coordinate of momentum vector
std::pair< OmniClusterRef, TrackingParticleRef > P
Particle reconstructed by the particle flow algorithm.
~ChargedHadronTrackResolutionFilter() override
const double metSignifMin_
Power< A, B >::type pow(const A &a, const B &b)