Author: [log in to unmask]
Date: Mon Jun 22 19:12:27 2015
New Revision: 3184
Log:
driver for cleaning up reconparticle collections
Added:
java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/PairsSkimmer.lcsim
- copied, changed from r3101, java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/EcalScoring.lcsim
java/trunk/users/src/main/java/org/hps/users/meeg/ReconParticleCleanupDriver.java
Copied: java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/PairsSkimmer.lcsim (from r3101, java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/EcalScoring.lcsim)
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/EcalScoring.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/PairsSkimmer.lcsim Mon Jun 22 19:12:27 2015
@@ -1,28 +1,43 @@
<!--
- Minimal example for ECalScoringMatchDriver.
+ Discard events with SVT readout noise.
@author Sho Uemura <[log in to unmask]>
- @version $Id: HPS2014ReadoutToLcio.lcsim,v 1.2 2013/03/01 23:22:24 meeg Exp $
-->
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
<execute>
<driver name="EventMarkerDriver"/>
+
+ <driver name="RawTrackerHitSensorSetup"/>
- <driver name="EcalScoringMatch"/>
+ <driver name="ReconParticleCleanupDriver"/>
+
+ <driver name="SVTSmallHitsFilter"/>
+ <driver name="EcalPairsFilter"/>
+ <driver name="CollectionSizeFilter"/>
- <driver name="AidaSaveDriver"/>
+ <driver name="LCIOWriter"/>
</execute>
<drivers>
<driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
- <eventInterval>1</eventInterval>
+ <eventInterval>1000</eventInterval>
</driver>
- <driver name="EcalScoringMatch" type="org.hps.analysis.examples.EcalScoringMatchDriver"/>
-
- <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
- <outputFileName>${outputFile}</outputFileName>
+ <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup">
+ <readoutCollections>SVTRawTrackerHits</readoutCollections>
</driver>
+ <driver name="ReconParticleCleanupDriver" type="org.hps.users.meeg.ReconParticleCleanupDriver"/>
+
+ <driver name="SVTSmallHitsFilter" type="org.hps.recon.filtering.SVTSmallHitsFilter"/>
+ <driver name="EcalPairsFilter" type="org.hps.recon.filtering.EcalPairsFilter"/>
+ <driver name="CollectionSizeFilter" type="org.hps.recon.filtering.CollectionSizeFilter">
+ <collectionName>UnconstrainedV0Candidates</collectionName>
+ <minSize>1</minSize>
+ </driver>
+
+ <driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">
+ <outputFilePath>${outputFile}.slcio</outputFilePath>
+ </driver>
</drivers>
</lcsim>
Added: java/trunk/users/src/main/java/org/hps/users/meeg/ReconParticleCleanupDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/meeg/ReconParticleCleanupDriver.java (added)
+++ java/trunk/users/src/main/java/org/hps/users/meeg/ReconParticleCleanupDriver.java Mon Jun 22 19:12:27 2015
@@ -0,0 +1,125 @@
+package org.hps.users.meeg;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import org.hps.recon.ecal.cluster.ClusterUtilities;
+import org.hps.recon.tracking.TrackUtils;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.RelationalTable;
+import org.lcsim.util.Driver;
+
+/**
+ * Remove final state particles with bad track-cluster time matching, and
+ * vertices with shared tracks.
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: $
+ */
+public class ReconParticleCleanupDriver extends Driver {
+
+ private final String finalStateParticlesColName = "FinalStateParticles";
+ private final String unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates";
+ private final String beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates";
+ private final String targetV0ConCandidatesColName = "TargetConstrainedV0Candidates";
+ private double fsDeltaT = 43.5;
+ private double fsDeltaTCut = 5.0;
+
+ /**
+ * Center value for (cluster - track) time cut.
+ *
+ * @param fsDeltaT
+ */
+ public void setFsDeltaT(double fsDeltaT) {
+ this.fsDeltaT = fsDeltaT;
+ }
+
+ /**
+ * Cut window half-width for (cluster - track) time cut.
+ *
+ * @param fsDeltaTCut
+ */
+ public void setFsDeltaTCut(double fsDeltaTCut) {
+ this.fsDeltaTCut = fsDeltaTCut;
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
+ RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
+
+ for (Iterator<ReconstructedParticle> iter = event.get(ReconstructedParticle.class, finalStateParticlesColName).listIterator(); iter.hasNext();) {
+ ReconstructedParticle fs = iter.next();
+ if (fs.getClusters().isEmpty()) {//track without cluster, discard
+ iter.remove();
+ continue;
+ }
+
+ if (fs.getTracks().isEmpty()) {//cluster without track (photon), keep
+ continue;
+ }
+
+ double deltaT = ClusterUtilities.getSeedHitTime(fs.getClusters().get(0)) - TrackUtils.getTrackTime(fs.getTracks().get(0), hitToStrips, hitToRotated);
+ if (Math.abs(deltaT - fsDeltaT) > fsDeltaTCut) {//bad track-cluster time match, discard
+ iter.remove();
+ }
+ }
+
+ Set<ReconstructedParticle> fsParticles = new HashSet<ReconstructedParticle>(event.get(ReconstructedParticle.class, finalStateParticlesColName));
+
+ v0Loop:
+ for (Iterator<ReconstructedParticle> iter = event.get(ReconstructedParticle.class, unconstrainedV0CandidatesColName).listIterator(); iter.hasNext();) {
+ ReconstructedParticle v0 = iter.next();
+ if (hasSharedStrips(v0, hitToStrips, hitToRotated)) {
+ iter.remove();
+ continue;
+ }
+ for (ReconstructedParticle particle : v0.getParticles()) {
+ if (!fsParticles.contains(particle)) {
+ iter.remove();
+ continue v0Loop;
+ }
+ }
+ }
+
+ v0Loop:
+ for (Iterator<ReconstructedParticle> iter = event.get(ReconstructedParticle.class, beamConV0CandidatesColName).listIterator(); iter.hasNext();) {
+ ReconstructedParticle v0 = iter.next();
+ if (hasSharedStrips(v0, hitToStrips, hitToRotated)) {
+ iter.remove();
+ continue;
+ }
+ for (ReconstructedParticle particle : v0.getParticles()) {
+ if (!fsParticles.contains(particle)) {
+ iter.remove();
+ continue v0Loop;
+ }
+ }
+ }
+
+ v0Loop:
+ for (Iterator<ReconstructedParticle> iter = event.get(ReconstructedParticle.class, targetV0ConCandidatesColName).listIterator(); iter.hasNext();) {
+ ReconstructedParticle v0 = iter.next();
+ if (hasSharedStrips(v0, hitToStrips, hitToRotated)) {
+ iter.remove();
+ continue;
+ }
+ for (ReconstructedParticle particle : v0.getParticles()) {
+ if (!fsParticles.contains(particle)) {
+ iter.remove();
+ continue v0Loop;
+ }
+ }
+ }
+ }
+
+ private static boolean hasSharedStrips(ReconstructedParticle vertex, RelationalTable hittostrip, RelationalTable hittorotated) {
+ return hasSharedStrips(vertex.getParticles().get(0), vertex.getParticles().get(1), hittostrip, hittorotated);
+ }
+
+ private static boolean hasSharedStrips(ReconstructedParticle fs1, ReconstructedParticle fs2, RelationalTable hittostrip, RelationalTable hittorotated) {
+ return TrackUtils.hasSharedStrips(fs1.getTracks().get(0), fs2.getTracks().get(0), hittostrip, hittorotated);
+ }
+
+}
|