lcsim/src/org/lcsim/contrib/uiowa
diff -N MinimalRunPFA.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ MinimalRunPFA.java 17 Dec 2007 22:32:45 -0000 1.1
@@ -0,0 +1,148 @@
+package org.lcsim.contrib.uiowa;
+
+import java.util.*;
+import org.lcsim.util.Driver;
+import org.lcsim.contrib.uiowa.NonTrivialPFA;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.loop.LCIODriver;
+import org.lcsim.util.*;
+import org.lcsim.event.*;
+import org.lcsim.recon.cluster.structural.likelihood.LikelihoodEvaluatorWrapper;
+import org.lcsim.recon.cluster.directedtree.*;
+import org.lcsim.util.hitmap.*;
+
+public class MinimalRunPFA extends Driver
+{
+ public MinimalRunPFA() {
+ add(new org.lcsim.contrib.uiowa.NonTrivialPFA(false)); // Run the PFA, output is a List<ReconstructedParticle> named "PFAReconstructedParticles"
+ org.lcsim.contrib.uiowa.ReclusterDriver reclus = new org.lcsim.contrib.uiowa.ReclusterDriver("ReconFSParticles", "FSReconTracks", "muonParticles", "photonClustersWithoutFragments", "skeletons", "MSTClustersLinkedWithFewerThanTenHits", "structuralUnusedHits", "MSTClustersLinkedWithTenOrMoreHits", "mips", "clumps", "splitSkeletons", new LikelihoodEvaluatorWrapper());
+ //reclus.setDebug(true);
+ add(reclus);
+ setupDTree();
+ add(new ReclusterDTreeDriver("DTreeClusters", "FSReconTracks", "ReconFSParticles"));
+
+ checkPerf();
+ }
+
+ void setupDTree() {
+ // Convert DigiSim's lists to hitmaps:
+ HitListToHitMapDriver converter1 = new HitListToHitMapDriver();
+ HitListToHitMapDriver converter2 = new HitListToHitMapDriver();
+ HitListToHitMapDriver converter3 = new HitListToHitMapDriver();
+ HitListToHitMapDriver converter4 = new HitListToHitMapDriver();
+ converter1.addInputList("EcalBarrDigiHits");
+ converter2.addInputList("EcalEndcapDigiHits");
+ converter3.addInputList("HcalBarrDigiHits");
+ converter4.addInputList("HcalEndcapDigiHits");
+ converter1.setOutput("EcalBarrDigiHitMap");
+ converter2.setOutput("EcalEndcapDigiHitMap");
+ converter3.setOutput("HcalBarrDigiHitMap");
+ converter4.setOutput("HcalEndcapDigiHitMap");
+ add(converter1);
+ add(converter2);
+ add(converter3);
+ add(converter4);
+ // Find photons in ECAL
+ org.lcsim.contrib.uiowa.RonPhotonFinder.RonPhotonFinderSid01 photonFinderEcalBarrel = new org.lcsim.contrib.uiowa.RonPhotonFinder.RonPhotonFinderSid01("EcalBarrDigiHitMap", "EcalBarrDigiHitMapWithoutPhotons", "EcalBarrPhotonClusters");
+ org.lcsim.contrib.uiowa.RonPhotonFinder.RonPhotonFinderSid01 photonFinderEcalEndcap = new org.lcsim.contrib.uiowa.RonPhotonFinder.RonPhotonFinderSid01("EcalEndcapDigiHitMap", "EcalEndcapDigiHitMapWithoutPhotons", "EcalEndcapPhotonClusters");
+ add(photonFinderEcalBarrel);
+ add(photonFinderEcalEndcap);
+ ListAddDriver<Cluster> mergePhotonClusters = new ListAddDriver<Cluster>(Cluster.class);
+ mergePhotonClusters.addInputList("EcalBarrPhotonClusters");
+ mergePhotonClusters.addInputList("EcalEndcapPhotonClusters");
+ mergePhotonClusters.setOutputList("PhotonClustersForDTree");
+ add(mergePhotonClusters);
+ // DTree
+ DirectedTreeDriver treeDriverEcalBarr = new DirectedTreeDriver();
+ treeDriverEcalBarr.setInputHitMap("EcalBarrDigiHitMapWithoutPhotons");
+ treeDriverEcalBarr.setOutputClusterList("EcalBarrDTrees");
+ treeDriverEcalBarr.setOutputHitMap("EcalBarrDigiHitMapAfterDTree");
+ DirectedTreeDriver treeDriverEcalEndcap = new DirectedTreeDriver();
+ treeDriverEcalEndcap.setInputHitMap("EcalEndcapDigiHitMapWithoutPhotons");
+ treeDriverEcalEndcap.setOutputClusterList("EcalEndcapDTrees");
+ treeDriverEcalEndcap.setOutputHitMap("EcalEndcapDigiHitMapAfterDTree");
+ DirectedTreeDriver treeDriverHcalBarr = new DirectedTreeDriver();
+ treeDriverHcalBarr.setInputHitMap("HcalBarrDigiHitMap");
+ treeDriverHcalBarr.setOutputClusterList("HcalBarrDTrees");
+ treeDriverHcalBarr.setOutputHitMap("HcalBarrDigiHitMapAfterDTree");
+ DirectedTreeDriver treeDriverHcalEndcap = new DirectedTreeDriver();
+ treeDriverHcalEndcap.setInputHitMap("HcalEndcapDigiHitMap");
+ treeDriverHcalEndcap.setOutputClusterList("HcalEndcapDTrees");
+ treeDriverHcalEndcap.setOutputHitMap("HcalEndcapDigiHitMapAfterDTree");
+ add(treeDriverEcalBarr);
+ add(treeDriverEcalEndcap);
+ add(treeDriverHcalBarr);
+ add(treeDriverHcalEndcap);
+
+ ListAddDriver<Cluster> mergeDTreeClusters = new ListAddDriver<Cluster>(Cluster.class);
+ mergeDTreeClusters.addInputList("EcalBarrDTrees");
+ mergeDTreeClusters.addInputList("EcalEndcapDTrees");
+ mergeDTreeClusters.addInputList("HcalBarrDTrees");
+ mergeDTreeClusters.addInputList("HcalEndcapDTrees");
+ mergeDTreeClusters.setOutputList("DTreeClusters");
+ add(mergeDTreeClusters);
+ }
+
+ void checkPerf() {
+ add(new org.lcsim.contrib.uiowa.MassPlots("PFAReconstructedParticles", "output-write.aida")); // Make some histograms and write them to a file
+ add(new org.lcsim.contrib.uiowa.MassPlots("ReclusteredParticles", "output-write-reclustered.aida")); // Make some histograms and write them to a file
+ add(new org.lcsim.contrib.uiowa.MassPlots("DTreeReclusteredParticles", "output-write-dtree-reclustered.aida")); // Make some histograms and write them to a file
+ String CheatReconRname = "ReconPerfectReconParticles";
+ String CheatReconFSname = "ReconFSParticles";
+ String CheatReconFSTrackedname = "TrackedReconFSParticles";
+ org.lcsim.contrib.Cassell.recon.analysis.ReconstructedParticleCollectionEnergies testRonDriverForNonTrivialPFA = new org.lcsim.contrib.Cassell.recon.analysis.ReconstructedParticleCollectionEnergies(CheatReconFSname,CheatReconFSTrackedname,"PFAReconstructedParticles",true);
+ org.lcsim.contrib.Cassell.recon.analysis.ReconstructedParticleCollectionEnergies testRonDriverForReclusterer = new org.lcsim.contrib.Cassell.recon.analysis.ReconstructedParticleCollectionEnergies(CheatReconFSname,CheatReconFSTrackedname,"ReclusteredParticles", true);
+ org.lcsim.contrib.Cassell.recon.analysis.ReconstructedParticleCollectionEnergies testRonDriverForDTreeReclusterer = new org.lcsim.contrib.Cassell.recon.analysis.ReconstructedParticleCollectionEnergies(CheatReconFSname,CheatReconFSTrackedname,"DTreeReclusteredParticles", true);
+ add(testRonDriverForNonTrivialPFA);
+ add(testRonDriverForReclusterer);
+ add(testRonDriverForDTreeReclusterer);
+ }
+
+ public void process(EventHeader event) {
+ boolean passesTruthAcceptanceCut = false;
+ MCParticle partZTovv = null;
+ MCParticle partZToqq = null;
+ List<MCParticle> partZToqq_daughters = null;
+ {
+ List<MCParticle> mcParticles = event.getMCParticles();
+ for (MCParticle part : mcParticles) {
+ if (part.getPDGID() == 23) {
+ Vector<MCParticle> foundLightQuarkDaughters = new Vector<MCParticle>();
+ Vector<MCParticle> foundNeutrinoDaughters = new Vector<MCParticle>();
+ List<MCParticle> daughters = part.getDaughters();
+ for (MCParticle dau : daughters) {
+ int pdg = dau.getPDGID();
+ if (Math.abs(pdg)>0 && Math.abs(pdg)<4) {
+ foundLightQuarkDaughters.add(dau);
+ } else if (Math.abs(pdg)==12 || Math.abs(pdg)==14 || Math.abs(pdg)==16) {
+ foundNeutrinoDaughters.add(dau);
+ }
+ }
+ if (foundLightQuarkDaughters.size() == 2) {
+ partZToqq = part;
+ partZToqq_daughters = foundLightQuarkDaughters;
+ }
+ if (foundNeutrinoDaughters.size() == 2) {
+ partZTovv = part;
+ }
+ }
+ }
+ if (partZTovv == null) {
+ System.out.println("ERROR: no Z -> vv cand");
+ }
+ if (partZToqq == null) {
+ System.out.println("ERROR: no Z -> qq cand");
+ } else {
+ //System.out.println("DEBUG: Mass of Z -> qq = "+partZToqq.getMass());
+ passesTruthAcceptanceCut = true;
+ for (MCParticle dau : partZToqq_daughters) {
+ double cosTheta = Math.abs(dau.getMomentum().z() / dau.getMomentum().magnitude());
+ if (cosTheta>0.8) { passesTruthAcceptanceCut = false; }
+ }
+ }
+ }
+ if (passesTruthAcceptanceCut) {
+ super.process(event);
+ }
+ }
+}