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