Author: [log in to unmask]
Date: Fri Sep 11 17:15:04 2015
New Revision: 3595
Log:
3D hit residuals for differnet track states
Added:
java/trunk/users/src/main/java/org/hps/users/phansson/ECalExtrapolationDriver.java
Added: java/trunk/users/src/main/java/org/hps/users/phansson/ECalExtrapolationDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/ECalExtrapolationDriver.java (added)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/ECalExtrapolationDriver.java Fri Sep 11 17:15:04 2015
@@ -0,0 +1,127 @@
+/**
+ *
+ */
+package org.hps.users.phansson;
+
+
+import hep.aida.IAnalysisFactory;
+import hep.aida.IHistogram1D;
+import hep.aida.IPlotter;
+import hep.aida.IPlotterStyle;
+import hep.physics.vec.Hep3Vector;
+
+import java.util.List;
+
+import org.hps.recon.tracking.TrackType;
+import org.hps.recon.tracking.TrackUtils;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.event.EventHeader;
+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.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public class ECalExtrapolationDriver extends Driver {
+
+ private AIDA aida = AIDA.defaultInstance();
+ IHistogram1D res_IP_Y;
+ IHistogram1D res_IP_X;
+ IHistogram1D res_Last_Y;
+ IHistogram1D res_Last_X;
+
+
+ /**
+ *
+ */
+ public ECalExtrapolationDriver() {
+ // TODO Auto-generated constructor stub
+ }
+
+ @Override
+ protected void detectorChanged(Detector arg0) {
+ 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_IP_Y = aida.histogram1D("res_IP_Y", 50, -5, 5);
+ res_IP_X = aida.histogram1D("res_IP_X", 50, -5, 5);
+ res_Last_Y = aida.histogram1D("res_Last_Y", 50, -5, 5);
+ res_Last_X = aida.histogram1D("res_Last_X", 50, -5, 5);
+ plotter.region(0).plot(res_IP_Y);
+ plotter.region(1).plot(res_IP_X);
+ plotter.region(2).plot(res_Last_Y);
+ plotter.region(3).plot(res_Last_X);
+ 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(TrackType.isGBL(track.getType())) {
+
+ TrackState stateIP = null;
+ TrackState stateLast = null;
+ for(TrackState state : track.getTrackStates()) {
+ if (state.getLocation() == TrackState.AtLastHit) stateLast = state;
+ if (state.getLocation() == TrackState.AtIP) stateIP = state;
+ }
+
+ // find last 3D hit
+ Hep3Vector lastStereoHitPosition = null;
+ Hep3Vector stereoHitPosition = null;
+ for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
+ stereoHitPosition = ((HelicalTrackHit) rotatedStereoHit).getCorrectedPosition();
+ if(lastStereoHitPosition != null) {
+ if(lastStereoHitPosition.x() < stereoHitPosition.x() )
+ lastStereoHitPosition = stereoHitPosition;
+ } else {
+ lastStereoHitPosition = stereoHitPosition;
+ }
+ }
+
+ //System.out.printf("Found last stereo hit at %s\n",lastStereoHitPosition.toString());
+
+ Hep3Vector trackPositionIP = TrackUtils.extrapolateTrack(stateIP, stereoHitPosition.x());
+ Hep3Vector trackPositionLast = TrackUtils.extrapolateTrack(stateLast, stereoHitPosition.x());
+
+ double xResidualIP = trackPositionIP.x() - stereoHitPosition.y();
+ double yResidualIP = trackPositionIP.y() - stereoHitPosition.z();
+
+ double xResidualLast = trackPositionLast.x() - stereoHitPosition.y();
+ double yResidualLast = trackPositionLast.y() - stereoHitPosition.z();
+
+ res_IP_Y.fill(yResidualIP);
+ res_IP_X.fill(xResidualIP);
+ res_Last_Y.fill(yResidualLast);
+ res_Last_X.fill(xResidualLast);
+
+ }
+
+
+ }
+
+ }
+
+
+ }
+
+}
|