lcsim/src/org/lcsim/contrib/uiowa
diff -u -r1.22 -r1.23
--- NonTrivialPFA.java 5 Oct 2007 18:08:23 -0000 1.22
+++ NonTrivialPFA.java 12 Oct 2007 21:47:19 -0000 1.23
@@ -57,6 +57,7 @@
import org.lcsim.recon.cluster.util.HitInECALDecision;
import org.lcsim.recon.cluster.structural.LikelihoodFindingStructuralDriver;
import org.lcsim.recon.pfa.structural.HitBookKeeper;
+import org.lcsim.event.base.*;
public class NonTrivialPFA extends Driver
{
@@ -173,9 +174,13 @@
add (new MCFastTracking());
String nonCheatingTrackList = EventHeader.TRACKS;
+ // Find tracks (really cheating)
+ String cheatingTrackList = "Tracks_by_cheat";
+ add (new ImprovisedTrackCheater(mcListName, cheatingTrackList));
+
// Find tracks (cheating)
// Code taken from Steve Magill
- String cheatingTrackList = "Tracks_by_ron";
+ String ronTrackList = "Tracks_by_ron";
{
// Make cheat tracks and cheat clusters
String Tname = "RefinedCheatTracks";
@@ -201,17 +206,23 @@
add(d);
// Make up list of tracks
- org.lcsim.mc.fast.tracking.MCFastTracking ronFastMC = new org.lcsim.mc.fast.tracking.MCFastTracking();
- ronFastMC.setOutputList(cheatingTrackList);
- ronFastMC.setFSList("PerfectRecoMCParticles");
- add(ronFastMC);
+ // Don't use fast MC here since Ron has already sifted the tracks for
+ // reconstructability, and applying the fast MC will double-count inefficiency.
+ //org.lcsim.mc.fast.tracking.MCFastTracking ronFastMC = new org.lcsim.mc.fast.tracking.MCFastTracking();
+ //ronFastMC.setOutputList(ronTrackList);
+ //ronFastMC.setFSList("PerfectRecoMCParticles");
+ //add(ronFastMC);
+ add (new ImprovisedTrackCheater("PerfectRecoMCParticles", ronTrackList));
}
// Choose which track list to use
boolean useRonTrackList = false;
+ boolean useCheatingTrackList = false;
if (useRonTrackList) {
- trackList = cheatingTrackList;
+ trackList = ronTrackList;
mcListName = "PerfectRecoMCParticles";
+ } else if (useCheatingTrackList) {
+ trackList = cheatingTrackList;
} else {
trackList = nonCheatingTrackList;
}
@@ -228,7 +239,7 @@
String prefix = "photonfinder__";
String inputTrackList = trackList;
boolean cheatOnPhotons = false;
- boolean useRonPhotonFinder = false;
+ boolean useRonPhotonFinder = true;
if (cheatOnPhotons) {
addCheatingPhotonFinder(prefix, eventHitMapEcal, inputTrackList, eventPhotonClusters, eventHitMapEcalWithoutPhotons, mcListName);
} else if (useRonPhotonFinder) {
@@ -357,11 +368,17 @@
{
LocalHelixExtrapolationTrackClusterMatcher extrapolate = new LocalHelixExtrapolationTrackClusterMatcher();
extrapolate.setCutSeparation(14.0); // about two cells
+ org.lcsim.recon.pfa.identifier.SimpleTrackClusterMatcher simpleExtrapolate = new org.lcsim.recon.pfa.identifier.SimpleTrackClusterMatcher(14.0);
+ org.lcsim.recon.pfa.identifier.SimpleTrackClusterMatcher simpleCheatExtrapolate = new org.lcsim.recon.pfa.identifier.CheatHelixTrackClusterMatcher(14.0);
CheatTrackClusterMatcher cheater = new CheatTrackClusterMatcher(mcListName);
- CheckSkeletonsForMultipleTracks separate = new CheckSkeletonsForMultipleTracks(evalWrapper, trackList, eventSkeletonClusters, eventSplitSkeletonClusters, eventMips, eventClumps, extrapolate);
- //CheckSkeletonsForMultipleTracks separate = new CheckSkeletonsForMultipleTracks(evalWrapper, trackList, eventSkeletonClusters, eventSplitSkeletonClusters, eventMips, eventClumps, cheater);
+ CheckSkeletonsForMultipleTracks separate = new CheckSkeletonsForMultipleTracks(evalWrapper, trackList, eventSkeletonClusters, eventSplitSkeletonClusters, eventMips, eventClumps, extrapolate); // LOCAL HELIX EXTRAPOLATION BASED ON SimTrackerHits
+ //CheckSkeletonsForMultipleTracks separate = new CheckSkeletonsForMultipleTracks(evalWrapper, trackList, eventSkeletonClusters, eventSplitSkeletonClusters, eventMips, eventClumps, cheater); // CHEATING
+ //CheckSkeletonsForMultipleTracks separate = new CheckSkeletonsForMultipleTracks(evalWrapper, trackList, eventSkeletonClusters, eventSplitSkeletonClusters, eventMips, eventClumps, simpleExtrapolate); // HELIX EXTRAPOLATION FROM ORIGIN BASED ON TRACK PARAMETERS
+ //CheckSkeletonsForMultipleTracks separate = new CheckSkeletonsForMultipleTracks(evalWrapper, trackList, eventSkeletonClusters, eventSplitSkeletonClusters, eventMips, eventClumps, simpleCheatExtrapolate); // HELIX EXTRAPOLATION FROM ORIGIN BASED ON TRUTH MOMENTUM
add(cheater);
add(extrapolate);
+ add(simpleExtrapolate);
+ add(simpleCheatExtrapolate);
add(separate);
}
@@ -399,9 +416,9 @@
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);
+ 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);
+ addHadronFinders(prefixHadronsMain, eventOutputParticles, fragID, fragMerge, eventMips, eventHaloMinusPhotonClusters, eventSmallClustersNotPhotons, trackList, eventSmallPhotonParticles, largePhotonParticleList, ronNeutralHadronCalib, ronChargedHadronCalib, false, mcListName, eventUnusedHitsMinusHalo);
}
// Flush the output list to make sure it's LCIO-compatible
@@ -774,6 +791,9 @@
// First try the MIPs...
MIPChargedParticleMaker hadIDmip = new MIPChargedParticleMaker();
LocalHelixExtrapolationTrackMIPClusterMatcher mipMatch = new LocalHelixExtrapolationTrackMIPClusterMatcher();
+ mipMatch.setDebug(debug);
+ //org.lcsim.recon.pfa.identifier.SimpleTrackMIPClusterMatcher mipMatch = new org.lcsim.recon.pfa.identifier.SimpleTrackMIPClusterMatcher();
+ //org.lcsim.recon.pfa.identifier.SimpleTrackMIPClusterMatcher mipMatch = new org.lcsim.recon.pfa.identifier.CheatHelixTrackMIPClusterMatcher();
add(mipMatch);
hadIDmip.setTrackMatcher(mipMatch);
hadIDmip.setInputTrackList(trackList);
@@ -793,6 +813,8 @@
// Then try the clusters generically:
SimpleChargedParticleMaker hadID = new SimpleChargedParticleMaker();
LocalHelixExtrapolationTrackClusterMatcher clusMatch = new LocalHelixExtrapolationTrackClusterMatcher();
+ //org.lcsim.recon.pfa.identifier.SimpleTrackClusterMatcher clusMatch = new org.lcsim.recon.pfa.identifier.SimpleTrackClusterMatcher();
+ //org.lcsim.recon.pfa.identifier.SimpleTrackClusterMatcher clusMatch = new org.lcsim.recon.pfa.identifier.CheatHelixTrackClusterMatcher();
add(clusMatch);
hadID.setTrackMatcher(clusMatch);
hadID.setInputTrackList(prefix+"tracksMinusMipAssociations");
@@ -803,6 +825,7 @@
CheckEoverP check = new CheckEoverP(calibration,3.0);
check.setDebug(debug);
clusMatch.setExtraCheck(check);
+ //clusMatch.setCalibration(calibration); clusMatch.setCheckEoverP(true); // for use with SimpleTrackClusterMatcher
}
hadID.setDebug(debug);
add(hadID);
@@ -861,15 +884,17 @@
add(smallPhotonMaker);
}
- protected void addFragmentHandling(String prefix, FragmentIdentifier fragID, FragmentMerger fragMerge, String haloMinusPhotonClusterList, String smallClusterMinusPhotonClusterList, String outputClusterList, String outputHitMap)
+ protected void addFragmentHandling(String prefix, FragmentIdentifier fragID, FragmentMerger fragMerge, String haloMinusPhotonClusterList, String smallClusterMinusPhotonClusterList, String outputClusterList, String outputHitMap, String inputHitMap)
{
FragmentHandler fragDriver = new FragmentHandler();
fragDriver.addInputClusterList(haloMinusPhotonClusterList);
fragDriver.addInputClusterList(smallClusterMinusPhotonClusterList);
+ fragDriver.addInputHitMap(inputHitMap);
fragDriver.setOutputClusterList(outputClusterList);
fragDriver.setOutputHitMap(outputHitMap);
fragDriver.setFragmentIdentifier(fragID);
fragDriver.setFragmentMerger(fragMerge);
+ fragDriver.setAllowAllFragments(false);
add(fragDriver);
}
@@ -932,12 +957,13 @@
ClusterEnergyCalculator calibration,
ClusterEnergyCalculator calibrationForEoverP,
boolean trackDebug,
- String mcListName)
+ String mcListName,
+ String inputHitMapName)
{
// Fragment handling
String clusterList = prefix+"clustersAfterFragmentHandling";
String hitMap = prefix+"hitsLeftOverAfterFragmentHandling";
- addFragmentHandling(prefix+"FragmentHandling__", fragID, fragMerge, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, clusterList, hitMap);
+ addFragmentHandling(prefix+"FragmentHandling__", fragID, fragMerge, haloMinusPhotonClusterList, smallClusterMinusPhotonClusterList, clusterList, hitMap, inputHitMapName);
// Repeat the hadron ID step with the revised cluster list after fragment handling
String tempChargedParticleList = prefix+"chargedHadronParticlesAfterFragmentHandling";
@@ -959,4 +985,27 @@
String[] mergeThese = { tempChargedParticleList, tempNeutralParticleList, largePhotonParticleList, smallPhotonParticleList } ;
addMerger(mergeThese, outputList);
}
+
+ // This belongs somewhere central
+ private class ImprovisedTrackCheater extends Driver {
+ String m_inputMCListName;
+ String m_outputTrackListName;
+ public ImprovisedTrackCheater(String inputMCList, String outputTrackList) {
+ m_inputMCListName = inputMCList;
+ m_outputTrackListName = outputTrackList;
+ }
+ protected void process(EventHeader event) {
+ List<MCParticle> mcList = event.get(MCParticle.class, m_inputMCListName);
+ List<Track> trackList = new Vector<Track>();
+ for (MCParticle part : mcList) {
+ if (part.getCharge() != 0) {
+ BaseTrackMC track = new BaseTrackMC(part);
+ trackList.add(track);
+ }
+ }
+ event.put(m_outputTrackListName, trackList);
+ }
+ }
}
+
+