Print

Print


Commit in java/trunk on MAIN
analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java+25-25957 -> 958
                                                   /TrackingMonitoring.java+76-36957 -> 958
tracking/src/main/java/org/hps/recon/tracking/FittedRawTrackerHit.java+21-2957 -> 958
+122-63
3 modified files
make more DQ plots work on SIO objects, add some track time plots

java/trunk/analysis/src/main/java/org/hps/analysis/dataquality
SVTHitMCEfficiency.java 957 -> 958
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java	2014-09-05 21:36:48 UTC (rev 957)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java	2014-09-05 22:43:21 UTC (rev 958)
@@ -12,14 +12,14 @@
 import org.hps.recon.tracking.ShapeFitParameters;
 import org.lcsim.detector.tracker.silicon.SiSensor;
 import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
 import org.lcsim.event.LCRelation;
 import org.lcsim.event.RawTrackerHit;
 import org.lcsim.event.RelationalTable;
 import org.lcsim.event.SimTrackerHit;
+import org.lcsim.event.TrackerHit;
 import org.lcsim.event.base.BaseRelationalTable;
 import org.lcsim.geometry.Detector;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
 
 /**
  * DQM driver for the monte carlo SVT hit efficiency April 29 -- first pass,
@@ -94,11 +94,11 @@
         if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
             return;
         }
-        if (!event.hasCollection(FittedRawTrackerHit.class, fittedTrackerHitCollectionName)) {
+        if (!event.hasCollection(LCRelation.class, fittedTrackerHitCollectionName)) {
             return;
         }
 
-        if (!event.hasCollection(SiTrackerHitStrip1D.class, siClusterCollectionName)) {
+        if (!event.hasCollection(TrackerHit.class, siClusterCollectionName)) {
             return;
         }
 
@@ -132,10 +132,10 @@
 
         List<SimTrackerHit> simHits = event.get(SimTrackerHit.class, trackerHitCollectionName);
         // make relational table for strip clusters to mc particle
-        List<SiTrackerHitStrip1D> siClusters = event.get(SiTrackerHitStrip1D.class, siClusterCollectionName);
+        List<TrackerHit> siClusters = event.get(TrackerHit.class, siClusterCollectionName);
         RelationalTable clustertosimhit = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
-        for (SiTrackerHit cluster : siClusters) {
-            for (RawTrackerHit rth : cluster.getRawHits()) {
+        for (TrackerHit cluster : siClusters) {
+            for (RawTrackerHit rth : (List<RawTrackerHit>) cluster.getRawHits()) {
                 Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth);
                 if (simTrackerHits != null) {
                     for (SimTrackerHit simhit : simTrackerHits) {
@@ -150,31 +150,31 @@
         //relational tables from raw and fitted tracker hits to sim hit
         RelationalTable rthtofit = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
         RelationalTable fittomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
-        List<FittedRawTrackerHit> fittedTrackerHits = event.get(FittedRawTrackerHit.class, fittedTrackerHitCollectionName);
-        for (FittedRawTrackerHit hit : fittedTrackerHits) {
-            ShapeFitParameters oldfit = (ShapeFitParameters) rthtofit.to(hit.getRawTrackerHit());
-            if (oldfit == null || Math.abs(oldfit.getT0()) > Math.abs(hit.getT0())) {
-                rthtofit.add(hit.getRawTrackerHit(), hit.getShapeFitParameters());
+        List<LCRelation> fittedTrackerHits = event.get(LCRelation.class, fittedTrackerHitCollectionName);
+        for (LCRelation hit : fittedTrackerHits) {
+            GenericObject oldfit = (GenericObject) rthtofit.to(FittedRawTrackerHit.getRawTrackerHit(hit));
+            if (oldfit == null || Math.abs(ShapeFitParameters.getT0(oldfit)) > Math.abs(FittedRawTrackerHit.getT0(hit))) {
+                rthtofit.add(FittedRawTrackerHit.getRawTrackerHit(hit), FittedRawTrackerHit.getShapeFitParameters(hit));
             }
-            Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(hit.getRawTrackerHit());
+            Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(FittedRawTrackerHit.getRawTrackerHit(hit));
             for (SimTrackerHit simhit : simTrackerHits) {
                 fittomc.add(hit, simhit);
             }
         }
 
         for (SimTrackerHit simhit : simHits) {
-            Set<FittedRawTrackerHit> fittedRTH = fittomc.allTo(simhit);
-            FittedRawTrackerHit signalHit = null;
-            for (FittedRawTrackerHit frth : fittedRTH) {
-                if (signalHit == null || Math.abs(frth.getT0()) < Math.abs(signalHit.getT0())) {
+            Set<LCRelation> fittedRTH = fittomc.allTo(simhit);
+            LCRelation signalHit = null;
+            for (LCRelation frth : fittedRTH) {
+                if (signalHit == null || Math.abs(FittedRawTrackerHit.getT0(frth)) < Math.abs(FittedRawTrackerHit.getT0(signalHit))) {
                     signalHit = frth;
                 }
             }
             if (signalHit != null) {
 //                System.out.format("chiprob %f, t0 %f, A %f\n", signalHit.getShapeFitParameters().getChiProb(), signalHit.getT0(), signalHit.getAmp());
-                getLayerPlot2D(plotDir + "allFits", simhit.getLayer()).fill(signalHit.getT0(), signalHit.getAmp());
-                getLayerPlot2D(plotDir + "fitT0ChiProb", simhit.getLayer()).fill(signalHit.getT0(), signalHit.getShapeFitParameters().getChiProb());
-                getLayerPlot2D(plotDir + "fitAmpChiProb", simhit.getLayer()).fill(signalHit.getAmp(), signalHit.getShapeFitParameters().getChiProb());
+                getLayerPlot2D(plotDir + "allFits", simhit.getLayer()).fill(FittedRawTrackerHit.getT0(signalHit), FittedRawTrackerHit.getAmp(signalHit));
+                getLayerPlot2D(plotDir + "fitT0ChiProb", simhit.getLayer()).fill(FittedRawTrackerHit.getT0(signalHit), ShapeFitParameters.getChiProb(FittedRawTrackerHit.getShapeFitParameters(signalHit)));
+                getLayerPlot2D(plotDir + "fitAmpChiProb", simhit.getLayer()).fill(FittedRawTrackerHit.getAmp(signalHit), ShapeFitParameters.getChiProb(FittedRawTrackerHit.getShapeFitParameters(signalHit)));
 //                if (signalHit.getShapeFitParameters().getChiProb() > 0.95) {
 //                    getLayerPlot2D(plotDir + "toogoodFits", simhit.getLayer()).fill(signalHit.getT0(), signalHit.getAmp());
 //                } else if (signalHit.getShapeFitParameters().getChiProb() < 0.05) {
@@ -186,9 +186,9 @@
 
             int gotCluster = 0;
             int[] gotClusterAtTime = new int[16];
-            Set<SiTrackerHitStrip1D> clusters = clustertosimhit.allTo(simhit);
+            Set<TrackerHit> clusters = clustertosimhit.allTo(simhit);
             if (clusters != null) {
-                for (SiTrackerHitStrip1D clust : clusters) {
+                for (TrackerHit clust : clusters) {
                     getLayerPlot1D(plotDir + "signalClusterT0", simhit.getLayer()).fill(clust.getTime());
 
                     for (int i = 0; i < 16; i++) {
@@ -199,9 +199,9 @@
                     if (Math.abs(clust.getTime()) < t0Cut) {
                         gotCluster = 1;
                     } else {
-                        for (RawTrackerHit rth : clust.getRawHits()) {
-                            ShapeFitParameters fit = (ShapeFitParameters) rthtofit.to(rth);
-                            getLayerPlot2D(plotDir + "badClusterFits", simhit.getLayer()).fill(fit.getT0(), fit.getAmp());
+                        for (RawTrackerHit rth : (List<RawTrackerHit>) clust.getRawHits()) {
+                            GenericObject fit = (GenericObject) rthtofit.to(rth);
+                            getLayerPlot2D(plotDir + "badClusterFits", simhit.getLayer()).fill(ShapeFitParameters.getT0(fit), ShapeFitParameters.getAmp(fit));
                         }
                     }
 

java/trunk/analysis/src/main/java/org/hps/analysis/dataquality
TrackingMonitoring.java 957 -> 958
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java	2014-09-05 21:36:48 UTC (rev 957)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java	2014-09-05 22:43:21 UTC (rev 958)
@@ -1,18 +1,21 @@
 package org.hps.analysis.dataquality;
 
 import hep.aida.IHistogram1D;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import org.lcsim.event.EventHeader;
-import org.lcsim.event.LCIOParameters;
+import org.lcsim.event.LCRelation;
+import org.lcsim.event.RelationalTable;
 import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.event.base.BaseRelationalTable;
 import org.lcsim.geometry.Detector;
 import org.lcsim.geometry.IDDecoder;
 
 /**
- * DQM driver for reconstructed track quantities
- * plots things like number of tracks/event, chi^2, track parameters
- * (d0/z0/theta/phi/curvature)
+ * DQM driver for reconstructed track quantities plots things like number of
+ * tracks/event, chi^2, track parameters (d0/z0/theta/phi/curvature)
  *
  * @author mgraham on Mar 28, 2014
  */
