Print

Print


Commit in lcsim/src/org/lcsim/contrib/uiowa on MAIN
NonTrivialPFA.java+52-541.6 -> 1.7
MJC: Refactor hadron reconstruction in PFA, to avoid excess repetition

lcsim/src/org/lcsim/contrib/uiowa
NonTrivialPFA.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- NonTrivialPFA.java	23 Apr 2007 22:33:35 -0000	1.6
+++ NonTrivialPFA.java	24 Apr 2007 01:14:46 -0000	1.7
@@ -183,6 +183,7 @@
 	// Find simple clusters
 	// --------------------
 
+	String largePhotonParticleList = "large photon particles (ron calib)";
 	{
 	    // Photons
 	    String prefix = "photonfinder: ";
@@ -192,14 +193,10 @@
 	    String outputHitMap = "hit map ecal without photons";
 	    addPhotonFinder(prefix, inputHitMap, inputTrackList, photonClusterList, outputHitMap);
 	    prefix = "photonmaker: ";
-	    String photonParticleList_adhoc = "large photon particles (adhoc calib)";
-	    String photonParticleList_RonCalib = "large photon particles (ron calib)";
-	    addPhotonParticleMaker(prefix, photonClusterList, photonParticleList_adhoc, adHocCalib);
-	    addPhotonParticleMaker(prefix, photonClusterList, photonParticleList_RonCalib, ronPhotonCalib);
+	    addPhotonParticleMaker(prefix, photonClusterList, largePhotonParticleList, ronPhotonCalib);
 	    // Book-keeping
 	    accountant.addListOfNamedLists( new String[] { "hit map ecal without photons", "photon clusters", "input hit map hcal" } );
-	    accountant.addListOfNamedLists( new String[] { "hit map ecal without photons", photonParticleList_adhoc, "input hit map hcal" } );
-	    accountant.addListOfNamedLists( new String[] { "hit map ecal without photons", photonParticleList_RonCalib, "input hit map hcal" } );
+	    accountant.addListOfNamedLists( new String[] { "hit map ecal without photons", largePhotonParticleList, "input hit map hcal" } );
 	}
 
 
@@ -308,66 +305,34 @@
 	    String tempParticleList = "charged hadron particles";
 	    prefix = "firstpasstrackmatcher: ";
 	    addTrackMatcher(prefix, trackList, inputMIPList, haloClusterList, smallClusterList, tempParticleList, false, null, false); // Check: "trackList" ?
-	    
+
 	    // Look for teeny clusters near front of ECAL (soft photons)
 	    prefix = "smallphotonfinder: ";
-	    String smallPhotonParticleList_adhoc = "small photons (adhoc calib)";
-	    String smallPhotonParticleList_RonCalib = "small photons (ron calib)";
+	    String smallPhotonParticleList = "small photons (ron calib)";
 	    String haloMinusPhotonClusterList = "skeletons plus halo minus small photons";
 	    String smallClusterMinusPhotonClusterList = "mst clusters linked (<10 hits) minus small photons";
 	    String smallPhotonClusterList = "small photon clusters";
 	    SimpleFragmentIdentifier fragID = new SimpleFragmentIdentifier(10, 100.0);
 	    fragID.addParticleList(tempParticleList);
 	    addSmallPhotonClusterFinder(prefix, fragID, haloClusterList, smallClusterList, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, smallPhotonClusterList);
-            addSmallPhotonParticleFinder(prefix+"adhoc: ",smallPhotonClusterList,smallPhotonParticleList_adhoc,adHocCalib);
-            addSmallPhotonParticleFinder(prefix+"ron: ",smallPhotonClusterList,smallPhotonParticleList_RonCalib,ronPhotonCalib);
+            addSmallPhotonParticleFinder(prefix+"ron: ",smallPhotonClusterList,smallPhotonParticleList,ronPhotonCalib);
 
-	    // Merge/handle fragments
+	    // Support classes to merge/handle fragments
 	    SimpleFragmentMerger fragMerge = new SimpleFragmentMerger();
 	    DropFragments fragNoMerge = new DropFragments();
 	    CheatFragmentIdentifier fragMergeCheat = setUpCheatFragmentIdentifier("cheatid: ", haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, unusedHitMap2, mcListName);
