Print

Print


Commit in java/trunk/analysis/src/main/java/org/hps/analysis/dataquality on MAIN
SVTHitMCEfficiency.java+108-52924 -> 925
SvtMonitoring.java+15-15924 -> 925
+123-67
2 modified files
work on DQ plots for MC hit recon

java/trunk/analysis/src/main/java/org/hps/analysis/dataquality
SVTHitMCEfficiency.java 924 -> 925
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java	2014-08-28 23:26:58 UTC (rev 924)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SVTHitMCEfficiency.java	2014-08-29 01:29:26 UTC (rev 925)
@@ -1,5 +1,6 @@
 package org.hps.analysis.dataquality;
 
+import hep.aida.IHistogram2D;
 import hep.aida.IHistogramFactory;
 import hep.aida.IProfile1D;
 import java.util.HashMap;
@@ -19,9 +20,9 @@
 import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
 
 /**
- * DQM driver for the monte carlo SVT hit efficiency
- * April 29 -- first pass, makes the SimTrackerHits-->SiClusters efficiency vs
- * position (with a settable t0 cut)
+ * DQM driver for the monte carlo SVT hit efficiency April 29 -- first pass,
+ * makes the SimTrackerHits-->SiClusters efficiency vs position (with a settable
+ * t0 cut)
  *
  * @author mgraham on April 29, 2014
  */
@@ -29,19 +30,19 @@
 // TODO: Add some quantities for DQM monitoring:  e.g. <efficiency>, probably within first 1 cm or so.   
 public class SVTHitMCEfficiency extends DataQualityMonitor {
 
-    private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
+    private final String rawTrackerHitCollectionName = "SVTRawTrackerHits";
     private String helicalTrackHitCollectionName = "HelicalTrackHits";
-    private String rotatedTrackHitCollectionName = "RotatedHelicalTrackHits";
-    private String fittedTrackerHitCollectionName = "SVTFittedRawTrackerHits";
-    private String trackerHitCollectionName = "TrackerHits";
-    private String siClusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
-    private String svtTrueHitRelationName = "SVTTrueHitRelations";
-    private String trackerName = "Tracker";
+    private final String rotatedTrackHitCollectionName = "RotatedHelicalTrackHits";
+    private final String fittedTrackerHitCollectionName = "SVTFittedRawTrackerHits";
+    private final String trackerHitCollectionName = "TrackerHits";
+    private final String siClusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
+    private final String svtTrueHitRelationName = "SVTTrueHitRelations";
+    private final String trackerName = "Tracker";
     private Detector detector = null;
     private double t0Cut = 16.0;
     private static final String nameStrip = "Tracker_TestRunModule_";
     private List<SiSensor> sensors;
-    private String plotDir = "SvtHitMCEfficiency/";
+    private final String plotDir = "SvtHitMCEfficiency/";
     private Map<String, Double> avgClusterEffMap;
     private Map<String, String> avgClusterEffNames;
 
@@ -57,7 +58,6 @@
     protected void detectorChanged(Detector detector) {
         this.detector = detector;
         aida.tree().cd("/");
-        IHistogramFactory hf = aida.histogramFactory();
 
         // Make a list of SiSensors in the SVT.
         sensors = this.detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class);
@@ -66,7 +66,12 @@
         //currently, just the Si cluster efficiency
         aida.tree().cd("/");
         for (int kk = 1; kk < 13; kk++) {
-            IProfile1D clEffic = createLayerPlot(plotDir+"clusterEfficiency", kk, 50, 0, 25.);
+            createLayerPlot(plotDir + "clusterEfficiency", kk, 50, -40, 40.);
+            createLayerPlot(plotDir + "readoutEfficiency", kk, 50, -40, 40.);
+            createLayerPlot(plotDir + "rthToClusterEfficiency", kk, 50, -40, 40.);
+            createLayerPlot2D(plotDir + "toogoodFits", kk, 100, -100, 100, 50, 0, 10000);
+            createLayerPlot2D(plotDir + "goodFits", kk, 100, -100, 100, 50, 0, 10000);
+            createLayerPlot2D(plotDir + "badFits", kk, 100, -100, 100, 50, 0, 10000);
         }
         resetEfficiencyMap();
     }
@@ -77,68 +82,110 @@
         aida.tree().cd("/");
 
         //make sure the required collections exist
-        if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName))
+        if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
             return;
