View Javadoc

1   package org.lcsim.recon.util;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import org.lcsim.event.EventHeader;
7   import org.lcsim.event.Track;
8   import org.lcsim.event.TrackerHit;
9   import org.lcsim.util.Driver;
10  
11  /**
12   * Driver to filter and remove all tracker hits from a given track collection that
13   * did not contribute to any track. In addition, allows to clear the RawTrackerHit
14   * lists to allow writing out events without those collections.
15   * 
16   * @author <a href="mailto:christian.grefe@cern.ch">Christian Grefe</a>
17   * 
18   */
19  public class RemoveUnusedTrackerHits extends Driver {
20  
21  	protected String trackHitCollection;
22  	protected String trackCollection;
23  	protected boolean clearRawTrackerHits;
24  	
25  	public RemoveUnusedTrackerHits() {
26  		trackHitCollection = "HelicalTrackHits";
27  		trackCollection = "Tracks";
28  		clearRawTrackerHits = true;
29  	}
30  	
31  	public void setTrackCollection(String trackCollection) {
32  		this.trackCollection = trackCollection;
33  	}
34  	
35  	public void setTrackHitCollection(String trackHitCollection) {
36  		this.trackHitCollection = trackHitCollection;
37  	}
38  	
39  	public void setClearRawTrackerHits(boolean clearRawTrackerHits) {
40  		this.clearRawTrackerHits = clearRawTrackerHits;
41  	}
42  	
43  	@Override
44  	protected void process(EventHeader event) {
45  		List<TrackerHit> trackerHits = event.get(TrackerHit.class, trackHitCollection);
46  		List<Track> tracks = event.get(Track.class, trackCollection);
47  		List<TrackerHit> unusedTrackerHits = new ArrayList<TrackerHit>();
48  		unusedTrackerHits.addAll(trackerHits);
49  		
50  		for (Track track : tracks) {
51  			unusedTrackerHits.removeAll(track.getTrackerHits());
52  		}
53  		
54  		trackerHits.removeAll(unusedTrackerHits);
55  		
56  		if (clearRawTrackerHits) {
57  			for (TrackerHit hit : trackerHits) {
58  				hit.getRawHits().clear();
59  			}
60  		}
61  	}
62  	
63  }