Print

Print


Author: [log in to unmask]
Date: Thu Sep 24 15:31:16 2015
New Revision: 3707

Log:
add ssp results and use result objects to xcheck

Added:
    java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnSSPDriver.java
Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java
    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
 =============================================================================
--- 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	Thu Sep 24 15:31:16 2015
@@ -8,15 +8,21 @@
 import hep.aida.IPlotter;
 import hep.aida.IPlotterStyle;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.hps.analysis.trigger.util.SinglesTrigger;
 import org.hps.analysis.trigger.util.TriggerDecisionCalculator;
 import org.hps.analysis.trigger.util.TriggerDecisionCalculator.TriggerType;
+import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.SSPCluster;
+import org.hps.record.triggerbank.SSPData;
 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;
@@ -32,6 +38,10 @@
     private final String ecalClusterCollectionName = "EcalClustersCorr";
     IPlotter plotter;
     IPlotter plotter2;
+    IPlotter plotter3;
+    IPlotter plotter33;
+    IPlotter plotter333;
+
     private AIDA aida = AIDA.defaultInstance();
     IHistogram1D clusterE_Random;
     IHistogram1D clusterE_RandomSingles1;
@@ -39,8 +49,14 @@
     IHistogram1D clusterEOne_RandomSingles1;
     IHistogram1D clusterE_RandomSingles1_trigEff;
     IHistogram1D clusterEOne_RandomSingles1_trigEff;
-    private boolean showPlots = false;
+    IHistogram1D clusterEOne_RandomSingles1_thetaY_trigEff[][] = new IHistogram1D[2][5];
+    IHistogram1D clusterEOne_Random_thetaY[][] = new IHistogram1D[2][5];
+    IHistogram1D clusterEOne_RandomSingles1_thetaY[][] = new IHistogram1D[2][5];
+    
+    private boolean showPlots = true;
     private int nEventsProcessed = 0;