-	    String tempClusterListMerge = "clusters with fragments merged";
-	    String tempClusterListNoMerge = "clusters with fragments not merged";
-	    String tempHitMapMerge = "hits left over after fragments merged";
-	    String tempHitMapNoMerge = "hits left over after fragments not merged";
-	    prefix = "fragmerge: ";
-	    addFragmentHandling(prefix, fragID, fragMerge,   haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, tempClusterListMerge,   tempHitMapMerge);
-	    addFragmentHandling(prefix, fragID, fragNoMerge, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, tempClusterListNoMerge, tempHitMapNoMerge);
-	    
-	    // Repeat the hadron ID step with the revised cluster list after fragment handling
-	    prefix = "trackmatchsecondpass: ";
-	    String tempChargedParticleListMerge = "charged hadron particles 2";
-	    String tempChargedParticleListNoMerge = "charged hadron particles 2 [no merge]";
-	    addTrackMatcher(prefix+"adhoc/merge", trackList, inputMIPList, tempClusterListMerge,   null, tempChargedParticleListMerge,   true, adHocCalib, false); // Check: "trackList" ?
-	    addTrackMatcher(prefix+"adhoc/nomerge", trackList, inputMIPList, tempClusterListNoMerge, null, tempChargedParticleListNoMerge, true, adHocCalib, false); // Check: "trackList" ?
-
-	    // ... and then any remaining clusters should be neutral
-	    String tempNeutralParticleListMerge_adhoc   = "neutral hadron particles (adhoc calib)";
-	    String tempNeutralParticleListNoMerge_adhoc = "neutral hadron particles [no merge] (adhoc calib)";
-	    String tempNeutralParticleListMerge_RonCalib   = "neutral hadron particles (ron calib)";
-	    String tempNeutralParticleListNoMerge_RonCalib = "neutral hadron particles [no merge] (ron calib)";
-	    prefix = "neutrals: ";
-	    addNeutralHadronHandler(prefix+"adhoc/merge: ", tempChargedParticleListMerge,   tempClusterListMerge,   tempNeutralParticleListMerge_adhoc,   adHocCalib);
-	    addNeutralHadronHandler(prefix+"adhoc/nomerge: ", tempChargedParticleListNoMerge, tempClusterListNoMerge, tempNeutralParticleListNoMerge_adhoc, adHocCalib);
-	    addNeutralHadronHandler(prefix+"ron/merge: ", tempChargedParticleListMerge,   tempClusterListMerge,   tempNeutralParticleListMerge_RonCalib,   ronNeutralHadronCalib);
-	    addNeutralHadronHandler(prefix+"ron/nomerge: ", tempChargedParticleListNoMerge, tempClusterListNoMerge, tempNeutralParticleListNoMerge_RonCalib, ronNeutralHadronCalib);
-
-	    // Make particle lists
-	    String largePhotonParticleList_adhoc = "large photon particles (adhoc calib)";
-	    String[] particleListsMerge_adhoc   = { tempChargedParticleListMerge,   tempNeutralParticleListMerge_adhoc,   largePhotonParticleList_adhoc, smallPhotonParticleList_adhoc } ;
-	    String[] particleListsNoMerge_adhoc = { tempChargedParticleListNoMerge, tempNeutralParticleListNoMerge_adhoc, largePhotonParticleList_adhoc, smallPhotonParticleList_adhoc } ;
-	    String combinedParticleListMerge_adhoc   = "all particles (adhoc calib)";
-	    String combinedParticleListNoMerge_adhoc = "all particles [no frag merge] (adhoc calib)";
-	    addMerger(particleListsMerge_adhoc,   combinedParticleListMerge_adhoc);
-	    addMerger(particleListsNoMerge_adhoc, combinedParticleListNoMerge_adhoc);
-	    // And with Ron's calibration:
-	    String largePhotonParticleList_RonCalib = "large photon particles (ron calib)";
-	    String[] particleListsMerge_RonCalib   = { tempChargedParticleListMerge,   tempNeutralParticleListMerge_RonCalib,   largePhotonParticleList_RonCalib, smallPhotonParticleList_RonCalib } ;
-	    String[] particleListsNoMerge_RonCalib = { tempChargedParticleListNoMerge, tempNeutralParticleListNoMerge_RonCalib, largePhotonParticleList_RonCalib, smallPhotonParticleList_RonCalib } ;
-	    String combinedParticleListMerge_RonCalib   = "all particles (ron calib)";
-	    String combinedParticleListNoMerge_RonCalib = "all particles [no frag merge] (ron calib)";
-	    addMerger(particleListsMerge_RonCalib,   combinedParticleListMerge_RonCalib);
-	    addMerger(particleListsNoMerge_RonCalib, combinedParticleListNoMerge_RonCalib);
+
+	    // Now we can fork according to what calibration/options we want to use.
+	    addHadronFinders("merge/ron/ron: ", "all particles (ron calib)", fragID, fragMerge, inputMIPList, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, trackList, smallPhotonParticleList, largePhotonParticleList, ronNeutralHadronCalib, ronNeutralHadronCalib);
+	    addHadronFinders("nomerge/ron/ron: ", "all particles [no frag merge] (ron calib)", fragID, fragNoMerge, inputMIPList, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, trackList, smallPhotonParticleList, largePhotonParticleList, ronNeutralHadronCalib, ronNeutralHadronCalib);
+	    addHadronFinders("merge/ron/adhoc: ", "all particles (ron calib, adhoc calib for E/p)", fragID, fragMerge, inputMIPList, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, trackList, smallPhotonParticleList, largePhotonParticleList, ronNeutralHadronCalib, adHocCalib);
+	    addHadronFinders("nomerge/ron/adhoc: ", "all particles [no frag merge] (ron calib, adhoc calib for E/p)", fragID, fragNoMerge, inputMIPList, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, trackList, smallPhotonParticleList, largePhotonParticleList, ronNeutralHadronCalib, adHocCalib);
+	    addHadronFinders("merge/adhoc/adhoc: ", "all particles (adhoc calib)", fragID, fragMerge, inputMIPList, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, trackList, smallPhotonParticleList, largePhotonParticleList, adHocCalib, adHocCalib);
+	    addHadronFinders("nomerge/adhoc/adhoc: ", "all particles [no frag merge] (adhoc calib)", fragID, fragNoMerge, inputMIPList, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, trackList, smallPhotonParticleList, largePhotonParticleList, adHocCalib, adHocCalib);
+
+	    // Make sure lists are accessible to Ron using old names.
+	    add(new ListFilterDriver(new DummyDecisionMakerSingle<ReconstructedParticle>(), "merge/ron/ron: neutral hadron particles", "neutral hadron particles (ron calib)"));
+	    add(new ListFilterDriver(new DummyDecisionMakerSingle<ReconstructedParticle>(), "merge/ron/ron: charged hadron particles after fragment handling", "charged hadron particles 2"));
 	}
 
 	// Make sure the book-keeping is OK:
