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; + } + }