lcsim/src/org/lcsim/contrib/SteveMagill
diff -N ModRonDTPhotonFinderSid01.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ModRonDTPhotonFinderSid01.java 20 Aug 2008 20:21:21 -0000 1.1
@@ -0,0 +1,111 @@
+package org.lcsim.contrib.SteveMagill;
+
+/*
+ * RonDTPhotonFinderSid01.java
+ *
+ * Created on February 25, 2008, 10:28 AM
+ * modified to allow restricted hit input
+ */
+
+import org.lcsim.contrib.uiowa.RonPhotonFinder.*;
+import java.util.*;
+import org.lcsim.util.Driver;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
+import org.lcsim.util.hitmap.HitMap;
+import org.lcsim.recon.cluster.nn.*;
+import org.lcsim.digisim.*;
+import org.lcsim.recon.cluster.util.*;
+import org.lcsim.util.lcio.LCIOConstants;
+import org.lcsim.recon.cluster.directedtree.*;
+import org.lcsim.contrib.Cassell.recon.DTPhotons.*;
+
+/**
+ *
+ * @author cassell
+ */
+public class ModRonDTPhotonFinderSid01 extends Driver
+{
+ String inName;
+ String outHName;
+ String outCName;
+ HMatrixVars hmv;
+ Sid01DTPhotonFinder finder;
+// String[] clusternames1 = {"EcalBarrDigiHitsDTreeClusters","EcalEndcapDigiHitsDTreeClusters"};
+// String DTclName = "DTEcalClusters";
+// String ReDTclName = "Re"+DTclName;
+ Clusterer clusterer;
+
+ /** Creates a new instance of RonDTPhotonFinderSid01 */
+ public ModRonDTPhotonFinderSid01(String in, String outH, String outC)
+ {
+ inName = in;
+ outHName = outH;
+ outCName = outC;
+ clusterer = new NearestNeighborClusterer(1,1,1,0,0.);
+ hmv = new HMatrixVars();
+ add(hmv);
+ finder = new Sid01DTPhotonFinder(hmv);
+// add(new DigiPackageDriver());
+// add(new DirectedTreeDriver());
+ int minDTc = 3; // minimum number of cells in a cluster
+ DirectedTreeDriver DTEBdriver = new DirectedTreeDriver();
+ DTEBdriver.setMinimumClusterSize(minDTc);
+ DTEBdriver.setInputHitMap(inName);
+ DTEBdriver.setOutputClusterList("EMHitsDTClus");
+ add(DTEBdriver);
+
+// add(new CombineClLists(clusternames1,DTclName));
+ add(new CoreReclusterDriver("EMHitsDTClus","ReEMHitsDTClus"));
+ }
+ protected void process(EventHeader event)
+ {
+ super.process(event);
+ HitMap inmap = (HitMap) event.get(inName);
+ List<Cluster> inlist = event.get(Cluster.class,"ReEMHitsDTClus");
+ List<Cluster> sublist = new ArrayList<Cluster>();
+ Map<Cluster,Cluster> submap = new HashMap<Cluster,Cluster>();
+ for(Cluster c:inlist)
+ {
+ List<Cluster> nncl = clusterer.createClusters(c.getCalorimeterHits());
+ int maxh = 0;
+ Cluster maxc = null;
+ for(Cluster nnc:nncl)
+ {
+ if(nnc.getCalorimeterHits().size() > maxh)
+ {
+ maxh = nnc.getCalorimeterHits().size();
+ maxc = nnc;
+ }
+ }
+ sublist.add(maxc);
+ submap.put(maxc,c);
+ }
+ List<Cluster> subphotons = finder.findPhotons(sublist);
+ List<Cluster> photons = new ArrayList<Cluster>();
+ for(Cluster subp:subphotons)
+ {
+ BasicCluster pc = new BasicCluster();
+ for(Cluster subc:subp.getClusters())
+ {
+ pc.addCluster(submap.get(subc));
+ }
+ photons.add(pc);
+ }
+ int flag = 1<<LCIOConstants.CLBIT_HITS;
+ event.put(outCName, photons, Cluster.class, flag );
+ HitMap outputHitMap = new HitMap(inmap);
+// Remove photon hits
+ for (Cluster clus : photons)
+ {
+ for (CalorimeterHit hit : clus.getCalorimeterHits())
+ {
+ Long cellID = new Long(hit.getCellID());
+ outputHitMap.remove(cellID);
+ }
+ }
+ event.put(outHName, outputHitMap);
+ }
+
+}