Print

Print


Commit in lcsim/src/org/lcsim/contrib/uiowa on MAIN
NonTrivialPFA.java+28-271.23 -> 1.24
MJC: Rework fragment handling so that fragments can be attached to photons as well as hadrons. Very important for single-particle photon events!

lcsim/src/org/lcsim/contrib/uiowa
NonTrivialPFA.java 1.23 -> 1.24
diff -u -r1.23 -r1.24
--- NonTrivialPFA.java	12 Oct 2007 21:47:19 -0000	1.23
+++ NonTrivialPFA.java	12 Oct 2007 23:30:01 -0000	1.24
@@ -83,9 +83,10 @@
 	// Calibration
 	// -----------
 
-	// Ad-hoc calibration
-	org.lcsim.contrib.uiowa.AdHocEnergyCalibration adHocCalib = new org.lcsim.contrib.uiowa.AdHocEnergyCalibration();
-	add(adHocCalib);
+	// Ad-hoc calibration -- commented out since it can get confused by unexpected CM energies.
+	//org.lcsim.contrib.uiowa.AdHocEnergyCalibration adHocCalib = new org.lcsim.contrib.uiowa.AdHocEnergyCalibration();
+	//add(adHocCalib);
+
 	// Ron's calibrations
 	PhotonClusterEnergyCalculator ronPhotonCalib = new PhotonClusterEnergyCalculator();
 	GenericClusterEnergyCalculator ronGenericCalib = new GenericClusterEnergyCalculator();
@@ -231,8 +232,9 @@
 	// Find simple clusters
 	// --------------------
 
-	String eventPhotonClusters = "photonClusters";
-	String largePhotonParticleList = "largePhotonParticles";
+	String eventPhotonClusters = "photonClustersWithoutFragments";
+	String eventPhotonClustersWithFragments = "photonClusters";
+	String eventLargePhotonParticleList = "largePhotonParticles";
 	String eventHitMapEcalWithoutPhotons = "hitMapEcalWithoutPhotons";
 	{
 	    // Photons
@@ -247,11 +249,8 @@
 	    } else {
 		addPhotonFinder(prefix, eventHitMapEcal, inputTrackList, eventPhotonClusters, eventHitMapEcalWithoutPhotons);
 	    }
-	    prefix = "photonmaker__";
-	    addPhotonParticleMaker(prefix, eventPhotonClusters, largePhotonParticleList, ronPhotonCalib);
 	    // Book-keeping
 	    accountant.addListOfNamedLists( new String[] { eventHitMapEcalWithoutPhotons, eventPhotonClusters, eventHitMapHcal } );
-	    accountant.addListOfNamedLists( new String[] { eventHitMapEcalWithoutPhotons, largePhotonParticleList, eventHitMapHcal } );
 	}
 
 
@@ -413,33 +412,34 @@
 	    CheatFragmentIdentifier fragIDCheat = setUpCheatFragmentIdentifier("cheatid__", eventHaloMinusPhotonClusters, eventSmallClustersNotPhotons, eventUnusedHitsMinusHalo, mcListName);
 
 	    boolean cheatOnFragments = false;
+	    String eventHadronParticles = "HadronParticles";
 	    String eventOutputParticles = "UnflushedPFAReconstructedParticles";
 	    String prefixHadronsMain = "merge_ron_ron__";
