4 modified files
hps-java/src/main/java/org/lcsim/hps/recon/tracking
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;
+ }
}
hps-java/src/main/java/org/lcsim/hps/recon/vertexing
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).
hps-java/src/main/java/org/lcsim/hps/recon/vertexing
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;
+ }
+
}
hps-java/src/main/java/org/lcsim/hps/users/phansson
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);
}
}
CVSspam 0.2.12