-        if (!event.hasCollection(FittedRawTrackerHit.class, fittedTrackerHitCollectionName))
+        }
+        if (!event.hasCollection(FittedRawTrackerHit.class, fittedTrackerHitCollectionName)) {
             return;
+        }
 
-        if (!event.hasCollection(SiTrackerHitStrip1D.class, siClusterCollectionName))
+        if (!event.hasCollection(SiTrackerHitStrip1D.class, siClusterCollectionName)) {
             return;
+        }
 
-        if (!event.hasCollection(SimTrackerHit.class, trackerHitCollectionName))
+        if (!event.hasCollection(SimTrackerHit.class, trackerHitCollectionName)) {
             return;
+        }
 
-        if (!event.hasCollection(LCRelation.class, svtTrueHitRelationName))
+        if (!event.hasCollection(LCRelation.class, svtTrueHitRelationName)) {
             return;
+        }
 
-        RelationalTable mcHittomcP = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+        RelationalTable mcHittomcP = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
         //  Get the collections of SimTrackerHits
         List<List<SimTrackerHit>> simcols = event.get(SimTrackerHit.class);
         //  Loop over the SimTrackerHits and fill in the relational table
-        for (List<SimTrackerHit> simlist : simcols)
-            for (SimTrackerHit simhit : simlist)
-                if (simhit.getMCParticle() != null)
+        for (List<SimTrackerHit> simlist : simcols) {
+            for (SimTrackerHit simhit : simlist) {
+                if (simhit.getMCParticle() != null) {
                     mcHittomcP.add(simhit, simhit.getMCParticle());
+                }
+            }
+        }
+
         RelationalTable rawtomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
-        if (event.hasCollection(LCRelation.class, svtTrueHitRelationName)) {
-            List<LCRelation> trueHitRelations = event.get(LCRelation.class, svtTrueHitRelationName);
-            for (LCRelation relation : trueHitRelations)
-                if (relation != null && relation.getFrom() != null && relation.getTo() != null)
-                    rawtomc.add(relation.getFrom(), relation.getTo());
+        List<LCRelation> trueHitRelations = event.get(LCRelation.class, svtTrueHitRelationName);
+        for (LCRelation relation : trueHitRelations) {
+            if (relation.getFrom() != null && relation.getTo() != null) {
+                rawtomc.add(relation.getFrom(), relation.getTo());
+            }
         }
+
         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);
         RelationalTable clustertosimhit = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
         for (SiTrackerHit cluster : siClusters) {
-            List<RawTrackerHit> rawHits = cluster.getRawHits();
-            for (RawTrackerHit rth : rawHits) {
+            for (RawTrackerHit rth : cluster.getRawHits()) {
                 Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth);
-                if (simTrackerHits != null)
-                    for (SimTrackerHit simhit : simTrackerHits)
-                        clustertosimhit.add(cluster, simhit);
+                if (simTrackerHits != null) {
+                    for (SimTrackerHit simhit : simTrackerHits) {
+                        if (simhit != null) {
+                            clustertosimhit.add(cluster, simhit);
+                        }
+                    }
+                }
             }
         }
