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>>();
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);
177 <<
"Associating cluster " <<
cluster <<
" with PFO " << PFOptr;
178 clusterPFOassns->addSingle(
cluster, PFOptr);
184 <<
"Created " << PFOs->size() <<
" particle flow objects with about " 186 <<
" clusters and " << clusterPFOassns->size() <<
" associations from " std::vector< art::InputTag > clusterTags
List of cluster tags.
MaybeLogger_< ELseverityLevel::ELsev_info, true > LogVerbatim
static constexpr size_t kPFParticlePrimary
Define index to signify primary particle.
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
Cluster finding and building.
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.
T min(sqlite3 *const db, std::string const &table_name, std::string const &column_name)