5 modified files
lcsim/src/org/lcsim/recon/cluster/directedtree
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
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
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
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
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