Print

Print


Author: [log in to unmask]
Date: Wed Feb 25 15:00:53 2015
New Revision: 2207

Log:
Fix problem where EcalChannelCollection would sometimes not be fully intialized.

Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannel.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditions.java

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	Wed Feb 25 15:00:53 2015
@@ -38,6 +38,8 @@
 import org.lcsim.conditions.ConditionsManager;
 import org.lcsim.conditions.ConditionsManagerImplementation;
 import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.Subdetector;
+import org.lcsim.util.log.DefaultLogFormatter;
 import org.lcsim.util.log.LogUtil;
 import org.lcsim.util.loop.DetectorConditionsConverter;
 
@@ -59,11 +61,8 @@
 @SuppressWarnings("rawtypes")
 public class DatabaseConditionsManager extends ConditionsManagerImplementation {
 
-    protected static Logger logger = LogUtil.create(DatabaseConditionsManager.class);
-    static {
-        logger.setLevel(Level.FINE);
-        logger.getHandlers()[0].setLevel(Level.FINE);
-    }
+    // Initialize logger.
+    protected static Logger logger = LogUtil.create(DatabaseConditionsManager.class.getName(), new DefaultLogFormatter(), Level.FINER);
 
     // Registry of conditions converters.
     protected ConverterRegistry converters = ConverterRegistry.create();
@@ -142,6 +141,17 @@
     }
     
     /**
+     * Set the log level.
+     * @param level The log level.
+     */
+    public void setLogLevel(Level level) {        
+        logger.config("setting log level to " + level);
+        logger.setLevel(level);
+        logger.getHandlers()[0].setLevel(level);
+        svtSetup.setLogLevel(level);
+    }
+    
+    /**
      * Get the static instance of this class.
      * @return The static instance of the manager.
      */
@@ -149,11 +159,11 @@
 
         // Is there no manager installed yet?
         if (!ConditionsManager.isSetup()) {
-            // Perform default setup if necessary.
+            // Create a new instance if necessary.
             new DatabaseConditionsManager();
         }
 
-        // Get the instance of the manager from the conditions system and check that the type is valid.
+        // Get the instance back from the default conditions system and check that the type is correct.
         ConditionsManager manager = ConditionsManager.defaultInstance();
         if (!(manager instanceof DatabaseConditionsManager)) {
             throw new RuntimeException("The default ConditionsManager has the wrong type.");
@@ -272,6 +282,17 @@
         CollectionType conditionsCollection = getCachedConditions(type, tableName).getCachedData();
         return conditionsCollection;
     }
+    
+    /**
+     * Get conditions data by class and name.
+     * @param type The class of the conditions.
+     * @param name The name of the conditions set.
+     * @return The conditions or null if does not exist.
+     */
+    public <T> T getConditionsData(Class<T> type, String name) {
+        logger.info("getting conditions " + name + " of type " + type.getSimpleName());
+        return getCachedConditions(type, name).getCachedData();
+    }
 
     /**
      * This method handles changes to the detector name and run number.
@@ -324,7 +345,6 @@
         // Is not configured yet?
         if (!isConfigured) {
             if (isTestRun(runNumber)) {
-                logger.config("using Test Run configuration");
                 // This looks like the Test Run so use the custom configuration for it.
                 setXmlConfig(DatabaseConditionsManager.TEST_RUN_CONFIG);
             } else if (runNumber > TEST_RUN_MAX_RUN) {
@@ -336,14 +356,16 @@
             }
         }
 
+        // Register the converters for this initialization.
         registerConverters();
     
+        // Enable or disable the setup of the SVT detector.
         svtSetup.setEnabled(setupSvtDetector);
 
         // Open the database connection.
         openConnection();
         
-        // Call the super class's setDetector method to construct the detector object and activate listeners.
+        // Call the super class's setDetector method to construct the detector object and activate conditions listeners.
         super.setDetector(detectorName, runNumber);
                         
         // Should all conditions sets be cached?
@@ -406,17 +428,6 @@
      */
     public Detector getDetectorObject() {
         return getCachedConditions(Detector.class, "compact.xml").getCachedData();
-    }
-
-    /**
-     * Get conditions data by class and name.
-     * @param type The class of the conditions.
-     * @param name The name of the conditions set.
-     * @return The conditions or null if does not exist.
-     */
-    public <T> T getConditionsData(Class<T> type, String name) {
-        logger.info("getting conditions " + name + " of type " + type.getSimpleName());
-        return getCachedConditions(type, name).getCachedData();
     }
 
     /**
@@ -569,18 +580,7 @@
         closeConnection(openedConnection);        
         return keys;
     }
-
-    /**
-     * Set the log level.
-     * @param level The log level.
-     */
-    public void setLogLevel(Level level) {
-        logger.config("setting log level to " + level);
-        logger.setLevel(level);
-        logger.getHandlers()[0].setLevel(level);
-        svtSetup.setLogLevel(level);
-    }
-
+  
     /**
      * Find a collection of conditions validity records by key name. The key
      * name is distinct from the table name, but they are usually set to the
@@ -808,6 +808,8 @@
      * @return The Logger for this class.
      */
     public static Logger getLogger() {
+        //System.out.println("DatabaseConditionsManager.getLogger called from");
+        //new RuntimeException().printStackTrace();
         return logger;
     }
     
