Commit in lcsim/src/org/lcsim/contrib/Cassell/recon/Cheat on MAIN
PPRReconDriver.java+52added 1.1
PPRReconParticleConstructor.java+135added 1.1
+187
2 added files
Example driver for creating List of Perfect Pattern Recognition Reconstructed
particles, using actual Energy and position measurements for the neutrals

lcsim/src/org/lcsim/contrib/Cassell/recon/Cheat
PPRReconDriver.java added at 1.1
diff -N PPRReconDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ PPRReconDriver.java	15 Feb 2007 20:14:02 -0000	1.1
@@ -0,0 +1,52 @@
+
+import hep.aida.*;
+import org.lcsim.util.aida.AIDA;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Collection;
+import java.util.Map;
+import java.util.HashMap;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.base.MCReconstructedParticle;
+import org.lcsim.event.SimCalorimeterHit;
+import org.lcsim.util.Driver;
+import org.lcsim.event.util.*;
+import org.lcsim.recon.cluster.cheat.*;
+import org.lcsim.recon.cluster.util.*;
+import org.lcsim.recon.tracking.cheat.*;
+import org.lcsim.recon.particle.cheat.*;
+/**
+ *
+ * @author cassell
+ */
+public class PPRReconDriver extends Driver
+{
+   private AIDA aida = AIDA.defaultInstance();
+    String Rname = "CheatGenReconstructedParticles";
+    PPRReconParticleConstructor crpc;
+    String outName = "PPRReconParticles";
+    public PPRReconDriver()
+    {
+        add(new CheatGenReconParticleDriver());
+        crpc = new PPRReconParticleConstructor();
+    }
+    public void setOutputName(String s){outName = s;}
+    protected void process(EventHeader event)
+    {
+        super.process(event);
+        List<MCReconstructedParticle> rl = event.get(MCReconstructedParticle.class,Rname);
+        List<ReconstructedParticle>outrl = new ArrayList<ReconstructedParticle>();
+        for(MCReconstructedParticle p:rl)
+        {
+           ReconstructedParticle rp = crpc.makeReconParticle(p.getMCParticle(),p.getClusters(),p.getTracks());
+           if(rp.getEnergy() > 0.)outrl.add(rp);
+        }
+        event.put(outName,outrl,ReconstructedParticle.class,0);
+    }
+}

lcsim/src/org/lcsim/contrib/Cassell/recon/Cheat
PPRReconParticleConstructor.java added at 1.1
diff -N PPRReconParticleConstructor.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ PPRReconParticleConstructor.java	15 Feb 2007 20:14:02 -0000	1.1
@@ -0,0 +1,135 @@
+/*
+ * CheatReconParticleConstructor.java
+ *
+ * Created on January 23, 2007, 9:34 AM
+ *
+ * To change this template, choose Tools | Options and locate the template under
+ * the Source Creation and Management node. Right-click the template and choose
+ * Open. You can then make changes to the template in the Source Editor.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.base.BaseReconstructedParticle;
+import org.lcsim.event.base.BaseTrack;
+import org.lcsim.event.base.BaseTrackerHit;
+import org.lcsim.event.ParticleID;
+import org.lcsim.event.util.CheatParticleID;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.recon.cluster.util.*;
+import org.lcsim.recon.cluster.nn.NearestNeighborClusterer;
+import hep.physics.vec.*;
+import java.util.List;
+
+/**
+ *
+ * @author cassell
+ */
+public class PPRReconParticleConstructor
+{
+    Clusterer clusterer;
+    PhotonClusterEnergyCalculator scalc;
+    DetailedNeutralHadronClusterEnergyCalculator calc;
+    int minTrkhits = 3;
+    double cmass = .1395679;
+    double nmass = .497671;
+    double[] cov = {0.,0.,0.,0.,0.,0.};
+    /** Creates a new instance of CheatReconParticleConstructor */
+    public PPRReconParticleConstructor()
+    {
+        scalc = null;
+        calc = null;
+        clusterer = new NearestNeighborClusterer(4,4,2,0,0.);
+    }
+    public ReconstructedParticle makeReconParticle(
+        MCParticle p,List<Cluster> lc,List<Track> lt)
+    {
+        if(scalc == null)scalc = new PhotonClusterEnergyCalculator();
+        if(calc == null)calc = new DetailedNeutralHadronClusterEnergyCalculator();
+        double E = 0.;
+        double px = 0.;
+        double py = 0.;
+        double pz = 0.;
+        Hep3Vector mom;
+        mom = new BasicHep3Vector(px,py,pz);
+        if(p.getCharge() != 0)
+        {
+            if(lt.size() > 0)
+            {
+                int nthits = 0;
+                for(Track t:lt)
+                {
+                   nthits += t.getTrackerHits().size();
+                }
+                if(nthits >= minTrkhits)
+                {
+                    mom = p.getMomentum();
+                    E = Math.sqrt(mom.magnitude()*mom.magnitude() + cmass*cmass);
+                    BaseReconstructedParticle rp = new BaseReconstructedParticle(E,mom);
+                    rp.setMass(cmass);
+                    rp.setCharge(p.getCharge());
+                    rp.setReferencePoint(p.getOrigin());
+                    ParticleID id = new CheatParticleID(p.getPDGID());
+                    rp.setParticleIdUsed(id);
+                    rp.addParticleID(id);
+                    for(Track t:lt)
+                    {
+                       rp.addTrack(t);
+                    }
+                    for(Cluster c:lc)
+                    {
+                       rp.addCluster(c);
+                    }
+                    return rp;
+                }
+            }
+        }
+        double mass = 0.;
+        ParticleID pid = new CheatParticleID(22);
+        BasicCluster cc = new BasicCluster();
+        if(lc.size() > 0)
+        {
+           for(Cluster c:lc)cc.addCluster(c);
+           if(p.getPDGID() == 22)
+           {
+              E = scalc.getEnergy(cc);
+           }
+           else
+           {
+               E = calc.getEnergy(cc);
+               mass = nmass;
+              pid = new CheatParticleID(130);
+           }
+        }
+        if(E > 0.)
+        {
+            List<Cluster> clist = clusterer.createClusters(cc.getCalorimeterHits());
+            double[] pos = {0.,0.,0.};
+            int maxhits = 0;
+            for(Cluster ccc:clist)
+            {
+                if(ccc.getCalorimeterHits().size() > maxhits)
+                {
+                    pos = ccc.getPosition();
+                    maxhits = ccc.getCalorimeterHits().size();
+                }
+            }
+            double norm = Math.sqrt(E*E - mass*mass)/
+                Math.sqrt(pos[0]*pos[0] + pos[1]*pos[1] + pos[2]*pos[2]);
+            mom = new BasicHep3Vector(pos[0]*norm, pos[1]*norm, pos[2]*norm);
+        }
+        BaseReconstructedParticle nrp = new BaseReconstructedParticle(E,mom);
+        nrp.setMass(mass);
+        nrp.setParticleIdUsed(pid);
+        nrp.addParticleID(pid);
+        for(Cluster c:lc)nrp.addCluster(c);
+        for(Track t:lt)nrp.addTrack(t);
+        return nrp;
+    }
+    
+}
CVSspam 0.2.8