lcsim/src/org/lcsim/contrib/SteveMagill
diff -N ClusterToReconstructedParticleDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ClusterToReconstructedParticleDriver.java 23 Apr 2007 20:07:28 -0000 1.1
@@ -0,0 +1,182 @@
+package org.lcsim.contrib.SteveMagill;
+
+import hep.aida.ITree;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.particle.properties.ParticlePropertyManager;
+import hep.physics.particle.properties.ParticleType;
+import java.util.ArrayList;
+import java.util.List;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.base.BaseReconstructedParticle;
+import org.lcsim.recon.cluster.fixedcone.FixedConeClusterer;
+import org.lcsim.recon.cluster.fixedcone.FixedConeClusterer.FixedConeDistanceMetric;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.recon.cluster.util.*;
+
+import static java.lang.Math.sqrt;
+import org.lcsim.event.ParticleID;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.base.BaseParticleID;
+/*
+ * SimpleClusterToReconstructedParticleExampleDriver.java
+ *
+ * Created on March 29, 2007, 1:52 PM
+ *
+ * $Id: ClusterToReconstructedParticleDriver.java,v 1.1 2007/04/23 20:07:28 magill Exp $
+ */
+
+/**
+ *
+ * @author Norman Graf
+ */
+public class ClusterToReconstructedParticleDriver extends Driver
+{
+ private AIDA aida = AIDA.defaultInstance();
+ private ITree _tree;
+
+// private FixedConeClusterer _fcc;
+// private boolean _initialized;
+
+ private String[] _photonnames;
+ private String _tracknames;
+ private String _neutralhadnames;
+
+ private double _neutralMass;
+ private ParticleType _neutralParticleType;
+
+ /** Creates a new instance of SimpleClusterToReconstructedParticleExampleDriver */
+ public ClusterToReconstructedParticleDriver()
+ {
+ _tree = aida.tree();
+ }
+
+ protected void process(EventHeader event)
+ {
+// if(!_initialized)
+// {
+ // an example clusterer
+// double radius = .05;
+// double seed = 0.;
+// double minE = .5; ;
+// _fcc = new FixedConeClusterer(radius, seed, minE, FixedConeDistanceMetric.DPHIDTHETA);
+
+
+ // a particle hypothesis for the cluster ID
+ // 130 == K0L
+// _neutralParticleType = ParticlePropertyManager.getParticlePropertyProvider().get(130);
+// _neutralMass = _neutralParticleType.getMass();
+
+// System.out.println("using "+_neutralMass+" for neutral cluster mass");
+// _initialized=true;
+// }
+
+ // array of ReconstructedParticles to add to the event...
+ List<ReconstructedParticle> rpList = new ArrayList<ReconstructedParticle>();
+
+ // first, get tracks and add them to rpList
+ List<PerfectTrack> evtracks = event.get(PerfectTrack.class, "PerfectTracks");
+ for (PerfectTrack itrack : evtracks)
+ {
+ double TrE = itrack.getMCParticle().getEnergy();
+ double[] TrP = itrack.getMomentum();
+ Hep3Vector mom = new BasicHep3Vector(TrP[0],TrP[1],TrP[2]);
+ BaseReconstructedParticle rp = new BaseReconstructedParticle(TrE, mom);
+ rp.setMass(0.13957);
+ // rp.setMass(itrack.getMCParticle().getMass());
+ double trq = (double) itrack.getCharge();
+ rp.setCharge(trq);
+ ParticleID id = new BaseParticleID(itrack.getMCParticle().getType());
+ rp.addParticleID(id);
+ rp.addTrack(itrack);
+ rpList.add(rp);
+ }
+
+ // now get photon clusters
+ List<BasicCluster> phobclusters = event.get(BasicCluster.class,"PhotonBClusters");
+ List<BasicCluster> phoecclusters = event.get(BasicCluster.class,"PhotonECClusters");
+ for (BasicCluster phobclus : phobclusters)
+ {
+ double ClE = phobclus.getEnergy()*1.015*1.013;
+ double[] pos = phobclus.getPosition();
+ double norm = sqrt(pos[0]*pos[0]+pos[1]*pos[1]+pos[2]*pos[2]);
+ double p = ClE/norm;
+ Hep3Vector mom = new BasicHep3Vector(p*pos[0], p*pos[1], p*pos[2]);
+ BaseReconstructedParticle rp = new BaseReconstructedParticle(ClE, mom);
+ rp.setMass(0);
+ ParticleType photype = ParticlePropertyManager.getParticlePropertyProvider().get(22);
+ ParticleID id = new BaseParticleID(photype);
+ rp.addParticleID(id);
+ rp.setParticleIdUsed(id);
+ rp.addCluster(phobclus);
+ rpList.add(rp);
+ }
+ for (BasicCluster phoecclus : phoecclusters)
+ {
+ double ClE = phoecclus.getEnergy()*1.015*1.013;
+ double[] pos = phoecclus.getPosition();
+ double norm = sqrt(pos[0]*pos[0]+pos[1]*pos[1]+pos[2]*pos[2]);
+ double p = ClE/norm;
+ Hep3Vector mom = new BasicHep3Vector(p*pos[0], p*pos[1], p*pos[2]);
+ BaseReconstructedParticle rp = new BaseReconstructedParticle(ClE, mom);
+ rp.setMass(0);
+ ParticleType photype = ParticlePropertyManager.getParticlePropertyProvider().get(22);
+ ParticleID id = new BaseParticleID(photype);
+ rp.addParticleID(id);
+ rp.setParticleIdUsed(id);
+ rp.addCluster(phoecclus);
+ rpList.add(rp);
+ }
+
+ // now get neutral hadron clusters
+ try
+ {
+ List<BasicCluster> neuhclusters = event.get(BasicCluster.class,"NeuHClusters");
+ for (BasicCluster neuhclus : neuhclusters)
+ {
+ double ClE = neuhclus.getEnergy()*1.3;
+ double[] pos = neuhclus.getPosition();
+ double norm = sqrt(pos[0]*pos[0]+pos[1]*pos[1]+pos[2]*pos[2]);
+ double p = ClE/norm;
+ Hep3Vector mom = new BasicHep3Vector(p*pos[0], p*pos[1], p*pos[2]);
+ BaseReconstructedParticle rp = new BaseReconstructedParticle(ClE, mom);
+ rp.setMass(718.5);
+ ParticleType neutype = ParticlePropertyManager.getParticlePropertyProvider().get(130);
+ ParticleID id = new BaseParticleID(neutype);
+ rp.addParticleID(id);
+ rp.setParticleIdUsed(id);
+ rp.addCluster(neuhclus);
+ rpList.add(rp);
+ }
+ } catch (java.lang.IllegalArgumentException ex)
+ {
+ System.out.println("No Neutral Hadron Clusters");
+ }
+
+ // add the list of rps to the event...
+ event.put("AllRecoParticles",rpList, ReconstructedParticle.class,0);
+ //some simple histograms...
+ aida.cloud1D("Number of ReconstructedParticles found").fill(rpList.size());
+ for(ReconstructedParticle rp : rpList)
+ {
+ aida.cloud1D("rp energy").fill(rp.getEnergy());
+ }
+
+ }
+
+ public void setTrackNames(String tnames)
+ {
+ _tracknames = tnames;
+ }
+ public void setPhotonNames(String[] pnames)
+ {
+ _photonnames = pnames;
+ }
+ public void setNeutralHadNames(String nhnames)
+ {
+ _neutralhadnames = nhnames;
+ }
+}
\ No newline at end of file