Commit in lcsim/src/org/lcsim/recon/cluster/directedtree on MAIN
DTreeAnalysis.java+31-171.5 -> 1.6
DirectedTreeClusterer.java+31-31.8 -> 1.9
DirectedTreeDriver.java+61.3 -> 1.4
TrackHitMatcher.java+27-161.7 -> 1.8
TrackMatchingDriver.java+39-141.7 -> 1.8
+134-50
5 modified files
GL: Committing several recent updates

lcsim/src/org/lcsim/recon/cluster/directedtree
DTreeAnalysis.java 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- DTreeAnalysis.java	21 Jun 2006 18:03:31 -0000	1.5
+++ DTreeAnalysis.java	2 Aug 2006 19:07:56 -0000	1.6
@@ -13,6 +13,8 @@
 import org.lcsim.event.SimCalorimeterHit;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.MCParticle;
+import org.lcsim.event.Cluster;
+import org.lcsim.util.lcio.SIOCluster;
 import org.lcsim.geometry.compact.Readout;
 import org.lcsim.digisim.CellSelector;
 import org.lcsim.recon.cluster.util.CalHitMapMgr;
@@ -45,7 +47,7 @@
     }
 
     public void process(EventHeader event) {
-
+	if(_skipEvent) return;
 	_evt = event;
         _evtnum = event.getEventNumber();
 	if(_debug>0) {
@@ -134,8 +136,8 @@
         }
     }
 
