59 Comment(
"collections of clusters to be combined")
63 Name(
"clustersPerPFO"),
64 Comment(
"number of clusters combined into each PFParticle"),
77 produces<std::vector<recob::PFParticle>>();
78 produces<art::Assns<recob::Cluster, recob::PFParticle>>();
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 " 196 std::vector<art::Ptr<recob::Cluster>>
201 std::vector<art::Ptr<recob::Cluster>> allClusters;
204 auto clusters =
event.getValidHandle<std::vector<recob::Cluster>>(
tag);
207 for (std::size_t i = 0; i < nClusters; ++i)
208 allClusters.emplace_back(
clusters, i);
std::vector< art::InputTag > clusterTags
List of cluster tags.
MaybeLogger_< ELseverityLevel::ELsev_info, true > LogVerbatim
std::size_t size() const noexcept
AssnsChainPFParticleMaker(Parameters const &config)
static constexpr size_t kPFParticlePrimary
Define index to signify primary particle.
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
EDProducer(fhicl::ParameterSet const &pset)
ChannelGroupService::Name Name
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.
#define DEFINE_ART_MODULE(klass)
fhicl::Sequence< art::InputTag > clusters
T min(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
LArSoft-specific namespace.
fhicl::Atom< unsigned int > clustersPerPFO
Creates some dummy PFParticles and associations to clusters.
Event finding and building.
virtual void produce(art::Event &event) override