hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.5 -r1.6
--- HPSStripMaker.java 29 Aug 2012 21:02:46 -0000 1.5
+++ HPSStripMaker.java 29 Sep 2012 00:19:41 -0000 1.6
@@ -32,8 +32,10 @@
int _max_noaverage_nstrips = 4;
// Absolute maximum cluster size
int _max_cluster_nstrips = 10;
+ // Sensor simulation needed to correct for Lorentz drift
+ SiSensorSim _simulation;
// Identifier helper (reset once per sensor)
- SiTrackerIdentifierHelper _sid_helper;
+ SiTrackerIdentifierHelper _sid_helper;
// Temporary map connecting hits to strip numbers for sake of speed (reset once per sensor)
Map<HPSFittedRawTrackerHit, Integer> _strip_map = new HashMap<HPSFittedRawTrackerHit, Integer>();
double _oneClusterErr = 1 / Math.sqrt(12);
@@ -41,11 +43,16 @@
double _threeClusterErr = 1 / 3;
double _fourClusterErr = 1 / 2;
double _fiveClusterErr = 1;
-
+
public HPSStripMaker(HPSClusteringAlgorithm algo) {
_clustering = algo;
}
+ public HPSStripMaker(SiSensorSim simulation, HPSClusteringAlgorithm algo) {
+ _clustering = algo;
+ _simulation = simulation;
+ }
+
public String getName() {
return _NAME;
}
@@ -181,6 +188,7 @@
}
private Hep3Vector getPosition(List<HPSFittedRawTrackerHit> cluster, SiSensorElectrodes electrodes) {
+ boolean debug = false;
List<Double> signals = new ArrayList<Double>();
List<Hep3Vector> positions = new ArrayList<Hep3Vector>();
@@ -216,13 +224,21 @@
position = VecOp.add(position, VecOp.mult(signal, positions.get(istrip)));
}
position = VecOp.mult(1 / total_charge, position);
+ if(debug) System.out.println(this.getClass().getSimpleName() + " charge weighted position "+position.toString() + " (before trans)");
electrodes.getParentToLocal().inverse().transform(position);
-
-// System.out.println("Position \n"+position);
-
-// System.out.println("Lorentz corrected position \n"+position);
-
+ 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) 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) System.out.println(this.getClass().getSimpleName() + " newpos "+newpos.toString());
+
return ((SiSensor) electrodes.getDetectorElement()).getGeometry().getLocalToGlobal().transformed(position);
// return electrodes.getLocalToGlobal().transformed(position);
}
hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.14 -r1.15
--- HPSHelicalTrackHitDriver.java 28 Sep 2012 22:09:49 -0000 1.14
+++ HPSHelicalTrackHitDriver.java 29 Sep 2012 00:19:41 -0000 1.15
@@ -59,7 +59,7 @@
private Map<String, String> _stereomap = new HashMap<String, String>();
private Hep3Vector _orgloc = new BasicHep3Vector(0., 0., 0.);
private boolean _doTranformToTracking = true;
- private boolean addAllStripsToEventForDebug = false;
+ private boolean addAllStripsToEventForDebug = true;
private HPSTransformations _detToTrk;
String subdetectorName = "Tracker";