Commit in hps-java/src/main/java/org/lcsim/hps on MAIN
recon/tracking/HPSTrack.java+38-11.4 -> 1.5
recon/vertexing/HelixConverter.java+291.1 -> 1.2
               /TwoTrackVertexer.java+84-11.1 -> 1.2
users/phansson/TwoTrackAnlysis.java+20-211.9 -> 1.10
+171-23
4 modified files
Added helix to line converter, adding fringe field to doca vertexer, added accuracy to bfield propagation.

hps-java/src/main/java/org/lcsim/hps/recon/tracking
HPSTrack.java 1.4 -> 1.5
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
HelixConverter.java 1.1 -> 1.2
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
TwoTrackVertexer.java 1.1 -> 1.2
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
TwoTrackAnlysis.java 1.9 -> 1.10
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


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