Print

Print


Author: [log in to unmask]
Date: Fri Jan  9 16:16:37 2015
New Revision: 1911

Log:
Move monitoring specific utility methods to monitoring-drivers module from ecal-recon.

Added:
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringUtilities.java
Modified:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringPlots.java
    java/trunk/users/pom.xml
    java/trunk/users/src/main/java/org/hps/users/celentan/EcalChannelsAmplitude.java
    java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java	Fri Jan  9 16:16:37 2015
@@ -75,66 +75,41 @@
             }
         }
     }
-    
-    /*These methods have been added by A. Celentano: they're mostly used in the monitoring drivers related to Ecal:
-     * however, instead of keeping them in a class "EcalMonitoringUtils", it seems better to have them here.
+
+    /**
+     * This is a very basic method that, given an array with the raw-waveform (in FADC units), returns the amplitude (in mV)
+     * @param data Array with data from FADC, in fadc units
+     * @param lenght The array lenght
+     * @param pedestalSamples How many samples at the beginning of the array to use for the pedestal. Must be < lenght
+     * @return double[], 0 is the amplitude in mV, 1 is the offest in ADC counts, 2 is the RMS in adc counts
      */
-    public static int getRowFromHistoID(int id){
-        return (5-(id%11));
+    public static double[] computeAmplitude(short [] data, int lenght, int pedestalSamples){
+        double amplitude,pedestal,noise;
+        pedestal=0;
+        noise=0;
+        amplitude=data[0];
+        double[] ret={0.,0.,0.};
+        if (pedestalSamples>lenght){
+            return ret;
+        }
+        for (int jj = 0; jj < lenght; jj++){
+            if (jj<pedestalSamples){
+                pedestal+=data[jj];
+                noise+=data[jj]*data[jj];
+            }
+            if (data[jj]>amplitude) amplitude=data[jj];
+        }
+        pedestal/=pedestalSamples;
+        noise/=pedestalSamples;
+        noise=Math.sqrt(noise-pedestal*pedestal);
+        amplitude-=pedestal;
+
+        amplitude*=adcResolution*1000;
+        ret[0]=amplitude;
+        ret[1]=pedestal;
+        ret[2]=noise;
+        return ret;
+
     }
 
-    public static int getColumnFromHistoID(int id){
-        return ((id/11)-23);
-    }
-    
-    public static int getHistoIDFromRowColumn(int row,int column){
-        return (-row+5)+11*(column+23);
-    }
-    
-    public static Boolean isInHole(int row,int column){
-        Boolean ret;
-        ret=false;
-        if ((row==1)||(row==-1)){
-                if ((column<=-2)&&(column>=-10)) ret=true;
-        }
-        return ret;
-    }
-    
-
-    /**
-    * This is a very basic method that, given an array with the raw-waveform (in FADC units), returns the amplitude (in mV)
-    * @param data Array with data from FADC, in fadc units
-    * @param lenght The array lenght
-    * @param pedestalSamples How many samples at the beginning of the array to use for the pedestal. Must be < lenght
-    * @return double[], 0 is the amplitude in mV, 1 is the offest in ADC counts, 2 is the RMS in adc counts
-    */
-   public static double[] computeAmplitude(short [] data, int lenght, int pedestalSamples){
-   	double amplitude,pedestal,noise;
-   	pedestal=0;
-   	noise=0;
-   	amplitude=data[0];
-   	double[] ret={0.,0.,0.};
-   	if (pedestalSamples>lenght){
-   		return ret;
-   	}
-   	for (int jj = 0; jj < lenght; jj++){
-   		if (jj<pedestalSamples){
-   			pedestal+=data[jj];
-   			noise+=data[jj]*data[jj];
-   		}
-   		if (data[jj]>amplitude) amplitude=data[jj];
-   	}
-   	pedestal/=pedestalSamples;
-   	noise/=pedestalSamples;
-   	noise=Math.sqrt(noise-pedestal*pedestal);
-   	amplitude-=pedestal;
-   
-   	amplitude*=adcResolution*1000;
-   	ret[0]=amplitude;
-   	ret[1]=pedestal;
-   	ret[2]=noise;
-   	return ret;
-   	
-   }
-    
 }

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java	Fri Jan  9 16:16:37 2015
@@ -169,8 +169,8 @@
 			// for possibly different raw waveform dimensions!
 			
 			//Get the x and y indices for the current channel.
