20 typedef std::pair<std::string, edm::InputTag>
NameTag;
30 for (std::vector<std::string>::const_iterator it = names.begin(), ed = names.end(); it != ed; ++it) {
35 throw cms::Exception(
"Configuration") <<
"PATTauProducer: id addTauID is true, you must specify:\n" 36 <<
"\tPSet tauIDSources = { \n" 37 <<
"\t\tInputTag <someName> = <someTag> // as many as you want \n " 40 tauIDSrcs_, [
this](
NameTag const&
tag) {
return mayConsume<pat::PATTauDiscriminator>(tag.second); });
42 produces<std::vector<pat::Tau> >();
49 auto outputTaus = std::make_unique<std::vector<pat::Tau> >();
50 outputTaus->reserve(inputTaus->size());
53 for (pat::TauCollection::const_iterator inputTau = inputTaus->begin(); inputTau != inputTaus->end();
54 ++inputTau, ++tau_idx) {
57 size_t nTauIds = inputTau->tauIDs().size();
58 std::vector<pat::Tau::IdPair> tauIds(nTauIds +
tauIDSrcs_.size());
60 for (
size_t i = 0;
i < nTauIds; ++
i) {
61 tauIds[
i] = inputTau->tauIDs().at(
i);
68 tauIds[nTauIds +
i].second = (*tauDiscr)[inputTauRef];
72 outputTaus->push_back(outputTau);
std::vector< edm::EDGetTokenT< pat::PATTauDiscriminator > > patTauIDTokens_
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< NameTag > tauIDSrcs_
void setTauIDs(const std::vector< IdPair > &ids)
const std::string names[nVars_]
~PATTauIDEmbedder() override
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
#define DEFINE_FWK_MODULE(type)
Analysis-level tau class.
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
PATTauIDEmbedder(const edm::ParameterSet &)
edm::EDGetTokenT< pat::TauCollection > src_
void produce(edm::Event &, const edm::EventSetup &) override
std::pair< std::string, edm::InputTag > NameTag