Print

Print


Author: [log in to unmask]
Date: Tue Nov 18 11:40:45 2014
New Revision: 1563

Log:
Add support for tag setting in Driver.  Add initialize method and more doc.

Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java	Tue Nov 18 11:40:45 2014
@@ -5,25 +5,52 @@
 import org.lcsim.util.Driver;
 
 /**
+ * <p>
  * This {@link org.lcsim.util.Driver} can be used to customize the behavior
  * of the {@link DatabaseConditionsManager}.  It allows the setting of a 
- * detector name and run number, if the user wishes to override the default
- * behavior of the conditions system, which generally reads this information
- * from the LCSim events.  It is not necessary to run this Driver in order
- * to activate the database conditions system. 
+ * detector name and run number, as well as other parameters, if the user 
+ * wishes to override the default behavior of the conditions system, which
+ * is generally activated from LCSim events.  It is not necessary to run this 
+ * Driver in order to activate the default database conditions system.  Only 
+ * one instance of this Driver should ever be included in a steering file.
+ * <p>
+ * This is an example of using the Driver in an XML steering file:
+ * <pre>
+ * {@code
+ * <driver name="ConditionsDriver" type="org.hps.conditions.ConditionsDriver">
+ *     <freeze>true</freeze>
+ *     <detectorName>HPS-TestRun-v5</detectorName>
+ *     <ecalName>Ecal</ecalName>
+ *     <svtName>Tracker</svtName>
+ *     <runNumber>1351</runNumber>
+ * </driver>
+ * }
+ * </pre> 
+ * <p>
+ * This class is a "special" Driver which must have its initialization occur at the right time.
+ * It has a custom initialization method {@link #initialize()} which should be called after 
+ * all Driver setup has occurred, but before the job actually begins.  This is so the conditions 
+ * system functions properly, including the activation of registered listeners.  The setup is 
+ * performed by default in the class {@link org.hps.job.JobManager}, which is used in the 
+ * default command line front end of hps-distribution.  If that class is not being used, then
+ * the method must be executed manually at the right time to achieve the proper behavior.
  *
  * @author Jeremy McCormick <[log in to unmask]>
  */
 public class ConditionsDriver extends Driver {
 
     String detectorName = null;
-    DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
-    boolean freeze;
+    String ecalName = null;
+    String svtName = null;
+    String tag = null;
+    int runNumber = 0;
+    boolean freeze;    
     
     /**
      * Default constructor.
      */
     public ConditionsDriver() {
+        new DatabaseConditionsManager();
     }
     
     /**
@@ -34,7 +61,7 @@
     public void setDetectorName(String detectorName) {
         this.detectorName = detectorName;
     }
-    
+        
     /**
      * Set whether or not the conditions system should be "frozen" after the 
      * detector name and run number are set.  When frozen, the conditions system
@@ -46,7 +73,7 @@
     public void setFreeze(boolean freeze) {
         this.freeze = freeze;
     }
-    
+        
     /**
      * Set a custom run number to setup the conditions system.
      * In the case where the actual event stream has run numbers that differ from this one,
@@ -59,17 +86,7 @@
      * @param runNumber The user supplied run number for the job.
      */
     public void setRunNumber(int runNumber) {
-        if (this.detectorName == null) {
-            throw new RuntimeException("The detector name must be set before the run number.");
-        }
-        try {
-            conditionsManager.setDetector(detectorName, runNumber);
-        } catch (ConditionsNotFoundException e) {
-            throw new RuntimeException("Error setting conditions.", e);
-        }
-        if (freeze) {
-            conditionsManager.freeze();
-        }
+        this.runNumber = runNumber;
     }            
     
     /**
@@ -78,15 +95,56 @@
      * @param ecalName The name of the ECAL subdetector.
      */
     public void setEcalName(String ecalName) {
-        conditionsManager.setEcalName(ecalName);
+        this.ecalName = ecalName;
     }
-    
+       
     /**
      * Set the name of the SVT subdetector which the conditions manager will use for loading conditions
      * onto the detector.
      * @param svtName The name of the SVT subdetector.
      */
     public void setSvtName(String svtName) {
-        conditionsManager.setSvtName(svtName);
+        this.svtName = svtName;
+    }
+    
+    /**
+     * Set a tag used to filter ConditionsRecords.
+     * @param tag The tag value e.g. "eng_run" etc.
+     */
+    public void setTag(String tag) {
+        this.tag = tag;
+    }
+    
+    /**
+     * Setup the conditions system based on the Driver parameters.
+     * @throws RuntimeException If there is a problem setting up the conditions system.
+     */
+    public void initialize() {
+        DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+        if (ecalName != null) {
+            // Set custom ECAL name.
+            conditionsManager.setEcalName(ecalName);
+        }
+        if (svtName != null) {
+            // Set custom SVT name.
+            conditionsManager.setSvtName(svtName);
+        }
+        if (tag != null) {
+            // Set a tag for filtering ConditionsRecord objects.
+            conditionsManager.setTag(tag);
+        }
+        if (detectorName != null) {
+            // The manager can only be initialized if there is a user supplied detector name.
+            try {
+                // Initialize the conditions manager.
+                conditionsManager.setDetector(detectorName, runNumber);
+                if (this.freeze) {
+                    // User configured to freeze conditions for the job.
+                    conditionsManager.freeze();
+                }
+            } catch (ConditionsNotFoundException e) {
+                throw new RuntimeException("Error initializing conditions from ConditionsDriver.", e);
+            }
+        }
     }
 }