hps-java/src/main/java/org/lcsim/hps/monitoring/svt
diff -N SVTEventInfo.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SVTEventInfo.java 2 May 2012 00:01:13 -0000 1.1
@@ -0,0 +1,134 @@
+package org.lcsim.hps.monitoring.svt;
+
+import hep.aida.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.tracker.silicon.*;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *
+ * @author mgraham
+ */
+public class SVTEventInfo extends Driver {
+
+ private List<IPlotter> plotters = new ArrayList<IPlotter>();
+ private AIDA aida = AIDA.defaultInstance();
+ private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
+ private String trackerName = "Tracker";
+ private Detector detector = null;
+ private List<SiSensor> sensors;
+
+ public SVTEventInfo() {
+ }
+
+ public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) {
+ this.rawTrackerHitCollectionName = rawTrackerHitCollectionName;
+ }
+
+ protected void detectorChanged(Detector detector) {
+ this.detector = detector;
+ aida.tree().cd("/");
+
+ sensors = detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class);
+
+
+ IAnalysisFactory fac = aida.analysisFactory();
+ IPlotter plotter = fac.createPlotterFactory().create("HPS SVT Events Plots");
+ plotters.add(plotter);
+ IPlotterStyle style = plotter.style();
+ style.dataStyle().fillStyle().setColor("yellow");
+ style.dataStyle().errorBarStyle().setVisible(false);
+ plotter.createRegions(2, 2);
+
+
+
+ IPlotter plotter2 = fac.createPlotterFactory().create("HPS SVT Events Plots");
+ plotters.add(plotter2);
+ IPlotterStyle style2 = plotter2.style();
+ style2.dataStyle().fillStyle().setColor("green");
+ style2.dataStyle().errorBarStyle().setVisible(true);
+ plotter2.createRegions(1, 2);
+
+ IHistogram1D nrawTopPlot = aida.histogram1D("Total Number of Raw Hits in Top Half", 20, 0, 19.0);
+ IHistogram1D nrawBottomPlot = aida.histogram1D("Total Number of Raw Hits in Bottom Half", 20, 0, 19.0);
+ IHistogram1D nlayersTopPlot = aida.histogram1D("Number of Layers Hit in Top Half", 11, 0, 10.0);
+ IHistogram1D nlayersBottomPlot = aida.histogram1D("Number of Layers Hit in Bottom Half", 11, 0, 10.0);
+
+ IProfile avgLayersTopPlot = aida.profile1D("Number of Hits per layer in Top Half", 10, 1,10);
+ IProfile avgLayersBottomPlot = aida.profile1D("Number of Hits per layer in Bottom Half", 10,1,10);
+
+ plotter.region(0).plot(nrawTopPlot);
+ plotter.region(1).plot(nrawBottomPlot);
+ plotter.region(2).plot(nlayersTopPlot);
+ plotter.region(3).plot(nlayersBottomPlot);
+
+ plotter2.region(0).plot(avgLayersTopPlot);
+ plotter2.region(1).plot(avgLayersBottomPlot);
+
+ plotter.show();
+ plotter2.show();
+ }
+
+ public void process(EventHeader event) {
+ List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+ int totalTopHit = 0;
+ int totalBotHit = 0;
+
+ int nlayersTopHit = 0;
+ int nlayersBotHit = 0;
+ int[] layersTop = {0,0,0,0,0,0,0,0,0,0};
+ int[] layersBot = {0,0,0,0,0,0,0,0,0,0};
+
+ for (RawTrackerHit hit : rawHits) {
+ int layerNumber = hit.getLayerNumber();
+ boolean isTop = isHitOnTop(hit);
+ if (isTop) {
+ totalTopHit++;
+ layersTop[layerNumber] ++;
+ } else {
+ totalBotHit++;
+ layersBot[layerNumber]++;
+ }
+
+ }
+
+ System.out.println(totalTopHit);
+ aida.histogram1D("Total Number of Raw Hits in Top Half").fill(totalTopHit);
+ aida.histogram1D("Total Number of Raw Hits in Bottom Half").fill(totalBotHit);
+
+ for (int i = 0; i < 10; i++) {
+ if (layersTop[i]>0)
+ nlayersTopHit++;
+ if (layersBot[i]>0)
+ nlayersBotHit++;
+ aida.profile1D("Number of Hits per layer in Top Half").fill(i,layersTop[i]);
+ aida.profile1D("Number of Hits per layer in Bottom Half").fill(i,layersBot[i]);
+ }
+
+ aida.histogram1D("Number of Layers Hit in Top Half").fill(nlayersTopHit);
+ aida.histogram1D("Number of Layers Hit in Bottom Half").fill(nlayersBotHit);
+
+ }
+
+ private boolean isHitOnTop(RawTrackerHit hit) {
+ SiSensor sensor = (SiSensor) hit.getDetectorElement();
+ IIdentifier id = hit.getIdentifier();
+ SiTrackerIdentifierHelper _sid_helper = (SiTrackerIdentifierHelper) sensor.getIdentifierHelper();
+
+ ChargeCarrier carrier = ChargeCarrier.getCarrier(_sid_helper.getSideValue(id));
+ SiSensorElectrodes electrodes = ((SiSensor) hit.getDetectorElement()).getReadoutElectrodes(carrier);
+
+// if (((SiStrips) electrodes).getStripCenter(55).y() > 0)
+ if (sensor.getName().contains("reflected"))
+ return true;
+ return false;
+ }
+}