-    public void fillDirectedTreeNtuple(List<BasicCluster> recon,
-				       List<BasicCluster> mctruth,
+    public void fillDirectedTreeNtuple(List<Cluster> recon,
+				       List<Cluster> mctruth,
 				       BaseIDDecoder decoder)
     {
         if(_calType=="EM"){
@@ -158,7 +160,7 @@
 	if(_calType=="HD") tag = _nClusHD;
 	Map<CalorimeterHit,Integer> recTagMap
 	    = new HashMap<CalorimeterHit,Integer>();
-	for(BasicCluster clust : recon ) {
+	for(Cluster clust : recon ) {
             List<CalorimeterHit> cellVec = clust.getCalorimeterHits();
 //   	    System.out.println("reco tag: "+tag+", #hits="+cellVec.size());
 	    if(cellVec.size()==0) System.out.println("*** DTreeAna: bad cellVec in "+_calType);
@@ -194,7 +196,10 @@
 	    if(_calType=="HD") clusFolder = hdClusFolder;
 	    if(clusFolder!=null) {
 		Hep3Vector pos = new BasicHep3Vector( clust.getPosition() );
-                clusFolder.fill(0,(float) clust.getRawEnergy());
+		double rawE = 0;
+		if(clust instanceof SIOCluster) rawE = ((SIOCluster)clust).getRawEnergy();
+		if(clust instanceof BasicCluster) rawE = ((BasicCluster)clust).getRawEnergy();
+                clusFolder.fill(0,(float) rawE);
                 clusFolder.fill(1,(float) pos.x());
                 clusFolder.fill(2,(float) pos.y());
                 clusFolder.fill(3,(float) pos.z());
@@ -211,7 +216,7 @@
         tag = 0;
 	if(_calType=="EM") tag = _nMCClusEM;
 	if(_calType=="HD") tag = _nMCClusHD;
-	for( BasicCluster clust : mctruth ) {
+	for( Cluster clust : mctruth ) {
 
 	  // loop over all hits on this MCcluster
 	  for( CalorimeterHit ihit : clust.getCalorimeterHits() ) {
@@ -276,7 +281,10 @@
 	  if(_calType=="EM") mcClusFolder = emmcClusFolder;
 	  if(_calType=="HD") mcClusFolder = hdmcClusFolder;
 	  if(mcClusFolder!=null) {
-	      mcClusFolder.fill(0,(float) clust.getRawEnergy());
+	      double rawE = 0;
+	      if(clust instanceof SIOCluster) rawE = ((SIOCluster)clust).getRawEnergy();
+	      if(clust instanceof BasicCluster) rawE = ((BasicCluster)clust).getRawEnergy();
+	      mcClusFolder.fill(0,(float) rawE);
 	      double[] pos = clust.getPosition();
 	      mcClusFolder.fill(1, (float)pos[0] );
 	      mcClusFolder.fill(2, (float)pos[1] );
@@ -340,26 +348,26 @@
       BaseIDDecoder decoder = _expert.getIDDecoder(colName);
 
       // get NearestNeighbor clusters
-      List<BasicCluster> nnClusColl = new ArrayList<BasicCluster>();
+      List<Cluster> nnClusColl = new ArrayList<Cluster>();
       try {
-	nnClusColl = _evt.get(BasicCluster.class, colName+"NNClusters");
+	nnClusColl = _evt.get(Cluster.class, colName+"NNClusters");
       }
       catch(IllegalArgumentException x) {
 	  // ignore
       }
 
       // get reco clusters
-      List<BasicCluster> recoClusColl = new ArrayList<BasicCluster>();
+      List<Cluster> recoClusColl = new ArrayList<Cluster>();
       try {
-	recoClusColl = _evt.get(BasicCluster.class, colName+"DTreeClusters");
+	recoClusColl = _evt.get(Cluster.class, colName+"DTreeClusters");
       }
       catch(IllegalArgumentException x) {
 	  // ignore
       }
 
       // get MC clusters
-      List<BasicCluster> mcClusColl
-	  = _evt.get(BasicCluster.class, colName+"CheatClusters");
+      List<Cluster> mcClusColl
+	  = _evt.get(Cluster.class, colName+"CheatClusters");
 
       Collections.sort( mcClusColl, new SortClustersBySize() );
       if(_debug>0) {
@@ -370,7 +378,7 @@
 
       // Analyze MC clusters
       int mchits=0;
-      for( BasicCluster iclus : mcClusColl ) {
+      for( Cluster iclus : mcClusColl ) {
 	double pos[] = iclus.getPosition();
 	List<CalorimeterHit> iHits = iclus.getCalorimeterHits();
 	mchits += iHits.size(); // includes hits below threshold
@@ -379,7 +387,7 @@
 
       // Analyze NN clusters
       int nnhits=0;
-      for( BasicCluster iclus : nnClusColl ) {
+      for( Cluster iclus : nnClusColl ) {
 	double pos[] = iclus.getPosition();
 	List<CalorimeterHit> iHits = iclus.getCalorimeterHits();
 	nnhits += iHits.size(); // includes hits below threshold
@@ -388,7 +396,7 @@
 
       // Analyze DirectedTree clusters
       int dthits=0;
-      for( BasicCluster iclus : recoClusColl ) {
+      for( Cluster iclus : recoClusColl ) {
 	double pos[] = iclus.getPosition();
 	List<CalorimeterHit> iHits = iclus.getCalorimeterHits();
 	dthits += iHits.size(); // includes hits below threshold
@@ -418,7 +426,7 @@
       fillDirectedTreeNtuple( recoClusColl, mcClusColl, decoder );
     }
 
-    private MCParticle getMCParticleInCluster(BasicCluster clust) {
+    private MCParticle getMCParticleInCluster(Cluster clust) {
 	for( CalorimeterHit hit : clust.getCalorimeterHits() ) {
 	    SimCalorimeterHit simhit = (SimCalorimeterHit)hit;
 	    if( simhit!=null && simhit.getMCParticleCount()==1 ) {
@@ -513,8 +521,14 @@
 	_tupleTrkMatch.addRow();
     }
 
+    public void skipThisEvent(boolean skip) {
+	System.out.println("Skipping this event: "+skip);
+	_skipEvent = skip;
+    }
+
     // *** FIELDS ***
 
+    private static boolean _skipEvent = true;
     private static EventHeader _evt;
     private static Map<String,Readout> _roMap;
     private static RunControlParameters _runPar;

lcsim/src/org/lcsim/recon/cluster/directedtree
DirectedTreeClusterer.java 1.8 -> 1.9
diff -u -r1.8 -r1.9
--- DirectedTreeClusterer.java	6 Jul 2006 00:30:26 -0000	1.8
+++ DirectedTreeClusterer.java	2 Aug 2006 19:07:56 -0000	1.9
@@ -17,6 +17,7 @@
     private RunControlParameters _rcp = null;
     private int _nLyr, _nZ, _nPhi;
     private String _distType,_calType;
+    private double _minDensity;
 
     public DirectedTreeClusterer(){
         _rcp = new RunControlParameters();
@@ -33,12 +34,31 @@
     public List<Cluster> createClusters(List<CalorimeterHit> hits) {
 	Map<Long,CalorimeterHit> hitmap = new HashMap<Long,CalorimeterHit>();
 	for(CalorimeterHit hit : hits) {
-	    hitmap.put( hit.getCellID(), hit );
+	    long cellid = hit.getCellID();
+            double density = _loader.getDensity( cellid );
+	    if(density>=_minDensity) hitmap.put( cellid, hit );
 	}
-	return createClusters(hitmap);
+
+	List<Cluster> result = doClustering(hitmap);
+	hitmap.clear();
+	return result;
+    }
+
+    public List<Cluster> createClusters(Map<Long,CalorimeterHit> inputmap) {
+	// rebuild hitmap considering minDensity
+	Map<Long,CalorimeterHit> hitmap = new HashMap<Long,CalorimeterHit>();
+	for(Long cellid : inputmap.keySet()) {
+	    CalorimeterHit hit = inputmap.get(cellid);
+            double density = _loader.getDensity( cellid );
+	    if(density>=_minDensity) hitmap.put( cellid, hit );
+	}
+
+	List<Cluster> result = doClustering(hitmap);
+	hitmap.clear();
+	return result;
     }
 
-    public List<Cluster> createClusters(Map<Long,CalorimeterHit> hitmap) {
+    public List<Cluster> doClustering(Map<Long,CalorimeterHit> hitmap) {
 	List<List<CalorimeterHit>> trees = makeTree(hitmap);
 
 	List<Cluster> recoClusColl = new ArrayList<Cluster>();
@@ -358,7 +378,15 @@
 	return region;
     }
 
+    /** Set minimum number of hits required for clusters
+     */
     public void setMinimumSize(int minsize) {
 	_clusBuilder.setMinimumSize(minsize);
     }
+
+    /** Set minimum hit density for hits to be used for clustering
+     */
+    public void setMinimumHitDensity(int mindens) {
+	_minDensity = mindens;
+    }
 }

lcsim/src/org/lcsim/recon/cluster/directedtree
DirectedTreeDriver.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- DirectedTreeDriver.java	6 Jul 2006 00:30:26 -0000	1.3
+++ DirectedTreeDriver.java	2 Aug 2006 19:07:56 -0000	1.4
@@ -53,6 +53,12 @@
 	_clusterer.setMinimumSize(minsize);
     }
 
+    /** Set minimum hit density for hits to be used for clustering
+     */
+    public void setMinimumHitDensity(int mindens) {
+	_clusterer.setMinimumHitDensity(mindens);
+    }
+
     public void process(EventHeader event) {
 
         int evtnum = event.getEventNumber();

lcsim/src/org/lcsim/recon/cluster/directedtree
TrackHitMatcher.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- TrackHitMatcher.java	21 Jun 2006 18:02:59 -0000	1.7
+++ TrackHitMatcher.java	2 Aug 2006 19:07:56 -0000	1.8
@@ -1,5 +1,6 @@
 package org.lcsim.recon.cluster.directedtree;
 
+import java.util.Collection;
 import java.util.Map;
 import java.util.List;
 import java.util.ArrayList;
@@ -22,12 +23,13 @@
 import org.lcsim.event.SimCalorimeterHit;
 import org.lcsim.event.MCParticle;
 import org.lcsim.recon.ztracking.cheater.CheatTrack;
+import org.lcsim.mc.fast.tracking.ReconTrack;
 
 /**
  * A helper class for track-hit matching in a single calorimeter component
  *
  * @author Guilherme Lima
- * @version $Id: TrackHitMatcher.java,v 1.7 2006/06/21 18:02:59 lima Exp $
+ * @version $Id: TrackHitMatcher.java,v 1.8 2006/08/02 19:07:56 lima Exp $
  */
 public class TrackHitMatcher {
 
@@ -54,6 +56,10 @@
 	_dV = dV;
     }
 
+    public void setTrackList(Collection<Track> recoTracks) {
+	_recoTracks = recoTracks;
+    }
+
     public void findMatches(EventHeader event,
 			    Map<Track,Vector<Hep3Vector>> intersects,
 			    Map<Track,List<CalorimeterHit>> trkHitsMap)
@@ -66,29 +72,32 @@
 
       // Load tracks
       // Use recon.ztracking.cheater.TrackingCheater (MCParticle)
-      List<Track> recoTracks = null;
-      try {
-	  recoTracks = event.get(Track.class, "CombinedTracks");
-      }
-      catch(IllegalArgumentException x) {
-	  // create an empty list
-	  recoTracks = new ArrayList<Track>();
-      }
-      // Use mc.fast.tracking.MCFastTracking (smearing around MCParticle)
-//       List<Track> recoTracks = event.getTracks();
+//       List<Track> recoTracks = null;
+//       try {
+// 	  recoTracks = event.get(Track.class, "CombinedTracks");
+//       }
+//       catch(IllegalArgumentException x) {
+// 	  // create an empty list
+// 	  recoTracks = new ArrayList<Track>();
+//       }
+//       // Use mc.fast.tracking.MCFastTracking (smearing around MCParticle)
+// //       List<Track> recoTracks = event.getTracks();
 
       // loop over tracks
-      for( Track trk : recoTracks ) {
+      for( Track trk : _recoTracks ) {
 	_trk = trk;
 	_trkHitsMap = trkHitsMap;
 	_trkHits = trkHitsMap.get( trk );
 	int nhitsBefore = (_trkHits!=null ? _trkHits.size() : 0);
 
-	if(_makeDistancePlot) _mcp = ((CheatTrack)trk).getMCParticle();
+	if(_makeDistancePlot) {
+	    if(trk instanceof CheatTrack) _mcp = ((CheatTrack)trk).getMCParticle();
+	    else if(trk instanceof ReconTrack) _mcp = (MCParticle)((ReconTrack)trk).getMCParticle();
+	}
 
-	if(_debug>0) {
-	    double mcE = ((org.lcsim.recon.ztracking.cheater.CheatTrack)trk).getMCParticle().getEnergy();
-	    System.out.println("TkHitMatcher: "+_colName+" - new track: E="+mcE);
+	if(_debug>0 && _mcp!=null) {
+	    System.out.println("TkHitMatcher: "+_colName
+			       +" - new track: mcE="+_mcp.getEnergy());
 	}
 
 	Hep3Vector pvec = new BasicHep3Vector( trk.getMomentum() );
@@ -221,6 +230,8 @@
     private List<CalorimeterHit> _trkHits = null;
     private Map<Track,List<CalorimeterHit>> _trkHitsMap = null;
 
+    private Collection<Track> _recoTracks = null;
+
     // debugging stuff
     private double _minDist2;
     private MCParticle _mcp;

lcsim/src/org/lcsim/recon/cluster/directedtree
TrackMatchingDriver.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- TrackMatchingDriver.java	9 Jul 2006 12:59:04 -0000	1.7
+++ TrackMatchingDriver.java	2 Aug 2006 19:07:56 -0000	1.8
@@ -15,6 +15,7 @@
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Track;
 import org.lcsim.recon.ztracking.cheater.CheatTrack;
+import org.lcsim.mc.fast.tracking.ReconTrack;
 import org.lcsim.geometry.compact.Subdetector;
 import org.lcsim.geometry.segmentation.BarrelCylinderSegmentationBase;
 import org.lcsim.geometry.subdetector.CylindricalCalorimeter;
@@ -27,12 +28,10 @@
  * A driver for track matching using the swimmer.
  *
  * @author Guilherme Lima
- * @version $Id: TrackMatchingDriver.java,v 1.7 2006/07/09 12:59:04 lima Exp $
+ * @version $Id: TrackMatchingDriver.java,v 1.8 2006/08/02 19:07:56 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 );
@@ -58,27 +57,39 @@
       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 = null;
-      try {
-	  recoTracks = event.get(Track.class, "CombinedTracks");
+      if( _trackingAlgo.equals("TrackingCheater") ) {
+	  // Use recon.ztracking.cheater.TrackingCheater (MCParticle)
+	  try {
+	      recoTracks = event.get(Track.class, "CombinedTracks");
+	  }
+	  catch(IllegalArgumentException x) {
+	      // create an empty list
+	      recoTracks = new ArrayList<Track>();
+	  }
       }
-      catch(IllegalArgumentException x) {
-	  // create an empty list
-	  recoTracks = new ArrayList<Track>();
+      else if( _trackingAlgo.equals("MCFastTracking") ) {
+	  // Use mc.fast.tracking.MCFastTracking (smearing around MCParticle)
+	  recoTracks = event.getTracks();
       }
-      // Use mc.fast.tracking.MCFastTracking (smearing around MCParticle)
-//       List<Track> recoTracks = event.getTracks();
-      Collections.sort( recoTracks, new TrackPSort());
 
-      // loop over tracks
+      // loop over Pt-sorted tracks
       if(_debug>0) System.out.println("# tracks for swimmer = "+recoTracks.size());
+      Collections.sort( recoTracks, new TrackPSort());
       for( Track trk : recoTracks ) {
 	Hep3Vector vtx = new BasicHep3Vector( trk.getReferencePoint() );
 	Hep3Vector pvec = new BasicHep3Vector( trk.getMomentum() );
         int icharge = trk.getCharge();
 	if(_debug>0) {
-	    double mcE = ((CheatTrack)trk).getMCParticle().getEnergy();
+	    double mcE = 0;
+	    if(trk instanceof CheatTrack) {
+		// TrackingCheater
+		mcE = ((CheatTrack)trk).getMCParticle().getEnergy();
+	    }
+	    else if(trk instanceof ReconTrack) {
+		// MCFastTracking
+		mcE = ((ReconTrack)trk).getMCParticle().getEnergy();
+	    }
 	    System.out.println("*** New track: E="+mcE
 			   +", pvec=("+pvec.x()+"; "+pvec.y()+"; "+pvec.z()+")"
 			   +", vtx=("+vtx.x()+"; "+vtx.y()+"; "+vtx.z()+")"
@@ -158,9 +169,16 @@
       Map<Track,List<CalorimeterHit>> trkHitsMap
 	  = new HashMap<Track,List<CalorimeterHit>>();
 
+      _embMatcher.setTrackList(recoTracks);
       _embMatcher.findMatches( event, emInterceptsMap, trkHitsMap );
+
+      _emeMatcher.setTrackList(recoTracks);
       _emeMatcher.findMatches( event, emInterceptsMap, trkHitsMap );
+
+      _hdbMatcher.setTrackList(recoTracks);
       _hdbMatcher.findMatches( event, hadInterceptsMap, trkHitsMap );
+
+      _hdeMatcher.setTrackList(recoTracks);
       _hdeMatcher.findMatches( event, hadInterceptsMap, trkHitsMap );
 
       // summary
@@ -249,9 +267,15 @@
 	_debug = deb;
     }
 
+    public void setTrackingAlgorithm(final String algo) {
+	_trackingAlgo = algo;
+    }
+
     //***** FIELDS ****
 
     private boolean _init = false;
+    int _debug = 0; // please use setDebug()
+
     private double _rhoMinEM;
     private double _rhoMinHAD;
     private int _emdu, _emdv, _hddu, _hddv;
@@ -270,4 +294,5 @@
     private TrackHitMatcher _hdeMatcher;
 
     private HelixSwimmer _swimmer;
+    private String _trackingAlgo = "TrackingCheater";  // default tracking algo
 }
CVSspam 0.2.8