lcsim/src/org/lcsim/recon/tracking/seedtracker
diff -u -r1.7 -r1.8
--- SeedTrackerTrackStateDriver.java 23 Nov 2010 09:19:23 -0000 1.7
+++ SeedTrackerTrackStateDriver.java 3 Dec 2010 21:12:26 -0000 1.8
@@ -34,11 +34,12 @@
* @author jeremym
* @author ngraf
*
- * @version $Id: SeedTrackerTrackStateDriver.java,v 1.7 2010/11/23 09:19:23 grefe Exp $
+ * @version $Id: SeedTrackerTrackStateDriver.java,v 1.8 2010/12/03 21:12:26 ngraf Exp $
*/
public class SeedTrackerTrackStateDriver extends Driver
{
// protected CalorimeterInformation calInfo;
+
protected double ecalRadius;
protected int ecalNumSides;
protected double ecalZ;
@@ -46,27 +47,28 @@
protected HelixSwimmer swimmer;
public SeedTrackerTrackStateDriver()
- {}
+ {
+ }
- protected void detectorChanged( Detector detector )
+ protected void detectorChanged(Detector detector)
{
// get the magnetic field and set up the helix swimmer
- magField = detector.getFieldMap().getField( new BasicHep3Vector( 0, 0, 0 ) ).magnitude();
- swimmer = new HelixSwimmer( magField );
+ magField = detector.getFieldMap().getField(new BasicHep3Vector(0, 0, 0)).magnitude();
+ swimmer = new HelixSwimmer(magField);
// Get calorimeter parameters from Detector.
Calorimeter ecalBarrel = null;
Calorimeter ecalEndcap = null;
// Get the EM Barrel.
- ecalBarrel = detector.getCalorimeterByType( CalorimeterType.EM_BARREL );
- if ( ecalBarrel == null )
- throw new RuntimeException( "Missing EM_BARREL subdetector in compact description." );
+ ecalBarrel = detector.getCalorimeterByType(CalorimeterType.EM_BARREL);
+ if (ecalBarrel == null)
+ throw new RuntimeException("Missing EM_BARREL subdetector in compact description.");
// Get the EM Endcap.
- ecalEndcap = detector.getCalorimeterByType( CalorimeterType.EM_ENDCAP );
- if ( ecalEndcap == null )
- throw new RuntimeException( "Missing EM_ENDCAP subdetector in compact description." );
+ ecalEndcap = detector.getCalorimeterByType(CalorimeterType.EM_ENDCAP);
+ if (ecalEndcap == null)
+ throw new RuntimeException("Missing EM_ENDCAP subdetector in compact description.");
ecalRadius = ecalBarrel.getInnerRadius();
ecalNumSides = ecalBarrel.getNumberOfSides();
@@ -75,10 +77,10 @@
//System.out.println( "ECAL: radius " + ecalRadius + " nsides " + ecalNumSides + " z " + ecalZ );
}
- public void process( EventHeader event )
+ public void process(EventHeader event)
{
// Get the Tracks from the event. Collection name is SeedTracker's default.
- List<Track> tracks = event.get( Track.class, "Tracks" );
+ List<Track> tracks = event.get(Track.class, "Tracks");
// TrackState lists.
List<GenericObject> startObjs = new ArrayList<GenericObject>();
@@ -86,30 +88,30 @@
List<GenericObject> ecalObjs = new ArrayList<GenericObject>();
// Loop over all the Tracks in the collection.
- for ( Track track : tracks )
+ for (Track track : tracks)
{
SeedTrack strk = (SeedTrack) track;
SeedCandidate scand = strk.getSeedCandidate();
HelicalTrackFit helix = scand.getHelix();
- Hep3Vector ptrk = new BasicHep3Vector( strk.getMomentum() );
+ Hep3Vector ptrk = new BasicHep3Vector(strk.getMomentum());
double smax = -9999.;
HelicalTrackHit last = null;
- for ( HelicalTrackHit hit : scand.getHits() )
+ for (HelicalTrackHit hit : scand.getHits())
{
- double s = helix.PathMap().get( hit );
- if ( s > smax )
+ double s = helix.PathMap().get(hit);
+ if (s > smax)
{
smax = s;
last = hit;
}
}
- TrackDirection trkdir = HelixUtils.CalculateTrackDirection( helix, smax );
+ TrackDirection trkdir = HelixUtils.CalculateTrackDirection(helix, smax);
Hep3Vector dir = trkdir.Direction();
Hep3Vector pos = null;
- if ( last instanceof HelicalTrackCross )
+ if (last instanceof HelicalTrackCross)
{
HelicalTrackCross cross = (HelicalTrackCross) last;
- cross.setTrackDirection( trkdir, helix.covariance() );
+ cross.setTrackDirection(trkdir, helix.covariance());
pos = cross.getCorrectedPosition();
}
else
@@ -118,36 +120,48 @@
}
// Set the End TrackState from the outermost hit on the track.
- Hep3Vector xmomentum = VecOp.mult( ptrk.magnitude(), dir );
+ Hep3Vector xmomentum = VecOp.mult(ptrk.magnitude(), dir);
// Set the End TrackState to the point of closest approach to the last hit
- swimmer.setTrack( track );
- double s = swimmer.getDistanceToPoint( pos );
- Hep3Vector corPos = swimmer.getPointAtLength( s );
+ swimmer.setTrack(track);
+ double s = swimmer.getDistanceToPoint(pos);
+ Hep3Vector corPos = swimmer.getPointAtLength(s);
- TrackState endState = new TrackState( corPos, xmomentum );
- endObjs.add( endState );
+ TrackState endState = new TrackState(corPos, xmomentum);
+ endObjs.add(endState);
// Calculate the Start state and add to list.
double[] smom = ptrk.v();
- double[] spos = HelixUtils.PointOnHelix( helix, 0. ).v();
- TrackState startState = new TrackState( spos[0], spos[1], spos[2], smom[0], smom[1], smom[2] );
- startObjs.add( startState );
+ double[] spos = HelixUtils.PointOnHelix(helix, 0.).v();
+ TrackState startState = new TrackState(spos[0], spos[1], spos[2], smom[0], smom[1], smom[2]);
+ startObjs.add(startState);
// TODO Should set the ECal TrackState by propagating from the outermost hit on the track.
- s = Math.min( swimmer.getDistanceToZ( ecalZ ), swimmer.getDistanceToPolyhedra( ecalRadius, ecalNumSides ) );
-
- SpacePoint ecalPos = swimmer.getPointAtLength( s );
- SpaceVector ecalMom = swimmer.getMomentumAtLength( s );
+ double sZ = swimmer.getDistanceToZ(ecalZ);
+ double sR = swimmer.getDistanceToPolyhedra(ecalRadius, ecalNumSides);
+ if (Double.isNaN(sR))
+ {
+ s = sZ;
+ }
+ else if (Double.isNaN(sZ))
+ {
+ s = sR;
+ }
+ else
+ {
+ s = Math.min(swimmer.getDistanceToZ(ecalZ), swimmer.getDistanceToPolyhedra(ecalRadius, ecalNumSides));
+ }
+ SpacePoint ecalPos = swimmer.getPointAtLength(s);
+ SpaceVector ecalMom = swimmer.getMomentumAtLength(s);
- TrackState ecalState = new TrackState( ecalPos.x(), ecalPos.y(), ecalPos.z(), ecalMom.x(), ecalMom.y(), ecalMom.z() );
- ecalObjs.add( ecalState );
+ TrackState ecalState = new TrackState(ecalPos.x(), ecalPos.y(), ecalPos.z(), ecalMom.x(), ecalMom.y(), ecalMom.z());
+ ecalObjs.add(ecalState);
}
// Add the lists to the event.
- event.put( "StateAtStart", startObjs, GenericObject.class, 0 );
- event.put( "StateAtECal", ecalObjs, GenericObject.class, 0 );
- event.put( "StateAtEnd", endObjs, GenericObject.class, 0 );
+ event.put("StateAtStart", startObjs, GenericObject.class, 0);
+ event.put("StateAtECal", ecalObjs, GenericObject.class, 0);
+ event.put("StateAtEnd", endObjs, GenericObject.class, 0);
}
-}
\ No newline at end of file
+}