Print

Print


Author: [log in to unmask]
Date: Fri Apr 24 14:58:37 2015
New Revision: 2810

Log:
use t0 calibration to subtract channel time offset; weight large-amplitude hits more in cluster time

Modified:
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/StripMaker.java

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/RawTrackerHitFitterDriver.java	Fri Apr 24 14:58:37 2015
@@ -35,6 +35,7 @@
     private boolean subtractTOF = false;
     private boolean subtractTriggerTime = false;
     private int triggerPhaseOffset = 4;
+    private boolean correctChanT0 = true;
 
     /**
      * Report time relative to the nearest expected truth event time.
@@ -67,6 +68,10 @@
 
     public void setTriggerPhaseOffset(int triggerPhaseOffset) {
         this.triggerPhaseOffset = triggerPhaseOffset;
+    }
+
+    public void setCorrectChanT0(boolean correctChanT0) {
+        this.correctChanT0 = correctChanT0;
     }
 
     public void setFitAlgorithm(String fitAlgorithm) {
@@ -137,6 +142,9 @@
                 if (subtractTriggerTime) {
                     fit.setT0(fit.getT0() - (((event.getTimeStamp() + 4 * triggerPhaseOffset) % 24) - 12));
                 }
+                if (correctChanT0) {
+                    fit.setT0(fit.getT0() - sensor.getShapeFitParameters(strip)[HpsSiSensor.T0_INDEX]);
+                }
                 if (correctT0Shift) {
                     //===> fit.setT0(fit.getT0() - constants.getT0Shift());
                     fit.setT0(fit.getT0() - sensor.getT0Shift());

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/StripMaker.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/StripMaker.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/StripMaker.java	Fri Apr 24 14:58:37 2015
@@ -26,7 +26,7 @@
 import org.lcsim.recon.tracking.digitization.sisim.TrackerHitType;
 
 /**
- * 
+ *
  * @author Matt Graham
  */
 // TODO: Add class documentation.
@@ -87,7 +87,6 @@
     public List<SiTrackerHit> makeHits(SiSensor sensor) {
 
         // System.out.println("makeHits: " + sensor.getName());
-
         List<SiTrackerHit> hits = new ArrayList<SiTrackerHit>();
 
         // Get SiTrackerIdentifierHelper for this sensor and refresh the strip map used to increase
@@ -183,8 +182,9 @@
     }
 
     private SiTrackerHitStrip1D makeTrackerHit(List<FittedRawTrackerHit> cluster, SiSensorElectrodes electrodes) {
-        if (_debug)
+        if (_debug) {
             System.out.println(this.getClass().getSimpleName() + " makeTrackerHit ");
+        }
         Hep3Vector position = getPosition(cluster, electrodes);
         SymmetricMatrix covariance = getCovariance(cluster, electrodes);
         double time = getTime(cluster);
@@ -195,25 +195,29 @@
             rth_cluster.add(bth.getRawTrackerHit());
         }
         SiTrackerHitStrip1D hit = new SiTrackerHitStrip1D(position, covariance, energy, time, rth_cluster, type);
-        if (_debug)
+        if (_debug) {
             System.out.println(this.getClass().getSimpleName() + " SiTrackerHitStrip1D created at " + position + "(" + hit.getPositionAsVector().toString() + ")" + " E " + energy + " time " + time);
+        }
         return hit;
     }
 
     private Hep3Vector getPosition(List<FittedRawTrackerHit> cluster, SiSensorElectrodes electrodes) {
-        if (_debug)
+        if (_debug) {
             System.out.println(this.getClass().getSimpleName() + " getPosition for cluster size " + cluster.size());
+        }
         List<Double> signals = new ArrayList<Double>();
         List<Hep3Vector> positions = new ArrayList<Hep3Vector>();
 
-        if (_debug)
+        if (_debug) {
             System.out.println(this.getClass().getSimpleName() + " Loop of " + cluster.size() + " and add signals and positions to vectors");
+        }
 
         for (FittedRawTrackerHit hit : cluster) {
             signals.add(hit.getAmp());
             positions.add(((SiStrips) electrodes).getStripCenter(_strip_map.get(hit)));
-            if (_debug)
+            if (_debug) {
                 System.out.println(this.getClass().getSimpleName() + " Added hit with signal " + hit.getAmp() + " at strip center posiiton " + (((SiStrips) electrodes).getStripCenter(_strip_map.get(hit))));
+            }
         }
 
         // Average charge on central strips of longer clusters
@@ -233,8 +237,9 @@
             }
         }
 