-	    if (cheatOnFragments) {
-		addHadronFinders(prefixHadronsMain, eventOutputParticles, fragIDCheat, fragMerge, eventMips, eventHaloMinusPhotonClusters, eventSmallClustersNotPhotons, trackList, eventSmallPhotonParticles, largePhotonParticleList, ronNeutralHadronCalib, ronNeutralHadronCalib, false, mcListName, eventUnusedHitsMinusHalo);
-	    } else {
-		addHadronFinders(prefixHadronsMain, eventOutputParticles, fragID, fragMerge, eventMips, eventHaloMinusPhotonClusters, eventSmallClustersNotPhotons, trackList, eventSmallPhotonParticles, largePhotonParticleList, ronNeutralHadronCalib, ronChargedHadronCalib, false, mcListName, eventUnusedHitsMinusHalo);
+	    {
+		FragmentIdentifier idToUse = fragID;
+		if (cheatOnFragments) { idToUse = fragIDCheat; }
+		addHadronFinders(prefixHadronsMain, eventHadronParticles, idToUse, fragMerge, eventMips, eventHaloMinusPhotonClusters, eventSmallClustersNotPhotons, trackList, ronNeutralHadronCalib, ronNeutralHadronCalib, false, mcListName, eventUnusedHitsMinusHalo, eventPhotonClusters, eventPhotonClustersWithFragments);
 	    }
 
+	    // Make particle lists
+	    prefix = "photonmaker__";
+	    addPhotonParticleMaker(prefix, eventPhotonClustersWithFragments, eventLargePhotonParticleList, ronPhotonCalib);
+	    
+	    String[] mergeThese = { eventHadronParticles, eventLargePhotonParticleList, eventSmallPhotonParticles } ;
+	    addMerger(mergeThese, eventOutputParticles);
+
 	    // Flush the output list to make sure it's LCIO-compatible
 	    String eventOutputParticlesFlushed = "PFAReconstructedParticles";
 	    String eventOutputClustersFromFlushedParticles = "flushedClusters";
 	    add(new FlushReconstructedParticlesDriver(eventOutputParticles, eventOutputParticlesFlushed, eventOutputClustersFromFlushedParticles));
 
-	    // Optionally, other hadron finders with various calibrations etc:
-	    //addHadronFinders("nomerge_ron_ron__", eventOutputParticles+"_noFragMerge", fragID, fragNoMerge, eventMips, eventHaloMinusPhotonClusters, eventSmallClustersNotPhotons, trackList, eventSmallPhotonParticles, largePhotonParticleList, ronNeutralHadronCalib, ronChargedHadronCalib, false);
-	    //addHadronFinders("merge_ron_adhoc__", eventOutputParticles+"_adhocEoverP", fragID, fragMerge, eventMips, eventHaloMinusPhotonClusters, eventSmallClustersNotPhotons, trackList, eventSmallPhotonParticles, largePhotonParticleList, ronNeutralHadronCalib, adHocCalib, false);
-	    //addHadronFinders("nomerge_ron_adhoc__", eventOutputParticles+"_noFragMerge_adhocEoverP", fragID, fragNoMerge, eventMips, eventHaloMinusPhotonClusters, eventSmallClustersNotPhotons, trackList, eventSmallPhotonParticles, largePhotonParticleList, ronNeutralHadronCalib, adHocCalib, false);
-	    //addHadronFinders("merge_adhoc_adhoc__", eventOutputParticles+"_adhoc", fragID, fragMerge, eventMips, eventHaloMinusPhotonClusters, eventSmallClustersNotPhotons, trackList, eventSmallPhotonParticles, largePhotonParticleList, adHocCalib, adHocCalib, false);
-	    //addHadronFinders("nomerge_adhoc_adhoc__", eventOutputParticles+"_noFragMerge_adhoc", fragID, fragNoMerge, eventMips, eventHaloMinusPhotonClusters, eventSmallClustersNotPhotons, trackList, eventSmallPhotonParticles, largePhotonParticleList, adHocCalib, adHocCalib, false);
-
 	    // Now try to be a bit smarter. We can try to handle the cases where >1 track is connected to a cluster.
 	    // Currently buggy -- not stable enough to use in production yet.
 	    //add(new HandleMultiTrackClusters(eventOutputParticles, "all particles (ron calib) -- one track per cluster" ));
 
 	    // Book-keeping
 	    // Need to be smarter about this bit:
-	    accountant.addListOfNamedLists( new String[] { eventSmallPhotonParticles, largePhotonParticleList, "merge_ron_ron__neutralHadronParticles", "merge_ron_ron__chargedHadronParticlesAfterFragmentHandling" } );
+	    accountant.addListOfNamedLists( new String[] { eventSmallPhotonParticles, eventLargePhotonParticleList, "merge_ron_ron__neutralHadronParticles", "merge_ron_ron__chargedHadronParticlesAfterFragmentHandling" } );
 
 	    accountant.addListOfNamedLists( new String[] { eventOutputParticlesFlushed } );
 	}
@@ -884,7 +884,7 @@
 	add(smallPhotonMaker);	
     }
     
-    protected void addFragmentHandling(String prefix, FragmentIdentifier fragID, FragmentMerger fragMerge, String haloMinusPhotonClusterList, String smallClusterMinusPhotonClusterList, String outputClusterList, String outputHitMap, String inputHitMap)
+    protected void addFragmentHandling(String prefix, FragmentIdentifier fragID, FragmentMerger fragMerge, String haloMinusPhotonClusterList, String smallClusterMinusPhotonClusterList, String outputClusterList, String outputHitMap, String inputHitMap, String inputLargePhotonClusterList, String outputLargePhotonClusterList)
     {
 	FragmentHandler fragDriver = new FragmentHandler();
 	fragDriver.addInputClusterList(haloMinusPhotonClusterList);
@@ -895,6 +895,7 @@
 	fragDriver.setFragmentIdentifier(fragID);
 	fragDriver.setFragmentMerger(fragMerge);
 	fragDriver.setAllowAllFragments(false);
+	fragDriver.addInputSeparateNonfragmentClusterList(inputLargePhotonClusterList, outputLargePhotonClusterList);
 	add(fragDriver);
     }
 
@@ -952,18 +953,18 @@
 				    String haloMinusPhotonClusterList,
 				    String smallClusterMinusPhotonClusterList,
 				    String trackList,
-				    String smallPhotonParticleList,
-				    String largePhotonParticleList,
 				    ClusterEnergyCalculator calibration,
 				    ClusterEnergyCalculator calibrationForEoverP,
 				    boolean trackDebug,
 				    String mcListName,
-				    String inputHitMapName)
+				    String inputHitMapName,
+				    String inputLargePhotonClusterList,
+				    String outputLargePhotonClusterList)
     {
 	// Fragment handling
 	String clusterList = prefix+"clustersAfterFragmentHandling";
 	String hitMap = prefix+"hitsLeftOverAfterFragmentHandling";
-	addFragmentHandling(prefix+"FragmentHandling__", fragID, fragMerge, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, clusterList, hitMap, inputHitMapName);
+	addFragmentHandling(prefix+"FragmentHandling__", fragID, fragMerge, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, clusterList, hitMap, inputHitMapName, inputLargePhotonClusterList, outputLargePhotonClusterList);
 
 	// Repeat the hadron ID step with the revised cluster list after fragment handling
 	String tempChargedParticleList = prefix+"chargedHadronParticlesAfterFragmentHandling";
@@ -981,9 +982,9 @@
 	    System.out.println(prefix+": Will write out neutral particles as '"+tempNeutralParticleList+"'");
 	}
 
-	// Make particle lists
-	String[] mergeThese = { tempChargedParticleList, tempNeutralParticleList, largePhotonParticleList, smallPhotonParticleList } ;
+	String[] mergeThese = { tempChargedParticleList, tempNeutralParticleList };
 	addMerger(mergeThese, outputList);
+
     }
 
     // This belongs somewhere central
CVSspam 0.2.8