lcsim/src/org/lcsim/contrib/SteveMagill
diff -N HighPTemplate.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HighPTemplate.java 29 May 2008 21:29:24 -0000 1.1
@@ -0,0 +1,303 @@
+package org.lcsim.contrib.compile.SteveMagill;
+
+import java.util.*;
+import org.lcsim.util.*;
+import org.lcsim.event.*;
+import org.lcsim.event.util.*;
+import org.lcsim.util.hitmap.*;
+
+import org.lcsim.recon.cluster.util.CalHitMapDriver;
+import org.lcsim.digisim.DigiSimDriver;
+import org.lcsim.digisim.SimCalorimeterHitsDriver;
+import org.lcsim.util.hitmap.HitListToHitMapDriver;
+import org.lcsim.util.hitmap.HitMapToHitListDriver;
+import org.lcsim.event.util.CreateFinalStateMCParticleList;
+import org.lcsim.recon.cluster.cheat.PerfectClusterer;
+import org.lcsim.recon.pfa.cheat.PerfectIdentifier;
+
+import org.lcsim.recon.cluster.cheat.CheatClusterDriver;
+import org.lcsim.recon.tracking.cheat.CheatTrackDriver;
+import org.lcsim.recon.particle.CheatParticleDriver;
+import org.lcsim.contrib.Cassell.recon.analysis.ClusterCollectionEnergies;
+import org.lcsim.contrib.Cassell.recon.Cheat.PPRDriver;
+import org.lcsim.contrib.Cassell.recon.Cheat.CheatReconDriver;
+import org.lcsim.contrib.Cassell.recon.DTPhotons.*;
+
+import org.lcsim.recon.cluster.fixedcone.*;
+import org.lcsim.recon.cluster.nn.*;
+import org.lcsim.recon.cluster.directedtree.DirectedTreeDriver;
+
+// import org.lcsim.recon.cluster.util.HitInECALDecision;
+import org.lcsim.util.hitmap.HitMapFilter;
+import org.lcsim.util.hitmap.HitMapFilterDriver;
+import org.lcsim.util.decision.NotDecisionMakerSingle;
+
+import hep.physics.jet.*;
+
+public class HighPTemplate extends Driver
+{
+
+ public HighPTemplate()
+ {
+
+// **********************INITIALIZATION****************************************
+ // use DIGISIM to get hits after timing, threshold, etc. cuts
+ add(new CalHitMapDriver());
+ DigiSimDriver digi = new DigiSimDriver();
+ add(digi);
+ add(new SimCalorimeterHitsDriver());
+ // output of DigiSim is hit collections - EcalBarrDigiHits, EcalEndcapDigiHits, HcalBarrDigiHits, HcalEndcapDigiHits
+
+// OPTIONAL - make subdetector hitmaps from DigiSim collections so both are available for PFA
+ HitListToHitMapDriver ebhitmap = new HitListToHitMapDriver();
+ ebhitmap.addInputList("EcalBarrDigiHits");
+ ebhitmap.setOutput("EMBarrhitmap");
+ add(ebhitmap);
+ HitListToHitMapDriver hbhitmap = new HitListToHitMapDriver();
+ hbhitmap.addInputList("HcalBarrDigiHits");
+ hbhitmap.setOutput("HADBarrhitmap");
+ add(hbhitmap);
+ HitListToHitMapDriver eehitmap = new HitListToHitMapDriver();
+ eehitmap.addInputList("EcalEndcapDigiHits");
+ eehitmap.setOutput("EMEndcaphitmap");
+ add(eehitmap);
+ HitListToHitMapDriver hehitmap = new HitListToHitMapDriver();
+ hehitmap.addInputList("HcalEndcapDigiHits");
+ hehitmap.setOutput("HADEndcaphitmap");
+ add(hehitmap);
+
+// also OPTIONAL - make a combined hitmap for the digisim output hits
+// now have 5 hitmaps, 1 for each cal subdetector and 1 with all hits
+ HitListToHitMapDriver digiHitMap = new HitListToHitMapDriver();
+ digiHitMap.addInputList("EcalBarrDigiHits");
+ digiHitMap.addInputList("EcalEndcapDigiHits");
+ digiHitMap.addInputList("HcalBarrDigiHits");
+ digiHitMap.addInputList("HcalEndcapDigiHits");
+ digiHitMap.setOutput("OrigDigiHitMap");
+ add(digiHitMap);
+
+// ***********************Perfect PFA******************************************
+// form Perfect Reconstructed Particles (Perfect PFA) from MC
+ String CCname = "PerfectCheatClusters";
+ String CRPname = "CheatReconstructedParticles";
+
+ // do cheat reconstruction
+ CheatReconDriver crd = new CheatReconDriver();
+ crd.setCheatReconstructedParticleOutputName(CRPname);
+ crd.setCheatClusterOutputName(CCname);
+ crd.setCheatFSTrackOutputName("PerfectTracks");
+ add(crd);
+
+ // now make (more realistic) cheated tracks, etc with PPR driver
+ String outName = "PerfectRecoParticles";
+ add(new PPRDriver(CRPname,outName));
+// Perfect Reconstructed Particle list - PerfectReconstructedParticles
+// also have PerfectCheatClusters and Perfect Tracks (FSReconTracks)
+
+// **************************TRACK Selection Here******************************
+ // when ready, add real track reconstruction driver here
+// RealTrackDriver realtrack = new RealTrackDriver();
+// realtrack.setTrackNames("RealTracks");
+// add(realtrack);
+
+ // Utility to get some SpacePoints of extrapolated track positions -
+ // useful for many algorithms
+ // So far, 3 output maps - TrkXE0Map (Track pos at ECAL layer 0),
+ // TrkXEShMaxMap (Track pos at Shower Max), and TrkXH0Map (Track
+ // pos at HCAL layer 0)
+ TrkXPosDriver txpdriver = new TrkXPosDriver();
+ txpdriver.setInputTrackList("PerfectTracks");
+ add(txpdriver);
+
+// *******************TRACK-MIP ASSOCIATION Driver*****************************
+// this is an example of a PFA algorithm running on hit collections
+// hitmaps are modified by the algorithm - mip hits are removed from hitmaps
+ double dminE = 0.005; // hard-coded now - change to detector independent value
+ double dminH = 3*dminE; // same here
+ double dminTrC = 0.01; // default range is 0.0175 - 0.0225 tuned with muons
+ double mincd = 3.5; // min density to make mip - default is 3.5 tuned with muons
+ TrackMipClusterDriver TMdriver = new TrackMipClusterDriver(dminE, dminH, dminTrC, mincd);
+ String[] tmcollnames = {"EcalBarrDigiHits","HcalBarrDigiHits","EcalEndcapDigiHits","HcalEndcapDigiHits"};
+// String[] tmcollnames = {"EBHits","HBHits","EEHits","HEHits"};
+ TMdriver.setCollectionNames(tmcollnames);
+ TMdriver.setClusterNameExtension("TMClusters");
+ add(TMdriver);
+ // Output of this driver is mip clusters attached to tracks - TMClusters
+
+ // OPTIONAL - checks purity of mip clusters - diagnostic routine only
+ TrMipCompDriver tmcdriver = new TrMipCompDriver();
+ String tmnames = ("TMClusters");
+ tmcdriver.setTrMipClusName(tmnames);
+ add(tmcdriver);
+
+ // Convert modified hitmaps to new hit collections for clustering after mips removed
+ HitMapToHitListDriver embconverter = new HitMapToHitListDriver();
+ embconverter.setInputHitMap("EMBarrhitmap");
+ embconverter.setOutputList("EBTMHits");
+ add(embconverter);
+ HitMapToHitListDriver emeconverter = new HitMapToHitListDriver();
+ emeconverter.setInputHitMap("EMEndcaphitmap");
+ emeconverter.setOutputList("EECTMHits");
+ add(emeconverter);
+ HitMapToHitListDriver hadbconverter = new HitMapToHitListDriver();
+ hadbconverter.setInputHitMap("HADBarrhitmap");
+ hadbconverter.setOutputList("HBTMHits");
+ add(hadbconverter);
+ HitMapToHitListDriver hadeconverter = new HitMapToHitListDriver();
+ hadeconverter.setInputHitMap("HADEndcaphitmap");
+ hadeconverter.setOutputList("HECTMHits");
+ add(hadeconverter);
+
+// **********************HMATRIX PHOTON FINDER*********************************************
+ // Combine barrel, endcap EM hits into hitmap
+ HitListToHitMapDriver NMHitMap = new HitListToHitMapDriver();
+ NMHitMap.addInputList("EBTMHits");
+ NMHitMap.addInputList("EECTMHits");
+ NMHitMap.setOutput("EMNMHitMap");
+ add(NMHitMap);
+
+ // also, make a combined barrel,EC had hitmap
+ HitListToHitMapDriver NMPHitMap = new HitListToHitMapDriver();
+ NMPHitMap.addInputList("HBTMHits");
+ NMPHitMap.addInputList("HECTMHits");
+ NMPHitMap.setOutput("NMPHhitmap");
+ add(NMPHitMap);
+
+ // Directed Tree clusterer for HM Photon Finder
+ int minsize = 16;
+ DirectedTreeDriver DTPhdriver = new DirectedTreeDriver();
+ DTPhdriver.setInputHitMap("EMNMHitMap");
+ DTPhdriver.setOutputClusterList("NMEMDTClus");
+ DTPhdriver.setMinimumClusterSize(minsize);
+ add(DTPhdriver);
+
+ // add HMatrix Photon Finder PFA algorithm here - takes above clusters as input,
+ // runs NN 11110 on the cluster hits and applies HMatrix
+ int mincells = 20; // default is 20-25, clear break in hits vs e at 20-25, 500 MeV
+ double dTrcl = 0.025; // min distance from nearest track (0.05 - 0.08 is shoulder)
+ double phminE = 0.75; // see above for mincells
+ HMPhoDriver HMdriver = new HMPhoDriver(mincells,dTrcl,phminE);
+ String CALclname = ("NMEMDTClus");
+ HMdriver.setInputClusterName(CALclname);
+ HMdriver.setOutputClusterName("HMPhoClusters");
+ add(HMdriver);
+
+ // OPTIONAL checks purity of photon clusters - diagnostic routine only
+ PhoCompDriver phdriver = new PhoCompDriver();
+ String phonames = ("HMPhoClusters");
+ phdriver.setPhoClusNames(phonames);
+ add(phdriver);
+
+// ******************************end of HMPhoton Finder************************************
+
+ // Now, modify hitmap taking out hits in Photons, then make collectons for hadron shower clustering
+ ClusterListToHitMapDriver PhotoHitDriver = new ClusterListToHitMapDriver();
+ PhotoHitDriver.addInputList("HMPhoClusters");
+ PhotoHitDriver.setOutputHitMap("PhHitMap");
+ add(PhotoHitDriver);
+ HitMapSubtractDriver TMPdriver = new HitMapSubtractDriver();
+ TMPdriver.setFirstHitMap("EMNMHitMap");
+ TMPdriver.setSecondHitMap("PhHitMap");
+ TMPdriver.setOutputHitMap("NMPEMhitmap");
+ add(TMPdriver);
+ HitMapToHitListDriver tmpconverter = new HitMapToHitListDriver();
+ tmpconverter.setInputHitMap("NMPEMhitmap");
+ tmpconverter.setOutputList("NMPEMHits");
+ add(tmpconverter);
+
+ HitMapToHitListDriver htmpconverter = new HitMapToHitListDriver();
+ htmpconverter.setInputHitMap("NMPHhitmap");
+ htmpconverter.setOutputList("NMPHHits");
+ add(htmpconverter);
+
+// **********************TRACK - CLUSTER MATCHING driver ***********************************
+
+ // make a single hitmap for merge algorithm
+ HitListToHitMapDriver mHitMap = new HitListToHitMapDriver();
+ mHitMap.addInputList("NMPEMHits");
+ mHitMap.addInputList("NMPHHits");
+ mHitMap.setOutput("AllNMPHitMap");
+ add(mHitMap);
+
+ // cluster with DT
+ int allsize = 3;
+ DirectedTreeDriver DTAlldriver = new DirectedTreeDriver();
+ DTAlldriver.setInputHitMap("AllNMPHitMap");
+ DTAlldriver.setOutputClusterList("AllDTNMPClus");
+ DTAlldriver.setMinimumClusterSize(allsize);
+ add(DTAlldriver);
+
+ // add matching driver here
+ double minsep = 0.01; // default for scin 0.025
+ int nloop = 5; // default 5
+ double minEp = 0.75; // default .65
+ double maxEp = 1.8; // default 1.5
+
+ // use track core only driver here
+// TrCoreDriver trcdriver = new TrCoreDriver(minsep, maxEp);
+// String[] shclnames = {"AllDTNMPClus"};
+// trcdriver.setClusterNames(shclnames);
+// String outcllist = ("TrackCoreClusters");
+// trcdriver.setOutputClusterList(outcllist);
+// add(trcdriver);
+
+ // OPTIONAL - checks purity of track shower clusters - diagnostic routine only
+// TrCoreCompDriver tccdriver = new TrCoreCompDriver();
+// String tcnames = ("TrackCoreClusters");
+// tccdriver.setTrCoreClusName(tcnames);
+// add(tccdriver);
+
+ // use full track shower driver here (includes core)
+ TSCDriver TrShdriver = new TSCDriver(minsep, nloop, minEp, maxEp);
+ String[] shclnames = {"AllDTNMPClus"};
+ TrShdriver.setClusterNames(shclnames);
+ String outcllist = ("TrackCALClusters");
+ TrShdriver.setOutputClusterList(outcllist);
+ add(TrShdriver);
+
+ // OPTIONAL - checks purity of track shower clusters - diagnostic routine only
+ TrShowCompDriver tscdriver = new TrShowCompDriver();
+ String tsnames = ("TrackCALClusters");
+ tscdriver.setTrShowClusName(tsnames);
+ add(tscdriver);
+
+ // subtract track-cal clusters from input hitmap
+ ClusterListToHitMapDriver TrShowerHitDriver = new ClusterListToHitMapDriver();
+ TrShowerHitDriver.addInputList("TrackCALClusters");
+ TrShowerHitDriver.setOutputHitMap("TrCALHitMap");
+ add(TrShowerHitDriver);
+ HitMapSubtractDriver TSsubdriver = new HitMapSubtractDriver();
+ TSsubdriver.setFirstHitMap("AllNMPHitMap");
+ TSsubdriver.setSecondHitMap("TrCALHitMap");
+ TSsubdriver.setOutputHitMap("AMPhTrCalhitmap");
+ add(TSsubdriver);
+
+// *************************Continue here with photons, N Hadrons*******************************
+
+ int nem = 3;
+ DirectedTreeDriver apedriver = new DirectedTreeDriver();
+ apedriver.setMinimumClusterSize(nem);
+ apedriver.setInputHitMap("AMPhTrCalhitmap");
+ apedriver.setOutputClusterList("NPCandClusters");
+ add(apedriver);
+
+ // add remaining cluster cheat ID here instead of PFA
+ // combines HMPhoClusters and MorePhoClusters into PhotonClusters
+ ChClusIDDriver ccidriver = new ChClusIDDriver();
+ String clname = ("NPCandClusters");
+ ccidriver.setInputClusterName(clname);
+ ccidriver.setOutputPhoClusterName("MorePhoClusters");
+ ccidriver.setOutputNHClusterName("NeutralHadronClusters");
+ ccidriver.setOutputCHClusterName("UnusedCHClusters");
+ add(ccidriver);
+
+ // Make Reconstructed Particle List from tracks, clusters
+ ClusterToReconstructedParticleDriver ClRPdriver = new ClusterToReconstructedParticleDriver();
+ ClRPdriver.setTrackNames("PerfectTracks");
+ ClRPdriver.setPhotonNames("PhotonClusters");
+ ClRPdriver.setNeutralHadNames("NeutralHadronClusters");
+ ClRPdriver.setRecoParticleName("AllRecoParticles");
+ add(ClRPdriver);
+
+ }
+}