lcsim/src/org/lcsim/contrib/Cassell/recon/Cheat
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
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;
+ }
+
+}