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);
+ }
+ }
}
}
|