@@ -20,10 +23,11 @@
 public class TrackingMonitoring extends DataQualityMonitor {
 
     private String helicalTrackHitCollectionName = "HelicalTrackHits";
-    private String rotatedTrackHitCollectionName = "RotatedHelicalTrackHits";
-    private String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations";
+    private final String rotatedTrackHitCollectionName = "RotatedHelicalTrackHits";
+    private final String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations";
+    private final String rotatedHelicalTrackHitRelationsCollectionName = "RotatedHelicalTrackHitRelations";
     private String trackCollectionName = "MatchedTracks";
-    private String trackerName = "Tracker";
+    private final String trackerName = "Tracker";
     String ecalSubdetectorName = "Ecal";
     String ecalCollectionName = "EcalClusters";
     private Detector detector = null;
@@ -35,7 +39,7 @@
     double sumz0 = 0;
     double sumslope = 0;
     double sumchisq = 0;
-     private String plotDir = "Tracks/";
+    private final String plotDir = "Tracks/";
     String[] trackingQuantNames = {"avg_N_tracks", "avg_N_hitsPerTrack", "avg_d0", "avg_z0", "avg_absslope", "avg_chi2"};
 
     public void setHelicalTrackHitCollectionName(String helicalTrackHitCollectionName) {
@@ -51,14 +55,16 @@
         this.detector = detector;
         aida.tree().cd("/");
 
-        IHistogram1D trkChi2 = aida.histogram1D(plotDir+"Track Chi2", 25, 0, 25.0);
-        IHistogram1D nTracks = aida.histogram1D(plotDir+"Tracks per Event", 6, 0, 6);
-        IHistogram1D trkd0 = aida.histogram1D(plotDir+"d0 ", 25, -5.0, 5.0);
-        IHistogram1D trkphi = aida.histogram1D(plotDir+"sinphi ", 25, -0.2, 0.2);
-        IHistogram1D trkomega = aida.histogram1D(plotDir+"omega ", 25, -0.00025, 0.00025);
-        IHistogram1D trklam = aida.histogram1D(plotDir+"tan(lambda) ", 25, -0.1, 0.1);
-        IHistogram1D trkz0 = aida.histogram1D(plotDir+"z0 ", 25, -1.0, 1.0);
-        IHistogram1D nHits = aida.histogram1D(plotDir+"Hits per Track", 2, 5, 7);
+        IHistogram1D trkChi2 = aida.histogram1D(plotDir + "Track Chi2", 25, 0, 25.0);
+        IHistogram1D nTracks = aida.histogram1D(plotDir + "Tracks per Event", 6, 0, 6);
+        IHistogram1D trkd0 = aida.histogram1D(plotDir + "d0 ", 25, -5.0, 5.0);
+        IHistogram1D trkphi = aida.histogram1D(plotDir + "sinphi ", 25, -0.2, 0.2);
+        IHistogram1D trkomega = aida.histogram1D(plotDir + "omega ", 25, -0.00025, 0.00025);
+        IHistogram1D trklam = aida.histogram1D(plotDir + "tan(lambda) ", 25, -0.1, 0.1);
+        IHistogram1D trkz0 = aida.histogram1D(plotDir + "z0 ", 25, -1.0, 1.0);
+        IHistogram1D nHits = aida.histogram1D(plotDir + "Hits per Track", 2, 5, 7);
+        IHistogram1D trackMeanTime = aida.histogram1D(plotDir + "Mean time of hits on track", 200, -20., 20.);
+        IHistogram1D trackRMSTime = aida.histogram1D(plotDir + "RMS time of hits on track", 200, 0., 10.);
 
     }
 
@@ -66,29 +72,64 @@
     public void process(EventHeader event) {
 
         aida.tree().cd("/");
-                   
+
+        RelationalTable hittostrip = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+        List<LCRelation> hitrelations = event.get(LCRelation.class, helicalTrackHitRelationsCollectionName);
+        for (LCRelation relation : hitrelations) {
+            if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+                hittostrip.add(relation.getFrom(), relation.getTo());
+            }
+        }
+
+        RelationalTable hittorotated = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
+        List<LCRelation> rotaterelations = event.get(LCRelation.class, rotatedHelicalTrackHitRelationsCollectionName);
+        for (LCRelation relation : rotaterelations) {
+            if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+                hittorotated.add(relation.getFrom(), relation.getTo());
+            }
+        }
+
         if (!event.hasCollection(Track.class, trackCollectionName)) {
-            aida.histogram1D(plotDir+"Tracks per Event").fill(0);
+            aida.histogram1D(plotDir + "Tracks per Event").fill(0);
             return;
         }
         nEvents++;
         List<Track> tracks = event.get(Track.class, trackCollectionName);
         nTotTracks += tracks.size();
