Cluster Shadow
(top) (pkg)

Table of Contents

1. Introduction

In the context of the ClusterShadow API, the unqualifed term cluster is short for geometric cluster (GC). A set of GCs is represented by a blob connectivity graph with vertices representing blobs and edges representing some type of connection. A connection is usually based on spatial nearness between the blob pair as determined by some metric which is defined over the longitudinal and transverse drift dimensions. The subgraph consisting of just b-b edges from an ICluster graph produced by the BlobClustering component in the img sub-package is one example of a GC.

A blob shadow (BS) is an overlap between two blobs in a given tomographic view (wire plane). The set of blob shadows for a set of blobs and over all views is represented as a blob shadow graph. See the presentation on Blob Shadows for more info on blob shadows.

A cluster shadow (CS) then represents the combination of these two relationships. A CS is formed from a b-b GC graph and a b-b BS graph and represented by a g-g graph (“g” for “geometric”). A vertex in the CS graph represents one connected component of the b-nodes from the original GC graph. The vertex object holds summary information about the cluster in the form of per-view “coverage” of the 2D time vs channel/wire index space. The g-g edges of a CS graph represent that the two clusters have some non-zero shadow (via their blobs). Each edge carries the WirePlaneId from which a view index may be derived. Note, a cluster may posses a self-shadow and this is represented by a loop/buckle edge connecting its vertex to itself.

2. Implementation

The main method of the ClusterShadow API produces a CS graph and a connected component property map. The vertex descriptor of the CS graph is merely the component index. Edges provide measures of the shadow.

2.1. Constructing

#include "WireCellAux/ClusterShadow.h"

using namespace WireCell;
using namespace WireCell::Aux;

cluster_graph_t& cgraph = ...;
BlobShadow::graph_t bsgraph = BlobShadow::shadow(cgraph, 'w'); // or 'c'

ClusterShadow::blob_cluster_map_t clusters;
auto cs_graph = ClusterShadow::shadow(cgraph, bsgraph, clusters);

If you don’t care about the blob content of clusters you may call ClusterShadow::shadow(csgraph,bsgraph).

2.2. Using

Each CS graph vertex has one Rectangles object for each view. You may iterate on the edges of the CS graph, retrieve the vertex object for each edge endpoint and then perform pair-wise set-theoretic operations on the Rectangles object from each.

Examples and/or pointers to tests t.b.d.

Author: Brett Viren

Created: 2023-05-03 Wed 11:39

Validate