Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include "CommonTools/CandUtils/interface/cloneDecayTree.h"
#include "DataFormats/Candidate/interface/CompositeCandidate.h"
using namespace std;
using namespace reco;

unique_ptr<Candidate> cloneDecayTree(const Candidate &c) {
  size_t n = c.numberOfDaughters();
  if (n == 1)
    return unique_ptr<Candidate>(c.clone());
  // pass a particle, not a candidate, to avoid cloning daughters
  const Candidate &p = c;
  auto cmp = std::make_unique<CompositeCandidate>(p);
  for (size_t i = 0; i < n; ++i)
    cmp->addDaughter(cloneDecayTree(*c.daughter(i)));
  return cmp;
}