-        aida.histogram1D(plotDir+"Tracks per Event").fill(tracks.size());
+        aida.histogram1D(plotDir + "Tracks per Event").fill(tracks.size());
         for (Track trk : tracks) {
             nTotHits += trk.getTrackerHits().size();
-            aida.histogram1D(plotDir+"Track Chi2").fill(trk.getChi2());
-            aida.histogram1D(plotDir+"Hits per Track").fill(trk.getTrackerHits().size());
-            //why is getTrackParameter depricated?  How am  I supposed to get this? 
-            aida.histogram1D(plotDir+"d0 ").fill(trk.getTrackParameter(LCIOParameters.ParameterName.d0.ordinal()));
-            aida.histogram1D(plotDir+"sinphi ").fill(Math.sin(trk.getTrackParameter(LCIOParameters.ParameterName.phi0.ordinal())));
-            aida.histogram1D(plotDir+"omega ").fill(trk.getTrackParameter(LCIOParameters.ParameterName.omega.ordinal()));
-            aida.histogram1D(plotDir+"tan(lambda) ").fill(trk.getTrackParameter(LCIOParameters.ParameterName.tanLambda.ordinal()));
-            aida.histogram1D(plotDir+"z0 ").fill(trk.getTrackParameter(LCIOParameters.ParameterName.z0.ordinal()));
-            sumd0 += trk.getTrackParameter(LCIOParameters.ParameterName.d0.ordinal());
-            sumz0 += trk.getTrackParameter(LCIOParameters.ParameterName.z0.ordinal());
-            sumslope += Math.abs(trk.getTrackParameter(LCIOParameters.ParameterName.tanLambda.ordinal()));
+            aida.histogram1D(plotDir + "Track Chi2").fill(trk.getChi2());
+            aida.histogram1D(plotDir + "Hits per Track").fill(trk.getTrackerHits().size());
+            aida.histogram1D(plotDir + "d0 ").fill(trk.getTrackStates().get(0).getD0());
+            aida.histogram1D(plotDir + "sinphi ").fill(Math.sin(trk.getTrackStates().get(0).getPhi()));
+            aida.histogram1D(plotDir + "omega ").fill(trk.getTrackStates().get(0).getOmega());
+            aida.histogram1D(plotDir + "tan(lambda) ").fill(trk.getTrackStates().get(0).getTanLambda());
+            aida.histogram1D(plotDir + "z0 ").fill(trk.getTrackStates().get(0).getZ0());
+            sumd0 += trk.getTrackStates().get(0).getD0();
+            sumz0 += trk.getTrackStates().get(0).getZ0();
+            sumslope += Math.abs(trk.getTrackStates().get(0).getTanLambda());
             sumchisq += trk.getChi2();
+
+            int nStrips = 0;
+            double meanTime = 0;
+            double rmsTime = 0;
+            for (TrackerHit hit : trk.getTrackerHits()) {
+//                System.out.format("cross time: %f\n", hit.getTime());
+                Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+                for (TrackerHit hts : htsList) {
+                    nStrips++;
+                    meanTime += hts.getTime();
+                    rmsTime += hts.getTime() * hts.getTime();
+//                    System.out.format("strip time: %f\n", hts.getTime());
+
+                }
+            }
+            meanTime /= nStrips;
+            rmsTime = Math.sqrt(rmsTime / nStrips);
+            aida.histogram1D(plotDir + "Mean time of hits on track").fill(meanTime);
+            aida.histogram1D(plotDir + "RMS time of hits on track").fill(rmsTime);
+//            System.out.format("%d strips, mean time %f, RMS time %f\n", nStrips, meanTime, rmsTime);
         }
     }
 
