Print

Print


Commit in lcsim/src/org/lcsim/contrib/Partridge on MAIN
VSTest.java+76-101.1 -> 1.2
Fixed

lcsim/src/org/lcsim/contrib/Partridge
VSTest.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- VSTest.java	3 Jul 2008 21:59:32 -0000	1.1
+++ VSTest.java	3 Jul 2008 22:41:39 -0000	1.2
@@ -7,8 +7,13 @@
 
 package org.lcsim.contrib.Partridge;
 
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import org.lcsim.contrib.onoprien.tracking.geom.SegmentationManager;
 import org.lcsim.contrib.onoprien.tracking.digitization.algorithms.ConverterSimple;
 import org.lcsim.contrib.onoprien.tracking.digitization.SimToDigiConverter;
 import org.lcsim.contrib.onoprien.tracking.clustering.ClusteringDriver;
@@ -22,9 +27,14 @@
 import org.lcsim.contrib.onoprien.tracking.hitmaking.HitMakingDriver;
 import org.lcsim.contrib.onoprien.tracking.hitmaking.TrackerHitMaker;
 import org.lcsim.contrib.onoprien.tracking.hitmaking.hitmakers.TrackerHitMakerBasic;
+import org.lcsim.detector.IDetectorElement;
 import org.lcsim.event.EventHeader;
-import org.lcsim.fit.helicaltrack.HelicalTrackHitDriver;
-import org.lcsim.fit.helicaltrack.HelicalTrackHitDriver.HitType;
+import org.lcsim.fit.helicaltrack.HelicalTrack2DHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
+import org.lcsim.fit.helicaltrack.HitIdentifier;
+import org.lcsim.fit.helicaltrack.HitUtils;
+import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
 import org.lcsim.util.Driver;
 
 /**
@@ -34,6 +44,12 @@
  * @version 1.0
  */
 public class VSTest extends Driver {
+    private Hep3Vector _uloc = new BasicHep3Vector(1., 0., 0.);
+    private Hep3Vector _vloc = new BasicHep3Vector(0., 1., 0.);
+    private Hep3Vector _zhat = new BasicHep3Vector(0., 0., 1.);
+    private Hep3Vector _orgloc = new BasicHep3Vector(0., 0., 0.);
+    private double _eps = 1.0e-6;
+
     public VSTest() {
         // Segmentation description :
         
@@ -68,14 +84,6 @@
         hitMakingDriver.set("INPUT_MAP_NAME","TrackerClusters");
         hitMakingDriver.set("OUTPUT_MAP_NAME","NewTrackerHits");
         add(hitMakingDriver);
-        
-        // Make HelicalTrackHits
-        
-        //  Add a driver to create HelicalTrackHits from the digitized hits
-        HelicalTrackHitDriver hitdriver = new HelicalTrackHitDriver();
-        hitdriver.addCollection("NewTrackerHits",HitType.VirtualSegmentation);
-        add(hitdriver);
-        
     }
     
     public void process(EventHeader event) {
@@ -93,7 +101,65 @@
         for (List<TrackerCluster> clusterList : clusterMap.values()) n += clusterList.size();
         System.out.println("Created " + n + " TrackerClusters on " + clusterMap.keySet().size() + " sensors");
         
+        //  Get the segmentation manager
+        SegmentationManager segman = (SegmentationManager) event.get("SegmentationManager");
+        
+        //  Get the hit map that gives the list of hits on a particular sensor
+        Map<Sensor, List<org.lcsim.contrib.onoprien.tracking.hit.TrackerHit>> hitmap =
+                (Map<Sensor, List<org.lcsim.contrib.onoprien.tracking.hit.TrackerHit>>) event.get("NewTrackerHits");
+        
+        //  Loop over sensors in the hit map
+        for (Sensor sensor : hitmap.keySet()) {
+            //  Get a list of hits for this sensor and loop over the hits
+            List<org.lcsim.contrib.onoprien.tracking.hit.TrackerHit> sensorhits = hitmap.get(sensor);
+            for (org.lcsim.contrib.onoprien.tracking.hit.TrackerHit hit : sensorhits) {
+                //  Check if we have a strip or pixel hit
+                if (sensor.getType().getHitDimension() == 1) {
+                    //  Strip hit - now check if this hit is part of a stereo pair
+                    if (segman.getStereoPartners(sensor) == null) {
+                        //  Isolated axial hit - convert it and add to the hit list
+                        HelicalTrackHit axialhit = MakeAxialHit(hit);
+                    }
+                }
+            }
+        }
         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;
+        double zmin = VecOp.add(HitUtils.StripCenter(strip), VecOp.mult(strip.vmin(), strip.v())).z();
+        double zmax = VecOp.add(HitUtils.StripCenter(strip), VecOp.mult(strip.vmax(), strip.v())).z();
+        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());
+        return axialhit;
+    }
+    
+    private HelicalTrackStrip MakeStrip(org.lcsim.contrib.onoprien.tracking.hit.TrackerHit hit) {
+        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();
+        double dEdx = hit.getSignal();
+        double time = hit.getTime();
+        IDetectorElement de = s.getDetectorElement();
+        HitIdentifier ID = new HitIdentifier();
+        String det = ID.getName(de);
+        int lyr = ID.getLayer(de);
+        BarrelEndcapFlag beflag = ID.getBarrelEndcapFlag(de);
+        HelicalTrackStrip strip = new HelicalTrackStrip(org, u, v, umeas, du, vmin, vmax, dEdx, time, null,
+                det, lyr, beflag);
+        return strip;
+    } 
 }
CVSspam 0.2.8