projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep
--- projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep/TrackConverter.java 2014-06-26 23:50:25 UTC (rev 3158)
+++ projects/lcsim/trunk/event-heprep/src/main/java/org/lcsim/util/heprep/TrackConverter.java 2014-06-27 00:13:54 UTC (rev 3159)
@@ -17,102 +17,106 @@
import org.lcsim.geometry.Detector;
import org.lcsim.util.swim.HelixSwimmer;
-
/**
- *
+ * Convert a Track to a Wired representation by swimming it in the B-field using
+ * a helix approximation.
* @author tonyj
+ * @author Jeremy McCormick <[log in to unmask]>
* @version $Id: TrackConverter.java,v 1.7 2012/10/18 19:32:49 jeremy Exp $
*/
-class TrackConverter implements HepRepCollectionConverter
-{
- private static final double[] zero = { 0,0,0 };
+class TrackConverter implements HepRepCollectionConverter {
- public boolean canHandle(Class k)
- {
- return Track.class.isAssignableFrom(k);
- }
- public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree)
- {
- try {
- event.getDetector();
- }
- catch (Exception x)
- {
- return;
- }
+ public boolean canHandle(Class k) {
+ return Track.class.isAssignableFrom(k);
+ }
- LCMetaData meta = event.getMetaData(collection);
- String name = meta.getName();
- int flags = meta.getFlags();
- Detector detector = event.getDetector();
+ public void convert(EventHeader event, List collection, HepRepFactory factory, HepRepTypeTree typeTree, HepRepInstanceTree instanceTree) {
+ try {
+ event.getDetector();
+ } catch (Exception x) {
+ return;
+ }
+
+ if (collection.size() == 0)
+ return;
+
+ List<Track> trackList = (List<Track>) collection;
+ Track firstTrack = trackList.get(0);
+
+ LCMetaData meta = event.getMetaData(collection);
+ String name = meta.getName();
+ Detector detector = event.getDetector();
- double trackingRMax = detector.getConstants().get("tracking_region_radius").getValue();
- double trackingZMax = detector.getConstants().get("tracking_region_zmax").getValue();
+ double trackingRMax = detector.getConstants().get("tracking_region_radius").getValue();
+ double trackingZMax = detector.getConstants().get("tracking_region_zmax").getValue();
- double[] field = detector.getFieldMap().getField(zero);
- HelixSwimmer helix = new HelixSwimmer(field[2]);
+ double[] origin = TrackUtil.getOrigin(firstTrack);
+ double[] field = detector.getFieldMap().getField(origin);
+
+ HelixSwimmer helix = TrackUtil.getHelixSwimmer(trackList, field);
+ //System.out.println("swimming with helix of type " + helix.getClass().getCanonicalName());
+
+ HepRepType typeX = factory.createHepRepType(typeTree, name);
+ typeX.addAttValue("layer", LCSimHepRepConverter.PARTICLES_LAYER);
+ typeX.addAttValue("drawAs", "Line");
- HepRepType typeX = factory.createHepRepType(typeTree, name);
- typeX.addAttValue("layer", LCSimHepRepConverter.PARTICLES_LAYER);
- typeX.addAttValue("drawAs","Line");
+ typeX.addAttDef("pT", "Transverse momentum", "physics", "");
+ typeX.addAttDef("dedX", "de/Dx", "physics", "GeV");
+ typeX.addAttDef("dedX error", "", "physics", "GeV");
+ typeX.addAttDef("Charge", "", "physics", "");
+ typeX.addAttDef("Chi2", "", "physics", "");
+ typeX.addAttDef("pX", "Momentum X", "physics", "GeV");
+ typeX.addAttDef("pY", "Momentum Y", "physics", "GeV");
+ typeX.addAttDef("pZ", "Momentum Z", "physics", "GeV");
+ typeX.addAttDef("NDF", "Number Degrees Freedom", "physics", "");
+ typeX.addAttDef("Reference Point X", "Reference Point X", "physics", "mm");
+ typeX.addAttDef("Reference Point Y", "Reference Point Y", "physics", "mm");
+ typeX.addAttDef("Reference Point Z", "Reference Point Z", "physics", "mm");
+ typeX.addAttDef("d0", "d0", "physics", "");
+ typeX.addAttDef("phi0", "phi0", "physics", "");
+ typeX.addAttDef("omega", "omega", "physics", "");
+ typeX.addAttDef("z0", "z0", "physics", "");
+ typeX.addAttDef("s", "s", "physics", "");
- typeX.addAttDef("pT","Transverse momentum", "physics", "");
- typeX.addAttDef("dedX","de/Dx", "physics", "GeV");
- typeX.addAttDef("dedX error","", "physics", "GeV");
- typeX.addAttDef("Charge","", "physics", "");
- typeX.addAttDef("Chi2","", "physics", "");
- typeX.addAttDef("pX","Momentum X", "physics", "GeV");
- typeX.addAttDef("pY","Momentum Y", "physics", "GeV");
- typeX.addAttDef("pZ","Momentum Z", "physics", "GeV");
- typeX.addAttDef("NDF","Number Degrees Freedom","physics","");
- typeX.addAttDef("Reference Point X","Reference Point X","physics","mm");
- typeX.addAttDef("Reference Point Y","Reference Point Y","physics","mm");
- typeX.addAttDef("Reference Point Z","Reference Point Z","physics","mm");
- typeX.addAttDef("d0","d0","physics","");
- typeX.addAttDef("phi0","phi0","physics","");
- typeX.addAttDef("omega","omega","physics","");
- typeX.addAttDef("z0","z0","physics","");
- typeX.addAttDef("s","s","physics","");
+ for (Track track : trackList) {
+
+ helix.setTrack(track);
+ double distanceToCylinder = helix.getDistanceToCylinder(trackingRMax, trackingZMax);
- for (Track t : (List<Track>) collection)
- {
- helix.setTrack(t);
- double distanceToCylinder = helix.getDistanceToCylinder(trackingRMax,trackingZMax);
+ TrackState ts = track.getTrackStates().get(0);
+ double[] referencePoint = ts.getReferencePoint();
+ double[] momentum = ts.getMomentum();
- TrackState ts = t.getTrackStates().get(0);
- double[] rp = ts.getReferencePoint();
- double[] p = ts.getMomentum();
-
HepRepInstance instanceX = factory.createHepRepInstance(instanceTree, typeX);
- double pt = field[2]*Constants.fieldConversion/Math.abs(ts.getParameter(2));
-
- instanceX.addAttValue("pT",pt);
- instanceX.addAttValue("dedX",t.getdEdx());
- instanceX.addAttValue("dedX error",t.getdEdxError());
- instanceX.addAttValue("Charge",t.getCharge());
- instanceX.addAttValue("Chi2",t.getChi2());
- instanceX.addAttValue("pX",p[0]);
- instanceX.addAttValue("pY",p[1]);
- instanceX.addAttValue("pZ",p[2]);
- instanceX.addAttValue("NDF",t.getNDF());
- instanceX.addAttValue("Reference Point X",rp[0]);
- instanceX.addAttValue("Reference Point Y",rp[1]);
- instanceX.addAttValue("Reference Point Z",rp[2]);
- instanceX.addAttValue("d0",ts.getParameter(0));
- instanceX.addAttValue("phi0",ts.getParameter(1));
- instanceX.addAttValue("omega",ts.getParameter(2));
- instanceX.addAttValue("z0",ts.getParameter(3));
- instanceX.addAttValue("s",ts.getParameter(4));
+ double pt = field[2] * Constants.fieldConversion / Math.abs(ts.getParameter(2));
+ instanceX.addAttValue("pT", pt);
+ instanceX.addAttValue("dedX", track.getdEdx());
+ instanceX.addAttValue("dedX error", track.getdEdxError());
+ instanceX.addAttValue("Charge", track.getCharge());
+ instanceX.addAttValue("Chi2", track.getChi2());
+ instanceX.addAttValue("pX", momentum[0]);
+ instanceX.addAttValue("pY", momentum[1]);
+ instanceX.addAttValue("pZ", momentum[2]);
+ instanceX.addAttValue("NDF", track.getNDF());
+ instanceX.addAttValue("Reference Point X", referencePoint[0]);
+ instanceX.addAttValue("Reference Point Y", referencePoint[1]);
+ instanceX.addAttValue("Reference Point Z", referencePoint[2]);
+ instanceX.addAttValue("d0", ts.getParameter(0));
+ instanceX.addAttValue("phi0", ts.getParameter(1));
+ instanceX.addAttValue("omega", ts.getParameter(2));
+ instanceX.addAttValue("z0", ts.getParameter(3));
+ instanceX.addAttValue("s", ts.getParameter(4));
+
double dAlpha = 10; // 1cm
- for (int k=0;k<200;k++)
- {
- double d = k*dAlpha;
- if (d>distanceToCylinder) break;
+ for (int k = 0; k < 200; k++) {
+ double d = k * dAlpha;
+ if (d > distanceToCylinder)
+ break;
Hep3Vector point = helix.getPointAtDistance(d);
- factory.createHepRepPoint(instanceX,point.x(),point.y(),point.z());
- }
- }
- }
+ factory.createHepRepPoint(instanceX, point.x(), point.y(), point.z());
+ }
+ }
+ }
}
\ No newline at end of file
projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim
--- projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim/HelixSwimmerYField.java 2014-06-26 23:50:25 UTC (rev 3158)
+++ projects/lcsim/trunk/tracking/src/main/java/org/lcsim/util/swim/HelixSwimmerYField.java 2014-06-27 00:13:54 UTC (rev 3159)
@@ -5,9 +5,6 @@
import static org.lcsim.event.LCIOParameters.ParameterName.omega;
import static org.lcsim.event.LCIOParameters.ParameterName.phi0;
import static org.lcsim.event.LCIOParameters.ParameterName.tanLambda;
-import hep.physics.matrix.BasicMatrix;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.Hep3Vector;
import org.lcsim.event.LCIOParameters;
import org.lcsim.event.Track;
@@ -15,6 +12,10 @@
import org.lcsim.spacegeom.CartesianVector;
import org.lcsim.spacegeom.SpacePoint;
+/**
+ * Swim Track assuming B-field in Y direction.
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
public class HelixSwimmerYField extends HelixSwimmer {
public HelixSwimmerYField(double B) {
@@ -24,47 +25,10 @@
public void setTrack(Track t) {
double pt = sqrt(t.getPX() * t.getPX() + t.getPY() * t.getPY());
LCIOParameters parameters = new LCIOParameters(t.getTrackParameters(), pt);
-
SpacePoint ref = new CartesianPoint(t.getReferencePoint());
SpacePoint origin = LCIOParameters.Parameters2Position(parameters, ref);
- _trajectory = new Helix(origin, 1 / parameters.get(omega), parameters
+ _trajectory = new HelixYField(origin, 1 / parameters.get(omega), parameters
.get(phi0), atan(parameters.get(tanLambda)));
- // Hep3Vectors have too many shortcomings
_momentum = new CartesianVector(LCIOParameters.Parameters2Momentum(parameters).v());
- }
-
- /*
- public void setTrack(Hep3Vector origp, Hep3Vector origr0, int iq) {
- Hep3Vector p = getTrackPoint(origp);
- Hep3Vector r0 = getTrackPoint(origr0);
- double pt = Math.sqrt(p.x() * p.x() + p.y() * p.y());
- double phi = Math.atan2(p.y(), p.x());
- double lambda = Math.atan2(p.z(), pt);
- if (iq != 0 && field != 0) {
- double radius = pt / (iq * field);
- _trajectory = new HelixYField(r0, radius, phi, lambda);
- } else {
- _trajectory = new Line(r0, phi, lambda);
- }
- _momentum = new CartesianVector(p.v());
- _charge = iq;
- System.out.println("momentum_x: " + _momentum.x());
- System.out.println("momentum_y: " + _momentum.y());
- System.out.println("momentum_z: " + _momentum.z());
- }
- */
-
- private Hep3Vector getTrackPoint(Hep3Vector pos) {
- BasicMatrix _detToTrk;
- _detToTrk = new BasicMatrix(3, 3);
- _detToTrk.setElement(0, 2, 1);
- _detToTrk.setElement(1, 0, 1);
- _detToTrk.setElement(2, 1, 1);
- double[] trk = { 0, 0, 0 };
- trk[0] = _detToTrk.e(0, 0) * pos.x() + _detToTrk.e(0, 1) * pos.y() + _detToTrk.e(0, 2) * pos.z();
- trk[1] = _detToTrk.e(1, 0) * pos.x() + _detToTrk.e(1, 1) * pos.y() + _detToTrk.e(1, 2) * pos.z();
- trk[2] = _detToTrk.e(2, 0) * pos.x() + _detToTrk.e(2, 1) * pos.y() + _detToTrk.e(2, 2) * pos.z();
- Hep3Vector retpt = new BasicHep3Vector(trk[0], trk[1], trk[2]);
- return retpt;
- }
+ }
}