@@ -102,20 +143,19 @@
         monitoredQuantityMap.put(trackingQuantNames[5], sumchisq / nTotTracks);
     }
 
-
     @Override
     public void printDQMData() {
         System.out.println("ReconMonitoring::printDQMData");
-        for (Map.Entry<String, Double> entry : monitoredQuantityMap.entrySet())
+        for (Map.Entry<String, Double> entry : monitoredQuantityMap.entrySet()) {
             System.out.println(entry.getKey() + " = " + entry.getValue());
+        }
         System.out.println("*******************************");
     }
 
     @Override
     public void printDQMStrings() {
-         for (Map.Entry<String, Double> entry : monitoredQuantityMap.entrySet())
-            System.out.println("ALTER TABLE dqm ADD "+entry.getKey()+" double;");
-
+        for (Map.Entry<String, Double> entry : monitoredQuantityMap.entrySet()) {
+            System.out.println("ALTER TABLE dqm ADD " + entry.getKey() + " double;");
+        }
     }
-
 }

java/trunk/tracking/src/main/java/org/hps/recon/tracking
FittedRawTrackerHit.java 957 -> 958
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/FittedRawTrackerHit.java	2014-09-05 21:36:48 UTC (rev 957)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/FittedRawTrackerHit.java	2014-09-05 22:43:21 UTC (rev 958)
@@ -1,12 +1,15 @@
 package org.hps.recon.tracking;
 
