Author: [log in to unmask] Date: Sat Dec 13 07:21:30 2014 New Revision: 1713 Log: some changes to get these Ecal monitoring drivers to work nicer; Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java (original) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java Sat Dec 13 07:21:30 2014 @@ -1,46 +1,53 @@ package org.hps.monitoring.ecal.plots; - - import hep.aida.IHistogram1D; import hep.aida.IHistogram2D; import hep.aida.IPlotter; import hep.aida.IPlotterFactory; - import java.util.List; - import org.apache.commons.math.stat.StatUtils; import org.hps.readout.ecal.TriggerData; import org.hps.recon.ecal.ECalUtils; import org.hps.recon.ecal.HPSEcalCluster; +import org.hps.recon.ecal.HPSEcalClusterIC; import org.hps.util.Resettable; import org.lcsim.event.CalorimeterHit; import org.lcsim.event.Cluster; import org.lcsim.event.EventHeader; +import org.lcsim.event.base.BaseCalorimeterHit; +import org.lcsim.event.base.BaseCluster; import org.lcsim.geometry.Detector; import org.lcsim.util.Driver; import org.lcsim.util.aida.AIDA; /** - * The driver <code>EcalCluster</code> implements the histogram shown to the user - * in the third tab of the Monitoring Application, when using the Ecal monitoring lcsim file. + * The driver <code>EcalCluster</code> implements the histogram shown to the + * user + * in the third tab of the Monitoring Application, when using the Ecal + * monitoring lcsim file. * These histograms shows single-channels distributions: - * - First sub-tab shows the cluster counts per event (Histogram1D), the number of hits in a cluster (Histogram1D), the cluster centers distribution* (Histogram2D), the maximum cluster energy in an event (Histogram1D) - * - Second sub-tab shows the energy distribution of the cluster (Histogram1D), and the maximum cluster energy in each event (Histogram1D) - * - Third sub-tab shows the time distribution of the cluster (Histogram1D), taken from the mean of the times forming the cluster, as well as the RMS (Histogram1D). + * - First sub-tab shows the cluster counts per event (Histogram1D), the number + * of hits in a cluster (Histogram1D), the cluster centers distribution* + * (Histogram2D), the maximum cluster energy in an event (Histogram1D) + * - Second sub-tab shows the energy distribution of the cluster (Histogram1D), + * and the maximum cluster energy in each event (Histogram1D) + * - Third sub-tab shows the time distribution of the cluster (Histogram1D), + * taken from the mean of the times forming the cluster, as well as the RMS + * (Histogram1D). * - Last sub-tab is a "zoom" of the the cluster centers distribution * All histograms are updated continously. - * - * The cluster center is calculated from the energy center of gravity of the hits forming a cluster. + * + * The cluster center is calculated from the energy center of gravity of the + * hits forming a cluster. + * * @author Andrea Celentano * */ - public class EcalClusterPlots extends Driver implements Resettable { String inputCollection = "EcalClusters"; AIDA aida = AIDA.defaultInstance(); - + IPlotter plotter1, plotter2, plotter3, plotter4; IHistogram1D clusterCountPlot; IHistogram1D clusterSizePlot; @@ -53,7 +60,7 @@ double maxE = 5000 * ECalUtils.MeV; boolean logScale = false; boolean hide = false; - + public void setInputCollection(String inputCollection) { this.inputCollection = inputCollection; } @@ -68,65 +75,62 @@ @Override protected void detectorChanged(Detector detector) { + System.out.println(this.getClass().getSimpleName() + ": detectorChanged...making plots"); // Setup plots. aida.tree().cd("/"); clusterCountPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Cluster Count per Event", 10, -0.5, 9.5); clusterSizePlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Cluster Size", 10, -0.5, 9.5); - clusterEnergyPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Cluster Energy", 1000, -0.1, maxE); - clusterMaxEnergyPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Maximum Cluster Energy In Event", 1000, -0.1, maxE); + clusterEnergyPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Cluster Energy", 100, -0.1, maxE); + clusterMaxEnergyPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Maximum Cluster Energy In Event", 100, -0.1, maxE); edgePlot = aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Cluster center from hits", 93, -23.25, 23.25, 21, -5.25, 5.25); clusterTimes = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Cluster Time Mean", 400, 0, 4.0 * 100); clusterTimeSigma = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Cluster Time Sigma", 100, 0, 40); - + // Setup the plotter factory. IPlotterFactory plotterFactory = aida.analysisFactory().createPlotterFactory("Ecal Cluster Plots"); - + // Create the plotter regions. plotter1 = plotterFactory.create("Cluster Counts"); plotter1.setTitle("Cluster Counts"); plotter1.style().dataStyle().errorBarStyle().setVisible(false); - plotter1.style().dataStyle().fillStyle().setParameter("showZeroHeightBins",Boolean.FALSE.toString()); + plotter1.style().dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString()); plotter1.createRegions(2, 2); plotter1.region(0).plot(clusterCountPlot); plotter1.region(1).plot(clusterSizePlot); plotter1.region(2).plot(edgePlot); plotter1.region(3).plot(clusterMaxEnergyPlot); - plotter2 = plotterFactory.create("Cluster Energies"); - plotter2.createRegions(1,2); + plotter2.createRegions(1, 2); plotter2.setTitle("Cluster Energies"); plotter2.style().dataStyle().errorBarStyle().setVisible(false); - plotter2.style().dataStyle().fillStyle().setParameter("showZeroHeightBins",Boolean.FALSE.toString()); - if (logScale) { + plotter2.style().dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString()); + if (logScale) plotter2.style().yAxisStyle().setParameter("scale", "log"); - } plotter2.region(0).plot(clusterEnergyPlot); plotter2.region(1).plot(clusterMaxEnergyPlot); plotter3 = plotterFactory.create("Cluster Times"); plotter3.setTitle("Cluster Times"); - plotter3.style().dataStyle().fillStyle().setParameter("showZeroHeightBins",Boolean.FALSE.toString()); + plotter3.style().dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString()); plotter3.style().dataStyle().errorBarStyle().setVisible(false); plotter3.createRegions(1, 2); - if (logScale){ + if (logScale) plotter3.style().yAxisStyle().setParameter("scale", "log"); - } plotter3.region(0).plot(clusterTimes); plotter3.region(1).plot(clusterTimeSigma); plotter4 = plotterFactory.create("Cluster Center"); plotter4.setTitle("Edges"); plotter4.style().setParameter("hist2DStyle", "colorMap"); - plotter4.style().dataStyle().fillStyle().setParameter("showZeroHeightBins",Boolean.FALSE.toString()); + plotter4.style().dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString()); plotter4.style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow"); - if (logScale) { + if (logScale) plotter4.style().zAxisStyle().setParameter("scale", "log"); - } - plotter4.createRegion(); + plotter4.createRegion(); plotter4.region(0).plot(edgePlot); - - if (!hide){ + + if (!hide) { plotter1.show(); plotter2.show(); plotter3.show(); @@ -148,49 +152,57 @@ botTrig = triggerData.getBotTrig(); } } - if (event.hasCollection(HPSEcalCluster.class, inputCollection)) { - List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, inputCollection); - clusterCountPlot.fill(clusters.size()); - double maxEnergy = 0; - for (HPSEcalCluster cluster : clusters) { + //mg..12/13/2014...put in kludge so that it handles HPSEcalClusterIC clusters as well. + //clusters used BaseCluster now and what's below is jusa re-arrangement of what was + // there before + List<BassCluster> clusters; + if (event.hasCollection(HPSEcalCluster.class, inputCollection)) + clusters = event.get(BaseCluster.class, inputCollection); + else if (event.hasCollection(HPSEcalClusterIC.class, inputCollection)) + clusters = event.get(BaseCluster.class, inputCollection); + else { + clusterCountPlot.fill(0); + return; + } + + clusterCountPlot.fill(clusters.size()); + double maxEnergy = 0; + for (BaseCluster cluster : clusters) { +// // if ((botTrig == 0 && cluster.getEnergy() > 130 && cluster.getPosition()[1] < 0) || (topTrig == 0 && cluster.getEnergy() > 130 && cluster.getPosition()[1] > 0)) { // if ((botTrig == 0 && cluster.getPosition()[1] < 0) || (topTrig == 0 && cluster.getPosition()[1] > 0)) { - clusterEnergyPlot.fill(cluster.getEnergy()); - if (cluster.getEnergy() > maxEnergy) { - maxEnergy = cluster.getEnergy(); + clusterEnergyPlot.fill(cluster.getEnergy()); + if (cluster.getEnergy() > maxEnergy) + maxEnergy = cluster.getEnergy(); + int size = 0; + double eTOT = 0; + double[] times = new double[cluster.getCalorimeterHits().size()]; + double[] energies = new double[cluster.getCalorimeterHits().size()]; + + double X = 0; + double Y = 0; +// System.out.format("cluster:\n"); + for (CalorimeterHit hit : cluster.getCalorimeterHits()) + if (hit.getRawEnergy() != 0) { + energies[size] = hit.getRawEnergy(); + times[size] = hit.getTime(); + X += energies[size] * hit.getIdentifierFieldValue("ix"); + Y += energies[size] * hit.getIdentifierFieldValue("iy"); + eTOT += energies[size]; + size++; +// System.out.format("x=%d, y=%d, time=%f, energy=%f\n", hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"), hit.getTime(), hit.getRawEnergy()); } - int size = 0; - double eTOT = 0; - double[] times = new double[cluster.getCalorimeterHits().size()]; - double[] energies = new double[cluster.getCalorimeterHits().size()]; - - double X = 0; - double Y = 0; -// System.out.format("cluster:\n"); - for (CalorimeterHit hit : cluster.getCalorimeterHits()) { - if (hit.getRawEnergy() != 0) { - energies[size] = hit.getRawEnergy(); - times[size] = hit.getTime(); - X += energies[size] * hit.getIdentifierFieldValue("ix"); - Y += energies[size] * hit.getIdentifierFieldValue("iy"); - eTOT+=energies[size]; - size++; -// System.out.format("x=%d, y=%d, time=%f, energy=%f\n", hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"), hit.getTime(), hit.getRawEnergy()); - } - } - if (eTOT>0){ - X/=eTOT; - Y/=eTOT; - clusterTimes.fill(StatUtils.mean(times, 0, size)); - clusterSizePlot.fill(size); //The number of "hits" in a "cluster" - clusterTimeSigma.fill(Math.sqrt(StatUtils.variance(times, 0, size))); - edgePlot.fill(X,Y); - } + if (eTOT > 0) { + X /= eTOT; + Y /= eTOT; + clusterTimes.fill(StatUtils.mean(times, 0, size)); + clusterSizePlot.fill(size); //The number of "hits" in a "cluster" + clusterTimeSigma.fill(Math.sqrt(StatUtils.variance(times, 0, size))); + edgePlot.fill(X, Y); } - if (maxEnergy>0) clusterMaxEnergyPlot.fill(maxEnergy); - } else { - clusterCountPlot.fill(0); - } + } + if (maxEnergy > 0) + clusterMaxEnergyPlot.fill(maxEnergy); } @Override @@ -203,6 +215,6 @@ @Override public void endOfData() { - //plotterFrame.dispose(); - } -} + //plotterFrame.dispose(); + } +} Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java (original) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java Sat Dec 13 07:21:30 2014 @@ -49,8 +49,8 @@ IHistogram1D topTrigTimePlot, botTrigTimePlot, orTrigTimePlot; IHistogram2D topTimePlot2D, botTimePlot2D, orTimePlot2D; // IHistogram2D topX, botX, topY, botY; - IHistogram2D hitNumberPlot; - IHistogram2D occupancyPlot; +// IHistogram2D hitNumberPlot; +// IHistogram2D occupancyPlot; IPlotterFactory plotterFactory; @@ -87,8 +87,8 @@ // Setup plots. hitCountPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Count In Event", 10, -0.5, 9.5); hitTimePlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time", 100, 0 * 4.0, 100 * 4.0); - hitNumberPlot = aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Count"); - occupancyPlot = aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Occupancy"); + // hitNumberPlot = aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Count"); + // occupancyPlot = aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Occupancy"); topTimePlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : First Hit Time, Top", 100, 0, 100 * 4.0); botTimePlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : First Hit Time, Bottom", 100, 0, 100 * 4.0); orTimePlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : First Hit Time, Or", 100, 0, 100 * 4.0); @@ -101,8 +101,8 @@ botTimePlot2D = aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time vs. Trig Time, Bottom", 100, 0, 100 * 4.0, 512, 0, 4096); orTimePlot2D = aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time vs. Trig Time, Or", 100, 0, 100 * 4.0, 512, 0, 4096); - hitEnergyPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Energy", 1000, -0.1, maxE); - hitMaxEnergyPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Maximum Hit Energy In Event", 1000, -0.1, maxE); + hitEnergyPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Energy", 100, -0.1, maxE); + hitMaxEnergyPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Maximum Hit Energy In Event", 100, -0.1, maxE); @@ -117,9 +117,9 @@ // Create the plotter regions. plotter.createRegions(2,2); - plotter.region(0).plot(hitNumberPlot); +// plotter.region(0).plot(hitNumberPlot); plotter.region(1).plot(hitTimePlot,pstyle); - plotter.region(2).plot(occupancyPlot,pstyle); +// plotter.region(2).plot(occupancyPlot,pstyle); plotter.region(3).plot(hitCountPlot,pstyle); @@ -128,7 +128,7 @@ pstyle.zAxisStyle().setParameter("scale", "log"); } else pstyle.zAxisStyle().setParameter("scale", "lin"); - plotter.region(0).plot(hitNumberPlot,pstyle); +// plotter.region(0).plot(hitNumberPlot,pstyle); // Setup the plotter. @@ -191,7 +191,7 @@ List<GenericObject> triggerList = event.get(GenericObject.class, "TriggerBank"); if (!triggerList.isEmpty()) { GenericObject triggerData = triggerList.get(0); - +/* mgraham12/14/2014 ...comment this out for now as it seems to through a null pointer if (triggerData instanceof SSPData){ orTrigTime=((SSPData)triggerData).getOrTrig(); topTrigTime=((SSPData)triggerData).getTopTrig(); @@ -201,7 +201,8 @@ topTrigTimePlot.fill(topTrigTime); botTrigTimePlot.fill(botTrigTime); - } + } + */ }//end if triggerList isEmpty }