lcsim/src/org/lcsim/recon/cluster/directedtree
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";