Author: [log in to unmask]
Date: Wed Sep 9 15:49:35 2015
New Revision: 3570
Log:
identify and split out partial tracks
Modified:
java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC_Pass2.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon_Pass2.lcsim
java/trunk/tracking/src/main/java/org/hps/recon/tracking/MergeTrackCollections.java
Modified: java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java Wed Sep 9 15:49:35 2015
@@ -36,6 +36,8 @@
/** Utility used to determine if a track and cluster are matched */
TrackClusterMatcher matcher = new TrackClusterMatcher();
+ String[] trackCollectionNames = null;
+
/**
* Sets the name of the LCIO collection for beam spot constrained V0
* candidate particles.
@@ -152,6 +154,15 @@
*/
public void setUnconstrainedV0VerticesColName(String unconstrainedV0VerticesColName) {
this.unconstrainedV0VerticesColName = unconstrainedV0VerticesColName;
+ }
+
+ /**
+ * Set the names of the LCIO track collections used as input.
+ *
+ * @param trackCollectionNames Array of collection names. If not set, use all Track collections in the event.
+ */
+ public void setTrackCollectionNames(String[] trackCollectionNames) {
+ this.trackCollectionNames = trackCollectionNames;
}
/**
@@ -365,12 +376,19 @@
// collection and add it to the list of collections. This is
// needed in order to create final state particles from the the
// Ecal clusters in the event.
- List<List<Track>> trackCollections;
- if (event.hasCollection(Track.class)) {
- trackCollections = event.get(Track.class);
+ List<List<Track>> trackCollections = new ArrayList<List<Track>>();
+ if (trackCollectionNames != null) {
+ for (String collectionName : trackCollectionNames) {
+ if (event.hasCollection(Track.class, collectionName)) {
+ trackCollections.add(event.get(Track.class, collectionName));
+ }
+ }
} else {
- trackCollections = new ArrayList<List<Track>>(0);
- trackCollections.add(new ArrayList<Track>(0));
+ if (event.hasCollection(Track.class)) {
+ trackCollections = event.get(Track.class);
+ } else {
+ trackCollections.add(new ArrayList<Track>(0));
+ }
}
// Instantiate new lists to store reconstructed particles and
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC_Pass2.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC_Pass2.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC_Pass2.lcsim Wed Sep 9 15:49:35 2015
@@ -123,32 +123,12 @@
<driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.HpsGblRefitter"/>
<driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
<ecalCollectionName>EcalCalHits</ecalCollectionName>
- <use2014Gain>false</use2014Gain>
- <useTimestamps>false</useTimestamps>
- <useTruthTime>false</useTruthTime>
- <useRunningPedestal>false</useRunningPedestal>
- <useTimeWalkCorrection>false</useTimeWalkCorrection>
- <emulateFirmware>true</emulateFirmware>
- <emulateMode7>true</emulateMode7>
- <leadingEdgeThreshold>12</leadingEdgeThreshold>
- <nsa>100</nsa>
- <nsb>20</nsb>
- <nPeak>3</nPeak>
- <useFit>true</useFit>
<fixShapeParameter>true</fixShapeParameter>
<globalFixedPulseWidth>2.4</globalFixedPulseWidth>
- <!--<debug>true</debug>-->
</driver>
<driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
<logLevel>WARNING</logLevel>
<outputClusterCollectionName>EcalClusters</outputClusterCollectionName>
- <hitEnergyThreshold>0.0075</hitEnergyThreshold>
- <seedEnergyThreshold>0.050</seedEnergyThreshold>
- <clusterEnergyThreshold>0.100</clusterEnergyThreshold>
- <minTime>0.0</minTime>
- <timeWindow>25.0</timeWindow>
- <useTimeCut>true</useTimeCut>
- <writeRejectedHitCollection>false</writeRejectedHitCollection>
</driver>
<driver name="GTPOnlineClusterer" type="org.hps.recon.ecal.cluster.ClusterDriver">
<logLevel>WARNING</logLevel>
@@ -160,10 +140,10 @@
<driver name="CopyCluster" type="org.hps.recon.ecal.cluster.CopyClusterCollectionDriver">
<inputCollectionName>EcalClusters</inputCollectionName>
<outputCollectionName>EcalClustersCorr</outputCollectionName>
- <storeHits>true</storeHits>
</driver>
<driver name="ReconParticle" type="org.hps.recon.particle.HpsReconParticleDriver">
<ecalClusterCollectionName>EcalClustersCorr</ecalClusterCollectionName>
+ <trackCollectionNames>MatchedTracks GBLTracks</trackCollectionNames>
</driver>
<driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver" />
<driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon_Pass2.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon_Pass2.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon_Pass2.lcsim Wed Sep 9 15:49:35 2015
@@ -132,6 +132,7 @@
<driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver" />
<driver name="ReconParticleDriver" type="org.hps.recon.particle.HpsReconParticleDriver" >
<ecalClusterCollectionName>EcalClustersCorr</ecalClusterCollectionName>
+ <trackCollectionNames>MatchedTracks GBLTracks</trackCollectionNames>
</driver>
<driver name="GBLOutputDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver"/>
<driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.HpsGblRefitter"/>
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/MergeTrackCollections.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/MergeTrackCollections.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/MergeTrackCollections.java Wed Sep 9 15:49:35 2015
@@ -25,14 +25,45 @@
public class MergeTrackCollections extends Driver {
private String outputCollectionName = "MatchedTracks";
+ private String partialTrackCollectionName = "PartialTracks";
private boolean removeCollections = true;
+ private double badHitChisq = 10.0;
+ /**
+ * Name of the LCIO collection containing all good tracks.
+ *
+ * @param outputCollectionName Defaults to MatchedTracks.
+ */
public void setOutputCollectionName(String outputCollectionName) {
this.outputCollectionName = outputCollectionName;
}
+ /**
+ * Name of the LCIO collection containing partial tracks (tracks whose hit
+ * content is a strict subset of another track).
+ *
+ * @param partialTrackCollectionName Defaults to PartialTracks.
+ */
+ public void setPartialTrackCollectionName(String partialTrackCollectionName) {
+ this.partialTrackCollectionName = partialTrackCollectionName;
+ }
+
+ /**
+ * Remove existing track collections after merging them.
+ *
+ * @param removeCollections Default to true.
+ */
public void setRemoveCollections(boolean removeCollections) {
this.removeCollections = removeCollections;
+ }
+
+ /**
+ * Set chisq threshold for partial tracks.
+ *
+ * @param badHitChisq Chisq threshold, default 10.
+ */
+ public void setBadHitChisq(double badHitChisq) {
+ this.badHitChisq = badHitChisq;
}
@Override
@@ -57,9 +88,11 @@
}
List<Track> deduplicatedTracks = new ArrayList<Track>();
+ Map<Track, Set<TrackerHit>> trackToHitsMap = new HashMap<Track, Set<TrackerHit>>();
- for (List<Track> matchingTracks : hitsToTracksMap.values()) {
- Track trk = matchingTracks.get(0);// pick lowest-chisq track (this probably doesn't matter)
+ for (Map.Entry<Set<TrackerHit>, List<Track>> mapEntry : hitsToTracksMap.entrySet()) {
+ List<Track> matchingTracks = mapEntry.getValue();
+ Track trk = matchingTracks.get(0);// pick lowest-chisq track
for (Track matchingTrack : matchingTracks) {
if (matchingTrack.getChi2() < trk.getChi2()) {
trk = matchingTrack;
@@ -83,7 +116,22 @@
((SeedTrack) trk).setTrackType(trackType);
deduplicatedTracks.add(trk);
+ trackToHitsMap.put(trk, mapEntry.getKey());
}
+
+ List<Track> partialTracks = new ArrayList<Track>();
+ for (Track track : deduplicatedTracks) {
+ Set<TrackerHit> trackHits = trackToHitsMap.get(track);
+ for (Track otherTrack : deduplicatedTracks) {
+ Set<TrackerHit> otherTrackHits = trackToHitsMap.get(otherTrack);
+ if (otherTrackHits.size() > trackHits.size() && otherTrackHits.containsAll(trackHits) && otherTrack.getChi2() < track.getChi2() + badHitChisq) {
+// System.out.format("%f %d %f %d\n", track.getChi2(), trackHits.size(), otherTrack.getChi2(), otherTrackHits.size());
+ partialTracks.add(track);
+ break;
+ }
+ }
+ }
+ deduplicatedTracks.removeAll(partialTracks);
if (removeCollections) {
for (List<Track> tracklist : trackCollections) {
@@ -93,5 +141,6 @@
int flag = 1 << LCIOConstants.TRBIT_HITS;
event.put(outputCollectionName, deduplicatedTracks, Track.class, flag);
+ event.put(partialTrackCollectionName, partialTracks, Track.class, flag);
}
}
|