lcsim/src/org/lcsim/recon/pfa/structural
diff -u -r1.18 -r1.19
--- ReclusterDTreeDriver.java 22 Oct 2008 17:55:16 -0000 1.18
+++ ReclusterDTreeDriver.java 24 Oct 2008 23:05:57 -0000 1.19
@@ -35,7 +35,7 @@
* in this package, which uses the implementation in
* org.lcsim.recon.cluster.directedtree developed by NIU).
*
- * @version $Id: ReclusterDTreeDriver.java,v 1.18 2008/10/22 17:55:16 mcharles Exp $
+ * @version $Id: ReclusterDTreeDriver.java,v 1.19 2008/10/24 23:05:57 mcharles Exp $
* @author Mat Charles <[log in to unmask]>
*/
@@ -1483,13 +1483,32 @@
Set<Cluster> clusters = newMapTrackToShowerComponents.get(tr);
Cluster sharedHitClus = makeClusterOfSharedHits(clusters, allSharedClusters);
if (sharedHitClus.getCalorimeterHits().size()>0) { clusters.add(sharedHitClus); }
- ReconstructedParticle part = null;
- if (tr.getCharge() > 0) {
- part = makeSingleChargedParticle(tr, clusters, pdg_piplus);
+ // Remember to handle case where >1 physical track is bundled into one logical track:
+ Set<Track> finalStateTracks = new HashSet<Track>();
+ if (tr instanceof MultipleTrackTrack) {
+ finalStateTracks.addAll(tr.getTracks());
} else {
- part = makeSingleChargedParticle(tr, clusters, pdg_piminus);
+ finalStateTracks.add(tr);
+ }
+ // Loop over final-state track(s) and make particles.
+ // Only the first one gets clusters (to avoid double-counting).
+ boolean firstTrack = true;
+ for (Track subTr : finalStateTracks) {
+ // Assign clusters to first track.
+ Set<Cluster> clustersForThisTrack = new HashSet<Cluster>();
+ if (firstTrack) {
+ clustersForThisTrack.addAll(clusters);
+ firstTrack = false;
+ }
+ // Make particle (assume pion)
+ ReconstructedParticle part = null;
+ if (subTr.getCharge() > 0) {
+ part = makeSingleChargedParticle(subTr, clustersForThisTrack, pdg_piplus);
+ } else {
+ part = makeSingleChargedParticle(subTr, clustersForThisTrack, pdg_piminus);
+ }
+ outputParticleList.add(part);
}
- outputParticleList.add(part);
}
return outputParticleList;
}
@@ -1499,8 +1518,18 @@
int pdg_piminus = -211;
List<ReconstructedParticle> outputParticleList = new Vector<ReconstructedParticle>();
for (Set<Track> jet : newMapJetToShowerComponents.keySet()) {
- boolean firstTrackInJet = true;
+ // Remember to handle case where >1 physical track is bundled into one logical track:
+ Set<Track> finalStateTracks = new HashSet<Track>();
for (Track tr : jet) {
+ if (tr instanceof MultipleTrackTrack) {
+ finalStateTracks.addAll(tr.getTracks());
+ } else {
+ finalStateTracks.add(tr);
+ }
+ }
+ // Loop over final-state tracks and make particles:
+ boolean firstTrackInJet = true;
+ for (Track tr : finalStateTracks) {
Set<Cluster> clusters = null;
if (firstTrackInJet) {
// Assign all clusters to first track in jet