106 std::vector<art::Ptr<recob::Cluster>> clusters =
collectClusters(event);
111 auto PFOs = std::make_unique<std::vector<recob::PFParticle>>();
113 = std::make_unique<art::Assns<recob::Cluster, recob::PFParticle>>();
121 art::PtrMaker<recob::PFParticle> ptrMaker(event);
123 unsigned int nDaughtersPerParticle = 2;
124 unsigned int nParticlesInTier = 1;
125 std::size_t firstPFOinThisTier = 0;
126 std::size_t firstPFOinNextTier = firstPFOinThisTier + nParticlesInTier;
127 std::size_t nextDaughter = firstPFOinNextTier;
128 std::vector<std::size_t> parents
130 for (
unsigned int i = 0; i < nPFOs; ++i) {
133 if (i >= firstPFOinNextTier) {
134 firstPFOinThisTier = firstPFOinNextTier;
136 nParticlesInTier *= nDaughtersPerParticle;
137 nDaughtersPerParticle += 1;
138 firstPFOinNextTier += nParticlesInTier;
144 std::vector<art::Ptr<recob::Cluster>> PFOclusters;
145 std::size_t iCluster = i;
146 while (iCluster < clusters.size()) {
147 PFOclusters.push_back(clusters[iCluster]);
154 std::size_t
const endDaughter
155 = std::min(nextDaughter + nDaughtersPerParticle, (std::size_t) nPFOs);
156 std::vector<std::size_t> daughters;
157 daughters.reserve(endDaughter - nextDaughter);
158 while (nextDaughter < endDaughter) {
159 parents[nextDaughter] = i;
160 daughters.push_back(nextDaughter);
174 auto const PFOptr = ptrMaker(i);
175 for (art::Ptr<recob::Cluster>
const&
cluster: PFOclusters) {
176 mf::LogVerbatim(
"AssnsChainPFParticleMaker")
177 <<
"Associating cluster " <<
cluster <<
" with PFO " << PFOptr;
178 clusterPFOassns->addSingle(
cluster, PFOptr);
183 mf::LogInfo(
"AssnsChainPFParticleMaker")
184 <<
"Created " << PFOs->size() <<
" particle flow objects with about "
186 <<
" clusters and " << clusterPFOassns->size() <<
" associations from "
189 event.put(std::move(PFOs));
190 event.put(std::move(clusterPFOassns));
std::vector< art::InputTag > clusterTags
List of cluster tags.
static constexpr size_t kPFParticlePrimary
Define index to signify primary particle.
unsigned int nClustersPerPFO
Maximum number of clusters per PFO.
std::vector< art::Ptr< recob::Cluster > > collectClusters(art::Event const &event) const
Returns a list of clusters to be combined.