Commit in lcsim/src/org/lcsim/recon/postrecon/leptonID/muon on MAIN
PostReconMuonFinder.java+109added 1.1
First pass at post reconstruction muon finder

lcsim/src/org/lcsim/recon/postrecon/leptonID/muon
PostReconMuonFinder.java added at 1.1
diff -N PostReconMuonFinder.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ PostReconMuonFinder.java	4 Dec 2008 20:10:39 -0000	1.1
@@ -0,0 +1,109 @@
+/*
+ * PostReconMuonFinder.java
+ *
+ * Created on December 4, 2008, 8:19 AM
+ *
+ * Identify muons in PFA output and modify ReconstructedParticles and
+ * Clusters
+ */
+
+package org.lcsim.recon.postrecon.leptonID.muon;
+import org.lcsim.util.Driver;
+import org.lcsim.event.EventHeader;
+import hep.physics.particle.properties.ParticlePropertyManager;
+import hep.physics.particle.properties.ParticlePropertyProvider;
+import org.lcsim.contrib.uiowa.MuonFinder.MuonDriver;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.BasicHepLorentzVector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
+import java.util.Map;
+import java.util.HashMap;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.compact.Subdetector;
+import org.lcsim.geometry.subdetector.CylindricalCalorimeter;
+import org.lcsim.event.Track;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.base.BaseReconstructedParticle;
+import org.lcsim.event.base.BaseParticleID;
+import org.lcsim.recon.cluster.util.BasicCluster;
+import static java.lang.Math.abs;
+import static java.lang.Math.sqrt;
+import static java.lang.Math.acos;
+import static java.lang.Math.pow;
+
+/**
+ *
+ * @author cassell
+ */
+public class PostReconMuonFinder extends Driver
+{
+    
+    String Trackname = "Tracks";
+    String MuonTrackname = "Muons";
+    String MuonTrackMapName = "MuonMap";
+    String ReconParticleName = "ReconstructedParticles";
+    String Clustername = "Clusters";
+    final double mMuon;
+    final ParticlePropertyProvider dPPP;
+    /** Creates a new instance of PostReconMuonFinder */
+    public PostReconMuonFinder()
+    {
+        add(new MuonDriver(MuonTrackMapName,ReconParticleName));
+        dPPP = ParticlePropertyManager.getParticlePropertyProvider();
+        mMuon = dPPP.get(13).getMass();
+    }
+    protected void process(EventHeader event)
+    {
+        super.process(event);
+        Map<Track,Cluster> mutcmap = (Map<Track,Cluster>) event.get(MuonTrackMapName);
+        if(mutcmap.size() <= 0)return;
+        List<ReconstructedParticle> rp = event.get(ReconstructedParticle.class,ReconParticleName);
+        List<Cluster> cl = event.get(Cluster.class,Clustername);
+        for(Track t:mutcmap.keySet())
+        {
+            BasicCluster newc = new BasicCluster();
+            Cluster oldc = null;
+            for(ReconstructedParticle p : rp)
+            {
+                if(p.getCharge() == 0.)continue;
+                if(p.getTracks().get(0) == t)
+                {
+                    rp.remove(p);
+                    if(p.getClusters().size() > 0)oldc = p.getClusters().get(0);
+                    break;
+                }
+            }
+            Cluster c = mutcmap.get(t);
+            if(oldc != null)
+            {
+                for(CalorimeterHit h:oldc.getCalorimeterHits())
+                {
+                    newc.addHit(h);
+                }
+            }
+            for(CalorimeterHit h:c.getCalorimeterHits())
+            {
+                if(!newc.getCalorimeterHits().contains(h))newc.addHit(h);
+            }
+            Hep3Vector trackMom = new BasicHep3Vector(t.getMomentum());
+            BaseReconstructedParticle muon = new BaseReconstructedParticle(mMuon);
+            Hep3Vector tm = new BasicHep3Vector(t.getMomentum());
+            muon.set4Vector(new BasicHepLorentzVector(sqrt(pow(mMuon,2)+tm.magnitudeSquared()),tm));
+            muon.setCharge(t.getCharge());
+            muon.setParticleIdUsed(new BaseParticleID(dPPP.get(-13*t.getCharge())));
+            muon.setReferencePoint(new BasicHep3Vector(t.getReferencePoint()));
+            muon.addTrack(t);
+            muon.addCluster(newc);
+            cl.add(newc);
+            rp.add(muon);
+            
+        }
+        
+    }
+}
CVSspam 0.2.8