lcsim/src/org/lcsim/contrib/uiowa/MuonFinder
diff -N MuonFinderWrapper.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ MuonFinderWrapper.java 13 Oct 2008 06:35:31 -0000 1.1
@@ -0,0 +1,116 @@
+package org.lcsim.contrib.uiowa.MuonFinder;
+
+import java.util.*;
+import org.lcsim.event.*;
+import org.lcsim.event.util.*;
+import org.lcsim.util.*;
+import org.lcsim.recon.cluster.util.BasicCluster;
+import org.lcsim.recon.cluster.util.HitInMCALDecision;
+import org.lcsim.util.hitmap.HitMap;
+
+public class MuonFinderWrapper extends Driver {
+
+ // Inputs
+ protected String m_trackList;
+ protected String m_inHitMap;
+
+ // Outputs
+ protected String m_outMuonTrackClusterMap;
+ protected String m_outHitMap;
+ protected String m_outTrackList;
+
+ // Old/temporary
+ protected String _outName;
+ protected String _outHitMap;
+ protected String _outMapTrackToSetOfClusters;
+ protected String _inMu;
+ protected String _inCal;
+
+ // Option to skip
+ protected boolean m_debugSkip = false;
+ public void skip() { m_debugSkip = true; }
+
+ public MuonFinderWrapper(String inTrackList, String inHitMap, String outMuonTrackClusterMap, String outHitMap, String outTrackList)
+ {
+ // Inputs/outputs
+ m_trackList = inTrackList;
+ m_inHitMap = inHitMap;
+ m_outMuonTrackClusterMap = outMuonTrackClusterMap;
+ m_outHitMap = outHitMap;
+ m_outTrackList = outTrackList;
+ // Temporary stuff for old process routine
+ _inCal = new String("tmpCal");
+ _inMu = new String("tmpMu");
+ _outHitMap = new String("tmpMap");
+ _outMapTrackToSetOfClusters = new String("tmpMap2");
+ _outName = new String("tmpName");
+ }
+
+ public void process(EventHeader event) {
+ // Read in
+ HitMap inHitMap = (HitMap)(event.get(m_inHitMap));
+ List<Track> inTrackList = event.get(Track.class, m_trackList);
+
+ // Massage inputs into the form wanted by old process routine
+ HitMap muonHits = new HitMap();
+ HitMap otherHits = new HitMap();
+ HitInMCALDecision dec = new HitInMCALDecision();
+ for (CalorimeterHit hit : inHitMap.values()) {
+ long id = hit.getCellID();
+ if (dec.valid(hit)) {
+ muonHits.put(id, hit);
+ } else {
+ otherHits.put(id, hit);
+ }
+ }
+ event.put(_inMu, muonHits);
+ event.put(_inCal, otherHits);
+
+ // Prepare outputs
+ List<Track> outTrackList = new Vector<Track>();
+ Map<Track,Cluster> outMuonTrackClusterMap = new HashMap<Track,Cluster>();
+ HitMap outHitMap = new HitMap(inHitMap);
+
+ if (m_debugSkip) {
+ // Optionally, skip the muon finding
+ outHitMap = inHitMap;
+ outTrackList = inTrackList;
+ } else {
+ // Call old process routine to do the work
+ MuonFinder tmpWrappedMuonFinder = new MuonFinder(m_trackList, _inCal, _inMu, _outHitMap, _outName, _outMapTrackToSetOfClusters);
+ tmpWrappedMuonFinder.process(event);
+ Map<Track,Set<Cluster>> oldMap = (Map<Track,Set<Cluster>>)(event.get(_outMapTrackToSetOfClusters));
+
+ // Make output muon track -> cluster map
+ for (Track tr : oldMap.keySet()) {
+ Set<Cluster> clustersOfMuon = oldMap.get(tr);
+ BasicCluster combinedClus = new BasicCluster();
+ for (Cluster clus : clustersOfMuon) {
+ for (CalorimeterHit hit : clus.getCalorimeterHits()) {
+ combinedClus.addHit(hit);
+ }
+ }
+ outMuonTrackClusterMap.put(tr, combinedClus);
+ }
+
+ // Make HitMap of remaining hits:
+ for (Cluster muonClus : outMuonTrackClusterMap.values()) {
+ for (CalorimeterHit hit : muonClus.getCalorimeterHits()) {
+ long id = hit.getCellID();
+ outHitMap.remove(id);
+ }
+ }
+
+ // Make List of remaining tracks:
+ outTrackList.addAll(inTrackList);
+ outTrackList.removeAll(outMuonTrackClusterMap.keySet());
+ }
+
+
+ // Write out
+ event.put(m_outMuonTrackClusterMap, outMuonTrackClusterMap);
+ event.put(m_outHitMap, outHitMap);
+ event.put(m_outTrackList, outTrackList);
+ }
+}
+
lcsim/src/org/lcsim/contrib/uiowa/MuonFinder
diff -u -r1.6 -r1.7
--- MuonFinder.java 11 Oct 2008 01:01:49 -0000 1.6
+++ MuonFinder.java 13 Oct 2008 06:35:31 -0000 1.7
@@ -35,7 +35,8 @@
protected AIDA aida = AIDA.defaultInstance();
protected String _outName;
protected String _tracklist;
- protected String _outMap;
+ protected String _outHitMap;
+ protected String _outMapTrackToSetOfClusters; // was "newMapTrackToMip"
protected String _inMu;
protected String _inCal;
protected double _bestmatch = 0.8;
@@ -46,12 +47,13 @@
protected HelixExtrapolator m_findCluster = new org.lcsim.recon.pfa.identifier.LocalHelixExtrapolator();
protected boolean useMuonhits = false;
- public MuonFinder(String tracklist, String inCal, String inMu, String outMap, String outName){
+ public MuonFinder(String tracklist, String inCal, String inMu, String outMap, String outName, String outMapTrackToSetOfClusters){
_inCal = inCal;
_inMu = inMu;
- _outMap = outMap;
+ _outHitMap = outMap;
_outName = outName;
_tracklist = tracklist;
+ _outMapTrackToSetOfClusters = outMapTrackToSetOfClusters;
}
public void process(EventHeader event)
@@ -308,8 +310,8 @@
}
HitMap muonMap = new HitMap(muonclustershits);
- event.put(_outMap, muonMap);
- event.put("newMapTrackToMip", outputmap);
+ event.put(_outHitMap, muonMap);
+ event.put(_outMapTrackToSetOfClusters, outputmap);
if(_debug){
int flag = 1<<LCIOConstants.CLBIT_HITS;
event.put(_outName, muonClusters, Cluster.class, flag );