14 #include <boost/ptr_container/ptr_vector.hpp> 15 #include <boost/ptr_container/ptr_list.hpp> 47 void print(
const std::vector<reco::RecoTauPiZero>& piZeros,
65 std::auto_ptr<StringCutObjectSelector<reco::RecoTauPiZero> >
83 typedef std::vector<edm::ParameterSet>
VPSet;
90 for (VPSet::const_iterator builderPSet = builders.begin();
91 builderPSet != builders.end(); ++builderPSet) {
97 pluginType, *builderPSet, consumesCollector()));
101 const VPSet& rankers = pset.
getParameter<VPSet>(
"ranking");
102 for (VPSet::const_iterator rankerPSet = rankers.begin();
103 rankerPSet != rankers.end(); ++rankerPSet) {
107 pluginType, *rankerPSet));
114 if (pset.
exists(
"outputSelection")) {
116 if (!selection.empty()) {
125 produces<reco::JetPiZeroAssociation>();
136 builder.setup(evt, es);
141 reco::tau::castView<reco::PFJetRefVector>(jetView);
143 std::unique_ptr<reco::JetPiZeroAssociation>
association;
145 if (!jetRefs.
empty()) {
147 evt.
get(jetRefs.
id(), pfJetCollectionHandle);
148 association = std::make_unique<reco::JetPiZeroAssociation>(
reco::PFJetRefProd(pfJetCollectionHandle));
150 association = std::make_unique<reco::JetPiZeroAssociation>();
154 for(
auto const&
jet : jetRefs) {
162 for(
auto const& builder : builders_) {
165 dirtyPiZeros.transfer(dirtyPiZeros.end(),
result);
168 <<
"Exception caught in builder plugin " << builder.name()
169 <<
", rethrowing" << std::endl;
177 std::vector<reco::RecoTauPiZero> cleanPiZeros;
178 std::set<reco::CandidatePtr> photonsInCleanCollection;
179 while (!dirtyPiZeros.empty()) {
181 std::auto_ptr<reco::RecoTauPiZero>
toAdd(
182 dirtyPiZeros.pop_front().release());
188 std::vector<reco::CandidatePtr> uniqueGammas;
189 std::set_difference(
toAdd->daughterPtrVector().begin(),
190 toAdd->daughterPtrVector().end(),
191 photonsInCleanCollection.begin(),
192 photonsInCleanCollection.end(),
193 std::back_inserter(uniqueGammas));
196 if (uniqueGammas.empty()) {
198 }
else if (uniqueGammas.size() ==
toAdd->daughterPtrVector().size()) {
201 photonsInCleanCollection.insert(
toAdd->daughterPtrVector().begin(),
202 toAdd->daughterPtrVector().end());
203 cleanPiZeros.push_back(*
toAdd);
207 toAdd->clearDaughters();
209 for(
auto const&
gamma : uniqueGammas) {
216 PiZeroList::iterator insertionPoint = std::lower_bound(
218 dirtyPiZeros.insert(insertionPoint,
toAdd);
223 for(
auto& cleanPiZero: cleanPiZeros )
230 association->setValue(
jet.key(), cleanPiZeros);
237 const std::vector<reco::RecoTauPiZero>& piZeros, std::ostream&
out) {
238 const unsigned int width = 25;
239 for(
auto const& piZero : piZeros) {
241 out <<
"* Rankers:" << std::endl;
242 for (rankerList::const_iterator ranker =
rankers_.begin();
243 ranker !=
rankers_.end(); ++ranker) {
244 out <<
"* " << std::setiosflags(std::ios::left)
245 << std::setw(width) << ranker->name()
246 <<
" " << std::resetiosflags(std::ios::left)
247 << std::setprecision(3) << (*ranker)(piZero);
T getParameter(std::string const &) const
void produce(edm::Event &evt, const edm::EventSetup &es) override
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
def create(alignables, pedeDump, additionalData, outputFile, config)
edm::EDGetTokenT< reco::CandidateView > cand_token
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
reco::tau::RecoTauPiZeroQualityPlugin Ranker
bool exists(std::string const ¶meterName) const
checks if a parameter exists
RecoTauPiZeroProducer(const edm::ParameterSet &pset)
reco::tau::RecoTauLexicographicalRanking< rankerList, reco::RecoTauPiZero > PiZeroPredicate
bool empty() const
Is the RefVector empty.
void print(const std::vector< reco::RecoTauPiZero > &piZeros, std::ostream &out)
reco::tau::RecoTauPiZeroBuilderPlugin Builder
ProductID id() const
Accessor for product ID.
Abs< T >::type abs(const T &t)
bool get(ProductID const &oid, Handle< PROD > &result) const
edm::RefProd< PFJetCollection > PFJetRefProd
boost::ptr_vector< reco::RecoTauPiZero > PiZeroVector
boost::ptr_vector< Builder > builderList
boost::ptr_list< reco::RecoTauPiZero > PiZeroList
boost::ptr_vector< Ranker > rankerList
void set(reco::Candidate &c) const
set up a candidate
std::auto_ptr< StringCutObjectSelector< reco::RecoTauPiZero > > outputSelector_
~RecoTauPiZeroProducer() override
T get(const Candidate &c)
std::auto_ptr< PiZeroPredicate > predicate_