18 #include <boost/ptr_container/ptr_vector.hpp>
19 #include <boost/foreach.hpp>
71 typedef std::vector<edm::ParameterSet> VPSet;
73 const VPSet& builders = pset.
getParameter<VPSet>(
"builders");
74 for (VPSet::const_iterator builderPSet = builders.begin();
75 builderPSet != builders.end(); ++builderPSet) {
77 const std::string& pluginType =
78 builderPSet->getParameter<std::string>(
"plugin");
79 const std::string& pluginName =
80 builderPSet->getParameter<std::string>(
"name");
85 pluginType, *builderPSet));
88 <<
"Exception when building a RecoTauBuilder plugin of type: "
89 << pluginType <<
" name: " << pluginName << std::endl;
94 const VPSet& modfiers = pset.
getParameter<VPSet>(
"modifiers");
95 for (VPSet::const_iterator modfierPSet = modfiers.begin();
96 modfierPSet != modfiers.end(); ++modfierPSet) {
98 const std::string& pluginType =
99 modfierPSet->getParameter<std::string>(
"plugin");
100 const std::string& pluginName =
101 modfierPSet->getParameter<std::string>(
"name");
106 pluginType, *modfierPSet));
109 <<
"Exception when building a RecoTauModifier plugin of type: "
110 << pluginType <<
" name: " << pluginName << std::endl;
116 if (pset.
exists(
"outputSelection")) {
118 if (selection !=
"") {
124 produces<reco::PFTauCollection>();
134 reco::tau::castView<reco::PFJetRefVector>(jetView);
145 for (BuilderList::iterator builder =
builders_.begin();
147 builder->setup(evt, es);
149 for (ModifierList::iterator modifier =
modifiers_.begin();
151 modifier->setup(evt, es);
161 if (jetRegionRef.
isNull()) {
163 <<
" found for the current jet: " << jetRef.
id();
166 std::vector<reco::PFCandidatePtr> jetCands = jetRef->getPFConstituents();
167 std::vector<reco::PFCandidatePtr> allRegionalCands =
168 jetRegionRef->getPFConstituents();
170 std::sort(jetCands.begin(), jetCands.end());
171 std::sort(allRegionalCands.begin(), allRegionalCands.end());
173 std::vector<reco::PFCandidatePtr> uniqueRegionalCands;
177 if (allRegionalCands.size() > jetCands.size())
178 uniqueRegionalCands.reserve(allRegionalCands.size() - jetCands.size());
181 std::set_difference(allRegionalCands.begin(), allRegionalCands.end(),
182 jetCands.begin(), jetCands.end(),
183 std::back_inserter(uniqueRegionalCands));
186 const std::vector<reco::RecoTauPiZero>& piZeros = (*piZeroAssoc)[jetRef];
188 unsigned int nTausBuilt = 0;
189 for (BuilderList::const_iterator builder =
builders_.begin();
193 (*builder)(jetRef, piZeros, uniqueRegionalCands));
195 std::for_each(taus.begin(), taus.end(),
199 output->reserve(output->size() + taus.size());
202 output->insert(output->end(), taus.begin(), taus.end());
203 nTausBuilt += taus.size();
209 output->push_back(tau);
218 reco::PFTau nullTau(std::numeric_limits<int>::quiet_NaN(), jetRef->p4());
220 output->push_back(nullTau);
225 for (reco::PFTauCollection::iterator
tau = output->begin();
226 tau != output->end(); ++
tau) {
227 for (ModifierList::const_iterator modifier =
modifiers_.begin();
T getParameter(std::string const &) const
boost::ptr_vector< Modifier > ModifierList
std::vector< PFTau > PFTauCollection
collection of PFTau objects
#define DEFINE_FWK_MODULE(type)
bool exists(std::string const ¶meterName) const
checks if a parameter exists
boost::ptr_vector< reco::PFTau > output_type
std::auto_ptr< StringCutObjectSelector< reco::PFTau > > outputSelector_
void setjetRef(const PFJetRef &)
bool isNull() const
Checks for null.
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
RecoTauProducer(const edm::ParameterSet &pset)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
reco::tau::RecoTauModifierPlugin Modifier
reco::tau::RecoTauBuilderPlugin Builder
ProductID id() const
Accessor for product ID.
edm::InputTag jetRegionSrc_
void produce(edm::Event &evt, const edm::EventSetup &es)
boost::ptr_vector< Builder > BuilderList
T get(const Candidate &c)