Print

Print


Commit in lcsim/src/org/lcsim/fit/helicaltrack on MAIN
HelicalTrackHitDriver.java+98-2091.16 -> 1.17
HelicalTrackStrip.java+1-11.6 -> 1.7
StereoHitMaker.java+5-31.3 -> 1.4
+104-213
3 modified files
Fix bug in virtual segmentation hit driver

lcsim/src/org/lcsim/fit/helicaltrack
HelicalTrackHitDriver.java 1.16 -> 1.17
diff -u -r1.16 -r1.17
--- HelicalTrackHitDriver.java	10 Jul 2008 22:05:03 -0000	1.16
+++ HelicalTrackHitDriver.java	12 Jul 2008 01:25:41 -0000	1.17
@@ -15,11 +15,14 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+
 import org.lcsim.contrib.SiStripSim.SiTrackerHit;
 import org.lcsim.contrib.SiStripSim.SiTrackerHitStrip1D;
 import org.lcsim.contrib.SiStripSim.TrackerHitType.CoordinateSystem;
 import org.lcsim.contrib.onoprien.tracking.geom.SegmentationManager;
 import org.lcsim.contrib.onoprien.tracking.geom.Sensor;
+import org.lcsim.contrib.onoprien.tracking.geom.SensorType;
+import org.lcsim.contrib.onoprien.tracking.geom.sensortypes.Cylinder;
 import org.lcsim.contrib.onoprien.tracking.hit.DigiTrackerHit;
 import org.lcsim.contrib.onoprien.tracking.hit.TrackerCluster;
 import org.lcsim.detector.DetectorElementStore;
@@ -34,6 +37,7 @@
 import org.lcsim.event.TrackerHit;
 import org.lcsim.event.base.BaseTrackerHitMC;
 import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
