Author: [log in to unmask]
Date: Thu May 28 13:39:26 2015
New Revision: 3055
Log:
Some local changes and a couple on few track utility methods
Added:
java/trunk/users/src/main/java/org/hps/users/mgraham/ProfileDriver.java
java/trunk/users/src/main/java/org/hps/users/mgraham/SplitHitsOnTracks.java
Modified:
java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/TrackingAndReconMonitoring.lcsim
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/TrackingAndReconMonitoring.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/TrackingAndReconMonitoring.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/TrackingAndReconMonitoring.lcsim Thu May 28 13:39:26 2015
@@ -10,35 +10,51 @@
<driver name="RawTrackerHitFitterDriver" />
<driver name="TrackerHitDriver"/>
<driver name="HelicalTrackHitDriver"/>
- <driver name="FullTrackerReconDriver"/>
- <driver name="TrackDataDriver" />
+ <driver name="FullTrackerReconDriver"/><!--
+ <driver name="TrackDataDriver" />
+ -->
<driver name="EcalRunningPedestal"/>
- <driver name="EcalRawConverter" />
- <driver name="ReconClusterer" />
+ <driver name="EcalRawConverter" /><!--
+-->
+ <driver name="ReconClusterer" /><!--
+-->
<driver name="ReconParticle" /> <!--
- <driver name="GTPOnlineClusterer" /> -->
- <!-- SVT opening angle alignment -->
- <!-- <driver name="TrackerL1to3ReconDriver"/>
+ <driver name="GTPOnlineClusterer" />
+ SVT opening angle alignment -->
+ <driver name="SplitHitsOnTrack"/>
+ <driver name="TrackerL1to3ReconDriver"/>
<driver name="TrackerL4to6ReconDriver"/>
- <driver name="SVTAlignment"/> -->
+ <driver name="TrackerL134ReconDriver"/>
+ <driver name="ReconParticleL1to3" />
+ <driver name="ReconParticleL4to6" />
+ <driver name="ReconParticleL134" />
+ <driver name="SVTAlignment"/>
+ <driver name="TrackingMonitoringSingles1DQM" />
+ <driver name="TrackingMonitoringL1to3Singles1DQM"/>
+ <driver name="TrackingMonitoringL4to6Singles1DQM"/>
+ <driver name="TrackingMonitoringL134Singles1DQM"/>
+ <driver name="FinalStateL1to3DQMSingles1"/>
+ <driver name="FinalStateL4to6DQMSingles1"/>
+ <driver name="FinalStateL134DQMSingles1"/>
<!-- Online Monitoring Drivers -->
<!-- <driver name="TrackingMonitoring" />
<driver name="TrackingResiduals"/>
<driver name="TrackTime"/>
<driver name="V0Monitoring"/> -->
- <driver name="SVTMonitoring"/>
- <driver name="TrackingMonitoringDQM" />
- <driver name="TrackingMonitoringSingles1DQM" />
- <driver name="TrackingMonitoringPairs1DQM" />
- <driver name="TrackingResidualsPairs1DQM"/>
- <driver name="TrackingResidualsSingles1DQM"/>
- <driver name="FinalStateDQM"/>
- <driver name="FinalStateDQMSingles1"/>
+ <!-- <driver name="SVTMonitoring"/>
+ <driver name="TrackingMonitoringDQM" />
+ <driver name="TrackingMonitoringSingles1DQM" />
+ <driver name="TrackingMonitoringPairs1DQM" />
+ <driver name="TrackingResidualsPairs1DQM"/>
+ <driver name="TrackingResidualsSingles1DQM"/>
+ <driver name="FinalStateDQM"/>
+ -->
+ <driver name="FinalStateDQMSingles1"/><!--
<driver name="FinalStateDQMPairs1"/>
<driver name="V0DQM"/>
<driver name="V0DQMSingles1"/>
<driver name="V0DQMPairs1"/>
- <driver name="TridentMonitoringPairs1"/>
+ <driver name="TridentMonitoringPairs1"/>-->
<!-- <driver name="PositronDebug"/>-->
<driver name="AidaSaveDriver"/>
<driver name="LCIOWriter"/>
@@ -65,19 +81,32 @@
<tolerance>1.0</tolerance>
<saveAxialHits>false</saveAxialHits>
</driver>-->
+
+ <driver name="SplitHitsOnTrack" type="org.hps.users.mgraham.SplitHitsOnTracks">
+ </driver>
<driver name="TrackerL1to3ReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
<debug>false</debug>
- <includeMS>false</includeMS>
- <useHPSMaterialManager>false</useHPSMaterialManager>
+<!-- <includeMS>false</includeMS>
+ <useHPSMaterialManager>false</useHPSMaterialManager>-->
+ <inputHitCollectionName>OnTrackHits</inputHitCollectionName>
<trackCollectionName>L1to3Tracks</trackCollectionName>
<strategyResource>/org/hps/recon/tracking/strategies/HPS-Full-L1-3.xml</strategyResource>
</driver>
<driver name="TrackerL4to6ReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
<debug>false</debug>
- <includeMS>false</includeMS>
- <useHPSMaterialManager>false</useHPSMaterialManager>
+<!-- <includeMS>false</includeMS>
+ <useHPSMaterialManager>false</useHPSMaterialManager>-->
<trackCollectionName>L4to6Tracks</trackCollectionName>
+ <inputHitCollectionName>OnTrackHits</inputHitCollectionName>
<strategyResource>/org/hps/recon/tracking/strategies/HPS-Full-L4-6.xml</strategyResource>
+ </driver>
+ <driver name="TrackerL134ReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
+ <debug>false</debug>
+<!-- <includeMS>false</includeMS>
+ <useHPSMaterialManager>false</useHPSMaterialManager>-->
+ <trackCollectionName>L134Tracks</trackCollectionName>
+ <inputHitCollectionName>OnTrackHits</inputHitCollectionName>
+ <strategyResource>/org/hps/recon/tracking/strategies/HPS-Full-L134.xml</strategyResource>
</driver>
<!-- <driver name="FullTrackerReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
<debug>false</debug>
@@ -98,6 +127,47 @@
<logLevel>ALL</logLevel>
</driver> -->
<driver name="ReconParticle" type="org.hps.recon.particle.HpsReconParticleDriver">
+ <debug>false</debug>
+ <dxCut>50</dxCut>
+ <dyCut>50</dyCut>
+ </driver>
+
+ <driver name="ReconParticleL1to3" type="org.hps.recon.particle.HpsReconParticleDriver">
+ <trackCollectionName>L1to3Tracks</trackCollectionName>
+ <targetConV0VerticesColName>TargetConstrainedV0CandidatesL1to3</targetConV0VerticesColName>
+ <finalStateParticlesColName>FinalStateParticlesL1to3</finalStateParticlesColName>
+ <unconstrainedV0CandidatesColName>UnconstrainedV0CandidatesL1to3</unconstrainedV0CandidatesColName>
+ <beamConV0CandidatesColName>BeamspotConstrainedV0CandidatesL1to3</beamConV0CandidatesColName>
+ <unconstrainedV0VerticesColName>UnconstrainedV0VerticesL1to3</unconstrainedV0VerticesColName>
+ <beamConV0VerticesColName>BeamspotConstrainedV0VerticesL1to3</beamConV0VerticesColName>
+ <targetConV0VerticesColName>TargetConstrainedV0VerticesL1to3</targetConV0VerticesColName>
+ <debug>false</debug>
+ <dxCut>50</dxCut>
+ <dyCut>50</dyCut>
+ </driver>
+ <driver name="ReconParticleL4to6" type="org.hps.recon.particle.HpsReconParticleDriver">
+ <trackCollectionName>L4to6Tracks</trackCollectionName>
+ <targetConV0VerticesColName>TargetConstrainedV0CandidatesL4to6</targetConV0VerticesColName>
+ <finalStateParticlesColName>FinalStateParticlesL4to6</finalStateParticlesColName>
+ <unconstrainedV0CandidatesColName>UnconstrainedV0CandidatesL4to6</unconstrainedV0CandidatesColName>
+ <beamConV0CandidatesColName>BeamspotConstrainedV0CandidatesL4to6</beamConV0CandidatesColName>
+ <unconstrainedV0VerticesColName>UnconstrainedV0VerticesL4to6</unconstrainedV0VerticesColName>
+ <beamConV0VerticesColName>BeamspotConstrainedV0VerticesL4to6</beamConV0VerticesColName>
+ <targetConV0VerticesColName>TargetConstrainedV0VerticesL4to6</targetConV0VerticesColName>
+ <debug>false</debug>
+ <dxCut>50</dxCut>
+ <dyCut>50</dyCut>
+ </driver>
+
+ <driver name="ReconParticleL134" type="org.hps.recon.particle.HpsReconParticleDriver">
+ <trackCollectionName>L134Tracks</trackCollectionName>
+ <targetConV0VerticesColName>TargetConstrainedV0CandidatesL134</targetConV0VerticesColName>
+ <finalStateParticlesColName>FinalStateParticlesL134</finalStateParticlesColName>
+ <unconstrainedV0CandidatesColName>UnconstrainedV0CandidatesL134</unconstrainedV0CandidatesColName>
+ <beamConV0CandidatesColName>BeamspotConstrainedV0CandidatesL134</beamConV0CandidatesColName>
+ <unconstrainedV0VerticesColName>UnconstrainedV0VerticesL134</unconstrainedV0VerticesColName>
+ <beamConV0VerticesColName>BeamspotConstrainedV0VerticesL134</beamConV0VerticesColName>
+ <targetConV0VerticesColName>TargetConstrainedV0VerticesL134</targetConV0VerticesColName>
<debug>false</debug>
<dxCut>50</dxCut>
<dyCut>50</dyCut>
@@ -116,25 +186,25 @@
<debug>false</debug>
</driver>
<driver name="TrackerHitDriver" type="org.hps.recon.tracking.DataTrackerHitDriver">
-<!-- <neighborDeltaT>8.0</neighborDeltaT>-->
- <neighborDeltaT>24.0</neighborDeltaT>
+ <neighborDeltaT>8.0</neighborDeltaT>
+<!-- <neighborDeltaT>24.0</neighborDeltaT>-->
</driver>
<driver name="HelicalTrackHitDriver" type="org.hps.recon.tracking.HelicalTrackHitDriver">
<debug>false</debug>
<!-- <clusterTimeCut>10.0</clusterTimeCut>
<maxDt>12.0</maxDt>-->
- <!-- <clusterTimeCut>12.0</clusterTimeCut>
- <maxDt>16.0</maxDt>-->
- <clusterTimeCut>24.0</clusterTimeCut>
- <maxDt>24.0</maxDt>
+ <clusterTimeCut>12.0</clusterTimeCut>
+ <maxDt>16.0</maxDt>
+<!-- <clusterTimeCut>24.0</clusterTimeCut>
+ <maxDt>24.0</maxDt>-->
<maxSeperation>20.0</maxSeperation>
<tolerance>1.0</tolerance>
</driver>
<driver name="FullTrackerReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
<strategyResource>HPS-Full.xml</strategyResource>
<debug>false</debug>
-<!-- <rmsTimeCut>8.0</rmsTimeCut>-->
- <rmsTimeCut>24.0</rmsTimeCut>
+ <rmsTimeCut>8.0</rmsTimeCut>
+<!-- <rmsTimeCut>24.0</rmsTimeCut>-->
</driver>
<driver name="EcalRunningPedestal" type="org.hps.recon.ecal.EcalRunningPedestalDriver">
<logLevel>CONFIG</logLevel>
@@ -188,6 +258,24 @@
<printDQMStrings>false</printDQMStrings>
</driver>
+ <driver name="TrackingMonitoringL1to3Singles1DQM" type="org.hps.analysis.dataquality.TrackingMonitoring">
+ <trackCollectionName>L1to3Tracks</trackCollectionName>
+ <overwriteDB>false</overwriteDB>
+ <printDQMStrings>false</printDQMStrings>
+ </driver>
+ <driver name="TrackingMonitoringL4to6Singles1DQM" type="org.hps.analysis.dataquality.TrackingMonitoring">
+ <trackCollectionName>L4to6Tracks</trackCollectionName>
+ <overwriteDB>false</overwriteDB>
+ <printDQMStrings>false</printDQMStrings>
+ </driver>
+
+ <driver name="TrackingMonitoringL134Singles1DQM" type="org.hps.analysis.dataquality.TrackingMonitoring">
+ <trackCollectionName>L134Tracks</trackCollectionName>
+ <overwriteDB>false</overwriteDB>
+ <printDQMStrings>false</printDQMStrings>
+ </driver>
+
+
<driver name="TrackingMonitoringSingles1DQM" type="org.hps.analysis.dataquality.TrackingMonitoring">
<overwriteDB>false</overwriteDB>
<printDQMStrings>false</printDQMStrings>
@@ -202,12 +290,12 @@
<driver name="TrackingResidualsPairs1DQM" type="org.hps.analysis.dataquality.TrackingResiduals">
<overwriteDB>false</overwriteDB>
<printDQMStrings>false</printDQMStrings>
- <triggerType>pairs1</triggerType>
- </driver>
- <driver name="TrackingResidualsSingles1DQM" type="org.hps.analysis.dataquality.TrackingResiduals">
- <overwriteDB>false</overwriteDB>
- <printDQMStrings>false</printDQMStrings>
- <triggerType>singles1</triggerType>
+ <triggerType>pairs1</triggerType>
+ </driver>
+ <driver name="TrackingResidualsSingles1DQM" type="org.hps.analysis.dataquality.TrackingResiduals">
+ <overwriteDB>false</overwriteDB>
+ <printDQMStrings>false</printDQMStrings>
+ <triggerType>singles1</triggerType>
</driver>
<driver name="FinalStateDQM" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<overwriteDB>false</overwriteDB>
@@ -215,17 +303,38 @@
<triggerType>all</triggerType>
</driver>
+ <driver name="FinalStateL1to3DQMSingles1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
+ <finalStateParticlesColName>FinalStateParticlesL1to3</finalStateParticlesColName>
+ <overwriteDB>false</overwriteDB>
+ <printDQMStrings>false</printDQMStrings>
+ <triggerType>singles1</triggerType>
+ </driver>
+
+ <driver name="FinalStateL4to6DQMSingles1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
+ <finalStateParticlesColName>FinalStateParticlesL4to6</finalStateParticlesColName>
+ <overwriteDB>false</overwriteDB>
+ <printDQMStrings>false</printDQMStrings>
+ <triggerType>singles1</triggerType>
+ </driver>
+ <driver name="FinalStateL134DQMSingles1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
+ <finalStateParticlesColName>FinalStateParticlesL134</finalStateParticlesColName>
+ <overwriteDB>false</overwriteDB>
+ <printDQMStrings>false</printDQMStrings>
+ <triggerType>singles1</triggerType>
+ </driver>
<driver name="FinalStateDQMPairs1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<overwriteDB>false</overwriteDB>
<printDQMStrings>false</printDQMStrings>
<triggerType>pairs1</triggerType>
</driver>
+
+
<driver name="FinalStateDQMSingles1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<overwriteDB>false</overwriteDB>
<printDQMStrings>false</printDQMStrings>
<triggerType>singles1</triggerType>
</driver>
-
+
<driver name="V0DQM" type="org.hps.analysis.dataquality.V0Monitoring">
<overwriteDB>false</overwriteDB>
<printDQMStrings>false</printDQMStrings>
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java Thu May 28 13:39:26 2015
@@ -23,6 +23,7 @@
import org.lcsim.event.MCParticle;
import org.lcsim.event.RawTrackerHit;
import org.lcsim.event.Track;
+import org.lcsim.event.TrackState;
import org.lcsim.event.TrackerHit;
import org.lcsim.fit.helicaltrack.HelicalTrackFit;
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
@@ -31,14 +32,17 @@
import org.lcsim.fit.helicaltrack.HelixUtils;
import org.lcsim.fit.helicaltrack.HitUtils;
import org.lcsim.fit.helicaltrack.MultipleScatter;
+import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
+import org.lcsim.recon.tracking.seedtracker.SeedStrategy;
import org.lcsim.recon.tracking.seedtracker.SeedTrack;
import org.lcsim.util.swim.Helix;
/**
- * Assorted helper functions for the track and helix objects in lcsim. Re-use as much of HelixUtils
+ * Assorted helper functions for the track and helix objects in lcsim. Re-use as
+ * much of HelixUtils
* as possible.
- *
+ *
* @author Omar Moreno <[log in to unmask]>
*/
// TODO: Switch to tracking/LCsim coordinates for the extrapolation output!
@@ -52,8 +56,10 @@
}
/**
- * Extrapolate track to a position along the x-axis. Turn the track into a helix object in
+ * Extrapolate track to a position along the x-axis. Turn the track into a
+ * helix object in
* order to use HelixUtils.
+ *
* @param track
* @param x
* @return
@@ -64,6 +70,7 @@
/**
* Extrapolate helix to a position along the x-axis. Re-use HelixUtils.
+ *
* @param track
* @param x
* @return
@@ -75,7 +82,6 @@
// ==========================================================================
// Helper functions for track parameters and commonly used derived variables
-
public static double getPhi(Track track, Hep3Vector position) {
double x = Math.sin(getPhi0(track)) - (1 / getR(track)) * (position.x() - getX0(track));
double y = Math.cos(getPhi0(track)) + (1 / getR(track)) * (position.y() - getY0(track));
@@ -119,10 +125,12 @@
}
// ==========================================================================
-
- /**
- * Calculate the point of interception between the helix and a plane in space. Uses an iterative procedure.
- * This function makes assumptions on the sign and convecntion of the B-field. Be careful.
+ /**
+ * Calculate the point of interception between the helix and a plane in
+ * space. Uses an iterative procedure.
+ * This function makes assumptions on the sign and convecntion of the
+ * B-field. Be careful.
+ *
* @param helfit - helix
* @param unit_vec_normal_to_plane - unit vector normal to the plane
* @param point_on_plane - point on the plane
@@ -144,8 +152,10 @@
}
/**
- * Calculate the point of interception between the helix and a plane in space. Uses an
+ * Calculate the point of interception between the helix and a plane in
+ * space. Uses an
* iterative procedure.
+ *
* @param helfit - helix
* @param strip - strip cluster that will define the plane
* @param bfield - magnetic field value
@@ -174,11 +184,11 @@
// y_int = k*x_int + m
// R^2 = (y_int-y_c)^2 + (x_int-x_c)^2
// solve for x_int
-
}
/**
* Get position of a track extrapolated to the HARP in the HPS test run 2012
+ *
* @param track
* @return position at HARP
*/
@@ -187,7 +197,9 @@
}
/**
- * Get position of a track extrapolated to the ECAL face in the HPS test run 2012
+ * Get position of a track extrapolated to the ECAL face in the HPS test run
+ * 2012
+ *
* @param track
* @return position at ECAL
*/
@@ -197,8 +209,10 @@
/**
* Extrapolate track to given position.
+ *
* @param helix - to be extrapolated
- * @param track - position along the x-axis of the helix in lcsim coordiantes
+ * @param track - position along the x-axis of the helix in lcsim
+ * coordiantes
* @return
*/
public static Hep3Vector extrapolateTrack(Track track, double z) {
@@ -234,6 +248,7 @@
/**
* Extrapolate helix to given position
+ *
* @param helix - to be extrapolated
* @param z - position along the x-axis of the helix in lcsim coordiantes
* @return
@@ -254,7 +269,8 @@
* @param helix input helix object
* @param origin of the plane to intercept
* @param normal of the plane to intercept
- * @param eps criteria on the distance to the plane before stopping iteration
+ * @param eps criteria on the distance to the plane before stopping
+ * iteration
* @return position in space at the intercept of the plane
*/
public static Hep3Vector getHelixPlanePositionIter(HelicalTrackFit helix, Hep3Vector origin, Hep3Vector normal, double eps) {
@@ -314,79 +330,67 @@
// System.out.printf("pos %s xc %f phi_at_x %f dphi_at_x %f s_at_x %f\n",
// pos.toString(),xc,phi_at_x,dphi_at_x,s_at_x);
Hep3Vector posXCheck = TrackUtils.extrapolateHelixToXPlane(helix, x);
- if (VecOp.sub(pos, posXCheck).magnitude() > 0.0000001) {
+ if (VecOp.sub(pos, posXCheck).magnitude() > 0.0000001)
throw new RuntimeException(String.format("ERROR the helix propagation equations do not agree? (%f,%f,%f) vs (%f,%f,%f) in HelixUtils", pos.x(), pos.y(), pos.z(), posXCheck.x(), posXCheck.y(), posXCheck.z()));
- }
return pos;
}
/**
- *
- */
+ *
+ */
public static double findTriangleArea(double x0, double y0, double x1, double y1, double x2, double y2) {
return .5 * (x1 * y2 - y1 * x2 - x0 * y2 + y0 * x2 + x0 * y1 - y0 * x1);
}
/**
- *
- */
+ *
+ */
public static boolean sensorContainsTrack(Hep3Vector trackPosition, SiSensor sensor) {
boolean debug = false;
ITransform3D localToGlobal = sensor.getGeometry().getLocalToGlobal();
Box sensorSolid = (Box) sensor.getGeometry().getLogicalVolume().getSolid();
Polygon3D sensorFace = sensorSolid.getFacesNormalTo(new BasicHep3Vector(0, 0, 1)).get(0);
- if (debug) {
+ if (debug)
System.out.println("sensorContainsTrack: Track Position: " + trackPosition.toString());
- }
List<Point3D> vertices = new ArrayList<Point3D>();
- for (int index = 0; index < 4; index++) {
+ for (int index = 0; index < 4; index++)
vertices.add(new Point3D());
- }
- for (Point3D vertex : sensorFace.getVertices()) {
+ for (Point3D vertex : sensorFace.getVertices())
if (vertex.y() < 0 && vertex.x() > 0) {
localToGlobal.transform(vertex);
// vertices.set(0, new Point3D(vertex.y() + sensorPos.x(), vertex.x() +
// sensorPos.y(), vertex.z() + sensorPos.z()));
vertices.set(0, new Point3D(vertex.x(), vertex.y(), vertex.z()));
- if (debug) {
- System.out.println("sensorContainsTrack: Vertex 1 Position: " + vertices.get(0).toString());
- // System.out.println("sensorContainsTrack: Transformed Vertex 1 Position: " +
- // localToGlobal.transformed(vertex).toString());
- }
+ if (debug)
+ System.out.println("sensorContainsTrack: Vertex 1 Position: " + vertices.get(0).toString()); // System.out.println("sensorContainsTrack: Transformed Vertex 1 Position: " +
+ // localToGlobal.transformed(vertex).toString());
} else if (vertex.y() > 0 && vertex.x() > 0) {
localToGlobal.transform(vertex);
// vertices.set(1, new Point3D(vertex.y() + sensorPos.x(), vertex.x() +
// sensorPos.y(), vertex.z() + sensorPos.z()));
vertices.set(1, new Point3D(vertex.x(), vertex.y(), vertex.z()));
- if (debug) {
- System.out.println("sensorContainsTrack: Vertex 2 Position: " + vertices.get(1).toString());
- // System.out.println("sensorContainsTrack: Transformed Vertex 2 Position: " +
- // localToGlobal.transformed(vertex).toString());
- }
+ if (debug)
+ System.out.println("sensorContainsTrack: Vertex 2 Position: " + vertices.get(1).toString()); // System.out.println("sensorContainsTrack: Transformed Vertex 2 Position: " +
+ // localToGlobal.transformed(vertex).toString());
} else if (vertex.y() > 0 && vertex.x() < 0) {
localToGlobal.transform(vertex);
// vertices.set(2, new Point3D(vertex.y() + sensorPos.x(), vertex.x() +
// sensorPos.y(), vertex.z() + sensorPos.z()));
vertices.set(2, new Point3D(vertex.x(), vertex.y(), vertex.z()));
- if (debug) {
- System.out.println("sensorContainsTrack: Vertex 3 Position: " + vertices.get(2).toString());
- // System.out.println("sensorContainsTrack: Transformed Vertex 3 Position: " +
- // localToGlobal.transformed(vertex).toString());
- }
+ if (debug)
+ System.out.println("sensorContainsTrack: Vertex 3 Position: " + vertices.get(2).toString()); // System.out.println("sensorContainsTrack: Transformed Vertex 3 Position: " +
+ // localToGlobal.transformed(vertex).toString());
} else if (vertex.y() < 0 && vertex.x() < 0) {
localToGlobal.transform(vertex);
// vertices.set(3, new Point3D(vertex.y() + sensorPos.x(), vertex.x() +
// sensorPos.y(), vertex.z() + sensorPos.z()));
vertices.set(3, new Point3D(vertex.x(), vertex.y(), vertex.z()));
- if (debug) {
- System.out.println("sensorContainsTrack: Vertex 4 Position: " + vertices.get(3).toString());
- // System.out.println("sensorContainsTrack: Transformed Vertex 4 Position: " +
- // localToGlobal.transformed(vertex).toString());
- }
+ if (debug)
+ System.out.println("sensorContainsTrack: Vertex 4 Position: " + vertices.get(3).toString()); // System.out.println("sensorContainsTrack: Transformed Vertex 4 Position: " +
+ // localToGlobal.transformed(vertex).toString());
}
- }
double area1 = TrackUtils.findTriangleArea(vertices.get(0).x(), vertices.get(0).y(), vertices.get(1).x(), vertices.get(1).y(), trackPosition.y(), trackPosition.z());
double area2 = TrackUtils.findTriangleArea(vertices.get(1).x(), vertices.get(1).y(), vertices.get(2).x(), vertices.get(2).y(), trackPosition.y(), trackPosition.z());
@@ -414,7 +418,6 @@
}
// Calculate the residuals that are being used in the track fit
-
// Start with the bendplane y
double drphi_res = hth.drphi();
double wrphi = Math.sqrt(drphi_res * drphi_res + msdrphi * msdrphi);
@@ -504,10 +507,9 @@
// Find interception with plane that the strips belongs to
Hep3Vector trkpos = TrackUtils.getHelixPlaneIntercept(_trk, strip, Math.abs(bFieldInZ));
- if (debug) {
+ if (debug)
System.out.printf("calculateLocalTrackHitResiduals: strip u %s origin %s \n", u.toString(),corigin.toString());
System.out.printf("calculateLocalTrackHitResiduals: found interception point with sensor at %s \n", trkpos.toString());
- }
if (Double.isNaN(trkpos.x()) || Double.isNaN(trkpos.y()) || Double.isNaN(trkpos.z())) {
System.out.printf("calculateLocalTrackHitResiduals: failed to get interception point (%s) \n", trkpos.toString());
@@ -561,17 +563,16 @@
}
public static int[] getHitsInTopBottom(Track track) {
- int n[] = { 0, 0 };
+ int n[] = {0, 0};
List<TrackerHit> hitsOnTrack = track.getTrackerHits();
for (TrackerHit hit : hitsOnTrack) {
HelicalTrackHit hth = (HelicalTrackHit) hit;
//===> if (SvtUtils.getInstance().isTopLayer((SiSensor) ((RawTrackerHit) hth.getRawHits().get(0)).getDetectorElement())) {
HpsSiSensor sensor = ((HpsSiSensor) ((RawTrackerHit) hth.getRawHits().get(0)).getDetectorElement());
- if(sensor.isTopLayer()){
+ if (sensor.isTopLayer())
n[0] = n[0] + 1;
- } else {
+ else
n[1] = n[1] + 1;
- }
}
return n;
}
@@ -586,13 +587,12 @@
public static int isTopOrBottomTrack(Track track, int minhits) {
int nhits[] = getHitsInTopBottom(track);
- if (nhits[0] >= minhits && nhits[1] == 0) {
+ if (nhits[0] >= minhits && nhits[1] == 0)
return 1;
- } else if (nhits[1] >= minhits && nhits[0] == 0) {
+ else if (nhits[1] >= minhits && nhits[0] == 0)
return 0;
- } else {
+ else
return -1;
- }
}
public static boolean hasTopBotHit(Track track) {
@@ -609,10 +609,9 @@
List<TrackerHit> hitsOnTrack = track.getTrackerHits();
for (TrackerHit loop_hit : hitsOnTrack) {
HelicalTrackHit loop_hth = (HelicalTrackHit) loop_hit;
- if (hth.equals(loop_hth)) {
+ if (hth.equals(loop_hth))
// System.out.printf("share hit at layer %d at %s (%s) with track w/ chi2=%f\n",hth.Layer(),hth.getCorrectedPosition().toString(),loop_hth.getCorrectedPosition().toString(),track.getChi2());
return true;
- }
}
}
return false;
@@ -624,20 +623,17 @@
// System.out.printf("look for another track with chi2=%f and px=%f \n",track.getChi2(),track.getTrackStates().get(0).getMomentum()[0]);
for (Track t : tracklist) {
// System.out.printf("add track with chi2=%f and px=%f ?\n",t.getChi2(),t.getTrackStates().get(0).getMomentum()[0]);
- if (t.equals(track)) {
+ if (t.equals(track))
// System.out.printf("NOPE\n");
continue;
- }
// System.out.printf("YEPP\n");
tracks.add(t);
}
List<TrackerHit> hitsOnTrack = track.getTrackerHits();
int n_shared = 0;
- for (TrackerHit hit : hitsOnTrack) {
- if (isSharedHit(hit, tracks)) {
+ for (TrackerHit hit : hitsOnTrack)
+ if (isSharedHit(hit, tracks))
++n_shared;
- }
- }
return n_shared;
}
@@ -655,8 +651,8 @@
}
public static int passTrackSelections(Track track, List<Track> tracklist, EventQuality.Quality trk_quality) {
- int cuts[] = { 0 };
- if(trk_quality.compareTo(Quality.NONE) != 0) {
+ int cuts[] = {0};
+ if (trk_quality.compareTo(Quality.NONE) != 0) {
if (track.getTrackStates().get(0).getMomentum()[0] < EventQuality.instance().getCutValue(EventQuality.Cut.PZ, trk_quality))
cut(cuts, EventQuality.Cut.PZ);
if (track.getChi2() >= EventQuality.instance().getCutValue(EventQuality.Cut.CHI2, trk_quality))
@@ -680,24 +676,24 @@
}
/**
- * Transform MCParticle into a Helix object. Note that it produces the helix parameters at
+ * Transform MCParticle into a Helix object. Note that it produces the helix
+ * parameters at
* nominal x=0 and assumes that there is no field at x<0
- *
+ *
* @param mcp MC particle to be transformed
* @return helix object based on the MC particle
*/
public static HelicalTrackFit getHTF(MCParticle mcp, double Bz) {
boolean debug = true;
- if(debug) {
+ if (debug) {
System.out.printf("getHTF\n");
- System.out.printf("mcp org %s mc p %s\n",mcp.getOrigin().toString(),mcp.getMomentum().toString());
+ System.out.printf("mcp org %s mc p %s\n", mcp.getOrigin().toString(), mcp.getMomentum().toString());
}
Hep3Vector org = CoordinateTransformations.transformVectorToTracking(mcp.getOrigin());
Hep3Vector p = CoordinateTransformations.transformVectorToTracking(mcp.getMomentum());
- if(debug) {
- System.out.printf("mcp org %s mc p %s (trans)\n",org.toString(),p.toString());
- }
+ if (debug)
+ System.out.printf("mcp org %s mc p %s (trans)\n", org.toString(), p.toString());
// Move to x=0 if needed
double targetX = BeamlineConstants.DIPOLE_EDGELOW_TESTRUN;
@@ -715,9 +711,8 @@
// old.toString(),p.toString(),org.toString());
}
- if(debug) {
- System.out.printf("mcp org %s mc p %s (trans2)\n",org.toString(),p.toString());
- }
+ if (debug)
+ System.out.printf("mcp org %s mc p %s (trans2)\n", org.toString(), p.toString());
HelixParamCalculator helixParamCalculator = new HelixParamCalculator(p, org, -1 * ((int) mcp.getCharge()), Bz);
double par[] = new double[5];
@@ -727,17 +722,16 @@
par[HelicalTrackFit.curvatureIndex] = 1.0 / helixParamCalculator.getRadius();
par[HelicalTrackFit.z0Index] = helixParamCalculator.getZ0();
HelicalTrackFit htf = getHTF(par);
- System.out.printf("d0 %f z0 %f R %f phi %f lambda %s\n",
- htf.dca(),htf.z0(),htf.R(),htf.phi0(),htf.slope() );
+ System.out.printf("d0 %f z0 %f R %f phi %f lambda %s\n",
+ htf.dca(), htf.z0(), htf.R(), htf.phi0(), htf.slope());
return htf;
}
public static HelicalTrackFit getHTF(Track track) {
- if (track.getClass().isInstance(SeedTrack.class)) {
+ if (track.getClass().isInstance(SeedTrack.class))
return ((SeedTrack) track).getSeedCandidate().getHelix();
- } else {
+ else
return getHTF(track.getTrackStates().get(0).getParameters());
- }
}
public static HelicalTrackFit getHTF(double par[]) {
@@ -757,9 +751,8 @@
if (useFringe) {
// broken because you need ot provide the Field Map to get this...
// pos1 = hpstrk1.getPositionAtZMap(100.0, zVal, 5.0)[0];
- } else {
+ } else
pos1 = TrackUtils.extrapolateTrack(trk1, zVal);
- }
// System.out.printf("%s: Position1 at edge of fringe %s\n",this.getClass().getSimpleName(),pos1.toString());
Helix traj = (Helix) hpstrk1.getTrajectory();
if (traj == null) {
@@ -771,59 +764,99 @@
// System.out.printf("%s: straight line track: x0=%f,y0=%f,z0=%f dz/dx=%f dydx=%f targetY=%f targetZ=%f \n",this.getClass().getSimpleName(),slt1.x0(),slt1.y0(),slt1.z0(),slt1.dzdx(),slt1.dydx(),slt1.TargetYZ()[0],slt1.TargetYZ()[1]);
return slt1;
}
-
-
-
+
public static MCParticle getMatchedTruthParticle(Track track) {
boolean debug = false;
-
- Map<MCParticle,Integer> particlesOnTrack = new HashMap<MCParticle,Integer>();
-
- if(debug) System.out.printf("getMatchedTruthParticle: getmatched mc particle from %d tracker hits on the track \n",track.getTrackerHits().size());
-
-
- for(TrackerHit hit : track.getTrackerHits()) {
- List<MCParticle> mcps = ((HelicalTrackHit)hit).getMCParticles();
- if(mcps==null) {
- System.out.printf("getMatchedTruthParticle: warning, this hit (layer %d pos=%s) has no mc particles.\n",((HelicalTrackHit)hit).Layer(),((HelicalTrackHit)hit).getCorrectedPosition().toString());
- }
+
+ Map<MCParticle, Integer> particlesOnTrack = new HashMap<MCParticle, Integer>();
+
+ if (debug)
+ System.out.printf("getMatchedTruthParticle: getmatched mc particle from %d tracker hits on the track \n", track.getTrackerHits().size());
+
+ for (TrackerHit hit : track.getTrackerHits()) {
+ List<MCParticle> mcps = ((HelicalTrackHit) hit).getMCParticles();
+ if (mcps == null)
+ System.out.printf("getMatchedTruthParticle: warning, this hit (layer %d pos=%s) has no mc particles.\n", ((HelicalTrackHit) hit).Layer(), ((HelicalTrackHit) hit).getCorrectedPosition().toString());
else {
- if( debug ) System.out.printf("getMatchedTruthParticle: this hit (layer %d pos=%s) has %d mc particles.\n",((HelicalTrackHit)hit).Layer(),((HelicalTrackHit)hit).getCorrectedPosition().toString(),mcps.size());
- for(MCParticle mcp : mcps) {
- if( !particlesOnTrack.containsKey(mcp) ) {
+ if (debug)
+ System.out.printf("getMatchedTruthParticle: this hit (layer %d pos=%s) has %d mc particles.\n", ((HelicalTrackHit) hit).Layer(), ((HelicalTrackHit) hit).getCorrectedPosition().toString(), mcps.size());
+ for (MCParticle mcp : mcps) {
+ if (!particlesOnTrack.containsKey(mcp))
particlesOnTrack.put(mcp, 0);
- }
int c = particlesOnTrack.get(mcp);
- particlesOnTrack.put(mcp, c+1);
+ particlesOnTrack.put(mcp, c + 1);
}
}
}
- if(debug) {
- System.out.printf("Track p=[ %f, %f, %f] \n",track.getTrackStates().get(0).getMomentum()[0],track.getTrackStates().get(0).getMomentum()[1],track.getTrackStates().get(0).getMomentum()[1]);
- System.out.printf("Found %d particles\n",particlesOnTrack.size());
- for(Map.Entry<MCParticle, Integer> entry : particlesOnTrack.entrySet()) {
- System.out.printf("%d hits assigned to %d p=%s \n",entry.getValue(),entry.getKey().getPDGID(),entry.getKey().getMomentum().toString());
- }
- }
- Map.Entry<MCParticle,Integer> maxEntry = null;
- for(Map.Entry<MCParticle,Integer> entry : particlesOnTrack.entrySet()) {
- if ( maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0 ) maxEntry = entry;
- //if ( maxEntry != null ) {
- // if(entry.getValue().compareTo(maxEntry.getValue()) < 0) continue;
- //}
- //maxEntry = entry;
- }
- if(debug) {
- if (maxEntry != null ) {
+ if (debug) {
+ System.out.printf("Track p=[ %f, %f, %f] \n", track.getTrackStates().get(0).getMomentum()[0], track.getTrackStates().get(0).getMomentum()[1], track.getTrackStates().get(0).getMomentum()[1]);
+ System.out.printf("Found %d particles\n", particlesOnTrack.size());
+ for (Map.Entry<MCParticle, Integer> entry : particlesOnTrack.entrySet())
+ System.out.printf("%d hits assigned to %d p=%s \n", entry.getValue(), entry.getKey().getPDGID(), entry.getKey().getMomentum().toString());
+ }
+ Map.Entry<MCParticle, Integer> maxEntry = null;
+ for (Map.Entry<MCParticle, Integer> entry : particlesOnTrack.entrySet())
+ if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0)
+ maxEntry = entry; //if ( maxEntry != null ) {
+ // if(entry.getValue().compareTo(maxEntry.getValue()) < 0) continue;
+ //}
+ //maxEntry = entry;
+ if (debug)
+ if (maxEntry != null)
System.out.printf("Matched particle with pdgId=%d and mom %s to track with charge %d and momentum [%f %f %f]\n",
- maxEntry.getKey().getPDGID(),maxEntry.getKey().getMomentum().toString(),
- track.getCharge(),track.getTrackStates().get(0).getMomentum()[0],track.getTrackStates().get(0).getMomentum()[1],track.getTrackStates().get(0).getMomentum()[2]);
- } else {
+ maxEntry.getKey().getPDGID(), maxEntry.getKey().getMomentum().toString(),
+ track.getCharge(), track.getTrackStates().get(0).getMomentum()[0], track.getTrackStates().get(0).getMomentum()[1], track.getTrackStates().get(0).getMomentum()[2]);
+ else
System.out.printf("No truth particle found on this track\n");
- }
- }
return maxEntry == null ? null : maxEntry.getKey();
}
-
+
+ /*
+ try to make a seed track from a base track
+ ...some things are irretrivable (tracking strategy)..
+ and some things I just don't care much about to dig out (det name)
+ */
+ public static SeedTrack makeSeedTrackFromBaseTrack(Track track) {
+
+ TrackState trkState = track.getTrackStates().get(0);
+ // first make the HelicalTrackFit Object
+ double[] covArray = trkState.getCovMatrix();
+ SymmetricMatrix cov = new SymmetricMatrix(5, covArray, true);
+ double[] chisq = {track.getChi2(), 0};
+ int[] ndf = {track.getNDF(), 0};
+ Map<HelicalTrackHit, Double> smap = new HashMap<>(); // just leave these empty
+ Map<HelicalTrackHit, MultipleScatter> msmap = new HashMap<>();// just leave these empty
+ double[] pars = {trkState.getD0(), trkState.getPhi(), trkState.getOmega(), trkState.getZ0(), trkState.getTanLambda()};
+ HelicalTrackFit htf = new HelicalTrackFit(pars, cov, chisq, ndf, smap, msmap);
+ // now get the hits and make them helicaltrackhits
+ List<TrackerHit> rth = track.getTrackerHits();
+ List<HelicalTrackHit> hth = new ArrayList<>();
+ for (TrackerHit hit : rth)
+ hth.add(makeHelicalTrackHitFromTrackerHit(hit));
+// SeedCandidate(List<HelicalTrackHit> , SeedStrategy strategy, HelicalTrackFit helix, double bfield) ;
+ SeedCandidate scand = new SeedCandidate(hth, null, htf, 0.24);
+ SeedTrack st = new SeedTrack();
+ st.setSeedCandidate(scand);
+ return st;
+ }
+
+ /*
+ cast TrackerHit as HTH...this is pretty dumb; just a rearrangment of information
+ in TrackerHit. The important information that's in HTH but not
+ in Tracker hit is the HelicalTrackCrosses (and from there the individual strip clusters)
+ is lost; some work to get them back.
+ */
+ public static HelicalTrackHit makeHelicalTrackHitFromTrackerHit(TrackerHit hit) {
+ Hep3Vector pos = new BasicHep3Vector(hit.getPosition());
+ SymmetricMatrix hitcov = new SymmetricMatrix(3, hit.getCovMatrix(), true);
+ double dedx = hit.getdEdx();
+ double time = hit.getTime();
+ int type = hit.getType();
+ List rhits = hit.getRawHits();
+ String detname = "Foobar";
+ int layer = 666;
+ BarrelEndcapFlag beflag = BarrelEndcapFlag.BARREL;
+ return new HelicalTrackHit(pos, hitcov, dedx, time, type, rhits, detname, layer, beflag);
+ }
}
Added: java/trunk/users/src/main/java/org/hps/users/mgraham/ProfileDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/mgraham/ProfileDriver.java (added)
+++ java/trunk/users/src/main/java/org/hps/users/mgraham/ProfileDriver.java Thu May 28 13:39:26 2015
@@ -0,0 +1,15 @@
+package org.hps.users.mgraham;
+
+import java.io.IOException;
+
+/**
+ *
+ * @author mgraham
+ */
+public class ProfileDriver {
+ public static void main(String[] args) throws IOException {
+
+
+
+ }
+}
Added: java/trunk/users/src/main/java/org/hps/users/mgraham/SplitHitsOnTracks.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/mgraham/SplitHitsOnTracks.java (added)
+++ java/trunk/users/src/main/java/org/hps/users/mgraham/SplitHitsOnTracks.java Thu May 28 13:39:26 2015
@@ -0,0 +1,66 @@
+package org.hps.users.mgraham;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.recon.tracking.seedtracker.SeedTrack;
+import org.lcsim.util.Driver;
+
+/**
+ *
+ * @author mgraham
+ * Split the HelicalTrackHit collection into hits that
+ * are on a track and hits that are not
+ *
+ */
+public class SplitHitsOnTracks extends Driver {
+
+ private String trackCollectionName = "MatchedTracks";
+ private String inputHitCollectionName = "RotatedHelicalTrackHits";
+ private String onTrackCollectionName = "OnTrackHits";
+ private String offTrackCollectionName = "OffTrackHits";
+
+ public void setTrackCollectionName(String name) {
+ this.trackCollectionName = name;
+ }
+
+ public void setInputHitCollectionName(String name) {
+ this.inputHitCollectionName = name;
+ }
+
+ public void setOnTrackHitCollectionName(String name) {
+ this.onTrackCollectionName = name;
+ }
+
+ public void setOffTrackHitCollectionName(String name) {
+ this.offTrackCollectionName = name;
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ if (!event.hasCollection(TrackerHit.class, inputHitCollectionName))
+ return;
+ if (!event.hasCollection(Track.class, trackCollectionName))
+ return;
+ List<Track> tracks = event.get(Track.class, trackCollectionName);
+ List<HelicalTrackHit> onTrack = new ArrayList<HelicalTrackHit>();
+ for (Track trk : tracks) {
+ SeedTrack st = (SeedTrack) trk;
+ List<HelicalTrackHit> theseHits = st.getSeedCandidate().getHits();
+ for (HelicalTrackHit hth : theseHits)
+ if (!onTrack.contains(hth))
+ onTrack.add(hth);
+ }
+ List<HelicalTrackHit> offTrack = new ArrayList<HelicalTrackHit>();
+ List<HelicalTrackHit> allHits = event.get(HelicalTrackHit.class, inputHitCollectionName);
+ for (HelicalTrackHit hth : allHits)
+ if (!onTrack.contains(hth))
+ offTrack.add(hth);
+
+ event.put(onTrackCollectionName, onTrack, HelicalTrackHit.class, 0);
+ event.put(offTrackCollectionName, offTrack, HelicalTrackHit.class, 0);
+ }
+}
|