Print

Print


Commit in lcsim/src/org/lcsim/contrib/uiowa on MAIN
MinimalRunPFA.java+148added 1.1
MJC: Test driver

lcsim/src/org/lcsim/contrib/uiowa
MinimalRunPFA.java added at 1.1
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);
+	}
+    }
+}
CVSspam 0.2.8