-//relational tables from mc particle to raw and fitted tracker hits
+
+        //relational tables from raw and fitted tracker hits to sim hit
         RelationalTable fittomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
         List<FittedRawTrackerHit> fittedTrackerHits = event.get(FittedRawTrackerHit.class, fittedTrackerHitCollectionName);
         for (FittedRawTrackerHit hit : fittedTrackerHits) {
-            RawTrackerHit rth = hit.getRawTrackerHit();
-            Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth);
-            if (simTrackerHits != null)
-                for (SimTrackerHit simhit : simTrackerHits)
-                    if (simhit.getMCParticle() != null)
-                        fittomc.add(hit, simhit.getMCParticle());
+            Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(hit.getRawTrackerHit());
+            for (SimTrackerHit simhit : simTrackerHits) {
+                fittomc.add(hit, simhit);
+            }
         }
 
         for (SimTrackerHit simhit : simHits) {
-            double wgt = 0.0;
+            Set<FittedRawTrackerHit> fittedRTH = fittomc.allTo(simhit);
+            FittedRawTrackerHit signalHit = null;
+            for (FittedRawTrackerHit frth : fittedRTH) {
+                if (signalHit == null || Math.abs(frth.getT0()) < Math.abs(signalHit.getT0())) {
+                    signalHit = frth;
+                }
+            }
+            if (signalHit != null) {
+//                System.out.format("chiprob %f, t0 %f, A %f\n", signalHit.getShapeFitParameters().getChiProb(), signalHit.getT0(), signalHit.getAmp());
+                if (signalHit.getShapeFitParameters().getChiProb() > 0.95) {
+                    getLayerPlot2D(plotDir + "toogoodFits", simhit.getLayer()).fill(signalHit.getT0(), signalHit.getAmp());
+                } else if (signalHit.getShapeFitParameters().getChiProb() < 0.05) {
+                    getLayerPlot2D(plotDir + "badFits", simhit.getLayer()).fill(signalHit.getT0(), signalHit.getAmp());
+                } else {
+                    getLayerPlot2D(plotDir + "goodFits", simhit.getLayer()).fill(signalHit.getT0(), signalHit.getAmp());
+                }
+            }
+
+            int gotCluster = 0;
             Set<SiTrackerHitStrip1D> clusters = clustertosimhit.allTo(simhit);
-            if (clusters != null)
-                for (SiTrackerHitStrip1D clust : clusters)
-                    if (Math.abs(clust.getTime()) < t0Cut)
-                        wgt = 1.0;
-            getLayerPlot(plotDir+"clusterEfficiency", simhit.getLayer()).fill(Math.abs(simhit.getPoint()[1]), wgt);
+            if (clusters != null) {
+                for (SiTrackerHitStrip1D clust : clusters) {
+
+                    if (Math.abs(clust.getTime()) < t0Cut) {
+                        gotCluster = 1;
+                    }
+                }
+            }
+            Set<RawTrackerHit> rawhits = rawtomc.allTo(simhit);
+            int gotRawHit = !rawhits.isEmpty() ? 1 : 0;
+
+            double y = simhit.getDetectorElement().getGeometry().getGlobalToLocal().transformed(simhit.getPositionVec()).x() + 20.0 * Math.signum(simhit.getPoint()[1]) * (simhit.getLayer() % 2 == 0 ? -1 : 1);
+            getLayerPlot(plotDir + "clusterEfficiency", simhit.getLayer()).fill(y, gotCluster);
+            getLayerPlot(plotDir + "readoutEfficiency", simhit.getLayer()).fill(y, gotRawHit);
+            if (gotRawHit == 1) {
+                getLayerPlot(plotDir + "rthToClusterEfficiency", simhit.getLayer()).fill(y, gotCluster);
+            }
         }
     }
 
@@ -151,8 +198,8 @@
     }
 
     private void resetEfficiencyMap() {
-        avgClusterEffMap = new HashMap<>();
-        avgClusterEffNames = new HashMap<>();
+        avgClusterEffMap = new HashMap<String, Double>();
+        avgClusterEffNames = new HashMap<String, String>();
         for (SiSensor sensor : sensors) {
             String effName = "avgClusterEff_" + getNiceSensorName(sensor);
             avgClusterEffNames.put(sensor.getName(), effName);
@@ -171,20 +218,29 @@
     }
 
     private IProfile1D createLayerPlot(String prefix, int layer, int nchan, double min, double max) {
-        IProfile1D hist = aida.profile1D(prefix + "_layer" + layer, nchan, min, max);
-        return hist;
+        return aida.profile1D(prefix + "_layer" + layer, nchan, min, max);
     }
 
+    private IHistogram2D getLayerPlot2D(String prefix, int layer) {
+        return aida.histogram2D(prefix + "_layer" + layer);
+    }
+
+    private IHistogram2D createLayerPlot2D(String prefix, int layer, int nx, double minX, double maxX, int ny, double minY, double maxY) {
+        return aida.histogram2D(prefix + "_layer" + layer, nx, minX, maxX, ny, minY, maxY);
+    }
+
     @Override
     public void printDQMData() {
-        for (SiSensor sensor : sensors)
+        for (SiSensor sensor : sensors) {
             System.out.println(avgClusterEffNames.get(sensor.getName()) + ":  " + avgClusterEffMap.get(sensor.getName()));
+        }
     }
 
     @Override
     public void printDQMStrings() {
-        for (SiSensor sensor : sensors)
-            System.out.println("ALTER TABLE dqm ADD "+avgClusterEffNames.get(sensor.getName())+" double;");
+        for (SiSensor sensor : sensors) {
+            System.out.println("ALTER TABLE dqm ADD " + avgClusterEffNames.get(sensor.getName()) + " double;");
+        }
     }
 
 }

