6 modified files
java/trunk/hps-java/src/main/resources/org/lcsim/hps/steering/users/celentan
--- java/trunk/hps-java/src/main/resources/org/lcsim/hps/steering/users/celentan/EcalMonitoringCelentan.lcsim 2014-03-25 02:59:38 UTC (rev 344)
+++ java/trunk/hps-java/src/main/resources/org/lcsim/hps/steering/users/celentan/EcalMonitoringCelentan.lcsim 2014-03-25 14:08:14 UTC (rev 345)
@@ -15,9 +15,10 @@
<driver name="EcalMonitoringPlots"/> <!-- General plots -->
<driver name="EcalHitPlots"/> <!-- Single hit distributions -->
<driver name="EcalClusterPlots"/> <!-- Clusters distributions -->
- <driver name="EcalDaqPlots"/> <!-- DAQ Plots -->
- <driver name="EcalWindowPlots"/> <!-- Window plots -->
-<!-- <driver name="EcalEventMonitor"/> -->
+ <driver name="EcalDaqPlots"/> <!-- DAQ Plots -->
+ <driver name="EcalEventDisplay"/> <!-- Ecal event display -->
+<!-- <driver name="EcalWindowPlots"/> -->
+
<!-- <driver name="EcalEvsX"/> -->
<!-- <driver name="TriggerPlots"/>-->
<!--
@@ -26,58 +27,82 @@
-->
<!-- <driver name="RunControlDriver" />-->
<!--<driver name="AidaSaveDriver"/>-->
- </execute>
+ </execute>
+
+<!-- Here starts the drivers description -->
<drivers>
- <!--<driver name="RunControlDriver" type="org.lcsim.hps.monitoring.RunControlDriver"/>-->
+ <driver name="EventMarkerDriver"
+ type="org.lcsim.job.EventMarkerDriver">
+ <eventInterval>1</eventInterval>
+ </driver>
+
<driver name="CalibrationDriver" type="org.lcsim.hps.conditions.CalibrationDriver"/>
+
<driver name="EcalRawConverter" type="org.lcsim.hps.recon.ecal.EcalRawConverterDriver">
<!-- <threshold>150</threshold>-->
<applyBadCrystalMap>false</applyBadCrystalMap>
<!-- <dropBadFADC>true</dropBadFADC>-->
</driver>
- <driver name="EcalDaqPlots" type="org.lcsim.hps.users.celentan.EcalDaqPlots">
+
+ <!-- <driver name="EcalClusterer" type="org.lcsim.hps.recon.ecal.EcalClusterer">-->
+ <driver name="EcalClusterer" type="org.lcsim.hps.recon.ecal.EcalClusterIC">
+<!-- <clusterWindow>32.0</clusterWindow>-->
+ <ecalName>Ecal</ecalName>
+ <ecalCollectionName>EcalCalHits</ecalCollectionName>
</driver>
- <driver name="EcalMonitoringPlots" type="org.lcsim.hps.users.celentan.EcalMonitoringPlots">
+
+ <driver name="EcalMonitoringPlots" type="org.hps.monitoring.ecal.plots.EcalMonitoringPlots">
<inputCollection>EcalCalHits</inputCollection>
<eventRefreshRate>100</eventRefreshRate>
</driver>
- <driver name="EcalEventMonitor" type="org.lcsim.hps.users.celentan.EcalEventMonitor">
- <eventRefreshRate>1000</eventRefreshRate>
- </driver>
- <driver name="EcalWindowPlots" type="org.lcsim.hps.users.celentan.EcalWindowPlots">
- <inputCollection>EcalReadoutHits</inputCollection>
- </driver>
- <driver name="EcalPedestalPlots" type="org.lcsim.hps.monitoring.ecal.EcalPedestalPlots">
- <inputCollection>EcalCalHits</inputCollection>
- <eventRefreshRate>100</eventRefreshRate>
- </driver>
- <driver name="EventMarkerDriver"
- type="org.lcsim.job.EventMarkerDriver">
- <eventInterval>1</eventInterval>
- </driver>
-<!-- <driver name="EcalClusterer" type="org.lcsim.hps.recon.ecal.HPSEcalCTPClusterer">-->
- <driver name="EcalClusterer" type="org.lcsim.hps.recon.ecal.EcalClusterer">
-<!-- <clusterWindow>32.0</clusterWindow>-->
- <ecalName>Ecal</ecalName>
- <ecalCollectionName>EcalCalHits</ecalCollectionName>
- </driver>
- <driver name="EcalHitPlots" type="org.lcsim.hps.users.celentan.EcalHitPlots">
+
+ <driver name="EcalHitPlots" type="org.hps.monitoring.ecal.plots.EcalHitPlots">
<maxE>2.0</maxE>
<logScale>true</logScale>
</driver>
- <driver name="EcalClusterPlots" type="org.lcsim.hps.users.celentan.EcalClusterPlots">
+
+ <driver name="EcalClusterPlots" type="org.hps.monitoring.ecal.plots.EcalClusterPlots">
<maxE>2.0</maxE>
<logScale>false</logScale>
</driver>
- <driver name="EcalEvsX" type="org.lcsim.hps.monitoring.ecal.EcalEvsX">
+
+ <driver name="EcalDaqPlots" type="org.hps.monitoring.ecal.plots.EcalDaqPlots">
+ </driver>
+
+ <driver name="EcalEventDisplay" type="org.hps.monitoring.ecal.plots.EcalEventDisplay">
+ <inputCollection>EcalCalHits</inputCollection>
+ <eventRefreshRate>100</eventRefreshRate>
+ </driver>
+
+
+<!-- Here are commented drivers -->
+ <!--<driver name="RunControlDriver" type="org.lcsim.hps.monitoring.RunControlDriver"> -->
+
+ <!--<driver name="EcalClusterer" type="org.lcsim.hps.recon.ecal.HPSEcalCTPClusterer"> -->
+
+ <!-- <driver name="EcalEvsX" type="org.lcsim.hps.monitoring.ecal.EcalEvsX">
<targetZ>674</targetZ>
<inputCollection>EcalClusters</inputCollection>
- </driver>
- <driver name="TriggerPlots" type="org.lcsim.hps.monitoring.ecal.TriggerPlots">
+ </driver> -->
+
+ <!-- <driver name="EcalWindowPlots" type="org.hps.monitoring.ecal.plots.EcalWindowPlots">
+ <inputCollection>EcalReadoutHits</inputCollection>
+ </driver> -->
+
+ <!-- <driver name="EcalPedestalPlots" type="org.lcsim.hps.monitoring.ecal.EcalPedestalPlots">
+ <inputCollection>EcalCalHits</inputCollection>
+ <eventRefreshRate>100</eventRefreshRate>
+ </driver>-->
+
+
+ <!-- <driver name="TriggerPlots" type="org.lcsim.hps.monitoring.ecal.TriggerPlots">
<clusterEnergyCut>0.500</clusterEnergyCut>
- </driver>
- <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
+ </driver>-->
+
+ <!-- <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
<outputFileName>triggerEPlots</outputFileName>
- </driver>
+ </driver> -->
+
+
</drivers>
</lcsim>
\ No newline at end of file
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java 2014-03-25 02:59:38 UTC (rev 344)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java 2014-03-25 14:08:14 UTC (rev 345)
@@ -20,13 +20,26 @@
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.
+ * 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).
+ * - 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.
+ * @author Andrea Celentano
+ *
+ */
+
public class EcalClusterPlots extends Driver implements Resettable {
- //AIDAFrame plotterFrame;
String inputCollection = "EcalClusters";
AIDA aida = AIDA.defaultInstance();
-
IPlotter plotter1, plotter2, plotter3, plotter4;
IHistogram1D clusterCountPlot;
IHistogram1D clusterSizePlot;
@@ -54,17 +67,6 @@
@Override
protected void detectorChanged(Detector detector) {
-
- //plotterFrame = new AIDAFrame();
- //plotterFrame.setTitle("HPS ECal Cluster Plots");
-
- // Setup the plotter factory.
- IPlotterFactory plotterFactory = aida.analysisFactory().createPlotterFactory("Ecal Cluster Plots");
- plotter1 = plotterFactory.create("Cluster Counts");
- plotter1.setTitle("Cluster Counts");
- //plotterFrame.addPlotter(plotter);
- plotter1.style().dataStyle().errorBarStyle().setVisible(false);
-
// Setup plots.
aida.tree().cd("/");
clusterCountPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Cluster Count per Event", 10, -0.5, 9.5);
@@ -75,61 +77,51 @@
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.createRegions(2, 2);
plotter1.region(0).plot(clusterCountPlot);
plotter1.region(1).plot(clusterSizePlot);
plotter1.region(2).plot(edgePlot);
plotter1.region(3).plot(clusterMaxEnergyPlot);
- // Setup the plotter.
+
plotter2 = plotterFactory.create("Cluster Energies");
+ plotter2.createRegions(1,2);
plotter2.setTitle("Cluster Energies");
- //plotterFrame.addPlotter(plotter2);
plotter2.style().dataStyle().errorBarStyle().setVisible(false);
-
if (logScale) {
plotter2.style().yAxisStyle().setParameter("scale", "log");
}
-
-
-
- // Create the plotter regions.
- plotter2.createRegions(1, 2);
plotter2.region(0).plot(clusterEnergyPlot);
plotter2.region(1).plot(clusterMaxEnergyPlot);
plotter3 = plotterFactory.create("Cluster Times");
plotter3.setTitle("Cluster Times");
- //plotterFrame.addPlotter(plotter3);
plotter3.style().dataStyle().errorBarStyle().setVisible(false);
plotter3.createRegions(1, 2);
plotter3.style().yAxisStyle().setParameter("scale", "log");
-
-
plotter3.region(0).plot(clusterTimes);
plotter3.region(1).plot(clusterTimeSigma);
plotter4 = plotterFactory.create("Cluster Center");
plotter4.setTitle("Edges");
- //plotterFrame.addPlotter(plotter4);
plotter4.style().setParameter("hist2DStyle", "colorMap");
plotter4.style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
plotter4.style().zAxisStyle().setParameter("scale", "log");
- plotter4.createRegion();
-
-
-
-
- //plotterFrame.setVisible(true);
- //plotterFrame.pack();
+ plotter4.createRegion();
+ plotter4.region(0).plot(edgePlot);
if (!hide){
- plotter1.show();
- plotter2.show();
- plotter3.show();
- plotter4.show();
+ plotter1.show();
+ plotter2.show();
+ plotter3.show();
+ plotter4.show();
}
}
@@ -142,7 +134,6 @@
List<TriggerData> triggerList = event.get(TriggerData.class, "TriggerBank");
if (!triggerList.isEmpty()) {
TriggerData triggerData = triggerList.get(0);
-
orTrig = triggerData.getOrTrig();
topTrig = triggerData.getTopTrig();
botTrig = triggerData.getBotTrig();
@@ -168,11 +159,10 @@
// System.out.format("cluster:\n");
for (CalorimeterHit hit : cluster.getCalorimeterHits()) {
if (hit.getRawEnergy() != 0) {
- energies[size] = hit.getRawEnergy();
+ energies[size] = hit.getRawEnergy();
times[size] = hit.getTime();
X += energies[size] * hit.getIdentifierFieldValue("ix");
Y += energies[size] * hit.getIdentifierFieldValue("iy");
- //clusterTimes.fill(hit.getTime());
size++;
// System.out.format("x=%d, y=%d, time=%f, energy=%f\n", hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"), hit.getTime(), hit.getRawEnergy());
}
@@ -183,9 +173,6 @@
clusterSizePlot.fill(size); //The number of "hits" in a "cluster"
clusterTimeSigma.fill(Math.sqrt(StatUtils.variance(times, 0, size)));
edgePlot.fill(X,Y);
-
-
-// }
}
clusterMaxEnergyPlot.fill(maxEnergy);
} else {
@@ -203,6 +190,6 @@
@Override
public void endOfData() {
- //plotterFrame.dispose();
+ //plotterFrame.dispose();
}
}
\ No newline at end of file
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalDaqPlots.java 2014-03-25 02:59:38 UTC (rev 344)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalDaqPlots.java 2014-03-25 14:08:14 UTC (rev 345)
@@ -12,152 +12,157 @@
import org.lcsim.event.EventHeader;
import org.lcsim.event.RawCalorimeterHit;
+import org.lcsim.event.CalorimeterHit;
import org.lcsim.event.RawTrackerHit;
import org.lcsim.geometry.Detector;
import org.lcsim.geometry.compact.Subdetector;
import org.lcsim.hps.monitoring.deprecated.Resettable;
-import org.lcsim.hps.recon.ecal.EcalConditions;
+import org.lcsim.hps.recon.ecal.EcalConditions; //THIS IS THE OLD ONE
import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;
+import org.hps.conditions.ecal.*; //This is the new condition system
+/**
+ * The driver <code>EcalDaqPlots</code> implements the histogram shown to the user
+ * in the fourth tab of the Monitoring Application, when using the Ecal monitoring lcsim file.
+ * It contains only a sub-tab, showing the number of hits recorded by the different FADC channels.
+ * It is a very preliminary driver to monitor the DAQ status.
+ * These plots are updated continuosly.
+ * @author Andrea Celentano
+ * @TODO: integrate with the new conditions system.
+ *
+ */
+
public class EcalDaqPlots extends Driver implements Resettable {
- private String subdetectorName = "Ecal";
- private String inputCollection = "EcalReadoutHits";
- private IPlotter plotter;
- private AIDA aida;
- private Detector detector;
- private List<IHistogram1D> plots;
- private static final short[] slots = {10, 13, 9, 14, 8, 15, 7, 16, 6, 17, 5, 18, 4, 19};
+ private String subdetectorName = "Ecal";
+ private String inputCollection = "EcalReadoutHits";
+ private IPlotter plotter;
+ private AIDA aida;
+ private Detector detector;
+ private List<IHistogram1D> plots;
+ private static final short[] slots = {10, 13, 9, 14, 8, 15, 7, 16, 6, 17, 5, 18, 4, 19};
- public EcalDaqPlots() {
- }
+ public EcalDaqPlots() {
+ }
- public void setSubdetectorName(String subdetectorName) {
- this.subdetectorName = subdetectorName;
- }
+ public void setSubdetectorName(String subdetectorName) {
+ this.subdetectorName = subdetectorName;
+ }
- public void setInputCollection(String inputCollection) {
- this.inputCollection = inputCollection;
- }
+ public void setInputCollection(String inputCollection) {
+ this.inputCollection = inputCollection;
+ }
- public void detectorChanged(Detector detector) {
+ public void detectorChanged(Detector detector) {
- this.detector = detector;
+ this.detector = detector;
- if (subdetectorName == null) {
- throw new RuntimeException("The subdetectorName parameter was not set.");
- }
+ if (subdetectorName == null) {
+ throw new RuntimeException("The subdetectorName parameter was not set.");
+ }
- if (inputCollection == null) {
- throw new RuntimeException("The inputCollection parameter was not set.");
- }
+ if (inputCollection == null) {
+ throw new RuntimeException("The inputCollection parameter was not set.");
+ }
- Subdetector subdetector = detector.getSubdetector(subdetectorName);
-
- aida = AIDA.defaultInstance();
- aida.tree().cd("/");
- plots = new ArrayList<IHistogram1D>();
-
-
- for (int i = 1; i < 3; i++) { // crate
- for (int j = 0; j < 14; j++) { // slot
- plots.add(aida.histogram1D("ECAL: Crate " + i + "; Slot " + slots[j], 16, 0, 16));
- }
- }
+ Subdetector subdetector = detector.getSubdetector(subdetectorName);
+
+ aida = AIDA.defaultInstance();
+ aida.tree().cd("/");
+ plots = new ArrayList<IHistogram1D>();
+
+
+ for (int i = 1; i < 3; i++) { // crate
+ for (int j = 0; j < 14; j++) { // slot
+ plots.add(aida.histogram1D("ECAL: Crate " + i + "; Slot " + slots[j], 16, 0, 16));
+ }
+ }
- IPlotterFactory factory= aida.analysisFactory().createPlotterFactory("ECAL DAQ Plots");
- plotter =factory.create("DAQ Plots");
- IPlotterStyle pstyle = plotter.style();
- pstyle.dataStyle().fillStyle().setColor("orange");
- pstyle.dataStyle().markerStyle().setColor("orange");
- pstyle.dataStyle().errorBarStyle().setVisible(false);
- plotter.createRegions(7, 4);
-
- int id,plot_id;
- for (int i = 1; i < 3; i++) { // crate
- for (int j = 0; j < 14; j++) { // slot
- //System.out.println("creating plot: " + "ECAL: Crate " + j + "; Slot " + i + " in region " + region);
- id = (i-1)*14+(j);
- plot_id = 0;
- if (i==1){
- if (j%2==0) plot_id=j*2;
- else plot_id=(j-1)*2+1;
- }
- else if (i==2){
- if (j%2==0) plot_id=j*2+2;
- else plot_id=(j-1)*2+3;
- }
-
- plotter.region(plot_id).plot(plots.get(id));
- /*JASHist jhist = ((PlotterRegion) plotter.region(region)).getPlot();
- jhist.setAllowUserInteraction(false);
- jhist.setAllowPopupMenus(false);
- */
- }
- }
- plotter.show();
- }
+ IPlotterFactory factory= aida.analysisFactory().createPlotterFactory("ECAL DAQ Plots");
+ plotter =factory.create("DAQ Plots");
+ IPlotterStyle pstyle = plotter.style();
+ pstyle.dataStyle().fillStyle().setColor("orange");
+ pstyle.dataStyle().markerStyle().setColor("orange");
+ pstyle.dataStyle().errorBarStyle().setVisible(false);
+ plotter.createRegions(7, 4);
+
+ int id,plot_id;
+ for (int i = 1; i < 3; i++) { // crate
+ for (int j = 0; j < 14; j++) { // slot
+ //System.out.println("creating plot: " + "ECAL: Crate " + j + "; Slot " + i + " in region " + region);
+ id = (i-1)*14+(j);
+ plot_id = 0;
+ if (i==1){
+ if (j%2==0) plot_id=j*2;
+ else plot_id=(j-1)*2+1;
+ }
+ else if (i==2){
+ if (j%2==0) plot_id=j*2+2;
+ else plot_id=(j-1)*2+3;
+ }
+
+ plotter.region(plot_id).plot(plots.get(id));
+ }
+ }
+ plotter.show();
+ }
+
+ @Override
+ public void reset() {
+ if (plotter != null) {
+ for (IHistogram1D plot : plots) {
+ plot.reset();
+ }
+ }
+ }
-// public void endOfData() {
-// if (plotter != null) {
-// plotter.hide();
-// }
-// }
-
- public void reset() {
- if (plotter != null) {
- // plotter.hide();
- // plotter.destroyRegions();
- for (IHistogram1D plot : plots) {
- plot.reset();
- }
- //detectorChanged(detector);
- }
- }
-
- public void process(EventHeader event) {
- if (event.hasCollection(RawCalorimeterHit.class, inputCollection)) {
- List<RawCalorimeterHit> hits = event.get(RawCalorimeterHit.class, inputCollection);
- for (RawCalorimeterHit hit : hits) {
- Long daqId = EcalConditions.physicalToDaqID(hit.getCellID());
- int crate = EcalConditions.getCrate(daqId);
- int slot = EcalConditions.getSlot(daqId);
- int channel = EcalConditions.getChannel(daqId);
- int id = getSlotIndex(slot)+(crate-1)*14;
-
- //System.out.println("crate="+crate+"; slot="+slot+"; channel="+channel);
- //System.out.println("filling plot: " + "ECAL: Crate " + crate + "; Slot " + slot+ "(" + getSlotIndex(slot)+ ")"+" id: "+id );
- plots.get(id).fill(channel);
- }
- }
- if (event.hasCollection(RawTrackerHit.class, inputCollection)) {
- List<RawTrackerHit> hits = event.get(RawTrackerHit.class, inputCollection);
- for (RawTrackerHit hit : hits) {
- Long daqId = EcalConditions.physicalToDaqID(hit.getCellID());
- int crate = EcalConditions.getCrate(daqId);
- int slot = EcalConditions.getSlot(daqId);
- int channel = EcalConditions.getChannel(daqId);
- //System.out.println("crate="+crate+"; slot="+slot+"; channel="+channel);
- //System.out.println("filling plot: " + "ECAL: Crate " + crate + "; Slot " + slot);
- int id = getSlotIndex(slot)+(crate-1)*14;
- plots.get(id).fill(channel);
- }
- }
- }
-
-
-
- public int getSlotIndex(int slot){
- int ret=-1;
- for (int ii=0;ii<14;ii++){
- if (slots[ii]==slot) ret=ii;
- }
- return ret;
- }
-
-
-
-
-
+ public void process(EventHeader event) {
+ if (event.hasCollection(CalorimeterHit.class, inputCollection)) {
+ List<CalorimeterHit> hits = event.get(CalorimeterHit.class, inputCollection);
+ for (CalorimeterHit hit : hits) {
+
+ //EcalChannel.GeometryId geomID;
+ //EcalChannel channel;
+ //geomID.x=hit.getIdentifierFieldValue("ix");
+ //geomID.y=hit.getIdentifierFieldValue("iy");
+ //channel=EcalChannel.findChannel(geomID);
+
+ Long daqId = EcalConditions.physicalToDaqID(hit.getCellID());
+ int crate = EcalConditions.getCrate(daqId);
+ int slot = EcalConditions.getSlot(daqId);
+ int channel = EcalConditions.getChannel(daqId);
+ int id = getSlotIndex(slot)+(crate-1)*14;
+ plots.get(id).fill(channel);
+ }
+ }
+/*
+ * if (event.hasCollection(RawTrackerHit.class, inputCollection)) {
+ List<RawTrackerHit> hits = event.get(RawTrackerHit.class, inputCollection);
+ for (RawTrackerHit hit : hits) {
+ Long daqId = EcalConditions.physicalToDaqID(hit.getCellID());
+ int crate = EcalConditions.getCrate(daqId);
+ int slot = EcalConditions.getSlot(daqId);
+ int channel = EcalConditions.getChannel(daqId);
+ int id = getSlotIndex(slot)+(crate-1)*14;
+ plots.get(id).fill(channel);
+ }
+ }
+ */
+ }
+
+
+
+ public int getSlotIndex(int slot){
+ int ret=-1;
+ for (int ii=0;ii<14;ii++){
+ if (slots[ii]==slot) ret=ii;
+ }
+ return ret;
+ }
+
+
+
+
+
}
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java 2014-03-25 02:59:38 UTC (rev 344)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java 2014-03-25 14:08:14 UTC (rev 345)
@@ -36,6 +36,18 @@
import org.hps.monitoring.ecal.util.CrystalListener;
import org.hps.monitoring.ecal.plots.EcalMonitoringUtils;
+/**
+ * The driver <code>EcalEvendDisplay</code> implements the histogram shown to the user
+ * in the fifth tab of the Monitoring Application, when using the Ecal monitoring lcsim file.
+ * IT ALSO OPENS KYLE's EVENT DISPLAY <code>PEventViewer</code>.
+ * The implementation is as follows:
+ * - The event display is opened in a separate window
+ * - It is updated regularly, according to the event refresh rate
+ * - If the user clicks on a crystal, the corresponding energy and time distributions (both Histogram1D) are shown in the last panel of the MonitoringApplicatopn
+ * The single channel plots are created in the <code>EcalHitPlots</code> driver.
+ * @author Andrea Celentano
+ * *
+ */
public class EcalEventDisplay extends Driver implements CrystalListener,ActionListener {
@@ -52,6 +64,7 @@
private PEventViewer viewer; //this is the Kyle event viewer.
IHistogram1D hEnergy,hEnergyDraw,hTime,hTimeDraw;
+ IHistogram2D hTimeVsEnergy,hTimeVsEnergyDraw;
public EcalEventDisplay() {
@@ -79,11 +92,12 @@
hEnergy = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Energy : " + (iy) + " "+ (ix)+ ": "+id);
hTime = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time : " + (iy) + " "+ (ix)+ ": "+id);
+ hTimeVsEnergy = aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time Vs Energy : " + (iy) + " "+ (ix)+ ": "+id);
hEnergyDraw=aida.histogram1D("hEnergy",hEnergy.axis().bins(),hEnergy.axis().lowerEdge(),hEnergy.axis().upperEdge());
hTimeDraw=aida.histogram1D("hTime",hTime.axis().bins(),hTime.axis().lowerEdge(),hTime.axis().upperEdge());
-
+ hTimeVsEnergyDraw=aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time Vs Energy : " + (iy) + " "+ (ix)+ ": "+id,hTimeVsEnergy.xAxis().bins(),hTimeVsEnergy.xAxis().lowerEdge(),hTimeVsEnergy.xAxis().upperEdge(),hTimeVsEnergy.yAxis().bins(),hTimeVsEnergy.yAxis().lowerEdge(),hTimeVsEnergy.yAxis().upperEdge());
@@ -98,6 +112,7 @@
plotter.createRegions(2,2);
plotter.region(0).plot(hEnergyDraw);
plotter.region(1).plot(hTimeDraw);
+ plotter.region(2).plot(hTimeVsEnergyDraw);
//plotter.region(1).plot();
//plotter.region(2).plot();
//plotter.region(3).plot();
@@ -174,6 +189,10 @@
hTimeDraw.setTitle(hTime.title());
hTimeDraw.add(hTime);
+ hTimeVsEnergy = aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time Vs Energy : " + (iy) + " "+ (ix)+ ": "+id);
+ hTimeVsEnergyDraw.reset();
+ hTimeVsEnergyDraw.setTitle(hTimeVsEnergy.title());
+ hTimeVsEnergyDraw.add(hTimeVsEnergy);
}
@@ -236,6 +255,12 @@
plotter.region(1).setTitle(hTime.title());
hTimeDraw.setTitle(hTime.title());
hTimeDraw.add(hTime);
+
+ hTimeVsEnergy = aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time Vs Energy : " + (iy) + " "+ (ix)+ ": "+id);
+ hTimeVsEnergyDraw.reset();
+ plotter.region(2).setTitle(hTimeVsEnergy.title());
+ hTimeVsEnergyDraw.setTitle(hTimeVsEnergy.title());
+ hTimeVsEnergyDraw.add(hTimeVsEnergy);
}
}
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java 2014-03-25 02:59:38 UTC (rev 344)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java 2014-03-25 14:08:14 UTC (rev 345)
@@ -30,12 +30,30 @@
import javax.swing.JPanel;
//import org.jfree.chart.ChartPanel;
+/**
+ * The driver <code>EcalHitPlots</code> implements the histogram shown to the user
+ * in the second tab of the Monitoring Application, when using the Ecal monitoring lcsim file.
+ * These histograms shows single-channels distributions:
+ * - First sub-tab shows the hits distribution* (Histogram2D), the occupancy* (Histogram2D), the number of hits per event (Histogram1D),
+ * the time distribution of the hits (Histogram1D)
+ * The first two histograms are defined in <code>EcalMonitoringPlots</code>.
+ * - Second sub-tab shows the energy distribution of the hits (Histogram1D), and the maximum energy in each event (Histogram1D)
+ * - Third sub-tab shows the time distribution of the first hit per event, for the Ecal top (Histogram1D), for the Ecal bottom (Histogram1D), for both for the Ecal top (Histogram1D).
+ *
+ * Histograms are updated continously, expect those marked with *, that are updated regularly depending on the event refresh rate configured in the <code> EcalMonitoringPlots </code> driver
+ *
+ * This driver also creates histogram with the energy distribution and the time distribution for each channel.
+ * These are not shown here, but are used in the <code>EcalEventDisplay</code> driver.
+ * However, it seemed to me this is the best place where to put them.
+ * @author Andrea Celentano
+ *
+ */
public class EcalHitPlots extends Driver implements Resettable{
//AIDAFrame plotterFrame;
String inputCollection = "EcalCalHits";
AIDA aida = AIDA.defaultInstance();
- IPlotter plotter, plotter2, plotter3, plotter4;
+ IPlotter plotter, plotter2, plotter3;
IHistogram1D hitCountPlot;
IHistogram1D hitTimePlot;
@@ -49,10 +67,10 @@
IHistogram2D occupancyPlot;
- //Plotter5
+
ArrayList<IHistogram1D> channelEnergyPlot;
ArrayList<IHistogram1D> channelTimePlot;
-
+ ArrayList<IHistogram2D> channelTimeVsEnergyPlot;
int eventn = 0;
int eventRefreshRate = 1;
@@ -80,17 +98,14 @@
@Override
protected void detectorChanged(Detector detector) {
-
- //plotterFrame = new AIDAFrame();
- // plotterFrame.setTitle("HPS ECal Hit Plots");
- System.out.println("Detector changed called: "+ detector.getClass().getName());
- aida.tree().cd("/");
+
+ System.out.println("Detector changed called: "+ detector.getClass().getName());
+ aida.tree().cd("/");
IPlotterFactory plotterFactory = aida.analysisFactory().createPlotterFactory("Ecal Hit Plots");
// Setup the plotter.
plotter = plotterFactory.create("Hit Counts");
plotter.setTitle("Hit Counts");
- // plotterFrame.addPlotter(plotter);
plotter.style().dataStyle().errorBarStyle().setVisible(false);
// Setup plots.
@@ -116,20 +131,23 @@
channelEnergyPlot=new ArrayList<IHistogram1D>();
channelTimePlot=new ArrayList<IHistogram1D>();
+ channelTimeVsEnergyPlot=new ArrayList<IHistogram2D>();
+ //create the histograms for single channel energy and time distribution.
+ //these are NOT shown in this plotter, but are used in the event display.
for(int id = 0; id < (47*11); id = id +1){
- int row=EcalMonitoringUtils.getRowFromHistoID(id);
- int column=EcalMonitoringUtils.getColumnFromHistoID(id);
- //create the histograms
- channelEnergyPlot.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Energy : " + (row) + " "+ (column)+ ": "+id, 1000, -0.1, maxEch));
- channelTimePlot.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time : " + (row) + " "+ (column)+ ": "+id, 100, 0, 400));
+ int row=EcalMonitoringUtils.getRowFromHistoID(id);
+ int column=EcalMonitoringUtils.getColumnFromHistoID(id);
+ channelEnergyPlot.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Energy : " + (row) + " "+ (column)+ ": "+id, 1000, -0.1, maxEch));
+ channelTimePlot.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time : " + (row) + " "+ (column)+ ": "+id, 100, 0, 400));
+ channelTimeVsEnergyPlot.add(aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time Vs Energy : " + (row) + " "+ (column)+ ": "+id, 100, 0, 400,100, -0.1, maxEch));
}
// Create the plotter regions.
- plotter.createRegions(2, 2);
- plotter.region(3).plot(hitCountPlot);
- plotter.region(1).plot(hitTimePlot);
+ plotter.createRegions(2,2);
plotter.region(0).plot(hitNumberPlot);
+ plotter.region(1).plot(hitTimePlot);
+ plotter.region(3).plot(hitCountPlot);
IPlotterStyle style = plotter.region(2).style();
style.setParameter("hist2DStyle", "colorMap");
style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
@@ -139,12 +157,8 @@
// Setup the plotter.
plotter2 = plotterFactory.create("Hit Energies");
plotter2.setTitle("Hit Energies");
- // plotter2.addMouseListener(this);
- // plotterFrame.addPlotter(plotter2);
plotter2.style().dataStyle().errorBarStyle().setVisible(false);
-
-// hitEnergyPlot.addMouseListener(this);
if (logScale) {
plotter2.style().yAxisStyle().setParameter("scale", "log");
@@ -153,24 +167,12 @@
// Create the plotter regions.
plotter2.createRegions(1, 2);
plotter2.region(0).plot(hitEnergyPlot);
- plotter2.region(1).plot(hitMaxEnergyPlot);
-
-
-
-
-
-
-
-
-
+ plotter2.region(1).plot(hitMaxEnergyPlot);
+
plotter3 = plotterFactory.create("Hit Times");
plotter3.setTitle("Hit Times");
- // plotterFrame.addPlotter(plotter3);
plotter3.style().dataStyle().errorBarStyle().setVisible(false);
- plotter3.createRegions(3, 3);
-
-
- // Create the plotter regions.
+ plotter3.createRegions(3, 3);
plotter3.region(0).plot(topTimePlot);
plotter3.region(1).plot(botTimePlot);
plotter3.region(2).plot(orTimePlot);
@@ -192,34 +194,18 @@
plotter3.region(i).style().zAxisStyle().setParameter("scale", "log");
}
}
-
- // plotter4 = plotterFactory.create("Edges");
- // plotter4.setTitle("Edges");
- // plotterFrame.addPlotter(plotter4);
- // plotter4.style().setParameter("hist2DStyle", "colorMap");
- // plotter4.style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- // plotter4.style().zAxisStyle().setParameter("scale", "log");
- // plotter4.createRegion();
-
- //
- // plotter4.region(0).plot(edgePlot);
-
if (!hide) {
- plotter.show();
- plotter2.show();
- plotter3.show();
- // plotter4.show();
- // plotter5.show(); Andrea: not yet.
+ plotter.show();
+ plotter2.show();
+ plotter3.show();
}
- //plotterFrame.setVisible(true);
- //plotterFrame.pack();
}
@Override
public void process(EventHeader event) {
-
-
+
+
int orTrigTime = -1;
int topTrigTime = -1;
int botTrigTime = -1;
@@ -282,14 +268,15 @@
hitEnergyPlot.fill(hit.getRawEnergy());
hitTimePlot.fill(hit.getTime());
+
-
column=hit.getIdentifierFieldValue("ix");
row=hit.getIdentifierFieldValue("iy");
if ((hit.getIdentifierFieldValue("ix")!=0)&&(hit.getIdentifierFieldValue("iy")!=0)){
- id = EcalMonitoringUtils.getHistoIDFromRowColumn(row,column);
- channelEnergyPlot.get(id).fill(hit.getCorrectedEnergy());
- channelTimePlot.get(id).fill(hit.getTime());
+ id = EcalMonitoringUtils.getHistoIDFromRowColumn(row,column);
+ channelEnergyPlot.get(id).fill(hit.getCorrectedEnergy());
+ channelTimePlot.get(id).fill(hit.getTime());
+ channelTimeVsEnergyPlot.get(id).fill(hit.getTime(),hit.getRawEnergy());
}
if (hit.getTime() < orTime) {
@@ -348,9 +335,9 @@
hitTimePlot.reset();
hitEnergyPlot.reset();
hitMaxEnergyPlot.reset();
- for(int id = 0; id < (47*11); id = id +1){
- channelEnergyPlot.get(id).reset();
- channelTimePlot.get(id).reset();
+ for(int id = 0; id < (47*11); id = id +1){
+ channelEnergyPlot.get(id).reset();
+ channelTimePlot.get(id).reset();
}
}
@@ -358,8 +345,6 @@
public void endOfData() {
//plotterFrame.dispose();
}
-
-
}
\ No newline at end of file
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringPlots.java 2014-03-25 02:59:38 UTC (rev 344)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringPlots.java 2014-03-25 14:08:14 UTC (rev 345)
@@ -21,6 +21,18 @@
import org.hps.monitoring.ecal.plots.EcalMonitoringUtils;
+/**
+ * The driver <code>EcalMonitoringPlots</code> implements the histogram shown to the user
+ * in the first tab of the Monitoring Application, when using the Ecal monitoring lcsim file.
+ * It contains only a sub-tab, with 3 histograms.
+ * - Hit counts by channel (Histogram2D), Occupancy by channel (Histogram2D), Cluster counts by channel (Histogram2D)
+ * Each cluster is associated with the seed crystal.
+ *
+ * These plots are updated regularly, according to the event refresh rate.
+ * @author Andrea Celentano
+ *
+ */
+
public class EcalMonitoringPlots extends Driver implements Resettable, Redrawable {
String inputCollection = "EcalReadoutHits";
@@ -53,6 +65,16 @@
public void setHide(boolean hide) {
this.hide = hide;
}
+
+ /**
+ * Set the refresh rate for histograms in this driver
+ * @param eventRefreshRate: the refresh rate, defined as number of events to accumulate before
+ * refreshing the plot
+ */
+ @Override
+ public void setEventRefreshRate(int eventRefreshRate) {
+ this.eventRefreshRate = eventRefreshRate;
+ }
protected void detectorChanged(Detector detector) {
System.out.println("EcalMonitoringPlots:: detector changed was called");
@@ -68,8 +90,8 @@
occupancyPlots=new ArrayList<IHistogram1D>();
for (int ii=0;ii<(11*47);ii++){
- int row=EcalMonitoringUtils.getRowFromHistoID(ii);
- int column=EcalMonitoringUtils.getColumnFromHistoID(ii);
+ int row=EcalMonitoringUtils.getRowFromHistoID(ii);
+ int column=EcalMonitoringUtils.getColumnFromHistoID(ii);
occupancyPlots.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Occupancy : " + (row) + " "+ (column)+ ": "+ii, 101,0,1));
}
@@ -98,15 +120,15 @@
}
public void process(EventHeader event) {
- int nhits=0;
- int chits[]=new int[11*47];
+ int nhits=0;
+ int chits[]=new int[11*47];
if (event.hasCollection(BaseRawCalorimeterHit.class, inputCollection)) {
List<BaseRawCalorimeterHit> hits = event.get(BaseRawCalorimeterHit.class, inputCollection);
for (BaseRawCalorimeterHit hit : hits) {
- int column=hit.getIdentifierFieldValue("ix");
- int row=hit.getIdentifierFieldValue("iy");
- int id=EcalMonitoringUtils.getHistoIDFromRowColumn(row, column);
- hitCountFillPlot.fill(column,row);
+ int column=hit.getIdentifierFieldValue("ix");
+ int row=hit.getIdentifierFieldValue("iy");
+ int id=EcalMonitoringUtils.getHistoIDFromRowColumn(row, column);
+ hitCountFillPlot.fill(column,row);
chits[id]++;
nhits++;
}
@@ -114,10 +136,10 @@
if (event.hasCollection(RawTrackerHit.class, inputCollection)) {
List<RawTrackerHit> hits = event.get(RawTrackerHit.class, inputCollection);
for (RawTrackerHit hit : hits) {
- int column=hit.getIdentifierFieldValue("ix");
- int row=hit.getIdentifierFieldValue("iy");
- int id=EcalMonitoringUtils.getHistoIDFromRowColumn(row, column);
- hitCountFillPlot.fill(column,row);
+ int column=hit.getIdentifierFieldValue("ix");
+ int row=hit.getIdentifierFieldValue("iy");
+ int id=EcalMonitoringUtils.getHistoIDFromRowColumn(row, column);
+ hitCountFillPlot.fill(column,row);
chits[id]++;
nhits++;
}
@@ -125,10 +147,10 @@
if (event.hasCollection(CalorimeterHit.class, inputCollection)) {
List<CalorimeterHit> hits = event.get(CalorimeterHit.class, inputCollection);
for (CalorimeterHit hit : hits) {
- int column=hit.getIdentifierFieldValue("ix");
- int row=hit.getIdentifierFieldValue("iy");
- int id=EcalMonitoringUtils.getHistoIDFromRowColumn(row, column);
- hitCountFillPlot.fill(column,row);
+ int column=hit.getIdentifierFieldValue("ix");
+ int row=hit.getIdentifierFieldValue("iy");
+ int id=EcalMonitoringUtils.getHistoIDFromRowColumn(row, column);
+ hitCountFillPlot.fill(column,row);
chits[id]++;
nhits++;
}
@@ -137,16 +159,15 @@
- if (nhits>0) {
+ if (nhits>0) {
for (int ii=0;ii<(11*47);ii++){
- occupancyPlots.get(ii).fill(chits[ii]*1./(nhits ));
- }
- }
+ occupancyPlots.get(ii).fill(chits[ii]*1./(nhits ));
+ }
+ }
if (event.hasCollection(HPSEcalCluster.class, clusterCollection)) {
- List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollection);
-//if (clusters.size()>1)
+ List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, clusterCollection);
for (HPSEcalCluster cluster : clusters) {
clusterCountFillPlot.fill(cluster.getSeedHit().getIdentifierFieldValue("ix"), cluster.getSeedHit().getIdentifierFieldValue("iy"));
}
@@ -170,7 +191,7 @@
occupancyDrawPlot.reset();
for (int id=0;id<(47*11);id++){
- occupancyPlots.get(id).reset();
+ occupancyPlots.get(id).reset();
}
}
@@ -182,17 +203,14 @@
clusterCountDrawPlot.add(clusterCountFillPlot);
occupancyDrawPlot.reset();
for (int id=0;id<(47*11);id++){
- int row=EcalMonitoringUtils.getRowFromHistoID(id);
- int column=EcalMonitoringUtils.getColumnFromHistoID(id);
- double mean=occupancyPlots.get(id).mean();
- if ((row!=0)&&(column!=0)&&(!EcalMonitoringUtils.isInHole(row, column))) occupancyDrawPlot.fill(column,row,mean);
- }
- }
+ int row=EcalMonitoringUtils.getRowFromHistoID(id);
+ int column=EcalMonitoringUtils.getColumnFromHistoID(id);
+ double mean=occupancyPlots.get(id).mean();
+ if ((row!=0)&&(column!=0)&&(!EcalMonitoringUtils.isInHole(row, column))) occupancyDrawPlot.fill(column,row,mean);
+ }
+ }
- @Override
- public void setEventRefreshRate(int eventRefreshRate) {
- this.eventRefreshRate = eventRefreshRate;
- }
+
private IHistogram2D makeCopy(IHistogram2D hist) {
return aida.histogram2D(hist.title() + "_copy", hist.xAxis().bins(), hist.xAxis().lowerEdge(), hist.xAxis().upperEdge(), hist.yAxis().bins(), hist.yAxis().lowerEdge(), hist.yAxis().upperEdge());
SVNspam 0.1