...
- Add, subtract, or clone a named HitMap in the event via a driver:
- HitMapAddDriver
- HitMapSubtractDriver
- HitMapCloneDriver
- Convert formats (including the previous Map<Long,CalorimeterHit> format for backwards-compatability):
- HitMapToClusterListDriver
- HitMapToHitListDriver
- MapToHitMapDriver
- HitListToHitMapDriver
- ClusterListToHitMapDriver
- Filter the hits in a hitmap:
- HitMapFilter
- HitMapFilterDriver
...
See TrivialPFA.java in CVS for a worked implementation. Here is an even simpler piece of code:
No Format |
---|
import org.lcsim.util.hitmap.*; import org.lcsim.event.*; import org.lcsim.event.util.*; import org.lcsim.recon.cluster.cheat.PerfectClusterer; public class TrivialPFA extends Driver { public TrivialPFA() { // Set up a hitmap to hold the raw calorimeter hits in the event // This driver reads in a bunch of List<CalorimeterHit> and writes // out a HitMap to the event. HitMapDriverHitListToHitMapDriver rawHitMap = new HitMapDriverHitListToHitMapDriver(); rawHitMap.addInputList("EcalBarrHits"); rawHitMap.addInputList("EcalEndcapHits"); rawHitMap.addInputList("HcalBarrHits"); rawHitMap.addInputList("HcalEndcapHits"); rawHitMap.setOutput("raw hitmap"); add(rawHitMap); // Set up a list of final-state Monte Carlo particles // This driver will write out a List<MCParticle> to the event. CreateFinalStateMCParticleList mcListMaker = new CreateFinalStateMCParticleList("Gen"); add(mcListMaker); // Cluster the hits (perfect pattern recognition) // This driver will reads in the hitmap and the list of MCParticles. // It writes out a modified hitmap and a List<Cluster>. PerfectClusterer clusterer = new PerfectClusterer(); clusterer.setInputHitMap("raw hitmap"); clusterer.setOutputHitMap("leftover hits"); clusterer.setOutputClusterList("perfect clusters"); clusterer.setMCParticleList("GenFinalStateParticles"); add(clusterer); // [The rest of the PFA would go here] } } |
...
No Format |
---|
public class TrivialPFA extends Driver { public TrivialPFA() { // CalHitMapDriver is a driver that produces hitmaps in the format // needed by DigiSim: add(new org.lcsim.recon.cluster.util.CalHitMapDriver()); // Run DigiSim, producing raw hit collections: org.lcsim.digisim.DigiSimDriver digi = new org.lcsim.digisim.DigiSimDriver(); add(digi); // Convert the output to SimCalorimeterHit format for use in analysis: add( new org.lcsim.digisim.SimCalorimeterHitsDriver() ); // Now we can add some more drivers to analyze the output. For example: // Set up a hitmap for the digisim output hits HitMapDriverHitListToHitMapDriver digiHitMap = new HitMapDriverHitListToHitMapDriver(); digiHitMap.addInputList("EcalBarrDigiHits"); digiHitMap.addInputList("EcalEndcapDigiHits"); digiHitMap.addInputList("HcalBarrDigiHits"); digiHitMap.addInputList("HcalEndcapDigiHits"); digiHitMap.setOutput("digi hitmap"); add(digiHitMap); // Set up the MC list CreateFinalStateMCParticleList mcListMaker = new CreateFinalStateMCParticleList("Gen"); add(mcListMaker); // Cluster the hits (perfect pattern recognition) PerfectClusterer clusterer = new PerfectClusterer(); clusterer.setInputHitMap("digi hitmap"); clusterer.setOutputHitMap("leftover hits"); clusterer.setOutputClusterList("perfect clusters"); clusterer.setMCParticleList("GenFinalStateParticles"); add(clusterer); } } |
...
No Format |
---|
public class CompletePFA extends Driver { public CompletePFA() { // First, use DigiSim to make more realistic hits add(new org.lcsim.recon.cluster.util.CalHitMapDriver()); org.lcsim.digisim.DigiSimDriver digi = new org.lcsim.digisim.DigiSimDriver(); add(digi); add( new org.lcsim.digisim.SimCalorimeterHitsDriver() ); // Produce hitmaps: HitMapDriverHitListToHitMapDriver digiHitMap = new HitMapDriverHitListToHitMapDriver(); digiHitMap.addInputList("EcalBarrDigiHits"); digiHitMap.addInputList("EcalEndcapDigiHits"); digiHitMap.addInputList("HcalBarrDigiHits"); digiHitMap.addInputList("HcalEndcapDigiHits"); digiHitMap.setOutput("digi hitmap"); add(digiHitMap); // Find tracks with the fast MC (output is a List<Track> saved as EventHeader.TRACKS) add (new org.lcsim.mc.fast.tracking.MCFastTracking()); // Run a MIP-finder, possibly taking the tracks as input. // "MipFinder" is a made-up class. MipFinder exampleMipFinder = new MipFinder(); exampleMipFinder.setInputTrackList(EventHeader.TRACKS); exampleMipFinder.setInputHitMap("digi hitmap"); exampleMipFinder.setOutputClusterList("mips"); exampleMipFinder.setOutputHitMap("digi hitmap after removing mips"); add(exampleMipFinder); // Find E/M clusters // "EMFinder" is a made-up class. EMFinder exampleEMFinder = new EMFinder(); exampleEMFinder.setInputHitMap("digi hitmap after removing mips"); exampleEMFinder.setOutputClusterList("em showers"); exampleEMFinder.setOutputHitMap("digi hitmap after removing mips and em showers"); add(exampleEMFinder); // Identify the E/M clusters -- photons? electrons? pi0? // Output is a List<ReconstructedParticle>. // In reality we'd probably iterate a little here on the hit assignments, // and might need to pick up MIP segments for a few electrons, but neglect that for now. // "EMIdentifier" is a made-up class. EMIdentifier exampleEMIdentifier = new EMIdentifier(); exampleEMIdentifier.setInputClusterList("em showers"); exampleEMIdentifier.setInputTrackList(EventHeader.TRACKS); exampleEMIdentifier.setOutputParticleList("identified em particles"); // Now find remaining clusters, which should mostly be from hadrons (and muons) // after a shower/interaction/scatter. This step is very abstracted and would // include all kinds of things such as fragment-handling. // "HADClusterer" is a made-up class. HADClusterer exampleHADClusterer = new HADClusterer(); exampleHADClusterer.setInputHitMap("digi hitmap after removing mips and em showers"); exampleHADClusterer.setInputMipList("mips"); exampleHADClusterer.setInputTrackList(EventHeader.TRACKS); exampleHADClusterer.setOutputHitMap("digi hitmap after removing mips, em showers, and had clusters"); exampleHADClusterer.setOutputClusterList("had"); // Identify the hadronic/muon particles found: // "HADIdentifier" is a made-up class. HADIdentifier exampleEMIdentifier = new EMIdentifier(); exampleHADIdentifier.setInputClusterList("had"); exampleHADIdentifier.setInputTrackList(EventHeader.TRACKS); exampleHADIdentifier.setOutputParticleList("identified had particles"); // Then we do something useful with all these ReconstructedParticles. // [analysis] } } |
...