Print

Print


Author: [log in to unmask]
Date: Fri Oct  2 16:25:44 2015
New Revision: 3756

Log:
extrapolation stuff

Added:
    java/trunk/users/src/main/java/org/hps/users/phansson/TrackExtrapolationTestDriver.java

Added: java/trunk/users/src/main/java/org/hps/users/phansson/TrackExtrapolationTestDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/TrackExtrapolationTestDriver.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/TrackExtrapolationTestDriver.java	Fri Oct  2 16:25:44 2015
@@ -0,0 +1,162 @@
+/**
+ * 
+ */
+package org.hps.users.phansson;
+
+
+import hep.aida.IAnalysisFactory;
+import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
+import hep.aida.IPlotter;
+import hep.aida.IPlotterStyle;
+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 java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.hps.recon.tracking.TrackUtils;
+import org.hps.util.BasicLogFormatter;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackState;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.FieldMap;
+import org.lcsim.geometry.compact.converter.HPSTrackerBuilder;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.util.log.LogUtil;
+
+/**
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public class TrackExtrapolationTestDriver extends Driver {
+    private static Logger logger = LogUtil.create(TrackExtrapolationTestDriver.class.getName(), new BasicLogFormatter(), Level.INFO);
+    private AIDA aida = AIDA.defaultInstance();
+    IHistogram1D res_trackPos_Y;
+    IHistogram1D res_trackPos_X;
+    IHistogram2D res_trackPos_Y_vs_p;
+    IHistogram2D res_trackPos_X_vs_p;
+    private FieldMap bFieldMap;
+    private double stepSize = 1.0; //mm
+    /**
+     * 
+     */
+    public TrackExtrapolationTestDriver() {
+        // TODO Auto-generated constructor stub
+    }
+
+    @Override
+    protected void detectorChanged(Detector arg0) {
+        
+        // Get the field map from the detector object
+        bFieldMap = arg0.getFieldMap(); 
+        
+        
+        aida.tree().cd("/");
+        IAnalysisFactory fac = aida.analysisFactory();
+        IPlotter plotter;
+        plotter = fac.createPlotterFactory().create("Residual");
+        IPlotterStyle style = plotter.style();
+        style.dataStyle().fillStyle().setColor("yellow");
+        style.dataStyle().errorBarStyle().setVisible(false);
+        plotter.createRegions(2, 2);
+        res_trackPos_Y = aida.histogram1D("res_trackPos_Y", 50, -0.1, 0.1);
+        res_trackPos_X = aida.histogram1D("res_trackPos_X", 50, -2.5, 2.5);
+        res_trackPos_Y_vs_p = aida.histogram2D("res_trackPos_Y_vs_p", 50,0.1, 1.4, 50, -0.1, 0.1);
+        res_trackPos_X_vs_p = aida.histogram2D("res_trackPos_X_vs_p", 50,0.1, 1.4, 50, -2.5, 2.5);
+        plotter.region(0).plot(res_trackPos_Y);
+        plotter.region(1).plot(res_trackPos_X);
+        plotter.region(2).plot(res_trackPos_Y_vs_p);
+        plotter.region(3).plot(res_trackPos_X_vs_p);
+        plotter.show();
+    }
+
+    protected void process(EventHeader event) {
+
+        if(!event.hasCollection(Track.class))
+            return;
+
+        List<List<Track>> trackCollections = event.get(Track.class);
+
+        for(List<Track> tracks : trackCollections) {
+
+            for (Track track : tracks) {
+
+                if(track.getTrackerHits().size() != 6) 
+                    continue;
+
+
+
+
+                // find hit on each layer
+                Map<Integer, TrackerHit> hits = new HashMap<Integer, TrackerHit>();
+                for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
+                    RawTrackerHit rawhit = (RawTrackerHit) rotatedStereoHit.getRawHits().get(0);
+                    HpsSiSensor sensor = (HpsSiSensor) rawhit.getDetectorElement();
+                    int layer = HPSTrackerBuilder.getLayerFromVolumeName(sensor.getName());
+                    hits.put(layer, rotatedStereoHit);
+                }
+
+                Map<Integer, Hep3Vector> layerTrackPos = new HashMap<Integer, Hep3Vector>();
+                Map<Integer, Hep3Vector> layerTrackPos3DField = new HashMap<Integer, Hep3Vector>();
+                
+                for(Map.Entry<Integer, TrackerHit> entry : hits.entrySet()) {
+                    int layer = entry.getKey();
+                    Hep3Vector stereoHitPosition = ((HelicalTrackHit) entry.getValue()).getCorrectedPosition();
+                    Hep3Vector prevStereoHitPosition = null;
+                    if( hits.containsKey(layer-1)) {
+                        prevStereoHitPosition = ((HelicalTrackHit) hits.get(layer -1)).getCorrectedPosition();
+                    }
+                    Hep3Vector trackPosition = TrackUtils.extrapolateHelixToXPlane(track, stereoHitPosition.x());
+                    Hep3Vector trackPosition3DField = null;
+                    TrackState trackState3DField = null;
+                    if( prevStereoHitPosition != null) {
+                        trackState3DField = TrackUtils.extrapolateTrackUsingFieldMap(track, prevStereoHitPosition.x(), stereoHitPosition.x(), stepSize, bFieldMap);
+                        trackPosition3DField = new BasicHep3Vector(trackState3DField.getReferencePoint());
+                    }                        
+                    layerTrackPos.put(layer, trackPosition);
+                    layerTrackPos3DField.put(layer, trackPosition3DField);
+                    
+                    logger.fine("layer " + layer + " stereohitposition " + stereoHitPosition.toString());
+                    if( prevStereoHitPosition != null)
+                        logger.fine("prevStereoHitPosition " + prevStereoHitPosition.toString());
+                    logger.fine("trackPos " + layerTrackPos.get(layer).toString());
+                    if( trackPosition3DField != null) {
+                        logger.fine("trackPosition3DField " + trackPosition3DField.toString());
+                    } else {
+                        logger.fine("trackPosition3DField  no prev layer ");
+                    }
+                    
+                    if(layer == 6 ) {
+                        res_trackPos_Y.fill(VecOp.sub(trackPosition, trackPosition3DField).z());
+                        res_trackPos_X.fill(VecOp.sub(trackPosition, trackPosition3DField).y());
+                        res_trackPos_Y_vs_p.fill(track.getTrackStates().get(0).getMomentum()[0], VecOp.sub(trackPosition, trackPosition3DField).z());
+                        res_trackPos_X_vs_p.fill(track.getTrackStates().get(0).getMomentum()[0], VecOp.sub(trackPosition, trackPosition3DField).y());
+                    }                    
+                }
+                
+                
+               
+
+
+            }
+
+
+
+
+        }
+
+
+    }
+
+}