13 namespace reco {
namespace tau {
20 const std::vector<RecoTauPiZero>& piZeros)
const;
36 qcuts_(pset.getParameter<edm::
ParameterSet>(
"qualityCuts")),
37 usePFLeptonsAsChargedHadrons_(pset.getParameter<bool>(
"usePFLeptons")),
38 isolationConeSize_(pset.getParameter<double>(
"isolationConeSize")) {
39 typedef std::vector<edm::ParameterSet> VPSet;
40 const VPSet& decayModes = pset.
getParameter<VPSet>(
"decayModes");
41 for (VPSet::const_iterator dm = decayModes.begin();
42 dm != decayModes.end(); ++dm) {
44 info.
nCharged_ = dm->getParameter<uint32_t>(
"nCharged");
45 info.
nPiZeros_ = dm->getParameter<uint32_t>(
"nPiZeros");
46 info.
maxPFCHs_ = dm->getParameter<uint32_t>(
"maxTracks");
47 info.
maxPiZeros_ = dm->getParameter<uint32_t>(
"maxPiZeros");
55 const std::vector<RecoTauPiZero>& piZeros)
const {
56 typedef std::vector<PFCandidatePtr>
PFCandPtrs;
57 typedef std::vector<RecoTauPiZero> PiZeroList;
80 for (std::vector<decayModeInfo>::const_iterator
84 size_t piZerosToBuild = decayMode->nPiZeros_;
86 size_t tracksToBuild = decayMode->nCharged_;
89 if (pfchs.size() < tracksToBuild || piZeros.size() < piZerosToBuild)
93 PFCandPtrs::iterator pfch_begin = pfchs.begin();
94 PFCandPtrs::iterator pfch_end = pfchs.end();
95 pfch_end =
takeNElements(pfch_begin, pfch_end, decayMode->maxPFCHs_);
99 PFCombo trackCombos(pfch_begin, pfch_end, tracksToBuild);
102 PiZeroList::const_iterator piZero_begin = piZeros.begin();
103 PiZeroList::const_iterator piZero_end = piZeros.end();
105 decayMode->maxPiZeros_);
109 PiZeroCombo piZeroCombos(piZero_begin, piZero_end, piZerosToBuild);
116 for (PFCombo::iterator trackCombo = trackCombos.begin();
117 trackCombo != trackCombos.end(); ++trackCombo) {
119 for (PiZeroCombo::iterator piZeroCombo = piZeroCombos.begin();
120 piZeroCombo != piZeroCombos.end(); ++piZeroCombo) {
138 (piZeros.size() - piZerosToBuild)*2);
140 (piZeros.size() - piZerosToBuild));
146 trackCombo->combo_begin(), trackCombo->combo_end()
153 piZeroCombo->combo_begin(), piZeroCombo->combo_end()
158 using namespace reco::tau::cone;
168 boost::make_filter_iterator(
170 trackCombo->remainder_begin(), trackCombo->remainder_end()),
171 boost::make_filter_iterator(
173 trackCombo->remainder_end(), trackCombo->remainder_end())
180 boost::make_filter_iterator(
182 pfch_end, pfchs.end()),
183 boost::make_filter_iterator(
185 pfchs.end(), pfchs.end())
191 boost::make_filter_iterator(
193 pfnhs.begin(), pfnhs.end()),
194 boost::make_filter_iterator(
196 pfnhs.end(), pfnhs.end())
201 boost::make_filter_iterator(
202 isolationConeFilterPiZero,
203 piZeroCombo->remainder_begin(), piZeroCombo->remainder_end()),
204 boost::make_filter_iterator(
205 isolationConeFilterPiZero,
206 piZeroCombo->remainder_end(), piZeroCombo->remainder_end())
211 boost::make_filter_iterator(
212 isolationConeFilterPiZero,
213 piZero_end, piZeros.end()),
214 boost::make_filter_iterator(
215 isolationConeFilterPiZero,
216 piZeros.end(), piZeros.end())
219 output.push_back(tau.
get(
true));
223 return output.release();
230 "RecoTauBuilderCombinatoricPlugin");
T getParameter(std::string const &) const
const edm::Handle< PFCandidateCollection > & getPFCands() const
Hack to be able to convert Ptrs to Refs.
InputIterator takeNElements(const InputIterator &begin, const InputIterator &end, size_t N)
std::auto_ptr< reco::PFTau > get(bool setupLeadingCandidates=true)
void reserve(Region region, ParticleType type, size_t size)
Reserve a set amount of space for a given RefVector.
void addPiZeros(Region region, InputIterator begin, InputIterator end)
Add a list of pi zeros to the input collection.
std::vector< reco::PFCandidatePtr > PFCandPtrs
boost::ptr_vector< reco::PFTau > output_type
std::auto_ptr< output_type > return_type
virtual ~RecoTauBuilderCombinatoricPlugin()
std::vector< PFCandidatePtr > pfCandidates(const PFJet &jet, int particleId, bool sort=true)
std::vector< decayModeInfo > decayModesToBuild_
void setPV(const reco::VertexRef &vtx) const
Update the primary vertex.
bool usePFLeptonsAsChargedHadrons_
virtual return_type operator()(const reco::PFJetRef &jet, const std::vector< RecoTauPiZero > &piZeros) const
Coll filterRefs(const Coll &refcoll) const
Filter a ref vector of PFCandidates.
const reco::Candidate::LorentzVector & p4() const
RecoTauQualityCuts qcuts_
void reservePiZero(Region region, size_t size)
Reserve a set amount of space for the PiZeros.
std::vector< PFCandidatePtr > pfChargedCands(const PFJet &jet, bool sort=true)
Extract all non-neutral candidates from a PFJet.
RecoTauBuilderCombinatoricPlugin(const edm::ParameterSet &pset)
void addPFCands(Region region, ParticleType type, InputIterator begin, InputIterator end)
#define DEFINE_EDM_PLUGIN(factory, type, name)
double isolationConeSize_
const reco::VertexRef & primaryVertex() const
Get primary vertex associated to this event.