hps-java/src/main/java/org/lcsim/hps/analysis/ecal
diff -N HPSEcalTriggerPlotsDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HPSEcalTriggerPlotsDriver.java 21 Oct 2011 19:56:56 -0000 1.1
@@ -0,0 +1,120 @@
+package org.lcsim.hps.analysis.ecal;
+
+import hep.aida.IHistogram2D;
+
+import java.util.List;
+
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.hps.recon.ecal.HPSRawCalorimeterHit;
+import org.lcsim.hps.util.ClockSingleton;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ * Diagnostic plots for HPS ECal.
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: HPSEcalTriggerPlotsDriver.java,v 1.1 2011/10/21 19:56:56 meeg Exp $
+ */
+public class HPSEcalTriggerPlotsDriver extends Driver {
+
+ String ecalCollectionName = "EcalHits";
+ String clusterCollectionName = "EcalClusters";
+ AIDA aida = AIDA.defaultInstance();
+ IHistogram2D hitXYPlot;
+ IHistogram2D clusterHitXYPlot;
+ IHistogram2D seedHitXYPlot;
+ IHistogram2D triggerClusterHitXYPlot;
+ IHistogram2D triggerSeedHitXYPlot;
+ int numTriggers = 0;
+ IDDecoder dec = null;
+
+ public void setEcalCollectionName(String ecalCollectionName) {
+ this.ecalCollectionName = ecalCollectionName;
+ }
+
+ public void setClusterCollectionName(String clusterCollectionName) {
+ this.clusterCollectionName = clusterCollectionName;
+ }
+
+ public void startOfData() {
+ hitXYPlot = aida.histogram2D(
+ clusterCollectionName + " : Hits",
+ 47, -23.5, 23.5, 11, -5.5, 5.5);
+ clusterHitXYPlot = aida.histogram2D(
+ clusterCollectionName + " : Crystals in clusters",
+ 47, -23.5, 23.5, 11, -5.5, 5.5);
+ seedHitXYPlot = aida.histogram2D(
+ clusterCollectionName + " : Seed hits",
+ 47, -23.5, 23.5, 11, -5.5, 5.5);
+ triggerClusterHitXYPlot = aida.histogram2D(
+ clusterCollectionName + " : Crystals in clusters, with trigger",
+ 47, -23.5, 23.5, 11, -5.5, 5.5);
+ triggerSeedHitXYPlot = aida.histogram2D(
+ clusterCollectionName + " : Seed hits, with trigger",
+ 47, -23.5, 23.5, 11, -5.5, 5.5);
+ }
+
+ public void process(EventHeader event) {
+ List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollectionName);
+ if (clusters == null)
+ throw new RuntimeException("Missing cluster collection!");
+
+ List<CalorimeterHit> hits = event.get(CalorimeterHit.class, ecalCollectionName);
+ if (hits == null)
+ throw new RuntimeException("Missing hit collection!");
+
+ // Get ID helper.
+ IIdentifierHelper helper =
+ event.getMetaData(hits).getIDDecoder().getSubdetector().getDetectorElement().getIdentifierHelper();
+
+ for (CalorimeterHit hit : hits) {
+ IIdentifier id = hit.getIdentifier();
+ int ix = helper.unpack(id).getValue(helper.getFieldIndex("ix"));
+ int iy = helper.unpack(id).getValue(helper.getFieldIndex("iy"));
+ hitXYPlot.fill(ix, iy);
+ }
+
+ for (HPSEcalCluster clus : clusters) {
+ HPSRawCalorimeterHit seedHit = (HPSRawCalorimeterHit) clus.getSeedHit();
+ IIdentifier id = seedHit.getIdentifier();
+ int ix = helper.unpack(id).getValue(helper.getFieldIndex("ix"));
+ int iy = helper.unpack(id).getValue(helper.getFieldIndex("iy"));
+// dec = seedHit.getIDDecoder();
+// dec.setID(seedHit.getCellID());
+ seedHitXYPlot.fill(ix, iy);
+ for (CalorimeterHit hit : clus.getCalorimeterHits()) {
+ id = hit.getIdentifier();
+ ix = helper.unpack(id).getValue(helper.getFieldIndex("ix"));
+ iy = helper.unpack(id).getValue(helper.getFieldIndex("iy"));
+// dec = hit.getIDDecoder();
+// dec.setID(hit.getCellID());
+ clusterHitXYPlot.fill(ix, iy);
+ }
+ }
+
+ if (ClockSingleton.triggered())
+ for (HPSEcalCluster clus : clusters) {
+ HPSRawCalorimeterHit seedHit = (HPSRawCalorimeterHit) clus.getSeedHit();
+ IIdentifier id = seedHit.getIdentifier();
+ int ix = helper.unpack(id).getValue(helper.getFieldIndex("ix"));
+ int iy = helper.unpack(id).getValue(helper.getFieldIndex("iy"));
+// dec = seedHit.getIDDecoder();
+// dec.setID(seedHit.getCellID());
+ triggerSeedHitXYPlot.fill(ix, iy);
+ for (CalorimeterHit hit : clus.getCalorimeterHits()) {
+ id = hit.getIdentifier();
+ ix = helper.unpack(id).getValue(helper.getFieldIndex("ix"));
+ iy = helper.unpack(id).getValue(helper.getFieldIndex("iy"));
+// dec = hit.getIDDecoder();
+// dec.setID(hit.getCellID());
+ triggerClusterHitXYPlot.fill(ix, iy);
+ }
+ }
+ }
+}