hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.10 -r1.11
--- TrackerReconDriver.java 22 Feb 2012 21:17:25 -0000 1.10
+++ TrackerReconDriver.java 1 Mar 2012 22:46:09 -0000 1.11
@@ -23,256 +23,256 @@
* It is intended to work with the {@link TrackerDigiDriver} digitization Driver.
*
* @author jeremym
- * @version $Id: TrackerReconDriver.java,v 1.10 2012/02/22 21:17:25 jeremy Exp $
+ * @version $Id: TrackerReconDriver.java,v 1.11 2012/03/01 22:46:09 jeremy Exp $
*/
public final class TrackerReconDriver extends Driver
{
- // Debug flag.
- private final static boolean DEBUG = true;
-
- // Tracks found across all events.
- int ntracks = 0;
-
- // Number of events processed.
- int nevents = 0;
-
- // Cache detector object.
- Detector detector = null;
-
+ // Debug flag.
+ private final static boolean DEBUG = true;
+
+ // Tracks found across all events.
+ int ntracks = 0;
+
+ // Number of events processed.
+ int nevents = 0;
+
+ // Cache detector object.
+ Detector detector = null;
+
// Default B-field value.
private double bfield = 0.5;
-
+
// Name of the SVT subdetector.
private String subdetectorName = "Tracker";
-
+
// SimTrackerHit input collection for readout cleanup.
private String simTrackerHitCollectionName = "TrackerHits";
-
+
// Tracking strategies resource path.
private String strategyResource = "HPS-Test-1pt3.xml";
-
+
// Output track collection.
private String trackCollectionName = "MatchedTracks";
-
+
// HelicalTrackHit input collection.
private String stInputCollectionName = "RotatedHelicalTrackHits";
-
+
// Output hit collection for HelicalTrackHits.
private String hthOutputCollectionName = "HelicalTrackHits";
-
+
// Input strip hits collection from digi.
private String stripHitsCollectionName = "StripClusterer_SiTrackerHitStrip1D";
-
+
// Hit relations output collection.
- private String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations";
-
- // Track to MC relations output collection.
- private String helicalTrackMCRelationsCollectionName = "HelicalTrackMCRelations";
-
- // Max strip separation when making HelicalTrackHits.
- private double stripMaxSeparation = 10.01;
-
- // Tolerance factor when making HelicalTrackHits.
- private double stripTolerance = 0.01;
-
+ private String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations";
+
+ // Track to MC relations output collection.
+ private String helicalTrackMCRelationsCollectionName = "HelicalTrackMCRelations";
+
+ // Max strip separation when making HelicalTrackHits.
+ private double stripMaxSeparation = 10.01;
+
+ // Tolerance factor when making HelicalTrackHits.
+ private double stripTolerance = 0.01;
+
public TrackerReconDriver()
{}
-
+
public void setSubdetectorName(String subdetectorName)
{
- this.subdetectorName = subdetectorName;
+ this.subdetectorName = subdetectorName;
}
-
+
/**
* Set the tracking strategy resource.
* @param strategyResource The absolute path to the strategy resource in the hps-java jar.
*/
public void setStrategyResource(String strategyResource)
{
- this.strategyResource = strategyResource;
+ this.strategyResource = strategyResource;
}
-
- public void setHelicalTrackHitRelationsCollectionName(String helicalTrackHitRelationsCollectionName)
- {
- this.helicalTrackHitRelationsCollectionName = helicalTrackHitRelationsCollectionName;
- }
-
- public void setHelicalTrackMCRelationsCollectionName(String helicalTrackMCRelationsCollectionName)
- {
- this.helicalTrackMCRelationsCollectionName = helicalTrackMCRelationsCollectionName;
- }
-
+
+ public void setHelicalTrackHitRelationsCollectionName(String helicalTrackHitRelationsCollectionName)
+ {
+ this.helicalTrackHitRelationsCollectionName = helicalTrackHitRelationsCollectionName;
+ }
+
+ public void setHelicalTrackMCRelationsCollectionName(String helicalTrackMCRelationsCollectionName)
+ {
+ this.helicalTrackMCRelationsCollectionName = helicalTrackMCRelationsCollectionName;
+ }
+
public void setInputHitCollectionName(String inputHitCollectionName)
{
- this.stInputCollectionName = inputHitCollectionName;
+ this.stInputCollectionName = inputHitCollectionName;
}
-
+
public void setOutputHitCollectionName(String outputHitCollectionName)
{
- this.hthOutputCollectionName = outputHitCollectionName;
+ this.hthOutputCollectionName = outputHitCollectionName;
}
-
+
public void setStripHitsCollectionName(String stripHitsCollectionName)
{
- this.stripHitsCollectionName = stripHitsCollectionName;
+ this.stripHitsCollectionName = stripHitsCollectionName;
}
-
+
public void setTrackCollectionName(String trackCollectionName)
{
- this.trackCollectionName = trackCollectionName;
+ this.trackCollectionName = trackCollectionName;
}
-
+
public void setStripMaxSeparation(double stripMaxSeparation)
{
- this.stripMaxSeparation = stripMaxSeparation;
+ this.stripMaxSeparation = stripMaxSeparation;
}
-
+
public void setStripTolerance(double stripTolerance)
{
- this.stripTolerance = stripTolerance;
+ this.stripTolerance = stripTolerance;
}
-
+
/**
* Set the SimTrackerHit collection to be used for tracking.
* @param simTrackerHitCollectionName The name of the SimTrackerHit collection in the event.
*/
public void setSimTrackerHitCollectionName(String simTrackerHitCollectionName)
{
- this.simTrackerHitCollectionName = simTrackerHitCollectionName;
+ this.simTrackerHitCollectionName = simTrackerHitCollectionName;
}
-
+
/**
* This is used to setup the Drivers after XML config.
*/
public void detectorChanged(Detector detector)
{
- // Cache Detector object.
- this.detector = detector;
-
- // Get B-field Y with no sign. Seed Tracker doesn't like signed B-field components.
- // FIXME Is this always right?
- this.bfield = Math.abs((detector.getFieldMap().getField(new BasicHep3Vector(0,0,0)).y()));
- if (DEBUG)
- System.out.println("Set B-field to " + this.bfield);
-
- initialize();
-
- super.detectorChanged(detector);
+ // Cache Detector object.
+ this.detector = detector;
+
+ // Get B-field Y with no sign. Seed Tracker doesn't like signed B-field components.
+ // FIXME Is this always right?
+ this.bfield = Math.abs((detector.getFieldMap().getField(new BasicHep3Vector(0,0,0)).y()));
+ if (DEBUG)
+ System.out.println("Set B-field to " + this.bfield);
+
+ initialize();
+
+ super.detectorChanged(detector);
}
-
+
/**
* Setup all the child Drivers necessary for track reconstruction.
*/
private void initialize()
{
- //
- // 1) Driver to create HelicalTrackHits expected by Seedtracker.
- //
- // TODO Make this step its own separate Driver??? (Matt)
-
- // Setup default stereo pairings, which should work for even number of modules.
- List<SiTrackerModule> modules = detector.getSubdetector(subdetectorName).getDetectorElement().findDescendants(SiTrackerModule.class);
- if (modules.size() == 0)
- throw new RuntimeException("No SiTrackerModules found in detector.");
- int nmodules = modules.size();
- if (nmodules % 2 != 0)
- throw new RuntimeException("Don't know how to do stereo pairing for odd number of modules.");
- List<int[]> pairs = new ArrayList<int[]>();
- for (int i=1; i<=(nmodules/2)-1; i+=2)
- {
- int[] pair = {i, i+1};
- if (DEBUG)
- System.out.println("Adding stereo pair: " + pair[0] + ", " + pair[1]);
- pairs.add(pair);
- }
-
- // Create the Driver.
- HPSHelicalTrackHitDriver hthdriver = new HPSHelicalTrackHitDriver();
- hthdriver.addCollection(stripHitsCollectionName);
- hthdriver.OutputCollection(hthOutputCollectionName);
- hthdriver.HitRelationName(helicalTrackHitRelationsCollectionName);
- hthdriver.MCRelationName(helicalTrackMCRelationsCollectionName);
- for (int[] pair : pairs)
- {
- hthdriver.setStereoPair(subdetectorName, pair[0], pair[1]);
- }
- hthdriver.setMaxSeperation(stripMaxSeparation);
- hthdriver.setTolerance(stripTolerance); // user parameter?
- hthdriver.setTransformToTracking(true);
- add(hthdriver);
-
- //
- // 2) Driver to run Seed Tracker.
- //
-
- if (!strategyResource.startsWith("/"))
- strategyResource = "/" + strategyResource;
- List<SeedStrategy> sFinallist = StrategyXMLUtils.getStrategyListFromInputStream(
- this.getClass().getResourceAsStream(strategyResource));
- SeedTracker stFinal = new SeedTracker(sFinallist);
- HPSTransformations hpstrans = new HPSTransformations();
- stFinal.setMaterialManagerTransform(hpstrans.getTransform());
- stFinal.setInputCollectionName(stInputCollectionName);
- stFinal.setTrkCollectionName(trackCollectionName);
- stFinal.setBField(bfield);
- stFinal.setSectorParams(false);
- add(stFinal);
-
- //
- // 3) Cleanup the readouts for next event.
- //
- List<String> readoutCleanup = new ArrayList<String>();
- readoutCleanup.add(this.simTrackerHitCollectionName);
- add(new ReadoutCleanupDriver(readoutCleanup));
+ //
+ // 1) Driver to create HelicalTrackHits expected by Seedtracker.
+ //
+ // TODO Make this step its own separate Driver??? (Matt)
+
+ // Setup default stereo pairings, which should work for even number of modules.
+ List<SiTrackerModule> modules = detector.getSubdetector(subdetectorName).getDetectorElement().findDescendants(SiTrackerModule.class);
+ if (modules.size() == 0)
+ throw new RuntimeException("No SiTrackerModules found in detector.");
+ int nmodules = modules.size();
+ if (nmodules % 2 != 0)
+ throw new RuntimeException("Don't know how to do stereo pairing for odd number of modules.");
+ List<int[]> pairs = new ArrayList<int[]>();
+ for (int i=1; i<=(nmodules/2)-1; i+=2)
+ {
+ int[] pair = {i, i+1};
+ if (DEBUG)
+ System.out.println("Adding stereo pair: " + pair[0] + ", " + pair[1]);
+ pairs.add(pair);
+ }
+
+ // Create the Driver.
+ HPSHelicalTrackHitDriver hthdriver = new HPSHelicalTrackHitDriver();
+ hthdriver.addCollection(stripHitsCollectionName);
+ hthdriver.OutputCollection(hthOutputCollectionName);
+ hthdriver.HitRelationName(helicalTrackHitRelationsCollectionName);
+ hthdriver.MCRelationName(helicalTrackMCRelationsCollectionName);
+ for (int[] pair : pairs)
+ {
+ hthdriver.setStereoPair(subdetectorName, pair[0], pair[1]);
+ }
+ hthdriver.setMaxSeperation(stripMaxSeparation);
+ hthdriver.setTolerance(stripTolerance); // user parameter?
+ hthdriver.setTransformToTracking(true);
+ add(hthdriver);
+
+ //
+ // 2) Driver to run Seed Tracker.
+ //
+
+ if (!strategyResource.startsWith("/"))
+ strategyResource = "/" + strategyResource;
+ List<SeedStrategy> sFinallist = StrategyXMLUtils.getStrategyListFromInputStream(
+ this.getClass().getResourceAsStream(strategyResource));
+ SeedTracker stFinal = new SeedTracker(sFinallist);
+ HPSTransformations hpstrans = new HPSTransformations();
+ stFinal.setMaterialManagerTransform(hpstrans.getTransform());
+ stFinal.setInputCollectionName(stInputCollectionName);
+ stFinal.setTrkCollectionName(trackCollectionName);
+ stFinal.setBField(bfield);
+ stFinal.setSectorParams(false);
+ add(stFinal);
+
+ //
+ // 3) Cleanup the readouts for next event.
+ //
+ List<String> readoutCleanup = new ArrayList<String>();
+ readoutCleanup.add(this.simTrackerHitCollectionName);
+ add(new ReadoutCleanupDriver(readoutCleanup));
}
-
+
/**
* Call super for child processing at start of data.
*/
public void startOfData()
{
- super.startOfData();
+ super.startOfData();
}
-
+
/**
* This method is used to run the reconstruction and print debug information.
*/
public void process(EventHeader event)
{
- // This call runs the track reconstruction using the sub-Drivers.
- super.process(event);
-
- // Debug printouts.
- if (DEBUG)
- {
- // Check for HelicalTrackHits.
- List<TrackerHit> hth = event.get(TrackerHit.class, hthOutputCollectionName);
- System.out.println("The HelicalTrackHit collection " + hthOutputCollectionName + " has " + hth.size() + " hits.");
-
- // Check for Tracks.
- List<Track> tracks = event.get(Track.class, trackCollectionName);
- System.out.println("The Track collection " + trackCollectionName + " has " + tracks.size() + " tracks.");
-
- // Print out track info.
- for (Track track : tracks)
- {
- System.out.println(track.toString());
- }
- }
-
- // Increment number of events.
- ++nevents;
-
- // Add to tracks found.
- ntracks += event.get(Track.class, trackCollectionName).size();
+ // This call runs the track reconstruction using the sub-Drivers.
+ super.process(event);
+
+ // Debug printouts.
+ if (DEBUG)
+ {
+ // Check for HelicalTrackHits.
+ List<TrackerHit> hth = event.get(TrackerHit.class, hthOutputCollectionName);
+ System.out.println("The HelicalTrackHit collection " + hthOutputCollectionName + " has " + hth.size() + " hits.");
+
+ // Check for Tracks.
+ List<Track> tracks = event.get(Track.class, trackCollectionName);
+ System.out.println("The Track collection " + trackCollectionName + " has " + tracks.size() + " tracks.");
+
+ // Print out track info.
+ for (Track track : tracks)
+ {
+ System.out.println(track.toString());
+ }
+ }
+
+ // Increment number of events.
+ ++nevents;
+
+ // Add to tracks found.
+ ntracks += event.get(Track.class, trackCollectionName).size();
}
-
+
public void endOfData()
{
- if (DEBUG)
- {
- System.out.println("-------------------------------------------");
- System.out.println(this.getName() + " found " + ntracks + " tracks in " + nevents + " events which is " + ((double)ntracks/(double)nevents) + " tracks per event.");
- }
+ if (DEBUG)
+ {
+ System.out.println("-------------------------------------------");
+ System.out.println(this.getName() + " found " + ntracks + " tracks in " + nevents + " events which is " + ((double)ntracks/(double)nevents) + " tracks per event.");
+ }
}
}
\ No newline at end of file