Print

Print


Author: mccaky
Date: Wed Dec 10 14:38:26 2014
New Revision: 1678

Log:
Added a database check utility.

Added:
    java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/DatabaseCheck.java

Added: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/DatabaseCheck.java
 =============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/DatabaseCheck.java	(added)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/DatabaseCheck.java	Wed Dec 10 14:38:26 2014
@@ -0,0 +1,123 @@
+package org.hps.monitoring.ecal.eventdisplay.util;
+
+import java.awt.Point;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.hps.conditions.database.DatabaseConditionsManager;
+import org.hps.conditions.database.TableConstants;
+import org.hps.conditions.ecal.EcalChannel;
+import org.hps.conditions.ecal.EcalChannel.EcalChannelCollection;
+import org.hps.conditions.ecal.EcalLed;
+import org.hps.conditions.ecal.EcalLed.EcalLedCollection;
+import org.hps.conditions.ecal.EcalConditions;
+import org.lcsim.conditions.ConditionsManager;
+import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
+
+public class DatabaseCheck {
+	private static final Set<Integer> idFailSet = new HashSet<Integer>();
+	private static final Set<Point> pointFailSet = new HashSet<Point>();
+	
+	public static void main(String[] args) throws ConditionsNotFoundException, IOException {
+		// Check that an appropriate file has been given.
+		String filepath = null;
+		if(args.length == 1) {
+			filepath = args[0];
+		}
+		
+		// If no file path was defined, throw an error.
+		if(filepath == null) {
+			throw new FileNotFoundException("No CSV mapping file defined.");
+		}
+		
+		// Initialize the local database.
+		EcalWiringManager manager = new EcalWiringManager(filepath);
+		
+		// Initialize the database.
+		DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+		conditionsManager.setDetector("HPS-Proposal2014-v7-2pt2", 2000);
+		
+		// Get ECAL conditions.
+		EcalConditions ecalConditions = ConditionsManager.defaultInstance().getCachedConditions(EcalConditions.class, TableConstants.ECAL_CONDITIONS).getCachedData();
+		 
+		// Get the list of EcalChannel objects.
+		EcalChannelCollection channels = ecalConditions.getChannelCollection();
+		EcalLedCollection leds = conditionsManager.getConditionsData(EcalLedCollection.class, TableConstants.ECAL_LEDS);
+		
+		// Map the LED objects to their channels.
+		Map<Integer, EcalLed> ledMap = new HashMap<Integer, EcalLed>();
+        for (EcalLed led : leds) {
+        	ledMap.put(led.getEcalChannelId(), led);
+        }
+		
+		// Perform the comparison test.
+		for(EcalChannel channel : channels) {
+			// Get the crystal point information.
+			Point crystal = new Point(channel.getX(), channel.getY());
+			
+			// Get the data from manager.
+			CrystalDataSet data = manager.getCrystalData(crystal);
+			
+			// Get the appropriate LED collection.
+			EcalLed led = ledMap.get(channel.getChannelId());
+			
+			// Perform the comparison.
+			System.out.printf("Checking Mappings for Crystal (%3d, %3d):%n", crystal.x, crystal.y);
+			System.out.printf("\tChannel ID      :: %d%n", channel.getChannelId());
+			
+			System.out.printf("\tChannel     [ %3d ] vs [ %3d ] ... ", channel.getChannel(), data.getFADCChannel());
+			if(channel.getChannel() == data.getFADCChannel()) {
+				System.out.printf("[ Success ]%n");
+			} else {
+				System.out.printf("[ Failure ]%n");
+				idFailSet.add(channel.getChannelId());
+				pointFailSet.add(crystal);
+			}
+			
+			int crate = data.getMotherboard().isTop() ? 1 : 2;
+			System.out.printf("\tCrate       [ %3d ] vs [ %3d ] ... ", channel.getCrate(), crate);
+			if(channel.getCrate() == crate) {
+				System.out.printf("[ Success ]%n");
+			} else {
+				System.out.printf("[ Failure ]%n");
+				idFailSet.add(channel.getChannelId());
+				pointFailSet.add(crystal);
+			}
+			
+			System.out.printf("\tSlot        [ %3d ] vs [ %3d ] ... ", channel.getSlot(), data.getFADCSlot());
+			if(channel.getSlot() == data.getFADCSlot()) {
+				System.out.printf("[ Success ]%n");
+			} else {
+				System.out.printf("[ Failure ]%n");
+				idFailSet.add(channel.getChannelId());
+				pointFailSet.add(crystal);
+			}
+			
+			System.out.printf("\tLED Channel [ %3d ] vs [ %3d ] ... ", led.getLedNumber(), data.getLEDChannel());
+			if(led.getLedNumber() == data.getLEDChannel()) {
+				System.out.printf("[ Success ]%n");
+			} else {
+				System.out.printf("[ Failure ]%n");
+				idFailSet.add(channel.getChannelId());
+				pointFailSet.add(crystal);
+			}
+			
+			System.out.println();
+			System.out.println();
+		}
+		
+		// Print out the failing crystals.
+		System.out.println("Crystals that Failed:");
+		for(Point fail : pointFailSet) {
+			System.out.printf("\tCrystal (%3d, %3d)%n", fail.x, fail.y);
+		}
+		if(pointFailSet.isEmpty()) {
+			System.out.println("\tNone!");
+		}
+	}
+	
+}