diff --git a/reconstruction/alert/src/main/java/org/jlab/rec/ahdc/Cluster/Cluster.java b/reconstruction/alert/src/main/java/org/jlab/rec/ahdc/Cluster/Cluster.java index c985eb968f..1163b2df7f 100644 --- a/reconstruction/alert/src/main/java/org/jlab/rec/ahdc/Cluster/Cluster.java +++ b/reconstruction/alert/src/main/java/org/jlab/rec/ahdc/Cluster/Cluster.java @@ -4,6 +4,9 @@ import org.jlab.rec.ahdc.PreCluster.PreCluster; import java.util.ArrayList; +import org.jlab.geom.detector.alert.AHDC.AlertDCFactory; +import org.jlab.geom.prim.Line3D; +import org.jlab.geom.prim.Point3D; /** * Cluster are compose by 2 PreCluster on layer with a different stereo angle @@ -11,9 +14,9 @@ public class Cluster { private int _trackId = -1; - private double _StereoAngle = 20.0; - private double _DeltaZ = 300.0; - private double _Zoffset = 150.0; + private double _StereoAngle = 20.0;//not used + private double _DeltaZ = 300;//not used + private double _Zoffset = 150;//not used private double _Radius; private double _Phi; @@ -26,14 +29,46 @@ public class Cluster { private double _V; private ArrayList _PreClusters_list; + private static Line3D representativeLine(PreCluster pc) { + if (pc == null || pc.get_hits_list() == null || pc.get_hits_list().isEmpty()) { + return null; + } + Hit h = pc.get_hits_list().get(0); + return h.getLine(); + } + private static double wrapPi(double a) { + while (a > Math.PI) a -= 2.0 * Math.PI; + while (a < -Math.PI) a += 2.0 * Math.PI; + return a; + } + private static double stereoTwistFromLine(Line3D line) { + if (line == null) { + return 0.0; + } + + Point3D p0 = line.origin(); + Point3D p1 = line.end(); + double phi0 = Math.atan2(p0.y(), p0.x()); + double phi1 = Math.atan2(p1.y(), p1.x()); + + return wrapPi(phi1 - phi0); + } public Cluster(PreCluster precluster, PreCluster other_precluster) { this._PreClusters_list = new ArrayList<>(); _PreClusters_list.add(precluster); _PreClusters_list.add(other_precluster); this._Radius = (precluster.get_Radius() + other_precluster.get_Radius()) / 2; - this._Z = ((other_precluster.get_Phi() - precluster.get_Phi()) / (Math.toRadians(_StereoAngle) * Math.pow(-1, precluster.get_Super_layer()-1) - Math.toRadians(_StereoAngle) * Math.pow(-1, other_precluster.get_Super_layer()-1))) * _DeltaZ - _Zoffset; + Line3D line1 = representativeLine(precluster); + Line3D line2 = representativeLine(other_precluster); + Point3D end1 = line1.end(); + Point3D start1 = line1.origin(); + double DeltaZ = end1.z()-start1.z(); + double Zref = end1.z(); + double StereoAnglep = stereoTwistFromLine(line1); + double StereoAngleo = stereoTwistFromLine(line2); + this._Z = ((precluster.get_Phi() - other_precluster.get_Phi()) / (StereoAnglep - StereoAngleo)) * DeltaZ + Zref; double x1 = -precluster.get_Radius() * Math.sin(precluster.get_Phi()); double y1 = -precluster.get_Radius() * Math.cos(precluster.get_Phi()); diff --git a/reconstruction/alert/src/main/java/org/jlab/rec/ahdc/DocaCluster/DocaClusterRefiner.java b/reconstruction/alert/src/main/java/org/jlab/rec/ahdc/DocaCluster/DocaClusterRefiner.java index 504d41572f..1491f0a96e 100644 --- a/reconstruction/alert/src/main/java/org/jlab/rec/ahdc/DocaCluster/DocaClusterRefiner.java +++ b/reconstruction/alert/src/main/java/org/jlab/rec/ahdc/DocaCluster/DocaClusterRefiner.java @@ -209,9 +209,10 @@ private static Line3D buildShiftedWireLine(Hit h, Vec2 tangentXY) { double dz = e.z() - o.z(); // New origin: (tangent.x, tangent.y, original_z) - Point3D oShift = new Point3D(tangentXY.x, tangentXY.y, o.z()); - Point3D eShift = new Point3D(oShift.x() + dx, oShift.y() + dy, oShift.z() + dz); - + //Point3D oShift = new Point3D(tangentXY.x, tangentXY.y, o.z()); + //Point3D eShift = new Point3D(oShift.x() + dx, oShift.y() + dy, oShift.z() + dz); + Point3D eShift = new Point3D(tangentXY.x, tangentXY.y, e.z()); + Point3D oShift = new Point3D(tangentXY.x - dx, tangentXY.y - dy, e.z() - dz); return new Line3D(oShift, eShift); }