Skip to content

Commit 2ea8db3

Browse files
refactor(alert): move AHDC track-finding from AHDCEngine to ALERTEngine (#1242)
* refactor(alert): move AHDC track-finding from AHDCEngine to ALERTEngine AHDCEngine now only reads AHDC::adc, applies calibration via HitReader, and writes AHDC::hits. The full track-finding pipeline (preclustering, AI/CV_Distance/CV_Hough finder, DOCA refinement, helix fit) runs in ALERTEngine on top of AHDC::hits + ATOF::hits/clusters, alongside the existing projection / matching / prePID / Kalman steps. The track finder is selected via the ALERT.Mode YAML key (was AHDC.Mode); ModelTrackFinding only loads when AI_Track_Finding is selected. The ATOF::tdc gate now fires after the AHDC pipeline so events without ATOF still get their AHDC::* banks, matching the pre-refactor behavior. * refactor(ahdc): unify track finders behind a TrackFinder strategy interface Introduce TrackFinder { findTracks(hits) -> TrackFinderResult } with three implementations — AITrackFinder, DistanceTrackFinder, HoughTrackFinder — each owning its own preclustering, cluster building, and mode-specific logic. AITrackFinder owns ModelTrackFinding, the MAX_HITS_FOR_AI Distance fallback, and the greedy non-overlap selection; the "too many candidates" exit becomes TrackFinderResult.invalid() instead of a return-false from processDataEvent. ALERTEngine becomes a thin dispatcher: init() picks the strategy from ALERT.Mode via a switch, and processDataEvent calls findTracks(hits) once. Output is byte-identical to the prior refactor (same 9/999 sum_adc/dEdx precision drift, no new mismatches). * test(ahdc): AHDCTest should test hits-only AHDCEngine * feat(track-finding): add GNN track finder Introduce GNN_Track_Finding as a fourth track-finding mode alongside the renamed MLP_Track_Finding (was AI_Track_Finding), CV_Distance, and CV_Hough. The new path runs a GravNet edge scorer (TorchScript via DJL) on a per-event AHDC + ATOF hit graph, extracts tracks as connected components on edges with sigmoid score >= 0.1, then re-preclusters each surviving track's AHDC hits and pairs them into per-superlayer Clusters so the existing DOCA refinement + helix fit + Kalman stages consume them unchanged. Selected via ALERT.Mode in YAML. MLP regression is bit-identical (same pre-existing AHDC::track sum_adc/ dEdx precision drift); only COAT::config changes, reflecting the renamed mode. * fix(alert): unify DatabaseConstantProvider usage and improve track matching prediction handling * refactor(alert): split Track into TrackCandidate (finder output) and Track (fit result) The AHDC track finders produced org.jlab.rec.ahdc.Track.Track, and the helix fit + Kalman filter then mutated that same object in place. One class was doing two jobs: a track-finder output (hits + clusters) and a fit result (vertex, momentum, chi2). A "Track" should mean the result of track fitting. Split the conflated class into two: - TrackCandidate: the track-finder output. Owns hits, clusters, and interclusters. Carries a CandidateType (AHDC_ONLY / AHDC_ATOF, plus a reserved AHDC_VERTEX) describing its specialization; the type is what will dictate how the candidate is fitted. The two old Track constructors (from Clusters, from Hits) move here. - Track: the fit result, produced by fitting a TrackCandidate. Composes the candidate it was fitted from and adds the fitted vertex, momentum, chi2, path, dEdx, p_drift, sum_residuals. It stays a full facade: every accessor the old Track exposed still works, and the candidate-side ones are delegated to the underlying TrackCandidate. All four finders (MLP / Distance / Hough / GNN) plus Distance and HoughTransform now produce TrackCandidate; TrackFinderResult wraps List<TrackCandidate>. ALERTEngine's fit stage turns each candidate into a Track, with a switch (CandidateType) dispatch seam. * refactor(alert): rename AHDC Cluster/ClusterFinder -> AHDCCluster/AHDCClusterFinder * refactor(alert): rename enum ModeTrackFinding -> TrackFindingMode * refactor(alert): rename MLP_Track_Finding/GNN_Track_Finding -> AI_MLP/AI_GNN, document modes * docs(alert): document ALERTEngine YAML config, default Mode to AI_GNN Add a YAML-config section to the ALERTEngine class javadoc listing every key the engine reads (currently just Mode) together with the valid values of TrackFindingMode. Flip the default track-finding mode from AI_MLP to AI_GNN: GNN is now the default. * refactor(alert): pass ATOF hits to TrackFinder as List<AtofHitStub>, not DataBank ove bank I/O to the ALERTEngine boundary: - TrackFinder.findTracks now takes List<AtofHitStub>. The interface speaks pure domain types; the ATOF-blind finders simply ignore it. - GNNPrediction / GNNGraphBuilder accept the list directly and iterate it instead of reading from the bank. Verified byte-identical end-to-end: recon_output on clas_021903.evio.00000 (config_p0v9.local.yaml, AI_MLP, 1000 events) is unchanged vs development AHDC::track has the same pre-existing 9/999 sum_adc/dEdx precision drift * refactor(alert): move ALERT-level track finding from rec.ahdc to rec.alert The TrackFinding strategy, the Track/TrackCandidate value types, and the AI/* models live in rec.ahdc today, but they are ALERT-level orchestration across AHDC and ATOF (GNN literally builds a joint AHDC+ATOF graph). They belong in rec.alert.* alongside the existing rec.alert.TrackMatchingAI, rec.alert.AIPID, rec.alert.banks, rec.alert.projections. * docs(alert): update documentation for DJL usage in ModelTrackFindingGNN * docs(alert): add source reference for SeedExtendTrackExtractor
1 parent 0c709fa commit 2ea8db3

34 files changed

Lines changed: 1506 additions & 467 deletions

reconstruction/alert/src/main/java/org/jlab/rec/ahdc/Cluster/Cluster.java renamed to reconstruction/alert/src/main/java/org/jlab/rec/ahdc/AHDCCluster/AHDCCluster.java

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.jlab.rec.ahdc.Cluster;
1+
package org.jlab.rec.ahdc.AHDCCluster;
22

33
import org.jlab.rec.ahdc.Hit.Hit;
44
import org.jlab.rec.ahdc.PreCluster.PreCluster;
@@ -9,9 +9,9 @@
99
import org.jlab.geom.prim.Point3D;
1010

1111
/**
12-
* Cluster are compose by 2 PreCluster on layer with a different stereo angle
12+
* AHDCCluster are compose by 2 PreCluster on layer with a different stereo angle
1313
*/
14-
public class Cluster {
14+
public class AHDCCluster {
1515

1616
private int _trackId = -1;
1717
private double _Radius;
@@ -50,7 +50,7 @@ private static double stereoTwistFromLine(Line3D line) {
5050

5151
return wrapPi(phi1 - phi0);
5252
}
53-
public Cluster(PreCluster precluster, PreCluster other_precluster) {
53+
public AHDCCluster(PreCluster precluster, PreCluster other_precluster) {
5454
this._PreClusters_list = new ArrayList<>();
5555
_PreClusters_list.add(precluster);
5656
_PreClusters_list.add(other_precluster);
@@ -80,15 +80,44 @@ public Cluster(PreCluster precluster, PreCluster other_precluster) {
8080
this._V = this._Y / (this._X * this._X + this._Y * this._Y);
8181
}
8282

83-
public Cluster(double X, double Y, double Z) {
83+
public AHDCCluster(double X, double Y, double Z) {
8484
this._X = X;
8585
this._Y = Y;
8686
this._Z = Z;
8787
}
8888

89+
/** Build an AHDCCluster from a single PreCluster (one layer of a superlayer).
90+
* Used by the GNN path when a track covers a superlayer on only one
91+
* stereo layer — no stereo pair is available, so Z is taken from the
92+
* average wire-midpoint z of the PreCluster's hits rather than from a
93+
* stereo-angle computation. DocaClusterRefiner falls back to a degenerate
94+
* DocaCluster when {@code get_PreClusters_list().size() != 2}, so
95+
* downstream is unaffected. */
96+
public AHDCCluster(PreCluster precluster) {
97+
this._PreClusters_list = new ArrayList<>();
98+
_PreClusters_list.add(precluster);
99+
this._Radius = precluster.get_Radius();
100+
this._Phi = precluster.get_Phi();
101+
this._X = precluster.get_X();
102+
this._Y = precluster.get_Y();
103+
this._Num_wire = (int) precluster.get_Num_wire();
104+
double r2 = this._X * this._X + this._Y * this._Y;
105+
if (r2 > 0.0) {
106+
this._U = this._X / r2;
107+
this._V = this._Y / r2;
108+
}
109+
double zSum = 0.0;
110+
int zCount = 0;
111+
for (Hit h : precluster.get_hits_list()) {
112+
Line3D line = h.getLine();
113+
if (line != null) { zSum += line.midpoint().z(); zCount++; }
114+
}
115+
this._Z = (zCount > 0) ? zSum / zCount : 0.0;
116+
}
117+
89118
@Override
90119
public String toString() {
91-
return "Cluster{" + "_X=" + _X + ", _Y=" + _Y + ", _Z=" + _Z + '}';
120+
return "AHDCCluster{" + "_X=" + _X + ", _Y=" + _Y + ", _Z=" + _Z + '}';
92121
}
93122

94123
public ArrayList<PreCluster> get_PreClusters_list() {

reconstruction/alert/src/main/java/org/jlab/rec/ahdc/Cluster/ClusterFinder.java renamed to reconstruction/alert/src/main/java/org/jlab/rec/ahdc/AHDCCluster/AHDCClusterFinder.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
package org.jlab.rec.ahdc.Cluster;
1+
package org.jlab.rec.ahdc.AHDCCluster;
22

33
import org.jlab.rec.ahdc.PreCluster.PreCluster;
44

55
import java.util.ArrayList;
66
import java.util.List;
77

8-
/** ClusterFinder
8+
/** AHDCClusterFinder
99
*
1010
* \todo description of what it does and how it works
1111
*
1212
*/
13-
public class ClusterFinder {
13+
public class AHDCClusterFinder {
1414

15-
private final ArrayList<Cluster> _AHDCClusters = new ArrayList<>();
16-
private final ArrayList<Cluster> _list_with_maybe_same_cluster = new ArrayList<>();
15+
private final ArrayList<AHDCCluster> _AHDCClusters = new ArrayList<>();
16+
private final ArrayList<AHDCCluster> _list_with_maybe_same_cluster = new ArrayList<>();
1717

18-
public ClusterFinder() {}
18+
public AHDCClusterFinder() {}
1919

2020
private void find_associate_cluster(PreCluster precluster, List<PreCluster> AHDC_precluster_list, int window, int minimal_distance, int super_layer, int layer, int associate_super_layer) {
2121
//System.out.println(" precluster superlayer " + precluster.get_Super_layer() + " ref superlayer " + super_layer + " layer " + precluster.get_Layer() + " ref " + layer);
@@ -52,7 +52,7 @@ private void find_associate_cluster(PreCluster precluster, List<PreCluster> AHDC
5252
if (best_precluster != null) {
5353
precluster.set_Used(true);
5454
best_precluster.set_Used(true);
55-
Cluster new_Cluster = new Cluster(precluster, best_precluster);
55+
AHDCCluster new_Cluster = new AHDCCluster(precluster, best_precluster);
5656
_list_with_maybe_same_cluster.add(new_Cluster);
5757
}
5858
}
@@ -81,18 +81,18 @@ public void findCluster(List<PreCluster> AHDC_precluster_list) {
8181
find_associate_cluster(precluster, AHDC_precluster_list, window, minimal_distance, 4, 2, 5);
8282
}
8383

84-
for (Cluster cluster : _list_with_maybe_same_cluster) {
84+
for (AHDCCluster cluster : _list_with_maybe_same_cluster) {
8585
if (!containsCluster(_AHDCClusters, cluster.get_Phi(), cluster.get_Radius())) {
8686
_AHDCClusters.add(cluster);
8787
}
8888
}
8989
}
9090

91-
public boolean containsCluster(final List<Cluster> list, double phi, double radius) {
91+
public boolean containsCluster(final List<AHDCCluster> list, double phi, double radius) {
9292
return list.stream().anyMatch(o -> o.get_Radius() == (radius) && o.get_Phi() == phi);
9393
}
9494

95-
public ArrayList<Cluster> get_AHDCClusters() {
95+
public ArrayList<AHDCCluster> get_AHDCClusters() {
9696
return _AHDCClusters;
9797
}
9898

‎reconstruction/alert/src/main/java/org/jlab/rec/ahdc/Banks/RecoBankWriter.java‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
import org.jlab.io.base.DataBank;
44
import org.jlab.io.base.DataEvent;
5-
import org.jlab.rec.ahdc.AI.InterCluster;
6-
import org.jlab.rec.ahdc.AI.TrackPrediction;
7-
import org.jlab.rec.ahdc.Cluster.Cluster;
5+
import org.jlab.rec.alert.AI.InterCluster;
6+
import org.jlab.rec.alert.AI.TrackPrediction;
7+
import org.jlab.rec.ahdc.AHDCCluster.AHDCCluster;
88
import org.jlab.rec.ahdc.DocaCluster.DocaCluster;
99
import org.jlab.rec.ahdc.Hit.Hit;
1010
import org.jlab.rec.ahdc.PreCluster.PreCluster;
11-
import org.jlab.rec.ahdc.Track.Track;
11+
import org.jlab.rec.alert.Track.Track;
1212

1313
import java.util.ArrayList;
1414
import java.util.List;
@@ -50,7 +50,7 @@ public DataBank fillPreClustersBank(DataEvent event, ArrayList<PreCluster> preCl
5050
return bank;
5151
}
5252

53-
public DataBank fillClustersBank(DataEvent event, ArrayList<Cluster> clusters) {
53+
public DataBank fillClustersBank(DataEvent event, ArrayList<AHDCCluster> clusters) {
5454
if (clusters == null || clusters.size() == 0) return null;
5555

5656
DataBank bank = event.createBank("AHDC::clusters", clusters.size());

‎reconstruction/alert/src/main/java/org/jlab/rec/ahdc/Distance/Distance.java‎

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.jlab.rec.ahdc.Distance;
22

3-
import org.jlab.rec.ahdc.Cluster.Cluster;
4-
import org.jlab.rec.ahdc.Track.Track;
3+
import org.jlab.rec.ahdc.AHDCCluster.AHDCCluster;
4+
import org.jlab.rec.alert.Track.TrackCandidate;
55

66
import java.util.ArrayList;
77
import java.util.Arrays;
@@ -14,13 +14,13 @@
1414
*/
1515
public class Distance {
1616

17-
private ArrayList<Track> _AHDCTracks;
17+
private ArrayList<TrackCandidate> _AHDCTrackCandidates;
1818

1919
public Distance(){
20-
_AHDCTracks = new ArrayList<>();
20+
_AHDCTrackCandidates = new ArrayList<>();
2121
}
2222

23-
public void find_track(List<Cluster> AHDC_Cluster){
23+
public void find_track(List<AHDCCluster> AHDC_Cluster){
2424
find_track_4_clusters(AHDC_Cluster);
2525
find_track_3_clusters(AHDC_Cluster);
2626
}
@@ -41,14 +41,14 @@ public static <T> List<List<T>> computeCombinations2(List<List<T>> lists) {
4141
return combinations;
4242
}
4343

44-
private void find_track_4_clusters(List<Cluster> AHDC_Cluster){
45-
List<Cluster> clusters_to_remove = new ArrayList<>();
46-
List<Cluster> layer1 = new ArrayList<>(); // List of all cluster with a radius equal 35
47-
List<Cluster> layer2 = new ArrayList<>(); // List of all cluster with a radius equal 45
48-
List<Cluster> layer3 = new ArrayList<>(); // List of all cluster with a radius equal 55
49-
List<Cluster> layer4 = new ArrayList<>(); // List of all cluster with a radius equal 65
44+
private void find_track_4_clusters(List<AHDCCluster> AHDC_Cluster){
45+
List<AHDCCluster> clusters_to_remove = new ArrayList<>();
46+
List<AHDCCluster> layer1 = new ArrayList<>(); // List of all cluster with a radius equal 35
47+
List<AHDCCluster> layer2 = new ArrayList<>(); // List of all cluster with a radius equal 45
48+
List<AHDCCluster> layer3 = new ArrayList<>(); // List of all cluster with a radius equal 55
49+
List<AHDCCluster> layer4 = new ArrayList<>(); // List of all cluster with a radius equal 65
5050

51-
for(Cluster cluster : AHDC_Cluster){
51+
for(AHDCCluster cluster : AHDC_Cluster){
5252
if(cluster.get_Radius() == 35){
5353
layer1.add(cluster);
5454
}
@@ -62,29 +62,29 @@ else if(cluster.get_Radius() == 65){
6262
layer4.add(cluster);
6363
}
6464
}
65-
List<List<Cluster>> merged_list = new ArrayList<>();
65+
List<List<AHDCCluster>> merged_list = new ArrayList<>();
6666
merged_list.add(layer1);
6767
merged_list.add(layer2);
6868
merged_list.add(layer3);
6969
merged_list.add(layer4);
70-
List<List<Cluster>> all_combinations = computeCombinations2(merged_list);
70+
List<List<AHDCCluster>> all_combinations = computeCombinations2(merged_list);
7171

72-
List<Track> all_track = new ArrayList<>();
73-
for(List<Cluster> combination : all_combinations){
74-
all_track.add(new Track(combination));
72+
List<TrackCandidate> all_track = new ArrayList<>();
73+
for(List<AHDCCluster> combination : all_combinations){
74+
all_track.add(new TrackCandidate(combination));
7575
}
7676

77-
List<Track> tracks_possible = new ArrayList<>();
78-
for(Track track : all_track){
77+
List<TrackCandidate> tracks_possible = new ArrayList<>();
78+
for(TrackCandidate track : all_track){
7979
if(track.get_Distance() < 45){
8080
tracks_possible.add(track);
8181
}
8282
}
8383

8484
double window = 3.8;
85-
for(Track track : tracks_possible){
86-
List<Track> tracks_with_close_starting_point = new ArrayList<>();
87-
for(Track other_track : tracks_possible){
85+
for(TrackCandidate track : tracks_possible){
86+
List<TrackCandidate> tracks_with_close_starting_point = new ArrayList<>();
87+
for(TrackCandidate other_track : tracks_possible){
8888
if(other_track.get_Clusters().get(0).get_X() > track.get_Clusters().get(0).get_X() - window
8989
&& other_track.get_Clusters().get(0).get_X() < track.get_Clusters().get(0).get_X() + window
9090
&& other_track.get_Clusters().get(0).get_Y() > track.get_Clusters().get(0).get_Y() - window
@@ -97,12 +97,12 @@ else if(cluster.get_Radius() == 65){
9797

9898
if(tracks_with_close_starting_point.size() > 0){
9999
double chisq_min = Double.MAX_VALUE;
100-
Track best_track = null;
101-
for(Track other_track : tracks_with_close_starting_point){
100+
TrackCandidate best_track = null;
101+
for(TrackCandidate other_track : tracks_with_close_starting_point){
102102
ArrayList<Double> x_ = new ArrayList<>();
103103
ArrayList<Double> y_ = new ArrayList<>();
104104
ArrayList<Double> w_ = new ArrayList<>(); // weight for circlefit
105-
for(Cluster cluster : other_track.get_Clusters()){
105+
for(AHDCCluster cluster : other_track.get_Clusters()){
106106
x_.add(cluster.get_X());
107107
y_.add(cluster.get_Y());
108108
w_.add(1.);
@@ -119,32 +119,32 @@ else if(cluster.get_Radius() == 65){
119119
}
120120
if (best_track != null ){
121121
clusters_to_remove.addAll(best_track.get_Clusters());
122-
_AHDCTracks.add(best_track);
122+
_AHDCTrackCandidates.add(best_track);
123123
}
124124
}
125125
}
126126

127-
List<Cluster> clusters_to_remove_without_double = new ArrayList<>();
128-
for(Cluster cluster : clusters_to_remove){
127+
List<AHDCCluster> clusters_to_remove_without_double = new ArrayList<>();
128+
for(AHDCCluster cluster : clusters_to_remove){
129129
if(!containsCluster(clusters_to_remove_without_double, cluster.get_Phi(), cluster.get_Radius())){
130130
clusters_to_remove_without_double.add(cluster);
131131
}
132132
}
133133

134-
for(Cluster cluster : clusters_to_remove_without_double){
134+
for(AHDCCluster cluster : clusters_to_remove_without_double){
135135
AHDC_Cluster.remove(cluster);
136136
}
137137
}
138138

139-
public boolean containsCluster(final List<Cluster> list, double phi, double radius){
139+
public boolean containsCluster(final List<AHDCCluster> list, double phi, double radius){
140140
return list.stream().anyMatch(o -> o.get_Radius() == (radius) && o.get_Phi() == phi);
141141
}
142142

143143

144-
private ArrayList<ArrayList<Cluster>> combination(List<Cluster> arr, ArrayList<Cluster> data, int start,
144+
private ArrayList<ArrayList<AHDCCluster>> combination(List<AHDCCluster> arr, ArrayList<AHDCCluster> data, int start,
145145
int end, int index, int r) {
146146

147-
ArrayList<ArrayList<Cluster>> all = new ArrayList<>();
147+
ArrayList<ArrayList<AHDCCluster>> all = new ArrayList<>();
148148
if (index == r) {
149149
all.add(data);
150150
}
@@ -157,25 +157,25 @@ private ArrayList<ArrayList<Cluster>> combination(List<Cluster> arr, ArrayList<C
157157
return all;
158158
}
159159

160-
private void find_track_3_clusters(List<Cluster> AHDC_Cluster){
161-
ArrayList<ArrayList<Cluster>> all_combinations = combination(AHDC_Cluster, new ArrayList<Cluster>(),0, AHDC_Cluster.size()-1, 0, 3);
160+
private void find_track_3_clusters(List<AHDCCluster> AHDC_Cluster){
161+
ArrayList<ArrayList<AHDCCluster>> all_combinations = combination(AHDC_Cluster, new ArrayList<AHDCCluster>(),0, AHDC_Cluster.size()-1, 0, 3);
162162

163-
List<Track> all_track = new ArrayList<>();
164-
for(List<Cluster> combination : all_combinations){
165-
all_track.add(new Track(combination));
163+
List<TrackCandidate> all_track = new ArrayList<>();
164+
for(List<AHDCCluster> combination : all_combinations){
165+
all_track.add(new TrackCandidate(combination));
166166
}
167167

168-
List<Track> tracks_possible = new ArrayList<>();
169-
for(Track track : all_track){
168+
List<TrackCandidate> tracks_possible = new ArrayList<>();
169+
for(TrackCandidate track : all_track){
170170
if(track.get_Distance() < 45){
171171
tracks_possible.add(track);
172172
}
173173
}
174174

175175
double window = 3.8;
176-
for(Track track : tracks_possible) {
177-
List<Track> tracks_with_close_starting_point = new ArrayList<>();
178-
for (Track other_track : tracks_possible) {
176+
for(TrackCandidate track : tracks_possible) {
177+
List<TrackCandidate> tracks_with_close_starting_point = new ArrayList<>();
178+
for (TrackCandidate other_track : tracks_possible) {
179179
if (other_track.get_Clusters().get(0).get_X() > track.get_Clusters().get(0).get_X() - window
180180
&& other_track.get_Clusters().get(0).get_X() < track.get_Clusters().get(0).get_X() + window
181181
&& other_track.get_Clusters().get(0).get_Y() > track.get_Clusters().get(0).get_Y() - window
@@ -188,12 +188,12 @@ private void find_track_3_clusters(List<Cluster> AHDC_Cluster){
188188

189189
if(tracks_with_close_starting_point.size() > 0){
190190
double chisq_min = Double.MAX_VALUE;
191-
Track best_track = null;
192-
for(Track other_track : tracks_with_close_starting_point){
191+
TrackCandidate best_track = null;
192+
for(TrackCandidate other_track : tracks_with_close_starting_point){
193193
ArrayList<Double> x_ = new ArrayList<>();
194194
ArrayList<Double> y_ = new ArrayList<>();
195195
ArrayList<Double> w_ = new ArrayList<>(); // weight for circlefit
196-
for(Cluster cluster : other_track.get_Clusters()){
196+
for(AHDCCluster cluster : other_track.get_Clusters()){
197197
x_.add(cluster.get_X());
198198
y_.add(cluster.get_Y());
199199
w_.add(1.);
@@ -209,17 +209,17 @@ private void find_track_3_clusters(List<Cluster> AHDC_Cluster){
209209
}
210210
}
211211
if (best_track != null ){
212-
_AHDCTracks.add(best_track);
212+
_AHDCTrackCandidates.add(best_track);
213213
}
214214
}
215215
}
216216
}
217217

218-
public ArrayList<Track> get_AHDCTracks() {
219-
return _AHDCTracks;
218+
public ArrayList<TrackCandidate> get_AHDCTrackCandidates() {
219+
return _AHDCTrackCandidates;
220220
}
221221

222-
public void set_AHDCTracks(ArrayList<Track> _AHDCTracks) {
223-
this._AHDCTracks = _AHDCTracks;
222+
public void set_AHDCTrackCandidates(ArrayList<TrackCandidate> _AHDCTrackCandidates) {
223+
this._AHDCTrackCandidates = _AHDCTrackCandidates;
224224
}
225225
}

0 commit comments

Comments
 (0)