LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  September 2015

HPS-SVN September 2015

Subject:

r3586 - in /java/trunk/analysis/src/main/java/org/hps/analysis/trigger: TriggerTurnOnDriver.java util/TriggerDecisionCalculator.java

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Fri, 11 Sep 2015 16:15:57 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (376 lines)

Author: [log in to unmask]
Date: Fri Sep 11 09:15:53 2015
New Revision: 3586

Log:
trigger decision helper and analysis class

Added:
    java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDecisionCalculator.java
Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java	Fri Sep 11 09:15:53 2015
@@ -7,18 +7,16 @@
 import hep.aida.IHistogram1D;
 import hep.aida.IPlotter;
 import hep.aida.IPlotterStyle;
-import hep.aida.ref.AnalysisFactory;
 
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.hps.record.triggerbank.AbstractIntData;
-import org.hps.record.triggerbank.TIData;
+import org.hps.analysis.trigger.util.TriggerDecisionCalculator;
+import org.hps.analysis.trigger.util.TriggerDecisionCalculator.TriggerType;
 import org.hps.util.BasicLogFormatter;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.event.GenericObject;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
@@ -30,14 +28,18 @@
  */
 public class TriggerTurnOnDriver extends Driver {
 
-    private static Logger logger = LogUtil.create(TriggerTurnOnDriver.class, new BasicLogFormatter(), Level.INFO);
-    private String triggerBankCollectionName = "TriggerBank";
-    private String ecalClusterCollectionName = "EcalClusters";
+    private static Logger logger = LogUtil.create(TriggerTurnOnDriver.class, new BasicLogFormatter(), Level.FINE);
+    private final String triggerBankCollectionName = "TriggerBank";
+    private final String ecalClusterCollectionName = "EcalClustersCorr";
     IPlotter plotter;
+    IPlotter plotter2;
     private AIDA aida = AIDA.defaultInstance();
     IHistogram1D clusterE_Random;
     IHistogram1D clusterE_RandomSingles1;
-    IHistogram1D trigEff;
+    IHistogram1D clusterEOne_Random;
+    IHistogram1D clusterEOne_RandomSingles1;
+    IHistogram1D clusterE_RandomSingles1_trigEff;
+    IHistogram1D clusterEOne_RandomSingles1_trigEff;
     private boolean showPlots = true;
     private int nEventsProcessed = 0;
     
@@ -52,114 +54,95 @@
         
         aida.tree().cd("/");
         IAnalysisFactory fac = aida.analysisFactory();
-        plotter = fac.createPlotterFactory().create("HPS Tracking Plots");
-        plotter.setTitle("Momentum");
+
+        plotter = fac.createPlotterFactory().create("Trigger Efficiency");
         IPlotterStyle style = plotter.style();
         style.dataStyle().fillStyle().setColor("yellow");
         style.dataStyle().errorBarStyle().setVisible(false);
         plotter.createRegions(2, 2);
-        //plotterFrame.addPlotter(plotter);
-
-        clusterE_Random = aida.histogram1D("Cluster E rndm", 50, 0., 1.5);
-        clusterE_RandomSingles1 = aida.histogram1D("Cluster E rndm+singles1", 50, 0., 1.5);
-        trigEff = aida.histogram1D("trigEff", 50, 0., 1.5);
-
+        clusterE_Random = aida.histogram1D("clusterE_Random", 50, 0., 1.5);
+        clusterE_RandomSingles1 = aida.histogram1D("clusterE_RandomSingles1", 50, 0., 1.5);
+        plotter.setTitle("Cluster E efficiency");
         plotter.region(0).plot(clusterE_Random);
-
         plotter.region(1).plot(clusterE_RandomSingles1);
+        if(showPlots) plotter.show();
         
-        plotter.region(2).plot(trigEff);
-
-        if(showPlots) plotter.show();
+        plotter2 = fac.createPlotterFactory().create("Trigger Efficiency One");
+        plotter2.createRegions(2, 2);
+        clusterEOne_Random = aida.histogram1D("clusterEOne_Random", 50, 0., 1.5);
+        clusterEOne_RandomSingles1 = aida.histogram1D("clusterEOne_RandomSingles1", 50, 0., 1.5);
+        plotter2.region(0).plot(clusterEOne_Random);
+        plotter2.region(1).plot(clusterEOne_RandomSingles1);
+        if(showPlots) plotter2.show();
         
     }
     
     @Override
     protected void process(EventHeader event) {
 
-        // Get the list of trigger banks from the event
-        List<GenericObject> triggerBanks = event.get(GenericObject.class, triggerBankCollectionName);
+        
+        TriggerDecisionCalculator triggerDecisions = new TriggerDecisionCalculator(event);
+        
+        if(!triggerDecisions.passed(TriggerType.PULSER))
+            return;
+        
+        logger.fine("pulser trigger fired");
 
-        boolean isRandomTriggerEvent = false;
-        boolean isSingles1TriggerEvent = false;
+        if(triggerDecisions.passed(TriggerType.SINGLES1))
+            logger.fine("Singles1 trigger fired");
+        
+        if(triggerDecisions.passed(TriggerType.SINGLES1_SIM))
+            logger.fine("Sim Singles1 trigger fired");
+        
+        
+        List<Cluster> clusters = null;
+        Cluster clusterEMax = null;
+        
+        if(event.hasCollection(Cluster.class , ecalClusterCollectionName)) 
+            clusters = event.get(Cluster.class, ecalClusterCollectionName);
 
-        // Loop through the collection of banks and get the TI banks.
-        for (GenericObject triggerBank : triggerBanks) {
-
-            // If the bank contains TI data, process it
-            if (AbstractIntData.getTag(triggerBank) == TIData.BANK_TAG) {
-
-                TIData tiData = new TIData(triggerBank);
-
-                if(tiData.isPulserTrigger()) {
-                    isRandomTriggerEvent = true;
-                } else if(tiData.isSingle1Trigger()) {
-                    isSingles1TriggerEvent = true;
+        if(clusters != null) {
+            for(Cluster cluster : clusters) {
+                if(clusterEMax != null) {
+                    if(cluster.getEnergy() > clusterEMax.getEnergy()) 
+                        clusterEMax = cluster;
+                } else {
+                    clusterEMax = cluster;
                 }
             }
         }
 
-
-        if(isRandomTriggerEvent) {
-
-            logger.info("Random trigger fired");
-
-            // find offline ecal clusters -> denominator
-            // count how often the singles1trigger fired for a given offline cluster (vs E, x, y)
-
-            if(event.hasCollection(Cluster.class , ecalClusterCollectionName)) {
-
-
-                List<Cluster> clusters = event.get(Cluster.class, ecalClusterCollectionName);
-
-                for(Cluster cluster : clusters) {
-
-                    clusterE_Random.fill(cluster.getEnergy());
-                    nEventsProcessed++;
-
-                }
-
-
+        // fill denominator
+        if(clusterEMax!=null) {
+            clusterE_Random.fill(clusterEMax.getEnergy());
+            if(clusters.size() == 1) {
+                clusterEOne_Random.fill(clusterEMax.getEnergy());
             }
-
-        } else if(isSingles1TriggerEvent) {
-
-            logger.info("Singles1 trigger fired");
-        }
-        
-        
-        if (isRandomTriggerEvent && isSingles1TriggerEvent) {
-            
-            logger.info("Eureka. They both fired.");
-            if(event.hasCollection(Cluster.class , ecalClusterCollectionName)) {
-
-
-                List<Cluster> clusters = event.get(Cluster.class, ecalClusterCollectionName);
-
-                for(Cluster cluster : clusters) {
-
-                    clusterE_RandomSingles1.fill(cluster.getEnergy());
-
-                }
-
-
-            }
-            
-            
         }
 
-        
-        if(nEventsProcessed % 10 == 0 ) {
-            trigEff = aida.histogramFactory().divide("trigEff", clusterE_RandomSingles1, clusterE_Random);
+        // fill numerator
+        if (triggerDecisions.passed(TriggerType.SINGLES1_SIM)) {
+            logger.fine("Eureka. They both fired.");
+            if(clusterEMax != null) {
+                clusterE_RandomSingles1.fill(clusterEMax.getEnergy());
+                if(clusters.size() == 1) 
+                    clusterEOne_RandomSingles1.fill(clusterEMax.getEnergy());
+            }
         }
 
+        nEventsProcessed++;
+        
 
     }
     
     @Override
     protected void endOfData() {
+        clusterE_RandomSingles1_trigEff = aida.histogramFactory().divide("trigEff", clusterE_RandomSingles1, clusterE_Random);
+        clusterEOne_RandomSingles1_trigEff = aida.histogramFactory().divide("trigEffEone", clusterEOne_RandomSingles1, clusterEOne_Random);
+        logger.info("entries in clusterE_RandomSingles1_trigEff: " + Integer.toString(clusterE_RandomSingles1_trigEff.allEntries()));
+        plotter.region(2).plot(clusterE_RandomSingles1_trigEff);
+        plotter2.region(2).plot(clusterEOne_RandomSingles1_trigEff);
         
-
     }
 
 }

Added: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDecisionCalculator.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDecisionCalculator.java	(added)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDecisionCalculator.java	Fri Sep 11 09:15:53 2015
@@ -0,0 +1,135 @@
+/**
+ * 
+ */
+package org.hps.analysis.trigger.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.SSPCluster;
+import org.hps.record.triggerbank.SSPData;
+import org.hps.record.triggerbank.TIData;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+
+/**
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public class TriggerDecisionCalculator {
+
+    public enum TriggerType {
+        SINGLES0, SINGLES1, PAIR0, PAIR1, SINGLES1_SIM, PULSER
+    }
+
+    private List<TriggerType> passedTriggers = new ArrayList<TriggerType>();
+
+    public TriggerDecisionCalculator(EventHeader event) {
+        process(event);
+    }
+    
+    public void add(TriggerType type) {
+        passedTriggers.add(type);
+    }
+
+    public boolean passed(TriggerType type) {
+        for(TriggerType passed : passedTriggers) {
+            if( passed == type) 
+                return true;
+        }
+        return false;
+    }
+
+    public void process(EventHeader event) {
+        List<GenericObject> triggerBanks = event.get(GenericObject.class, "TriggerBank");
+        for (GenericObject triggerBank : triggerBanks) {
+            if(AbstractIntData.getTag(triggerBank) == SSPData.BANK_TAG) {
+                SSPData sspBank = new SSPData(triggerBank);
+                List<SSPCluster> sspClusters = sspBank.getClusters();
+                List<List<SinglesTrigger<SSPCluster>>> singleTriggers = constructSinglesTriggersFromSSP(sspClusters);
+                if( singleTriggers.get(1).size() > 0 )
+                    passedTriggers.add(TriggerType.SINGLES1_SIM);
+            } 
+            else if (AbstractIntData.getTag(triggerBank) == TIData.BANK_TAG) {
+                TIData tiData = new TIData(triggerBank);
+                if(tiData.isSingle0Trigger())
+                    passedTriggers.add(TriggerType.SINGLES0);
+                else if(tiData.isSingle1Trigger())
+                    passedTriggers.add(TriggerType.SINGLES1);
+                else if(tiData.isPair0Trigger())
+                    passedTriggers.add(TriggerType.PAIR0);
+                else if(tiData.isPair1Trigger())
+                    passedTriggers.add(TriggerType.PAIR1);
+                else if(tiData.isPulserTrigger()) 
+                    passedTriggers.add(TriggerType.PULSER);
+            }
+        }      
+    }
+    
+    
+    static public List<List<SinglesTrigger<SSPCluster>>> constructSinglesTriggersFromSSP(List<SSPCluster> clusters) {
+        
+        List<List<SinglesTrigger<SSPCluster>>> triggers = new ArrayList<List<SinglesTrigger<SSPCluster>>>(2); 
+        // Instantiate the triggers lists.
+        for(int triggerNum = 0; triggerNum < 2; triggerNum++) 
+            triggers.add(new ArrayList<SinglesTrigger<SSPCluster>>());
+        
+    
+        
+        final double ENERGY_CUT_LOW[] = {0.5,0.0}; 
+        final double ENERGY_CUT_HIGH[] = {8.191,8.191}; 
+        final int HIT_COUNT_CUT_LOW[] = {0,0}; 
+        final boolean singlesCutsEnabled_ENERGY_MIN[] = {true,true};
+        final boolean singlesCutsEnabled_ENERGY_MAX[] = {true,true};
+        final boolean singlesCutsEnabled_HIT_COUNT[] = {true,true};
+       
+        
+        for(SSPCluster cluster : clusters) {
+           
+            triggerLoop:
+            for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+                // For a cluster to have formed it is assumed to have
+                // passed the cluster seed energy cuts. This can not
+                // be verified since the SSP bank does not report
+                // individual hit. 
+                boolean passSeedLow = true;
+                boolean passSeedHigh = true;
+                
+                // The remaining cuts may be acquired from trigger module.
+                boolean passClusterLow = cluster.getEnergy() >= ENERGY_CUT_LOW[triggerNum] ? true : false; 
+                boolean passClusterHigh = cluster.getEnergy() <= ENERGY_CUT_HIGH[triggerNum] ? true : false; 
+                boolean passHitCount = cluster.getHitCount() >= HIT_COUNT_CUT_LOW[triggerNum] ? true : false; 
+                
+                // Make a trigger to store the results.
+                SinglesTrigger<SSPCluster> trigger = new SinglesTrigger<SSPCluster>(cluster, triggerNum);
+                trigger.setStateSeedEnergyLow(passSeedLow);
+                trigger.setStateSeedEnergyHigh(passSeedHigh);
+                trigger.setStateClusterEnergyLow(passClusterLow);
+                trigger.setStateClusterEnergyHigh(passClusterHigh);
+                trigger.setStateHitCount(passHitCount);
+                
+                // A trigger will only be reported by the SSP if it
+                // passes all of the enabled cuts for that trigger.
+                // Check whether this trigger meets these conditions.
+                // Set the singles cut statuses.
+                if(singlesCutsEnabled_ENERGY_MIN[triggerNum] && !trigger.getStateClusterEnergyLow()) {
+                    continue triggerLoop;
+                } if(singlesCutsEnabled_ENERGY_MAX[triggerNum] && !trigger.getStateClusterEnergyHigh()) {
+                    continue triggerLoop;
+                } if(singlesCutsEnabled_HIT_COUNT[triggerNum] && !trigger.getStateHitCount()) {
+                    continue triggerLoop;
+                }
+                
+                // If all the necessary checks passed, store the new
+                // trigger for verification.
+                
+                triggers.get(triggerNum).add(trigger);
+            }
+        }
+        return triggers;
+    }
+    
+
+
+}

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use