diff --git a/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2016FullReconMC_KF_Killer_Smearer.lcsim b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2016FullReconMC_KF_Killer_Smearer.lcsim
new file mode 100644
index 000000000..0928aa341
--- /dev/null
+++ b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2016FullReconMC_KF_Killer_Smearer.lcsim
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+ false
+ 10.0
+ 15.0
+ false
+
+
+
+
+ EcalCalHits EcalClusters EcalClustersCorr FinalStateParticles
+ UnconstrainedMollerCandidates UnconstrainedMollerVertices UnconstrainedV0Candidates
+ UnconstrainedV0Vertices TargetConstrainedMollerCandidates TargetConstrainedMollerVertices
+ TargetConstrainedV0Candidates TargetConstrainedV0Vertices BeamspotConstrainedMollerCandidates
+ BeamspotConstrainedMollerVertices BeamspotConstrainedV0Candidates BeamspotConstrainedV0Vertices
+ GBLKinkData GBLKinkDataRelations MatchedToGBLTrackRelations HelicalTrackHits
+ HelicalTrackHitRelations MatchedTracks GBLTracks MatchedToGBLTrackRelations
+ RotatedHelicalTrackHits RotatedHelicalTrackHitRelations SVTFittedRawTrackerHits
+ SVTShapeFitParameters StripClusterer_SiTrackerHitStrip1D TrackData TrackDataRelations
+ TrackResiduals TrackResidualsRelations OtherElectrons UnconstrainedVcCandidates UnconstrainedVcVertices
+ KFTrackData KFTrackDataRelations KFGBLStripClusterData KFGBLStripClusterDataRelations SVTShapeFitParameters UnconstrainedVcCandidates_KF UnconstrainedVcVertices_KF
+ KalmanFullTracks UnconstrainedV0Candidates_KF TargetConstrainedV0Candidates_KF BeamspotConstrainedV0Candidates_KF UnconstrainedV0Vertices_KF TargetConstrainedV0Vertices_KF BeamspotConstrainedV0Vertices_KF
+
+
+
+
+
+ CONFIG
+
+
+
+
+
+ EcalCalHits
+ true
+ 2.4
+
+
+
+
+
+
+ WARNING
+ EcalClusters
+
+
+ EcalClusters
+ EcalClustersCorr
+
+
+
+
+ pass4b-KF-hps2016_L1b_axial_hole.txt pass4b-KF-hps2016_L1b_stereo_hole.txt pass4b-KF-hps2016_L1t_axial_hole.txt pass4b-KF-hps2016_L1t_stereo_hole.txt pass4b-KF-hps2016_L2b_axial_hole.txt pass4b-KF-hps2016_L2b_stereo_hole.txt pass4b-KF-hps2016_L2t_axial_hole.txt pass4b-KF-hps2016_L2t_stereo_hole.txt
+ false
+
+
+
+ exampleSmearing-0pt008mm.txt
+ false
+
+
+
+ timeSmearing-2ns-4nsL0.txt
+ false
+
+
+
+
+
+ SVTRawTrackerHits
+
+
+ Pileup
+
+ true
+
+ 171.
+
+ true
+
+ false
+
+ false
+
+ true
+
+ false
+
+ true
+ false
+
+
+ 24.0
+
+
+
+ true
+ 40
+ -4.3
+ true
+ false
+
+
+
+ EcalClustersCorr
+ KalmanFullTracks
+ KalmanFullTracks
+ FinalStateParticles_KF
+ UnconstrainedV0Candidates_KF
+ UnconstrainedV0Vertices_KF
+ BeamspotConstrainedV0Candidates_KF
+ BeamspotConstrainedV0Vertices_KF
+ TargetConstrainedV0Candidates_KF
+ TargetConstrainedV0Vertices_KF
+ true
+ false
+ -0.224
+ 0.275
+ -0.08
+ 0.060
+ -4.3
+ 2.8
+ 2.8
+ 0.0
+ 5.0
+ 10
+ 36.8
+ true
+ true
+ TrackClusterMatcherMinDistance
+
+
+
+
+
+
+ ${outputFile}.slcio
+
+
+
+
+
+ ${outputFile}.root
+ false
+ 0.0
+
+ KalmanFullTracks
+ 0.1
+ 4.8
+ 9999
+ true
+ true
+
+
+
+
+
+
diff --git a/tracking/src/main/java/org/hps/recon/tracking/kalman/KFOutputDriver.java b/tracking/src/main/java/org/hps/recon/tracking/kalman/KFOutputDriver.java
index 083c7186c..c1a7b486a 100644
--- a/tracking/src/main/java/org/hps/recon/tracking/kalman/KFOutputDriver.java
+++ b/tracking/src/main/java/org/hps/recon/tracking/kalman/KFOutputDriver.java
@@ -380,9 +380,9 @@ private void doEoPPlots(Track track, Cluster cluster) {
aidaKF.histogram2D(eopFolder+"EoP_vs_tanLambda").fill(tanL,eop);
aidaKF.histogram2D(eopFolder+"EoP_vs_phi").fill(phi,eop);
- aidaKF.histogram3D(eopFolder+"EoP_vs_tanLambda_phi").fill(tanL,
- phi,
- eop);
+ // aidaKF.histogram3D(eopFolder+"EoP_vs_tanLambda_phi").fill(tanL,
+ // phi,
+ // eop);
if (TriggerModule.inFiducialRegion(cluster)) {
@@ -400,9 +400,9 @@ private void doEoPPlots(Track track, Cluster cluster) {
aidaKF.histogram2D(eopFolder+"EoP_vs_tanLambda_fid").fill(tanL,eop);
aidaKF.histogram2D(eopFolder+"EoP_vs_phi_fid").fill(phi,eop);
- aidaKF.histogram3D(eopFolder+"EoP_vs_tanLambda_phi_fid").fill(tanL,
- phi,
- eop);
+ // aidaKF.histogram3D(eopFolder+"EoP_vs_tanLambda_phi_fid").fill(tanL,
+ //phi,
+ //eop);
@@ -534,10 +534,12 @@ private void FillKFTrackPlot(String str, String isTop, String charge, double val
aidaKF.histogram2D(str+isTop+charge).fill(valX,valY);
}
+ /*
private void FillKFTrackPlot(String str, String isTop, String charge, double valX, double valY, double valZ) {
aidaKF.histogram3D(str+isTop).fill(valX,valY,valZ);
aidaKF.histogram3D(str+isTop+charge).fill(valX,valY,valZ);
}
+ */
@@ -598,7 +600,7 @@ private void doBasicKFtrack(Track trk, Map sensorHits)
//Momentum maps
FillKFTrackPlot(trkpFolder+"p_vs_phi",isTop,charge,trackState.getPhi(),trackp);
FillKFTrackPlot(trkpFolder+"p_vs_tanLambda",isTop,charge,trackState.getTanLambda(),trackp);
- FillKFTrackPlot(trkpFolder+"p_vs_phi_tanLambda",isTop,charge,trackState.getPhi(),trackState.getTanLambda(),trackp);
+ // FillKFTrackPlot(trkpFolder+"p_vs_phi_tanLambda",isTop,charge,trackState.getPhi(),trackState.getTanLambda(),trackp);
double tanLambda = trackState.getTanLambda();
double cosLambda = 1. / (Math.sqrt(1+tanLambda*tanLambda));
@@ -1034,11 +1036,11 @@ private void setupEoPPlots() {
aidaKF.histogram2D(eopFolder+"EoP_vs_tanLambda",200,-0.1,0.1,200,0,2);
aidaKF.histogram2D(eopFolder+"EoP_vs_phi",200,-0.2,0.2,200,0,2);
- aidaKF.histogram3D(eopFolder+"EoP_vs_tanLambda_phi",200,-0.08,0.08,200,-0.2,0.2,200,0,2);
+ // aidaKF.histogram3D(eopFolder+"EoP_vs_tanLambda_phi",200,-0.08,0.08,200,-0.2,0.2,200,0,2);
aidaKF.histogram2D(eopFolder+"EoP_vs_tanLambda_fid",200,-0.1,0.1,200,0,2);
aidaKF.histogram2D(eopFolder+"EoP_vs_phi_fid",200,-0.2,0.2,200,0,2);
- aidaKF.histogram3D(eopFolder+"EoP_vs_tanLambda_phi_fid",200,-0.08,0.08,200,-0.2,0.2,200,0,2);
+ // aidaKF.histogram3D(eopFolder+"EoP_vs_tanLambda_phi_fid",200,-0.08,0.08,200,-0.2,0.2,200,0,2);
}
@@ -1226,7 +1228,7 @@ private void setupPlots() {
aidaKF.histogram2D(trkpFolder+"p_Missing1Hit"+vol+charge,8,0,8,nbins_p,0.0,pmax);
aidaKF.histogram2D(trkpFolder+"p_vs_phi"+vol+charge, nbins_t,-0.3,0.3, nbins_p,0.,pmax);
aidaKF.histogram2D(trkpFolder+"p_vs_tanLambda"+vol+charge,nbins_t,-0.2,0.2,nbins_p,0.,pmax);
- aidaKF.histogram3D(trkpFolder+"p_vs_phi_tanLambda"+vol+charge, 50,-0.3,0.3,50,-0.2,0.2,100,0.,pmax);
+ // aidaKF.histogram3D(trkpFolder+"p_vs_phi_tanLambda"+vol+charge, 50,-0.3,0.3,50,-0.2,0.2,100,0.,pmax);
aidaKF.histogram2D(trkpFolder+"pT_vs_phi"+vol+charge, nbins_t,-0.3,0.3, nbins_p,0.,pmax);
aidaKF.histogram2D(trkpFolder+"pT_vs_tanLambda"+vol+charge,nbins_t,-0.2,0.2,nbins_p,0.,pmax);
diff --git a/tracking/src/main/java/org/hps/recon/tracking/KalmanSlopeBasedTrackHitKiller.java b/tracking/src/main/java/org/hps/recon/tracking/mctweaking/KalmanSlopeBasedTrackHitKiller.java
similarity index 100%
rename from tracking/src/main/java/org/hps/recon/tracking/KalmanSlopeBasedTrackHitKiller.java
rename to tracking/src/main/java/org/hps/recon/tracking/mctweaking/KalmanSlopeBasedTrackHitKiller.java
diff --git a/tracking/src/main/java/org/hps/recon/tracking/mctweaking/RawHitTimeSmearer.java b/tracking/src/main/java/org/hps/recon/tracking/mctweaking/RawHitTimeSmearer.java
new file mode 100644
index 000000000..c022df664
--- /dev/null
+++ b/tracking/src/main/java/org/hps/recon/tracking/mctweaking/RawHitTimeSmearer.java
@@ -0,0 +1,231 @@
+package org.hps.recon.tracking;
+
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Random;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.lcsim.detector.tracker.silicon.ChargeCarrier;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.event.base.BaseTrackerHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.lcio.LCIOUtil;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
+import org.lcsim.util.Driver;
+import org.lcsim.recon.tracking.digitization.sisim.TrackerHitType;
+import hep.physics.matrix.SymmetricMatrix;
+import org.lcsim.event.LCRelation;
+
+/**
+ *
+ * @author mgraham created 9/20/24
+ * This driver will randomize the position of strip clusters
+ * within a specified gaussian sigma.
+ * 11/17/24
+ * add in cluster time smearing as well.
+ *
+ * Strip collection:
+ * "StripClusterer_SiTrackerHitStrip1D" (default)
+ * Important Settables:
+ * smear: the sigma of smearing gaussian
+ *
+ * mg...right now, I smear all hits in all layers by the same amount
+ * independent of nHits.
+ */
+public class RawHitTimeSmearer extends Driver {
+
+
+ String smearTimeFile="foobar";
+ //IMPORTANT...the layer, top/bottom/stereo/axial/slot/hole are derived from these names!!!
+ Set smearTheseSensors = new HashSet();
+ // I may eventually want this, so keep it here
+ private List _sensorsToSmear = new ArrayList();
+ //List of Sensors
+ private List sensors = null;
+ private static final String SUBDETECTOR_NAME = "Tracker";
+ private static Pattern layerPattern = Pattern.compile("L(\\d+)(t|b)");
+ private static Pattern allPattern = Pattern.compile("L(\\all)");
+ private Map fittedRawTrackerHitMap = new HashMap();
+ private String fittedHitsCollectionName = "SVTFittedRawTrackerHits";
+ private boolean _debug = false;
+
+ Random r=new Random();
+
+ ///
+
+
+
+ public void setSmearTimeFile(String smearFile){
+ System.out.println("Setting SVT sensor time smearing file = "+smearFile);
+ this.smearTimeFile=smearFile;
+ }
+
+ public void setDebug(boolean debug) {
+ this._debug = debug;
+ }
+
+ public RawHitTimeSmearer() {
+ }
+
+ @Override
+ public void detectorChanged(Detector detector) {
+ // Get the HpsSiSensor objects from the tracker detector element
+ sensors = detector.getSubdetector(SUBDETECTOR_NAME)
+ .getDetectorElement().findDescendants(HpsSiSensor.class);
+ // If the detector element had no sensors associated with it, throw
+ // an exception
+ if (sensors.size() == 0)
+ throw new RuntimeException(this.getClass().getName()+":: No sensors were found in this detector.");
+ if(_debug)
+ System.out.println(this.getClass().getName()+":: Reading in time smearing file = "+this.smearTimeFile);
+ Map mapOfSmearingTime=readSmearingFile(this.smearTimeFile);
+ if (mapOfSmearingTime.size()==0)
+ throw new RuntimeException(this.getClass().getName()+":: No sensors to smear???");
+
+ for (HpsSiSensor sensor: sensors){
+ double smearingTime=-666.;
+ if(mapOfSmearingTime.containsKey(sensor.getName())){
+ // found a sensor to smear...set up the object
+ if(_debug)
+ System.out.println(this.getClass().getName()+":: adding "+sensor.getName()+" with sigma time = "+mapOfSmearingTime.get(sensor.getName()));
+ smearingTime=mapOfSmearingTime.get(sensor.getName());
+ }
+ if(smearingTime>0)
+ _sensorsToSmear.add(new SensorToSmear(sensor, smearingTime));
+ }
+ if(_debug)
+ System.out.println(this.getClass().getName()+":: will smear cluster hits on "+_sensorsToSmear.size()+" sensors");
+
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ // get the sensor object of the cluster
+ for (SensorToSmear sensorToSmear : _sensorsToSmear){
+ if(sensorToSmear.getSmearTimeSigma()>0){
+ HpsSiSensor sensor=(HpsSiSensor)sensorToSmear.getSensor();
+ List< LCRelation > fittedHits = sensor.getReadout().getHits(LCRelation.class);
+ for (LCRelation fittedHit : fittedHits) {
+ RawTrackerHit rth=FittedRawTrackerHit.getRawTrackerHit(fittedHit);
+ double oldTime=FittedRawTrackerHit.getT0(fittedHit);
+ double smearAmount=sensorToSmear.getRandomTimeSmear();
+ double newTime=oldTime+smearAmount;
+ ((FittedRawTrackerHit)fittedHit).getShapeFitParameters().setT0(newTime);
+ if (_debug)
+ System.out.println("Smearing this hit Layer = " + sensor.getName()
+ +" smearTimeSigma= " + sensorToSmear.getSmearTimeSigma()
+ + " fitted hit time = " + FittedRawTrackerHit.getT0(fittedHit)
+ + " old time = " + oldTime
+ + " new time = " + newTime
+ + " amount smeared = " + smearAmount);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void endOfData() {
+ }
+
+ public Map readSmearingFile(String smearFile){
+ Map sensorNameSmearingMap = new HashMap();
+ String infile = "/org/hps/recon/tracking/svtTimeAndPositionSmearing/" +smearFile;
+ if (_debug)System.out.println(this.getClass().getName()+"::Reading sensor smearing file " + infile);
+ InputStream inSensors = this.getClass().getResourceAsStream(infile);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(inSensors));
+ String line;
+ String delims = "\\s+";// this will split strings between one or more spaces
+ try {
+ while ((line = reader.readLine()) != null) {
+ String[] tokens = line.split(delims);
+ if (_debug) System.out.println("sensor name = " + tokens[0] + "; smearing = " + tokens[1]+" mm");
+ String sensorName=tokens[0];
+ Double smearingSigma=Double.parseDouble(tokens[1]);
+ sensorNameSmearingMap.put(sensorName,smearingSigma);
+ }
+ } catch (IOException ex) {
+ Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, ex);
+ }
+ return sensorNameSmearingMap;
+
+ }
+
+ public class SensorToSmear {
+
+ int _layer = 1;
+ HpsSiSensor _sensor = null;
+ double _smearTimeSigma = -666.0; // units of this is ns
+
+ public SensorToSmear(HpsSiSensor sensor, double smearTime) {
+ _smearTimeSigma=smearTime;
+ _sensor = sensor;
+ }
+
+ void setSmearTimeSigma(double smear) {
+ this._smearTimeSigma=smear;
+ }
+
+
+ double getSmearTimeSigma() {
+ return this._smearTimeSigma;
+ }
+
+ HpsSiSensor getSensor(){
+ return _sensor;
+ }
+
+ boolean matchSensor(HpsSiSensor sensor) {
+ return _sensor == sensor;
+ }
+
+ double getRandomTimeSmear(){
+ if(this._smearTimeSigma>0)
+ return r.nextGaussian()*this._smearTimeSigma;
+ else
+ return 0.0;
+ }
+ }
+
+ //Converts double array into Hep3Vector
+ private Hep3Vector toHep3(double[] arr) {
+ return new BasicHep3Vector(arr[0], arr[1], arr[2]);
+ }
+
+ //Converts position into sensor frame
+ private Hep3Vector globalToSensor(Hep3Vector hitpos, HpsSiSensor sensor) {
+ SiSensorElectrodes electrodes = sensor.getReadoutElectrodes(ChargeCarrier.HOLE);
+ if (electrodes == null) {
+ electrodes = sensor.getReadoutElectrodes(ChargeCarrier.ELECTRON);
+ System.out.println("Charge Carrier is NULL");
+ }
+ return electrodes.getGlobalToLocal().transformed(hitpos);
+ }
+
+ //Converts position from local (sensor) to global frame
+ private Hep3Vector sensorToGlobal(Hep3Vector hitpos, HpsSiSensor sensor) {
+ SiSensorElectrodes electrodes = sensor.getReadoutElectrodes(ChargeCarrier.HOLE);
+ if (electrodes == null) {
+ electrodes = sensor.getReadoutElectrodes(ChargeCarrier.ELECTRON);
+ System.out.println("Charge Carrier is NULL");
+ }
+ return electrodes.getLocalToGlobal().transformed(hitpos);
+ }
+
+}
diff --git a/tracking/src/main/java/org/hps/recon/tracking/SlopeBasedTrackHitKiller.java b/tracking/src/main/java/org/hps/recon/tracking/mctweaking/SlopeBasedTrackHitKiller.java
similarity index 100%
rename from tracking/src/main/java/org/hps/recon/tracking/SlopeBasedTrackHitKiller.java
rename to tracking/src/main/java/org/hps/recon/tracking/mctweaking/SlopeBasedTrackHitKiller.java
diff --git a/tracking/src/main/java/org/hps/recon/tracking/StripHitKiller.java b/tracking/src/main/java/org/hps/recon/tracking/mctweaking/StripHitKiller.java
similarity index 100%
rename from tracking/src/main/java/org/hps/recon/tracking/StripHitKiller.java
rename to tracking/src/main/java/org/hps/recon/tracking/mctweaking/StripHitKiller.java
diff --git a/tracking/src/main/java/org/hps/recon/tracking/mctweaking/StripHitSmearer.java b/tracking/src/main/java/org/hps/recon/tracking/mctweaking/StripHitSmearer.java
new file mode 100644
index 000000000..965990a0e
--- /dev/null
+++ b/tracking/src/main/java/org/hps/recon/tracking/mctweaking/StripHitSmearer.java
@@ -0,0 +1,289 @@
+package org.hps.recon.tracking;
+
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Random;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.lcsim.detector.tracker.silicon.ChargeCarrier;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.event.base.BaseTrackerHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.lcio.LCIOUtil;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
+import org.lcsim.util.Driver;
+import org.lcsim.recon.tracking.digitization.sisim.TrackerHitType;
+import hep.physics.matrix.SymmetricMatrix;
+
+/**
+ *
+ * @author mgraham created 9/20/24
+ * This driver will randomize the position of strip clusters
+ * within a specified gaussian sigma.
+ *
+ * Strip collection:
+ * "StripClusterer_SiTrackerHitStrip1D" (default)
+ * Important Settables:
+ * smear: the sigma of smearing gaussian
+ *
+ * mg...right now, I smear all hits in all layers by the same amount
+ * independent of nHits.
+ */
+public class StripHitSmearer extends Driver {
+
+
+ String smearPositionFile="foobar";
+ //IMPORTANT...the layer, top/bottom/stereo/axial/slot/hole are derived from these names!!!
+ Set smearTheseSensors = new HashSet();
+ // I may eventually want this, so keep it here
+ private List _sensorsToSmear = new ArrayList();
+ //List of Sensors
+ private List sensors = null;
+ private static final String SUBDETECTOR_NAME = "Tracker";
+ private static Pattern layerPattern = Pattern.compile("L(\\d+)(t|b)");
+ private static Pattern allPattern = Pattern.compile("L(\\all)");
+ private String stripHitInputCollectionName = "StripClusterer_SiTrackerHitStrip1D";
+ private boolean _debug = false;
+
+ Random r=new Random();
+
+ ///
+
+ private List siClusters = new ArrayList();
+
+ // private Map _siClustersAcceptMap = new HashMap();
+ //private Map _finalSiClustersAcceptMap = new HashMap();
+
+
+ public void setSmearPositionFile(String smearFile){
+ System.out.println("Setting SVT sensor position smearing file = "+smearFile);
+ this.smearPositionFile=smearFile;
+ }
+
+ public void setDebug(boolean debug) {
+ this._debug = debug;
+ }
+
+ public StripHitSmearer() {
+ }
+
+ @Override
+ public void detectorChanged(Detector detector) {
+ // Get the HpsSiSensor objects from the tracker detector element
+ sensors = detector.getSubdetector(SUBDETECTOR_NAME)
+ .getDetectorElement().findDescendants(HpsSiSensor.class);
+ // If the detector element had no sensors associated with it, throw
+ // an exception
+ if (sensors.size() == 0)
+ throw new RuntimeException(this.getClass().getName()+":: No sensors were found in this detector.");
+ if(_debug)
+ System.out.println(this.getClass().getName()+":: Reading in position smearing file = "+this.smearPositionFile);
+ Map mapOfSmearingPosition=readSmearingFile(this.smearPositionFile);
+ if (mapOfSmearingPosition.size()==0)
+ throw new RuntimeException(this.getClass().getName()+":: No sensors to smear???");
+
+ for (HpsSiSensor sensor: sensors){
+ double smearingPosition=-666.;
+ if(mapOfSmearingPosition.containsKey(sensor.getName())){
+ // found a sensor to smear...set up the object
+ if(_debug)
+ System.out.println(this.getClass().getName()+":: adding "+sensor.getName()+" with sigma = "+mapOfSmearingPosition.get(sensor.getName()));
+ smearingPosition=mapOfSmearingPosition.get(sensor.getName());
+ // _sensorsToSmear.add(new SensorToSmear(sensor,mapOfSmearingPosition.get(sensor.getName())));
+ }
+ if(smearingPosition>0)
+ _sensorsToSmear.add(new SensorToSmear(sensor,smearingPosition));
+ }
+ if(_debug)
+ System.out.println(this.getClass().getName()+":: will smear cluster hits on "+_sensorsToSmear.size()+" sensors");
+
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ List smearedSiClusters=new ArrayList();
+ if (event.hasItem(stripHitInputCollectionName))
+ siClusters = (List) event.get(stripHitInputCollectionName);
+ else {
+ System.out.println("StripHitSmearer::process No Input Collection Found?? " + stripHitInputCollectionName);
+ return;
+ }
+ if (_debug)
+ System.out.println("Number of SiClusters Found = " + siClusters.size());
+ int oldClusterListSize = siClusters.size();
+ for (TrackerHit siCluster : siClusters) { // Looping over all clusters
+ boolean smearedHit = false;
+ // get the sensor object of the cluster
+ HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit) siCluster.getRawHits().get(0)).getDetectorElement();
+ Hep3Vector newPos=toHep3(siCluster.getPosition());//set the "new" variables to the original cluster position
+ for (SensorToSmear sensorToSmear : _sensorsToSmear)
+ //get the sensorToSmear object in order to look up smearing size
+ if (sensorToSmear.matchSensor(sensor)) {
+ if(sensorToSmear.getSmearPositionSigma()>0){
+ //get the local u position
+ Hep3Vector pos = globalToSensor(toHep3(siCluster.getPosition()), sensor);
+
+ //this gives the amount to move the cluster based on the sigma assigned to the sensor
+ double smearAmount=sensorToSmear.getRandomPositionSmear();
+ double uPosNew=pos.x()+smearAmount;
+ //get the new global position
+ newPos=sensorToGlobal(toHep3(new double[]{uPosNew,pos.y(),pos.z()}),sensor);
+ //make a copy of cluster and set the new position
+ // SiTrackerHitStrip1D smearedTrackerHit=new SiTrackerHitStrip1D(newPos, new SymmetricMatrix(3,siCluster.getCovMatrix(),true),
+ //siCluster.getdEdx(),siCluster.getTime(),(List)siCluster.getRawHits(),TrackerHitType.decoded(siCluster.getType()));
+
+ if (_debug)
+ System.out.println("Smearing this hit Layer = " + sensor.getName()
+ +" smearPositionSigma= " + sensorToSmear.getSmearPositionSigma()
+ + " old u = " + pos.x()
+ + " new u = " + uPosNew
+ + " amount smeared = " + smearAmount);
+ if(_debug){
+ System.out.println("original position = "+toHep3(siCluster.getPosition()).toString());
+ System.out.println("global og position = "+pos.toString());
+ }
+ // set the new position
+ // smearedTrackerHit.setPosition(new double[]{newPos.x(),newPos.y(),newPos.z()});
+
+ // add the smeared hit to list and mark it
+ // smearedSiClusters.add(smearedTrackerHit);
+ smearedHit=true;
+ }
+ }
+ //make a smeared hit...even if the sensor hit was not smeared, use newPos/newTime since they were filled with original pos/time above
+ SiTrackerHitStrip1D smearedTrackerHit=
+ new SiTrackerHitStrip1D(newPos, new SymmetricMatrix(3,siCluster.getCovMatrix(),true),
+ siCluster.getdEdx(),siCluster.getTime(),(List)siCluster.getRawHits(),
+ TrackerHitType.decoded(siCluster.getType()));
+
+ smearedSiClusters.add(smearedTrackerHit);
+
+ }
+
+ if (_debug)System.out.println("New Cluster List Has " + smearedSiClusters.size() + "; old List had " + oldClusterListSize);
+ // TODO flag not used
+ int flag = LCIOUtil.bitSet(0, 31, true); // Turn on 64-bit cell ID.
+ event.remove(this.stripHitInputCollectionName);
+ event.put(this.stripHitInputCollectionName, smearedSiClusters, SiTrackerHitStrip1D.class, 0, toString());
+ }
+
+ @Override
+ public void endOfData() {
+ }
+
+ public Map readSmearingFile(String smearFile){
+ Map sensorNameSmearingMap = new HashMap();
+ String infile = "/org/hps/recon/tracking/svtTimeAndPositionSmearing/" +smearFile;
+ if (_debug)System.out.println(this.getClass().getName()+"::Reading sensor smearing file " + infile);
+ InputStream inSensors = this.getClass().getResourceAsStream(infile);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(inSensors));
+ String line;
+ String delims = "\\s+";// this will split strings between one or more spaces
+ try {
+ while ((line = reader.readLine()) != null) {
+ String[] tokens = line.split(delims);
+ if (_debug) System.out.println("sensor name = " + tokens[0] + "; smearing = " + tokens[1]+" mm");
+ String sensorName=tokens[0];
+ Double smearingSigma=Double.parseDouble(tokens[1]);
+ sensorNameSmearingMap.put(sensorName,smearingSigma);
+ }
+ } catch (IOException ex) {
+ Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, ex);
+ }
+ return sensorNameSmearingMap;
+
+ }
+
+ public class SensorToSmear {
+
+ int _layer = 1;
+ HpsSiSensor _sensor = null;
+ double _smearPositionSigma = -666.0; // units of this is mm
+ double _smearTimeSigma = -666.0; // units of this is ns
+
+ public SensorToSmear(HpsSiSensor sensor, double smearPos,double smearTime) {
+ _smearPositionSigma=smearPos;
+ _smearTimeSigma=smearTime;
+ _sensor = sensor;
+ }
+ public SensorToSmear(HpsSiSensor sensor, double smearPos) {
+ _smearPositionSigma=smearPos;
+ _sensor = sensor;
+ }
+ void setSmearPositionSigma(double smear) {
+ this._smearPositionSigma=smear;
+ }
+
+ void setSmearTimeSigma(double smear) {
+ this._smearTimeSigma=smear;
+ }
+
+ double getSmearPositionSigma() {
+ return this._smearPositionSigma;
+ }
+
+ double getSmearTimeSigma() {
+ return this._smearTimeSigma;
+ }
+
+ boolean matchSensor(HpsSiSensor sensor) {
+ return _sensor == sensor;
+ }
+
+ double getRandomPositionSmear(){
+ if(this._smearPositionSigma>0)
+ return r.nextGaussian()*this._smearPositionSigma;
+ else
+ return 0.0;
+ }
+ double getRandomTimeSmear(){
+ if(this._smearTimeSigma>0)
+ return r.nextGaussian()*this._smearTimeSigma;
+ else
+ return 0.0;
+ }
+ }
+
+ //Converts double array into Hep3Vector
+ private Hep3Vector toHep3(double[] arr) {
+ return new BasicHep3Vector(arr[0], arr[1], arr[2]);
+ }
+
+ //Converts position into sensor frame
+ private Hep3Vector globalToSensor(Hep3Vector hitpos, HpsSiSensor sensor) {
+ SiSensorElectrodes electrodes = sensor.getReadoutElectrodes(ChargeCarrier.HOLE);
+ if (electrodes == null) {
+ electrodes = sensor.getReadoutElectrodes(ChargeCarrier.ELECTRON);
+ System.out.println("Charge Carrier is NULL");
+ }
+ return electrodes.getGlobalToLocal().transformed(hitpos);
+ }
+
+ //Converts position from local (sensor) to global frame
+ private Hep3Vector sensorToGlobal(Hep3Vector hitpos, HpsSiSensor sensor) {
+ SiSensorElectrodes electrodes = sensor.getReadoutElectrodes(ChargeCarrier.HOLE);
+ if (electrodes == null) {
+ electrodes = sensor.getReadoutElectrodes(ChargeCarrier.ELECTRON);
+ System.out.println("Charge Carrier is NULL");
+ }
+ return electrodes.getLocalToGlobal().transformed(hitpos);
+ }
+
+}
diff --git a/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt008mm.txt b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt008mm.txt
new file mode 100644
index 000000000..a1f95db04
--- /dev/null
+++ b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt008mm.txt
@@ -0,0 +1,36 @@
+module_L1b_halfmodule_axial_sensor0 0.008
+module_L1b_halfmodule_stereo_sensor0 0.008
+module_L2b_halfmodule_axial_sensor0 0.008
+module_L2b_halfmodule_stereo_sensor0 0.008
+module_L3b_halfmodule_axial_sensor0 0.008
+module_L3b_halfmodule_stereo_sensor0 0.008
+module_L4b_halfmodule_axial_hole_sensor0 0.008
+module_L4b_halfmodule_axial_slot_sensor0 0.008
+module_L4b_halfmodule_stereo_hole_sensor0 0.008
+module_L4b_halfmodule_stereo_slot_sensor0 0.008
+module_L5b_halfmodule_axial_hole_sensor0 0.008
+module_L5b_halfmodule_axial_slot_sensor0 0.008
+module_L5b_halfmodule_stereo_hole_sensor0 0.008
+module_L5b_halfmodule_stereo_slot_sensor0 0.008
+module_L6b_halfmodule_axial_hole_sensor0 0.008
+module_L6b_halfmodule_axial_slot_sensor0 0.008
+module_L6b_halfmodule_stereo_hole_sensor0 0.008
+module_L6b_halfmodule_stereo_slot_sensor0 0.008
+module_L1t_halfmodule_axial_sensor0 0.008
+module_L1t_halfmodule_stereo_sensor0 0.008
+module_L2t_halfmodule_axial_sensor0 0.008
+module_L2t_halfmodule_stereo_sensor0 0.008
+module_L3t_halfmodule_axial_sensor0 0.008
+module_L3t_halfmodule_stereo_sensor0 0.008
+module_L4t_halfmodule_axial_hole_sensor0 0.008
+module_L4t_halfmodule_axial_slot_sensor0 0.008
+module_L4t_halfmodule_stereo_hole_sensor0 0.008
+module_L4t_halfmodule_stereo_slot_sensor0 0.008
+module_L5t_halfmodule_axial_hole_sensor0 0.008
+module_L5t_halfmodule_axial_slot_sensor0 0.008
+module_L5t_halfmodule_stereo_hole_sensor0 0.008
+module_L5t_halfmodule_stereo_slot_sensor0 0.008
+module_L6t_halfmodule_axial_hole_sensor0 0.008
+module_L6t_halfmodule_axial_slot_sensor0 0.008
+module_L6t_halfmodule_stereo_hole_sensor0 0.008
+module_L6t_halfmodule_stereo_slot_sensor0 0.008
diff --git a/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt01mm.txt b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt01mm.txt
new file mode 100644
index 000000000..48a04d84b
--- /dev/null
+++ b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt01mm.txt
@@ -0,0 +1,36 @@
+module_L1b_halfmodule_axial_sensor0 0.01
+module_L1b_halfmodule_stereo_sensor0 0.01
+module_L2b_halfmodule_axial_sensor0 0.01
+module_L2b_halfmodule_stereo_sensor0 0.01
+module_L3b_halfmodule_axial_sensor0 0.01
+module_L3b_halfmodule_stereo_sensor0 0.01
+module_L4b_halfmodule_axial_hole_sensor0 0.01
+module_L4b_halfmodule_axial_slot_sensor0 0.01
+module_L4b_halfmodule_stereo_hole_sensor0 0.01
+module_L4b_halfmodule_stereo_slot_sensor0 0.01
+module_L5b_halfmodule_axial_hole_sensor0 0.01
+module_L5b_halfmodule_axial_slot_sensor0 0.01
+module_L5b_halfmodule_stereo_hole_sensor0 0.01
+module_L5b_halfmodule_stereo_slot_sensor0 0.01
+module_L6b_halfmodule_axial_hole_sensor0 0.01
+module_L6b_halfmodule_axial_slot_sensor0 0.01
+module_L6b_halfmodule_stereo_hole_sensor0 0.01
+module_L6b_halfmodule_stereo_slot_sensor0 0.01
+module_L1t_halfmodule_axial_sensor0 0.01
+module_L1t_halfmodule_stereo_sensor0 0.01
+module_L2t_halfmodule_axial_sensor0 0.01
+module_L2t_halfmodule_stereo_sensor0 0.01
+module_L3t_halfmodule_axial_sensor0 0.01
+module_L3t_halfmodule_stereo_sensor0 0.01
+module_L4t_halfmodule_axial_hole_sensor0 0.01
+module_L4t_halfmodule_axial_slot_sensor0 0.01
+module_L4t_halfmodule_stereo_hole_sensor0 0.01
+module_L4t_halfmodule_stereo_slot_sensor0 0.01
+module_L5t_halfmodule_axial_hole_sensor0 0.01
+module_L5t_halfmodule_axial_slot_sensor0 0.01
+module_L5t_halfmodule_stereo_hole_sensor0 0.01
+module_L5t_halfmodule_stereo_slot_sensor0 0.01
+module_L6t_halfmodule_axial_hole_sensor0 0.01
+module_L6t_halfmodule_axial_slot_sensor0 0.01
+module_L6t_halfmodule_stereo_hole_sensor0 0.01
+module_L6t_halfmodule_stereo_slot_sensor0 0.01
diff --git a/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt0mm.txt b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt0mm.txt
new file mode 100644
index 000000000..0ee5ea79a
--- /dev/null
+++ b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt0mm.txt
@@ -0,0 +1,36 @@
+module_L1b_halfmodule_axial_sensor0 0.0
+module_L1b_halfmodule_stereo_sensor0 0.0
+module_L2b_halfmodule_axial_sensor0 0.0
+module_L2b_halfmodule_stereo_sensor0 0.0
+module_L3b_halfmodule_axial_sensor0 0.0
+module_L3b_halfmodule_stereo_sensor0 0.0
+module_L4b_halfmodule_axial_hole_sensor0 0.0
+module_L4b_halfmodule_axial_slot_sensor0 0.0
+module_L4b_halfmodule_stereo_hole_sensor0 0.0
+module_L4b_halfmodule_stereo_slot_sensor0 0.0
+module_L5b_halfmodule_axial_hole_sensor0 0.0
+module_L5b_halfmodule_axial_slot_sensor0 0.0
+module_L5b_halfmodule_stereo_hole_sensor0 0.0
+module_L5b_halfmodule_stereo_slot_sensor0 0.0
+module_L6b_halfmodule_axial_hole_sensor0 0.0
+module_L6b_halfmodule_axial_slot_sensor0 0.0
+module_L6b_halfmodule_stereo_hole_sensor0 0.0
+module_L6b_halfmodule_stereo_slot_sensor0 0.0
+module_L1t_halfmodule_axial_sensor0 0.0
+module_L1t_halfmodule_stereo_sensor0 0.0
+module_L2t_halfmodule_axial_sensor0 0.0
+module_L2t_halfmodule_stereo_sensor0 0.0
+module_L3t_halfmodule_axial_sensor0 0.0
+module_L3t_halfmodule_stereo_sensor0 0.0
+module_L4t_halfmodule_axial_hole_sensor0 0.0
+module_L4t_halfmodule_axial_slot_sensor0 0.0
+module_L4t_halfmodule_stereo_hole_sensor0 0.0
+module_L4t_halfmodule_stereo_slot_sensor0 0.0
+module_L5t_halfmodule_axial_hole_sensor0 0.0
+module_L5t_halfmodule_axial_slot_sensor0 0.0
+module_L5t_halfmodule_stereo_hole_sensor0 0.0
+module_L5t_halfmodule_stereo_slot_sensor0 0.0
+module_L6t_halfmodule_axial_hole_sensor0 0.0
+module_L6t_halfmodule_axial_slot_sensor0 0.0
+module_L6t_halfmodule_stereo_hole_sensor0 0.0
+module_L6t_halfmodule_stereo_slot_sensor0 0.0
diff --git a/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt1mm.txt b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt1mm.txt
new file mode 100644
index 000000000..5c794e237
--- /dev/null
+++ b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/exampleSmearing-0pt1mm.txt
@@ -0,0 +1,36 @@
+module_L1b_halfmodule_axial_sensor0 0.1
+module_L1b_halfmodule_stereo_sensor0 0.1
+module_L2b_halfmodule_axial_sensor0 0.1
+module_L2b_halfmodule_stereo_sensor0 0.1
+module_L3b_halfmodule_axial_sensor0 0.1
+module_L3b_halfmodule_stereo_sensor0 0.1
+module_L4b_halfmodule_axial_hole_sensor0 0.1
+module_L4b_halfmodule_axial_slot_sensor0 0.1
+module_L4b_halfmodule_stereo_hole_sensor0 0.1
+module_L4b_halfmodule_stereo_slot_sensor0 0.1
+module_L5b_halfmodule_axial_hole_sensor0 0.1
+module_L5b_halfmodule_axial_slot_sensor0 0.1
+module_L5b_halfmodule_stereo_hole_sensor0 0.1
+module_L5b_halfmodule_stereo_slot_sensor0 0.1
+module_L6b_halfmodule_axial_hole_sensor0 0.1
+module_L6b_halfmodule_axial_slot_sensor0 0.1
+module_L6b_halfmodule_stereo_hole_sensor0 0.1
+module_L6b_halfmodule_stereo_slot_sensor0 0.1
+module_L1t_halfmodule_axial_sensor0 0.1
+module_L1t_halfmodule_stereo_sensor0 0.1
+module_L2t_halfmodule_axial_sensor0 0.1
+module_L2t_halfmodule_stereo_sensor0 0.1
+module_L3t_halfmodule_axial_sensor0 0.1
+module_L3t_halfmodule_stereo_sensor0 0.1
+module_L4t_halfmodule_axial_hole_sensor0 0.1
+module_L4t_halfmodule_axial_slot_sensor0 0.1
+module_L4t_halfmodule_stereo_hole_sensor0 0.1
+module_L4t_halfmodule_stereo_slot_sensor0 0.1
+module_L5t_halfmodule_axial_hole_sensor0 0.1
+module_L5t_halfmodule_axial_slot_sensor0 0.1
+module_L5t_halfmodule_stereo_hole_sensor0 0.1
+module_L5t_halfmodule_stereo_slot_sensor0 0.1
+module_L6t_halfmodule_axial_hole_sensor0 0.1
+module_L6t_halfmodule_axial_slot_sensor0 0.1
+module_L6t_halfmodule_stereo_hole_sensor0 0.1
+module_L6t_halfmodule_stereo_slot_sensor0 0.1
diff --git a/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-2ns-4nsL0.txt b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-2ns-4nsL0.txt
new file mode 100644
index 000000000..2f82f048c
--- /dev/null
+++ b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-2ns-4nsL0.txt
@@ -0,0 +1,36 @@
+module_L1b_halfmodule_axial_sensor0 4.0
+module_L1b_halfmodule_stereo_sensor0 4.0
+module_L2b_halfmodule_axial_sensor0 2.0
+module_L2b_halfmodule_stereo_sensor0 2.0
+module_L3b_halfmodule_axial_sensor0 2.0
+module_L3b_halfmodule_stereo_sensor0 2.0
+module_L4b_halfmodule_axial_hole_sensor0 2.0
+module_L4b_halfmodule_axial_slot_sensor0 2.0
+module_L4b_halfmodule_stereo_hole_sensor0 2.0
+module_L4b_halfmodule_stereo_slot_sensor0 2.0
+module_L5b_halfmodule_axial_hole_sensor0 2.0
+module_L5b_halfmodule_axial_slot_sensor0 2.0
+module_L5b_halfmodule_stereo_hole_sensor0 2.0
+module_L5b_halfmodule_stereo_slot_sensor0 2.0
+module_L6b_halfmodule_axial_hole_sensor0 2.0
+module_L6b_halfmodule_axial_slot_sensor0 2.0
+module_L6b_halfmodule_stereo_hole_sensor0 2.0
+module_L6b_halfmodule_stereo_slot_sensor0 2.0
+module_L1t_halfmodule_axial_sensor0 4.0
+module_L1t_halfmodule_stereo_sensor0 4.0
+module_L2t_halfmodule_axial_sensor0 2.0
+module_L2t_halfmodule_stereo_sensor0 2.0
+module_L3t_halfmodule_axial_sensor0 2.0
+module_L3t_halfmodule_stereo_sensor0 2.0
+module_L4t_halfmodule_axial_hole_sensor0 2.0
+module_L4t_halfmodule_axial_slot_sensor0 2.0
+module_L4t_halfmodule_stereo_hole_sensor0 2.0
+module_L4t_halfmodule_stereo_slot_sensor0 2.0
+module_L5t_halfmodule_axial_hole_sensor0 2.0
+module_L5t_halfmodule_axial_slot_sensor0 2.0
+module_L5t_halfmodule_stereo_hole_sensor0 2.0
+module_L5t_halfmodule_stereo_slot_sensor0 2.0
+module_L6t_halfmodule_axial_hole_sensor0 2.0
+module_L6t_halfmodule_axial_slot_sensor0 2.0
+module_L6t_halfmodule_stereo_hole_sensor0 2.0
+module_L6t_halfmodule_stereo_slot_sensor0 2.0
diff --git a/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-2ns.txt b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-2ns.txt
new file mode 100644
index 000000000..836987547
--- /dev/null
+++ b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-2ns.txt
@@ -0,0 +1,36 @@
+module_L1b_halfmodule_axial_sensor0 2.0
+module_L1b_halfmodule_stereo_sensor0 2.0
+module_L2b_halfmodule_axial_sensor0 2.0
+module_L2b_halfmodule_stereo_sensor0 2.0
+module_L3b_halfmodule_axial_sensor0 2.0
+module_L3b_halfmodule_stereo_sensor0 2.0
+module_L4b_halfmodule_axial_hole_sensor0 2.0
+module_L4b_halfmodule_axial_slot_sensor0 2.0
+module_L4b_halfmodule_stereo_hole_sensor0 2.0
+module_L4b_halfmodule_stereo_slot_sensor0 2.0
+module_L5b_halfmodule_axial_hole_sensor0 2.0
+module_L5b_halfmodule_axial_slot_sensor0 2.0
+module_L5b_halfmodule_stereo_hole_sensor0 2.0
+module_L5b_halfmodule_stereo_slot_sensor0 2.0
+module_L6b_halfmodule_axial_hole_sensor0 2.0
+module_L6b_halfmodule_axial_slot_sensor0 2.0
+module_L6b_halfmodule_stereo_hole_sensor0 2.0
+module_L6b_halfmodule_stereo_slot_sensor0 2.0
+module_L1t_halfmodule_axial_sensor0 2.0
+module_L1t_halfmodule_stereo_sensor0 2.0
+module_L2t_halfmodule_axial_sensor0 2.0
+module_L2t_halfmodule_stereo_sensor0 2.0
+module_L3t_halfmodule_axial_sensor0 2.0
+module_L3t_halfmodule_stereo_sensor0 2.0
+module_L4t_halfmodule_axial_hole_sensor0 2.0
+module_L4t_halfmodule_axial_slot_sensor0 2.0
+module_L4t_halfmodule_stereo_hole_sensor0 2.0
+module_L4t_halfmodule_stereo_slot_sensor0 2.0
+module_L5t_halfmodule_axial_hole_sensor0 2.0
+module_L5t_halfmodule_axial_slot_sensor0 2.0
+module_L5t_halfmodule_stereo_hole_sensor0 2.0
+module_L5t_halfmodule_stereo_slot_sensor0 2.0
+module_L6t_halfmodule_axial_hole_sensor0 2.0
+module_L6t_halfmodule_axial_slot_sensor0 2.0
+module_L6t_halfmodule_stereo_hole_sensor0 2.0
+module_L6t_halfmodule_stereo_slot_sensor0 2.0
diff --git a/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-5ns.txt b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-5ns.txt
new file mode 100644
index 000000000..3727b36bc
--- /dev/null
+++ b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-5ns.txt
@@ -0,0 +1,36 @@
+module_L1b_halfmodule_axial_sensor0 5.0
+module_L1b_halfmodule_stereo_sensor0 5.0
+module_L2b_halfmodule_axial_sensor0 5.0
+module_L2b_halfmodule_stereo_sensor0 5.0
+module_L3b_halfmodule_axial_sensor0 5.0
+module_L3b_halfmodule_stereo_sensor0 5.0
+module_L4b_halfmodule_axial_hole_sensor0 5.0
+module_L4b_halfmodule_axial_slot_sensor0 5.0
+module_L4b_halfmodule_stereo_hole_sensor0 5.0
+module_L4b_halfmodule_stereo_slot_sensor0 5.0
+module_L5b_halfmodule_axial_hole_sensor0 5.0
+module_L5b_halfmodule_axial_slot_sensor0 5.0
+module_L5b_halfmodule_stereo_hole_sensor0 5.0
+module_L5b_halfmodule_stereo_slot_sensor0 5.0
+module_L6b_halfmodule_axial_hole_sensor0 5.0
+module_L6b_halfmodule_axial_slot_sensor0 5.0
+module_L6b_halfmodule_stereo_hole_sensor0 5.0
+module_L6b_halfmodule_stereo_slot_sensor0 5.0
+module_L1t_halfmodule_axial_sensor0 5.0
+module_L1t_halfmodule_stereo_sensor0 5.0
+module_L2t_halfmodule_axial_sensor0 5.0
+module_L2t_halfmodule_stereo_sensor0 5.0
+module_L3t_halfmodule_axial_sensor0 5.0
+module_L3t_halfmodule_stereo_sensor0 5.0
+module_L4t_halfmodule_axial_hole_sensor0 5.0
+module_L4t_halfmodule_axial_slot_sensor0 5.0
+module_L4t_halfmodule_stereo_hole_sensor0 5.0
+module_L4t_halfmodule_stereo_slot_sensor0 5.0
+module_L5t_halfmodule_axial_hole_sensor0 5.0
+module_L5t_halfmodule_axial_slot_sensor0 5.0
+module_L5t_halfmodule_stereo_hole_sensor0 5.0
+module_L5t_halfmodule_stereo_slot_sensor0 5.0
+module_L6t_halfmodule_axial_hole_sensor0 5.0
+module_L6t_halfmodule_axial_slot_sensor0 5.0
+module_L6t_halfmodule_stereo_hole_sensor0 5.0
+module_L6t_halfmodule_stereo_slot_sensor0 5.0
diff --git a/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-almost-zero.txt b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-almost-zero.txt
new file mode 100644
index 000000000..bfe6e9557
--- /dev/null
+++ b/tracking/src/main/resources/org/hps/recon/tracking/svtTimeAndPositionSmearing/timeSmearing-almost-zero.txt
@@ -0,0 +1,36 @@
+module_L1b_halfmodule_axial_sensor0 0.00001
+module_L1b_halfmodule_stereo_sensor0 0.00001
+module_L2b_halfmodule_axial_sensor0 0.00001
+module_L2b_halfmodule_stereo_sensor0 0.00001
+module_L3b_halfmodule_axial_sensor0 0.00001
+module_L3b_halfmodule_stereo_sensor0 0.00001
+module_L4b_halfmodule_axial_hole_sensor0 0.00001
+module_L4b_halfmodule_axial_slot_sensor0 0.00001
+module_L4b_halfmodule_stereo_hole_sensor0 0.00001
+module_L4b_halfmodule_stereo_slot_sensor0 0.00001
+module_L5b_halfmodule_axial_hole_sensor0 0.00001
+module_L5b_halfmodule_axial_slot_sensor0 0.00001
+module_L5b_halfmodule_stereo_hole_sensor0 0.00001
+module_L5b_halfmodule_stereo_slot_sensor0 0.00001
+module_L6b_halfmodule_axial_hole_sensor0 0.00001
+module_L6b_halfmodule_axial_slot_sensor0 0.00001
+module_L6b_halfmodule_stereo_hole_sensor0 0.00001
+module_L6b_halfmodule_stereo_slot_sensor0 0.00001
+module_L1t_halfmodule_axial_sensor0 0.00001
+module_L1t_halfmodule_stereo_sensor0 0.00001
+module_L2t_halfmodule_axial_sensor0 0.00001
+module_L2t_halfmodule_stereo_sensor0 0.00001
+module_L3t_halfmodule_axial_sensor0 0.00001
+module_L3t_halfmodule_stereo_sensor0 0.00001
+module_L4t_halfmodule_axial_hole_sensor0 0.00001
+module_L4t_halfmodule_axial_slot_sensor0 0.00001
+module_L4t_halfmodule_stereo_hole_sensor0 0.00001
+module_L4t_halfmodule_stereo_slot_sensor0 0.00001
+module_L5t_halfmodule_axial_hole_sensor0 0.00001
+module_L5t_halfmodule_axial_slot_sensor0 0.00001
+module_L5t_halfmodule_stereo_hole_sensor0 0.00001
+module_L5t_halfmodule_stereo_slot_sensor0 0.00001
+module_L6t_halfmodule_axial_hole_sensor0 0.00001
+module_L6t_halfmodule_axial_slot_sensor0 0.00001
+module_L6t_halfmodule_stereo_hole_sensor0 0.00001
+module_L6t_halfmodule_stereo_slot_sensor0 0.00001