6 : distMax_(iConfig.getParameter<double>(
"distMax")),
10 fixDaughters_(iConfig.getParameter<
bool>(
"fixDaughters")) {
14 pf2pc_ = consumes<edm::Association<pat::PackedCandidateCollection>>(
16 pc2pf_ = consumes<edm::Association<reco::PFCandidateCollection>>(
20 produces<std::vector<pat::Jet>>();
27 auto outputs = std::make_unique<std::vector<pat::Jet>>();
30 std::vector<edm::Handle<edm::View<pat::Jet>>> algoHandles;
46 for (
auto const& ijet : *jetHandle) {
50 unsigned int index = 0;
52 for (
auto const& ialgoHandle : algoHandles) {
53 std::vector<edm::Ptr<pat::Jet>> nextSubjets;
55 for (
auto const& jjet : *ialgoHandle) {
57 for (
auto const& userfloatstr : jjet.userFloatNames()) {
58 outputs->back().addUserFloat(userfloatstr, jjet.userFloat(userfloatstr));
60 for (
auto const& userintstr : jjet.userIntNames()) {
61 outputs->back().addUserInt(userintstr, jjet.userInt(userintstr));
63 for (
auto const& usercandstr : jjet.userCandNames()) {
64 outputs->back().addUserCand(usercandstr, jjet.userCand(usercandstr));
66 for (
size_t ida = 0; ida < jjet.numberOfDaughters(); ++ida) {
79 std::vector<reco::CandidatePtr> daughtersInSubjets;
80 std::vector<reco::CandidatePtr> daughtersNew;
81 const std::vector<reco::CandidatePtr>& jdausPF =
outputs->back().daughterPtrVector();
82 std::vector<reco::CandidatePtr> jdaus;
83 jdaus.reserve(jdausPF.size());
85 for (
auto const& jdau : jdausPF) {
90 const std::vector<reco::CandidatePtr>& sjdaus = subjet->daughterPtrVector();
92 bool skipSubjet =
false;
94 if (
std::find(jdaus.begin(), jdaus.end(), dau) == jdaus.end()) {
102 daughtersInSubjets.insert(daughtersInSubjets.end(), sjdaus.begin(), sjdaus.end());
106 if (
std::find(daughtersInSubjets.begin(), daughtersInSubjets.end(), dau) == daughtersInSubjets.end()) {
107 daughtersNew.push_back(dau);
110 outputs->back().clearDaughters();
111 for (
const auto& dau : daughtersNew)
112 outputs->back().addDaughter(dau);