+    private int nSimSingles1 = 0;
+    private int nResultSingles1 = 0;
     
     /**
      * 
@@ -58,22 +74,42 @@
         IPlotterStyle style = plotter.style();
         style.dataStyle().fillStyle().setColor("yellow");
         style.dataStyle().errorBarStyle().setVisible(false);
-        plotter.createRegions(2, 2);
-        clusterE_Random = aida.histogram1D("clusterE_Random", 50, 0., 1.5);
-        clusterE_RandomSingles1 = aida.histogram1D("clusterE_RandomSingles1", 50, 0., 1.5);
+        plotter.createRegions(1, 3);
+        clusterE_Random = aida.histogram1D("clusterE_Random", 50, 0., 1.3);
+        clusterE_RandomSingles1 = aida.histogram1D("clusterE_RandomSingles1", 50, 0., 1.3);
         plotter.setTitle("Cluster E efficiency");
         plotter.region(0).plot(clusterE_Random);
         plotter.region(1).plot(clusterE_RandomSingles1);
         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.createRegions(1, 3);
+        clusterEOne_Random = aida.histogram1D("clusterEOne_Random", 50, 0., 1.3);
+        clusterEOne_RandomSingles1 = aida.histogram1D("clusterEOne_RandomSingles1", 50, 0., 1.3);
         plotter2.region(0).plot(clusterEOne_Random);
         plotter2.region(1).plot(clusterEOne_RandomSingles1);
         if(showPlots) plotter2.show();
         
+        plotter3 = fac.createPlotterFactory().create("Cluster energy One ThetaY");
+        plotter3.createRegions(2, 5);
+        plotter33 = fac.createPlotterFactory().create("Cluster energy One ThetaY");
+        plotter33.createRegions(2, 5);
+        plotter333 = fac.createPlotterFactory().create("Trigger Efficiency One ThetaY");
+        plotter333.createRegions(2, 5);
+        int r = 0;
+        for(int i=0; i<2; ++i) {
+            for( int y=1; y<6; ++y) {
+                clusterEOne_Random_thetaY[i][y-1] = aida.histogram1D("clusterEOne_Random_thetaY" + y + (i==0?"top":"bottom") , 50, 0., 1.3);
+                clusterEOne_RandomSingles1_thetaY[i][y-1] = aida.histogram1D("clusterEOne_RandomSingles1_thetaY" + y + (i==0?"top":"bottom") , 50, 0., 1.3);
+                plotter3.region(r).plot(clusterEOne_Random_thetaY[i][y-1]);
+                plotter33.region(r).plot(clusterEOne_RandomSingles1_thetaY[i][y-1]);
+                r++;
+            }
+        }
+        if(showPlots) plotter3.show();
+        if(showPlots) plotter33.show();
+        if(showPlots) plotter333.show();
+        
     }
     
     @Override
@@ -90,8 +126,15 @@
         if(triggerDecisions.passed(TriggerType.SINGLES1))
             logger.fine("Singles1 trigger fired");
         
-        if(triggerDecisions.passed(TriggerType.SINGLES1_SIM))
+        if(triggerDecisions.passed(TriggerType.SINGLES1_SIM)) {
             logger.fine("Sim Singles1 trigger fired");
+            nSimSingles1++;
+        }
+        
+        if(triggerDecisions.passed(TriggerType.SINGLES1_RESULTS)) {
+            logger.fine("Results Singles1 trigger fired");
+            nResultSingles1++;
+        }
         
         
         List<Cluster> clusters = null;
@@ -116,6 +159,12 @@
             clusterE_Random.fill(clusterEMax.getEnergy());
             if(clusters.size() == 1) {
                 clusterEOne_Random.fill(clusterEMax.getEnergy());
+                int clusterPosIdy = clusterEMax.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+                if( Math.abs(clusterPosIdy) > 5 ) 
+                    throw new RuntimeException("invalid crystal position " + clusterPosIdy);
+                int half = clusterPosIdy > 0 ? 0 : 1;
+                clusterEOne_Random_thetaY[half][Math.abs(clusterPosIdy)-1].fill(clusterEMax.getEnergy());
+                
             }
         }
 
@@ -126,6 +175,10 @@
                 clusterE_RandomSingles1.fill(clusterEMax.getEnergy());
                 if(clusters.size() == 1) 
                     clusterEOne_RandomSingles1.fill(clusterEMax.getEnergy());
+                    int clusterPosIdy = clusterEMax.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+                    int half = clusterPosIdy > 0 ? 0 : 1;
+                    clusterEOne_RandomSingles1_thetaY[half][Math.abs(clusterPosIdy)-1].fill(clusterEMax.getEnergy());
+
             }
         }
 
@@ -137,12 +190,41 @@
     @Override
     protected void endOfData() {
         logger.info("Processed " + nEventsProcessed);
+        logger.info("nResSingles1 " + nResultSingles1 + " nSimSingles1 " + nSimSingles1);
         clusterE_RandomSingles1_trigEff = aida.histogramFactory().divide("trigEff", clusterE_RandomSingles1, clusterE_Random);
         clusterEOne_RandomSingles1_trigEff = aida.histogramFactory().divide("trigEffEone", clusterEOne_RandomSingles1, clusterEOne_Random);
+        int r = 0;
+        for(int i=0;i<2;++i) {
+            for(int y=0;y<5;++y) {
+                clusterEOne_RandomSingles1_thetaY_trigEff[i][y] = aida.histogramFactory().divide("trigEffEone", clusterEOne_Random_thetaY[i][y], clusterEOne_RandomSingles1_thetaY[i][y]);
+                plotter333.region(r);
+                r++;
+            }
+        }
         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);
-        
-    }
+        plotter2.region(2).plot(clusterEOne_RandomSingles1_trigEff);
+        
+    }
+    
+    private List<SSPCluster> getSingles1SSPClusters(EventHeader event) {
+        List<SSPCluster> clusters = new ArrayList<SSPCluster>();
+        List<GenericObject> triggerBanks = event.get(GenericObject.class, "TriggerBank");
+        for (GenericObject triggerBank : triggerBanks) {
+            if(AbstractIntData.getTag(triggerBank) == SSPData.BANK_TAG) {
+                SSPData sspBank = new SSPData(triggerBank);
+                
+                // recompute the decision for singles1
+                List<SSPCluster> sspClusters = sspBank.getClusters();
+                List<List<SinglesTrigger<SSPCluster>>> singleTriggers = TriggerDecisionCalculator.constructSinglesTriggersFromSSP(sspClusters);
+                for(SinglesTrigger<SSPCluster> singleTrigger : singleTriggers.get(1)) {
+                    clusters.add( singleTrigger.getTriggerSource() );
+                }
+            }
+        }
+        return clusters;
+    }
+    
 
 }

Added: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnSSPDriver.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnSSPDriver.java	(added)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnSSPDriver.java	Thu Sep 24 15:31:16 2015
@@ -0,0 +1,231 @@
+/**
+ * 
+ */
+package org.hps.analysis.trigger;
+
+import hep.aida.IAnalysisFactory;
+import hep.aida.IHistogram1D;
+import hep.aida.IPlotter;
+import hep.aida.IPlotterStyle;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.hps.analysis.trigger.util.SinglesTrigger;
+import org.hps.analysis.trigger.util.TriggerDecisionCalculator;
+import org.hps.analysis.trigger.util.TriggerDecisionCalculator.TriggerType;
+import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.SSPCluster;
+import org.hps.record.triggerbank.SSPData;
+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;
+import org.lcsim.util.log.LogUtil;
+
+/**
+ * @author Per Hansson Adrian <[log in to unmask]>, Matt Solt <[log in to unmask]>
+ *
+ */
+public class TriggerTurnOnSSPDriver extends Driver {
+    
+    private static Logger logger = LogUtil.create(TriggerTurnOnSSPDriver.class, new BasicLogFormatter(), Level.FINE);
+    private final String ecalClusterCollectionName = "EcalClustersCorr";
+    IPlotter plotter;
+    IPlotter plotter2;
+    IPlotter plotter3;
+    IPlotter plotter33;
+    IPlotter plotter333;
+
+    private AIDA aida = AIDA.defaultInstance();
+    IHistogram1D clusterE_Random;
+    IHistogram1D clusterE_RandomSingles1;
+    IHistogram1D clusterEOne_Random;
+    IHistogram1D clusterEOne_RandomSingles1;
+    IHistogram1D clusterE_RandomSingles1_trigEff;
+    IHistogram1D clusterEOne_RandomSingles1_trigEff;
+    IHistogram1D clusterEOne_RandomSingles1_thetaY_trigEff[][] = new IHistogram1D[2][5];
+    IHistogram1D clusterEOne_Random_thetaY[][] = new IHistogram1D[2][5];
+    IHistogram1D clusterEOne_RandomSingles1_thetaY[][] = new IHistogram1D[2][5];
+    
+    private boolean showPlots = true;
+    private int nEventsProcessed = 0;
+    private int nSimSingles1 = 0;
+    private int nResultSingles1 = 0;
+    
+    /**
+     * 
+     */
+    public TriggerTurnOnSSPDriver() {
+    }
+    
+    @Override
+    protected void detectorChanged(Detector detector) {
+        
+        aida.tree().cd("/");
+        IAnalysisFactory fac = aida.analysisFactory();
+
+        plotter = fac.createPlotterFactory().create("Trigger efficiency SSP");
+        IPlotterStyle style = plotter.style();
+        style.dataStyle().fillStyle().setColor("yellow");
+        style.dataStyle().errorBarStyle().setVisible(false);
+        plotter.createRegions(1, 3);
+        clusterE_Random = aida.histogram1D("SSP_clusterE_Random", 50, 0., 1.3);
+        clusterE_RandomSingles1 = aida.histogram1D("SSP_clusterE_RandomSingles1", 50, 0., 1.3);
+        plotter.setTitle("Cluster E efficiency");
+        plotter.region(0).plot(clusterE_Random);
+        plotter.region(1).plot(clusterE_RandomSingles1);
+        if(showPlots) plotter.show();
+        
+        plotter2 = fac.createPlotterFactory().create("Trigger efficiency One SSP");
+        plotter2.createRegions(1, 3);
+        clusterEOne_Random = aida.histogram1D("SSP_clusterEOne_Random", 50, 0., 1.3);
+        clusterEOne_RandomSingles1 = aida.histogram1D("SSP_clusterEOne_RandomSingles1", 50, 0., 1.3);
+        plotter2.region(0).plot(clusterEOne_Random);
+        plotter2.region(1).plot(clusterEOne_RandomSingles1);
+        if(showPlots) plotter2.show();
+        
+        plotter3 = fac.createPlotterFactory().create("Cluster energy One ThetaY SSP");
+        plotter3.createRegions(2, 5);
+        plotter33 = fac.createPlotterFactory().create("Cluster energy One ThetaY SSP");
+        plotter33.createRegions(2, 5);
+        plotter333 = fac.createPlotterFactory().create("Trigger efficiency One ThetaY SSP");
+        plotter333.createRegions(2, 5);
+        int r = 0;
+        for(int i=0; i<2; ++i) {
+            for( int y=1; y<6; ++y) {
+                clusterEOne_Random_thetaY[i][y-1] = aida.histogram1D("SSP_clusterEOne_Random_thetaY" + y + (i==0?"top":"bottom") , 50, 0., 1.3);
+                clusterEOne_RandomSingles1_thetaY[i][y-1] = aida.histogram1D("SSP_clusterEOne_RandomSingles1_thetaY" + y + (i==0?"top":"bottom") , 50, 0., 1.3);
+                plotter3.region(r).plot(clusterEOne_Random_thetaY[i][y-1]);
+                plotter33.region(r).plot(clusterEOne_RandomSingles1_thetaY[i][y-1]);
+                r++;
+            }
+        }
+        if(showPlots) plotter3.show();
+        if(showPlots) plotter33.show();
+        if(showPlots) plotter333.show();
+        
+    }
+    
+    @Override
+    protected void process(EventHeader event) {
+
+        
+        TriggerDecisionCalculator triggerDecisions = new TriggerDecisionCalculator(event);
+        
+        if(!triggerDecisions.passed(TriggerType.PULSER))
+            return;
+        
+        logger.fine("pulser trigger fired");
+
+        if(triggerDecisions.passed(TriggerType.SINGLES1))
+            logger.fine("Singles1 trigger fired");
+        
+        if(triggerDecisions.passed(TriggerType.SINGLES1_SIM)) {
+            logger.fine("Sim Singles1 trigger fired");
+            nSimSingles1++;
+        }
+        
+        if(triggerDecisions.passed(TriggerType.SINGLES1_RESULTS)) {
+            logger.fine("Results Singles1 trigger fired");
+            nResultSingles1++;
+        }
+        
+        
+        
+        List<SSPCluster> clusters = null;
+        SSPCluster clusterEMax = null;
+        
+        clusters = this.getSingles1SSPClusters(event);
+        
+
+        if(clusters != null) {
+            for(SSPCluster cluster : clusters) {
+                if(clusterEMax != null) {
+                    if(cluster.getEnergy() > clusterEMax.getEnergy()) 
+                        clusterEMax = cluster;
+                } else {
+                    clusterEMax = cluster;
+                }
+            }
+        }
+
+        // fill denominator
+        if(clusterEMax!=null) {
+            clusterE_Random.fill(clusterEMax.getEnergy());
+            if(clusters.size() == 1) {
+                clusterEOne_Random.fill(clusterEMax.getEnergy());
+                int clusterPosIdy = clusterEMax.getYIndex();
+                if( Math.abs(clusterPosIdy) > 5 ) 
+                    throw new RuntimeException("invalid crystal position " + clusterPosIdy);
+                int half = clusterPosIdy > 0 ? 0 : 1;
+                clusterEOne_Random_thetaY[half][Math.abs(clusterPosIdy)-1].fill(clusterEMax.getEnergy());
+                
+            }
+        }
+
+        // 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());
+                    int clusterPosIdy = clusterEMax.getYIndex();
+                    int half = clusterPosIdy > 0 ? 0 : 1;
+                    clusterEOne_RandomSingles1_thetaY[half][Math.abs(clusterPosIdy)-1].fill(clusterEMax.getEnergy());
+
+            }
+        }
+
+        nEventsProcessed++;
+        
+
+    }
+    
+    @Override
+    protected void endOfData() {
+        logger.info("Processed " + nEventsProcessed);
+        logger.info("nResSingles1 " + nResultSingles1 + " nSimSingles1 " + nSimSingles1);
+        clusterE_RandomSingles1_trigEff = aida.histogramFactory().divide("trigEff", clusterE_RandomSingles1, clusterE_Random);
+        clusterEOne_RandomSingles1_trigEff = aida.histogramFactory().divide("trigEffEone", clusterEOne_RandomSingles1, clusterEOne_Random);
+        int r = 0;
+        for(int i=0;i<2;++i) {
+            for(int y=0;y<5;++y) {
+                clusterEOne_RandomSingles1_thetaY_trigEff[i][y] = aida.histogramFactory().divide("trigEffEone", clusterEOne_Random_thetaY[i][y], clusterEOne_RandomSingles1_thetaY[i][y]);
+                plotter333.region(r);
+                r++;
+            }
+        }
+        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);
+        plotter2.region(2).plot(clusterEOne_RandomSingles1_trigEff);
+        
+    }
+    
+    private List<SSPCluster> getSingles1SSPClusters(EventHeader event) {
+        List<SSPCluster> clusters = new ArrayList<SSPCluster>();
+        List<GenericObject> triggerBanks = event.get(GenericObject.class, "TriggerBank");
+        for (GenericObject triggerBank : triggerBanks) {
+            if(AbstractIntData.getTag(triggerBank) == SSPData.BANK_TAG) {
+                SSPData sspBank = new SSPData(triggerBank);
+                
+                // recompute the decision for singles1
+                List<SSPCluster> sspClusters = sspBank.getClusters();
+                List<List<SinglesTrigger<SSPCluster>>> singleTriggers = TriggerDecisionCalculator.constructSinglesTriggersFromSSP(sspClusters);
+                for(SinglesTrigger<SSPCluster> singleTrigger : singleTriggers.get(1)) {
+                    clusters.add( singleTrigger.getTriggerSource() );
+                }
+            }
+        }
+        return clusters;
+    }
+    
+
+}

