Author: [log in to unmask] Date: Tue Feb 24 08:16:41 2015 New Revision: 2182 Log: fixed curvilinear to perigee conversion Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/MakeGblTracks.java 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 Tue Feb 24 08:16:41 2015 @@ -8,10 +8,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.hps.recon.tracking.gbl.matrix.Matrix; +import java.util.logging.Level; +import java.util.logging.Logger; + import org.hps.recon.tracking.gbl.matrix.SymMatrix; import org.hps.recon.tracking.gbl.matrix.Vector; import org.lcsim.constants.Constants; @@ -35,11 +34,23 @@ private String _TrkCollectionName = "GblTracks"; - + private static final Logger logger = Logger.getLogger(MakeGblTracks.class.getName()); + /** * Creates a new instance of MakeTracks. */ public MakeGblTracks() { + //logger = Logger.getLogger(getClass().getName()); + //logger.setUseParentHandlers(false); + //Handler handler = new StreamHandler(System.out, new SimpleFormatter()); + //logger.addHandler(handler); + logger.setLevel(Level.INFO); +// try { +// logger.addHandler(new FileHandler(MakeGblTracks.class.getSimpleName()+".log")); +// } catch (SecurityException | IOException e) { +// e.printStackTrace(); +// } + } /** @@ -52,6 +63,8 @@ public void Process(EventHeader event, List<FittedGblTrajectory> gblTrajectories, double bfield) { List<Track> tracks = new ArrayList<Track>(); + + logger.info("adding " + gblTrajectories.size() + " of fitted GBL tracks to the event"); for(FittedGblTrajectory fittedTraj : gblTrajectories) { @@ -73,12 +86,11 @@ HelicalTrackFit helix = trackseed.getHelix(); double gblParameters[] = getGblCorrectedHelixParameters(helix,fittedTraj, bfield); trk.setTrackParameters(gblParameters, bfield); // Sets first TrackState. - //trk.setTrackParameters(helix.parameters(), bfield); // Sets first TrackState. - SymmetricMatrix gblCovariance = getGblCorrectedHelixCovariance(helix, fittedTraj, bfield); - trk.setCovarianceMatrix(gblCovariance); // Modifies first TrackState. - //trk.setCovarianceMatrix(helix.covariance()); // Modifies first TrackState. - trk.setChisq(helix.chisqtot()); - trk.setNDF(helix.ndf()[0]+helix.ndf()[1]); + //TODO Use GBL covariance matrix + //SymmetricMatrix gblCovariance = getGblCorrectedHelixCovariance(helix, fittedTraj, bfield); + trk.setCovarianceMatrix(helix.covariance()); // Modifies first TrackState. + trk.setChisq( fittedTraj.get_chi2()); + trk.setNDF(fittedTraj.get_ndf()); // Flag that the fit was successful and set the reference point trk.setFitSuccess(true); @@ -96,8 +108,18 @@ // Add the track to the list of tracks tracks.add((Track) trk); + System.out.println("level " + logger.getLevel().getName() + " fine: " + Integer.toString(Level.FINE.intValue())+ " info: " + Integer.toString(Level.INFO.intValue()) + " warning: " + Integer.toString(Level.WARNING.intValue())); + logger.info(String.format("helix chi2 %f ndf %d gbl chi2 %f ndf %d\n", helix.chisqtot(), helix.ndf()[0]+helix.ndf()[1], trk.getChi2(), trk.getNDF())); + if(logger.getLevel().intValue()<= Level.INFO.intValue()) { + for(int i=0;i<5;++i) { + logger.info(String.format("param %d: %.5f -> %.5f helix-gbl= %f", i, helix.parameters()[i], trk.getTrackParameter(i), helix.parameters()[i]-trk.getTrackParameter(i))); + } + } + } + logger.info("adding " + Integer.toString(tracks.size()) + " Gbl tracks to event with " + event.get(Track.class, "MatchedTracks").size() + " matched tracks"); + // Put the tracks back into the event and exit int flag = 1<<LCIOConstants.TRBIT_HITS; event.put(_TrkCollectionName, tracks, Track.class, flag); @@ -143,42 +165,32 @@ double xTPrimeCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.XTPRIME.getValue()); double yTPrimeCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.YTPRIME.getValue()); - // calculate new d0 - // correct for different sign convention of d0 in curvilinear frame + // calculate new d0 and z0 Hep3Matrix perToClPrj = traj.get_track_data().getPrjPerToCl(); Hep3Matrix clToPerPrj = VecOp.inverse(perToClPrj); - Hep3Vector vec_out = VecOp.mult(clToPerPrj, new BasicHep3Vector(xTCorr, yTCorr, 0.0)); - //double d0_corr = -1.0 * self.track.prjClToPer(self.xTCorr(label),self.yTCorr(label))[1]; - double d0_corr = -1.0*vec_out.y(); // correct for different sign convention of d0 in curvilinear frame + Hep3Vector corrPer = VecOp.mult(clToPerPrj, new BasicHep3Vector(xTCorr, yTCorr, 0.0)); + + //d0 + double d0_corr = -1.0*corrPer.y(); // correct for different sign convention of d0 in curvilinear frame double d0_gbl = d0 + d0_corr; - // calculate new z0 - //return self.track.prjClToPer(self.xTCorr(label),self.yTCorr(label))[2] - double z0_corr = vec_out.z(); + //z0 + double z0_corr = corrPer.z(); double z0_gbl = z0 + z0_corr; // calculate new curvature // return self.track.qOverP(bfac) + self.curvCorr() double qOverP_gbl = qOverP + qOverPCorr; - double p_gbl = traj.get_seed().getCharge()/qOverP_gbl; - double pt_gbl = p_gbl * helix.sth(); + double pt_gbl = 1.0/qOverP_gbl * helix.sth(); double C_gbl = Constants.fieldConversion * bfield / pt_gbl; - C_gbl = Math.signum(helix.curvature())*Math.abs(C_gbl); // fix sign, don't think I need to do all this - - - // TODO Is the below really true? + //make sure sign is not changed + C_gbl = Math.signum(helix.curvature())*Math.abs(C_gbl); //calculate new phi0 - double phi0_gbl = phi0 + Math.atan(xTPrimeCorr); - // prorate by dip angle - phi0_gbl = phi0_gbl/Math.sin(Math.atan(slope)); - + double phi0_gbl = phi0 + xTPrimeCorr; + //calculate new slope - // A correction to track direction yT' in curvilinear frame is proportional - // to a correction on the dip angle lambda double slope_gbl = Math.tan( Math.atan(helix.slope()) + yTPrimeCorr); - - double parameters_gbl[] = new double[5]; parameters_gbl[HelicalTrackFit.dcaIndex] = d0_gbl; @@ -186,7 +198,6 @@ parameters_gbl[HelicalTrackFit.curvatureIndex] = C_gbl; parameters_gbl[HelicalTrackFit.slopeIndex] = slope_gbl; parameters_gbl[HelicalTrackFit.phi0Index] = phi0_gbl; - return parameters_gbl; }