Author: [log in to unmask] Date: Mon Mar 23 08:56:04 2015 New Revision: 2501 Log: Updated DAQ configuration to print clustering settings correctly and added the ability to parse trigger cuts from a string to the TriggerModule. Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/daqconfig/DAQConfig.java java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TriggerModule.java Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/daqconfig/DAQConfig.java ============================================================================= --- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/daqconfig/DAQConfig.java (original) +++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/daqconfig/DAQConfig.java Mon Mar 23 08:56:04 2015 @@ -51,6 +51,8 @@ // Print the system-specific objects. fadcConfig.printConfig(); System.out.println(); + gtpConfig.printConfig(); + System.out.println(); sspConfig.printConfig(); } Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TriggerModule.java ============================================================================= --- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TriggerModule.java (original) +++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TriggerModule.java Mon Mar 23 08:56:04 2015 @@ -2,6 +2,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.StringTokenizer; import org.hps.recon.ecal.daqconfig.PairTriggerConfig; import org.hps.recon.ecal.daqconfig.SinglesTriggerConfig; @@ -220,6 +221,66 @@ // Otherwise, throw an exception. else { throw new IllegalArgumentException(String.format("Cut \"%s\" does not exist.", cut)); } } + + /** + * Sets the cluster singles cuts to the values parsed from an + * argument string. + * @param isSingles - Indicates whether the parser should expect + * 10 cut values (for pairs) or 3 (for singles). + * @param cutValues - A string representing the cuts values. This + * must be formatted in the style of "Emin Emax Nmin ...". + */ + public void setCutValues(boolean isSingles, String cutValues) { + // Make sure that the string is not null. + if(cutValues == null) { + throw new NullPointerException(String.format("Cut arguments for trigger are null!")); + } + + // Tokenize the argument string. + StringTokenizer tokens = new StringTokenizer(cutValues); + + // Store the cut values. Entry format is: + // clusterEnergyMin clusterEnergyMax hitCountMin + // clusterEnergyMin clusterEnergyMax hitCountMin pairSumMin pairSumMax pairDiffMax pairSlopeMin pairSlopeF pairCoplanarityMax pairTimeCoincidence + double cuts[]; + if(isSingles) { cuts = new double[] { 0.0, 8.191, 0 }; } + else { cuts = new double[] { 0.0, 8.191, 0, 0, 8.191, 8.191, 0, 0.0055, 180, Double.MAX_VALUE }; } + String[] cutNames = { "clusterEnergyMin", "clusterEnergyMax", "hitCountMin", + "pairSumMin", "pairSumMax", "pairDiffMax", "pairSlopeMin", "pairSlopeF", + "pairCoplanarityMax", "pairTimeCoincidence" }; + + // Iterate over the number of cuts and extract that many values + // from the cut value string. + for(int cutNum = 0; cutNum < cuts.length; cutNum++) { + // If there are no more tokens left, the argument string + // is missing some values. Throw an exception! + if(tokens.hasMoreTokens()) { + // Get the next token from the string. + String arg = tokens.nextToken(); + + // Try to parse the token as a double. All cut values + // should be rendered as doubles (or integers, which + // can be parsed as doubles). If it is not, the string + // is improperly formatted. + try { cuts[cutNum] = Double.parseDouble(arg); } + catch(NumberFormatException e) { + throw new NumberFormatException(String.format("Argument for \"%s\" improperly formatted: %s", cutNames[cutNum], arg)); + } + } + } + + // Store the cuts in the trigger. + setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, cuts[0]); + setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, cuts[1]); + setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, cuts[2]); + setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, cuts[3]); + setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, cuts[4]); + setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, cuts[5]); + setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, cuts[6]); + setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, cuts[7]); + setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, cuts[8]); + setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, cuts[9]); + } /** * Checks whether the argument cluster possesses the minimum