15 bool operator()(
const T& t1,
const T& t2)
const {
26 bool operator()(
const T& t1,
const T& t2)
const {
27 return t1->pt() > t2->pt();
32 class MultiTrackDRFilter {
34 MultiTrackDRFilter(
double deltaR,
const std::vector<reco::PFCandidatePtr>& trks)
37 bool operator()(
const T&
t)
const {
38 for(
auto const& trk :
tracks_) {
46 const std::vector<reco::PFCandidatePtr>&
tracks_;
49 double square(
double x) {
return x*x; }
52 std::vector<reco::PFCandidatePtr> convertRefCollection(
const T&
coll) {
53 std::vector<reco::PFCandidatePtr>
output;
54 output.reserve(coll.size());
55 for(
auto const&
cand : coll) {
56 output.push_back(
cand);
77 typedef std::list<reco::PFCandidatePtr> PFCandList;
83 std::back_inserter(output.
h0s));
85 std::vector<PFCandList*> courses;
86 courses.push_back(&(output.
h0s));
87 courses.push_back(&(output.
gammas));
90 double trackerEnergy =
track->energy();
91 double linkedEcalEnergy =
track->ecalEnergy();
92 double linkedHcalEnergy =
track->hcalEnergy();
95 double linkedSumErrSquared = 0;
96 linkedSumErrSquared +=
square(
97 resolutions_->getEnergyResolutionEm(linkedEcalEnergy, posAtCalo.eta()));
98 linkedSumErrSquared +=
square(
100 linkedHcalEnergy, posAtCalo.eta(), posAtCalo.phi()));
103 double energyDelta = linkedEcalEnergy + linkedHcalEnergy - trackerEnergy;
109 for(
auto* course : courses) {
111 course->sort(sorter);
112 PFCandList::iterator toEatIter = course->begin();
115 while (toEatIter != course->end()) {
117 double toEatEnergy = toEat.
energy();
122 linkedSumErrSquared + toEatErrorSq) <
maxSigmas_ ) {
123 energyDelta += toEatEnergy;
124 linkedSumErrSquared += toEatErrorSq;
125 toEatIter = course->erase(toEatIter);
138 std::remove_if(output.
h0s.begin(), output.
h0s.end(), hcalFinalFilter);
std::list< reco::PFCandidatePtr > h0s
T getParameter(std::string const &) const
double eta() const final
momentum pseudorapidity
const std::vector< reco::PFCandidatePtr > & tracks_
const reco::Candidate::LorentzVector axis_
double resolution(const reco::PFCandidate &cand) const
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< float > > XYZPointF
point in space with cartesian internal representation
const math::XYZPointF & positionAtECALEntrance() const
const std::vector< reco::PFCandidatePtr > & isolationPFGammaCands() const
Gamma candidates in isolation region.
RecoTauIsolationMasking(const edm::ParameterSet &pset)
double energy() const final
energy
bool inCone(const reco::PFCandidate &track, const reco::PFCandidate &cand) const
const LorentzVector & p4() const final
four-momentum Lorentz vector
const std::vector< reco::PFCandidatePtr > & isolationPFNeutrHadrCands() const
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
static double square(double x)
std::list< reco::PFCandidatePtr > gammas
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Particle reconstructed by the particle flow algorithm.
virtual ParticleType particleId() const
~RecoTauIsolationMasking()
double phi() const final
momentum azimuthal angle
std::unique_ptr< PFEnergyResolution > resolutions_
const std::vector< reco::PFCandidatePtr > & signalPFChargedHadrCands() const
Charged hadrons in signal region.
IsoMaskResult mask(const reco::PFTau &) const
Return a new isolation collections with masking applied.