+import org.lcsim.spacegeom.SpacePointVector;
 import org.lcsim.util.Driver;
 
 /**
@@ -106,14 +110,14 @@
                 SymmetricMatrix cov = new SymmetricMatrix(3, hit.getCovMatrix(), true);
                 
                 try {
-                    SimTrackerHit simhit = ((BaseTrackerHitMC)hit).getSimHits().get(0); 
-                    IDetectorElementContainer cont = DetectorElementStore.getInstance().find(simhit.getIdentifier()); 
+                    SimTrackerHit simhit = ((BaseTrackerHitMC)hit).getSimHits().get(0);
+                    IDetectorElementContainer cont = DetectorElementStore.getInstance().find(simhit.getIdentifier());
                     if (cont.isEmpty()) {
                         throw new RuntimeException("Detector Container is empty!");
                     } else {
-                        IDetectorElement de = cont.get(0); 
+                        IDetectorElement de = cont.get(0);
                         String detname = ID.getName(de);
-                        int lyr = ID.getLayer(de); 
+                        int lyr = ID.getLayer(de);
                         HelicalTrackHit hthit = new HelicalTrack3DHit(pos, cov, hit.getdEdx(), hit.getTime(), hit.getRawHits(),
                                 detname, lyr, ID.getBarrelEndcapFlag(de));
                         
@@ -122,15 +126,11 @@
                     }
                     
                 } catch(Exception e) {
-                    System.out.println("Warning, could not complete Identification for smeared hits. Reason: "+e.getMessage()); 
+                    System.out.println("Warning, could not complete Identification for smeared hits. Reason: "+e.getMessage());
                     HelicalTrackHit hthit = new HelicalTrack3DHit(pos, cov, hit.getdEdx(), hit.getTime(),
-                    hit.getRawHits(), "Unknown", 0, BarrelEndcapFlag.BARREL);
+                            hit.getRawHits(), "Unknown", 0, BarrelEndcapFlag.BARREL);
                     helhits.add(hthit);
                 }
-                
-                
-                
-
             }
         }
         
@@ -178,38 +178,35 @@
         
         
         for (String colname : _digcol) {
-        
-            List<SiTrackerHit> hitlist = (List<SiTrackerHit>) event.get(colname); 
-            List<HelicalTrackStrip> strips = new ArrayList<HelicalTrackStrip>(); 
+            
+            List<SiTrackerHit> hitlist = (List<SiTrackerHit>) event.get(colname);
+            List<HelicalTrackStrip> strips = new ArrayList<HelicalTrackStrip>();
             for (SiTrackerHit hit : hitlist) {
-
+                
                 if (hit instanceof SiTrackerHitStrip1D) {
                     //determine if the hit is stereoed or not
-                    SiTrackerHitStrip1D h = (SiTrackerHitStrip1D) hit; 
-                    SiTrackerModule m = (SiTrackerModule) hit.getSensor().getParent(); 
+                    SiTrackerHitStrip1D h = (SiTrackerHitStrip1D) hit;
+                    SiTrackerModule m = (SiTrackerModule) hit.getSensor().getParent();
                     
                     if (m.getChildren().size()==2) //stereo hit
                         strips.add(makeDigiStrip(h));
                     else helhits.add(makeDigiAxialHit(h)); //isolated hit
                 }
                 //for other types, make 3d hits
-                else helhits.add(makeDigi3DHit(hit)); 
+                else helhits.add(makeDigi3DHit(hit));
             }
             
             //generate Stereo hits
-            List<HelicalTrackCross> stereohits = _crosser.MakeHits(strips); 
-//            System.out.println(stereohits.size()); 
+            List<HelicalTrackCross> stereohits = _crosser.MakeHits(strips);
             
-            helhits.addAll(stereohits); 
-         }
+            helhits.addAll(stereohits);
+        }
         
         //  Put the HelicalTrackHits back into the event
         event.put(_outname, helhits,HelicalTrackHit.class,0);
         
         return;
-    }
-    
-
+    } 
     
     /**
      * Add a TrackerHit collection to be processed.
@@ -223,7 +220,7 @@
             _smcol.add(name);
         } else if (type == HitType.Digitized)
             _digcol.add(name);
-            return;
+        return;
     }
     
     /**
@@ -235,7 +232,6 @@
         return;
     }
     
-    
     private HelicalTrackHit MakeAxialHit(org.lcsim.contrib.onoprien.tracking.hit.TrackerHit hit) {
         HelicalTrackStrip strip = MakeStrip(hit);
         if (VecOp.cross(strip.v(), _zhat).magnitude() > _eps) return null;
@@ -244,7 +240,6 @@
         HelicalTrackHit axialhit = new HelicalTrack2DHit(strip.origin(), HitUtils.StripCov(strip),
                 strip.dEdx(), strip.time(), strip.rawhits(), strip.detector(), strip.layer(), strip.BarrelEndcapFlag(),
                 zmin, zmax);
-        System.out.println("Hit position: "+axialhit.toString());
         List<MCParticle> mcplist = getMCParticles(hit.getCluster());
         for (MCParticle mcp : mcplist) {
             axialhit.addMCParticle(mcp);
@@ -253,24 +248,41 @@
     }
     
     private HelicalTrackStrip MakeStrip(org.lcsim.contrib.onoprien.tracking.hit.TrackerHit hit) {
+        Hep3Vector u;
+        Hep3Vector v;
+        Hep3Vector org;
+        double umeas;
+        double du;
+        double vmin;
+        double vmax;
         Sensor s = hit.getSensor();
-        System.out.println("Global position: "+hit.getPosition().toString());
-        Hep3Vector org = s.localToGlobal(_orgloc);
-        System.out.println("Origin position: "+org.toString());
-        Hep3Vector u = VecOp.sub(s.localToGlobal(_uloc), org);
-        System.out.println("u: "+u.toString());
-        Hep3Vector v = VecOp.sub(s.localToGlobal(_vloc), org);
-        double umeas = hit.getLocalPosition().x();
-        System.out.println("u measured: "+umeas);
-        double du = Math.sqrt(hit.getLocalCovMatrix().diagonal(0));
-        double vmin = hit.getLocalSegment().getStartPoint().y();
-        double vmax = hit.getLocalSegment().getEndPoint().y();
+        SensorType stype = s.getType();
+        if  (stype instanceof Cylinder) {
+            SpacePointVector seg = hit.getSegment();
+            v = VecOp.unit(seg.getDirection());
+            Hep3Vector r = new BasicHep3Vector(hit.getPosition().x(), hit.getPosition().y(), 0.0);
+            u = VecOp.unit(VecOp.cross(v, r));
+            umeas = 0.;
+            du = r.magnitude() * Math.sqrt(hit.getLocalCovMatrix().diagonal(0));
+            org = VecOp.mult(0.5, VecOp.add(seg.getStartPoint(), seg.getEndPoint()));
+            vmax = seg.getDirection().magnitude() / 2.;
+            vmin = -vmax;
+        } else {
+            org = s.localToGlobal(_orgloc);
+            u = VecOp.sub(s.localToGlobal(_uloc), org);
+            v = VecOp.sub(s.localToGlobal(_vloc), org);
+            umeas = hit.getLocalPosition().x();
+            du = Math.sqrt(hit.getLocalCovMatrix().diagonal(0));
+            vmin = hit.getLocalSegment().getStartPoint().y();
+            vmax = hit.getLocalSegment().getEndPoint().y();
+        }
+        
         double dEdx = hit.getSignal();
         double time = hit.getTime();
         IDetectorElement de = s.getDetectorElement();
         String det = ID.getName(de);
-        //  Divide the layer number by 2 to get the stereo layer number
-        int lyr = ID.getLayer(de) / 2;
+        int lyr = ID.getLayer(de);
+        if (_segman.getStereoPartners(s) != null) lyr = lyr / 2;
         BarrelEndcapFlag beflag = ID.getBarrelEndcapFlag(de);
         
         HelicalTrackStrip strip = new HelicalTrackStrip(org, u, v, umeas, du, vmin, vmax, dEdx, time, null,
@@ -306,192 +318,69 @@
         }
         return mcplist;
     }
-    
-    
-    
-
-//    private static final int[] LAYER_MAP = new int[]{0,1,2,0,1,2,3}; 
+ 
     private HelicalTrackHit makeDigi3DHit(SiTrackerHit h) {
         
-        IDetectorElement de = h.getSensor(); 
-        int lyr = ID.getLayer(de); 
-        BarrelEndcapFlag be = ID.getBarrelEndcapFlag(de); 
+        IDetectorElement de = h.getSensor();
+        int lyr = ID.getLayer(de);
+        BarrelEndcapFlag be = ID.getBarrelEndcapFlag(de);
         
-        HelicalTrackHit hit = new HelicalTrack3DHit(h.getPositionAsVector(), 
-                h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(), 
+        HelicalTrackHit hit = new HelicalTrack3DHit(h.getPositionAsVector(),
+                h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(),
                 h.getRawHits(), ID.getName(de), lyr, be);
         
         for (MCParticle p : h.getMCParticles()) hit.addMCParticle(p);
         
-        return hit; 
+        return hit;
         
     }
     
     private HelicalTrackHit makeDigiAxialHit(SiTrackerHitStrip1D h){
         
-        double z1 = h.getHitSegment().getEndPoint().z(); 
-        double z2 = h.getHitSegment().getStartPoint().z(); 
-        double zmin = Math.min(z1,z2); 
-        double zmax = Math.max(z1,z2); 
-        IDetectorElement de = h.getSensor(); 
-        
-        HelicalTrackHit hit = new HelicalTrack2DHit(h.getPositionAsVector(), 
-                h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(), 
-                h.getRawHits(), ID.getName(de), ID.getLayer(de), 
+        double z1 = h.getHitSegment().getEndPoint().z();
+        double z2 = h.getHitSegment().getStartPoint().z();
+        double zmin = Math.min(z1,z2);
+        double zmax = Math.max(z1,z2);
+        IDetectorElement de = h.getSensor();
+        
+        HelicalTrackHit hit = new HelicalTrack2DHit(h.getPositionAsVector(),
+                h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(),
+                h.getRawHits(), ID.getName(de), ID.getLayer(de),
                 ID.getBarrelEndcapFlag(de), zmin, zmax);
         
-        
-       for (MCParticle p : h.getMCParticles()) hit.addMCParticle(p);
-//       System.out.println("DigiAxialHit made at "+h.getPositionAsVector().toString()); 
-       return hit; 
+        for (MCParticle p : h.getMCParticles()) hit.addMCParticle(p);
+        return hit;
     }
     
-
+    
     private HelicalTrackStrip makeDigiStrip(SiTrackerHitStrip1D h){
         
-         SiTrackerHitStrip1D local = h.getTransformedHit(CoordinateSystem.SENSOR); 
-         SiTrackerHitStrip1D global = h.getTransformedHit(CoordinateSystem.GLOBAL); 
-                         
-         ITransform3D trans = local.getLocalToGlobal(); 
-         Hep3Vector org = trans.transformed(_orgloc); 
-         Hep3Vector u = global.getMeasuredCoordinate(); 
-         Hep3Vector v = global.getUnmeasuredCoordinate(); 
-         
-//                         System.out.println(local.getPositionAsVector().toString());                       
-//                         System.out.println("start: "+local.getHitSegment().getStartPoint().toString());
-//                         System.out.println("end: " + local.getHitSegment().getEndPoint().toString()); 
-//                         System.out.println("measured: "+local.getMeasuredCoordinate().toString()); 
-//                         System.out.println("unmeasured: "+local.getUnmeasuredCoordinate().toString());
-//                         System.out.println("length: "+local.getHitLength()); 
-//                         System.out.println("start dot measured: "+VecOp.dot(local.getUnmeasuredCoordinate(),local.getHitSegment().getStartPoint()));
-//                         System.out.println("end dot measured: "+VecOp.dot(local.getUnmeasuredCoordinate(),local.getHitSegment().getEndPoint()));
-//                         System.out.println(); 
-    
-         double umeas = local.getPosition()[0]; 
-         double vmin = VecOp.dot(local.getUnmeasuredCoordinate(),local.getHitSegment().getStartPoint()); 
-         double vmax = VecOp.dot(local.getUnmeasuredCoordinate(),local.getHitSegment().getEndPoint());
-         double du = Math.sqrt(local.getCovarianceAsMatrix().diagonal(0)); 
-         
-         IDetectorElement de = h.getSensor(); 
-         String det = ID.getName(de); 
-         int lyr = ID.getLayer(de);
-         BarrelEndcapFlag be = ID.getBarrelEndcapFlag(de); 
-         
-         double dEdx = h.getdEdx(); 
-         double time = h.getTime(); 
-         List<RawTrackerHit> rawhits = h.getRawHits(); 
-         HelicalTrackStrip strip = new HelicalTrackStrip(org, u, v, umeas, du, 
-                 vmin, vmax, dEdx, time, rawhits, det, lyr, be);
-         
-         for (MCParticle p : h.getMCParticles()) strip.addMCParticle(p);
-         return strip; 
-    }
-    
-    
-    //  Get the hits for this collection and loop over the hits
-//            List<TrackerHit> hitlist = (List<TrackerHit>) event.get(colname);
-//            for (TrackerHit hit : hitlist) {
-//                double[] ps = hit.getPosition();
-//                double[] cov = hit.getCovMatrix();
-//
-    //  Check that these hits are actually instances of OldTrackerHit and cast accordingly
-//                if (hit instanceof OldTrackerHit) {
-//                    OldTrackerHit vshit = (OldTrackerHit) hit;
-    
-    //  Get the cluster(s) and a sensor for this hit
-//                    List<TrackerCluster> clist = vshit.getClusters();
-//                    MCParticle mcp = clist.get(0).getDigiHits().get(0).getElementalHits().get(0).getMCParticle();
-//                    Sensor sensor = clist.get(0).getSensor();
-    
-    //  Check if this is a barrel or endcap hit by transforming the sensor
-    //  normal in local coordinates to the global coordniate system
-//                    Hep3Vector gz = sensor.getRotation().transformFrom(lz);
-//                    BarrelEndcapFlag beflag = BarrelEndcapFlag.BARREL;
-//                    if (Math.pow(gz.z(),2) > 0.5) {
-    
-    //  If the sensor normal mostly points in the z direction call it
-    //  an endcap hit.  Check which endcap we are in.
-//                        if (hit.getPosition()[2]>0) beflag = BarrelEndcapFlag.ENDCAP_NORTH;
-//                        else beflag = BarrelEndcapFlag.ENDCAP_SOUTH;
-//                    }
-    
-    //  If there are more than one (i.e., two) clusters for this hit, we
-    //  have a cross formed from two stereo layers
-//                    if (vshit.isStereo()) {
-//                        if (clist.size() != 2) throw new RuntimeException("More than 2 clusters on a stereo hit");
-//                        List<HelicalTrackStrip> strips = new ArrayList<HelicalTrackStrip>();
-//                        for (TrackerCluster cl : clist) {
-//                            if (cl.getTrackerHits().size() == 0) cl.addTrackerHit(_hitmaker.make(cl));
-//                            Sensor s = cl.getSensor();
-//                            Hep3Vector org = s.localToGlobal(_orgloc);
-//                            Hep3Vector uhat = VecOp.sub(s.localToGlobal(_uloc), org);
-//                            Hep3Vector vhat = VecOp.sub(s.localToGlobal(_vloc), org);
-//                            org.lcsim.contrib.onoprien.tracking.hit.TrackerHit dhit = cl.getTrackerHits().get(0);
-//                            double umeas = dhit.getLocalPosition().x();
-//                            double vmin = dhit.getLocalSegment().getStartPoint().y();
-//                            double vmax = dhit.getLocalSegment().getEndPoint().y();
-//                            double du = Math.sqrt(dhit.getLocalCovMatrix().diagonal(0));
-    
-//                            Hep3Vector loc = dhit.getLocalPosition();
-//                            strips.add(new HelicalTrackStrip(org, uhat, vhat, umeas, du, vmin, vmax));
-//                        }
-//                        HelicalTrackHit hthit = new HelicalTrackCross(strips.get(0), strips.get(1));
-//                        addMCParticles(hit, hthit);
-//                        helhits.add(hthit);
-//                    } else {
-    
-    //  Check the number of readout dimensions (1 = strip, 2 = pixel)
-//                        SensorType stype = sensor.getType();
-//                        if (stype.getHitDimension() == 2) {
-    
-    //  Pixel hit found - make a HelicalTrack3DHit
-//                            HelicalTrackHit hthit = new HelicalTrack3DHit(hit, beflag);
-//                            addMCParticles(hit, hthit);
-//                            helhits.add(hthit);
-//                        } else if (stype.getHitDimension() == 1 && beflag == BarrelEndcapFlag.BARREL) {
-    
-    //  Barrel strip hit found - find the ends of the strip in z
-//                            Hep3Vector pos = new BasicHep3Vector(hit.getPosition());
-//                            Hep3Vector stripgeom = stype.getChannelDimensions(stype.getChannelID(pos));
-//                            double zmin = pos.z() - 0.5 * stripgeom.y();
-//                            double zmax = pos.z() + 0.5 * stripgeom.y();
-    
-    //  Make a HelicalTrack2DHit
-//                            HelicalTrackHit hthit = new HelicalTrack2DHit(hit, zmin, zmax);
-//                            addMCParticles(hit, hthit);
-//                            helhits.add(hthit);
-//                        }
-//                   }
-//                }
-//            }
-//        }
-//    private void addMCParticles(TrackerHit hit, HelicalTrackHit hthit) {
-//        //  First check if we have a BaseTrackerHitMC
-//        if (hit instanceof BaseTrackerHitMC) {
-    //  Loop over the MCParticles for this hit
-//            for (MCParticle mcp : ((BaseTrackerHitMC) hit).mcParticles()) {
-    //  Add an MCParticle to the hit
-//                hthit.addMCParticle(mcp);
-//            }
-//        }
-    
-    //  Check if we have an OldTrackerHit
-//        else if (hit instanceof OldTrackerHit) {
-//            OldTrackerHit oth = (OldTrackerHit) hit;
-    //  Loop over clusters associated with this hit
-//            for (TrackerCluster cluster : oth.getClusters()) {
-    //  Loop over the digitized hits
-//                for (DigiTrackerHit dhit : cluster.getDigiHits()) {
-    //  Get the elemental hits - not sure what the dif is...
-//                    for (DigiTrackerHit dhit2 : dhit.getElementalHits()) {
-    //  Get the MCParticle and add it to the hit
-//                        MCParticle mcp = dhit2.getMCParticle();
-//                        if (mcp != null) hthit.addMCParticle(mcp);
-//                    }
-//                }
-//            }
-//        }
-//        return;
-//    }
+        SiTrackerHitStrip1D local = h.getTransformedHit(CoordinateSystem.SENSOR);
+        SiTrackerHitStrip1D global = h.getTransformedHit(CoordinateSystem.GLOBAL);
+        
+        ITransform3D trans = local.getLocalToGlobal();
+        Hep3Vector org = trans.transformed(_orgloc);
+        Hep3Vector u = global.getMeasuredCoordinate();
+        Hep3Vector v = global.getUnmeasuredCoordinate();
+        
+        double umeas = local.getPosition()[0];
+        double vmin = VecOp.dot(local.getUnmeasuredCoordinate(),local.getHitSegment().getStartPoint());
+        double vmax = VecOp.dot(local.getUnmeasuredCoordinate(),local.getHitSegment().getEndPoint());
+        double du = Math.sqrt(local.getCovarianceAsMatrix().diagonal(0));
+        
+        IDetectorElement de = h.getSensor();
+        String det = ID.getName(de);
+        int lyr = ID.getLayer(de);
+        BarrelEndcapFlag be = ID.getBarrelEndcapFlag(de);
+        
+        double dEdx = h.getdEdx();
+        double time = h.getTime();
+        List<RawTrackerHit> rawhits = h.getRawHits();
+        HelicalTrackStrip strip = new HelicalTrackStrip(org, u, v, umeas, du,
+                vmin, vmax, dEdx, time, rawhits, det, lyr, be);
+        
+        for (MCParticle p : h.getMCParticles()) strip.addMCParticle(p);
+        return strip;
+    }
     
 }

lcsim/src/org/lcsim/fit/helicaltrack
HelicalTrackStrip.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- HelicalTrackStrip.java	10 Jul 2008 22:05:02 -0000	1.6
+++ HelicalTrackStrip.java	12 Jul 2008 01:25:41 -0000	1.7
@@ -76,7 +76,7 @@
         double vmiddle = 0.5 * (_vmin + _vmax);
         if (Math.abs(vmiddle) > _eps) {
             //  Relocate the origin to be at the center of the strip
-            _origin = VecOp.sub(origin, VecOp.mult(vmiddle, _v));
+            _origin = VecOp.add(origin, VecOp.mult(vmiddle, _v));
             _vmin -= vmiddle;
             _vmax -= vmiddle;
         }

lcsim/src/org/lcsim/fit/helicaltrack
StereoHitMaker.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- StereoHitMaker.java	7 Jul 2008 18:40:56 -0000	1.3
+++ StereoHitMaker.java	12 Jul 2008 01:25:41 -0000	1.4
@@ -49,12 +49,12 @@
             for (int j = i + 1; j < nstrip; j++) {
                 HelicalTrackStrip strip1 = stripcol.get(i);
                 HelicalTrackStrip strip2 = stripcol.get(j);
-                
+              
                 //  Check that these strips are in the same detector and layer
                 if (!strip1.detector().equals(strip2.detector())) continue;
                 if (strip1.layer() != strip2.layer()) continue;
                 if (strip1.BarrelEndcapFlag() != strip2.BarrelEndcapFlag()) continue;
-                
+
                 //  Locate the center of the hit strips and the difference in these positions
                 Hep3Vector p1 = VecOp.add(strip1.origin(), VecOp.mult(strip1.umeas(), strip1.u()));
                 Hep3Vector p2 = VecOp.add(strip2.origin(), VecOp.mult(strip2.umeas(), strip2.u()));
@@ -70,12 +70,14 @@
                 //  Check that the strips aren't colinear
                 double salpha = VecOp.dot(strip1.v(), strip2.u());
                 if (Math.abs(salpha) < _eps) continue;
-                
+
                 //  Check if we can form a cross within tolerances
                 double v1 = VecOp.dot(dp, strip2.u()) / salpha;
+              
                 if (v1 > strip1.vmax() + seperation * _tolerance) continue;
                 if (v1 < strip1.vmin() - seperation * _tolerance) continue;
                 double v2 = VecOp.dot(dp, strip1.u()) / salpha;
+                System.out.println("v2: "+v2+" vmin: "+strip2.vmin()+" vmax: "+strip2.vmax());
                 if (v2 > strip2.vmax() + seperation * _tolerance) continue;
                 if (v2 < strip2.vmin() - seperation * _tolerance) continue;
 
CVSspam 0.2.8