+import org.lcsim.event.GenericObject;
+import org.lcsim.event.LCRelation;
 import org.lcsim.event.RawTrackerHit;
 import org.lcsim.event.base.BaseLCRelation;
 
 /**
- * 
+ *
  * @author meeg
- * @version $Id: HPSFittedRawTrackerHit.java,v 1.3 2013/04/16 22:05:43 phansson Exp $
+ * @version $Id: HPSFittedRawTrackerHit.java,v 1.3 2013/04/16 22:05:43 phansson
+ * Exp $
  */
 // TODO: Add class documentation.
 public class FittedRawTrackerHit extends BaseLCRelation {
@@ -31,6 +34,22 @@
         return getShapeFitParameters().getAmp();
     }
 
+    public static RawTrackerHit getRawTrackerHit(LCRelation rel) {
+        return (RawTrackerHit) rel.getFrom();
+    }
+
+    public static GenericObject getShapeFitParameters(LCRelation rel) {
+        return (GenericObject) rel.getTo();
+    }
+
+    public static double getT0(LCRelation rel) {
+        return ShapeFitParameters.getT0(getShapeFitParameters(rel));
+    }
+
+    public static double getAmp(LCRelation rel) {
+        return ShapeFitParameters.getAmp(getShapeFitParameters(rel));
+    }
+
     @Override
     public String toString() {
         return String.format("HPSFittedRawTrackerHit: hit cell id %d on sensor %s with fit %s\n", this.getRawTrackerHit().getCellID(), getRawTrackerHit().getDetectorElement().getName(), this.getShapeFitParameters().toString());
SVNspam 0.1