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