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