1 added + 7 modified, total 8 files
lcsim/src/org/lcsim/mc/fast/cluster/ronan
diff -u -r1.1 -r1.2
--- ClusterResolutionTables.java 1 Feb 2005 19:50:33 -0000 1.1
+++ ClusterResolutionTables.java 15 Jul 2005 22:09:27 -0000 1.2
@@ -4,109 +4,139 @@
public class ClusterResolutionTables
{
- private double EMAlignmentError;
- private double EMConstantTerm;
- private double EMPositionError;
- private double EMResolution;
- private double EMmin;
- private double HADAlignmentError;
- private double HADConstantTerm;
- private double HADPositionError;
- private double HADResolution;
- private double HADmin;
- private double PolarEMInner;
- private double PolarEMOuter;
- private double PolarHADInner;
- private double PolarHADOuter;
-
- ClusterResolutionTables(ConditionsSet set)
- {
- EMmin = set.getDouble("EMmin");
- PolarEMInner = set.getDouble("PolarEMInner");
- PolarEMOuter = set.getDouble("PolarEMOuter");
-
- EMResolution = set.getDouble("EMResolution");
- EMConstantTerm = set.getDouble("EMConstantTerm");
- EMPositionError = set.getDouble("EMPositionError");
- EMAlignmentError = set.getDouble("EMAlignmentError");
-
- HADmin = set.getDouble("HADmin");
- PolarHADInner = set.getDouble("PolarHADInner");
- PolarHADOuter = set.getDouble("PolarHADOuter");
-
- HADResolution = set.getDouble("HADResolution");
- HADConstantTerm = set.getDouble("HADConstantTerm");
- HADPositionError = set.getDouble("HADPositionError");
- HADAlignmentError = set.getDouble("HADAlignmentError");
- }
-
- public double getEMAlignmentError()
- {
- return EMAlignmentError;
- }
-
- public double getEMConstantTerm()
- {
- return EMConstantTerm;
- }
-
- public double getEMPositionError()
- {
- return EMPositionError;
- }
-
- public double getEMResolution()
- {
- return EMResolution;
- }
-
- public double getEMmin()
- {
- return EMmin;
- }
-
- public double getHADAlignmentError()
- {
- return HADAlignmentError;
- }
-
- public double getHADConstantTerm()
- {
- return HADConstantTerm;
- }
-
- public double getHADPositionError()
- {
- return HADPositionError;
- }
-
- public double getHADResolution()
- {
- return HADResolution;
- }
-
- public double getHADmin()
- {
- return HADmin;
- }
-
- public double getPolarEMInner()
- {
- return PolarEMInner;
- }
-
- public double getPolarEMOuter()
- {
- return PolarEMOuter;
- }
-
- public double getPolarHADInner()
- {
- return PolarHADInner;
- }
-
- public double getPolarHADOuter()
- {
- return PolarHADOuter;
- }
+ private double EMAlignmentError;
+ private double EMConstantTerm;
+ private double EMPositionError;
+ private double EMResolution;
+ private double EMmin;
+ private double EMOnset;
+ private double EMSharpness;
+
+ private double HADAlignmentError;
+ private double HADConstantTerm;
+ private double HADPositionError;
+ private double HADResolution;
+ private double HADmin;
+ private double HADOnset;
+ private double HADSharpness;
+
+ private double PolarEMInner;
+ private double PolarEMOuter;
+ private double PolarHADInner;
+ private double PolarHADOuter;
+
+ ClusterResolutionTables(ConditionsSet set)
+ {
+ EMmin = set.getDouble("EMmin");
+ EMOnset = set.getDouble("EMOnset");
+ EMSharpness = set.getDouble("EMSharpness");
+ PolarEMInner = set.getDouble("PolarEMInner");
+ PolarEMOuter = set.getDouble("PolarEMOuter");
+
+ EMResolution = set.getDouble("EMResolution");
+ EMConstantTerm = set.getDouble("EMConstantTerm");
+ EMPositionError = set.getDouble("EMPositionError");
+ EMAlignmentError = set.getDouble("EMAlignmentError");
+
+ HADmin = set.getDouble("HADmin");
+ HADOnset = set.getDouble("HADOnset");
+ HADSharpness = set.getDouble("HADSharpness");
+ PolarHADInner = set.getDouble("PolarHADInner");
+ PolarHADOuter = set.getDouble("PolarHADOuter");
+
+ HADResolution = set.getDouble("HADResolution");
+ HADConstantTerm = set.getDouble("HADConstantTerm");
+ HADPositionError = set.getDouble("HADPositionError");
+ HADAlignmentError = set.getDouble("HADAlignmentError");
+ }
+
+ public double getEMAlignmentError()
+ {
+ return EMAlignmentError;
+ }
+
+ public double getEMConstantTerm()
+ {
+ return EMConstantTerm;
+ }
+
+ public double getEMPositionError()
+ {
+ return EMPositionError;
+ }
+
+ public double getEMResolution()
+ {
+ return EMResolution;
+ }
+
+ public double getEMmin()
+ {
+ return EMmin;
+ }
+
+ public double getEMOnset()
+ {
+ return EMOnset;
+ }
+
+ public double getEMSharpness()
+ {
+ return EMSharpness;
+ }
+
+ public double getHADAlignmentError()
+ {
+ return HADAlignmentError;
+ }
+
+ public double getHADConstantTerm()
+ {
+ return HADConstantTerm;
+ }
+
+ public double getHADPositionError()
+ {
+ return HADPositionError;
+ }
+
+ public double getHADResolution()
+ {
+ return HADResolution;
+ }
+
+ public double getHADmin()
+ {
+ return HADmin;
+ }
+
+ public double getHADOnset()
+ {
+ return HADOnset;
+ }
+
+ public double getHADSharpness()
+ {
+ return HADSharpness;
+ }
+
+ public double getPolarEMInner()
+ {
+ return PolarEMInner;
+ }
+
+ public double getPolarEMOuter()
+ {
+ return PolarEMOuter;
+ }
+
+ public double getPolarHADInner()
+ {
+ return PolarHADInner;
+ }
+
+ public double getPolarHADOuter()
+ {
+ return PolarHADOuter;
+ }
}
lcsim/src/org/lcsim/mc/fast/cluster/ronan
diff -u -r1.3 -r1.4
--- MCFastRonan.java 22 Feb 2005 06:37:41 -0000 1.3
+++ MCFastRonan.java 15 Jul 2005 22:09:27 -0000 1.4
@@ -13,98 +13,107 @@
import org.lcsim.event.EventHeader;
import org.lcsim.util.Driver;
+
+
+
/**
* Fast Monte Carlo cluster simulator
* @author M.Ronan Oct 2000 - Added "refined" cluster simulation
*/
public class MCFastRonan extends Driver implements ConditionsListener
{
- private final static int NuEID = 12;
- private final static int NuMuID = 14;
- private final static int NuTauID = 16;
- private final static int PhotonID = 22;
- private ClusterResolutionTables clusterParm;
-
- public void process(EventHeader event)
- {
- if (clusterParm == null)
- {
- ConditionsSet conditions = getConditionsManager().getConditions("ClusterParameters");
- conditions.addConditionsListener(this);
- clusterParm = new ClusterResolutionTables(conditions);
- }
- List cl = new ArrayList();
- boolean hist = getHistogramLevel() > 0;
-
- for (Iterator i = event.getMCParticles().iterator(); i.hasNext();)
- {
- Particle p = (Particle) i.next();
-
- // filter for FINALSTATE
- if (p.getGeneratorStatus() != p.FINAL_STATE)
- {
- continue;
- }
-
- ParticleType ptype = p.getType();
- int PDGID = ptype.getPDGID();
- double charge = p.getCharge();
-
- // filter neutrinos
- boolean neutrino = (Math.abs(PDGID) == NuEID) || (Math.abs(PDGID) == NuMuID) || (Math.abs(PDGID) == NuTauID);
- if (neutrino)
- {
- continue;
- }
-
- double E = p.getEnergy();
- double pt2 = (p.getPX() * p.getPX()) + (p.getPY() * p.getPY());
- double pt = Math.sqrt(pt2);
- double ptot = Math.sqrt(pt2 + (p.getPZ() * p.getPZ()));
- double cosTheta = p.getPZ() / ptot;
-
- Random rand = getRandom();
-
- // Photons
- if (PDGID == PhotonID)
- {
- // within acceptance
- if (E < clusterParm.getEMmin())
+ private final static int NuEID = 12;
+ private final static int NuMuID = 14;
+ private final static int NuTauID = 16;
+ private final static int PhotonID = 22;
+ private ClusterResolutionTables clusterParm;
+
+ public void process(EventHeader event)
+ {
+ if (clusterParm == null)
+ {
+ ConditionsSet conditions = getConditionsManager().getConditions("ClusterParameters");
+ conditions.addConditionsListener(this);
+ clusterParm = new ClusterResolutionTables(conditions);
+ }
+ List cl = new ArrayList();
+ List p1 = new ArrayList();
+ boolean hist = getHistogramLevel() > 0;
+
+ for (Iterator i = event.getMCParticles().iterator(); i.hasNext();)
+ {
+ Particle p = (Particle) i.next();
+
+ // filter for FINALSTATE
+ if (p.getGeneratorStatus() != p.FINAL_STATE)
{
- continue;
+ continue;
}
- if (Math.abs(cosTheta) > clusterParm.getPolarEMOuter())
+
+ ParticleType ptype = p.getType();
+ int PDGID = ptype.getPDGID();
+ double charge = p.getCharge();
+
+ // filter neutrinos
+ boolean neutrino = (Math.abs(PDGID) == NuEID) || (Math.abs(PDGID) == NuMuID) || (Math.abs(PDGID) == NuTauID);
+ if (neutrino)
{
- continue;
+ continue;
}
- cl.add(new ReconEMCluster(clusterParm, rand, p, hist));
- }
-
- // Neutral hadrons
- else if (charge == 0)
- {
- // within acceptance
- if (E < clusterParm.getHADmin())
+ double E = p.getEnergy();
+ double pt2 = (p.getPX() * p.getPX()) + (p.getPY() * p.getPY());
+ double pt = Math.sqrt(pt2);
+ double ptot = Math.sqrt(pt2 + (p.getPZ() * p.getPZ()));
+ double cosTheta = p.getPZ() / ptot;
+
+ Random rand = getRandom();
+
+ // Photons
+ if (PDGID == PhotonID)
{
- continue;
+ // within acceptance
+ double t = clusterParm.getEMOnset();
+ double thing = (1 - 1 / ( 1 + Math.exp( (E-clusterParm.getEMOnset())*clusterParm.getEMSharpness() ) ));
+ if (rand.nextDouble() > thing)
+ {
+ continue;
+ }
+ if (Math.abs(cosTheta) > clusterParm.getPolarEMOuter())
+ {
+ continue;
+ }
+
+ cl.add(new ReconEMCluster(clusterParm, rand, p, hist));
+
}
- if (Math.abs(cosTheta) > clusterParm.getPolarHADOuter())
+
+ // Neutral hadrons
+ else if (charge == 0)
{
- continue;
+ // within acceptance
+
+ double thing = (1 - 1 / ( 1 + Math.exp( (E-clusterParm.getHADOnset())*clusterParm.getHADSharpness() ) ));
+ if (rand.nextDouble() > thing)
+ {
+ continue;
+ }
+ if (Math.abs(cosTheta) > clusterParm.getPolarHADOuter())
+ {
+ continue;
+ }
+
+ cl.add(new ReconHADCluster(clusterParm, rand, p, hist));
}
-
- cl.add(new ReconHADCluster(clusterParm, rand, p, hist));
- }
- }
- event.put(EventHeader.CLUSTERS, cl, Cluster.class, 0);
- }
-
-
- public void conditionsChanged(ConditionsEvent event)
- {
- ConditionsSet conditions = getConditionsManager().getConditions("ClusterParameters");
- clusterParm = new ClusterResolutionTables(conditions);
- }
+ }
+ event.put(EventHeader.CLUSTERS, cl, Cluster.class, 0);
+ }
+
+
+ public void conditionsChanged(ConditionsEvent event)
+ {
+ ConditionsSet conditions = getConditionsManager().getConditions("ClusterParameters");
+ clusterParm = new ClusterResolutionTables(conditions);
+ }
}
lcsim/src/org/lcsim/mc/fast/cluster/ronan
diff -u -r1.1 -r1.2
--- ReconCluster.java 1 Feb 2005 19:50:34 -0000 1.1
+++ ReconCluster.java 15 Jul 2005 22:09:27 -0000 1.2
@@ -39,6 +39,7 @@
double E = mcp.getEnergy();
// Smear reconstructed energy
+
smearEnergy(rand, E, hist);
// Smear reconstructed position
@@ -49,9 +50,9 @@
{
double sigma = ((a / Math.sqrt(E)) + b) * E;
energy = E + (sigma * rand.nextGaussian());
- if (energy < 0.)
+ if (energy < mcp.getMass())
{
- energy = 0.;
+ energy = mcp.getMass() + 0.05;
}
}
@@ -95,6 +96,11 @@
cosTh = z / radius;
theta = Math.acos(cosTh);
}
+
+ public Particle getMCParticle()
+ {
+ return mcp;
+ }
abstract void smearPosition(Random rand, double E, boolean hist);
@@ -150,9 +156,9 @@
public double[] getPosition()
{
- double x = radius * Math.sin(phi);
- double y = radius + Math.cos(phi);
- double z = 0; // Fixme:
+ double x = radius * Math.sin(theta) * Math.cos(phi);
+ double y = radius * Math.sin(theta) * Math.sin(phi);
+ double z = radius * Math.cos(theta);
return new double[] { x,y,z };
}
lcsim/src/org/lcsim/mc/fast/cluster/ronan
diff -u -r1.2 -r1.3
--- ReconHADCluster.java 14 Mar 2005 16:11:31 -0000 1.2
+++ ReconHADCluster.java 15 Jul 2005 22:09:27 -0000 1.3
@@ -23,7 +23,6 @@
double transSigma = c / Math.sqrt(E) + d;
transDist = transSigma * rand.nextGaussian();
if (hist) AIDA.defaultInstance().cloud1D("HAD: transDist").fill(transDist);
-
smearPosition(rand);
}
}
lcsim/src/org/lcsim/mc/fast/reconstructedparticle
diff -N IDResolutionTables.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ IDResolutionTables.java 15 Jul 2005 22:09:29 -0000 1.1
@@ -0,0 +1,48 @@
+/*
+ * IDResolutionTables.java
+ *
+ * Created on July 6, 2005, 7:13 PM
+ *
+ * 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.
+ */
+
+package org.lcsim.mc.fast.reconstructedparticle;
+
+import org.lcsim.conditions.ConditionsSet;
+
+/**
+ *
+ * @author Daniel
+ */
+public class IDResolutionTables {
+
+ private double ElectronEff;
+ private double MuonEff;
+ private double NeutronEff;
+
+ /** Creates a new instance of IDResolutionTables */
+ IDResolutionTables(ConditionsSet set)
+ {
+ ElectronEff = set.getDouble("Electron");
+ MuonEff = set.getDouble("Muon");
+ NeutronEff = set.getDouble("Neutron");
+ }
+
+ public double getElectronEff()
+ {
+ return ElectronEff;
+ }
+
+ public double getMuonEff()
+ {
+ return ElectronEff;
+ }
+
+ public double getNeutronEff()
+ {
+ return ElectronEff;
+ }
+
+}
lcsim/src/org/lcsim/mc/fast/reconstructedparticle
diff -u -r1.2 -r1.3
--- MCFastParticleID.java 13 Jul 2005 05:56:16 -0000 1.2
+++ MCFastParticleID.java 15 Jul 2005 22:09:29 -0000 1.3
@@ -56,4 +56,5 @@
/** Constant to be used if the PDG code is not known or undefined.
*/
public final static int UnknownPDG = 999999;
-}
\ No newline at end of file
+
+}
lcsim/src/org/lcsim/mc/fast/reconstructedparticle
diff -u -r1.5 -r1.6
--- MCFastReconstructedParticle.java 13 Jul 2005 05:56:16 -0000 1.5
+++ MCFastReconstructedParticle.java 15 Jul 2005 22:09:29 -0000 1.6
@@ -4,20 +4,24 @@
import hep.physics.vec.BasicHepLorentzVector;
import hep.physics.vec.Hep3Vector;
import hep.physics.vec.HepLorentzVector;
+import hep.physics.particle.Particle;
import java.util.ArrayList;
import java.util.List;
+import java.util.Random;
+import org.lcsim.event.MCParticle;
import org.lcsim.event.Cluster;
import org.lcsim.event.ParticleID;
import org.lcsim.event.ReconstructedParticle;
import org.lcsim.event.Track;
import static java.lang.Math.sqrt;
+import static java.lang.Math.pow;
import org.lcsim.particle.ParticleType;
import org.lcsim.spacegeom.CartesianPoint;
import org.lcsim.spacegeom.SpacePoint;
/**
- * AN implementation of ReconstructedParticle appropriate for the fast Monte Carlo
+ *
* @author ngraf
*/
public class MCFastReconstructedParticle implements ReconstructedParticle
@@ -26,7 +30,7 @@
private double[] _covMatrix = new double[10];
private double _mass;
private double _charge;
- private Hep3Vector _referencePoint = new BasicHep3Vector();
+ private Hep3Vector _referencePoint;
private List<ParticleID> _particleIds = new ArrayList<ParticleID>();
private ParticleID _particleIdUsed;
private double _goodnessOfPid;
@@ -35,8 +39,7 @@
private List<Track> _tracks = new ArrayList<Track>();
private BasicHepLorentzVector _fourVec = new BasicHepLorentzVector();
-
- public MCFastReconstructedParticle(Track t, ParticleType type)
+ public MCFastReconstructedParticle(Track t, ParticleType type, Particle p)
{
_mass = type.mass();
addTrack(t);
@@ -44,29 +47,32 @@
_fourVec.setV3(e, t.getPX(), t.getPY(), t.getPZ());
_charge = t.getCharge();
+ _referencePoint = new BasicHep3Vector(t.getReferencePointX(), t.getReferencePointY(), t.getReferencePointZ());
+
addParticleID(new MCFastParticleID(type));
}
- public MCFastReconstructedParticle(Cluster c, ParticleType type)
+ public MCFastReconstructedParticle(Cluster c, ParticleType type, Particle p)
{
_mass = type.mass();
addCluster(c);
double e = c.getEnergy();
- double p = sqrt(e*e-_mass*_mass);
+ double pm = sqrt(e*e-_mass*_mass);
// get direction from position of cluster and assume it comes from the origin
double[] point = c.getPosition();
- SpacePoint pos = new CartesianPoint(point[0], point[1], point[2]);
- double px = p*pos.cosPhi()*pos.cosTheta();
- double py = p*pos.sinPhi()*pos.cosTheta();
- double pz = p*pos.cosTheta();
+ double len = sqrt(point[0]*point[0] + point[1]*point[1] + point[2]*point[2]);
+
+ _referencePoint = new BasicHep3Vector(0, 0, 0);
+
+ double px = (pm/len)*(point[0]);
+ double py = (pm/len)*(point[1]);
+ double pz = (pm/len)*(point[2]);
_fourVec.setV3(e, px, py, pz);
- // fastMC only creates clusters for neutral particles.
- // will need to fix if this changes.
_charge = 0.;
- addParticleID(new MCFastParticleID(type));
+ addParticleID(new MCFastParticleID(type));
}
-
+
// ReconstructedParticle interface
/** Type of reconstructed particle.
@@ -83,7 +89,7 @@
return _fourVec.v3();
}
- /** Energy of the reconstructed particle
+ /** Energy of the reconstructed particle
*/
public double getEnergy()
{
@@ -99,11 +105,11 @@
return _covMatrix;
}
- /** Mass of the reconstructed particle
+ /** Mass of the reconstructed particle, set independently from four vector quantities
*/
public double getMass()
{
- return _fourVec.magnitude();
+ return _mass;
}
/** Charge of the reconstructed particle.
@@ -114,7 +120,6 @@
}
/** Reference point of the reconstructedParticle parameters.
- * currently returns the origin.
*/
public Hep3Vector getReferencePoint()
{
@@ -208,4 +213,4 @@
sb.append("E: "+getEnergy());
return sb.toString();
}
-}
\ No newline at end of file
+}
lcsim/src/org/lcsim/mc/fast/reconstructedparticle
diff -u -r1.5 -r1.6
--- MCFastReconstructedParticleDriver.java 13 Jul 2005 05:56:16 -0000 1.5
+++ MCFastReconstructedParticleDriver.java 15 Jul 2005 22:09:30 -0000 1.6
@@ -1,8 +1,19 @@
+/*
+ * MCFastReconstructedParticleDriver.java
+ *
+ * Created on July 1, 2005, 2:55 PM
+ *
+ * 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.
+ */
+
package org.lcsim.mc.fast.reconstructedparticle;
import hep.physics.particle.Particle;
import java.util.ArrayList;
import java.util.List;
+import java.util.Random;
import org.lcsim.event.Cluster;
import org.lcsim.event.EventHeader;
import org.lcsim.event.ReconstructedParticle;
@@ -11,6 +22,10 @@
import org.lcsim.mc.fast.tracking.ReconTrack;
import org.lcsim.particle.ParticleType;
import org.lcsim.util.Driver;
+import org.lcsim.mc.fast.reconstructedparticle.IDResolutionTables;
+import org.lcsim.conditions.ConditionsEvent;
+import org.lcsim.conditions.ConditionsListener;
+import org.lcsim.conditions.ConditionsSet;
import static java.lang.Math.abs;
import org.lcsim.mc.fast.cluster.ronan.ReconEMCluster;
@@ -19,13 +34,19 @@
import org.lcsim.particle.Neutron;
import org.lcsim.particle.Photon;
import org.lcsim.particle.Pion;
+import org.lcsim.particle.KLong;
+
+import org.lcsim.util.aida.AIDA;
/**
*
* @author ngraf
*/
-public class MCFastReconstructedParticleDriver extends Driver
+public class MCFastReconstructedParticleDriver extends Driver implements ConditionsListener
{
+ private IDResolutionTables IDEff;
+ private AIDA aida = AIDA.defaultInstance();
+
/** Creates a new instance of MCFastReconstructedParticleDriver */
public MCFastReconstructedParticleDriver()
{
@@ -33,57 +54,96 @@
public void process(EventHeader event)
{
- // create the list of ReconstructedParticles to add back to the event.
+
+ if (IDEff == null)
+ {
+ ConditionsSet conditions = getConditionsManager().getConditions("IDEfficiency");
+ conditions.addConditionsListener(this);
+ IDEff = new IDResolutionTables(conditions);
+ }
+
+ Random rand = getRandom();
+
List<ReconstructedParticle> rpList = new ArrayList<ReconstructedParticle>();
// start with the smeared tracks...
List<Track> tracks = event.getTracks();
for(Track t : tracks)
{
ParticleType type = null;
- // Track does not have link to MCParticle, so cast to MCFast track
if(t instanceof ReconTrack)
{
ReconTrack rt = (ReconTrack) t;
Particle p = rt.getMCParticle();
int pdgid = p.getPDGID();
+
// electrons and muons are special
- if(abs(pdgid)== 11)
+ if((abs(pdgid)== 11) && (rand.nextDouble() < IDEff.getElectronEff()))
{
type = new Electron((int)Math.signum(pdgid));
}
- else if(abs(pdgid)== 13)
+ else if((abs(pdgid)== 13) && (rand.nextDouble() < IDEff.getMuonEff()))
{
type = new Muon((int)Math.signum(pdgid));
}
- else // assume pion for remaining charged tracks
+ else
{
type = new Pion(rt.getCharge());
}
- }
- MCFastReconstructedParticle rp = new MCFastReconstructedParticle(t, type);
+
+ aida.histogram1D("track-particle", 150, -10, 10).fill( (t.getPX()*t.getPX() + t.getPY()*t.getPY() + t.getPZ()*t.getPZ() + type.mass()*type.mass()) - p.getEnergy());
+
+ // assume pion for remaining charged tracks
+ MCFastReconstructedParticle rp = new MCFastReconstructedParticle(t, type, p);
rpList.add(rp);
- }
+ aida.histogram1D("recon-particle", 150, -10, 10).fill(rp.getEnergy()-p.getEnergy());
+ }
+ }
- // now loop over clusters...
+ // loop over clusters...
List<Cluster> clusters = event.getClusters();
for(Cluster c : clusters)
{
ParticleType type = null;
- // assume photon for EM cluster
+ Particle p = null;
+ // photons for EM
if( c instanceof ReconEMCluster)
{
+ ReconEMCluster emc = (ReconEMCluster) c;
+ p = emc.getMCParticle();
type = new Photon();
+ aida.histogram1D("cluster-particle", 150, -10, 10).fill(emc.getEnergy()-emc.getMCParticle().getEnergy());
}
- // assume neutron here for had cluster, could also use K0L
+ // assume a KZeroLong here for had cluster
else if(c instanceof ReconHADCluster)
{
- type = new Neutron();
+ ReconHADCluster emc = (ReconHADCluster) c;
+ p = emc.getMCParticle();
+ int pdgid = p.getPDGID();
+ aida.histogram1D("cluster-particle", 150, -10, 10).fill(emc.getEnergy()-emc.getMCParticle().getEnergy());
+
+ if ((abs(pdgid)==2112) && (rand.nextDouble() < IDEff.getNeutronEff()))
+ {
+ type = new Neutron();
+ }
+ else
+ {
+ type = new KLong();
+ }
}
- MCFastReconstructedParticle rp = new MCFastReconstructedParticle(c, type);
+ MCFastReconstructedParticle rp = new MCFastReconstructedParticle(c, type, p);
rpList.add(rp);
+ aida.histogram1D("recon-particle", 150, -10, 10).fill(rp.getEnergy()-p.getEnergy());
}
// add the reconstructedparticles to the event
- event.put("MCFastReconstructedParticles", rpList, ReconstructedParticle.class, 0);
+ event.put(event.RECONSTRUCTEDPARTICLES, rpList, ReconstructedParticle.class, 0);
+
+ }
+
+ public void conditionsChanged(ConditionsEvent event)
+ {
+ ConditionsSet conditions = getConditionsManager().getConditions("IDEfficiency");
+ IDEff = new IDResolutionTables(conditions);
}
-}
\ No newline at end of file
+
+}
CVSspam 0.2.8