WireCell / wire-cell-toolkit

Toolkit for Liquid Argon TPC Simulation and Reconstruction
https://wirecell.github.io/
Other
7 stars 21 forks source link

Laundry list of decisions needed for WCP clustering / pattern recognition support #185

Open brettviren opened 2 years ago

brettviren commented 2 years ago

This issue is kind of more a "project". It is meant to capture various decisions we need to make for a number of things that WCT needs to accommodate the clustering and pattern recognition algorithms from WCP.

Check list of decisions:

Here are questions needing decisions. Let's check them off and add their answers. After each check list item are some requirements, comments and secondary questions. We will add lines giving the decisions as we make them.

Related

brettviren commented 2 years ago

nanoflann should work as a PC library.

It's a single header and the devs recommend simply copying that into a project which is something we do already for others.

The documentation is a little sparse but with the examples and ref docs its all good enough. We must supply a DatasetAdaptor to return number of points and an individual point given its index. This should let us easily share memory with a monolithic array that can even span all of the 3D and 3x 2D point clouds and which can include additional values beyond point info. This should work fine using ITensor (or perhaps better, ITensorSet) for the IData. There is also provided an adaptor to an Eigen matrix.

I think adopting nanoflann for operations and ITensor for storage resolves the first 4 items and strongly influences the 6th. I'll start a branch to begin some integration work with nanoflann.hpp placed in util include area and providing an "adaptor" that can work with boost::multiarray and thus with ITensor.