@@ -829,8 +831,20 @@
         return tableRegistry.findByCollectionType(type);
     }
     
+    /**
+     * Get the name of the ECAL in the detector geometry.
+     * @return The name of the ECAL.
+     */
     public String getEcalName() {
         return ecalName;
+    }
+    
+    /**
+     * Get the subdetector object of the ECAL.
+     * @return The ECAL subdetector.
+     */
+    public Subdetector getEcalSubdetector() {
+        return this.getDetectorObject().getSubdetector(ecalName);
     }
 
     /*

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannel.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannel.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannel.java	Wed Feb 25 15:00:53 2015
@@ -10,13 +10,17 @@
 import org.hps.conditions.api.AbstractConditionsObject;
 import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.conditions.api.AbstractIdentifier;
+import org.hps.conditions.database.ConditionsObjectConverter;
 import org.hps.conditions.database.Converter;
+import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
 import org.hps.conditions.database.Table;
+import org.lcsim.conditions.ConditionsManager;
 import org.lcsim.detector.identifier.ExpandedIdentifier;
 import org.lcsim.detector.identifier.IExpandedIdentifier;
 import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.geometry.Subdetector;
 
 /**
  * This class encapsulates all the information about a single ECal channel,
@@ -25,9 +29,25 @@
  * @author Jeremy McCormick <[log in to unmask]>
  */
 @Table(names = {"ecal_channels"})
-@Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
+@Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED, converter = EcalChannel.EcalChannelConverter.class)
 public final class EcalChannel extends AbstractConditionsObject {
-
+    
+    public static final class EcalChannelConverter extends ConditionsObjectConverter<EcalChannelCollection> {
+               
+        @Override
+        public EcalChannelCollection getData(ConditionsManager conditionsManager, String name) {
+            EcalChannelCollection collection = super.getData(conditionsManager, name);
+            Subdetector ecal = DatabaseConditionsManager.getInstance().getEcalSubdetector();
+            collection.buildGeometryMap(ecal.getDetectorElement().getIdentifierHelper(), ecal.getSystemID());
+            return collection;
+        }
+
+        @Override
+        public Class<EcalChannelCollection> getType() {
+            return EcalChannelCollection.class;
+        }        
+    }
+    
     /**
      * The <code>DaqId</code> is the combination of crate, slot and channel that
      * specify the channel's DAQ configuration.

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditions.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditions.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditions.java	Wed Feb 25 15:00:53 2015
@@ -20,10 +20,10 @@
 public final class EcalConditions {
 
     /** Channel map. */
-    EcalChannelCollection channelMap = new EcalChannelCollection();
+    EcalChannelCollection channelCollection = new EcalChannelCollection();
 
     /** Map between channels and conditions data. */
-    Map<EcalChannel, EcalChannelConstants> channelData = new HashMap<EcalChannel, EcalChannelConstants>();
+    Map<EcalChannel, EcalChannelConstants> channelConstants = new HashMap<EcalChannel, EcalChannelConstants>();
 
     Subdetector subdetector;
     
@@ -41,15 +41,8 @@
      * Set the channel map.
      * @param channels The channel map.
      */
-    void setChannelCollection(EcalChannelCollection channelMap) {
-                
-        this.channelMap = channelMap;
-        
-        // Get the full channel map created by the conditions system.
-        channelMap = getChannelCollection();
-                                
-        // Build the map of geometry IDs.
-        channelMap.buildGeometryMap(subdetector.getDetectorElement().getIdentifierHelper(), subdetector.getSystemID());
+    void setChannelCollection(EcalChannelCollection channelCollection) {
+        this.channelCollection = channelCollection;        
     }
 
     /**
@@ -57,7 +50,7 @@
      * @return The channel map.
      */
     public EcalChannelCollection getChannelCollection() {
-        return channelMap;
+        return channelCollection;
     }
         
     /**
@@ -71,15 +64,14 @@
      */
     public EcalChannelConstants getChannelConstants(EcalChannel channel) {
         // This channel must come from the map.
-        if (!channelMap.contains(channel)) {
+        if (!channelCollection.contains(channel)) {
             System.err.println("Channel not found in map: " + channel);
             throw new IllegalArgumentException("Channel was not found in map.");
         }
         // If channel has no data yet, then add it.
-        // FIXME: I'm not sure this should happen at all!
-        if (!channelData.containsKey(channel))
-            channelData.put(channel, new EcalChannelConstants());
-        return channelData.get(channel);
+        if (!channelConstants.containsKey(channel))
+            channelConstants.put(channel, new EcalChannelConstants());
+        return channelConstants.get(channel);
     }
 
     /**
@@ -123,7 +115,7 @@
         buff.append('\n');
 
         // Loop over all channels.
-        for (EcalChannel channel : channelMap) {
+        for (EcalChannel channel : channelCollection) {
 
             EcalChannelConstants constants = getChannelConstants(channel);