hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.32 -r1.33
--- TrackUtils.java 15 Oct 2013 00:57:24 -0000 1.32
+++ TrackUtils.java 16 Oct 2013 19:50:51 -0000 1.33
@@ -5,6 +5,7 @@
import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.Hep3Matrix;
import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.SpacePoint;
import hep.physics.vec.VecOp;
import java.util.ArrayList;
@@ -31,16 +32,19 @@
import org.lcsim.fit.helicaltrack.MultipleScatter;
import org.lcsim.hps.event.BeamlineConstants;
import org.lcsim.hps.event.HPSTransformations;
+import org.lcsim.hps.recon.vertexing.HelixConverter;
+import org.lcsim.hps.recon.vertexing.StraightLineTrack;
import org.lcsim.hps.users.phansson.WTrack;
import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
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 as possible.
*
* @author Omar Moreno <[log in to unmask]>
- * @version $Id: TrackUtils.java,v 1.32 2013/10/15 00:57:24 phansson Exp $
+ * @version $Id: TrackUtils.java,v 1.33 2013/10/16 19:50:51 phansson Exp $
* TODO: Switch to tracking/LCsim coordinates for the extrapolation output!
*/
@@ -705,6 +709,29 @@
HelicalTrackFit htf = new HelicalTrackFit(par, cov, new double[2], new int[2], null, null);
return htf;
}
+
+ public static StraightLineTrack findSLTAtZ(Track trk1, double zVal, boolean useFringe) {
+ SeedTrack s1 = (SeedTrack) trk1;
+ HelicalTrackFit htf1 = s1.getSeedCandidate().getHelix();
+ HPSTrack hpstrk1 = new HPSTrack(htf1);
+ Hep3Vector pos1;
+ if(useFringe) {
+ pos1 = hpstrk1.getPositionAtZMap(100.0, zVal, 5.0)[0];
+ } 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) {
+ SpacePoint r0 = new SpacePoint(HelixUtils.PointOnHelix(htf1,0));
+ traj = new Helix(r0,htf1.R(), htf1.phi0(), Math.atan(htf1.slope()));
+ }
+ HelixConverter converter = new HelixConverter(0.);
+ StraightLineTrack slt1 =converter.Convert(traj);
+ //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;
+ }
+
}
hps-java/src/main/java/org/lcsim/hps/users/phansson
diff -u -r1.25 -r1.26
--- TwoTrackAnlysis.java 15 Oct 2013 00:57:24 -0000 1.25
+++ TwoTrackAnlysis.java 16 Oct 2013 19:50:51 -0000 1.26
@@ -102,7 +102,7 @@
private IHistogram1D _trk_y_at_conv_bot_neg_fr;
private IHistogram1D _trk_z_at_conv_bot_neg_fr;
- public class CmpTrack implements Comparable<CmpTrack> {
+ private class CmpTrack implements Comparable<CmpTrack> {
private Track _track;
public CmpTrack(Track track) {
_track = track;
@@ -176,12 +176,9 @@
List<Track> tracklist = null;
if(event.hasCollection(Track.class,trackCollectionName)) {
tracklist = event.get(Track.class, trackCollectionName);
- if(_debug)
- System.out.println(this.getClass().getSimpleName() + ": Number of Tracks = " + tracklist.size() + " in event " + event.getEventNumber());
+ if(_debug) System.out.println(this.getClass().getSimpleName() + ": Number of Tracks = " + tracklist.size() + " in event " + event.getEventNumber());
} else {
- if(_debug) {
- System.out.println(this.getClass().getSimpleName() + ": No track collection in event " + event.getEventNumber());
- }
+ if(_debug) System.out.println(this.getClass().getSimpleName() + ": No track collection in event " + event.getEventNumber());
return;
}
@@ -216,30 +213,10 @@
}
Collections.sort(tracks);
-
- if(_debug) {
- CmpTrack trk_prev = null;
- for(CmpTrack trk:tracks) {
- if(trk_prev!=null) {
- if(trk_prev._track.getTrackStates().get(0).getMomentum()[0]<trk._track.getTrackStates().get(0).getMomentum()[0]) {
- //throw new RuntimeException(String.format("%s: ERROR prev px=%f trk=%f",this.getClass().getSimpleName(),trk_prev._track.getTrackStates().get(0).getMomentum()[0],trk._track.getTrackStates().get(0).getMomentum()[0]));
- System.out.printf("%s\n",String.format("%s: ERROR prev px=%f trk=%f",this.getClass().getSimpleName(),trk_prev._track.getTrackStates().get(0).getMomentum()[0],trk._track.getTrackStates().get(0).getMomentum()[0]));
- } else {
- System.out.printf("%s\n",String.format("%s: OK prev px=%f trk=%f",this.getClass().getSimpleName(),trk_prev._track.getTrackStates().get(0).getMomentum()[0],trk._track.getTrackStates().get(0).getMomentum()[0]));
- }
- }
- trk_prev = trk;
-
- }
- }
Hep3Vector vtxPos = null;
Hep3Vector vtxPosFringe = null;
Hep3Vector vtxPosNonBend = null;
-
-
-
-
if(tracks.size()>1) {
Track trk1 = tracks.get(0)._track;
@@ -247,23 +224,24 @@
this.vertexer.setTracks(trk1, trk2);
vtxPos = this.vertexer.getVertex();
- if(this._debug)
+ vtxPosFringe = this.vertexer.getVertexWithFringe();
+
+ if(this._debug) {
System.out.printf("%s: vtxPos=%s\n", this.getClass().getSimpleName(),vtxPos.toString());
+ System.out.printf("%s: vtxPosFringe=%s\n", this.getClass().getSimpleName(),vtxPosFringe.toString());
+ }
+
if(vtxPos.x() != vtxPos.x()) {
System.out.printf("%s: vtxPos is NaN -> Skip\n",this.getClass().getSimpleName());
vtxPos = null;
}
-
- vtxPosFringe = this.vertexer.getVertexWithFringe();
- if(this._debug)
- System.out.printf("%s: vtxPosFringe=%s\n", this.getClass().getSimpleName(),vtxPosFringe.toString());
if(vtxPosFringe.x() != vtxPosFringe.x()) {
System.out.printf("%s: vtxPosFringe is NaN -> Skip\n",this.getClass().getSimpleName());
vtxPos = null;
}
-
- StraightLineTrack[] slts = this.getSLTs(trk1, trk2, false);
- double zAtCross = this.getCrossingS(trk1, trk2, false);
+ boolean useFringe = false;
+ StraightLineTrack[] slts = this.getSLTs(trk1, trk2, useFringe);
+ double zAtCross = this.getCrossingS(trk1, trk2);
double[] xyAtZ1 = slts[0].calculateXYAtZ(zAtCross);
double[] xyAtZ2 = slts[1].calculateXYAtZ(zAtCross);
@@ -742,27 +720,11 @@
HashMap<Integer,HelicalTrackHit> map = new HashMap<Integer,HelicalTrackHit>();
for(TrackerHit hit : hits) {
HelicalTrackHit hth = (HelicalTrackHit) hit;
- HelicalTrackCross htc = (HelicalTrackCross) hth;
- //System.out.printf("%s: getHitMap: hth position before trkdir: (%.3f,%.3f,%.3f)\n",this.getClass().getSimpleName(),hth.x(),hth.y(),hth.z());
- //htc.setTrackDirection(helix);
- //System.out.printf("%s: getHitMap: hth position after trkdir: (%.3f,%.3f,%.3f)\n",this.getClass().getSimpleName(),hth.x(),hth.y(),hth.z());
map.put(hth.Layer(), hth);
}
return map;
}
- private HashMap<Integer,HelicalTrackStrip> getStripHitMap(List<TrackerHit> hits) {
- HashMap<Integer,HelicalTrackStrip> map = new HashMap<Integer,HelicalTrackStrip>();
- for(TrackerHit hit : hits) {
- HelicalTrackHit hth = (HelicalTrackHit) hit;
- HelicalTrackCross htc = (HelicalTrackCross) hth;
- HelicalTrackStrip s1 = htc.getStrips().get(0);
- HelicalTrackStrip s2 = htc.getStrips().get(1);
- map.put(s1.layer(), s1);
- map.put(s2.layer(), s2);
- }
- return map;
- }
private HashMap<Integer,List<HelicalTrackStrip>> getStripHitsMap(List<TrackerHit> hits) {
HashMap<Integer,List<HelicalTrackStrip>> map = new HashMap<Integer,List<HelicalTrackStrip>>();
@@ -820,9 +782,6 @@
return map;
}
- private int[] getNtracks(List<CmpTrack> tracks) {
- return this.getNtracks(tracks, 0.);
- }
private int[] getNtracks(List<CmpTrack> tracks, double min_px) {
//System.out.printf("%s: getNtracks for %d tracks with min_px=%.3f \n",this.getClass().getSimpleName(),tracks.size(),min_px);
int n[] = {0,0};
@@ -978,7 +937,7 @@
* Find the path length where the two helix cross in the non-bend plane
*/
- public double getCrossingS(Track trk1, Track trk2, boolean useFringe) {
+ private double getCrossingS(Track trk1, Track trk2) {
double slope_1 = ((SeedTrack)trk1).getSeedCandidate().getHelix().slope();
double slope_2 = ((SeedTrack)trk2).getSeedCandidate().getHelix().slope();
double z0_1 = ((SeedTrack)trk1).getSeedCandidate().getHelix().z0();
@@ -990,39 +949,20 @@
}
- public StraightLineTrack[] getSLTs(Track trk1, Track trk2, boolean useFringe) {
+ private StraightLineTrack[] getSLTs(Track trk1, Track trk2, boolean useFringe) {
// find the point on the x- and y-axis by
// 1) go outside the fringe region
// 2) assume straight lines
// 3) solve for the position where the z-position is at the crossing point
double zStart = useFringe==true ? -100. : 0.;
- StraightLineTrack slt1 = this.findSLTAtZ(trk1,zStart,useFringe);
- StraightLineTrack slt2 = this.findSLTAtZ(trk2,zStart,useFringe);
+ StraightLineTrack slt1 = TrackUtils.findSLTAtZ(trk1,zStart,useFringe);
+ StraightLineTrack slt2 = TrackUtils.findSLTAtZ(trk2,zStart,useFringe);
StraightLineTrack[] vv = {slt1,slt2};
return vv;
}
- public StraightLineTrack findSLTAtZ(Track trk1, double zVal, boolean useFringe) {
- SeedTrack s1 = (SeedTrack) trk1;
- HelicalTrackFit htf1 = s1.getSeedCandidate().getHelix();
- HPSTrack hpstrk1 = new HPSTrack(htf1);
- Hep3Vector pos1;
- if(useFringe) {
- pos1 = hpstrk1.getPositionAtZMap(100.0, zVal, 5.0)[0];
- } 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) {
- SpacePoint r0 = new SpacePoint(HelixUtils.PointOnHelix(htf1,0));
- traj = new Helix(r0,htf1.R(), htf1.phi0(), Math.atan(htf1.slope()));
- }
- StraightLineTrack slt1 = this.vertexer.converter().Convert(traj);
- //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;
- }
+
/*
@@ -1032,7 +972,7 @@
* slope: slope of track in SZ plane
* z0: z-coordinate at which S=0
*/
- public double getPathLengthCrossingPoint(double slope_1,double z0_1,double slope_2,double z0_2) {
+ private double getPathLengthCrossingPoint(double slope_1,double z0_1,double slope_2,double z0_2) {
double s; //path length
s = (z0_1-z0_2)/(slope_2-slope_1);
return s;
hps-java/src/main/resources/org/lcsim/hps/steering/users/phansson
diff -u -r1.7 -r1.8
--- TwoTrackAnalysis.lcsim 11 Oct 2013 22:15:59 -0000 1.7
+++ TwoTrackAnalysis.lcsim 16 Oct 2013 19:50:51 -0000 1.8
@@ -6,7 +6,7 @@
-->
</inputFiles>
<control>
- <numberOfEvents>1000</numberOfEvents>
+ <numberOfEvents>-1</numberOfEvents>
<printInputFiles>true</printInputFiles>
<printDriversDetailed>true</printDriversDetailed>
</control>
@@ -25,8 +25,8 @@
<!-- <driver name="TruthMomentumAnalysis"/> -->
<!-- <driver name="HelicalTrackHitResidualsDriver"/> -->
<!-- <driver name="LCIOWriter"/> -->
-<!-- <driver name="TwoTrackAnalysis"/> -->
- <driver name="GBLDriver"/>
+ <driver name="TwoTrackAnalysis"/>
+<!-- <driver name="GBLDriver"/> -->
<!-- <driver name="PrintGeometryDriver"/>-->
@@ -44,7 +44,7 @@
<driver name="TwoTrackAnalysis"
type="org.lcsim.hps.users.phansson.TwoTrackAnlysis">
<debug>false</debug>
- <hideFrame>false</hideFrame>
+ <hideFrame>true</hideFrame>
<outputPlotFileName></outputPlotFileName>
<outputNameTextTuple>${outputFile}</outputNameTextTuple>
<trackCollectionName>MatchedTracks</trackCollectionName>
@@ -89,7 +89,6 @@
<driver name="HelicalTrackHitDriver"
type="org.lcsim.hps.recon.tracking.HelicalTrackHitDriver">
<debug>false</debug>
- <layerGeometryType>Split</layerGeometryType>
<maxSeperation>20.0</maxSeperation>
<tolerance>1.0</tolerance>
</driver>
@@ -97,7 +96,6 @@
type="org.lcsim.hps.recon.tracking.TrackerReconDriver">
<debug>false</debug>
<strategyResource>/org/lcsim/hps/recon/tracking/strategies/HPS-TestRun-357.xml</strategyResource>
- <useHPSMaterialManager>true</useHPSMaterialManager>
</driver>
<driver name="EcalRawConverter" type="org.lcsim.hps.recon.ecal.EcalRawConverterDriver">
<ecalCollectionName>EcalCalHits</ecalCollectionName>