Author: [log in to unmask]
Date: Thu Mar 5 09:29:11 2015
New Revision: 2255
Log:
Updated the DAQ configuration API to fix a few bugs and also added the ability to load the DAQ settings into TriggerModule by directly passing it a trigger configuration object.
Modified:
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerModule.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/AbstractConfig.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/ConfigurationManager.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/DAQConfig.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/DAQConfigDriver.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/FADCConfig.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/IDAQConfig.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/PairTriggerConfig.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/SSPConfig.java
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerModule.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerModule.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TriggerModule.java Thu Mar 5 09:29:11 2015
@@ -4,11 +4,13 @@
import java.util.HashMap;
import java.util.Map;
+import org.hps.readout.ecal.daqconfig.PairTriggerConfig;
+import org.hps.readout.ecal.daqconfig.SinglesTriggerConfig;
import org.hps.readout.ecal.triggerbank.SSPCluster;
import org.lcsim.event.Cluster;
/**
- * Class <code>SSPTriggerModule</code> handles trigger cuts. By default,
+ * Class <code>TriggerModule</code> handles trigger cuts. By default,
* it sets all cuts such that any cluster or cluster pair will pass.
* Cuts can be set after initialization via the <code>setCutValue</code>
* method using a cut identifier. All valid cut identifiers are static
@@ -25,7 +27,8 @@
* @see SSPCluster
*/
public final class TriggerModule {
- // ECal mid-plane, defined by photon beam position (30.52 mrad) at ECal face (z=1393 mm)
+ // The calorimeter mid-plane, defined by the photon beam position
+ // (30.52 mrad) at the calorimeter face (z = 1393 mm).
private static final double ORIGIN_X = 1393.0 * Math.tan(0.03052);
// Trigger module property names.
@@ -152,6 +155,56 @@
// Otherwise, produce an exception.
else { throw new IllegalArgumentException(String.format("Cut \"%s\" does not exist.", cut)); }
+ }
+
+ /**
+ * Loads triggers settings from the DAQ configuration for a singles
+ * trigger. Pair trigger settings will be set to accept all possible
+ * values, while singles trigger settings will
+ * @param config - The DAQ configuration settings.
+ */
+ public void loadDAQConfiguration(SinglesTriggerConfig config) {
+ // Set the trigger values.
+ setCutValue(CLUSTER_TOTAL_ENERGY_LOW, config.getEnergyMinCutConfig().getLowerBound());
+ setCutValue(CLUSTER_TOTAL_ENERGY_HIGH, config.getEnergyMaxCutConfig().getUpperBound());
+ setCutValue(CLUSTER_HIT_COUNT_LOW, config.getHitCountCutConfig().getLowerBound());
+
+ // The remaining triggers should be set to their default values.
+ // These settings effectively accept all possible clusters.
+ cuts.put(PAIR_COPLANARITY_HIGH, 180.0);
+ cuts.put(PAIR_ENERGY_DIFFERENCE_HIGH, Double.MAX_VALUE);
+ cuts.put(PAIR_ENERGY_SLOPE_LOW, 0.0);
+ cuts.put(PAIR_ENERGY_SUM_LOW, 0.0);
+ cuts.put(PAIR_ENERGY_SUM_HIGH, Double.MAX_VALUE);
+ cuts.put(PAIR_TIME_COINCIDENCE, Double.MAX_VALUE);
+
+ // Set the default value of the energy slope parameter F.
+ cuts.put(PAIR_ENERGY_SLOPE_F, 0.0055);
+ }
+
+ /**
+ * Loads triggers settings from the DAQ configuration for a pair
+ * trigger. All trigger settings will be loaded directly from the
+ * DAQ configuration and set appropriately.
+ * @param config - The DAQ configuration settings.
+ */
+ public void loadDAQConfiguration(PairTriggerConfig config) {
+ // Set the trigger values.
+ setCutValue(CLUSTER_TOTAL_ENERGY_LOW, config.getEnergyMinCutConfig().getLowerBound());
+ setCutValue(CLUSTER_TOTAL_ENERGY_HIGH, config.getEnergyMaxCutConfig().getUpperBound());
+ setCutValue(CLUSTER_HIT_COUNT_LOW, config.getHitCountCutConfig().getLowerBound());
+
+ // The remaining triggers should be set to their default values.
+ // These settings effectively accept all possible clusters.
+ cuts.put(PAIR_COPLANARITY_HIGH, config.getCoplanarityCutConfig().getUpperBound());
+ cuts.put(PAIR_ENERGY_DIFFERENCE_HIGH, config.getEnergyDifferenceCutConfig().getUpperBound());
+ cuts.put(PAIR_ENERGY_SLOPE_LOW, config.getEnergySlopeCutConfig().getLowerBound());
+ cuts.put(PAIR_ENERGY_SUM_LOW, config.getEnergySumCutConfig().getLowerBound());
+ cuts.put(PAIR_ENERGY_SUM_HIGH, config.getEnergySumCutConfig().getUpperBound());
+ cuts.put(PAIR_TIME_COINCIDENCE, config.getTimeDifferenceCutConfig().getUpperBound() * 4.0);
+
+ // Set the default value of the energy slope parameter F.
+ cuts.put(PAIR_ENERGY_SLOPE_F, config.getEnergySlopeCutConfig().getParameterF());
}
/**
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/AbstractConfig.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/AbstractConfig.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/AbstractConfig.java Thu Mar 5 09:29:11 2015
@@ -28,6 +28,7 @@
// Instantiate the value array.
values = new ArrayList<E>(count);
+ for(int i = 0; i < count; i++) { values.add(null); }
}
/**
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/ConfigurationManager.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/ConfigurationManager.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/ConfigurationManager.java Thu Mar 5 09:29:11 2015
@@ -14,7 +14,7 @@
*
* @author Kyle McCarty <[log in to unmask]>
* @see DAQConfigDriver
- * @see TriggerConfig
+ * @see EvioDAQParser
*/
public class ConfigurationManager {
// Store the configuration object.
@@ -82,7 +82,7 @@
* associated listeners that an update has occurred.
* @param parser - The updated DAQ information.
*/
- static final void updateConfiguration(TriggerConfig parser) {
+ static final void updateConfiguration(EvioDAQParser parser) {
DAQ_CONFIG.loadConfig(parser);
INITIALIZED = true;
updateListeners();
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/DAQConfig.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/DAQConfig.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/DAQConfig.java Thu Mar 5 09:29:11 2015
@@ -1,13 +1,36 @@
package org.hps.readout.ecal.daqconfig;
-
+/**
+ * Class <code>DAQConfig</code> holds all of the supported parameters
+ * from the DAQ configuration that exists in EVIO files. These values
+ * are stored in various subclasses appropriate to the parameter that
+ * are accessed through this primary interface.
+ *
+ * @author Kyle McCarty <[log in to unmask]>
+ */
public class DAQConfig extends IDAQConfig {
// Store the configuration objects.
private SSPConfig sspConfig = new SSPConfig();
private FADCConfig fadcConfig = new FADCConfig();
+ /**
+ * Gets the configuration parameters for the FADC.
+ * @return Returns the FADC configuration.
+ */
+ public FADCConfig getFADCConfig() {
+ return fadcConfig;
+ }
+
+ /**
+ * Gets the configuration parameters for the SSP.
+ * @return Returns the SSP configuration.
+ */
+ public SSPConfig getSSPConfig() {
+ return sspConfig;
+ }
+
@Override
- void loadConfig(TriggerConfig parser) {
+ void loadConfig(EvioDAQParser parser) {
// Pass the configuration parser to the system-specific objects.
sspConfig.loadConfig(parser);
fadcConfig.loadConfig(parser);
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/DAQConfigDriver.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/DAQConfigDriver.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/DAQConfigDriver.java Thu Mar 5 09:29:11 2015
@@ -10,15 +10,11 @@
@Override
public void process(EventHeader event) {
// Check if a trigger configuration bank exists.
- if(event.hasCollection(TriggerConfig.class, "TriggerConfig")) {
+ if(event.hasCollection(EvioDAQParser.class, "TriggerConfig")) {
// Get the trigger configuration bank. There should only be
// one in the list.
- List<TriggerConfig> configList = event.get(TriggerConfig.class, "TriggerConfig");
- TriggerConfig daqConfig = configList.get(0);
-
- // Perform a debug print of the configuration to test that
- // it is being read properly.
- daqConfig.printVars();
+ List<EvioDAQParser> configList = event.get(EvioDAQParser.class, "TriggerConfig");
+ EvioDAQParser daqConfig = configList.get(0);
// Get the DAQ configuration and update it with the new
// configuration object.
@@ -26,4 +22,4 @@
}
}
-}
+}
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/FADCConfig.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/FADCConfig.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/FADCConfig.java Thu Mar 5 09:29:11 2015
@@ -18,6 +18,7 @@
* <li>NSB</li>
* <li>FADC Window Width</li>
* <li>FADC Window Time Offset</li>
+ * <li>Max Pulses per Channel Window</li>
* <li>Crystal Gains</li>
* <li>Crystal Thresholds</li>
* <li>Crystal Pedestals</li>
@@ -32,7 +33,7 @@
private int nsb = -1;
private int windowWidth = -1;
private int offset = -1;
- private int npeak = -1;
+ private int maxPulses = -1;
// Store a map of calorimeter channel number to crystal indices.
private Map<Point, Integer> indexChannelMap = new HashMap<Point, Integer>();
@@ -43,14 +44,14 @@
private int[] thresholds = new int[443];
@Override
- void loadConfig(TriggerConfig parser) {
+ void loadConfig(EvioDAQParser parser) {
// Store the basic FADC information.
mode = parser.fadcMODE;
nsa = parser.fadcNSA;
nsb = parser.fadcNSB;
windowWidth = parser.fadcWIDTH;
offset = parser.fadcOFFSET;
- npeak = parser.fadcNPEAK; // TODO: Make this obtainable.
+ maxPulses = parser.fadcNPEAK;
// Get the channel collection from the database.
DatabaseConditionsManager database = DatabaseConditionsManager.getInstance();
@@ -77,7 +78,8 @@
/**
* Gets the gain for a crystal.
* @param channel - The channel object corresponding to the crystal.
- * @return Returns the gain as a <code>float</code>.
+ * @return Returns the gain as a <code>float</code> in units of MeV
+ * per ADC.
*/
public float getGain(EcalChannel channel) {
return getGain(channel.getChannelId());
@@ -86,7 +88,8 @@
/**
* Gets the gain for a crystal.
* @param channelID - The channel ID corresponding to the crystal.
- * @return Returns the gain as a <code>float</code>.
+ * @return Returns the gain as a <code>float</code> in units of MeV
+ * per ADC.
*/
public float getGain(int channelID) {
validateChannelID(channelID);
@@ -97,7 +100,8 @@
* Gets the gain for a crystal.
* @param ix - The x-index of the crystal.
* @param iy - The y-index of the crystal.
- * @return Returns the gain as a <code>float</code>.
+ * @return Returns the gain as a <code>float</code> in units of MeV
+ * per ADC.
*/
public float getGain(int ix, int iy) {
return getGain(new Point(ix, iy));
@@ -107,10 +111,20 @@
* Gets the gain for a crystal.
* @param ixy - The a point representing the x/y-indices of the
* crystal.
- * @return Returns the gain as a <code>float</code>.
+ * @return Returns the gain as a <code>float</code> in units of MeV
+ * per ADC.
*/
public float getGain(Point ixy) {
return getGain(indexChannelMap.get(ixy));
+ }
+
+ /**
+ * Gets the maximum number of pulses that the FADC will look for
+ * in a channel's window.
+ * @return Returns the maximum number of pulses.
+ */
+ public int getMaxPulses() {
+ return maxPulses;
}
/**
@@ -143,7 +157,8 @@
/**
* Gets the pedestal for a crystal.
* @param channel - The channel object corresponding to the crystal.
- * @return Returns the pedestal as a <code>float</code>.
+ * @return Returns the pedestal as a <code>float</code> in units
+ * of ADC.
*/
public float getPedestal(EcalChannel channel) {
return getPedestal(channel.getChannelId());
@@ -152,7 +167,8 @@
/**
* Gets the pedestal for a crystal.
* @param channelID - The channel ID corresponding to the crystal.
- * @return Returns the pedestal as a <code>float</code>.
+ * @return Returns the pedestal as a <code>float</code> in units
+ * of ADC.
*/
public float getPedestal(int channelID) {
validateChannelID(channelID);
@@ -163,7 +179,8 @@
* Gets the pedestal for a crystal.
* @param ix - The x-index of the crystal.
* @param iy - The y-index of the crystal.
- * @return Returns the pedestal as a <code>float</code>.
+ * @return Returns the pedestal as a <code>float</code> in units
+ * of ADC.
*/
public float getPedestal(int ix, int iy) {
return getPedestal(new Point(ix, iy));
@@ -173,7 +190,8 @@
* Gets the pedestal for a crystal.
* @param ixy - The a point representing the x/y-indices of the
* crystal.
- * @return Returns the pedestal as a <code>float</code>.
+ * @return Returns the pedestal as a <code>float</code> in units
+ * of ADC.
*/
public float getPedestal(Point ixy) {
return getPedestal(indexChannelMap.get(ixy));
@@ -182,7 +200,8 @@
/**
* Gets the threshold for a crystal.
* @param channel - The channel object corresponding to the crystal.
- * @return Returns the threshold as a <code>int</code>.
+ * @return Returns the threshold as a <code>int</code> in units
+ * of ADC.
*/
public int getThreshold(EcalChannel channel) {
return getThreshold(channel.getChannelId());
@@ -191,7 +210,8 @@
/**
* Gets the threshold for a crystal.
* @param channelID - The channel ID corresponding to the crystal.
- * @return Returns the threshold as a <code>int</code>.
+ * @return Returns the threshold as a <code>int</code> in units
+ * of ADC.
*/
public int getThreshold(int channelID) {
validateChannelID(channelID);
@@ -202,7 +222,8 @@
* Gets the threshold for a crystal.
* @param ix - The x-index of the crystal.
* @param iy - The y-index of the crystal.
- * @return Returns the threshold as a <code>int</code>.
+ * @return Returns the threshold as a <code>int</code> in units
+ * of ADC.
*/
public int getThreshold(int ix, int iy) {
return getThreshold(new Point(ix, iy));
@@ -212,7 +233,8 @@
* Gets the threshold for a crystal.
* @param ixy - The a point representing the x/y-indices of the
* crystal.
- * @return Returns the threshold as a <code>int</code>.
+ * @return Returns the threshold as a <code>int</code> in units
+ * of ADC.
*/
public int getThreshold(Point ixy) {
return getThreshold(indexChannelMap.get(ixy));
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/IDAQConfig.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/IDAQConfig.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/IDAQConfig.java Thu Mar 5 09:29:11 2015
@@ -14,7 +14,7 @@
* Updates the stored settings based on the argument parser.
* @param parser - The EVIO DAQ bank parser.
*/
- abstract void loadConfig(TriggerConfig parser);
+ abstract void loadConfig(EvioDAQParser parser);
/**
* Prints a textual representation of the configuration bank to the
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/PairTriggerConfig.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/PairTriggerConfig.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/PairTriggerConfig.java Thu Mar 5 09:29:11 2015
@@ -21,7 +21,7 @@
*/
PairTriggerConfig() {
// Instantiate the superclass.
- super(6);
+ super(8);
// Define the pair cuts.
setValue(CUT_ENERGY_MIN, new LBOCutConfig());
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/SSPConfig.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/SSPConfig.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/SSPConfig.java Thu Mar 5 09:29:11 2015
@@ -20,7 +20,7 @@
private SinglesTriggerConfig[] singlesTrigger = { new SinglesTriggerConfig(), new SinglesTriggerConfig() };
@Override
- void loadConfig(TriggerConfig parser) {
+ void loadConfig(EvioDAQParser parser) {
// Set the trigger parameters.
for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
// Set whether the triggers are enabled or not.
@@ -132,8 +132,7 @@
System.out.println("\t\tCluster Hit Count Cut");
System.out.printf("\t\t\tEnabled :: %b%n", pairTrigger[triggerNum].getHitCountCutConfig().isEnabled());
- //System.out.printf("\t\t\tValue :: %1.0f hits%n", pairTrigger[triggerNum].getHitCountCutConfig().getLowerBound());
- System.out.printf("\t\t\tValue :: ??? hits%n");
+ System.out.printf("\t\t\tValue :: %1.0f hits%n", pairTrigger[triggerNum].getHitCountCutConfig().getLowerBound());
System.out.println("\t\tPair Energy Sum Cut");
System.out.printf("\t\t\tEnabled :: %b%n", pairTrigger[triggerNum].getEnergySumCutConfig().isEnabled());
|