Author: [log in to unmask]
Date: Wed Dec 9 14:48:02 2015
New Revision: 4035
Log:
add relation, use new GBL refitter
Modified:
java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim Wed Dec 9 14:48:02 2015
@@ -51,7 +51,6 @@
ReconstructedParticle types are properly set.
-->
<driver name="MergeTrackCollections"/>
- <driver name="GBLOutputDriver" />
<driver name="GBLRefitterDriver" />
<driver name="TrackDataDriver" />
<driver name="ReconParticleDriver" />
@@ -134,8 +133,7 @@
<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"/>
+ <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.GBLRefitterDriver"/>
<driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">
<outputFilePath>${outputFile}.slcio</outputFilePath>
</driver>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim Wed Dec 9 14:48:02 2015
@@ -53,7 +53,6 @@
ReconstructedParticle types are properly set.
-->
<driver name="MergeTrackCollections"/>
- <driver name="GBLOutputDriver" />
<driver name="GBLRefitterDriver" />
<driver name="TrackDataDriver" />
<driver name="ReconParticleDriver" />
@@ -119,8 +118,7 @@
<rmsTimeCut>8.0</rmsTimeCut>
</driver>
<driver name="MergeTrackCollections" type="org.hps.recon.tracking.MergeTrackCollections" />
- <driver name="GBLOutputDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver"/>
- <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.HpsGblRefitter"/>
+ <driver name="GBLRefitterDriver" type="org.hps.recon.tracking.gbl.GBLRefitterDriver"/>
<driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
<ecalCollectionName>EcalCalHits</ecalCollectionName>
<fixShapeParameter>true</fixShapeParameter>
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackDataDriver.java Wed Dec 9 14:48:02 2015
@@ -16,7 +16,6 @@
import org.lcsim.event.TrackState;
import org.lcsim.event.TrackerHit;
import org.lcsim.event.base.BaseLCRelation;
-import org.lcsim.event.base.BaseRelationalTable;
import org.lcsim.fit.helicaltrack.HelicalTrackCross;
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
@@ -34,7 +33,7 @@
public final class TrackDataDriver extends Driver {
/** logger **/
- private static Logger LOGGER = Logger.getLogger(TrackDataDriver.class.getPackage().getName());
+ private static final Logger LOGGER = Logger.getLogger(TrackDataDriver.class.getPackage().getName());
/** The B field map */
@@ -107,6 +106,7 @@
*
* @param detector LCSim {@link Detector} geometry
*/
+ @Override
protected void detectorChanged(Detector detector) {
// Get the field map from the detector object
@@ -121,6 +121,7 @@
*
* @param event : LCSim event
*/
+ @Override
protected void process(EventHeader event) {
// Check if the event contains a collection of the type Track. If it
@@ -135,15 +136,11 @@
// Get the collection of LCRelations relating RotatedHelicalTrackHits to
// HelicalTrackHits
- List<LCRelation> rotatedHthToHthRelations = event.get(LCRelation.class, ROTATED_HTH_REL_COL_NAME);
- BaseRelationalTable hthToRotatedHth = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE,
- RelationalTable.Weighting.UNWEIGHTED);
- hthToRotatedHth.addRelations(rotatedHthToHthRelations);
RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
- List<HelicalTrackHit> rotatedHths = event.get(HelicalTrackHit.class, ROTATED_HTH_COL_NAME);
+// List<HelicalTrackHit> rotatedHths = event.get(HelicalTrackHit.class, ROTATED_HTH_COL_NAME);
// Create a container that will be used to store all TrackData objects.
List<TrackData> trackDataCollection = new ArrayList<TrackData>();
@@ -159,21 +156,21 @@
// residuals
List<LCRelation> trackToTrackResidualsRelations = new ArrayList<LCRelation>();
- double xResidual = 0;
- double yResidual = 0;
-
- float totalT0 = 0;
- float totalHits = 0;
- float trackTime = 0;
+ double xResidual;
+ double yResidual;
+
+ float totalT0;
+ float totalHits;
+ float trackTime;
int trackerVolume = -1;
- boolean isFirstHit = true;
-
- HpsSiSensor sensor = null;
- Hep3Vector stereoHitPosition = null;
- Hep3Vector trackPosition = null;
- HelicalTrackHit helicalTrackHit = null;
+ boolean isFirstHit;
+
+ HpsSiSensor sensor;
+ Hep3Vector stereoHitPosition;
+ Hep3Vector trackPosition;
+ HelicalTrackHit helicalTrackHit;
List<Double> t0Residuals = new ArrayList<Double>();
List<Double> trackResidualsX = new ArrayList<Double>();
@@ -198,7 +195,10 @@
stereoLayers.clear();
isFirstHit = true;
- //
+// TrackState trackStateForResiduals = TrackUtils.getTrackStateAtLocation(track, TrackState.AtLastHit);
+// if (trackStateForResiduals == null ) trackStateForResiduals= TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
+ TrackState trackStateForResiduals = TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
+
// Change the position of a HelicalTrackHit to be the corrected
// one.
// FIXME: Now that multiple track collections are being used,
@@ -216,7 +216,7 @@
// Extrapolate the track to the stereo hit position and
// calculate track residuals
stereoHitPosition = ((HelicalTrackHit) rotatedStereoHit).getCorrectedPosition();
- trackPosition = TrackUtils.extrapolateTrack(track, stereoHitPosition.x());
+ trackPosition = TrackUtils.extrapolateTrack(trackStateForResiduals, stereoHitPosition.x());
xResidual = trackPosition.x() - stereoHitPosition.y();
yResidual = trackPosition.y() - stereoHitPosition.z();
trackResidualsX.add(xResidual);
@@ -230,7 +230,7 @@
// Get the HelicalTrackHit corresponding to the
// RotatedHelicalTrackHit associated with a track
- helicalTrackHit = (HelicalTrackHit) hthToRotatedHth.from(rotatedStereoHit);
+ helicalTrackHit = (HelicalTrackHit) hitToRotated.from(rotatedStereoHit);
((HelicalTrackHit) rotatedStereoHit).setPosition(stereoHitPosition.v());
stereoHitPosition = CoordinateTransformations.transformVectorToDetector(stereoHitPosition);
helicalTrackHit.setPosition(stereoHitPosition.v());
@@ -261,18 +261,7 @@
// Extrapolate the track to the face of the Ecal and get the TrackState
if( TrackType.isGBL(track.getType())) {
- TrackState stateLast = null;
- TrackState stateIP = null;
- for(int ist= 0; ist < track.getTrackStates().size(); ist++) {
- if( track.getTrackStates().get(ist).getLocation() == TrackState.AtLastHit )
- stateLast = track.getTrackStates().get(ist);
- if( track.getTrackStates().get(ist).getLocation() == TrackState.AtIP )
- stateIP = track.getTrackStates().get(ist);
- }
- if( stateLast == null)
- throw new RuntimeException("last hit track state for GBL track was not found");
-// TrackState stateEcal = TrackUtils.extrapolateTrackUsingFieldMap(stateLast, extStartPos, ecalPosition, stepSize, bFieldMap);
-// track.getTrackStates().add(stateEcal);
+ TrackState stateIP = TrackUtils.getTrackStateAtLocation(track, TrackState.AtIP);
if( stateIP == null)
throw new RuntimeException("IP track state for GBL track was not found");
TrackState stateEcalIP = TrackUtils.extrapolateTrackUsingFieldMap(stateIP, extStartPos, ecalPosition, stepSize, bFieldMap);
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackUtils.java Wed Dec 9 14:48:02 2015
@@ -1306,15 +1306,25 @@
return new Line(r0, phi, lambda);
}
- public static TrackState getTrackStateAtECal(Track trk) {
+ /**
+ * Port of Track.getTrackState(int location) from the C++ LCIO API.
+ * @param trk A track.
+ * @param location A TrackState location constant
+ * @return The first matching TrackState; null if none is found.
+ */
+ public static TrackState getTrackStateAtLocation(Track trk, int location) {
for (TrackState state : trk.getTrackStates()) {
- if (state.getLocation() == TrackState.AtCalorimeter) {
+ if (state.getLocation() == location) {
return state;
}
}
return null;
}
+ public static TrackState getTrackStateAtECal(Track trk) {
+ return getTrackStateAtLocation(trk, TrackState.AtCalorimeter);
+ }
+
public static Hep3Vector getBField(Detector detector) {
return detector.getFieldMap().getField(new BasicHep3Vector(0., 0., 500.0));
}
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java Wed Dec 9 14:48:02 2015
@@ -13,11 +13,9 @@
import java.util.logging.Logger;
import org.lcsim.event.EventHeader;
-import org.lcsim.event.LCRelation;
import org.lcsim.event.RelationalTable;
import org.lcsim.event.Track;
import org.lcsim.event.TrackerHit;
-import org.lcsim.event.base.BaseRelationalTable;
import org.lcsim.event.base.BaseTrack;
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
import org.lcsim.geometry.Detector;
@@ -65,7 +63,7 @@
private double rmsTimeCut = -1;
private boolean rejectUncorrectedHits = true;
private boolean rejectSharedHits = false;
-
+
public TrackerReconDriver() {
}
@@ -165,8 +163,9 @@
//
// 1) Driver to run Seed Tracker.
//
- if (!strategyResource.startsWith("/"))
+ if (!strategyResource.startsWith("/")) {
strategyResource = "/org/hps/recon/tracking/strategies/" + strategyResource;
+ }
List<SeedStrategy> sFinallist = StrategyXMLUtils.getStrategyListFromInputStream(this.getClass().getResourceAsStream(strategyResource));
SeedTracker stFinal = new SeedTracker(sFinallist, this._useHPSMaterialManager, this.includeMS);
stFinal.setApplySectorBinning(_applySectorBinning);
@@ -177,14 +176,16 @@
stFinal.setInputCollectionName(stInputCollectionName);
stFinal.setTrkCollectionName(trackCollectionName);
stFinal.setBField(bfield);
- if (debug)
+ if (debug) {
stFinal.setDiagnostics(new SeedTrackerDiagnostics());
+ }
// stFinal.setSectorParams(false); //this doesn't actually seem to do anything
stFinal.setSectorParams(1, 10000);
add(stFinal);
- if (rmsTimeCut > 0)
+ if (rmsTimeCut > 0) {
stFinal.setTrackCheck(new HitTimeTrackCheck(rmsTimeCut));
+ }
}
/**
@@ -198,10 +199,11 @@
// Debug printouts.
if (debug) {
- if (event.hasCollection(HelicalTrackHit.class, stInputCollectionName))
+ if (event.hasCollection(HelicalTrackHit.class, stInputCollectionName)) {
System.out.println(this.getClass().getSimpleName() + ": The HelicalTrackHit collection " + stInputCollectionName + " has " + event.get(HelicalTrackHit.class, stInputCollectionName).size() + " hits.");
- else
+ } else {
System.out.println(this.getClass().getSimpleName() + ": No HelicalTrackHit collection for this event");
+ }
// Check for Tracks.
List<Track> tracks = event.get(Track.class, trackCollectionName);
System.out.println(this.getClass().getSimpleName() + ": The Track collection " + trackCollectionName + " has " + tracks.size() + " tracks.");
@@ -236,27 +238,13 @@
}
if (rejectSharedHits) {
-
- RelationalTable hittostrip = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
- List<LCRelation> hitrelations = event.get(LCRelation.class, "HelicalTrackHitRelations");
- for (LCRelation relation : hitrelations) {
- if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
- hittostrip.add(relation.getFrom(), relation.getTo());
- }
- }
-
- RelationalTable hittorotated = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
- List<LCRelation> rotaterelations = event.get(LCRelation.class, "RotatedHelicalTrackHitRelations");
- for (LCRelation relation : rotaterelations) {
- if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
- hittorotated.add(relation.getFrom(), relation.getTo());
- }
- }
+ RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
+ RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
Map<TrackerHit, List<Track>> stripsToTracks = new HashMap<TrackerHit, List<Track>>();
for (Track track : tracks) {
for (TrackerHit hit : track.getTrackerHits()) {
- Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+ Collection<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
for (TrackerHit strip : htsList) {
List<Track> sharedTracks = stripsToTracks.get(strip);
if (sharedTracks == null) {
@@ -272,7 +260,7 @@
while (iter.hasNext()) {
Track track = iter.next();
for (TrackerHit hit : track.getTrackerHits()) {
- Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit));
+ Collection<TrackerHit> htsList = hitToStrips.allFrom(hitToRotated.from(hit));
for (TrackerHit strip : htsList) {
List<Track> sharedTracks = stripsToTracks.get(strip);
if (sharedTracks.size() > 1) {
@@ -304,8 +292,9 @@
* @param tracks The list of <code>Track</code> objects.
*/
private void setTrackType(List<Track> tracks) {
- for (Track track : tracks)
+ for (Track track : tracks) {
((BaseTrack) track).setTrackType(BaseTrack.TrackType.Y_FIELD.ordinal());
+ }
}
@Override
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLRefitterDriver.java Wed Dec 9 14:48:02 2015
@@ -28,6 +28,7 @@
private String inputCollectionName = "MatchedTracks";
private String outputCollectionName = "GBLTracks";
+ private String trackRelationCollectionName = "MatchedToGBLTrackRelations";
private double bfield;
private final MultipleScattering _scattering = new MultipleScattering(new MaterialSupervisor());
@@ -68,16 +69,17 @@
RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
List<Track> refittedTracks = new ArrayList<Track>();
+ List<LCRelation> trackRelations = new ArrayList<LCRelation>();
+
List<GBLKinkData> kinkDataCollection = new ArrayList<GBLKinkData>();
-
List<LCRelation> kinkDataRelations = new ArrayList<LCRelation>();
Map<Track, Track> inputToRefitted = new HashMap<Track, Track>();
for (Track track : tracks) {
- Pair<Track, GBLKinkData> newTrack = MakeGblTracks.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), track.getTrackerHits(), 5, track.getType(), _scattering, bfield
- );
+ Pair<Track, GBLKinkData> newTrack = MakeGblTracks.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), track.getTrackerHits(), 5, track.getType(), _scattering, bfield);
// newTrack.getFirst().
refittedTracks.add(newTrack.getFirst());
+ trackRelations.add(new BaseLCRelation(track, newTrack.getFirst()));
inputToRefitted.put(track, newTrack.getFirst());
kinkDataCollection.add(newTrack.getSecond());
@@ -141,6 +143,7 @@
// Put the tracks back into the event and exit
int flag = 1 << LCIOConstants.TRBIT_HITS;
event.put(outputCollectionName, refittedTracks, Track.class, flag);
+ event.put(trackRelationCollectionName, trackRelations, LCRelation.class, 0);
event.put(GBLKinkData.DATA_COLLECTION, kinkDataCollection, GBLKinkData.class, 0);
event.put(GBLKinkData.DATA_RELATION_COLLECTION, kinkDataRelations, LCRelation.class, 0);
}
|