Author: [log in to unmask]
Date: Wed Nov 25 12:43:16 2015
New Revision: 3988
Log:
add GBL kinks to event
Added:
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java
- copied, changed from r3956, java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackData.java
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/GblUtils.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java
java/trunk/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java
Copied: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java (from r3956, java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackData.java)
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackData.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLKinkData.java Wed Nov 25 12:43:16 2015
@@ -1,103 +1,42 @@
-package org.hps.recon.tracking;
+package org.hps.recon.tracking.gbl;
import org.lcsim.event.GenericObject;
/**
- * Generic object used to persist track data not available through a Track
- * object.
+ * Generic object used to persist GBL kink data.
*
* @author Omar Moreno <[log in to unmask]>
* @author Sho Uemura <[log in to unmask]>
*
*/
-public class TrackData implements GenericObject {
+public class GBLKinkData implements GenericObject {
- public static final int L1_ISOLATION_INDEX = 0;
- public static final int L2_ISOLATION_INDEX = 1;
- public static final int N_ISOLATIONS = 12;
- public static final int TRACK_TIME_INDEX = 0;
- public static final int TRACK_VOLUME_INDEX = 0;
- public static final String TRACK_DATA_COLLECTION = "TrackData";
- public static final String TRACK_DATA_RELATION_COLLECTION = "TrackDataRelations";
+ public static final String DATA_COLLECTION = "GBLKinkData";
+ public static final String DATA_RELATION_COLLECTION = "GBLKinkDataRelations";
- private final double[] doubles;
- private final float[] floats;
- private final int[] ints;
+ private final double[] phiKinks;
+ private final float[] lambdaKinks;
- /**
- * Default constructor
- */
- public TrackData() {
- doubles = new double[N_ISOLATIONS];
- floats = new float[1];
- ints = new int[1];
+ public GBLKinkData(float[] lambdaKinks, double[] phiKinks) {
+
+ this.lambdaKinks = lambdaKinks;
+ this.phiKinks = phiKinks;
}
- /**
- * Constructor
- *
- * @param trackVolume : SVT volume associated with the track
- * @param trackTime : The track time
- * @param isolations : an array of doubles containing isolations for every
- * sensor layer
- */
- public TrackData(int trackVolume, float trackTime, double[] isolations) {
-
- this.doubles = isolations;
- this.floats = new float[]{trackTime};
- this.ints = new int[]{trackVolume};
+ public double getPhiKink(int layer) {
+ return phiKinks[layer];
}
- /**
- * Get isolation value for the hit in the given sensor layer.
- *
- * @param layer The sensor layer of interest (0-11)
- * @return The isolation value: positive if the nearest hit is outwards from
- * the beam plane, negative if the nearest hit is inwards, offscale low if
- * the track has no hit in this layer, offscale high if there is no other
- * hit in this layer
- */
- public double getIsolation(int layer) {
- return doubles[layer];
+ public double getLambdaKink(int layer) {
+ return lambdaKinks[layer];
}
- /**
- * @return The track time
- */
- public float getTrackTime() {
- return floats[TRACK_TIME_INDEX];
- }
-
- /**
- * @return The SVT volume associated with the track
- */
- public int getTrackVolume() {
- return ints[TRACK_VOLUME_INDEX];
- }
-
- /**
- * @param object : The generic object containing the data.
- * @param layer The sensor layer of interest (0-11)
- * @return The isolation value for the specified layer
- */
- public static double getIsolation(GenericObject object, int layer) {
+ public static double getPhiKink(GenericObject object, int layer) {
return object.getDoubleVal(layer);
}
- /**
- * @param object : The generic object containing the data.
- * @return The track time
- */
- public static float getTrackTime(GenericObject object) {
- return object.getFloatVal(TRACK_TIME_INDEX);
- }
-
- /**
- * @param object : The generic object containing the data.
- * @return The SVT volume associated with the track
- */
- public static int getTrackVolume(GenericObject object) {
- return object.getIntVal(TRACK_VOLUME_INDEX);
+ public static double getLambdaKink(GenericObject object, int layer) {
+ return object.getFloatVal(layer);
}
/**
@@ -105,7 +44,7 @@
*/
@Override
public double getDoubleVal(int index) {
- return doubles[index];
+ return phiKinks[index];
}
/**
@@ -113,7 +52,7 @@
*/
@Override
public float getFloatVal(int index) {
- return floats[index];
+ return lambdaKinks[index];
}
/**
@@ -121,7 +60,7 @@
*/
@Override
public int getIntVal(int index) {
- return ints[index];
+ throw new ArrayIndexOutOfBoundsException();
}
/**
@@ -129,7 +68,7 @@
*/
@Override
public int getNDouble() {
- return doubles.length;
+ return phiKinks.length;
}
/**
@@ -137,7 +76,7 @@
*/
@Override
public int getNFloat() {
- return floats.length;
+ return lambdaKinks.length;
}
/**
@@ -145,7 +84,7 @@
*/
@Override
public int getNInt() {
- return ints.length;
+ return 0;
}
/**
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 Nov 25 12:43:16 2015
@@ -6,6 +6,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.commons.math3.util.Pair;
import org.hps.recon.tracking.MaterialSupervisor;
import org.hps.recon.tracking.MultipleScattering;
import org.hps.recon.tracking.TrackUtils;
@@ -68,9 +69,9 @@
Map<Track, Track> inputToRefitted = new HashMap<Track, Track>();
for (Track track : tracks) {
- Track newTrack = GblUtils.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), track.getTrackerHits(), 5, _scattering, bfield);
- refittedTracks.add(newTrack);
- inputToRefitted.put(track, newTrack);
+ Pair<Track, GBLKinkData> newTrack = GblUtils.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), track.getTrackerHits(), 5, _scattering, bfield);
+ refittedTracks.add(newTrack.getFirst());
+ inputToRefitted.put(track, newTrack.getFirst());
}
if (mergeTracks) {
@@ -105,8 +106,8 @@
}
}
- Track mergedTrack = GblUtils.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), allHth, 5, _scattering, bfield);
- mergedTracks.add(mergedTrack);
+ Pair<Track, GBLKinkData> mergedTrack = GblUtils.refitTrack(TrackUtils.getHTF(track), TrackUtils.getStripHits(track, hitToStrips, hitToRotated), allHth, 5, _scattering, bfield);
+ mergedTracks.add(mergedTrack.getFirst());
// System.out.format("%f %f %f\n", fit.get_chi2(), inputToRefitted.get(track).getChi2(), inputToRefitted.get(otherTrack).getChi2());
// mergedTrackToTrackList.put(mergedTrack, new ArrayList<Track>());
}
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblUtils.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblUtils.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblUtils.java Wed Nov 25 12:43:16 2015
@@ -10,6 +10,7 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
+import org.apache.commons.math3.util.Pair;
import org.hps.recon.tracking.CoordinateTransformations;
import org.hps.recon.tracking.MaterialSupervisor;
import org.hps.recon.tracking.MultipleScattering;
@@ -144,16 +145,16 @@
* @param bfield B-field
* @return The refitted track.
*/
- public static Track refitTrack(HelicalTrackFit helix, Collection<TrackerHit> stripHits, Collection<TrackerHit> hth, int nIterations, MultipleScattering scattering, double bfield) {
+ public static Pair<Track, GBLKinkData> refitTrack(HelicalTrackFit helix, Collection<TrackerHit> stripHits, Collection<TrackerHit> hth, int nIterations, MultipleScattering scattering, double bfield) {
List<TrackerHit> allHthList = sortHits(hth);
List<TrackerHit> sortedStripHits = sortHits(stripHits);
FittedGblTrajectory fit = GblUtils.doGBLFit(helix, sortedStripHits, scattering, bfield, 0);
for (int i = 0; i < nIterations; i++) {
- Track newTrack = MakeGblTracks.makeCorrectedTrack(fit, helix, allHthList, 0, bfield);
- helix = TrackUtils.getHTF(newTrack);
+ Pair<Track, GBLKinkData> newTrack = MakeGblTracks.makeCorrectedTrack(fit, helix, allHthList, 0, bfield);
+ helix = TrackUtils.getHTF(newTrack.getFirst());
fit = GblUtils.doGBLFit(helix, sortedStripHits, scattering, bfield, 0);
}
- Track mergedTrack = MakeGblTracks.makeCorrectedTrack(fit, helix, allHthList, 0, bfield);
+ Pair<Track, GBLKinkData> mergedTrack = MakeGblTracks.makeCorrectedTrack(fit, helix, allHthList, 0, bfield);
return mergedTrack;
}
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java Wed Nov 25 12:43:16 2015
@@ -1,27 +1,27 @@
package org.hps.recon.tracking.gbl;
-import static org.hps.recon.tracking.gbl.GBLOutput.getPerToClPrj;
import hep.physics.matrix.SymmetricMatrix;
import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.Hep3Matrix;
import hep.physics.vec.Hep3Vector;
import hep.physics.vec.VecOp;
-
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
-
import org.apache.commons.math3.util.Pair;
import org.hps.recon.tracking.TrackType;
+import static org.hps.recon.tracking.gbl.GBLOutput.getPerToClPrj;
import org.hps.recon.tracking.gbl.matrix.Matrix;
import org.hps.recon.tracking.gbl.matrix.SymMatrix;
import org.hps.recon.tracking.gbl.matrix.Vector;
import org.lcsim.constants.Constants;
import org.lcsim.event.EventHeader;
+import org.lcsim.event.LCRelation;
import org.lcsim.event.Track;
import org.lcsim.event.TrackState;
import org.lcsim.event.TrackerHit;
+import org.lcsim.event.base.BaseLCRelation;
import org.lcsim.event.base.BaseTrack;
import org.lcsim.event.base.BaseTrackState;
import org.lcsim.fit.helicaltrack.HelicalTrackFit;
@@ -67,6 +67,10 @@
List<Track> tracks = new ArrayList<Track>();
+ List<GBLKinkData> kinkDataCollection = new ArrayList<GBLKinkData>();
+
+ List<LCRelation> kinkDataRelations = new ArrayList<LCRelation>();
+
LOGGER.info("adding " + gblTrajectories.size() + " of fitted GBL tracks to the event");
for (FittedGblTrajectory fittedTraj : gblTrajectories) {
@@ -75,10 +79,12 @@
SeedCandidate trackseed = seedTrack.getSeedCandidate();
// Create a new Track
- Track trk = makeCorrectedTrack(fittedTraj, trackseed.getHelix(), seedTrack.getTrackerHits(), seedTrack.getType(), bfield);
+ Pair<Track, GBLKinkData> trk = makeCorrectedTrack(fittedTraj, trackseed.getHelix(), seedTrack.getTrackerHits(), seedTrack.getType(), bfield);
// Add the track to the list of tracks
- tracks.add(trk);
+ tracks.add(trk.getFirst());
+ kinkDataCollection.add(trk.getSecond());
+ kinkDataRelations.add(new BaseLCRelation(trk.getSecond(), trk.getFirst()));
}
LOGGER.info("adding " + Integer.toString(tracks.size()) + " Gbl tracks to event with " + event.get(Track.class, "MatchedTracks").size() + " matched tracks");
@@ -86,9 +92,11 @@
// Put the tracks back into the event and exit
int flag = 1 << LCIOConstants.TRBIT_HITS;
event.put(_TrkCollectionName, tracks, Track.class, flag);
- }
-
- public static Track makeCorrectedTrack(FittedGblTrajectory fittedTraj, HelicalTrackFit helix, List<TrackerHit> trackHits, int trackType, double bfield) {
+ event.put(GBLKinkData.DATA_COLLECTION, kinkDataCollection, GBLKinkData.class, 0);
+ event.put(GBLKinkData.DATA_RELATION_COLLECTION, kinkDataRelations, LCRelation.class, 0);
+ }
+
+ public static Pair<Track, GBLKinkData> makeCorrectedTrack(FittedGblTrajectory fittedTraj, HelicalTrackFit helix, List<TrackerHit> trackHits, int trackType, double bfield) {
// Initialize the reference point to the origin
double[] ref = new double[]{0., 0., 0.};
@@ -112,6 +120,8 @@
Pair<double[], SymmetricMatrix> correctedHelixParamsLast = getGblCorrectedHelixParameters(helix, fittedTraj.get_traj(), bfield, FittedGblTrajectory.GBLPOINT.LAST);
TrackState stateLast = new BaseTrackState(correctedHelixParamsLast.getFirst(), ref, correctedHelixParamsLast.getSecond().asPackedArray(true), TrackState.AtLastHit, bfield);
trk.getTrackStates().add(stateLast);
+
+ GBLKinkData kinkData = getKinks(fittedTraj.get_traj());
// Set other info needed
trk.setChisq(fittedTraj.get_chi2());
@@ -128,7 +138,7 @@
LOGGER.info(String.format("param %d: %.10f -> %.10f helix-gbl= %f", i, helix.parameters()[i], trk.getTrackParameter(i), helix.parameters()[i] - trk.getTrackParameter(i)));
}
}
- return trk;
+ return new Pair<Track, GBLKinkData>(trk, kinkData);
}
/**
@@ -285,6 +295,30 @@
return new Pair<double[], SymmetricMatrix>(parameters_gbl, cov);
}
+ public static GBLKinkData getKinks(GblTrajectory traj) {
+
+ // get corrections from GBL fit
+ Vector locPar = new Vector(5);
+ SymMatrix locCov = new SymMatrix(5);
+ float[] lambdaKinks = new float[traj.getNumPoints() - 1];
+ double[] phiKinks = new double[traj.getNumPoints() - 1];
+
+ double oldPhi = 0, oldLambda = 0;
+ for (int i = 0; i < traj.getNumPoints(); i++) {
+ traj.getResults(i + 1, locPar, locCov); // vertex point
+ double newPhi = locPar.get(FittedGblTrajectory.GBLPARIDX.XTPRIME.getValue());
+ double newLambda = locPar.get(FittedGblTrajectory.GBLPARIDX.YTPRIME.getValue());
+ if (i > 0) {
+ lambdaKinks[i - 1] = (float) (newLambda - oldLambda);
+ phiKinks[i - 1] = newPhi - oldPhi;
+ }
+ oldPhi = newPhi;
+ oldLambda = newLambda;
+ }
+
+ return new GBLKinkData(lambdaKinks, phiKinks);
+ }
+
public void setTrkCollectionName(String name) {
_TrkCollectionName = name;
}
Modified: java/trunk/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java Wed Nov 25 12:43:16 2015
@@ -124,6 +124,9 @@
continue;
}
tiTimeOffset = RunManager.getRunManager().getTriggerConfig().getTiTimeOffset();
+ if (tiTimeOffset == 0) {
+ continue;
+ }
}
try {
@@ -188,9 +191,15 @@
}
if (useTI) {
+ if (firstTI == 0 || lastTI == 0) {
+ continue;
+ }
startDate = new Date((long) ((firstTI + tiTimeOffset) / 1e6));
endDate = new Date((long) ((lastTI + tiTimeOffset) / 1e6));
} else {
+ if (firstTime == 0 || lastTime == 0) {
+ continue;
+ }
startDate = new Date(firstTime * 1000);
endDate = new Date(lastTime * 1000);
}
@@ -285,7 +294,10 @@
}
if (date.after(endDate)) {//this is the last interval overlapping the file's time range; backtrack so this line will be read again for the next file
date = lastDate;
- br.reset();
+ try {
+ br.reset();
+ } catch (IOException e) {
+ }
break;
}
br.mark(1000);
|