Commit in lcsim/src/org/lcsim/recon/cluster/directedtree on MAIN
TrackMatchingDriver.java+44-171.3 -> 1.4
GL: methods for driver config and sort tracks by energy

lcsim/src/org/lcsim/recon/cluster/directedtree
TrackMatchingDriver.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- TrackMatchingDriver.java	20 Feb 2006 22:48:12 -0000	1.3
+++ TrackMatchingDriver.java	15 Mar 2006 12:27:50 -0000	1.4
@@ -5,6 +5,7 @@
 import java.util.Vector;
 import java.util.HashMap;
 import java.util.ArrayList;
+import java.util.Collections;
 import hep.physics.vec.Hep3Vector;
 import hep.physics.vec.BasicHep3Vector;
 
@@ -13,6 +14,7 @@
 import org.lcsim.event.SimCalorimeterHit;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Track;
+import org.lcsim.recon.ztracking.cheater.CheatTrack;
 import org.lcsim.geometry.util.CalorimeterIDDecoder;
 import org.lcsim.geometry.compact.Subdetector;
 import org.lcsim.geometry.segmentation.BarrelCylinderSegmentationBase;
@@ -27,13 +29,23 @@
  * A driver for track matching using the swimmer.
  *
  * @author Guilherme Lima
- * @version $Id: TrackMatchingDriver.java,v 1.3 2006/02/20 22:48:12 lima Exp $
+ * @version $Id: TrackMatchingDriver.java,v 1.4 2006/03/15 12:27:50 lima Exp $
  */
 public class TrackMatchingDriver extends Driver {
 
     int _debug = 0;  // debug level, 0 for no printout
 
+    /** default constructor */
     public TrackMatchingDriver() {
+	this( 5, 5, 2, 2 );
+    }
+
+    /** Contructor for user provided neighborhood parameters */
+    public TrackMatchingDriver(int emdu, int emdv, int hddu, int hddv) {
+	_emdu = emdu;
+	_emdv = emdv;
+	_hddu = hddu;
+	_hddv = hddv;
     }
 
     public void process(EventHeader event) {
@@ -48,16 +60,21 @@
       Map<Track,Vector<Hep3Vector>> emInterceptsMap = new HashMap<Track,Vector<Hep3Vector>>();
       Map<Track,Vector<Hep3Vector>> hadInterceptsMap = new HashMap<Track,Vector<Hep3Vector>>();
 
+      // Use recon.ztracking.cheater.TrackingCheater (MCParticle)
+      List<Track> recoTracks = event.get(Track.class, "CombinedTracks");
+      // Use mc.fast.tracking.MCFastTracking (smearing around MCParticle)
+//       List<Track> recoTracks = event.getTracks();
+      Collections.sort( recoTracks, new TrackPSort());
+
       // loop over tracks
-//       List<Track> recoTracks = event.get(Track.class, "CombinedTracks");
-      List<Track> recoTracks = event.getTracks();
-      System.out.println("TrackingCheater: # parts="+recoTracks.size());
+      if(_debug>0) System.out.println("# tracks for swimmer = "+recoTracks.size());
       for( Track trk : recoTracks ) {
 	Hep3Vector vtx = new BasicHep3Vector( trk.getReferencePoint() );
 	Hep3Vector pvec = new BasicHep3Vector( trk.getMomentum() );
         int icharge = trk.getCharge();
-	if(_debug>1) {
-	    System.out.println("*** New track"
+	if(_debug>0) {
+	    double mcE = ((CheatTrack)trk).getMCParticle().getEnergy();
+	    System.out.println("*** New track: E="+mcE
 			   +", pvec=("+pvec.x()+"; "+pvec.y()+"; "+pvec.z()+")"
 			   +", vtx=("+vtx.x()+"; "+vtx.y()+"; "+vtx.z()+")"
 			   +", q="+icharge);
@@ -78,15 +95,16 @@
 
 	  double rcyl = _layersEMB[i];
 	  double zcyl = _layersEME[i];
-// 	  System.out.println("*** Swimming to layer "+i
-// 			     +", rcyl="+rcyl+", zcyl="+zcyl);
+	  if(_debug>1) System.out.println("*** Swimming to layer "+i
+					 +", rcyl="+rcyl+", zcyl="+zcyl);
+
 	  double sParm = _swimmer.getDistanceToCylinder( rcyl, zcyl );
 	  Hep3Vector pos = _swimmer.getPointAtDistance( sParm );
 
 	  // correction for plug-like endcaps
 	  double rho = Math.sqrt(pos.x()*pos.x()+pos.y()*pos.y());
 	  if( rcyl-rho>1.e-3 && rho>_rhoMinEM ) {
-//          System.out.println("Plug-type correction: pos="+pos+", rho="+rho);
+	    if(_debug>1) System.out.println("Plug-type correction: pos="+pos+", rho="+rho);
 	    sParm = _swimmer.getDistanceToRadius( rcyl );
 	    pos = _swimmer.getPointAtDistance( sParm );
 	    rho = Math.sqrt(pos.x()*pos.x()+pos.y()*pos.y());
@@ -96,7 +114,7 @@
 		break;
 	    }
 	  }
-  	  if(_debug>1) System.out.println("Swimmer: layer="+i+", pos="+pos);
+  	  if(_debug>0) System.out.println("Swimmer: layer="+i+", pos="+pos);
 	  emIntercepts.add(i,pos);
 	}
 
@@ -106,15 +124,15 @@
 
 	  double rcyl = _layersHDB[i];
 	  double zcyl = _layersHDE[i];
-// 	  System.out.println("*** Swimming to layer "+i
-// 			     +", rcyl="+rcyl+", zcyl="+zcyl);
+ 	  if(_debug>1) System.out.println("*** Swimming to layer "+i
+					 +", rcyl="+rcyl+", zcyl="+zcyl);
 	  double sParm = _swimmer.getDistanceToCylinder( rcyl, zcyl );
 	  Hep3Vector pos = _swimmer.getPointAtDistance( sParm );
 
 	  // correction for plug-like endcaps
 	  double rho = Math.sqrt(pos.x()*pos.x()+pos.y()*pos.y());
 	  if( rcyl-rho>1.e-3 && rho>_rhoMinHAD ) {
-//          System.out.println("Plug-type correction: pos="+pos+", rho="+rho);
+	    if(_debug>1) System.out.println("Plug-type correction: pos="+pos+", rho="+rho);
 	    sParm = _swimmer.getDistanceToRadius( rcyl );
 	    pos = _swimmer.getPointAtDistance( sParm );
 	    rho = Math.sqrt(pos.x()*pos.x()+pos.y()*pos.y());
@@ -165,6 +183,10 @@
 
       // face of EM calorimeter
       CylindricalCalorimeter embSubdet = (CylindricalCalorimeter)expert.getSubdetector(_embName.replace("Digi",""));
+      assert embSubdet!=null
+	  : "***** TrackMatchingDriver error: no subdetector found.\n"
+	  +"--> Please make sure org.lcsim.recon.cluster.util.CalHitMapDriver is running";
+
       _rhoMinEM = embSubdet.getInnerRadius();
       Layering layers = embSubdet.getLayering();
       int nlayers = layers.getLayerCount();
@@ -205,19 +227,24 @@
       _swimmer = new HelixSwimmer( field[2] );
 
       // setup track-hit matchers
-      _embMatcher = new TrackHitMatcher(_embName, _layersEMB, 0, 0, _debug);
-      _emeMatcher = new TrackHitMatcher(_emeName, _layersEME, 0, 0, _debug);
-      _hdbMatcher = new TrackHitMatcher(_hdbName, _layersHDB, 0, 0, _debug);
-      _hdeMatcher = new TrackHitMatcher(_hdeName, _layersHDE, 0, 0, _debug);
+      _embMatcher = new TrackHitMatcher(_embName, _layersEMB, _emdu, _emdv, _debug);
+      _emeMatcher = new TrackHitMatcher(_emeName, _layersEME, _emdu, _emdv, _debug);
+      _hdbMatcher = new TrackHitMatcher(_hdbName, _layersHDB, _hddu, _hddv, _debug);
+      _hdeMatcher = new TrackHitMatcher(_hdeName, _layersHDE, _hddu, _hddv, _debug);
 
       _init = true;
     }
 
+    public void setDebug(int deb) {
+	_debug = deb;
+    }
+
     //***** FIELDS ****
 
     private boolean _init = false;
     private double _rhoMinEM;
     private double _rhoMinHAD;
+    private int _emdu, _emdv, _hddu, _hddv;
 
     private String _embName = "EcalBarrDigiHits";
     private String _hdbName = "HcalBarrDigiHits";
CVSspam 0.2.8