-			int row = ECalUtils.getRowFromHistoID(ii);
-			int column = ECalUtils.getColumnFromHistoID(ii);
+			int row = EcalMonitoringUtilities.getRowFromHistoID(ii);
+			int column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
 			
 			// Initialize the histograms for the current crystal channel.
 			channelEnergyPlot.add(aida.histogram1D(detector.getDetectorName() + " : "
@@ -311,7 +311,7 @@
 				
 				if (iy != 0 && ix != 0) {
 					// Get the histogram index for the hit.
-					int id = ECalUtils.getHistoIDFromRowColumn(iy, ix);
+					int id = EcalMonitoringUtilities.getHistoIDFromRowColumn(iy, ix);
 					
 					// If the hit has energy, populate the plots.
 					if(hit.getCorrectedEnergy() > 0) {
@@ -340,7 +340,7 @@
 				int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
 				
 				// Get the histogram index for the hit.
-				int id = ECalUtils.getHistoIDFromRowColumn(iy, ix);
+				int id = EcalMonitoringUtilities.getHistoIDFromRowColumn(iy, ix);
 				
 				// Add the cluster energy to the plot.
 				if(cluster.getEnergy() > 0.0) {
@@ -429,9 +429,9 @@
 		
 		// Make sure that the clicked crystal is valid. Necessary??
 		if((ecalPoint.x != 0) && (ecalPoint.y != 0))
-			if (!ECalUtils.isInHole(ecalPoint.y, ecalPoint.x)) {
+			if (!EcalMonitoringUtilities.isInHole(ecalPoint.y, ecalPoint.x)) {
 				// Get the crystal ID.
-				int id = ECalUtils.getHistoIDFromRowColumn(ecalPoint.y, ecalPoint.x);
+				int id = EcalMonitoringUtilities.getHistoIDFromRowColumn(ecalPoint.y, ecalPoint.x);
 				
 				// Clear and replot region 0 for the new crystal.
 				plotter.region(0).clear();

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringPlots.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringPlots.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringPlots.java	Fri Jan  9 16:16:37 2015
@@ -92,8 +92,8 @@
       
         NoccupancyFill=1; //to avoid a "NaN" at beginning
         for (int ii = 0; ii < (11 * 47); ii++) {
-            int row = ECalUtils.getRowFromHistoID(ii);
-            int column = ECalUtils.getColumnFromHistoID(ii);
+            int row = EcalMonitoringUtilities.getRowFromHistoID(ii);
+            int column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
             occupancyFill[ii]=0;
         }
 
@@ -145,7 +145,7 @@
             for (CalorimeterHit hit : hits) {
                 int column = hit.getIdentifierFieldValue("ix");
                 int row = hit.getIdentifierFieldValue("iy");
-                int id = ECalUtils.getHistoIDFromRowColumn(row, column);
+                int id = EcalMonitoringUtilities.getHistoIDFromRowColumn(row, column);
                 hitCountFillPlot.fill(column, row);
                 {
                  chits[id]++;
@@ -202,12 +202,12 @@
         
         occupancyDrawPlot.reset();
         for (int id = 0; id < (47 * 11); id++) {
-            int row = ECalUtils.getRowFromHistoID(id);
-            int column = ECalUtils.getColumnFromHistoID(id);
+            int row = EcalMonitoringUtilities.getRowFromHistoID(id);
+            int column = EcalMonitoringUtilities.getColumnFromHistoID(id);
             double mean = occupancyFill[id]/NoccupancyFill;
             
             occupancyFill[id]=0;
-            if ((row != 0) && (column != 0) && (!ECalUtils.isInHole(row, column)))
+            if ((row != 0) && (column != 0) && (!EcalMonitoringUtilities.isInHole(row, column)))
                 occupancyDrawPlot.fill(column, row, mean);
         }
         plotter.region(2).clear();

Added: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringUtilities.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringUtilities.java	(added)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringUtilities.java	Fri Jan  9 16:16:37 2015
@@ -0,0 +1,35 @@
+package org.hps.monitoring.ecal.plots;
+
+/**
+ * Some simple utility methods for organizing ECAL monitoring plots.
+ * 
+ * @author Jeremy McCormick <[log in to unmask]>
+ * @author Andrea Celentano <[log in to unmask]>
+ */
+public final class EcalMonitoringUtilities {
+
+    private EcalMonitoringUtilities() {        
+    }
+    
+    public static int getRowFromHistoID(int id) {
+        return (5 - (id % 11));
+    }
+
+    public static int getColumnFromHistoID(int id) {
+        return ((id / 11) - 23);
+    }
+
+    public static int getHistoIDFromRowColumn(int row, int column) {
+        return (-row + 5) + 11 * (column + 23);
+    }
+
+    public static Boolean isInHole(int row, int column) {
+        Boolean ret;
+        ret = false;
+        if ((row == 1) || (row == -1)) {
+            if ((column <= -2) && (column >= -10))
+                ret = true;
+        }
+        return ret;
+    }
+}

Modified: java/trunk/users/pom.xml
 =============================================================================
--- java/trunk/users/pom.xml	(original)
+++ java/trunk/users/pom.xml	Fri Jan  9 16:16:37 2015
@@ -23,6 +23,10 @@
             <groupId>org.hps</groupId>
             <artifactId>hps-record-util</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.hps</groupId>
+            <artifactId>hps-monitoring-drivers</artifactId>
+        </dependency>
     </dependencies>
     <build>
         <plugins>

Modified: java/trunk/users/src/main/java/org/hps/users/celentan/EcalChannelsAmplitude.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/celentan/EcalChannelsAmplitude.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/celentan/EcalChannelsAmplitude.java	Fri Jan  9 16:16:37 2015
@@ -1,28 +1,12 @@
 package org.hps.users.celentan;
 
 import hep.aida.IHistogram1D;
-import hep.aida.IHistogram2D;
-import hep.aida.ICloud1D;
-import hep.aida.ICloud2D;
-import hep.aida.IPlotter;
-import hep.aida.IPlotterFactory;
-import hep.aida.IPlotterStyle;
 
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.util.ArrayList;
 import java.util.List;
-import java.lang.System;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.IOException;
 
+import org.hps.monitoring.ecal.plots.EcalMonitoringUtilities;
 import org.hps.recon.ecal.ECalUtils;
-import org.hps.recon.ecal.HPSEcalCluster;
-import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.RawTrackerHit;
 import org.lcsim.geometry.Detector;
@@ -30,158 +14,122 @@
 import org.lcsim.util.aida.AIDA;
 
 /**
- *  The driver <code>EcalChannelAmplitude</code> implements the histogram shown to the user 
- * in the fifth tab of the Monitoring Application, when using the Ecal monitoring lcsim file.
- * 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 MonitoringApplication,
- * as well as a 2D histogram (hit time vs hit energy). Finally, if available, the raw waveshape (in mV) is displayed.
+ * The driver <code>EcalChannelAmplitude</code> implements the histogram shown to the user in the 
+ * fifth tab of the Monitoring Application, when using the Ecal monitoring lcsim file. 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 MonitoringApplication, as well 
+ * as a 2D histogram (hit time vs hit energy). Finally, if available, the raw waveshape (in mV) is
+ * displayed.
  * 
- * @author Andrea Celentano
- *  *
+ * @author Andrea Celentano 
+ *
  */
+public class EcalChannelsAmplitude extends Driver {
 
-public class EcalChannelsAmplitude extends Driver{
-
-  
     String inputCollection = "EcalCalHits";
     String inputCollectionRaw = "EcalReadoutHits";
     String clusterCollection = "EcalClusters";
 
-    private AIDA aida=AIDA.defaultInstance();
+    private AIDA aida = AIDA.defaultInstance();
     private Detector detector;
-  
-  
+
     int eventn = 0;
-	int ix,iy,id;
-	int pedSamples=10;
-	
-	double amp,ped,sigma;
-	double hitE;
-    int[] windowRaw=new int[47*11];//in case we have the raw waveform, this is the window lenght (in samples)
-	boolean[] isFirstRaw=new boolean[47*11];
-	
-	
-	boolean enableAllFadc=false; 
-   
+    int ix, iy, id;
+    int pedSamples = 10;
 
-    
+    double amp, ped, sigma;
+    double hitE;
+    int[] windowRaw = new int[47 * 11];// in case we have the raw waveform, this is the window lenght (in samples)
+    boolean[] isFirstRaw = new boolean[47 * 11];
+
+    boolean enableAllFadc = false;
+
     ArrayList<IHistogram1D> channelAmplitudePlot;
     ArrayList<IHistogram1D> channelRawWaveform;
-   
-   
-    
-    
-    
-    int itmpx,itmpy;
-    
-    public  EcalChannelsAmplitude() {
-    	
+
+    int itmpx, itmpy;
+
+    public EcalChannelsAmplitude() {
+
     }
 
-   
     public void setPedSamples(int pedSamples) {
         this.pedSamples = pedSamples;
     }
-    
+
     public void setInputCollection(String inputCollection) {
         this.inputCollection = inputCollection;
     }
-    
+
     public void setInputCollectionRaw(String inputCollectionRaw) {
         this.inputCollectionRaw = inputCollectionRaw;
     }
-    
+
     public void setInputClusterCollection(String inputClusterCollection) {
         this.clusterCollection = inputClusterCollection;
     }
-    
- 
-    
+
     @Override
     public void detectorChanged(Detector detector) {
-    	System.out.println("Ecal event display detector changed");
+        System.out.println("Ecal event display detector changed");
         this.detector = detector;
-    	
-    	aida.tree().cd("/");
-    	
-      
-    	
-       channelAmplitudePlot=new ArrayList<IHistogram1D>();
-       channelRawWaveform=new ArrayList<IHistogram1D>();
-       //create the histograms for single channel energy and time distribution.
-       for(int ii = 0; ii < (47*11); ii = ii +1){
-             int row=ECalUtils.getRowFromHistoID(ii);
-             int column=ECalUtils.getColumnFromHistoID(ii);      
-             channelAmplitudePlot.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Amplitude : " + (column) + " "+ (row)+ ": "+ii, 100, -.2, 2100.));           
-             channelRawWaveform.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Amplitude : " + (column) + " "+ (row)+ ": "+ii));
-             //the above instruction is a terrible hack, just to fill the arrayList with all the elements. They'll be initialized properly during the event readout,
-             //since we want to account for possibly different raw waveform dimensions!
-         
-             
-             isFirstRaw[ii]=true;
-             windowRaw[ii]=1;
-       }
-       id=0;
-       iy=ECalUtils.getRowFromHistoID(id);
-   	   ix=ECalUtils.getColumnFromHistoID(id);        
+
+        aida.tree().cd("/");
+
+        channelAmplitudePlot = new ArrayList<IHistogram1D>();
+        channelRawWaveform = new ArrayList<IHistogram1D>();
+        // create the histograms for single channel energy and time distribution.
+        for (int ii = 0; ii < (47 * 11); ii = ii + 1) {
+            int row = EcalMonitoringUtilities.getRowFromHistoID(ii);
+            int column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
+            channelAmplitudePlot.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Amplitude : " + (column) + " " + (row) + ": " + ii, 100, -.2, 2100.));
+            channelRawWaveform.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Amplitude : " + (column) + " " + (row) + ": " + ii));
+            // the above instruction is a terrible hack, just to fill the arrayList with all the elements. They'll be initialized properly during the event readout,
+            // since we want to account for possibly different raw waveform dimensions!
+
+            isFirstRaw[ii] = true;
+            windowRaw[ii] = 1;
+        }
+        id = 0;
+        iy = EcalMonitoringUtilities.getRowFromHistoID(id);
+        ix = EcalMonitoringUtilities.getColumnFromHistoID(id);
     }
 
     @Override
     public void endOfData() {
-     System.out.println("END OF DATA");
+        System.out.println("END OF DATA");
     }
 
     @Override
-    public void process(EventHeader event){
-    	
-    	  int ii;
-          int row = 0;
-          int column = 0;
-          double[] result;
-          
-           	
-     if (event.hasCollection(RawTrackerHit.class, inputCollectionRaw)){       	
-        	List<RawTrackerHit> hits = event.get(RawTrackerHit.class, inputCollectionRaw);
-        	for (RawTrackerHit hit : hits) {
-                row=hit.getIdentifierFieldValue("iy");
-                column=hit.getIdentifierFieldValue("ix");        
-                ii = ECalUtils.getHistoIDFromRowColumn(row,column);             
-                if ((row!=0)&&(column!=0)&&(!(ECalUtils.isInHole(row,column)))){
-                	if (isFirstRaw[ii]){ //at the very first hit we read for this channel, we need to read the window length and save it
-           			 isFirstRaw[ii]=false;
-           			 windowRaw[ii]=hit.getADCValues().length;                   	 
-           			 channelRawWaveform.set(ii,aida.histogram1D(detector.getDetectorName() + " : " + inputCollectionRaw + " : Raw Waveform : " + (column) + " "+ (row)+ ": "+ii,windowRaw[ii],-0.5*ECalUtils.ecalReadoutPeriod,(-0.5+windowRaw[ii])*ECalUtils.ecalReadoutPeriod));
-           		 }                       
-                 result=ECalUtils.computeAmplitude(hit.getADCValues(),windowRaw[ii],pedSamples);
-                 channelAmplitudePlot.get(ii).fill(result[0]);                                    
-                 } 
+    public void process(EventHeader event) {
+
+        int ii;
+        int row = 0;
+        int column = 0;
+        double[] result;
+
+        if (event.hasCollection(RawTrackerHit.class, inputCollectionRaw)) {
+            List<RawTrackerHit> hits = event.get(RawTrackerHit.class, inputCollectionRaw);
+            for (RawTrackerHit hit : hits) {
+                row = hit.getIdentifierFieldValue("iy");
+                column = hit.getIdentifierFieldValue("ix");
+                ii = EcalMonitoringUtilities.getHistoIDFromRowColumn(row, column);
+                if ((row != 0) && (column != 0) && (!(EcalMonitoringUtilities.isInHole(row, column)))) {
+                    if (isFirstRaw[ii]) { // at the very first hit we read for this channel, we need to read the window length and save it
+                        isFirstRaw[ii] = false;
+                        windowRaw[ii] = hit.getADCValues().length;
+                        channelRawWaveform.set(ii, aida.histogram1D(detector.getDetectorName() + " : " + inputCollectionRaw + " : Raw Waveform : " + (column) + " " + (row) + ": " + ii, windowRaw[ii], -0.5 * ECalUtils.ecalReadoutPeriod, (-0.5 + windowRaw[ii]) * ECalUtils.ecalReadoutPeriod));
+                    }
+                    result = ECalUtils.computeAmplitude(hit.getADCValues(), windowRaw[ii], pedSamples);
+                    channelAmplitudePlot.get(ii).fill(result[0]);
+                }
             }
-        }        
-     
+        }
+
     }
-    
+
     /*
-    @Override
-    public void reset(){
-        for(int ii = 0; ii < (47*11); ii = ii +1){         
-            channelEnergyPlot.get(ii).reset();
-            channelTimePlot.get(ii).reset();
-            channelTimeVsEnergyPlot.get(ii).reset();
-        }
-    }
-    */
-    
-    
-	
-	
-    
-    
+     * @Override public void reset(){ for(int ii = 0; ii < (47*11); ii = ii +1){ channelEnergyPlot.get(ii).reset(); channelTimePlot.get(ii).reset(); channelTimeVsEnergyPlot.get(ii).reset(); } }
+     */
 }
-
-
-
-
-
-

Modified: java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java	Fri Jan  9 16:16:37 2015
@@ -15,6 +15,7 @@
 import org.lcsim.event.RawTrackerHit;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
+import org.hps.monitoring.ecal.plots.EcalMonitoringUtilities;
 
 public class RawPedestalComputator extends Driver {
 
@@ -59,9 +60,9 @@
             for (RawTrackerHit hit : hits) {
                 row = hit.getIdentifierFieldValue("iy");
                 column = hit.getIdentifierFieldValue("ix");
-                ii = ECalUtils.getHistoIDFromRowColumn(row, column);
+                ii = EcalMonitoringUtilities.getHistoIDFromRowColumn(row, column);
                 if ((row != 0) && (column != 0)) {
-                    if (!ECalUtils.isInHole(row, column)) {
+                    if (!EcalMonitoringUtilities.isInHole(row, column)) {
                         if (isFirstRaw[ii]) { // at the very first hit we read for this channel, we need to read the window length and save it
                             isFirstRaw[ii] = false;
                             windowRaw[ii] = hit.getADCValues().length;
@@ -84,9 +85,9 @@
 
             for (int ii = 0; ii < 11 * 47; ii++) {
                 int row, column;
-                row = ECalUtils.getRowFromHistoID(ii);
-                column = ECalUtils.getColumnFromHistoID(ii);
-                if (ECalUtils.isInHole(row, column))
+                row = EcalMonitoringUtilities.getRowFromHistoID(ii);
+                column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
+                if (EcalMonitoringUtilities.isInHole(row, column))
                     continue;
                 if ((row == 0) || (column == 0))
                     continue;