Author: [log in to unmask]
Date: Thu Jun 4 08:00:07 2015
New Revision: 3087
Log:
Fix class type typo
new Driver to strip Moller events for diagnostics
Added:
java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripMollerEventsDriver.java
- copied, changed from r3083, java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java
Modified:
java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java Thu Jun 4 08:00:07 2015
@@ -25,7 +25,7 @@
{
// select "golden" events with two tracks, two clusters and e+ e-
boolean skipEvent = false;
- if (event.hasCollection(Vertex.class, "UnconstrainedV0Candidates")) {
+ if (event.hasCollection(ReconstructedParticle.class, "UnconstrainedV0Candidates")) {
List<ReconstructedParticle> vertices = event.get(ReconstructedParticle.class, "UnconstrainedV0Candidates");
if (vertices.size() > 1 || vertices.isEmpty()) {
skipEvent = true;
@@ -45,7 +45,7 @@
skipEvent = true;
}
// require no other clusters in the event
- if (event.get(Cluster.class, "EcalClusters").size() > 2) {
+ if (event.get(Cluster.class, "EcalClustersGTP").size() > 2) {
skipEvent = true;
}
}
Copied: java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripMollerEventsDriver.java (from r3083, java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java)
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripMollerEventsDriver.java Thu Jun 4 08:00:07 2015
@@ -1,57 +1,103 @@
package org.hps.analysis.examples;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
import java.util.List;
import org.lcsim.event.Cluster;
import org.lcsim.event.EventHeader;
import org.lcsim.event.ReconstructedParticle;
import org.lcsim.event.Track;
-import org.lcsim.event.Vertex;
import org.lcsim.util.Driver;
/**
- * Class to strip off "golden events"
- * Currently defined as e+ e- with six-hit tracks and nothing else in the event
+ * Class to strip off Moller candidates
+ * Currently defined as:
+ * e- e- events
+ * non-full-energy electrons
+ * momentum sum between 0.85 and 1.3 GeV
+ * six-hit tracks and
+ * nothing else in the event
+ *
* @author Norman A Graf
*
* @version $Id:
*/
-public class StripGoldenEventsDriver extends Driver
+public class StripMollerEventsDriver extends Driver
{
+ private String finalStateParticlesColName = "FinalStateParticles";
private int _numberOfEventsWritten = 0;
+
+ private boolean debug;
+
+ double molPSumMin = 0.85;
+ double molPSumMax = 1.3;
+ double beambeamCut = 0.85;
@Override
protected void process(EventHeader event)
{
- // select "golden" events with two tracks, two clusters and e+ e-
- boolean skipEvent = false;
- if (event.hasCollection(Vertex.class, "UnconstrainedV0Candidates")) {
- List<ReconstructedParticle> vertices = event.get(ReconstructedParticle.class, "UnconstrainedV0Candidates");
- if (vertices.size() > 1 || vertices.isEmpty()) {
- skipEvent = true;
- } else {
- ReconstructedParticle vtx = vertices.get(0);
- //this always has 2 tracks.
- List<ReconstructedParticle> rps = vtx.getParticles();
- for (ReconstructedParticle rp : rps) {
- List<Track> trks = rp.getTracks();
- // require each track to have six hits
- if (trks.get(0).getTrackerHits().size() != 6) {
- skipEvent = true;
+ boolean skipEvent = true;
+ if (event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName)) {
+ List<ReconstructedParticle> finalStateParticles = event.get(ReconstructedParticle.class, finalStateParticlesColName);
+ if (debug) {
+ System.out.println("This events has " + finalStateParticles.size() + " final state particles");
+ }
+ // require two and only two ReconstructedParticles
+ // require no other tracks in the event
+ // require no other clusters in the event
+ if (finalStateParticles.size() == 2
+ && event.get(Track.class, "MatchedTracks").size() == 2
+ && event.get(Cluster.class, "EcalClustersGTP").size() == 2) {
+ // at this point we should have two and only two good particles in the event
+ // let's see what they are...
+ ReconstructedParticle ele1 = null;
+ ReconstructedParticle ele2 = null;
+ int sumCharge = 0;
+ int numChargedParticles = 0;
+ for (ReconstructedParticle fsPart : finalStateParticles) {
+ if (debug) {
+ System.out.println("PDGID = " + fsPart.getParticleIDUsed() + "; charge = " + fsPart.getCharge() + "; pz = " + fsPart.getMomentum().x());
+ }
+ double charge = fsPart.getCharge();
+ sumCharge += charge;
+ if (charge != 0) {
+ numChargedParticles++;
+ if (charge < 1) {
+ if (ele1 == null) {
+ ele1 = fsPart;
+ } else {
+ ele2 = fsPart;
+ }
+ }
}
}
- // require no other tracks in the event
- if (event.get(Track.class, "MatchedTracks").size() > 2) {
- skipEvent = true;
- }
- // require no other clusters in the event
- if (event.get(Cluster.class, "EcalClusters").size() > 2) {
- skipEvent = true;
+
+ if (ele1 != null && ele2 != null) {
+ Hep3Vector p1 = ele1.getMomentum();
+ Hep3Vector p2 = ele2.getMomentum();
+ Hep3Vector beamAxis = new BasicHep3Vector(Math.sin(0.0305), 0, Math.cos(0.0305));
+ double theta1 = Math.acos(VecOp.dot(p1, beamAxis) / p1.magnitude());
+ double theta2 = Math.acos(VecOp.dot(p2, beamAxis) / p2.magnitude());
+ //look at "Moller" events (if that's what they really are)
+ if (ele1.getMomentum().magnitude() + ele2.getMomentum().magnitude() > molPSumMin
+ && ele1.getMomentum().magnitude() + ele2.getMomentum().magnitude() < molPSumMax
+ && (p1.magnitude() < beambeamCut && p2.magnitude() < beambeamCut)) {
+
+ // require that both tracks have six hits
+ Track ele1trk = ele1.getTracks().get(0);
+ Track ele2trk = ele2.getTracks().get(0);
+ if (ele1trk.getTrackerHits().size() == 6
+ && ele2trk.getTrackerHits().size() == 6) {
+ // OK. we should be golden here
+ skipEvent = false;
+ }
+ }
}
}
- } else {
- skipEvent = true;
}
+
if (skipEvent) {
throw new Driver.NextEventException();
} else {
@@ -60,6 +106,14 @@
}
}
+ private double getMomentum(Track trk)
+ {
+ double px = trk.getTrackStates().get(0).getMomentum()[0];
+ double py = trk.getTrackStates().get(0).getMomentum()[1];
+ double pz = trk.getTrackStates().get(0).getMomentum()[2];
+ return Math.sqrt(px * px + py * py + pz * pz);
+ }
+
@Override
protected void endOfData()
{
|