pkgs/HoughTransform (NOvA offline)¶
First step to finding global vertices via hough tranform algorithmic techniques.
- Input: 3D
nova -c (multi)houghtjob.fcl -s <sourcefile>.root
For the "official" tech note, see docDB #8241.
This will only be a description of the MultiHough-Transform package. It takes in the hits & slices and puts into the event a "HoughResults" object for each slice and for each view (except the noise slice which is of course skipped.) The HoughResults is basically a list of lines drawn through the major collections of hits (for details, see the description of HoughResluts in recobase.)
The MultiHough-Transform (MHT) works off of a modified 2-point type Hough transform. Given a set of hits in 2D, MHT loops over every PAIR of points, calculates the line that passes through those two points, and then casts a gaussian smeared vote in (r,theta) parameter space for this pair. This 2D histogram of (r,theta) parameter space is called the "Hough map." Once the Hough map has been created the first time, it is smoothed and a threshold value is calculated as the average bin height for the entire Hough map. This threshold is then used later to determine when to stop making Hough maps (explained further below.)
The tallest peak in the Hough Map is then considered to be a valid line, which is then added to the list of "peaks" in the HoughResults object. The list of all hits is then looped over and every hit that falls within 6 cm of the line are effectively removed by setting their weights to zero. The Hough map is then re-made to find the next line and the points associated with that line are removed in the same fashion. We continue to loop of the list of hits like this until either a Hough map is made in which the tallest peak is below the threshold calculated at the beginning, or a maximum number of iterations is reached (which is controlled in the .fcl file as MHLoops and defaults to 10.)
Please also see docDB 6519, 6578, and 6884 for more information.