Author: [log in to unmask]
Date: Mon Jan 4 17:43:47 2016
New Revision: 4080
Log:
Mostly a commit as a consequence of the restructuring and refactoring of old classes.
Modified:
java/trunk/users/src/main/java/org/hps/users/mgraham/ExamplePlotter.java
java/trunk/users/src/main/java/org/hps/users/mgraham/TrackExtrapolationAnalysis.java
java/trunk/users/src/main/java/org/hps/users/mgraham/TwoTrackAnalysis.java
java/trunk/users/src/main/java/org/hps/users/phansson/DataTrackerFakeHitDriver.java
java/trunk/users/src/main/java/org/hps/users/phansson/ECalExtrapolationDriver.java
java/trunk/users/src/main/java/org/hps/users/phansson/ParticleHelixProducer.java
java/trunk/users/src/main/java/org/hps/users/phansson/ROOTFlatTupleDriver.java
java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java
Modified: java/trunk/users/src/main/java/org/hps/users/mgraham/ExamplePlotter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/mgraham/ExamplePlotter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/mgraham/ExamplePlotter.java Mon Jan 4 17:43:47 2016
@@ -4,6 +4,7 @@
import hep.aida.IHistogram1D;
import hep.aida.IPlotter;
import hep.aida.IPlotterStyle;
+import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.Hep3Vector;
import java.io.IOException;
@@ -12,9 +13,10 @@
import java.util.logging.Logger;
import org.hps.recon.tracking.BeamlineConstants;
-import org.hps.recon.tracking.HPSTrack;
+import org.hps.recon.tracking.HpsHelicalTrackFit;
import org.hps.recon.tracking.HelixConverter;
import org.hps.recon.tracking.StraightLineTrack;
+import org.hps.recon.tracking.TrackUtils;
import org.lcsim.event.EventHeader;
import org.lcsim.event.Track;
import org.lcsim.fit.helicaltrack.HelicalTrackFit;
@@ -76,15 +78,9 @@
aida.histogram1D("Track Momentum (Pz)").fill(trk.getTrackStates().get(0).getMomentum()[0]);
aida.histogram1D("Track Chi2").fill(trk.getChi2());
- SeedTrack stEle = (SeedTrack) trk;
- SeedCandidate seedEle = stEle.getSeedCandidate();
- HelicalTrackFit ht = seedEle.getHelix();
- HelixConverter converter = new HelixConverter(0);
- StraightLineTrack slt = converter.Convert(ht);
- HPSTrack hpstrack = new HPSTrack(ht);
- Hep3Vector[] trkatconver = hpstrack.getPositionAtZMap(100, BeamlineConstants.HARP_POSITION_TESTRUN, 1);
- aida.histogram1D("X (mm) @ Converter").fill(trkatconver[0].x()); // y tracker frame?
- aida.histogram1D("Y (mm) @ Converter").fill(trkatconver[0].y()); // z tracker frame?
+ Hep3Vector trkatconver = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk, 100.0, BeamlineConstants.HARP_POSITION_TESTRUN, 5.0, event.getDetector().getFieldMap()).getReferencePoint());
+ aida.histogram1D("X (mm) @ Converter").fill(trkatconver.x()); // y tracker frame?
+ aida.histogram1D("Y (mm) @ Converter").fill(trkatconver.y()); // z tracker frame?
}
}
Modified: java/trunk/users/src/main/java/org/hps/users/mgraham/TrackExtrapolationAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/mgraham/TrackExtrapolationAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/mgraham/TrackExtrapolationAnalysis.java Mon Jan 4 17:43:47 2016
@@ -5,13 +5,14 @@
import hep.aida.IHistogram2D;
import hep.aida.IPlotter;
import hep.aida.IPlotterStyle;
+import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.Hep3Vector;
import java.util.List;
import java.util.Map;
import org.hps.recon.tracking.BeamlineConstants;
-import org.hps.recon.tracking.HPSTrack;
+import org.hps.recon.tracking.HpsHelicalTrackFit;
import org.hps.recon.tracking.HelixConverter;
import org.hps.recon.tracking.StraightLineTrack;
import org.hps.recon.tracking.TrackUtils;
@@ -99,10 +100,9 @@
charge = 0;//make plot look pretty
// System.out.println("Charge = " + charge + "; isTop = " + isTop);
- HPSTrack hpstrk=null;
- hpstrk = new HPSTrack(ht);
-// Hep3Vector posAtConv = hpstrk.getPositionAtZ(zAtConverter, -101, -100, 0.1);
- Hep3Vector posAtConv = hpstrk.getPositionAtZMap(100,BeamlineConstants.HARP_POSITION_TESTRUN , 5.0)[0];
+ HpsHelicalTrackFit hpstrk=null;
+ hpstrk = new HpsHelicalTrackFit(ht);
+ Hep3Vector posAtConv = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk, 100, BeamlineConstants.HARP_POSITION_TESTRUN, 5.0, event.getDetector().getFieldMap()).getReferencePoint());
double useThisx=posAtConv.x();
double useThisy=posAtConv.y();
@@ -123,7 +123,7 @@
aida.histogram1D("Negative Y (mm) @ Converter").fill(useThisy);
}
// Hep3Vector posAtConvShort = hpstrk.getPositionAtZ(zAtConverter, -0.1, 0, 0.01);
- Hep3Vector posAtConvShort = hpstrk.getPositionAtZMap(0,BeamlineConstants.HARP_POSITION_TESTRUN, 5.0)[0];
+ Hep3Vector posAtConvShort = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk, 0, BeamlineConstants.HARP_POSITION_TESTRUN, 5.0, event.getDetector().getFieldMap()).getReferencePoint());
aida.histogram2D("Extrapolated X: short vs long fringe").fill(posAtConvShort.x(), posAtConv.x());
aida.histogram2D("Extrapolated Y: short vs long fringe").fill(posAtConvShort.y(), posAtConv.y());
@@ -144,7 +144,8 @@
// Hep3Vector posAtEcalHPS = hpstrk.getPositionAtZMap(750,zCluster, 5.0);
double zCluster=clust.getPosition()[2];
// double zCluster=1450.0;
- Hep3Vector posAtEcalHPS = hpstrk.getPositionAtZMap(750,zCluster, 5.0)[0];
+ Hep3Vector posAtEcalHPS = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk, 750, zCluster, 5.0, event.getDetector().getFieldMap()).getReferencePoint());
+
Hep3Vector posAtEcalExtend= TrackUtils.extrapolateTrack(trk,zCluster);
aida.histogram2D("ECal Extrapolation X : HPS vs Extend").fill( posAtEcalExtend.y(),posAtEcalHPS.x()-posAtEcalExtend.y());
aida.histogram2D("ECal Extrapolation Y : HPS vs Extend").fill( posAtEcalExtend.z(),posAtEcalHPS.y()-posAtEcalExtend.z());
Modified: java/trunk/users/src/main/java/org/hps/users/mgraham/TwoTrackAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/mgraham/TwoTrackAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/mgraham/TwoTrackAnalysis.java Mon Jan 4 17:43:47 2016
@@ -17,10 +17,12 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.apache.commons.lang3.NotImplementedException;
import org.hps.recon.tracking.BeamlineConstants;
-import org.hps.recon.tracking.HPSTrack;
+import org.hps.recon.tracking.HpsHelicalTrackFit;
import org.hps.recon.tracking.HelixConverter;
import org.hps.recon.tracking.StraightLineTrack;
+import org.hps.recon.tracking.TrackUtils;
import org.lcsim.event.EventHeader;
import org.lcsim.event.Track;
import org.lcsim.event.TrackerHit;
@@ -273,10 +275,11 @@
HelicalTrackFit ht = seedEle.getHelix();
HelixConverter converter = new HelixConverter(0);
StraightLineTrack slt = converter.Convert(ht);
- HPSTrack hpstrack = new HPSTrack(ht);
- Hep3Vector[] trkatconver = hpstrack.getPositionAtZMap(100, BeamlineConstants.HARP_POSITION_TESTRUN, 1);
- aida.histogram1D("X (mm) @ Converter using Map").fill(trkatconver[0].x()); // y tracker frame?
- aida.histogram1D("Y (mm) @ Converter using Map").fill(trkatconver[0].y()); // z tracker frame?
+ HpsHelicalTrackFit hpstrack = new HpsHelicalTrackFit(ht);
+ Hep3Vector trkatconver = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk, 100, BeamlineConstants.HARP_POSITION_TESTRUN, 1, event.getDetector().getFieldMap()).getReferencePoint());
+
+ aida.histogram1D("X (mm) @ Converter using Map").fill(trkatconver.x()); // y tracker frame?
+ aida.histogram1D("Y (mm) @ Converter using Map").fill(trkatconver.y()); // z tracker frame?
if (slt != null) {
aida.histogram1D("X (mm) @ Converter using SLT").fill(slt.getYZAtX(BeamlineConstants.HARP_POSITION_TESTRUN)[0]); // y tracker frame?
aida.histogram1D("Y (mm) @ Converter using SLT").fill(slt.getYZAtX(BeamlineConstants.HARP_POSITION_TESTRUN)[1]); // z tracker frame?
@@ -320,9 +323,9 @@
// HPSTrack hpstrack2 = new HPSTrack(ht2);
// Hep3Vector[] trkatconver2 = hpstrack2.getPositionAtZMap(100, BeamlineConstants.HARP_POSITION, 1);
- HPSTrack hpstrack1 = new HPSTrack(ht1);
+ HpsHelicalTrackFit hpstrack1 = new HpsHelicalTrackFit(ht1);
Hep3Vector[] trkatconver1 = {new BasicHep3Vector(), new BasicHep3Vector(0, 0, 0)};
- HPSTrack hpstrack2 = new HPSTrack(ht2);
+ HpsHelicalTrackFit hpstrack2 = new HpsHelicalTrackFit(ht2);
Hep3Vector[] trkatconver2 = {new BasicHep3Vector(), new BasicHep3Vector(0, 0, 0)};;
if (isMC) {
double[] t1 = slt1.getYZAtX(BeamlineConstants.HARP_POSITION_TESTRUN);
@@ -330,8 +333,9 @@
trkatconver1[0] = new BasicHep3Vector(t1[0], t1[1], BeamlineConstants.HARP_POSITION_TESTRUN);
trkatconver2[0] = new BasicHep3Vector(t2[0], t2[1], BeamlineConstants.HARP_POSITION_TESTRUN);
} else {
- trkatconver1 = hpstrack1.getPositionAtZMap(100, BeamlineConstants.HARP_POSITION_TESTRUN, 1);
- trkatconver2 = hpstrack2.getPositionAtZMap(100, BeamlineConstants.HARP_POSITION_TESTRUN, 1);
+ throw new NotImplementedException("Need to implement using TrackUtils to extrapolate tracks!");
+ //trkatconver1 = hpstrack1.getPositionAtZMap(100, BeamlineConstants.HARP_POSITION_TESTRUN, 1);
+ //trkatconver2 = hpstrack2.getPositionAtZMap(100, BeamlineConstants.HARP_POSITION_TESTRUN, 1);
}
List<TrackerHit> hitsOnTrack1 = trk1.getTrackerHits();
int layer1;
@@ -508,9 +512,10 @@
posvec[1] = slt1.getYZAtX(z)[1];
posvec[2] = z;
} else {
- Hep3Vector[] trk1atz = hpstrack1.getPositionAtZMap(100, z, 1);
- posvec[0] = trk1atz[0].x();
- posvec[1] = trk1atz[0].y();
+ Hep3Vector trk1atz = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk1, 100, z, 1, event.getDetector().getFieldMap()).getReferencePoint());
+
+ posvec[0] = trk1atz.x();
+ posvec[1] = trk1atz.y();
posvec[2] = z;
}
Trk1.add(posvec);
@@ -592,9 +597,10 @@
posvec2[1] = slt2.getYZAtX(z)[1];
posvec2[2] = z;
} else {
- Hep3Vector[] trk2atz = hpstrack2.getPositionAtZMap(100, z, 1);
- posvec2[0] = trk2atz[0].x();
- posvec2[1] = trk2atz[0].y();
+ Hep3Vector trk2atz = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk2, 100, z, 1, event.getDetector().getFieldMap()).getReferencePoint());
+
+ posvec2[0] = trk2atz.x();
+ posvec2[1] = trk2atz.y();
posvec2[2] = z;
}
Trk2.add(posvec2);
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/DataTrackerFakeHitDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/DataTrackerFakeHitDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/DataTrackerFakeHitDriver.java Mon Jan 4 17:43:47 2016
@@ -17,7 +17,7 @@
import java.util.Set;
//===> import org.hps.conditions.deprecated.SvtUtils;
-import org.hps.recon.tracking.HPSTrack;
+import org.hps.recon.tracking.HpsHelicalTrackFit;
import org.hps.recon.tracking.TrackUtils;
import org.hps.recon.tracking.TrackerHitUtils;
import org.lcsim.detector.IDetectorElement;
@@ -194,12 +194,12 @@
// Obtain the tracks from the event
- if (!event.hasCollection(HPSTrack.class, trackCollectionName)) {
+ if (!event.hasCollection(HpsHelicalTrackFit.class, trackCollectionName)) {
this.printDebug("No HPSTracks were found, skipping event");
simHits = null;
return;
}
- List<HPSTrack> tracks = event.get(HPSTrack.class, trackCollectionName);
+ List<HpsHelicalTrackFit> tracks = event.get(HpsHelicalTrackFit.class, trackCollectionName);
if (debug) {
System.out.println(this.getClass().getSimpleName() + ": found " + tracks.size() + " tracks (" + this.trackCollectionName + ")");
@@ -223,13 +223,13 @@
System.out.println(this.getClass().getSimpleName() + ": Add hits for " + tracks.size() + " tracks (" + this.trackCollectionName + ")");
}
- for (HPSTrack helix : tracks) {
+ for (HpsHelicalTrackFit helix : tracks) {
if (debug) {
System.out.println(this.getClass().getSimpleName() + ": trying to add hits for this track");
}
// Get the MC Particle associated with this track
- MCParticle mcParticle = helix.getMCParticle();
+ MCParticle mcParticle = helix.getMcParticle();
if (debug) {
System.out.println(this.getClass().getSimpleName() + helix.toString());
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/ECalExtrapolationDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/ECalExtrapolationDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/ECalExtrapolationDriver.java Mon Jan 4 17:43:47 2016
@@ -11,62 +11,122 @@
import hep.physics.vec.Hep3Vector;
import java.util.List;
-
-import javax.swing.text.DefaultEditorKit.PasteAction;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.hps.recon.tracking.TrackType;
import org.hps.recon.tracking.TrackUtils;
-import org.lcsim.detector.tracker.silicon.HpsSiSensor;
import org.lcsim.event.EventHeader;
-import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.LCRelation;
import org.lcsim.event.Track;
import org.lcsim.event.TrackState;
import org.lcsim.event.TrackerHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackCross;
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
import org.lcsim.geometry.Detector;
-import org.lcsim.geometry.compact.converter.HPSTrackerBuilder;
import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;
/**
+ *
+ * Compare residuals using updated track parameters from GBL.
+ *
* @author Per Hansson Adrian <[log in to unmask]>
*
*/
public class ECalExtrapolationDriver extends Driver {
-
+
+ private static Logger logger = Logger.getLogger(ECalExtrapolationDriver.class.getName());
+
+ private double bfield;
+
private AIDA aida = AIDA.defaultInstance();
+ IHistogram1D res_Seed_u;
+ IHistogram1D res_IP_u;
+ IHistogram1D res_Last_u;
+
+ IHistogram1D res_Seed_Y;
+ IHistogram1D res_Seed_X;
IHistogram1D res_IP_Y;
IHistogram1D res_IP_X;
IHistogram1D res_Last_Y;
IHistogram1D res_Last_X;
+ IHistogram1D res_IP_Last_diff_Y;
+ IHistogram1D res_IP_Last_diff_X;
+ IHistogram1D res_Seed_Last_diff_Y;
+ IHistogram1D res_Seed_Last_diff_X;
+ IHistogram1D res_IP_Last_diff_u;
+ IHistogram1D res_Seed_Last_diff_u;
/**
*
*/
public ECalExtrapolationDriver() {
- // TODO Auto-generated constructor stub
+ logger.setLevel(Level.INFO);
}
@Override
protected void detectorChanged(Detector arg0) {
+
+ Hep3Vector bfieldVec = TrackUtils.getBField(arg0);
+ bfield = bfieldVec.y();
+ logger.info("bfieldVec " + bfieldVec.toString());
+
aida.tree().cd("/");
IAnalysisFactory fac = aida.analysisFactory();
IPlotter plotter;
- plotter = fac.createPlotterFactory().create("Residual");
+ plotter = fac.createPlotterFactory().create("Residual stereo hit");
IPlotterStyle style = plotter.style();
style.dataStyle().fillStyle().setColor("yellow");
style.dataStyle().errorBarStyle().setVisible(false);
- plotter.createRegions(2, 2);
+ plotter.createRegions(2, 3);
+ res_Seed_Y = aida.histogram1D("res_Seed_Y", 50, -5, 5);
+ res_Seed_X = aida.histogram1D("res_Seed_X", 50, -5, 5);
res_IP_Y = aida.histogram1D("res_IP_Y", 50, -5, 5);
res_IP_X = aida.histogram1D("res_IP_X", 50, -5, 5);
res_Last_Y = aida.histogram1D("res_Last_Y", 50, -5, 5);
res_Last_X = aida.histogram1D("res_Last_X", 50, -5, 5);
plotter.region(0).plot(res_IP_Y);
- plotter.region(1).plot(res_IP_X);
- plotter.region(2).plot(res_Last_Y);
- plotter.region(3).plot(res_Last_X);
+ plotter.region(3).plot(res_IP_X);
+ plotter.region(1).plot(res_Last_Y);
+ plotter.region(4).plot(res_Last_X);
+ plotter.region(2).plot(res_Seed_Y);
+ plotter.region(5).plot(res_Seed_X);
plotter.show();
+
+
+ IPlotter plotter1;
+ plotter1 = fac.createPlotterFactory().create("Residual local");
+ plotter1.setStyle(style);
+ plotter1.createRegions(1, 3);
+ res_Seed_u = aida.histogram1D("res_Seed_u", 50, -5, 5);
+ res_IP_u = aida.histogram1D("res_IP_u", 50, -5, 5);
+ res_Last_u = aida.histogram1D("res_Last_u", 50, -5, 5);
+ plotter1.region(0).plot(res_IP_u);
+ plotter1.region(1).plot(res_Last_u);
+ plotter1.region(2).plot(res_Seed_u);
+ plotter1.show();
+
+ IPlotter plotter2;
+ plotter2 = fac.createPlotterFactory().create("Residual diffs");
+ plotter2.setStyle(style);
+ plotter2.createRegions(3, 2);
+ res_IP_Last_diff_Y = aida.histogram1D("res_IP_Last_diff_Y", 50, -5, 5);
+ res_IP_Last_diff_X = aida.histogram1D("res_IP_Last_diff_X", 50, -5, 5);
+ res_Seed_Last_diff_Y = aida.histogram1D("res_Seed_Last_diff_Y", 50, -5, 5);
+ res_Seed_Last_diff_X = aida.histogram1D("res_Seed_Last_diff_X", 50, -5, 5);
+ res_IP_Last_diff_u = aida.histogram1D("res_IP_Last_diff_u", 50, -5, 5);
+ res_Seed_Last_diff_u = aida.histogram1D("res_Seed_Last_diff_u", 50, -5, 5);
+ plotter2.region(0).plot(res_Seed_Last_diff_Y);
+ plotter2.region(2).plot(res_Seed_Last_diff_X);
+ plotter2.region(1).plot(res_IP_Last_diff_Y);
+ plotter2.region(3).plot(res_IP_Last_diff_X);
+ plotter2.region(4).plot(res_Seed_Last_diff_u);
+ plotter2.region(5).plot(res_IP_Last_diff_u);
+ plotter2.show();
}
protected void process(EventHeader event) {
@@ -76,14 +136,25 @@
List<List<Track>> trackCollections = event.get(Track.class);
+
+ logger.fine("Found " + trackCollections.size() + " track collections");
+
+ // loop over all track collections
for(List<Track> tracks : trackCollections) {
-
+
+ logger.fine("Found " + tracks.size() + " tracks in this collection");
+
+
+ // loop over all tracks
for (Track track : tracks) {
+ logger.fine("Process track with " + track.getTrackerHits().size() + " hits and of type " + track.getType() + " GBL ? " + TrackType.isGBL(track.getType()));
+
+ // require six stereo hits on the track
if(track.getTrackerHits().size() != 6)
continue;
-
+ // select GBL tracks
if(TrackType.isGBL(track.getType())) {
TrackState stateIP = null;
@@ -93,48 +164,48 @@
if (state.getLocation() == TrackState.AtIP) stateIP = state;
}
-
- // find last 3D hit
- Hep3Vector lastStereoHitPosition = null;
- for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
- Hep3Vector stereoHitPosition = ((HelicalTrackHit) rotatedStereoHit).getCorrectedPosition();
- if(lastStereoHitPosition != null) {
- if(lastStereoHitPosition.x() < stereoHitPosition.x() )
- lastStereoHitPosition = stereoHitPosition;
- } else {
- lastStereoHitPosition = stereoHitPosition;
- }
- }
-
- /*
- for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
- Hep3Vector stereoHitPosition = ((HelicalTrackHit) rotatedStereoHit).getCorrectedPosition();
- RawTrackerHit rawhit = (RawTrackerHit) rotatedStereoHit.getRawHits().get(0);
- HpsSiSensor sensor = (HpsSiSensor) rawhit.getDetectorElement();
- int layer = HPSTrackerBuilder.getLayerFromVolumeName(sensor.getName());
- if(layer == 4) {
- if(HPSTrackerBuilder.isTopFromName(sensor.getName())) {
- if(HPSTrackerBuilder.isAxialFromName(sensor.getName())) {
- lastStereoHitPosition = stereoHitPosition;
- System.out.printf("\"Last hit\": %s %s: layer %d %s\n", stereoHitPosition.toString(), sensor.getName(), sensor.getLayerNumber(), sensor.isAxial()?"axial":"stereo");
-
- break;
- }
- } else {
- if(!HPSTrackerBuilder.isAxialFromName(sensor.getName())) {
- lastStereoHitPosition = stereoHitPosition;
- System.out.printf("\"Last hit\": %s %s: layer %d %s\n", stereoHitPosition.toString(), sensor.getName(), sensor.getLayerNumber(), sensor.isAxial()?"axial":"stereo");
- break;
- }
+ // find seed track
+ Track seedTrack = null;
+ List<LCRelation> seedToGblRelation = event.get(LCRelation.class, "MatchedToGBLTrackRelations");
+
+ if(seedToGblRelation == null)
+ logger.warning("no LCRelation found!?");
+ else {
+ for(LCRelation relation : seedToGblRelation) {
+ if(relation.getTo().equals(track)) {
+ seedTrack = (Track)relation.getFrom();
+ break;
}
}
}
- */
-
- if( lastStereoHitPosition == null)
+
+ // find last 3D hit
+ HelicalTrackHit lastHelicalTrackHit = null;
+ //HelicalTrackStrip
+ for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
+ HelicalTrackHit hit = (HelicalTrackHit) rotatedStereoHit;
+ if(lastHelicalTrackHit != null) {
+ if(lastHelicalTrackHit.getCorrectedPosition().x() < hit.getCorrectedPosition().x() ) {
+ lastHelicalTrackHit = hit;
+ }
+ } else {
+ lastHelicalTrackHit = hit;
+ }
+ }
+
+ if( lastHelicalTrackHit == null)
throw new RuntimeException("No last hit found!");
-
- //System.out.printf("\"Last hit position found\": %s \n",lastStereoHitPosition.toString());
+
+ Hep3Vector lastStereoHitPosition = lastHelicalTrackHit.getCorrectedPosition();
+
+
+ // find the last strip cluster
+ // OK, I could be more rigorous but this should work
+ List<HelicalTrackStrip> strips = ((HelicalTrackCross) lastHelicalTrackHit).getStrips();
+ HelicalTrackStrip lastStrip = strips.get(0).origin().x() > strips.get(1).origin().x() ? strips.get(0) : strips.get(1);
+
+ Map<String,Double> localResidualsIP = TrackUtils.calculateLocalTrackHitResiduals(TrackUtils.getHTF(stateIP), lastStrip, bfield);
+ Map<String,Double> localResidualsLast = TrackUtils.calculateLocalTrackHitResiduals(TrackUtils.getHTF(stateLast), lastStrip, bfield);
Hep3Vector trackPositionIP = TrackUtils.extrapolateTrack(stateIP, lastStereoHitPosition.x());
Hep3Vector trackPositionLast = TrackUtils.extrapolateTrack(stateLast, lastStereoHitPosition.x());
@@ -145,15 +216,42 @@
double xResidualLast = trackPositionLast.x() - lastStereoHitPosition.y();
double yResidualLast = trackPositionLast.y() - lastStereoHitPosition.z();
- //System.out.printf("Found last stereo hit at %s\n",lastStereoHitPosition.toString());
- //System.out.printf("trackPositionIP %s\n",trackPositionIP.toString());
- //System.out.printf("trackPositionLast %s\n",trackPositionLast.toString());
-
-
+
+ res_IP_u.fill(localResidualsIP.get("ures"));
res_IP_Y.fill(yResidualIP);
res_IP_X.fill(xResidualIP);
+ res_Last_u.fill(localResidualsLast.get("ures"));
res_Last_Y.fill(yResidualLast);
res_Last_X.fill(xResidualLast);
+ res_IP_Last_diff_Y.fill(Math.abs(yResidualLast) - Math.abs(yResidualIP));
+ res_IP_Last_diff_X.fill(Math.abs(xResidualLast) - Math.abs(xResidualIP));
+ res_IP_Last_diff_u.fill(Math.abs(localResidualsLast.get("ures")) - Math.abs(localResidualsIP.get("ures")));
+
+
+ if(seedTrack != null) {
+ Hep3Vector trackPositionSeed = TrackUtils.extrapolateTrack(seedTrack, lastStereoHitPosition.x());
+ double xResidualSeed = trackPositionSeed.x() - lastStereoHitPosition.y();
+ double yResidualSeed = trackPositionSeed.y() - lastStereoHitPosition.z();
+ res_Seed_Y.fill(yResidualSeed);
+ res_Seed_X.fill(xResidualSeed);
+ res_Seed_Last_diff_Y.fill(Math.abs(yResidualLast) - Math.abs(yResidualSeed));
+ res_Seed_Last_diff_X.fill(Math.abs(xResidualLast) - Math.abs(xResidualSeed));
+
+ Map<String,Double> localResidualsSeed = TrackUtils.calculateLocalTrackHitResiduals(seedTrack, lastHelicalTrackHit, lastStrip, bfield);
+ res_Seed_u.fill(localResidualsSeed.get("ures"));
+ res_Seed_Last_diff_u.fill(Math.abs(localResidualsLast.get("ures")) - Math.abs(localResidualsSeed.get("ures")));
+
+
+
+ } else {
+ logger.warning("No seed track found");
+ }
+
+
+
+
+
+
}
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/ParticleHelixProducer.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/ParticleHelixProducer.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/ParticleHelixProducer.java Mon Jan 4 17:43:47 2016
@@ -13,7 +13,7 @@
import java.util.List;
import org.hps.analysis.ecal.HPSMCParticlePlotsDriver;
-import org.hps.recon.tracking.HPSTrack;
+import org.hps.recon.tracking.HpsHelicalTrackFit;
import org.hps.recon.tracking.TrackerHitUtils;
import org.lcsim.constants.Constants;
import org.lcsim.event.EventHeader;
@@ -137,7 +137,7 @@
//Make new tracks based on the MC particles
//List<HelicalTrackFit> tracks = new ArrayList<HelicalTrackFit>();
- List<HPSTrack> tracks = new ArrayList<HPSTrack>();
+ List<HpsHelicalTrackFit> tracks = new ArrayList<HpsHelicalTrackFit>();
if (event.hasCollection(MCParticle.class)) {
List<MCParticle> mcparticles = event.get(MCParticle.class).get(0);
@@ -251,7 +251,7 @@
pars[3] = hpc.getZ0();
pars[4] = hpc.getSlopeSZPlane();
//HelicalTrackFit htf = this.trackUtils.makeHelicalTrackFit(pars);
- HPSTrack htf = this.makeHPSTrack(pars, part);
+ HpsHelicalTrackFit htf = this.makeHPSTrack(pars, part);
tracks.add(htf);
if (debug) {
System.out.println(this.getClass().getSimpleName() + ": MC particle created HelicalTrackFit " + htf.toString());
@@ -281,7 +281,7 @@
}
this.printDebug("created " + tracks.size() + " MC particle helix tracks");
- event.put(this.trackOutputCollectionName, tracks, HPSTrack.class, 0);
+ event.put(this.trackOutputCollectionName, tracks, HpsHelicalTrackFit.class, 0);
_totalTracks += tracks.size();
}
@@ -292,9 +292,12 @@
* @param mcParticle : MC particle associated to this HelicalTrackFit
* @return HpsHelicalTrackFit :
*/
- public HPSTrack makeHPSTrack(double[] helixParameters, MCParticle mcParticle) {
- return new HPSTrack(helixParameters, new SymmetricMatrix(5), new double[2], new int[2],
- new HashMap<HelicalTrackHit, Double>(), new HashMap<HelicalTrackHit, MultipleScatter>(), mcParticle);
+ public HpsHelicalTrackFit makeHPSTrack(double[] helixParameters, MCParticle mcParticle) {
+ HpsHelicalTrackFit helicalTrackFit = new HpsHelicalTrackFit(helixParameters, new SymmetricMatrix(5), new double[2], new int[2],
+ new HashMap<HelicalTrackHit, Double>(), new HashMap<HelicalTrackHit, MultipleScatter>());
+ helicalTrackFit.setMcParticle(mcParticle);
+ return helicalTrackFit;
+
}
/**
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/ROOTFlatTupleDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/ROOTFlatTupleDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/ROOTFlatTupleDriver.java Mon Jan 4 17:43:47 2016
@@ -20,10 +20,11 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.apache.commons.lang3.NotImplementedException;
import org.hps.analysis.ecal.HPSMCParticlePlotsDriver;
import org.hps.recon.tracking.BeamlineConstants;
import org.hps.recon.tracking.EventQuality;
-import org.hps.recon.tracking.HPSTrack;
+import org.hps.recon.tracking.HpsHelicalTrackFit;
import org.hps.recon.tracking.StraightLineTrack;
import org.hps.recon.tracking.TrackUtils;
import org.hps.recon.vertexing.TwoParticleVertexer;
@@ -41,6 +42,7 @@
import org.lcsim.event.GenericObject;
import org.lcsim.event.MCParticle;
import org.lcsim.event.Track;
+import org.lcsim.event.TrackState;
import org.lcsim.event.TrackerHit;
import org.lcsim.event.Vertex;
import org.lcsim.event.base.ParticleTypeClassifier;
@@ -645,8 +647,8 @@
} else {
printWriter.format("%5.5f %5.5f ", -9999999.9, -9999999.9);
}
- HPSTrack hpstrk1 = new HPSTrack(helix1);
- Hep3Vector posAtConverterFringe1 = hpstrk1.getPositionAtZMap(100., BeamlineConstants.HARP_POSITION_TESTRUN, 5.0)[0];
+ HpsHelicalTrackFit hpstrk1 = new HpsHelicalTrackFit(helix1);
+ Hep3Vector posAtConverterFringe1 = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk1, 100., BeamlineConstants.HARP_POSITION_TESTRUN, 5.0, event.getDetector().getFieldMap()).getReferencePoint());
if (beamlinePosOk(posAtConverterFringe1)) {
printWriter.format("%5.5f %5.5f %5.5f ", posAtConverterFringe1.z(), posAtConverterFringe1.x(), posAtConverterFringe1.y()); //note rotation from JLab->tracking
} else {
@@ -660,15 +662,15 @@
printWriter.format("%5.5f %5.5f ", -9999999.9, -9999999.9);
}
- Hep3Vector posAtNomTargetFringe1 = hpstrk1.getPositionAtZMap(100., 0.0, 5.0)[0];
+ Hep3Vector posAtNomTargetFringe1 = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk1, 100., 0., 5.0, event.getDetector().getFieldMap()).getReferencePoint());
if (beamlinePosOk(posAtNomTargetFringe1)) {
printWriter.format("%5.5f %5.5f %5.5f ", posAtNomTargetFringe1.z(), posAtNomTargetFringe1.x(), posAtNomTargetFringe1.y()); //note rotation from JLab->tracking
} else {
printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9, -9999999.9, -9999999.9);
}
+ Hep3Vector posAtECalFringe1 = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk1, BeamlineConstants.DIPOLE_EDGE_TESTRUN - 100, BeamlineConstants.ECAL_FACE_TESTRUN, 5.0, event.getDetector().getFieldMap()).getReferencePoint());
Hep3Vector posAtECal = TrackUtils.extrapolateTrack(trk1, BeamlineConstants.ECAL_FACE_TESTRUN);
- Hep3Vector posAtECalFringe1 = hpstrk1.getPositionAtZMap(BeamlineConstants.DIPOLE_EDGE_TESTRUN - 100, BeamlineConstants.ECAL_FACE_TESTRUN, 5.0, false)[0];
if (beamlinePosOk(posAtECal)) {
//printWriter.format("%5.5f %5.5f ",posAtECal.x(),posAtECal.y()); //note rotation from JLab->tracking
printWriter.format("%5.5f %5.5f %5.5f %5.5f %5.5f ", posAtECal.x(), posAtECal.y(), posAtECalFringe1.z(), posAtECalFringe1.x(), posAtECalFringe1.y()); //note rotation from JLab->tracking
@@ -681,7 +683,8 @@
double[] pos_cluster = matched_cluster.getPosition();
posAtECal = TrackUtils.extrapolateTrack(trk1, pos_cluster[2]);
if (beamlinePosOk(posAtECal)) {
- posAtECalFringe1 = hpstrk1.getPositionAtZMap(BeamlineConstants.DIPOLE_EDGE_TESTRUN - 100, pos_cluster[2], 5.0, false)[0];
+ posAtECalFringe1 = new BasicHep3Vector(TrackUtils.extrapolateTrackUsingFieldMap(trk1, BeamlineConstants.DIPOLE_EDGE_TESTRUN - 100, pos_cluster[2], 5.0, event.getDetector().getFieldMap()).getReferencePoint());
+
printWriter.format("%5.5f %5.5f %5.5f %5.5f %5.5f ", posAtECal.x(), posAtECal.y(), posAtECalFringe1.z(), posAtECalFringe1.x(), posAtECalFringe1.y()); //note rotation from JLab->tracking
if (_debug) {
System.out.printf("clpos:%5.5f %5.5f %5.5f trk: %5.5f %5.5f %5.5f %5.5f %5.5f \n", pos_cluster[0], pos_cluster[1], pos_cluster[2], posAtECal.x(), posAtECal.y(), posAtECalFringe1.z(), posAtECalFringe1.x(), posAtECalFringe1.y()); //note rotation from JLab->tracking
@@ -1212,15 +1215,19 @@
}
private StraightLineTrack[] getSLTs(Track trk1, Track trk2, boolean useFringe) {
+ throw new NotImplementedException("Need to implement the SLT stuff again. Not sure where it went.");
// find the point on the x- and y-axis by
// 1) go outside the fringe region
// 2) assume straight lines
// 3) solve for the position where the z-position is at the crossing point
- double zStart = useFringe == true ? -100. : 0.;
- StraightLineTrack slt1 = TrackUtils.findSLTAtZ(trk1, zStart, useFringe);
- StraightLineTrack slt2 = TrackUtils.findSLTAtZ(trk2, zStart, useFringe);
- StraightLineTrack[] vv = {slt1, slt2};
- return vv;
+ //double zStart = useFringe == true ? -100. : 0.;
+ //StraightLineTrack slt1 = TrackUtils.findSLTAtZ(trk1, zStart, useFringe);
+ //StraightLineTrack slt2 = TrackUtils.findSLTAtZ(trk2, zStart, useFringe);
+ //StraightLineTrack[] vv = {slt1, slt2};
+ //StraightLineTrack[] vv = {null, null};
+ //if(1==1)
+ // throw new NotImplementedException("Need to implement the SLT stuff again. Not sure where it went.");
+ //return vv;
}
/*
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java Mon Jan 4 17:43:47 2016
@@ -50,7 +50,8 @@
import org.lcsim.util.aida.AIDA;
/**
- *
+ * Analysis class to check recon.
+ *
* @author phansson
*/
public class TrackingReconstructionPlots extends Driver {
|