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) {