lcsim/src/org/lcsim/contrib/uiowa
diff -u -r1.4 -r1.5
--- MinimalRunPFA.java 15 Aug 2008 22:18:21 -0000 1.4
+++ MinimalRunPFA.java 13 Oct 2008 06:34:03 -0000 1.5
@@ -9,6 +9,7 @@
import org.lcsim.recon.cluster.structural.likelihood.LikelihoodEvaluatorWrapper;
import org.lcsim.recon.cluster.directedtree.*;
import org.lcsim.util.hitmap.*;
+import org.lcsim.recon.pfa.identifier.*;
import org.lcsim.recon.pfa.output.EnergySumPlotter;
import org.lcsim.recon.cluster.util.*;
import org.lcsim.event.util.*;
@@ -27,10 +28,24 @@
// Prepare to run PFA: Tracks (includes DigiSim)
add(new org.lcsim.contrib.Cassell.recon.Cheat.CheatReconDriver());
// Prepare to run PFA: Photon-finding and DirectedTree
- add(new org.lcsim.contrib.uiowa.SetUpDTreeForReclustering());
+ List<String> recoHitLists = new Vector<String>(); // Hits to use in main clustering
+ List<String> allHitLists = new Vector<String>(); // All hits (used in muon-finding)
+ List<String> mstHitLists = new Vector<String>(); // Hits from subsystems where we have to use MST
+ recoHitLists.add("EcalBarrDigiHits");
+ recoHitLists.add("EcalEndcapDigiHits");
+ recoHitLists.add("HcalBarrDigiHits");
+ recoHitLists.add("HcalEndcapDigiHits");
+ recoHitLists.add("MuonEndcapDigiHits");
+ allHitLists.addAll(recoHitLists);
+ allHitLists.add("MuonBarrDigiHits");
+ mstHitLists.add("MuonEndcapDigiHits");
+ //HelixExtrapolator findCluster = new org.lcsim.recon.pfa.identifier.TrackHelixPlusHitExtrapolator();
+ HelixExtrapolator findCluster = new org.lcsim.recon.pfa.identifier.LocalHelixExtrapolator();
+ add(findCluster);
+ add(new org.lcsim.contrib.uiowa.SetUpDTreeForReclustering(allHitLists, recoHitLists, mstHitLists, findCluster));
// Set up and run PFA
- ReclusterDTreeDriver reclusTree = new ReclusterDTreeDriver("DTreeClusters", "FSReconTracks", "ReconFSParticles");
+ ReclusterDTreeDriver reclusTree = new ReclusterDTreeDriver("DTreeClusters", "FSReconTracksWithoutMuons", "ReconFSParticles", "MuonTrackClusterMap", findCluster);
reclusTree.writeExtraEventOutput(writeExtraOutput);
add(reclusTree);
@@ -161,7 +176,6 @@
int count = 0;
public void process(EventHeader event) {
System.out.println("DEBUG: Looking at event "+count); count++;
- //if (count != 326) { return; }
boolean passesTruthAcceptanceCut = false;
MCParticle partZTovv = null;
MCParticle partZToqq = null;
lcsim/src/org/lcsim/contrib/uiowa
diff -u -r1.9 -r1.10
--- SetUpDTreeForReclustering.java 28 Sep 2008 06:18:16 -0000 1.9
+++ SetUpDTreeForReclustering.java 13 Oct 2008 06:34:03 -0000 1.10
@@ -8,242 +8,169 @@
import org.lcsim.recon.cluster.directedtree.*;
import org.lcsim.util.hitmap.*;
import org.lcsim.util.decision.*;
+import org.lcsim.contrib.uiowa.MuonFinder.*;
+import org.lcsim.recon.pfa.identifier.*;
public class SetUpDTreeForReclustering extends Driver
{
- boolean useOldRonPhotonFinder = false;
- boolean useForwardEcal = false;
+ // Dummy -- fix these
+ public SetUpDTreeForReclustering() {}
- public SetUpDTreeForReclustering() {
- {
- // Convert DigiSim's lists to hitmaps:
- HitListToHitMapDriver converter1 = new HitListToHitMapDriver();
- HitListToHitMapDriver converter2 = new HitListToHitMapDriver();
- HitListToHitMapDriver converter3 = new HitListToHitMapDriver();
- HitListToHitMapDriver converter4 = new HitListToHitMapDriver();
- converter1.addInputList("EcalBarrDigiHits");
- converter2.addInputList("EcalEndcapDigiHits");
- converter3.addInputList("HcalBarrDigiHits");
- converter4.addInputList("HcalEndcapDigiHits");
- converter1.setOutput("EcalBarrDigiHitMap");
- converter2.setOutput("EcalEndcapDigiHitMap");
- converter3.setOutput("HcalBarrDigiHitMap");
- converter4.setOutput("HcalEndcapDigiHitMap");
- add(converter1);
- add(converter2);
- add(converter3);
- add(converter4);
- // Convert muon lists to hitmaps:
- HitListToHitMapDriver converter5 = new HitListToHitMapDriver();
- HitListToHitMapDriver converter6 = new HitListToHitMapDriver();
- converter5.addInputList("MuonBarrDigiHits");
- converter6.addInputList("MuonEndcapDigiHits");
- converter5.setOutput("MuonBarrDigiHitMap");
- converter6.setOutput("MuonEndcapDigiHitMap");
- add(converter5);
- add(converter6);
- if (useForwardEcal) {
- // Convert forward EM endcap hits:
- HitListToHitMapDriver converter7 = new HitListToHitMapDriver();
- converter7.addInputList("ForwardEcalEndcapDigiHits");
- converter7.setOutput("ForwardEcalEndcapDigiHitMap");
- add(converter7);
- }
- }
-
- // Find muons
- {
- HitMapAddDriver combineCal = new HitMapAddDriver();
- HitMapAddDriver combineMuDet = new HitMapAddDriver();
- combineCal.addInputHitMap("EcalBarrDigiHitMap");
- combineCal.addInputHitMap("HcalBarrDigiHitMap");
- combineCal.addInputHitMap("EcalEndcapDigiHitMap");
- combineCal.addInputHitMap("HcalEndcapDigiHitMap");
- combineMuDet.addInputHitMap("MuonBarrDigiHitMap");
- combineMuDet.addInputHitMap("MuonEndcapDigiHitMap");
- combineCal.setOutputHitMap("CalDigiHitMap");
- combineMuDet.setOutputHitMap("MuDetDigiHitMap");
- add(combineCal);
- add(combineMuDet);
-
- org.lcsim.contrib.uiowa.MuonFinder.MuonFinder muonFinder =new org.lcsim.contrib.uiowa.MuonFinder.MuonFinder("FSReconTracks","CalDigiHitMap", "MuDetDigiHitMap", "MuonClustersDigiHitMap", "MuonClusters");
- add(muonFinder);
-
- HitMapSubtractDriver separateEcal1 = new HitMapSubtractDriver("EcalBarrDigiHitMap", "MuonClustersDigiHitMap", "EcalBarrDigiHitMap");
- HitMapSubtractDriver separateEcal2 = new HitMapSubtractDriver("EcalEndcapDigiHitMap", "MuonClustersDigiHitMap", "EcalEndcapDigiHitMap");
- HitMapSubtractDriver separateEcal3 = new HitMapSubtractDriver("HcalBarrDigiHitMap", "MuonClustersDigiHitMap", "HcalBarrDigiHitMap");
- HitMapSubtractDriver separateEcal4 = new HitMapSubtractDriver("HcalEndcapDigiHitMap", "MuonClustersDigiHitMap", "HcalEndcapDigiHitMap");
- HitMapSubtractDriver separateEcal5 = new HitMapSubtractDriver("MuonBarrDigiHitMap", "MuonClustersDigiHitMap", "MuonBarrDigiHitMap");
- HitMapSubtractDriver separateEcal6 = new HitMapSubtractDriver("MuonEndcapDigiHitMap", "MuonClustersDigiHitMap", "MuonEndcapDigiHitMap");
-
- add(separateEcal1);
- add(separateEcal2);
- add(separateEcal3);
- add(separateEcal4);
- add(separateEcal5);
- add(separateEcal6);
- }
-
- // Merge barrel & endcap hits
- {
- HitMapAddDriver combineEcal = new HitMapAddDriver();
- HitMapAddDriver combineHcal = new HitMapAddDriver();
- combineEcal.addInputHitMap("EcalBarrDigiHitMap");
- combineHcal.addInputHitMap("HcalBarrDigiHitMap");
- combineEcal.addInputHitMap("EcalEndcapDigiHitMap");
- combineHcal.addInputHitMap("HcalEndcapDigiHitMap");
- if (useForwardEcal) {
- combineEcal.addInputHitMap("ForwardEcalEndcapDigiHitMap"); // Include forward endcap
- }
- combineEcal.setOutputHitMap("EcalDigiHitMap");
- combineHcal.setOutputHitMap("HcalDigiHitMap");
- add(combineEcal);
- add(combineHcal);
- }
+ public SetUpDTreeForReclustering(Collection<String> allHitLists, Collection<String> recoHitLists, Collection<String> hitsForMST, HelixExtrapolator findCluster) {
+ // Convert DigiSim's lists to hitmaps:
+ Map<String,String> mapListToHitMap = new HashMap<String,String>();
+ for (String inputName : allHitLists) {
+ String outputName = (new String(inputName)).replace("DigiHits", "DigiHitMap");
+ mapListToHitMap.put(inputName, outputName);
+ HitListToHitMapDriver converter = new HitListToHitMapDriver();
+ converter.addInputList(inputName);
+ converter.setOutput(outputName);
+ add(converter);
+ }
+ // Convenience: Merge ECAL barrel & ECAL endcap
+ HitMapAddDriver combineEcal = new HitMapAddDriver();
+ combineEcal.addInputHitMap("EcalBarrDigiHitMap");
+ combineEcal.addInputHitMap("EcalEndcapDigiHitMap");
+ combineEcal.setOutputHitMap("EcalDigiHitMap");
+ add(combineEcal);
+ // Convenience: Merge HCAL barrel & HCAL endcap
+ HitMapAddDriver combineHcal = new HitMapAddDriver();
+ combineHcal.addInputHitMap("HcalBarrDigiHitMap");
+ combineHcal.addInputHitMap("HcalEndcapDigiHitMap");
+ combineHcal.setOutputHitMap("HcalDigiHitMap");
+ add(combineHcal);
+ // Make combined hitmap of all hits (for muon searches)
+ HitMapAddDriver combineAll = new HitMapAddDriver();
+ for (String inputName : allHitLists) {
+ combineAll.addInputHitMap(mapListToHitMap.get(inputName));
+ combineAll.setOutputHitMap("AllDigiHitMap");
+ }
+ add(combineAll);
+ // Make combined hitmap of all reconstructable hits
+ HitMapAddDriver combineReco = new HitMapAddDriver();
+ for (String inputName : recoHitLists) {
+ combineReco.addInputHitMap(mapListToHitMap.get(inputName));
+ combineReco.setOutputHitMap("RecoDigiHitMap");
+ }
+ add(combineReco);
+
+ // Find muons
+ MuonFinderWrapper muonFinder = new MuonFinderWrapper("FSReconTracks", "AllDigiHitMap", "MuonTrackClusterMap", "AllDigiHitMapWithoutMuons", "FSReconTracksWithoutMuons");
+ muonFinder.skip(); // TEST
+ add(muonFinder);
+ add(new HitMapSubtractDriver("RecoDigiHitMap", "AllDigiHitMapWithoutMuons", "RecoDigiHitMapMuons")); // Identify the muon hits within useable hit block
+ add(new HitMapSubtractDriver("RecoDigiHitMap", "RecoDigiHitMapMuons", "RecoDigiHitMapWithoutMuons")); // Non-muon hits within useable hit block
+
+ // TJ's pre-shower MIP-finder
+ ShowerPointFinderDriver showerFinder = new ShowerPointFinderDriver(findCluster, "RecoDigiHitMapWithoutMuons", "FSReconTracksWithoutMuons", "ShowerFinderMapTrackToMip", "RecoDigiHitMapWithoutMuonsOrMips", "ShowerFinderMips");
+ add(showerFinder);
+ add(new CheckDisjoint("RecoDigiHitMapWithoutMuonsOrMips", "ShowerFinderMips"));
+ // Steve's pre-shower MIP-finder
+ add(new SteveMipWrapper());
// Find photons in ECAL
- if (useOldRonPhotonFinder) {
- // Make photons in barrel & endcap separately
- org.lcsim.contrib.uiowa.RonPhotonFinder.RonPhotonFinderSid01 photonFinderEcalBarrel = new org.lcsim.contrib.uiowa.RonPhotonFinder.RonPhotonFinderSid01("EcalBarrDigiHitMap", "EcalBarrDigiHitMapWithoutPhotons", "EcalBarrPhotonClusters");
- org.lcsim.contrib.uiowa.RonPhotonFinder.RonPhotonFinderSid01 photonFinderEcalEndcap = new org.lcsim.contrib.uiowa.RonPhotonFinder.RonPhotonFinderSid01("EcalEndcapDigiHitMap", "EcalEndcapDigiHitMapWithoutPhotons", "EcalEndcapPhotonClusters");
- add(photonFinderEcalBarrel);
- add(photonFinderEcalEndcap);
- add(new TransientFlagDriver("EcalBarrPhotonClusters"));
- add(new TransientFlagDriver("EcalEndcapPhotonClusters"));
- // Merge to a single list of photons
- ListAddDriver<Cluster> mergePhotonClusters = new ListAddDriver<Cluster>(Cluster.class);
- mergePhotonClusters.addInputList("EcalBarrPhotonClusters");
- mergePhotonClusters.addInputList("EcalEndcapPhotonClusters");
- mergePhotonClusters.setOutputList("PhotonClustersForDTree");
- add(mergePhotonClusters);
- add(new TransientFlagDriver("PhotonClustersForDTree"));
- } else {
- // Make photons in barrel & endcap together
- org.lcsim.contrib.Cassell.recon.DTPhotons.RonDTPhotonFinderSid01 photonFinder = new org.lcsim.contrib.Cassell.recon.DTPhotons.RonDTPhotonFinderSid01("EcalDigiHitMap", "EcalDigiHitMapWithoutPhotons", "PhotonClustersForDTree");
+ {
+ // We have to use ALL hits for the photon-finder -- this is because it uses the
+ // presence of hits in early layers to veto on charged particles.
+ org.lcsim.contrib.Cassell.recon.DTPhotons.RonDTPhotonFinderSid01 photonFinder = new org.lcsim.contrib.Cassell.recon.DTPhotons.RonDTPhotonFinderSid01("EcalDigiHitMap", "EcalDigiHitMapMinusPreliminaryPhotons", "PreliminaryPhotonClustersForDTree");
add(photonFinder);
+ add(new TransientFlagDriver("PreliminaryPhotonClustersForDTree"));
+
+ // Now go back and ensure that no photon uses hits from a charged particle's MIP.
+ // We can either remove those individual hits or veto entire clusters.
+ boolean remove = false;
+ boolean findVetoedPhotons = true;
+ if (remove) {
+ add(new RemoveHitsFromClusters("PreliminaryPhotonClustersForDTree", "MuonTrackClusterMap", "PhotonsMinusMuonHits"));
+ add(new RemoveHitsFromClusters("PhotonsMinusMuonHits", "ShowerFinderMapTrackToMip", "PhotonClustersForDTree"));
+ } else {
+ add(new VetoHitsFromClusters("PreliminaryPhotonClustersForDTree", "MuonTrackClusterMap", "PhotonsMinusMuonHits"));
+ add(new VetoHitsFromClusters("PhotonsMinusMuonHits", "ShowerFinderMapTrackToMip", "PhotonClustersForDTree"));
+ if (findVetoedPhotons) {
+ // Test: pick out vetoed clusters
+ add(new ListSubtractDriver("PreliminaryPhotonClustersForDTree", "PhotonClustersForDTree", "VetoedPhotonClusters"));
+ add(new CheckDisjoint("PhotonClustersForDTree", "VetoedPhotonClusters"));
+ add(new RemoveHitsFromClusters("VetoedPhotonClusters", "MuonTrackClusterMap", "VetoedPhotonClustersMinusMuonHits"));
+ add(new RemoveHitsFromClusters("VetoedPhotonClustersMinusMuonHits", "ShowerFinderMapTrackToMip", "VetoedPhotonClustersMinusMuonHitsAndMipHits"));
+ add(new ClusterListToHitMapDriver("VetoedPhotonClustersMinusMuonHitsAndMipHits", "PhotonVetoHitMap"));
+ }
+ }
+ add(new TransientFlagDriver("PhotonsMinusMuonHits"));
add(new TransientFlagDriver("PhotonClustersForDTree"));
- // Split back into barrel & endcap
- // This is a little fiddly -- need to do one subtraction to
- // identify the photon hits, then a second to remove the photon
- // hits from the previous hitmaps.
- HitMapSubtractDriver separateEcal1 = new HitMapSubtractDriver("EcalBarrDigiHitMap", "EcalDigiHitMapWithoutPhotons", "EcalBarrel_photonHits");
- HitMapSubtractDriver separateEcal2 = new HitMapSubtractDriver("EcalEndcapDigiHitMap", "EcalDigiHitMapWithoutPhotons", "EcalEndcap_photonHits");
- HitMapSubtractDriver separateEcal3 = new HitMapSubtractDriver("EcalBarrDigiHitMap", "EcalBarrel_photonHits", "EcalBarrDigiHitMapWithoutPhotons");
- HitMapSubtractDriver separateEcal4 = new HitMapSubtractDriver("EcalEndcapDigiHitMap", "EcalEndcap_photonHits", "EcalEndcapDigiHitMapWithoutPhotons");
- add(separateEcal1);
- add(separateEcal2);
- add(separateEcal3);
- add(separateEcal4);
- if (useForwardEcal) {
- HitMapSubtractDriver separateEcal5 = new HitMapSubtractDriver("ForwardEcalEndcapDigiHitMap", "EcalDigiHitMapWithoutPhotons", "ForwardEcalEndcap_photonHits");
- HitMapSubtractDriver separateEcal6 = new HitMapSubtractDriver("ForwardEcalEndcapDigiHitMap", "ForwardEcalEndcap_photonHits", "ForwardEcalEndcapDigiHitMapWithoutPhotons");
- add(separateEcal5);
- add(separateEcal6);
+
+ // Identify which hits were used for photons
+ add(new ClusterListToHitMapDriver("PhotonClustersForDTree", "PhotonHitMap"));
+ add(new CheckDisjoint("ShowerFinderMips", "PhotonHitMap"));
+
+ // Identify remaining hits not used for photons or muons or mips
+ if (!remove && findVetoedPhotons) {
+ add(new HitMapSubtractDriver("RecoDigiHitMapWithoutMuonsOrMips", "PhotonHitMap", "TmpRecoDigiHitMapWithoutMuonsOrMipsOrPhotons"));
+ add(new HitMapSubtractDriver("TmpRecoDigiHitMapWithoutMuonsOrMipsOrPhotons", "PhotonVetoHitMap", "RecoDigiHitMapWithoutMuonsOrMipsOrPhotons"));
+ } else {
+ add(new HitMapSubtractDriver("RecoDigiHitMapWithoutMuonsOrMips", "PhotonHitMap", "RecoDigiHitMapWithoutMuonsOrMipsOrPhotons")); // Remove Muon/MIP hits
+ //add(new HitMapSubtractDriver("RecoDigiHitMap", "PhotonHitMap", "RecoDigiHitMapWithoutMuonsOrMipsOrPhotons")); // Keep all non-photon hits
}
+ add(new CheckDisjoint("RecoDigiHitMapWithoutMuonsOrMipsOrPhotons", "PhotonHitMap"));
}
- // Run DTree
- {
- DirectedTreeDriver treeDriverEcalBarr = new DirectedTreeDriver();
- treeDriverEcalBarr.setInputHitMap("EcalBarrDigiHitMapWithoutPhotons");
- treeDriverEcalBarr.setOutputClusterList("EcalBarrDTrees");
- treeDriverEcalBarr.setOutputHitMap("EcalBarrDigiHitMapAfterDTree");
- DirectedTreeDriver treeDriverEcalEndcap = new DirectedTreeDriver();
- treeDriverEcalEndcap.setInputHitMap("EcalEndcapDigiHitMapWithoutPhotons");
- treeDriverEcalEndcap.setOutputClusterList("EcalEndcapDTrees");
- treeDriverEcalEndcap.setOutputHitMap("EcalEndcapDigiHitMapAfterDTree");
- DirectedTreeDriver treeDriverHcalBarr = new DirectedTreeDriver();
- treeDriverHcalBarr.setInputHitMap("HcalBarrDigiHitMap");
- treeDriverHcalBarr.setOutputClusterList("HcalBarrDTrees");
- treeDriverHcalBarr.setOutputHitMap("HcalBarrDigiHitMapAfterDTree");
- DirectedTreeDriver treeDriverHcalEndcap = new DirectedTreeDriver();
- treeDriverHcalEndcap.setInputHitMap("HcalEndcapDigiHitMap");
- treeDriverHcalEndcap.setOutputClusterList("HcalEndcapDTrees");
- treeDriverHcalEndcap.setOutputHitMap("HcalEndcapDigiHitMapAfterDTree");
- add(treeDriverEcalBarr);
- add(treeDriverEcalEndcap);
- add(treeDriverHcalBarr);
- add(treeDriverHcalEndcap);
- add(new TransientFlagDriver("EcalBarrDTrees"));
- add(new TransientFlagDriver("EcalEndcapDTrees"));
- add(new TransientFlagDriver("HcalBarrDTrees"));
- add(new TransientFlagDriver("HcalEndcapDTrees"));
+ // Run DTree on each subdetector separately:
+ Map<String,String> mapInputListToDTreeClusterList = new HashMap<String,String>();
+ for (String rawInputName : recoHitLists) {
+ String rawInputHitMapName = mapListToHitMap.get(rawInputName);
+ String filteredInputHitMapName = (new String(rawInputName)).replace("DigiHits", "DigiHitMapForDTree");
+ String outputHitMapName = new String(rawInputHitMapName+"AfterDTree");
+ String outputClusterListName = new String(rawInputHitMapName+"Clusters");
+ mapInputListToDTreeClusterList.put(rawInputName, outputClusterListName);
+ // Filter hitmap to only contain hits from this subdet that are not muon/mip/photon hits
+ add(new HitMapAndDriver(rawInputHitMapName, "RecoDigiHitMapWithoutMuonsOrMipsOrPhotons", filteredInputHitMapName));
+ if (hitsForMST.contains(rawInputName)) {
+ // Run MST
+ org.lcsim.recon.cluster.mst.MSTClusterDriver mstDriver = new org.lcsim.recon.cluster.mst.MSTClusterDriver(outputHitMapName, outputClusterListName);
+ mstDriver.addInputHitMap(filteredInputHitMapName);
+ mstDriver.setThreshold(1500.0); // FIXME: This is not optimal
+ mstDriver.registerMetrics(new org.lcsim.recon.cluster.mst.MinimumHitToHitDistance());
+ add(mstDriver);
+ } else {
+ // Run DTree
+ DirectedTreeDriver treeDriver = new DirectedTreeDriver();
+ treeDriver.setInputHitMap(filteredInputHitMapName);
+ treeDriver.setOutputClusterList(outputClusterListName);
+ treeDriver.setOutputHitMap(outputHitMapName);
+ add(treeDriver);
+ }
+ add(new TransientFlagDriver(outputClusterListName));
}
-
- // Run DTree on MUCAL -- this is currently rather tricky.
- {
- org.lcsim.recon.cluster.mst.MSTClusterDriver mstMcalBarrel = new org.lcsim.recon.cluster.mst.MSTClusterDriver("MuonBarrDigiHitMapAfterDTree", "MuonBarrDTrees");
- org.lcsim.recon.cluster.mst.MSTClusterDriver mstMcalEndcap = new org.lcsim.recon.cluster.mst.MSTClusterDriver("MuonEndcapDigiHitMapAfterDTree", "MuonEndcapDTrees");
- mstMcalBarrel.addInputHitMap("MuonBarrDigiHitMap");
- mstMcalEndcap.addInputHitMap("MuonEndcapDigiHitMap");
- mstMcalBarrel.setThreshold(1500.0); // 3x3cm segmentation transversely, 6.5cm longitudinally
- mstMcalEndcap.setThreshold(1500.0); // 3x3cm segmentation transversely, 6.5cm longitudinally
- mstMcalBarrel.registerMetrics(new org.lcsim.recon.cluster.mst.MinimumHitToHitDistance());
- mstMcalEndcap.registerMetrics(new org.lcsim.recon.cluster.mst.MinimumHitToHitDistance());
- add(mstMcalBarrel);
- add(mstMcalEndcap);
- add(new TransientFlagDriver("MuonBarrDTrees"));
- add(new TransientFlagDriver("MuonEndcapDTrees"));
- }
-
- // Run DTree on FCAL -- this is currently rather tricky.
- if (useForwardEcal) {
- org.lcsim.recon.cluster.mst.MSTClusterDriver mstFcalEndcap = new org.lcsim.recon.cluster.mst.MSTClusterDriver("ForwardEcalEndcapDigiHitMapAfterDTree", "ForwardEcalEndcapDTrees");
- mstFcalEndcap.addInputHitMap("ForwardEcalEndcapDigiHitMap");
- mstFcalEndcap.setThreshold(12.5); // 3.5x3.5cm segmentation transversely, 3.7mm longitudinally
- mstFcalEndcap.registerMetrics(new org.lcsim.recon.cluster.mst.MinimumHitToHitDistance());
- add(mstFcalEndcap);
- add(new TransientFlagDriver("ForwardEcalEndcapDTrees"));
+
+ // Merge/categorize & write out
+ ListAddDriver<Cluster> mergeDTreeClustersECAL = new ListAddDriver<Cluster>(Cluster.class);
+ ListAddDriver<Cluster> mergeDTreeClustersHCAL = new ListAddDriver<Cluster>(Cluster.class);
+ ListAddDriver<Cluster> mergeDTreeClustersMCAL = new ListAddDriver<Cluster>(Cluster.class);
+ ListAddDriver<Cluster> mergeDTreeClustersAll = new ListAddDriver<Cluster>(Cluster.class);
+ for (String inputName : recoHitLists) {
+ String clusterListName = mapInputListToDTreeClusterList.get(inputName);
+ mergeDTreeClustersAll.addInputList(clusterListName);
+ if (inputName.contains("Ecal")) {
+ mergeDTreeClustersECAL.addInputList(clusterListName);
+ }
+ if (inputName.contains("Hcal")) {
+ mergeDTreeClustersHCAL.addInputList(clusterListName);
+ }
+ if (inputName.contains("MuonEndcap") || inputName.contains("MuonBarr")) {
+ mergeDTreeClustersMCAL.addInputList(clusterListName);
+ }
}
+ mergeDTreeClustersECAL.setOutputList("DTreeClustersECAL");
+ mergeDTreeClustersHCAL.setOutputList("DTreeClustersHCAL");
+ mergeDTreeClustersMCAL.setOutputList("DTreeClustersMCAL");
+ mergeDTreeClustersAll .setOutputList("DTreeClusters");
+ add(mergeDTreeClustersECAL);
+ add(mergeDTreeClustersHCAL);
+ add(mergeDTreeClustersMCAL);
+ add(mergeDTreeClustersAll);
+ add(new TransientFlagDriver("DTreeClustersECAL"));
+ add(new TransientFlagDriver("DTreeClustersHCAL"));
+ add(new TransientFlagDriver("DTreeClustersMCAL"));
+ add(new TransientFlagDriver("DTreeClusters"));
- // Merge & write out
- {
- ListAddDriver<Cluster> mergeDTreeClustersECAL = new ListAddDriver<Cluster>(Cluster.class);
- mergeDTreeClustersECAL.addInputList("EcalBarrDTrees");
- mergeDTreeClustersECAL.addInputList("EcalEndcapDTrees");
- mergeDTreeClustersECAL.setOutputList("DTreeClustersECAL");
- add(mergeDTreeClustersECAL);
- add(new TransientFlagDriver("DTreeClustersECAL"));
-
- ListAddDriver<Cluster> mergeDTreeClustersHCAL = new ListAddDriver<Cluster>(Cluster.class);
- mergeDTreeClustersHCAL.addInputList("HcalBarrDTrees");
- mergeDTreeClustersHCAL.addInputList("HcalEndcapDTrees");
- mergeDTreeClustersHCAL.setOutputList("DTreeClustersHCAL");
- add(mergeDTreeClustersHCAL);
- add(new TransientFlagDriver("DTreeClustersHCAL"));
-
- ListAddDriver<Cluster> mergeDTreeClustersMCAL = new ListAddDriver<Cluster>(Cluster.class);
- //mergeDTreeClustersMCAL.addInputList("MuonBarrDTrees");
- mergeDTreeClustersMCAL.addInputList("MuonEndcapDTrees");
- mergeDTreeClustersMCAL.setOutputList("DTreeClustersMCAL");
- add(mergeDTreeClustersMCAL);
- add(new TransientFlagDriver("DTreeClustersMCAL"));
-
- ListAddDriver<Cluster> DTreeClustersMCALmuonID = new ListAddDriver<Cluster>(Cluster.class);
- DTreeClustersMCALmuonID.addInputList("MuonBarrDTrees");
- DTreeClustersMCALmuonID.addInputList("MuonEndcapDTrees");
- DTreeClustersMCALmuonID.setOutputList("DTreeClustersMCALforMuonID");
- add(DTreeClustersMCALmuonID);
- add(new TransientFlagDriver("DTreeClustersMCALforMuonID"));
-
- if (useForwardEcal) {
- ListAddDriver<Cluster> mergeDTreeClustersFCAL = new ListAddDriver<Cluster>(Cluster.class);
- mergeDTreeClustersFCAL.addInputList("ForwardEcalEndcapDTrees");
- mergeDTreeClustersFCAL.setOutputList("DTreeClustersFCAL");
- add(mergeDTreeClustersFCAL);
- add(new TransientFlagDriver("DTreeClustersFCAL"));
- }
-
- ListAddDriver<Cluster> mergeDTreeClusters = new ListAddDriver<Cluster>(Cluster.class);
- mergeDTreeClusters.addInputList("DTreeClustersECAL");
- mergeDTreeClusters.addInputList("DTreeClustersHCAL");
- mergeDTreeClusters.addInputList("DTreeClustersMCAL");
- if (useForwardEcal) {
- mergeDTreeClusters.addInputList("DTreeClustersFCAL");
- }
- mergeDTreeClusters.setOutputList("DTreeClusters");
- add(mergeDTreeClusters);
- add(new TransientFlagDriver("DTreeClusters"));
- }
}
}