Modified: 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	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDecisionCalculator.java	Thu Sep 24 15:31:16 2015
@@ -9,6 +9,7 @@
 import org.hps.record.triggerbank.AbstractIntData;
 import org.hps.record.triggerbank.SSPCluster;
 import org.hps.record.triggerbank.SSPData;
+import org.hps.record.triggerbank.SSPSinglesTrigger;
 import org.hps.record.triggerbank.TIData;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.GenericObject;
@@ -20,7 +21,7 @@
 public class TriggerDecisionCalculator {
 
     public enum TriggerType {
-        SINGLES0, SINGLES1, PAIR0, PAIR1, SINGLES1_SIM, PULSER
+        SINGLES0, SINGLES1, PAIR0, PAIR1, SINGLES1_SIM, PULSER, SINGLES1_RESULTS
     }
 
     private List<TriggerType> passedTriggers = new ArrayList<TriggerType>();
@@ -46,10 +47,29 @@
         for (GenericObject triggerBank : triggerBanks) {
             if(AbstractIntData.getTag(triggerBank) == SSPData.BANK_TAG) {
                 SSPData sspBank = new SSPData(triggerBank);
+                
+                // recompute the decision for singles1
                 List<SSPCluster> sspClusters = sspBank.getClusters();
                 List<List<SinglesTrigger<SSPCluster>>> singleTriggers = constructSinglesTriggersFromSSP(sspClusters);
                 if( singleTriggers.get(1).size() > 0 )
                     passedTriggers.add(TriggerType.SINGLES1_SIM);
+                
+                // "use trigger results objects"
+                List<SSPSinglesTrigger> triggerResults = sspBank.getSinglesTriggers();
+                boolean passedSingles1 = false;
+                resultLoop:
+                for(SSPSinglesTrigger result : triggerResults) {
+                    // Check if this is a singles 1 trigger result.
+                    if(result.isSecondTrigger()) {
+                        // Check if the all the cuts passed.
+                        if(result.passCutEnergyMin() && result.passCutEnergyMax() && result.passCutHitCount()) {
+                            passedSingles1 = true;
+                            break resultLoop;
+                        }
+                    }
+                }
+                if(passedSingles1)
+                    passedTriggers.add(TriggerType.SINGLES1_RESULTS);
             } 
             else if (AbstractIntData.getTag(triggerBank) == TIData.BANK_TAG) {
                 TIData tiData = new TIData(triggerBank);