lcsim/src/org/lcsim/recon/tracking/seedtracker
diff -u -r1.11 -r1.12
--- FastCheck.java 6 Nov 2009 00:29:40 -0000 1.11
+++ FastCheck.java 6 Nov 2009 05:19:08 -0000 1.12
@@ -14,6 +14,7 @@
import org.lcsim.fit.twopointcircle.TwoPointCircleFit;
import org.lcsim.fit.twopointcircle.TwoPointCircleFitter;
import org.lcsim.fit.twopointcircle.TwoPointLineFit;
+import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
import org.lcsim.recon.tracking.seedtracker.diagnostic.ISeedTrackerDiagnostics;
/**
@@ -253,45 +254,65 @@
double[] pos;
double z[] = new double[3];
double dztot = 0.;
+ int indx;
+ HelicalTrackHit hit;
boolean zfirst = true;
// While not terribly elegant, code for speed
// Use calls that give uncorrected position and error
// Get the relevant variables for hit 1
- pos = hit1.getPosition();
- p[0][0] = pos[0];
- p[0][1] = pos[1];
- z[0] = pos[2];
- if (hit1 instanceof HelicalTrack3DHit) dztot += _nsig * ((HelicalTrack3DHit) hit1).dz();
- else {
- zfirst = false;
- if (hit1 instanceof HelicalTrack2DHit) dztot += ((HelicalTrack2DHit) hit1).zlen() / 2.;
- else dztot += _nsig * Math.sqrt(hit1.getCovMatrix()[5]);
- }
-
- // Get the relevant variables for hit 2
- pos = hit2.getPosition();
- p[1][0] = pos[0];
- p[1][1] = pos[1];
- z[1] = pos[2];
- if (hit2 instanceof HelicalTrack3DHit) dztot += _nsig * ((HelicalTrack3DHit) hit2).dz();
- else {
- zfirst = false;
- if (hit2 instanceof HelicalTrack2DHit) dztot += ((HelicalTrack2DHit) hit2).zlen() / 2.;
- else dztot += _nsig * Math.sqrt(hit2.getCovMatrix()[5]);
- }
+ indx = 0;
+ hit = hit1;
+ pos = hit.getPosition();
+ p[indx][0] = pos[0];
+ p[indx][1] = pos[1];
+ z[indx] = pos[2];
+ if (hit.BarrelEndcapFlag() == BarrelEndcapFlag.BARREL) {
+ if (hit instanceof HelicalTrack3DHit) dztot += _nsig * ((HelicalTrack3DHit) hit).dz();
+ else {
+ zfirst = false;
+ if (hit instanceof HelicalTrack2DHit) dztot += ((HelicalTrack2DHit) hit).zlen() / 2.;
+ else dztot += _nsig * Math.sqrt(hit.getCovMatrix()[5]);
+ }
+ } else {
+ dztot += hit.dr() * Math.abs(pos[2]) / Math.sqrt(pos[0]*pos[0] + pos[1]*pos[1]);
+ }
+
+ // Get the relevant variables for hit 2
+ indx = 1;
+ hit = hit2;
+ pos = hit.getPosition();
+ p[indx][0] = pos[0];
+ p[indx][1] = pos[1];
+ z[indx] = pos[2];
+ if (hit.BarrelEndcapFlag() == BarrelEndcapFlag.BARREL) {
+ if (hit instanceof HelicalTrack3DHit) dztot += _nsig * ((HelicalTrack3DHit) hit).dz();
+ else {
+ zfirst = false;
+ if (hit instanceof HelicalTrack2DHit) dztot += ((HelicalTrack2DHit) hit).zlen() / 2.;
+ else dztot += _nsig * Math.sqrt(hit.getCovMatrix()[5]);
+ }
+ } else {
+ dztot += hit.dr() * Math.abs(pos[2]) / Math.sqrt(pos[0]*pos[0] + pos[1]*pos[1]);
+ }
// Get the relevant variables for hit 3
- pos = hit3.getPosition();
- p[2][0] = pos[0];
- p[2][1] = pos[1];
- z[2] = pos[2];
- if (hit3 instanceof HelicalTrack3DHit) dztot += _nsig * ((HelicalTrack3DHit) hit3).dz();
- else {
- zfirst = false;
- if (hit3 instanceof HelicalTrack2DHit) dztot += ((HelicalTrack2DHit) hit3).zlen() / 2.;
- else dztot += _nsig * Math.sqrt(hit3.getCovMatrix()[5]);
- }
+ indx = 2;
+ hit = hit3;
+ pos = hit.getPosition();
+ p[indx][0] = pos[0];
+ p[indx][1] = pos[1];
+ z[indx] = pos[2];
+ if (hit.BarrelEndcapFlag() == BarrelEndcapFlag.BARREL) {
+ if (hit instanceof HelicalTrack3DHit) dztot += _nsig * ((HelicalTrack3DHit) hit).dz();
+ else {
+ zfirst = false;
+ if (hit instanceof HelicalTrack2DHit) dztot += ((HelicalTrack2DHit) hit).zlen() / 2.;
+ else dztot += _nsig * Math.sqrt(hit.getCovMatrix()[5]);
+ }
+ } else {
+ dztot += hit.dr() * Math.abs(pos[2]) / Math.sqrt(pos[0]*pos[0] + pos[1]*pos[1]);
+ }
// Add multiple scattering error here - for now, just set it to 1 mm
dztot += 1.;