@@ -885,4 +850,37 @@
 	mergeParticles.setOutputList(outputParticleList);
 	add(mergeParticles);
     }
+
+    protected void addHadronFinders(String prefix, 
+				    String outputList,
+				    FragmentIdentifier fragID,
+				    FragmentMerger fragMerge, 				    
+				    String inputMIPList,
+				    String haloMinusPhotonClusterList,
+				    String smallClusterMinusPhotonClusterList,
+				    String trackList,
+				    String smallPhotonParticleList,
+				    String largePhotonParticleList,
+				    ClusterEnergyCalculator calibration,
+				    ClusterEnergyCalculator calibrationForEoverP)
+    {
+	// Fragment handling
+	String clusterList = prefix+"clusters after fragment handling";
+	String hitMap = prefix+"hits left over after fragment handling";
+	addFragmentHandling(prefix+"FragmentHandling: ", fragID, fragMerge, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, clusterList, hitMap);
+
+	// Repeat the hadron ID step with the revised cluster list after fragment handling
+	String tempChargedParticleList = prefix+"charged hadron particles after fragment handling";
+	addTrackMatcher(prefix+"FindCharged: ", trackList, inputMIPList, clusterList, null, tempChargedParticleList,   true, calibrationForEoverP, false);
+	System.out.println(prefix+": Will write out charged particles as '"+tempChargedParticleList+"'");
+
+	// ... and then any remaining clusters should be neutral
+	String tempNeutralParticleList = prefix+"neutral hadron particles";
+	addNeutralHadronHandler(prefix+"FindNeutral: ", tempChargedParticleList, clusterList, tempNeutralParticleList, calibration);
+	System.out.println(prefix+": Will write out neutral particles as '"+tempNeutralParticleList+"'");
+
+	// Make particle lists
+	String[] mergeThese = { tempChargedParticleList, tempNeutralParticleList, largePhotonParticleList, smallPhotonParticleList } ;
+	addMerger(mergeThese, outputList);
+    }
 }
CVSspam 0.2.8