Print

Print


Author: [log in to unmask]
Date: Tue Sep 20 14:34:51 2016
New Revision: 4485

Log:
Added ability to select trigger.

Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripEventDriver.java

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripEventDriver.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripEventDriver.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripEventDriver.java	Tue Sep 20 14:34:51 2016
@@ -3,6 +3,8 @@
 import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
+import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.TIData;
 import org.lcsim.detector.DetectorElementStore;
 import org.lcsim.detector.IDetectorElement;
 import org.lcsim.detector.identifier.IExpandedIdentifier;
@@ -12,6 +14,7 @@
 import org.lcsim.detector.tracker.silicon.SiSensor;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
 import org.lcsim.event.RawTrackerHit;
 import org.lcsim.event.Track;
 import org.lcsim.event.TrackerHit;
@@ -26,6 +29,8 @@
  */
 public class StripEventDriver extends Driver
 {
+
+    String _triggerType = "all";//allowed types are "" (blank) or "all", singles0, singles1, pairs0,pairs1
 
     private int _minNumberOfTracks = 0;
     private int _minNumberOfHitsOnTrack = 0;
@@ -41,7 +46,7 @@
     private boolean _selectBottomClusters = false;
 
     private String _clusterCollectionName = "EcalClusters";
-    
+
     private boolean _selectAllLayers = false;
     private int _requireNLayers = 12;
     private boolean _selectTopHits = false;
@@ -53,93 +58,106 @@
         boolean skipEvent = false;
         int nTracks = 0;
 
-        if (event.hasCollection(Track.class, "MatchedTracks")) {
-            nTracks = event.get(Track.class, "MatchedTracks").size();
-            if (nTracks >= _minNumberOfTracks) {
-                List<Track> tracks = event.get(Track.class, "MatchedTracks");
-                for (Track t : tracks) {
-                    int nhits = t.getTrackerHits().size();
-                    if (nhits < _minNumberOfHitsOnTrack) {
-                        skipEvent = true;
-                    }
-                }
-            } else {
-                skipEvent = true;
-            }
-        }
-        if (event.hasCollection(Vertex.class, "UnconstrainedV0Vertices")) {
-            int nVertices = event.get(Vertex.class, "UnconstrainedV0Vertices").size();
-            if (nVertices < _minNumberOfUnconstrainedV0Vertices) {
-                skipEvent = true;
-            }
-        }
-        if (event.hasCollection(TrackerHit.class, "StripClusterer_SiTrackerHitStrip1D")) {
-            int nHits = event.get(TrackerHit.class, "StripClusterer_SiTrackerHitStrip1D").size();
-            if (nHits < _minNumberOfStripHits) {
-                skipEvent = true;
-            }
-            if (nHits > _maxNumberOfStripHits) {
-                skipEvent = true;
-            }
-
-            // add capability to require all tracking layers to have been hit
-            if (!skipEvent && _selectAllLayers) {
-                setupSensors(event);
-                Set<Integer> topLayers = new TreeSet<Integer>();
-                Set<Integer> bottomLayers = new TreeSet<Integer>();
-                List<TrackerHit> hits = event.get(TrackerHit.class, "StripClusterer_SiTrackerHitStrip1D");
-                for (TrackerHit hit : hits) {
-                    List rawHits = hit.getRawHits();
-                    HpsSiSensor sensor = null;
-                    for (Object o : rawHits) {
-                        RawTrackerHit rth = (RawTrackerHit) o;
-                        sensor = (HpsSiSensor) rth.getDetectorElement();
-                    }
-                    String layerName = sensor.getName();
-                    if (layerName.contains("t_")) {
-                        topLayers.add(sensor.getLayerNumber());
-                    } else {
-                        bottomLayers.add(sensor.getLayerNumber());
-                    }
-                }
-                if(_selectTopHits)
-                {
-                  if(topLayers.size() != _requireNLayers) skipEvent = true;  
-                }
-                if(_selectBottomHits)
-                {
-                  if(bottomLayers.size() != _requireNLayers) skipEvent = true;  
-                }
+        if (!matchTrigger(event)) {
+            skipEvent = true;
+        } else {
+            if (event.hasCollection(Track.class, "MatchedTracks")) {
+                nTracks = event.get(Track.class, "MatchedTracks").size();
+                if (nTracks >= _minNumberOfTracks) {
+                    List<Track> tracks = event.get(Track.class, "MatchedTracks");
+                    for (Track t : tracks) {
+                        int nhits = t.getTrackerHits().size();
+                        if (nhits < _minNumberOfHitsOnTrack) {
+                            skipEvent = true;
+                        }
+                    }
+                } else {
+                    skipEvent = true;
+                }
+            }
+            if (event.hasCollection(Vertex.class, "UnconstrainedV0Vertices")) {
+                int nVertices = event.get(Vertex.class, "UnconstrainedV0Vertices").size();
+                if (nVertices < _minNumberOfUnconstrainedV0Vertices) {
+                    skipEvent = true;
+                }
+            }
+            if (event.hasCollection(TrackerHit.class, "StripClusterer_SiTrackerHitStrip1D")) {
+                int nHits = event.get(TrackerHit.class, "StripClusterer_SiTrackerHitStrip1D").size();
+                if (nHits < _minNumberOfStripHits) {
+                    skipEvent = true;
+                }
+                if (nHits > _maxNumberOfStripHits) {
+                    skipEvent = true;
+                }
+
+                // add capability to require all tracking layers to have been hit
+                if (!skipEvent && _selectAllLayers) {
+                    setupSensors(event);
+                    Set<Integer> topLayers = new TreeSet<Integer>();
+                    Set<Integer> bottomLayers = new TreeSet<Integer>();
+                    List<TrackerHit> hits = event.get(TrackerHit.class, "StripClusterer_SiTrackerHitStrip1D");
+                    for (TrackerHit hit : hits) {
+                        List rawHits = hit.getRawHits();
+                        HpsSiSensor sensor = null;
+                        for (Object o : rawHits) {
+                            RawTrackerHit rth = (RawTrackerHit) o;
+                            sensor = (HpsSiSensor) rth.getDetectorElement();
+                        }
+                        String layerName = sensor.getName();
+                        if (layerName.contains("t_")) {
+                            topLayers.add(sensor.getLayerNumber());
+                        } else {
+                            bottomLayers.add(sensor.getLayerNumber());
+                        }
+                    }
+                    if (_selectTopHits) {
+                        if (topLayers.size() != _requireNLayers) {
+                            skipEvent = true;
+                        }
+                    }
+                    if (_selectBottomHits) {
+                        if (bottomLayers.size() != _requireNLayers) {
+                            skipEvent = true;
+                        }
+                    }
                 // if we don't explicitly request top or bottom, 
-                // only keep event if either the top or the bottom has all twelve layers hit
-                if(!_selectTopHits && !_selectBottomHits)
-                {
-                    skipEvent = true; 
-                    if(topLayers.size() == _requireNLayers) skipEvent = false;
-                    if(bottomLayers.size() == _requireNLayers) skipEvent = false;     
-                }
-            }
-        }
-        if (event.hasCollection(Cluster.class, _clusterCollectionName)) {
-            List<Cluster> clusters = event.get(Cluster.class, _clusterCollectionName);
-            int nclusters = clusters.size();
-            if (nclusters < _minNumberOfClusters) {
-                skipEvent = true;
-            }
-            if (nclusters > _maxNumberOfClusters) {
-                skipEvent = true;
-            }
-            for (Cluster clus : clusters) {
-                double e = clus.getEnergy();
-                if (e < _minClusterEnergy) {
-                    skipEvent = true;
-                }
-                if (e > _maxClusterEnergy) {
-                    skipEvent = true;
-                }
-                double y = clus.getPosition()[1];
-                if(_selectTopClusters && y<0) skipEvent = true;
-                if(_selectBottomClusters && y>0) skipEvent = true;
+                    // only keep event if either the top or the bottom has all twelve layers hit
+                    if (!_selectTopHits && !_selectBottomHits) {
+                        skipEvent = true;
+                        if (topLayers.size() == _requireNLayers) {
+                            skipEvent = false;
+                        }
+                        if (bottomLayers.size() == _requireNLayers) {
+                            skipEvent = false;
+                        }
+                    }
+                }
+            }
+            if (event.hasCollection(Cluster.class, _clusterCollectionName)) {
+                List<Cluster> clusters = event.get(Cluster.class, _clusterCollectionName);
+                int nclusters = clusters.size();
+                if (nclusters < _minNumberOfClusters) {
+                    skipEvent = true;
+                }
+                if (nclusters > _maxNumberOfClusters) {
+                    skipEvent = true;
+                }
+                for (Cluster clus : clusters) {
+                    double e = clus.getEnergy();
+                    if (e < _minClusterEnergy) {
+                        skipEvent = true;
+                    }
+                    if (e > _maxClusterEnergy) {
+                        skipEvent = true;
+                    }
+                    double y = clus.getPosition()[1];
+                    if (_selectTopClusters && y < 0) {
+                        skipEvent = true;
+                    }
+                    if (_selectBottomClusters && y > 0) {
+                        skipEvent = true;
+                    }
+                }
             }
         }
         if (skipEvent) {
@@ -204,7 +222,7 @@
     {
         _clusterCollectionName = s;
     }
-    
+
     public void setSelectTopHits(boolean b)
     {
         _selectTopHits = b;
@@ -214,7 +232,7 @@
     {
         _selectBottomHits = b;
     }
-    
+
     public void setSelectTopClusters(boolean b)
     {
         _selectTopClusters = b;
@@ -223,18 +241,18 @@
     public void setSelectBottomClusters(boolean b)
     {
         _selectBottomClusters = b;
-    }    
-    
+    }
+
     public void setSelectAllLayers(boolean b)
     {
         _selectAllLayers = b;
     }
-    
+
     public void setSelectNumberOfLayers(int i)
     {
         _requireNLayers = i;
     }
-    
+
     private void setupSensors(EventHeader event)
     {
         List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, "SVTRawTrackerHits");
@@ -271,4 +289,51 @@
         }
     }
 
+    public void setTriggerType(String type)
+    {
+        _triggerType = type;
+    }
+
+    public boolean matchTriggerType(TIData triggerData)
+    {
+        if (_triggerType.contentEquals("") || _triggerType.contentEquals("all")) {
+            return true;
+        }
+        if (triggerData.isSingle0Trigger() && _triggerType.contentEquals("singles0")) {
+            return true;
+        }
+        if (triggerData.isSingle1Trigger() && _triggerType.contentEquals("singles1")) {
+            return true;
+        }
+        if (triggerData.isPair0Trigger() && _triggerType.contentEquals("pairs0")) {
+            return true;
+        }
+        if (triggerData.isPair1Trigger() && _triggerType.contentEquals("pairs1")) {
+            return true;
+        }
+        if (triggerData.isPulserTrigger() && _triggerType.contentEquals("pulser")) {
+            return true;
+        }
+        return false;
+
+    }
+
+    public boolean matchTrigger(EventHeader event)
+    {
+        boolean match = true;
+        if (event.hasCollection(GenericObject.class, "TriggerBank")) {
+            List<GenericObject> triggerList = event.get(GenericObject.class, "TriggerBank");
+            for (GenericObject data : triggerList) {
+                if (AbstractIntData.getTag(data) == TIData.BANK_TAG) {
+                    TIData triggerData = new TIData(data);
+                    if (!matchTriggerType(triggerData))//only process singles0 triggers...
+                    {
+                        match = false;
+                    }
+                }
+            }
+        }
+        return match;
+    }
+
 }