-        if (_debug)
+        if (_debug) {
             System.out.println(this.getClass().getSimpleName() + " Calculate charge weighted mean for " + signals.size() + " signals");
+        }
 
         double total_charge = 0;
         Hep3Vector position = new BasicHep3Vector(0, 0, 0);
@@ -244,29 +249,34 @@
 
             total_charge += signal;
             position = VecOp.add(position, VecOp.mult(signal, positions.get(istrip)));
-            if (_debug)
+            if (_debug) {
                 System.out.println(this.getClass().getSimpleName() + "strip " + istrip + ": signal " + signal + " position " + positions.get(istrip) + " -> total_position " + position.toString() + " ( total charge " + total_charge + ")");
+            }
 
         }
         position = VecOp.mult(1 / total_charge, position);
-        if (_debug)
+        if (_debug) {
             System.out.println(this.getClass().getSimpleName() + " charge weighted position " + position.toString() + " (before trans)");
+        }
         electrodes.getParentToLocal().inverse().transform(position);
-        if (_debug)
+        if (_debug) {
             System.out.println(this.getClass().getSimpleName() + " charge weighted position " + position.toString() + " (after trans)");
+        }
 
         // Swim position back through lorentz drift direction to midpoint between bias surfaces
         if (_simulation != null) {
             _simulation.setSensor((SiSensor) electrodes.getDetectorElement());
             _simulation.lorentzCorrect(position, electrodes.getChargeCarrier());
-            if (_debug)
+            if (_debug) {
                 System.out.println(this.getClass().getSimpleName() + ": Position " + position.toString() + " ( after Lorentz)");
+            }
         }
 
         // return position in global coordinates
         Hep3Vector newpos = ((SiSensor) electrodes.getDetectorElement()).getGeometry().getLocalToGlobal().transformed(position);
-        if (_debug)
+        if (_debug) {
             System.out.println(this.getClass().getSimpleName() + " final cluster position " + newpos.toString());
+        }
 
         return ((SiSensor) electrodes.getDetectorElement()).getGeometry().getLocalToGlobal().transformed(position);
         // return electrodes.getLocalToGlobal().transformed(position);
@@ -283,8 +293,8 @@
             double time = hit.getT0();
 //        System.out.format("t0=%f\tA=%f\n",hit.getT0(),hit.getAmp());
 
-            time_sum += time * signal;
-            signal_sum += signal;
+            time_sum += time * signal * signal;
+            signal_sum += signal * signal;
 
         }
         return time_sum / signal_sum;
@@ -299,7 +309,6 @@
         SymmetricMatrix covariance_global = electrodes.getLocalToGlobal().transformed(covariance);
 
         // System.out.println("Global covariance matrix: \n"+covariance_global);
-
         return covariance_global;
 
         // BasicHep3Matrix rotation_matrix =
@@ -320,22 +329,22 @@
     }
 
     private double getMeasuredResolution(List<FittedRawTrackerHit> cluster, SiSensorElectrodes electrodes) // should
-                                                                                                           // replace
-                                                                                                           // this
-                                                                                                           // by
-                                                                                                           // a
-                                                                                                           // ResolutionModel
-                                                                                                           // class
-                                                                                                           // that
-                                                                                                           // gives
-                                                                                                           // expected
-                                                                                                           // resolution.
-                                                                                                           // This
-                                                                                                           // could
-                                                                                                           // be
-                                                                                                           // a
-                                                                                                           // big
-                                                                                                           // job.
+    // replace
+    // this
+    // by
+    // a
+    // ResolutionModel
+    // class
+    // that
+    // gives
+    // expected
+    // resolution.
+    // This
+    // could
+    // be
+    // a
+    // big
+    // job.
     {
         double measured_resolution;
 
@@ -347,7 +356,6 @@
         // double signal_expected = (0.000280/DopedSilicon.ENERGY_EHPAIR) *
         // ((SiSensor)electrodes.getDetectorElement()).getThickness(); // ~280 KeV/mm for thick Si
         // sensors
-
         if (cluster.size() == 1) {
             measured_resolution = sense_pitch * _oneClusterErr;
         } else if (cluster.size() == 2) {