java/trunk/analysis/src/main/java/org/hps/analysis/dataquality
SvtMonitoring.java 924 -> 925
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java	2014-08-28 23:26:58 UTC (rev 924)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java	2014-08-29 01:29:26 UTC (rev 925)
@@ -39,7 +39,7 @@
     private String trackerHitCollectionName = "StripClusterer_SiTrackerHitStrip1D";
     private Detector detector = null;
     private IPlotter plotter;
-    private String trackerName = "Tracker";
+    private final String trackerName = "Tracker";
     private List<SiSensor> sensors;
     private Map<String, int[]> occupancyMap;
     private Map<String, Double> avgOccupancyMap;
@@ -53,7 +53,7 @@
     private int eventCountCluster = 0;
     private static final String nameStrip = "Tracker_TestRunModule_";
     private static final int maxChannels = 640;
-    private String plotDir = "SvtMonitoring/";
+    private final String plotDir = "SvtMonitoring/";
 
     public void setRawTrackerHitCollectionName(String inputCollection) {
         this.rawTrackerHitCollectionName = inputCollection;
@@ -67,6 +67,7 @@
         this.trackerHitCollectionName = inputCollection;
     }
 
+    @Override
     protected void detectorChanged(Detector detector) {
         System.out.println("SvtMonitoring::detectorChanged  Setting up the plotter");
         this.detector = detector;
@@ -99,7 +100,7 @@
     public void process(EventHeader event) {
         /*  increment the strip occupancy arrays */
         if (event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
-            System.out.println("Found a raw hit collection");
+//            System.out.println("Found a raw hit collection");
             List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
             for (RawTrackerHit hit : rawTrackerHits) {
                 int[] strips = occupancyMap.get(hit.getDetectorElement().getName());
@@ -115,10 +116,9 @@
                 GenericObject pars = (GenericObject) hit.getTo();
                 String sensorName = getNiceSensorName((SiSensor) rth.getDetectorElement());
                 //this is a clever way to get the parameters we want from the generic object
-                ShapeFitParameters sfp = new ShapeFitParameters();
-                double t0 = sfp.getT0(pars);
-                double amp = sfp.getAmp(pars);
-                double chiProb = sfp.getChiProb(pars);
+                double t0 = ShapeFitParameters.getT0(pars);
+                double amp = ShapeFitParameters.getAmp(pars);
+                double chiProb = ShapeFitParameters.getChiProb(pars);
                 getSensorPlot(plotDir + "t0Hit_", sensorName).fill(t0);
                 getSensorPlot(plotDir + "amplitude_", sensorName).fill(amp);
                 getSensorPlot(plotDir + "chiProb_", sensorName).fill(chiProb);
@@ -127,7 +127,7 @@
         }
 
         if (event.hasItem(trackerHitCollectionName)) {
-            System.out.println("Found a Si cluster collection");
+//            System.out.println("Found a Si cluster collection");
             List<TrackerHit> siClusters = (List<TrackerHit>) event.get(trackerHitCollectionName);
             for (TrackerHit cluster : siClusters) {
                 String sensorName = getNiceSensorName((SiSensor) ((RawTrackerHit) cluster.getRawHits().get(0)).getDetectorElement());
@@ -161,13 +161,13 @@
     }
 
     private void resetOccupancyMap() {
-        occupancyMap = new HashMap<>();
-        avgOccupancyMap = new HashMap<>();
-        avgOccupancyNames = new HashMap<>();
-        avgt0Names = new HashMap<>();
-        sigt0Names = new HashMap<>();
-        avgt0Map = new HashMap<>();
-        sigt0Map = new HashMap<>();
+        occupancyMap = new HashMap<String, int[]>();
+        avgOccupancyMap = new HashMap<String, Double>();
+        avgOccupancyNames = new HashMap<String, String>();
+        avgt0Names = new HashMap<String, String>();
+        sigt0Names = new HashMap<String, String>();
+        avgt0Map = new HashMap<String, Double>();
+        sigt0Map = new HashMap<String, Double>();
         for (SiSensor sensor : sensors) {
             occupancyMap.put(sensor.getName(), new int[640]);
             avgOccupancyMap.put(sensor.getName(), -999.);
SVNspam 0.1