lcsim/src/org/lcsim/recon/pfa/structural
diff -u -r1.3 -r1.4
--- SetUpDTreeForReclustering.java 13 Jul 2008 23:33:48 -0000 1.3
+++ SetUpDTreeForReclustering.java 12 Aug 2008 23:44:50 -0000 1.4
@@ -11,6 +11,9 @@
public class SetUpDTreeForReclustering extends Driver
{
boolean useOldRonPhotonFinder = false;
+ boolean useMuonEndcap = true;
+ boolean useMuonBarrel = false;
+ boolean useForwardEcal = false;
public SetUpDTreeForReclustering() {
// Convert DigiSim's lists to hitmaps:
@@ -31,6 +34,30 @@
add(converter3);
add(converter4);
+ // Convert muon lists to hitmaps:
+ if (useMuonBarrel) {
+ HitListToHitMapDriver converter5 = new HitListToHitMapDriver();
+ converter5.addInputList("MuonBarrHits");
+ converter5.setOutput("MuonBarrHitMap");
+ add(converter5);
+ }
+ if (useMuonEndcap) {
+ HitListToHitMapDriver converter6 = new HitListToHitMapDriver();
+ converter6.addInputList("MuonEndcapHits");
+ converter6.setOutput("MuonEndcapHitMap");
+ add(converter6);
+ }
+
+ // Convert forward EM endcap hits
+ // NB, must have digisim configured to handle forward ECAL
+ if (useForwardEcal) {
+ // Convert forward EM endcap hits:
+ HitListToHitMapDriver converter7 = new HitListToHitMapDriver();
+ converter7.addInputList("ForwardEcalEndcapDigiHits");
+ converter7.setOutput("ForwardEcalEndcapDigiHitMap");
+ add(converter7);
+ }
+
// Find photons in ECAL
if (useOldRonPhotonFinder) {
// Make photons in barrel & endcap separately
@@ -49,6 +76,9 @@
HitMapAddDriver combineEcal = new HitMapAddDriver();
combineEcal.addInputHitMap("EcalBarrDigiHitMap");
combineEcal.addInputHitMap("EcalEndcapDigiHitMap");
+ if (useForwardEcal) {
+ combineEcal.addInputHitMap("ForwardEcalEndcapDigiHitMap"); // Include forward endcap
+ }
combineEcal.setOutputHitMap("EcalDigiHitMap");
add(combineEcal);
// Make photons in barrel & endcap together
@@ -66,6 +96,12 @@
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);
+ }
}
// Run DTree
@@ -90,6 +126,29 @@
add(treeDriverHcalBarr);
add(treeDriverHcalEndcap);
+ // DTree doesn't handly anything except ECAL & HCAL right now, so use MST instead:
+ if (useMuonBarrel) {
+ org.lcsim.recon.cluster.mst.MSTClusterDriver mstMcalBarrel = new org.lcsim.recon.cluster.mst.MSTClusterDriver("MuonBarrHitMapAfterDTree", "MuonBarrDTrees");
+ mstMcalBarrel.addInputHitMap("MuonBarrHitMap");
+ mstMcalBarrel.setThreshold(1500.0); // 3x3cm segmentation transversely, 6.5cm longitudinally
+ mstMcalBarrel.registerMetrics(new org.lcsim.recon.cluster.mst.MinimumHitToHitDistance());
+ add(mstMcalBarrel);
+ }
+ if (useMuonEndcap) {
+ org.lcsim.recon.cluster.mst.MSTClusterDriver mstMcalEndcap = new org.lcsim.recon.cluster.mst.MSTClusterDriver("MuonEndcapHitMapAfterDTree", "MuonEndcapDTrees");
+ mstMcalEndcap.addInputHitMap("MuonEndcapHitMap");
+ mstMcalEndcap.setThreshold(1500.0); // 3x3cm segmentation transversely, 6.5cm longitudinally
+ mstMcalEndcap.registerMetrics(new org.lcsim.recon.cluster.mst.MinimumHitToHitDistance());
+ add(mstMcalEndcap);
+ }
+ 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);
+ }
+
// Merge & write out
ListAddDriver<Cluster> mergeDTreeClustersECAL = new ListAddDriver<Cluster>(Cluster.class);
mergeDTreeClustersECAL.addInputList("EcalBarrDTrees");
@@ -103,9 +162,35 @@
mergeDTreeClustersHCAL.setOutputList("DTreeClustersHCAL");
add(mergeDTreeClustersHCAL);
+ if (useMuonBarrel || useMuonEndcap) {
+ ListAddDriver<Cluster> mergeDTreeClustersMCAL = new ListAddDriver<Cluster>(Cluster.class);
+ if (useMuonBarrel) {
+ mergeDTreeClustersMCAL.addInputList("MuonBarrDTrees");
+ }
+ if (useMuonEndcap) {
+ mergeDTreeClustersMCAL.addInputList("MuonEndcapDTrees");
+ }
+ mergeDTreeClustersMCAL.setOutputList("DTreeClustersMCAL");
+ add(mergeDTreeClustersMCAL);
+ }
+
+ if (useForwardEcal) {
+ ListAddDriver<Cluster> mergeDTreeClustersFCAL = new ListAddDriver<Cluster>(Cluster.class);
+ mergeDTreeClustersFCAL.addInputList("ForwardEcalEndcapDTrees");
+ mergeDTreeClustersFCAL.setOutputList("DTreeClustersFCAL");
+ add(mergeDTreeClustersFCAL);
+ }
+
+
ListAddDriver<Cluster> mergeDTreeClusters = new ListAddDriver<Cluster>(Cluster.class);
mergeDTreeClusters.addInputList("DTreeClustersECAL");
mergeDTreeClusters.addInputList("DTreeClustersHCAL");
+ if (useMuonBarrel || useMuonEndcap) {
+ mergeDTreeClusters.addInputList("DTreeClustersMCAL");
+ }
+ if (useForwardEcal) {
+ mergeDTreeClusters.addInputList("DTreeClustersFCAL");
+ }
mergeDTreeClusters.setOutputList("DTreeClusters");
add(mergeDTreeClusters);
}