lcsim/src/org/lcsim/contrib/Partridge
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;
+ }
}