Print

Print


Author: [log in to unmask]
Date: Fri Mar  6 22:42:52 2015
New Revision: 2330

Log:
Add map of channel to crystal.

Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java	Fri Mar  6 22:42:52 2015
@@ -10,13 +10,14 @@
 
 /**
  * This is a convenience utility for associating the geometric crystal
- * objects with the conditions system channel information.  
+ * objects with the conditions system channel information and vice versa.  
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
 final class EcalCrystalChannelMap {
     
     Map<EcalCrystal, EcalChannel> crystalMap = new HashMap<EcalCrystal, EcalChannel>();
+    Map<EcalChannel, EcalCrystal> channelMap = new HashMap<EcalChannel, EcalCrystal>();
     
     /**
      * Creates the map between crystals and channels.
@@ -24,13 +25,23 @@
      * @param channels The list of channels.
      */
     EcalCrystalChannelMap(HPSEcalAPI api, EcalChannelCollection channels) {
-        List<EcalCrystal> crystals = api.getCrystals();        
-        for (EcalCrystal crystal : crystals) {
+                        
+        // Map crystals to channels.
+        for (EcalCrystal crystal : api.getCrystals()) {
             EcalChannel channel = channels.findGeometric(crystal.getIdentifier().getValue());
             if (channel == null) {
                 throw new RuntimeException("ECAL channel was not found for ID: " + crystal.getExpandedIdentifier());
             }
             crystalMap.put(crystal, channel);
+        }
+        
+        // Map channels to crystals.
+        for (EcalChannel channel : channels) {
+            EcalCrystal crystal = api.getCrystal(channel.getX(), channel.getY());
+            if (crystal == null) {
+                throw new RuntimeException("ECAl crystal was not found for channel X Y: " + channel.getX() + " " + channel.getY());
+            }
+            channelMap.put(channel, crystal);
         }
     }
     
@@ -42,4 +53,13 @@
     EcalChannel getEcalChannel(EcalCrystal crystal) {
         return crystalMap.get(crystal);
     }    
+    
+    /**
+     * Get a channel from a crystal.
+     * @param crystal The geometry object.
+     * @return The channel information or null if does not exist.
+     */
+    EcalCrystal getEcalCrystal(EcalChannel channel) {
+        return channelMap.get(channel);
+    } 
 }