lcsim/src/org/lcsim/contrib/SteveMagill
diff -N PFATemplate.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ PFATemplate.java 12 Jan 2007 21:44:50 -0000 1.1
@@ -0,0 +1,190 @@
+import java.util.*;
+import org.lcsim.util.*;
+import org.lcsim.util.hitmap.*;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.recon.cluster.util.CalHitMapDriver;
+import org.lcsim.digisim.DigiSimDriver;
+import org.lcsim.digisim.SimCalorimeterHitsDriver;
+import org.lcsim.recon.cluster.fixedcone.*;
+import org.lcsim.recon.cluster.nn.*;
+
+public class PFATemplate extends Driver
+{
+ private AIDA aida = AIDA.defaultInstance();
+
+ public PFATemplate()
+ {
+
+// INITIALIZE Analysis - use DIGISIM to get hits after timing, threshold, etc. cuts
+// this implementation allows individual steering file to be used
+ add(new CalHitMapDriver());
+ DigiSimDriver digi = new DigiSimDriver();
+ // set steering file - CHANGE THIS TO YOUR DIRECTORY
+ digi.setSteeringFile("C:\\Documents and Settings\\adminsrm\\.JAS3\\java\\WSc0005.steer");
+ add(digi);
+ add(new SimCalorimeterHitsDriver());
+ // output of DigiSim is hit collections - EcalBarrDigiHits, EcalEndcapDigiHits, HcalBarrDigiHits, HcalEndcapDigiHits
+
+// MCFILTER here, PERFECT PFA here, etc.
+ // add a MC Filter if wanted
+// add(new ZPoleMCFilter()); //my old ZPole filter, but needs changed to reflect changes in Perfect PFA
+ // add Perfect PFA calculation here - make perfect charged clusters, neutral clusters and photon clusters
+// PerfectPFADriver ppfadriver = new PerfectPFADriver();
+// String[] ppcollnames = {"EcalBarrDigiHits","HcalBarrDigiHits","EcalEndcapDigiHits","HcalEndcapDigiHits"};
+// ppfadriver.setCollectionNames(ppcollnames);
+// add(ppfadriver);
+
+// To start PFA, make hitmaps - for now, separate by subdetector - uses DigiSim output collections
+ 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);
+
+// TRACK-MIP ASSOCIATION driver - this is an example of a PFA algorithm running on collections
+// hitmaps are modified by the algorithm - mip hits are removed from hitmaps
+// double dminE = 0.005;
+// double dminH = 3*dminE;
+// double dminTrC = 0.008; // original default is 0.0075
+// TrackMipClusterDriver TMdriver = new TrackMipClusterDriver(dminE, dminH, dminTrC);
+// String[] tmcollnames = {"EcalBarrDigiHits","HcalBarrDigiHits","EcalEndcapDigiHits","HcalEndcapDigiHits"};
+// TMdriver.setCollectionNames(tmcollnames);
+// TMdriver.setClusterNameExtension("TMClusters");
+// add(TMdriver);
+
+// Convert modified hitmaps to new hit collections for clustering
+ 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);
+
+// PHOTON FINDER - another example algorithm - starts with clusters from selected collections
+ double radius = 0.05;
+ double seed = 0.;
+ double minE = 0.;
+ FixedConeClusterDriver FCdriver = new FixedConeClusterDriver(radius, seed, minE);
+ String[] fchitcollnames = {"EBTMHits","EECTMHits"};
+ FCdriver.setCollectionNames(fchitcollnames);
+ FCdriver.setClusterNameExtension("FCClus");
+ add(FCdriver);
+
+// add photon finder here - takes above clusters as input, output is photon clusters
+// int mincells = 10;
+// PhotonFinderDriver Phdriver = new PhotonFinderDriver(mincells);
+// String[] phclusnames = {"EBTMHitsFCClus","EECTMHitsFCClus"};
+// Phdriver.setClusterNames(phcollnames);
+// Phdriver.setClusterNameExtension("PhoClus");
+// add(Phdriver);
+
+// Now, first make photon clusters into a hitmap, then modify original hitmap by subtracting Photon hitmaps from original
+// then make collectons for clustering again (ONLY WORKS WHEN PHOTONS ARE FOUND)
+ // barrel
+// ClusterListToHitMapDriver BPhotoHitDriver = new ClusterListToHitMapDriver();
+// BPhotoHitDriver.addInputList("PhotonBClusters");
+// BPhotoHitDriver.setOutputHitMap("BPHitMap");
+// add(BPhotoHitDriver);
+// HitMapSubtractDriver TMBPhodriver = new HitMapSubtractDriver();
+// TMBPhodriver.setFirstHitMap("EMBarrhitmap");
+// TMBPhodriver.setSecondHitMap("BPHitMap");
+// TMBPhodriver.setOutputHitMap("EMBarrhitmap");
+// add(TMBPhodriver);
+ HitMapToHitListDriver btmphoconverter = new HitMapToHitListDriver();
+ btmphoconverter.setInputHitMap("EMBarrhitmap");
+ btmphoconverter.setOutputList("EBTMPHits");
+ add(btmphoconverter);
+ // endcap
+// ClusterListToHitMapDriver ECPhotoHitDriver = new ClusterListToHitMapDriver();
+// ECPhotoHitDriver.addInputList("PhotonECClusters");
+// ECPhotoHitDriver.setOutputHitMap("ECPHitMap");
+// add(ECPhotoHitDriver);
+// HitMapSubtractDriver TMECPhodriver = new HitMapSubtractDriver();
+// TMECPhodriver.setFirstHitMap("EMEndcaphitmap");
+// TMECPhodriver.setSecondHitMap("ECPHitMap");
+// TMECPhodriver.setOutputHitMap("EMEndcaphitmap");
+// add(TMECPhodriver);
+ HitMapToHitListDriver ectmphoconverter = new HitMapToHitListDriver();
+ ectmphoconverter.setInputHitMap("EMEndcaphitmap");
+ ectmphoconverter.setOutputList("EECTMPHits");
+ add(ectmphoconverter);
+
+// TRACK - CLUSTER MATCHING Algorithm here, first cluster remaining hits in ECAL, HCAL
+ // HCALs
+ int dU = 6;
+ int dV = 6;
+ int dLayer = 6;
+ int ncells = 6;
+ double thresh = 0;
+ NearestNeighborClusterDriver NNHdriver = new NearestNeighborClusterDriver(dU, dV, dLayer, ncells, thresh);
+ String[] nnhhitcollnames = {"HBTMHits","HECTMHits"};
+ NNHdriver.setCollectionNames(nnhhitcollnames);
+ NNHdriver.setClusterNameExtension("NNHClus");
+ add(NNHdriver);
+
+ // ECALs
+ dU = 5;
+ dV = 5;
+ dLayer = 5;
+ ncells = 5;
+ thresh = 0;
+ NearestNeighborClusterDriver NNEdriver = new NearestNeighborClusterDriver(dU, dV, dLayer, ncells, thresh);
+ String[] nnehitcollnames = {"EBTMPHits","EECTMPHits"};
+ NNEdriver.setCollectionNames(nnehitcollnames);
+ NNEdriver.setClusterNameExtension("NNEClus");
+ add(NNEdriver);
+
+// add track/shower matching driver here
+// TrackShowerClusterDriver TrShdriver = new TrackShowerClusterDriver();
+// String[] shclnames = {"EBTMPHitsNNEClus","EECTMPHitsNNEClus","HBTMHitsNNHClus","HECTMHitsNNHClus"};
+// TrShdriver.setClusterNames(shclnames);
+// add(TrShdriver);
+
+// more hitmap manipulation here if needed
+// add neutral hadron finder driver here
+// NeutralHadronDriver NHdriver = new NeutralHadronDriver();
+// String[] nshclnames = {"EBTMPHitsNNEClus","EECTMPHitsNNEClus","HBTMHitsNNHClus","HECTMHitsNNHClus"};
+// NHdriver.setClusterNames(nshclnames);
+// add(NHdriver);
+
+ }
+
+// if you need event loop, add here (shows how filter is applied
+// protected void process(EventHeader event)
+// {
+
+// super.process(event); // executes all added drivers
+
+// boolean mcfltr = true;
+// mcfltr = (Boolean)event.get("MCFilt");
+// System.out.println("MCFilt is " +mcfltr);
+// if (mcfltr)
+// {
+ // put processing here
+
+// }
+
+ // end of everything in event
+// }
+}