89 unsigned int ncand = cands->
size();
91 auto tab = std::make_unique<nanoaod::FlatTable>(ncand,
objName_,
false,
true);
110 std::vector<int>
key(ncand, -1), flav(ncand, 0);
111 for (
unsigned int i = 0;
i < ncand; ++
i) {
118 matchVisTau = (*mapVisTau)[cands->
ptrAt(
i)];
121 matchDressedLep = (*mapDressedLep)[cands->
ptrAt(
i)];
123 hasTauAnc = (*mapTauAnc)[matchDressedLep];
134 if (match->isPromptFinalState())
136 else if (match->isDirectPromptTauDecayProductFinalState())
142 if (match->isPromptFinalState())
143 flav[
i] = (match->pdgId() == 22 ? 22 : 1);
144 else if (match->isDirectPromptTauDecayProductFinalState())
151 if (matchDressedLep->pdgId() == 22)
158 for (
auto& consti : matchDressedLep->getGenConstituents()) {
159 if (
abs(consti->pdgId()) != 11)
161 if (consti->pt() <
minpt)
163 minpt = consti->
pt();
164 highestPtConstituent = consti;
166 if (highestPtConstituent) {
168 std::find_if(genParts->begin(), genParts->end(), [highestPtConstituent](
reco::GenParticle genp) {
169 return (
abs(genp.pdgId()) == 11) && (
deltaR(genp, *highestPtConstituent) < 0.01) &&
170 (
abs(genp.pt() - highestPtConstituent->
pt()) / highestPtConstituent->
pt() < 0.01);
172 if (iter != genParts->end()) {
173 key[
i] = iter - genParts->begin();
178 else if (match->isPromptFinalState())
179 flav[
i] = (match->pdgId() == 22 ? 22 : 1);
180 else if (match->isDirectPromptTauDecayProductFinalState())
186 if (match->isPromptFinalState() && match->pdgId() == 22)
188 else if ((match->isPromptFinalState() || match->isDirectPromptTauDecayProductFinalState()) &&
189 abs(match->pdgId()) == 11)
194 if (match.
isNonnull() && match->statusFlags().isPrompt() &&
abs(match->pdgId()) == 11)
196 else if (match.
isNonnull() && match->statusFlags().isPrompt() &&
abs(match->pdgId()) == 13)
198 else if (match.
isNonnull() && match->isDirectPromptTauDecayProductFinalState() &&
abs(match->pdgId()) == 11)
200 else if (match.
isNonnull() && match->isDirectPromptTauDecayProductFinalState() &&
abs(match->pdgId()) == 13)
206 flav[
i] = match->statusFlags().fromHardProcess();
214 tab->addColumn<uint8_t>(branchName_ +
"Flav",
216 "Flavour of genParticle (DressedLeptons for electrons) for " + doc_ +
": " +
flavDoc_,
220 tab->addColumn<uint8_t>(branchName_ +
"Flav",
222 "Flavour of genParticle for " + doc_ +
": " +
flavDoc_,
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool isNonnull() const
Checks for non-null.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Ptr< value_type > ptrAt(size_type i) const
enum CandMCMatchTableProducer::MatchType type_
double pt() const final
transverse momentum
const std::string branchName_
const std::string objName_
key_type key() const
Accessor for product key.
edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > candMapVisTau_
edm::EDGetTokenT< reco::GenParticleCollection > genPartsToken_
Abs< T >::type abs(const T &t)
const edm::EDGetTokenT< reco::CandidateView > src_
static int getParentHadronFlag(const reco::GenParticleRef match)
const edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > candMap_
edm::EDGetTokenT< edm::ValueMap< bool > > mapTauAnc_
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
edm::EDGetTokenT< edm::Association< reco::GenJetCollection > > candMapDressedLep_