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 {