lcsim/src/org/lcsim/recon/postrecon/leptonID/muon
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);
+
+ }
+
+ }
+}