Author: [log in to unmask] Date: Fri Mar 27 19:26:18 2015 New Revision: 2612 Log: add singlesTrigger option to trigger driver, and use it; put trigger drivers in tightest-first order Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java ============================================================================= --- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java (original) +++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java Fri Mar 27 19:26:18 2015 @@ -51,6 +51,8 @@ private int pairEnergySlopeCount = 0; // Track the pairs which pass the energy slope cut. private int pairCoplanarityCount = 0; // Track the pairs which pass the coplanarity cut. private boolean verbose = false; // Stores whether debug text should be output. + private boolean singlesTrigger = false; // If true, ignore all pair cuts and trigger on single clusters. + private List<Cluster> goodClusterList; // Store the clusters from the current event that passed single-cluster cuts. // ================================================================== // ==== Trigger Distribution Plots ================================== @@ -109,15 +111,17 @@ System.out.printf("\t\tPassed Hit Count Cut :: %d%n", clusterHitCountCount); System.out.printf("\t\tPassed Total Energy Cut :: %d%n", clusterTotalEnergyCount); System.out.printf("%n"); - System.out.printf("\tCluster Pair Cuts%n"); - System.out.printf("\t\tTotal Pairs Processed :: %d%n", allPairs); - System.out.printf("\t\tPassed Energy Sum Cut :: %d%n", pairEnergySumCount); - System.out.printf("\t\tPassed Energy Difference Cut :: %d%n", pairEnergyDifferenceCount); - System.out.printf("\t\tPassed Energy Slope Cut :: %d%n", pairEnergySlopeCount); - System.out.printf("\t\tPassed Coplanarity Cut :: %d%n", pairCoplanarityCount); + if (!singlesTrigger) { + System.out.printf("\tCluster Pair Cuts%n"); + System.out.printf("\t\tTotal Pairs Processed :: %d%n", allPairs); + System.out.printf("\t\tPassed Energy Sum Cut :: %d%n", pairEnergySumCount); + System.out.printf("\t\tPassed Energy Difference Cut :: %d%n", pairEnergyDifferenceCount); + System.out.printf("\t\tPassed Energy Slope Cut :: %d%n", pairEnergySlopeCount); + System.out.printf("\t\tPassed Coplanarity Cut :: %d%n", pairCoplanarityCount); + } System.out.printf("%n"); System.out.printf("\tTrigger Count :: %d%n", numTriggers); - + // Print the trigger cuts. System.out.printf("%nTrigger Module Cut Values:%n"); System.out.printf("\tSeed Energy Low :: %.3f%n", triggerModule.getCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW)); @@ -125,11 +129,16 @@ System.out.printf("\tCluster Energy Low :: %.3f%n", triggerModule.getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW)); System.out.printf("\tCluster Energy High :: %.3f%n", triggerModule.getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH)); System.out.printf("\tCluster Hit Count :: %.0f%n", triggerModule.getCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW)); - System.out.printf("\tPair Energy Sum Low :: %.3f%n", triggerModule.getCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW)); - System.out.printf("\tPair Energy Sum High :: %.3f%n", triggerModule.getCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH)); - System.out.printf("\tPair Energy Difference :: %.3f%n", triggerModule.getCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH)); - System.out.printf("\tPair Energy Slope :: %.1f%n", triggerModule.getCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW)); - System.out.printf("\tPair Coplanarity :: %.1f%n", triggerModule.getCutValue(TriggerModule.PAIR_COPLANARITY_HIGH)); + + if (singlesTrigger) { + System.out.println("\tSingles trigger (no pairs required)"); + } else { + System.out.printf("\tPair Energy Sum Low :: %.3f%n", triggerModule.getCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW)); + System.out.printf("\tPair Energy Sum High :: %.3f%n", triggerModule.getCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH)); + System.out.printf("\tPair Energy Difference :: %.3f%n", triggerModule.getCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH)); + System.out.printf("\tPair Energy Slope :: %.1f%n", triggerModule.getCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW)); + System.out.printf("\tPair Coplanarity :: %.1f%n", triggerModule.getCutValue(TriggerModule.PAIR_COPLANARITY_HIGH)); + } // Run the superclass method. super.endOfData(); @@ -148,7 +157,7 @@ // Create a list to hold clusters which pass the single // cluster cuts. - List<Cluster> goodClusterList = new ArrayList<Cluster>(clusterList.size()); + goodClusterList = new ArrayList<Cluster>(clusterList.size()); // Sort through the cluster list and add clusters that pass // the single cluster cuts to the good list. @@ -279,6 +288,17 @@ */ public void setClusterCollectionName(String clusterCollectionName) { this.clusterCollectionName = clusterCollectionName; + } + + /** + * Run as a singles trigger. No requirement for a coincidence between a pair + * of clusters. The trigger fires if any clusters pass the single-cluster + * cuts. + * + * @param singlesTrigger False by default. + */ + public void setSinglesTrigger(boolean singlesTrigger) { + this.singlesTrigger = singlesTrigger; } /** @@ -581,6 +601,12 @@ * passes all of the cluster cuts and <code>false</code> otherwise. */ private boolean testTrigger() { + + // If running a singles trigger, trigger if a cluster passed the single-cluster cuts. + if (singlesTrigger) { + return !goodClusterList.isEmpty(); + } // The rest of this method (pair trigger cuts) is not run. + // Get the list of cluster pairs. List<Cluster[]> clusterPairs = getClusterPairsTopBot(); Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim ============================================================================= --- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim (original) +++ java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim Fri Mar 27 19:26:18 2015 @@ -14,10 +14,10 @@ <driver name="EcalConverter"/> <driver name="EcalClustererGTP"/> <driver name="EcalClusterer"/> + <driver name="PairTrigger1"/> <driver name="PairTrigger0"/> - <driver name="PairTrigger1"/> + <driver name="SinglesTrigger1"/> <driver name="SinglesTrigger0"/> - <driver name="SinglesTrigger1"/> <driver name="TestRunReconToLcio"/> <driver name="AidaSaveDriver"/> <driver name="ClockDriver"/> @@ -75,6 +75,7 @@ </driver> <driver name="SinglesTrigger0" type="org.hps.readout.ecal.FADCPrimaryTriggerDriver"> <clusterCollectionName>EcalClusters</clusterCollectionName> + <singlesTrigger>true</singlesTrigger> <deadTime>32</deadTime> <minHitCount>4</minHitCount> <seedEnergyLow>0.1</seedEnergyLow> @@ -82,11 +83,12 @@ <clusterEnergyHigh>2.5</clusterEnergyHigh> <prescale>256</prescale> <outputFileName>${outputFile}.triggers.singles0</outputFileName> - <lcioFile>${outputFile}.singles0.slcio</lcioFile> + <lcioFile>${outputFile}.singles0.slcio</lcioFile> <!--<verbose>true</verbose>--> </driver> <driver name="SinglesTrigger1" type="org.hps.readout.ecal.FADCPrimaryTriggerDriver"> <clusterCollectionName>EcalClusters</clusterCollectionName> + <singlesTrigger>true</singlesTrigger> <deadTime>32</deadTime> <minHitCount>4</minHitCount> <seedEnergyLow>0.1</seedEnergyLow>