Commit in hps-java/src/main/java/org/lcsim/hps on MAIN | |||
recon/tracking/HPSTrack.java | +38 | -1 | 1.4 -> 1.5 |
recon/vertexing/HelixConverter.java | +29 | 1.1 -> 1.2 | |
/TwoTrackVertexer.java | +84 | -1 | 1.1 -> 1.2 |
users/phansson/TwoTrackAnlysis.java | +20 | -21 | 1.9 -> 1.10 |
+171 | -23 |
Added helix to line converter, adding fringe field to doca vertexer, added accuracy to bfield propagation.
diff -u -r1.4 -r1.5 --- HPSTrack.java 28 Sep 2012 22:13:46 -0000 1.4 +++ HPSTrack.java 13 Mar 2013 19:29:52 -0000 1.5 @@ -384,7 +384,40 @@
} totalS += step; }
-
+ + //Go with finer granularity in the end + rTmp = _trajectory.getPointAtDistance(0); + xtmp = rTmp.x(); + pTmp = VecOp.mult(pTot, _trajectory.getUnitTangentAtLength(step)); + pXTmp = pTmp.x(); + step = step/10.0; + + while (Math.signum(step) * xtmp < Math.signum(step) * xFinal && Math.signum(pXOrig * pXTmp) > 0) { + if (_debugForward) { + System.out.println("New step in Fringe Field"); + System.out.println("rTmp = " + rTmp.toString()); + System.out.println("pTmp = " + pTmp.toString()); + System.out.println("OriginalHelix pos = " + HelixUtils.PointOnHelix(this, totalS)); + System.out.println("OriginalHelix Momentum = " + VecOp.mult(pTot, HelixUtils.Direction(this, totalS))); + } + + double myBField = FieldMap.getFieldFromMap(rTmp.x(), rTmp.y()); + if (_debugForward) { + System.out.println("rTmp.x() = " + rTmp.x() + " field = " + myBField); + } + setTrack(pTmp, rTmp, q, myBField); + rTmp = _trajectory.getPointAtDistance(step); + pTmp = VecOp.mult(pTot, _trajectory.getUnitTangentAtLength(step)); + pXTmp = pTmp.x(); + xtmp = rTmp.x(); + if (_debugForward) { + System.out.println("############## done... #############"); + + System.out.println("\n"); + } + totalS += step; + } +
//ok, done with field. Hep3Vector pointInTrking = new BasicHep3Vector(rTmp.x(), rTmp.y(), rTmp.z()); if (_debugForward) {
@@ -454,4 +487,8 @@
_trajectory = new Line(r0, phi, lambda); } }
+ + public Trajectory getTrajectory() { + return this._trajectory; + }
}
diff -u -r1.1 -r1.2 --- HelixConverter.java 1 Jun 2011 17:10:13 -0000 1.1 +++ HelixConverter.java 13 Mar 2013 19:29:52 -0000 1.2 @@ -6,7 +6,12 @@
import hep.physics.matrix.MatrixOp; import hep.physics.matrix.MutableMatrix; import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.Hep3Vector; +import java.util.Map;
import org.lcsim.fit.helicaltrack.HelicalTrackFit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit; +import org.lcsim.fit.helicaltrack.MultipleScatter; +import org.lcsim.util.swim.Helix;
/** * Convert a helix to a straight line track at a specified reference plane normal to the x axis.
@@ -96,6 +101,30 @@
return new StraightLineTrack(xref, yref, zref, dydx, dzdx, scov); }
+ /** + * Convert a helix to a StraightLineTrack. + * + * @param helix helix to be converted + * @return resulting StraightLineTrack + */ + public StraightLineTrack Convert(Helix helix) { + + Hep3Vector unitVec = helix.getUnitTangentAtLength(0); + Hep3Vector posVec = helix.getPointAtDistance(0); + double dzdx = unitVec.z()/unitVec.x(); + double dydx = unitVec.y()/unitVec.x(); + double zref = posVec.z() - dzdx*(posVec.x()-_xref); + double yref = posVec.y() - dydx*(posVec.x()-_xref); + SymmetricMatrix scov = null; + StraightLineTrack slt = new StraightLineTrack(_xref, yref, zref, dydx, dzdx, scov); + //System.out.printf("%s: unitVec %s posVec %s\n",this.getClass().getSimpleName(),unitVec.toString(),posVec.toString()); + //System.out.printf("%s: dzdx=%f dydx=%s\n",this.getClass().getSimpleName(),dzdx,dydx); + //System.out.printf("%s: ref = %f,%f,%f\n",this.getClass().getSimpleName(),_xref,yref,zref); + return slt; + } + + +
/** * Returns the transpose of the matrix (inexplicably not handled by * the matrix package for non-square matrices).
diff -u -r1.1 -r1.2 --- TwoTrackVertexer.java 22 Dec 2012 20:42:51 -0000 1.1 +++ TwoTrackVertexer.java 13 Mar 2013 19:29:52 -0000 1.2 @@ -4,10 +4,17 @@
*/ package org.lcsim.hps.recon.vertexing;
+import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.Hep3Vector; import hep.physics.vec.VecOp; import org.lcsim.event.Track;
+import org.lcsim.fit.helicaltrack.HelicalTrackFit; +import org.lcsim.fit.helicaltrack.HelixUtils; +import org.lcsim.hps.recon.tracking.HPSTrack;
import org.lcsim.hps.recon.tracking.SvtTrackExtrapolator;
+import org.lcsim.recon.tracking.seedtracker.SeedCandidate; +import org.lcsim.recon.tracking.seedtracker.SeedTrack; +import org.lcsim.util.swim.Helix;
/** *
@@ -15,6 +22,7 @@
*/ public class TwoTrackVertexer extends TwoLineVertexer { private SvtTrackExtrapolator trackExtraPolator = new SvtTrackExtrapolator();
+ private HelixConverter converter = new HelixConverter(0.);
private Track trk1; private Track trk2;
@@ -43,6 +51,81 @@
Hep3Vector B2 = this.getPosition(trk2, SvtTrackExtrapolator.HARP_POSITION); return getVertexPosition(VecOp.mult(_detToTrk.getMatrix(), A1), VecOp.mult(_detToTrk.getMatrix(), A2), VecOp.mult(_detToTrk.getMatrix(), B1), VecOp.mult(_detToTrk.getMatrix(), B2)); }
-
+ + public Hep3Vector getVertexWithFringe() { + SeedTrack s1 = (SeedTrack) trk1; + HelicalTrackFit htf1 = s1.getSeedCandidate().getHelix(); + HPSTrack hpstrk1 = new HPSTrack(htf1); + SeedTrack s2 = (SeedTrack) trk2; + HelicalTrackFit htf2 = s2.getSeedCandidate().getHelix(); + HPSTrack hpstrk2 = new HPSTrack(htf2); + boolean debug = false; + + Hep3Vector posAtConv1 = hpstrk1.getPositionAtZMap(100.0, SvtTrackExtrapolator.HARP_POSITION, 5.0)[0]; + Hep3Vector posAtConv2 = hpstrk2.getPositionAtZMap(100.0, SvtTrackExtrapolator.HARP_POSITION, 5.0)[0]; + + StraightLineTrack slt1_conv = converter.Convert((Helix)hpstrk1.getTrajectory()); + StraightLineTrack slt2_conv = converter.Convert((Helix)hpstrk2.getTrajectory()); + + Hep3Vector A1 = new BasicHep3Vector(slt1_conv.x0(),slt1_conv.y0(),slt1_conv.z0()); + Hep3Vector B1 = new BasicHep3Vector(slt2_conv.x0(),slt2_conv.y0(),slt2_conv.z0()); + + double YZAtConv1[] = slt1_conv.getYZAtX(SvtTrackExtrapolator.HARP_POSITION); + double YZAtConv2[] = slt2_conv.getYZAtX(SvtTrackExtrapolator.HARP_POSITION); + + Hep3Vector A2 = new BasicHep3Vector(SvtTrackExtrapolator.HARP_POSITION,YZAtConv1[0],YZAtConv1[1]); + Hep3Vector B2 = new BasicHep3Vector(SvtTrackExtrapolator.HARP_POSITION,YZAtConv2[0],YZAtConv2[1]); + + + + if(debug) { + System.out.printf("%s: original track1 direction at x=0 %s \n",this.getClass().getSimpleName(),HelixUtils.Direction(hpstrk1,0.).toString()); + System.out.printf("%s: original track2 direction at x=0 %s \n",this.getClass().getSimpleName(),HelixUtils.Direction(hpstrk2,0.).toString()); + System.out.printf("%s: track1 direction at conv %s \n",this.getClass().getSimpleName(),hpstrk1.getTrajectory().getUnitTangentAtLength(0.).toString()); + System.out.printf("%s: track2 direction at conv %s \n",this.getClass().getSimpleName(),hpstrk2.getTrajectory().getUnitTangentAtLength(0.).toString()); + + + System.out.printf("%s: pos at converter track1 %s \n",this.getClass().getSimpleName(),posAtConv1.toString()); + System.out.printf("%s: pos at converter track2 %s \n",this.getClass().getSimpleName(),posAtConv2.toString()); + //System.out.printf("%s: dir at converter track1 %s (at 0: %s) \n",this.getClass().getSimpleName(),dirConv1.toString(),dirZero1.toString()); + //System.out.printf("%s: dir at converter track2 %s (at 0: %s) \n",this.getClass().getSimpleName(),dirConv2.toString(),dirZero2.toString()); + System.out.printf("%s: A1 %s \n",this.getClass().getSimpleName(),A1.toString()); + System.out.printf("%s: A2 %s \n",this.getClass().getSimpleName(),A2.toString()); + System.out.printf("%s: B1 %s \n",this.getClass().getSimpleName(),B1.toString()); + System.out.printf("%s: B2 %s \n",this.getClass().getSimpleName(),B2.toString()); + + } + + Hep3Vector vtxpos = getVertexPosition(A1, A2, B1, B2); + + if(debug) { + System.out.printf("%s: vtxpos = %s (w/o fringe = %s)\n",this.getClass().getSimpleName(),vtxpos.toString(),this.getVertex().toString()); + } + /* + StraightLineTrack sl1 = converter.Convert(hpstrk1.getTrajectory().); + StraightLineTrack sl2 = converter.Convert(htf2); + + Hep3Vector A1 = new BasicHep3Vector(sl1.x0(),sl1.y0(),sl1.z0()); + Hep3Vector B1 = new BasicHep3Vector(sl2.x0(),sl2.y0(),sl2.z0()); + + double yzAtX1[] = sl1.getYZAtX(SvtTrackExtrapolator.HARP_POSITION); + double yzAtX2[] = sl2.getYZAtX(SvtTrackExtrapolator.HARP_POSITION); + + Hep3Vector A2 = new BasicHep3Vector(SvtTrackExtrapolator.HARP_POSITION,yzAtX1[0],yzAtX1[1]); + Hep3Vector B2 = new BasicHep3Vector(SvtTrackExtrapolator.HARP_POSITION,yzAtX2[0],yzAtX2[1]); + + + Hep3Vector vtxpos = getVertexPosition(A1, A2, B1, B2); + if(debug) { + System.out.printf("%s: w/ fringe posAtConv1=%s posAtConv2=%s \n",this.getClass().getSimpleName(),posAtConv1.toString(),posAtConv2.toString()); + System.out.printf("%s: w/o fringe posAtConv1=%s posAtConv2=%s \n",this.getClass().getSimpleName(),this.getPosition(trk1, SvtTrackExtrapolator.HARP_POSITION).toString(),this.getPosition(trk2, SvtTrackExtrapolator.HARP_POSITION).toString()); + System.out.printf("%s: A1=%s A2=%s\n",this.getClass().getSimpleName(),A1.toString(),A2.toString()); + System.out.printf("%s: B1=%s B2=%s\n",this.getClass().getSimpleName(),A1.toString(),A2.toString()); + System.out.printf("%s: vyxpos = %s (w/o fringe = %s)\n",this.getClass().getSimpleName(),vtxpos.toString(),this.getVertex().toString()); + } + */ + return vtxpos; + } +
}
diff -u -r1.9 -r1.10 --- TwoTrackAnlysis.java 11 Mar 2013 04:06:51 -0000 1.9 +++ TwoTrackAnlysis.java 13 Mar 2013 19:29:52 -0000 1.10 @@ -153,15 +153,6 @@
totalEvents++;
- if(this._debug) { - - if(!event.hasCollection(TriggerData.class, triggerDecisionCollectionName)) { - System.out.println( "Event has NO trigger bank"); - } else { - System.out.println( "Event has trigger bank"); - } - } - //if(1==1) return;
List<Track> tracklist = null;
@@ -187,9 +178,9 @@
} if(tracklist.size()!=2) {
- //if(_debug) {
+ if(_debug) {
System.out.printf("%s: event %d has only %d tracks \n",this.getClass().getSimpleName(),event.getEventNumber(),tracklist.size());
- //}
+ }
return; }
@@ -255,16 +246,22 @@
this.vertexer.setTracks(trk1, trk2); Hep3Vector vtxPos = this.vertexer.getVertex();
- if(this._debug) System.out.printf("%s: vtxPos=%s\n", this.getClass().getSimpleName(),vtxPos.toString());
+ if(this._debug) + System.out.printf("%s: vtxPos=%s\n", this.getClass().getSimpleName(),vtxPos.toString());
if(vtxPos.x() != vtxPos.x()) { System.out.printf("%s: vtxPos is NaN -> Skip\n",this.getClass().getSimpleName()); return; }
- if(vtxPos.x()>50.) { - System.out.printf("%s: vtxPos_x = %.3f for event %d\n",this.getClass().getSimpleName(),vtxPos.x(),event.getEventNumber());
+ Hep3Vector 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()); + return;
}
+
if(!event.hasCollection(HPSEcalCluster.class, ecalClusterCollectionName)) { if(_debug) {
@@ -351,7 +348,7 @@
totalTwoTrackEvents++;
- this.fillTextTuple(electron, positron, trk1, trk2, vtxPosMC, vtxPos, clusters, event);
+ this.fillTextTuple(electron, positron, trk1, trk2, vtxPosMC, vtxPos, vtxPosFringe, clusters, event);
if(this._debug) System.out.println(this.getClass().getSimpleName() + ": # two track events so far = "+totalTwoTrackEvents);
@@ -396,7 +393,7 @@
return f.length() == 0; //return zero also in case file doesn't exist }
- private void fillTextTuple(MCParticle e, MCParticle p, Track trk1, Track trk2, Hep3Vector vtxPosParticle, Hep3Vector vtxPos,List<HPSEcalCluster> clusters, EventHeader event) {
+ private void fillTextTuple(MCParticle e, MCParticle p, Track trk1, Track trk2, Hep3Vector vtxPosParticle, Hep3Vector vtxPos, Hep3Vector vtxPosFr, List<HPSEcalCluster> clusters, EventHeader event) {
if(doPrintBranchInfoLine) { String br_line = ""; br_line+="evtnr/I:";
@@ -429,6 +426,7 @@
for(int iLayer=1;iLayer<=10;++iLayer) br_line+="bot_stereo"+iLayer+"_n/F:"; br_line+="vtx_truth_x/F:vtx_truth_y/F:vtx_truth_z/F:"; br_line+="vtx_x/F:vtx_y/F:vtx_z/F:";
+ br_line+="vtx_fr_x/F:vtx_fr_y/F:vtx_fr_z/F:";
br_line+="trk1_conv_x/F:trk1_conv_y/F:trk1_conv_z/F:"; br_line+="trk2_conv_x/F:trk2_conv_y/F:trk2_conv_z/F:"; br_line+="cl1_E/F:cl1_ix/I:cl1_iy/I:";
@@ -588,6 +586,7 @@
else printWriter.format("%5.5f %5.5f %5.5f ", -9999999., -9999999., -9999999. ); //Track vtx printWriter.format("%5.5f %5.5f %5.5f ", vtxPos.x(),vtxPos.y(),vtxPos.z() );
+ printWriter.format("%5.5f %5.5f %5.5f ", vtxPosFr.x(),vtxPosFr.y(),vtxPosFr.z() );
//Track at converter this.vertexer.extrapolator().setTrack(trk1); Hep3Vector posAtConverter = this.vertexer.extrapolator().extrapolateTrack(SvtTrackExtrapolator.HARP_POSITION);
@@ -623,18 +622,18 @@
private TriggerData getTriggerInfo(EventHeader event) { if(!event.hasCollection(TriggerData.class, triggerDecisionCollectionName)) {
- //if(_debug) - System.out.println( "Event has NO trigger bank");
+ if(_debug) + System.out.printf( "%s: Event %d has NO trigger bank\n",this.getClass().getSimpleName());
return null; } else { List<TriggerData> triggerDataList = event.get(TriggerData.class, "TriggerBank"); if(triggerDataList.isEmpty()) {
- //if(_debug)
+ if(_debug)
System.out.println( "Event has trigger bank exists but is empty"); return null; } else {
- //if(_debug) - System.out.println( "Event has trigger bank");
+ if(_debug) + System.out.println( "Event has trigger bank");
return triggerDataList.get(0); } }
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1