diff --git a/reconstruction/dc/src/main/java/org/jlab/rec/dc/cluster/ClusterCleanerUtilities.java b/reconstruction/dc/src/main/java/org/jlab/rec/dc/cluster/ClusterCleanerUtilities.java index 48643ca6e2..b93809da55 100644 --- a/reconstruction/dc/src/main/java/org/jlab/rec/dc/cluster/ClusterCleanerUtilities.java +++ b/reconstruction/dc/src/main/java/org/jlab/rec/dc/cluster/ClusterCleanerUtilities.java @@ -3,20 +3,18 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.logging.Logger; -import org.jlab.detector.geant4.v2.DCGeant4Factory; -import org.jlab.io.base.DataEvent; +import org.jlab.io.base.DataEvent; import org.jlab.rec.dc.Constants; +import org.jlab.rec.dc.cluster.ClusterFitter.CoordSys; import org.jlab.rec.dc.hit.FittedHit; import org.jlab.rec.dc.hit.Hit; import org.jlab.rec.dc.timetodistance.TimeToDistanceEstimator; import org.jlab.utils.groups.IndexedTable; +import org.jlab.detector.geant4.v2.DCGeant4Factory; public class ClusterCleanerUtilities { - private static final Logger LOGGER = Logger.getLogger(ClusterCleanerUtilities.class.getName()); - private List> sortedHits; public ClusterCleanerUtilities() { @@ -194,7 +192,7 @@ public List ClusterSplitter(FittedCluster clus, int nextClsStartI if((!isExceptionalCluster(newClus) && nLayers >= Constants.DC_MIN_NLAYERS) || (isExceptionalCluster(newClus) && nLayers >= Constants.DC_MIN_NLAYERS - 1)) { //require consistency with line - cf.SetFitArray(newClus, "LC"); + cf.SetFitArray(newClus, CoordSys.LC); cf.Fit(newClus, true); if ((nLayers == 6 && newClus.get_fitProb() > 0.9) || (nLayers == 5 && newClus.get_fitProb() > 0.85) || (nLayers == 4 && newClus.get_fitProb() > 0.75) || (nLayers == 3 && newClus.get_fitProb() > 0.65)) { @@ -213,7 +211,7 @@ public List ClusterSplitter(FittedCluster clus, int nextClsStartI int newcid = nextClsStartIndex; for (FittedCluster cluster : splitclusters) { cluster.set_Id(newcid++); - cf.SetFitArray(cluster, "LC"); + cf.SetFitArray(cluster, CoordSys.LC); cf.Fit(cluster, true); FittedCluster bestCls = OverlappingClusterResolver(cluster, splitclusters); @@ -229,7 +227,7 @@ public List ClusterSplitter(FittedCluster clus, int nextClsStartI List selectedClusList2 = new ArrayList<>(); for (FittedCluster cluster : selectedClusList) { cluster.set_Id(newcid++); - cf.SetFitArray(cluster, "LC"); + cf.SetFitArray(cluster, CoordSys.LC); cf.Fit(cluster, true); FittedCluster bestCls = OverlappingClusterResolver(cluster, selectedClusList); @@ -569,7 +567,7 @@ else if (index == 6) { } } - return cf.BestClusterSelector(arrayOfClus, "TSC"); + return cf.BestClusterSelector(arrayOfClus, CoordSys.TSC); } @@ -680,7 +678,7 @@ else if (hitsInLayer.size() == 2) { // for(FittedHit h : c) // LOGGER.log(Level.INFO, h.printInfo()); //} - FittedCluster BestCluster = cf.BestClusterSelector(clusters, "LC"); + FittedCluster BestCluster = cf.BestClusterSelector(clusters, CoordSys.LC); //LOGGER.log(Level.INFO, " ---> selected cluster : "); //for(FittedHit h : BestCluster) // LOGGER.log(Level.INFO, h.printInfo()); @@ -752,13 +750,14 @@ public FittedCluster OverlappingClusterResolver(FittedCluster thisclus, List 4, keep the first 2 and last 2 hits in that column, if Nc > 10 - remove all hits in that column. + * the middle hit If Nc=4, keep only the first and last hit in that column; + * if Nc > 4, keep the first 2 and last 2 hits in that column, if Nc > 10 + * remove all hits in that column. * * @param hits the unfitted hits * @return @@ -971,8 +970,7 @@ else if (hitsInLayer.size() == 2) { clusters.add(newClus); } - FittedCluster BestCluster = cf.BestClusterSelector(clusters, "LC"); - return BestCluster; + return cf.BestClusterSelector(clusters, CoordSys.LC); } /** diff --git a/reconstruction/dc/src/main/java/org/jlab/rec/dc/cluster/ClusterFinder.java b/reconstruction/dc/src/main/java/org/jlab/rec/dc/cluster/ClusterFinder.java index a2d1b735fe..9887337d42 100644 --- a/reconstruction/dc/src/main/java/org/jlab/rec/dc/cluster/ClusterFinder.java +++ b/reconstruction/dc/src/main/java/org/jlab/rec/dc/cluster/ClusterFinder.java @@ -8,16 +8,17 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -import org.jlab.detector.geant4.v2.DCGeant4Factory; -import org.jlab.io.base.DataEvent; +import org.jlab.io.base.DataEvent; import org.jlab.io.evio.EvioDataBank; import org.jlab.io.evio.EvioDataEvent; import org.jlab.rec.dc.Constants; +import org.jlab.rec.dc.cluster.ClusterFitter.CoordSys; import org.jlab.rec.dc.hit.Hit; import org.jlab.rec.dc.timetodistance.TimeToDistanceEstimator; import org.jlab.rec.dc.hit.FittedHit; import org.jlab.utils.groups.IndexedTable; +import org.jlab.detector.geant4.v2.DCGeant4Factory; /** * A hit pruning algorithm to reject noise that gives a pattern of hits that are @@ -216,12 +217,12 @@ public List FindHitBasedClusters(List allhits, ClusterCleane for (FittedCluster clus : selectedClusList) { - cf.SetFitArray(clus, "LC"); + cf.SetFitArray(clus, CoordSys.LC); cf.Fit(clus, true); if(!ct.isExceptionalFittedCluster(clus) && clus.get_fitProb() Constants.HITBASEDTRKGMINFITHI2PROB ){ @@ -246,7 +247,7 @@ public List FindHitBasedClusters(List allhits, ClusterCleane //fhit.set_AssociatedClusterID(clus.get_Id()); } - cf.SetFitArray(clus, "TSC"); + cf.SetFitArray(clus, CoordSys.TSC); cf.Fit(clus, true); cf.SetResidualDerivedParams(clus, false, false, DcDetector); //calcTimeResidual=false, resetLRAmbig=false, local= false @@ -273,7 +274,7 @@ public List FindHitBasedClusters(List allhits, ClusterCleane } clus.removeAll(rmHits); clus.addAll(addHits); - cf.SetFitArray(clus, "TSC"); + cf.SetFitArray(clus, CoordSys.TSC); cf.Fit(clus, false); cf.SetSegmentLineParameters(clus.get(0).get_Z(), clus); if (clus != null ) { @@ -318,7 +319,7 @@ public List RecomposeClusters(Map> for (FittedCluster clus : clusters) { if (clus != null) { - cf.SetFitArray(clus, "TSC"); + cf.SetFitArray(clus, CoordSys.TSC); cf.Fit(clus, true); cf.SetResidualDerivedParams(clus, true, false, dcDetector); //calcTimeResidual=false, resetLRAmbig=false cf.Fit(clus, false); @@ -476,7 +477,7 @@ public List FindTimeBasedClusters(DataEvent event, } } - cf.SetFitArray(Clus2, "TSC"); + cf.SetFitArray(Clus2, CoordSys.TSC); cf.Fit(Clus2, true); if (Math.abs(clus.get_Chisq() - Clus2.get_Chisq()) < 1) { @@ -488,7 +489,7 @@ public List FindTimeBasedClusters(DataEvent event, for (FittedCluster clus : clusters) { - cf.SetFitArray(clus, "TSC"); + cf.SetFitArray(clus, CoordSys.TSC); cf.Fit(clus, true); // update the hits @@ -500,7 +501,7 @@ public List FindTimeBasedClusters(DataEvent event, double prevChi2 = 999999999; double trkAngleFinal = 0; while (Chi2Diff > 0) { - cf.SetFitArray(clus, "TSC"); + cf.SetFitArray(clus, CoordSys.TSC); cf.Fit(clus, true); Chi2Diff = prevChi2 - clus.get_Chisq(); if (Chi2Diff > 0) { @@ -519,11 +520,11 @@ public List FindTimeBasedClusters(DataEvent event, for (FittedHit fhit : clus) { fhit.updateHitPositionWithTime(event, trkAngleFinal, fhit.getB(), tab, DcDetector, tde); } - cf.SetFitArray(clus, "TSC"); + cf.SetFitArray(clus, CoordSys.TSC); cf.Fit(clus, true); cf.SetResidualDerivedParams(clus, true, false, DcDetector); //calcTimeResidual=false, resetLRAmbig=false - cf.SetFitArray(clus, "TSC"); + cf.SetFitArray(clus, CoordSys.TSC); cf.Fit(clus, false); cf.SetSegmentLineParameters(clus.get(0).get_Z(), clus); @@ -582,7 +583,7 @@ public EvioDataBank getLayerEfficiencies(List fclusters, List> FitArray = new ArrayList>(); - private final List x = new ArrayList(); - private final List y = new ArrayList(); - private final List ex = new ArrayList(); - private final List ey = new ArrayList(); + private final List> FitArray = new ArrayList<>(); + private final List x = new ArrayList<>(); + private final List y = new ArrayList<>(); + private final List ex = new ArrayList<>(); + private final List ey = new ArrayList<>(); private final double stereo = Constants.COS6; - - private String CoordinateSystem; // LC= local, TSC = tilted Sector - public ClusterFitter() { - // TODO Auto-generated constructor stub - } + + public ClusterFitter() {} + public void reset() { for(int i =0; i) ex); FitArray.add((ArrayList) y); FitArray.add((ArrayList) ey); - } + /** * * @param clus fitted cluster @@ -148,7 +149,6 @@ public void SetSegmentLineParameters(double x0, FittedCluster clus) { } else { System.err.println("Cluster Fit Params not set!!!"); - } } @@ -209,7 +209,7 @@ public void SetResidualDerivedParams(FittedCluster clus, boolean calcTimeResidua } } if (resetLRAmbig) { - if ((CoordinateSystem.equals("LC") && Math.abs(residual) < 0.01) || (CoordinateSystem.equals("LTS") + if ((coordinateSystem.equals(CoordSys.LC) && Math.abs(residual) < 0.01) || (coordinateSystem.equals(CoordSys.LTS) && clus.get(i).get_Doca() / clus.get(i).get_CellSize() < 0.4)) { // DOCA require to be larger than 40% of cell size for hit-based tracking LR assignment clus.get(i).set_LeftRightAmb(0); } @@ -241,11 +241,10 @@ public void SetResidualDerivedParams(FittedCluster clus, boolean calcTimeResidua * @param system coordinate system in which the fit is performed * @return the fitted cluster with the best fit chi2 */ - public FittedCluster BestClusterSelector(List clusters, String system) { - //init + public FittedCluster BestClusterSelector(List clusters, CoordSys system) { + FittedCluster BestCluster = null; double bestChisq = 999999999.; - // double bestClusx0=0; for (FittedCluster clusCand : clusters) { if(isBrickWall(clusCand)) { @@ -267,13 +266,10 @@ public FittedCluster BestClusterSelector(List clusters, String sy if (chisq < bestChisq) { bestChisq = chisq; BestCluster = clusCand; - // bestClusx0 = FitArray[0][0]; } } - //SetSegmentLineParameters(bestClusx0, BestCluster) ; return BestCluster; - } /** @@ -320,5 +316,4 @@ private boolean isBrickWall(FittedCluster clusCand) { return isBW; } - } diff --git a/reconstruction/dc/src/main/java/org/jlab/rec/dc/cross/CrossListFinder.java b/reconstruction/dc/src/main/java/org/jlab/rec/dc/cross/CrossListFinder.java index dc28ef9ab4..5399b2dadb 100644 --- a/reconstruction/dc/src/main/java/org/jlab/rec/dc/cross/CrossListFinder.java +++ b/reconstruction/dc/src/main/java/org/jlab/rec/dc/cross/CrossListFinder.java @@ -10,6 +10,7 @@ import org.jlab.io.base.DataEvent; import org.jlab.rec.dc.Constants; import org.jlab.rec.dc.cluster.ClusterFitter; +import org.jlab.rec.dc.cluster.ClusterFitter.CoordSys; import org.jlab.rec.dc.hit.FittedHit; import org.jlab.rec.dc.segment.Segment; import org.jlab.rec.dc.timetodistance.TimeToDistanceEstimator; @@ -216,18 +217,18 @@ private void recalcParsSegment(DataEvent event, Segment _Segment1, IndexedTable fhit.updateHitPositionWithTime(event, trkAngle, fhit.getB(), tab, DcDetector, tde); } - cf.SetFitArray(_Segment1.get_fittedCluster(), "TSC"); + cf.SetFitArray(_Segment1.get_fittedCluster(), CoordSys.TSC); cf.Fit(_Segment1.get_fittedCluster(), true); trkAngle = _Segment1.get_fittedCluster().get_clusterLineFitSlope(); for (FittedHit fhit : _Segment1.get_fittedCluster()) { fhit.updateHitPositionWithTime(event, trkAngle, fhit.getB(), tab, DcDetector, tde); } - cf.SetFitArray(_Segment1.get_fittedCluster(), "TSC"); + cf.SetFitArray(_Segment1.get_fittedCluster(), CoordSys.TSC); cf.Fit(_Segment1.get_fittedCluster(), true); cf.SetResidualDerivedParams(_Segment1.get_fittedCluster(), true, false, DcDetector); //calcTimeResidual=false, resetLRAmbig=false - cf.SetFitArray(_Segment1.get_fittedCluster(), "TSC"); + cf.SetFitArray(_Segment1.get_fittedCluster(), CoordSys.TSC); cf.Fit(_Segment1.get_fittedCluster(), false); cf.SetSegmentLineParameters(_Segment1.get_fittedCluster().get(0).get_Z(), _Segment1.get_fittedCluster()); diff --git a/reconstruction/dc/src/main/java/org/jlab/rec/dc/nn/PatternRec.java b/reconstruction/dc/src/main/java/org/jlab/rec/dc/nn/PatternRec.java index 945c6a65a6..bde2e522b5 100644 --- a/reconstruction/dc/src/main/java/org/jlab/rec/dc/nn/PatternRec.java +++ b/reconstruction/dc/src/main/java/org/jlab/rec/dc/nn/PatternRec.java @@ -14,6 +14,7 @@ import org.jlab.rec.dc.cluster.ClusterCleanerUtilities; import org.jlab.rec.dc.cluster.ClusterFinder; import org.jlab.rec.dc.cluster.ClusterFitter; +import org.jlab.rec.dc.cluster.ClusterFitter.CoordSys; import org.jlab.rec.dc.cluster.FittedCluster; import org.jlab.rec.dc.cross.Cross; import org.jlab.rec.dc.cross.CrossList; @@ -172,7 +173,7 @@ public List RecomposeSegments(List fhits, fhit.updateHitPosition(DcDetector); } - cf.SetFitArray(fclus, "TSC"); + cf.SetFitArray(fclus, CoordSys.TSC); cf.Fit(fclus, true); cf.SetResidualDerivedParams(fclus, false, false, DcDetector); //calcTimeResidual=false, resetLRAmbig=false, local= false @@ -183,7 +184,7 @@ public List RecomposeSegments(List fhits, fhit.set_AssociatedClusterID(fclus.get_Id()); fhit.set_AssociatedHBTrackID(entry.getKey()); } - cf.SetFitArray(fclus, "TSC"); + cf.SetFitArray(fclus, org.jlab.rec.dc.cluster.ClusterFitter.CoordSys.TSC); cf.Fit(fclus, false); cf.SetSegmentLineParameters(fclus.get(0).get_Z(), fclus); diff --git a/reconstruction/dc/src/main/java/org/jlab/rec/dc/trajectory/RoadFinder.java b/reconstruction/dc/src/main/java/org/jlab/rec/dc/trajectory/RoadFinder.java index 53efdfd097..e259c9fc53 100644 --- a/reconstruction/dc/src/main/java/org/jlab/rec/dc/trajectory/RoadFinder.java +++ b/reconstruction/dc/src/main/java/org/jlab/rec/dc/trajectory/RoadFinder.java @@ -3,17 +3,16 @@ import java.util.ArrayList; import java.util.List; -import org.jlab.clas.clas.math.FastMath; import org.jlab.rec.dc.cluster.Cluster; import org.jlab.rec.dc.cluster.ClusterFitter; +import org.jlab.rec.dc.cluster.ClusterFitter.CoordSys; import org.jlab.rec.dc.cluster.FittedCluster; import org.jlab.rec.dc.hit.FittedHit; import org.jlab.rec.dc.segment.Segment; import org.jlab.rec.dc.Constants; - -import Jama.Matrix; import org.jlab.detector.geant4.v2.DCGeant4Factory; +import Jama.Matrix; public class RoadFinder { @@ -31,16 +30,12 @@ public RoadFinder() { * @return list of segments corresponding to pseudo-segments */ public List findRoads(List segs, DCGeant4Factory DcDetector) { - //QuadraticFit qf = new QuadraticFit(); - //initialize the lists List Roads = new ArrayList<>(); List>> superLayerLists = new ArrayList<>(); for(int sec=0; sec<6; sec++) { ArrayList> sLyrs = new ArrayList<>(); - ArrayList>> rLyrs = new ArrayList<>(); - for(int sly=0; sly<6; sly++) { sLyrs.add(new ArrayList<>()); } @@ -54,11 +49,9 @@ public List findRoads(List segs, DCGeant4Factory DcDetector) { } for(int sec=0; sec<6; sec++) { for(int sly=0; sly<6; sly++) { - //if(superLayerLists.get(sec).get(sly).size()==0) { // add a blank to each superlayer Segment blank = new Segment(new FittedCluster(new Cluster(sec+1, sly+1, -1))); blank.set_Id(-10); superLayerLists.get(sec).get(sly).add(blank); - //} } } int roadId =1; @@ -101,8 +94,6 @@ public List findRoads(List segs, DCGeant4Factory DcDetector) { public Segment findRoadMissingSegment(List segList, DCGeant4Factory DcDetector, double[] a) { - //his.fitRoad((ArrayList) segList, DcDetector); - Segment pseudoSeg = null; if(segList.size()<3) { // make pseudo-segment for missing segment // find missing segment superlayer @@ -142,7 +133,7 @@ public Segment findRoadMissingSegment(List segList, DCGeant4Factory DcD fpseudoCluster.add(pseudoHit); } - cf.SetFitArray(fpseudoCluster, "TSC"); + cf.SetFitArray(fpseudoCluster, CoordSys.TSC); cf.Fit(fpseudoCluster, true); cf.SetSegmentLineParameters(fpseudoCluster.get(0).get_Z(), fpseudoCluster) ; @@ -151,6 +142,7 @@ public Segment findRoadMissingSegment(List segList, DCGeant4Factory DcD } return pseudoSeg; } + /** * * @param pseudoSeg @@ -159,13 +151,13 @@ public Segment findRoadMissingSegment(List segList, DCGeant4Factory DcD * @return redo the fit (not used) */ private Segment reFit(Segment pseudoSeg, ArrayList segList, DCGeant4Factory DcDetector ) { - qf.init(); - this.fitRoad(segList, DcDetector); + qf.init(); + this.fitRoad(segList, DcDetector); - Cluster pseudoCluster = new Cluster(segList.get(0).get_Sector(),pseudoSeg.get_Superlayer(),-1); - FittedCluster fpseudoCluster = new FittedCluster(pseudoCluster); + Cluster pseudoCluster = new Cluster(segList.get(0).get_Sector(),pseudoSeg.get_Superlayer(),-1); + FittedCluster fpseudoCluster = new FittedCluster(pseudoCluster); - for(int l = 0; l<6; l++) { + for(int l = 0; l<6; l++) { int layer = l+1; double z = DcDetector.getWireMidpoint(pseudoSeg.get_Sector()-1, pseudoSeg.get_Superlayer()-1,layer-1,0).z; double trkX = qf.a[0]*z*z+qf.a[1]*z+qf.a[2]; @@ -178,16 +170,16 @@ private Segment reFit(Segment pseudoSeg, ArrayList segList, DCGeant4Fac pseudoHit.updateHitPosition(DcDetector); pseudoHit.calc_GeomCorr(DcDetector, 0); fpseudoCluster.add(pseudoHit); - } - cf.SetFitArray(fpseudoCluster, "TSC"); - cf.Fit(fpseudoCluster, true); - - cf.SetSegmentLineParameters(fpseudoCluster.get(0).get_Z(), fpseudoCluster) ; - Segment pseudoSeg1 = new Segment(fpseudoCluster); - - pseudoSeg1.set_fitPlane(DcDetector); + } + cf.SetFitArray(fpseudoCluster, CoordSys.TSC); + cf.Fit(fpseudoCluster, true); - return pseudoSeg1; + cf.SetSegmentLineParameters(fpseudoCluster.get(0).get_Z(), fpseudoCluster) ; + Segment pseudoSeg1 = new Segment(fpseudoCluster); + + pseudoSeg1.set_fitPlane(DcDetector); + + return pseudoSeg1; } private boolean fitRoad(ArrayList segList, DCGeant4Factory DcDetector) {