Author: [log in to unmask]
Date: Fri Aug 28 16:36:48 2015
New Revision: 3452
Log:
clean up before I change stuff
Modified:
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java
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/GBLOutput.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLOutput.java Fri Aug 28 16:36:48 2015
@@ -1,4 +1,5 @@
package org.hps.recon.tracking.gbl;
+
import hep.physics.matrix.BasicMatrix;
import hep.physics.matrix.Matrix;
import hep.physics.matrix.MatrixOp;
@@ -41,37 +42,36 @@
import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
import org.lcsim.recon.tracking.seedtracker.SeedTrack;
-
/**
* Calculate the input needed for Millepede minimization.
+ *
* @author Per Hansson Adrian <[log in to unmask]>
*
*/
public class GBLOutput {
-
+
private int _debug = 0;
private GBLFileIO textFile = null;
private Hep3Vector _B;
- private final TrackerHitUtils _trackerHitUtils = new TrackerHitUtils();
+ private final TrackerHitUtils _trackerHitUtils = new TrackerHitUtils();
private final MaterialSupervisor _materialmanager;
private final MultipleScattering _scattering;
private final double _beamEnergy = 1.1; //GeV
- private boolean AprimeEvent = false; // do extra checks
- private boolean hasXPlanes = false;
-
-
-
-
+ private boolean AprimeEvent = false; // do extra checks
+ private boolean hasXPlanes = false;
+
/**
* Constructor
- * @param outputFileName is the filename given to the text-based output file. If empty no output file is written
+ *
+ * @param outputFileName is the filename given to the text-based output
+ * file. If empty no output file is written
* @param bfield magnetic field in Tesla
*/
- GBLOutput(String outputFileName,Hep3Vector bfield) {
- //System.out.printf("name \"%s\" \n", outputFileName);
- if(!outputFileName.equalsIgnoreCase("")) {
- textFile = new GBLFileIO(outputFileName);
- }
+ GBLOutput(String outputFileName, Hep3Vector bfield) {
+ //System.out.printf("name \"%s\" \n", outputFileName);
+ if (!outputFileName.equalsIgnoreCase("")) {
+ textFile = new GBLFileIO(outputFileName);
+ }
_materialmanager = new MaterialSupervisor();
_scattering = new MultipleScattering(_materialmanager);
_B = CoordinateTransformations.transformVectorToTracking(bfield);
@@ -80,661 +80,623 @@
public void setDebug(int debug) {
_debug = debug;
- _scattering.setDebug((_debug>0));
- }
+ _scattering.setDebug((_debug > 0));
+ }
+
public void buildModel(Detector detector) {
_materialmanager.buildModel(detector);
}
- void printNewEvent(int eventNumber,double Bz) {
- if(textFile != null) {
- textFile.printEventInfo(eventNumber,Bz);
- }
- }
+
+ void printNewEvent(int eventNumber, double Bz) {
+ if (textFile != null) {
+ textFile.printEventInfo(eventNumber, Bz);
+ }
+ }
+
void printTrackID(int iTrack) {
- if(textFile != null) {
- textFile.printTrackID(iTrack);
- }
- }
+ if (textFile != null) {
+ textFile.printTrackID(iTrack);
+ }
+ }
+
void close() {
- if(textFile != null) {
- textFile.closeFile();
- }
- }
+ if (textFile != null) {
+ textFile.closeFile();
+ }
+ }
+
void setAPrimeEventFlag(boolean flag) {
- this.AprimeEvent = flag;
- }
+ this.AprimeEvent = flag;
+ }
+
void setXPlaneFlag(boolean flag) {
- this.hasXPlanes = flag;
- }
+ this.hasXPlanes = flag;
+ }
+
public Hep3Vector get_B() {
- return _B;
- }
- public void set_B(Hep3Vector _B) {
- this._B = _B;
- }
-
-
-
+ return _B;
+ }
+
+ public void set_B(Hep3Vector _B) {
+ this._B = _B;
+ }
+
void printGBL(Track trk, List<SiTrackerHitStrip1D> stripHits, GBLTrackData gtd, List<GBLStripClusterData> stripClusterDataList, List<MCParticle> mcParticles, List<SimTrackerHit> simTrackerHits, boolean isMC) {
- SeedTrack st = (SeedTrack)trk;
+ SeedTrack st = (SeedTrack) trk;
SeedCandidate seed = st.getSeedCandidate();
- HelicalTrackFit htf = seed.getHelix();
+ HelicalTrackFit htf = seed.getHelix();
// Find scatter points along the path
ScatterPoints scatters = _scattering.FindHPSScatterPoints(htf);
-
+
// Hits on track
List<HelicalTrackHit> hits = seed.getHits();
// Find the truth particle of the track
MCParticle mcp = null;
-
- if(isMC) {
- mcp = getMatchedTruthParticle(trk);
-
- if(mcp==null) {
- System.out.printf("%s: WARNING!! no truth particle found in event!\n",this.getClass().getSimpleName());
- this.printMCParticles(mcParticles);
- //System.exit(1);
- } else {
- if(_debug>0) System.out.printf("%s: truth particle (pdgif %d ) found in event!\n",this.getClass().getSimpleName(),mcp.getPDGID());
- }
-
- if(AprimeEvent ) {
- checkAprimeTruth(mcp,mcParticles);
- }
- }
-
+
+ if (isMC) {
+ mcp = getMatchedTruthParticle(trk);
+
+ if (mcp == null) {
+ System.out.printf("%s: WARNING!! no truth particle found in event!\n", this.getClass().getSimpleName());
+ this.printMCParticles(mcParticles);
+ //System.exit(1);
+ } else {
+ if (_debug > 0) {
+ System.out.printf("%s: truth particle (pdgif %d ) found in event!\n", this.getClass().getSimpleName(), mcp.getPDGID());
+ }
+ }
+
+ if (AprimeEvent) {
+ checkAprimeTruth(mcp, mcParticles);
+ }
+ }
+
// Get track parameters from MC particle
- HelicalTrackFit htfTruth = (isMC&&mcp!=null) ? TrackUtils.getHTF(mcp,-1.0*this._B.z()) : null;
-
+ HelicalTrackFit htfTruth = (isMC && mcp != null) ? TrackUtils.getHTF(mcp, -1.0 * this._B.z()) : null;
+
// Use the truth helix as the initial track for GBL?
//htf = htfTruth;
-
-
// Get perigee parameters to curvilinear frame
PerigeeParams perPar = new PerigeeParams(htf);
PerigeeParams perParTruth = new PerigeeParams(htfTruth);
- if(textFile != null) {
- textFile.printPerTrackParam(perPar);
- textFile.printPerTrackParamTruth(perParTruth);
- }
-
+ if (textFile != null) {
+ textFile.printPerTrackParam(perPar);
+ textFile.printPerTrackParamTruth(perParTruth);
+ }
+
//GBLDATA
gtd.setPerigeeTrackParameters(perPar);
// Get curvilinear parameters
ClParams clPar = new ClParams(htf);
ClParams clParTruth = new ClParams(htfTruth);
- if(textFile != null) {
- textFile.printClTrackParam(clPar);
- textFile.printClTrackParamTruth(clParTruth);
-
- if(_debug>0) {
- System.out.printf("%s\n",textFile.getClTrackParamStr(clPar));
- System.out.printf("%s\n",textFile.getPerTrackParamStr(perPar));
- }
- }
-
-
+ if (textFile != null) {
+ textFile.printClTrackParam(clPar);
+ textFile.printClTrackParamTruth(clParTruth);
+
+ if (_debug > 0) {
+ System.out.printf("%s\n", textFile.getClTrackParamStr(clPar));
+ System.out.printf("%s\n", textFile.getPerTrackParamStr(perPar));
+ }
+ }
+
// find the projection from the I,J,K to U,V,T curvilinear coordinates
Hep3Matrix perToClPrj = getPerToClPrj(htf);
-
- if(textFile != null) {
- textFile.printPerToClPrj(perToClPrj);
- }
-
+
+ if (textFile != null) {
+ textFile.printPerToClPrj(perToClPrj);
+ }
+
//GBLDATA
- for(int row=0; row<perToClPrj.getNRows();++row) {
- for(int col=0; col<perToClPrj.getNColumns();++col) {
- gtd.setPrjPerToCl(row, col, perToClPrj.e(row, col));
- }
- }
-
-
-
+ for (int row = 0; row < perToClPrj.getNRows(); ++row) {
+ for (int col = 0; col < perToClPrj.getNColumns(); ++col) {
+ gtd.setPrjPerToCl(row, col, perToClPrj.e(row, col));
+ }
+ }
+
//GBLDATA
- for(int row=0; row<perToClPrj.getNRows();++row) {
- for(int col=0; col<perToClPrj.getNColumns();++col) {
- gtd.setPrjPerToCl(row, col, perToClPrj.e(row, col));
- }
- }
-
-
+ for (int row = 0; row < perToClPrj.getNRows(); ++row) {
+ for (int col = 0; col < perToClPrj.getNColumns(); ++col) {
+ gtd.setPrjPerToCl(row, col, perToClPrj.e(row, col));
+ }
+ }
+
// print chi2 of fit
- if(textFile != null) {
- textFile.printChi2(htf.chisq(),htf.ndf());
- }
-
+ if (textFile != null) {
+ textFile.printChi2(htf.chisq(), htf.ndf());
+ }
+
// build map of layer to SimTrackerHits that belongs to the MC particle
- Map<Integer, SimTrackerHit> simHitsLayerMap = new HashMap<Integer, SimTrackerHit >();
+ Map<Integer, SimTrackerHit> simHitsLayerMap = new HashMap<Integer, SimTrackerHit>();
for (SimTrackerHit sh : simTrackerHits) {
- if(sh.getMCParticle()==mcp) {
- int layer = sh.getIdentifierFieldValue("layer");
- if(!simHitsLayerMap.containsKey(layer) || (sh.getPathLength() < simHitsLayerMap.get(layer).getPathLength()) ) {
+ if (sh.getMCParticle() == mcp) {
+ int layer = sh.getIdentifierFieldValue("layer");
+ if (!simHitsLayerMap.containsKey(layer) || (sh.getPathLength() < simHitsLayerMap.get(layer).getPathLength())) {
simHitsLayerMap.put(layer, sh);
}
}
}
-
-
+
// covariance matrix from the fit
- if(textFile != null) {
- textFile.printPerTrackCov(htf);
- }
-
+ if (textFile != null) {
+ textFile.printPerTrackCov(htf);
+ }
+
// dummy cov matrix for CL parameters
- BasicMatrix clCov = new BasicMatrix(5,5);
+ BasicMatrix clCov = new BasicMatrix(5, 5);
initUnit(clCov);
- clCov = (BasicMatrix) MatrixOp.mult(0.1*0.1,clCov);
-
- if(textFile != null) {
- textFile.printCLTrackCov(clCov);
- }
-
- if(_debug>0) {
- System.out.printf("%s: perPar covariance matrix\n%s\n",this.getClass().getSimpleName(),htf.covariance().toString());
- double chi2_truth = truthTrackFitChi2(perPar,perParTruth,htf.covariance());
- System.out.printf("%s: truth perPar chi2 %f\n",this.getClass().getSimpleName(),chi2_truth);
- }
-
- if(_debug>0) System.out.printf("%d hits\n",hits.size());
-
+ clCov = (BasicMatrix) MatrixOp.mult(0.1 * 0.1, clCov);
+
+ if (textFile != null) {
+ textFile.printCLTrackCov(clCov);
+ }
+
+ if (_debug > 0) {
+ System.out.printf("%s: perPar covariance matrix\n%s\n", this.getClass().getSimpleName(), htf.covariance().toString());
+ double chi2_truth = truthTrackFitChi2(perPar, perParTruth, htf.covariance());
+ System.out.printf("%s: truth perPar chi2 %f\n", this.getClass().getSimpleName(), chi2_truth);
+ }
+
+ if (_debug > 0) {
+ System.out.printf("%d hits\n", hits.size());
+ }
int istrip = 0;
- for(int ihit=0;ihit!=hits.size();++ihit) {
-
+ for (int ihit = 0; ihit != hits.size(); ++ihit) {
+
HelicalTrackHit hit = hits.get(ihit);
HelicalTrackCross htc = (HelicalTrackCross) hit;
List<HelicalTrackStrip> strips = htc.getStrips();
-
- for(HelicalTrackStrip stripOld : strips) {
+
+ for (HelicalTrackStrip stripOld : strips) {
HelicalTrackStripGbl strip = new HelicalTrackStripGbl(stripOld, true);
-
+
// find Millepede layer definition from DetectorElement
IDetectorElement de = ((RawTrackerHit) strip.getStrip().rawhits().get(0)).getDetectorElement();
HpsSiSensor sensor;
- if( de instanceof HpsSiSensor) {
+ if (de instanceof HpsSiSensor) {
sensor = (HpsSiSensor) de;
} else {
throw new ClassCastException("Detector element " + de.getName() + " couldn't be casted to " + HpsSiSensor.class.getName());
}
int millepedeId = sensor.getMillepedeId();
-
- if(_debug>0) System.out.printf("%s: layer %d millepede %d (DE=\"%s\", origin %s) \n",this.getClass().getSimpleName(),strip.layer(), millepedeId, sensor.getName(), strip.origin().toString());
-
- if(textFile != null) {
- textFile.printStrip(istrip,millepedeId,de.getName());
- }
-
+
+ if (_debug > 0) {
+ System.out.printf("%s: layer %d millepede %d (DE=\"%s\", origin %s) \n", this.getClass().getSimpleName(), strip.layer(), millepedeId, sensor.getName(), strip.origin().toString());
+ }
+
+ if (textFile != null) {
+ textFile.printStrip(istrip, millepedeId, de.getName());
+ }
+
//GBLDATA
GBLStripClusterData stripData = new GBLStripClusterData(millepedeId);
//Add to output list
stripClusterDataList.add(stripData);
-
-
-
+
//Center of the sensor
- Hep3Vector origin = strip.origin();
-
- if(textFile != null) {
- textFile.printOrigin(origin);
- }
-
+ Hep3Vector origin = strip.origin();
+
+ if (textFile != null) {
+ textFile.printOrigin(origin);
+ }
+
// associated 3D position of the crossing of this and it's stereo partner sensor
- if(textFile != null) {
- textFile.printHitPos3D(hit.getCorrectedPosition());
- }
-
+ if (textFile != null) {
+ textFile.printHitPos3D(hit.getCorrectedPosition());
+ }
+
//Find intercept point with sensor in tracking frame
Hep3Vector trkpos = TrackUtils.getHelixPlaneIntercept(htf, strip, Math.abs(_B.z()));
- Hep3Vector trkposTruth = htfTruth!=null ? TrackUtils.getHelixPlaneIntercept(htfTruth, strip, Math.abs(_B.z())) : new BasicHep3Vector(-999999.9,-999999.9,-999999.9);
- if(textFile != null) {
- textFile.printStripTrackPos(trkpos);
- }
- if(_debug>0) {
- System.out.printf("trkpos at intercept [%.10f %.10f %.10f]\n",trkpos.x(),trkpos.y(),trkpos.z());
- System.out.printf("trkposTruth at intercept %s\n",trkposTruth!=null?trkposTruth.toString():"no truth track");
- }
-
+ Hep3Vector trkposTruth = htfTruth != null ? TrackUtils.getHelixPlaneIntercept(htfTruth, strip, Math.abs(_B.z())) : new BasicHep3Vector(-999999.9, -999999.9, -999999.9);
+ if (textFile != null) {
+ textFile.printStripTrackPos(trkpos);
+ }
+ if (_debug > 0) {
+ System.out.printf("trkpos at intercept [%.10f %.10f %.10f]\n", trkpos.x(), trkpos.y(), trkpos.z());
+ System.out.printf("trkposTruth at intercept %s\n", trkposTruth != null ? trkposTruth.toString() : "no truth track");
+ }
+
// cross-check intercept point
- if(hasXPlanes ) {
- Hep3Vector trkposXPlaneIter = TrackUtils.getHelixPlanePositionIter(htf, strip.origin(), strip.w(), 1.0e-8);
- Hep3Vector trkposDiff = VecOp.sub(trkposXPlaneIter, trkpos);
- if(trkposDiff.magnitude() > 1.0e-7) {
- System.out.printf("WARNING trkposDiff mag = %.10f [%.10f %.10f %.10f]\n",trkposDiff.magnitude(),trkposDiff.x(),trkposDiff.y(),trkposDiff.z());
- System.exit(1);
- }
- if(_debug>0) System.out.printf("trkposXPlaneIter at intercept [%.10f %.10f %.10f]\n",trkposXPlaneIter.x(),trkposXPlaneIter.y(),trkposXPlaneIter.z());
- }
-
-
+ if (hasXPlanes) {
+ Hep3Vector trkposXPlaneIter = TrackUtils.getHelixPlanePositionIter(htf, strip.origin(), strip.w(), 1.0e-8);
+ Hep3Vector trkposDiff = VecOp.sub(trkposXPlaneIter, trkpos);
+ if (trkposDiff.magnitude() > 1.0e-7) {
+ System.out.printf("WARNING trkposDiff mag = %.10f [%.10f %.10f %.10f]\n", trkposDiff.magnitude(), trkposDiff.x(), trkposDiff.y(), trkposDiff.z());
+ System.exit(1);
+ }
+ if (_debug > 0) {
+ System.out.printf("trkposXPlaneIter at intercept [%.10f %.10f %.10f]\n", trkposXPlaneIter.x(), trkposXPlaneIter.y(), trkposXPlaneIter.z());
+ }
+ }
+
// Find the sim tracker hit for this layer
SimTrackerHit simHit = simHitsLayerMap.get(strip.layer());
- if( isMC ) {
- if(simHit==null) {
- System.out.printf("%s: no sim hit for strip hit at layer %d\n",this.getClass().getSimpleName(),strip.layer());
- System.out.printf("%s: it as %d mc particles associated with it:\n",this.getClass().getSimpleName(),hit.getMCParticles().size());
- for (MCParticle particle : hit.getMCParticles()) System.out.printf("%s: %d p %s \n",this.getClass().getSimpleName(),particle.getPDGID(),particle.getMomentum().toString());
- System.out.printf("%s: these are sim hits in the event:\n",this.getClass().getSimpleName());
- for (SimTrackerHit simhit : simTrackerHits) System.out.printf("%s sim hit at %s with MC particle pdgid %d with p %s \n",this.getClass().getSimpleName(),simhit.getPositionVec().toString(),simhit.getMCParticle().getPDGID(),simhit.getMCParticle().getMomentum().toString());
- //System.out.printf("%s: these are all the MC particles in the event:\n",this.getClass().getSimpleName());
- //System.exit(1);
- }
-
- if(_debug>0) {
- if(htfTruth!=null && simHit!=null) {
- double s_truthSimHit = HelixUtils.PathToXPlane(htfTruth, simHit.getPositionVec().z(), 0, 0).get(0);
- Hep3Vector trkposTruthSimHit = HelixUtils.PointOnHelix(htfTruth, s_truthSimHit);
- Hep3Vector resTruthSimHit = VecOp.sub(CoordinateTransformations.transformVectorToTracking(simHit.getPositionVec()),trkposTruthSimHit);
- System.out.printf("TruthSimHit residual %s for layer %d\n",resTruthSimHit.toString(),strip.layer());
- }
- }
- }
-
+ if (isMC) {
+ if (simHit == null) {
+ System.out.printf("%s: no sim hit for strip hit at layer %d\n", this.getClass().getSimpleName(), strip.layer());
+ System.out.printf("%s: it as %d mc particles associated with it:\n", this.getClass().getSimpleName(), hit.getMCParticles().size());
+ for (MCParticle particle : hit.getMCParticles()) {
+ System.out.printf("%s: %d p %s \n", this.getClass().getSimpleName(), particle.getPDGID(), particle.getMomentum().toString());
+ }
+ System.out.printf("%s: these are sim hits in the event:\n", this.getClass().getSimpleName());
+ for (SimTrackerHit simhit : simTrackerHits) {
+ System.out.printf("%s sim hit at %s with MC particle pdgid %d with p %s \n", this.getClass().getSimpleName(), simhit.getPositionVec().toString(), simhit.getMCParticle().getPDGID(), simhit.getMCParticle().getMomentum().toString());
+ }
+ //System.out.printf("%s: these are all the MC particles in the event:\n",this.getClass().getSimpleName());
+ //System.exit(1);
+ }
+
+ if (_debug > 0) {
+ if (htfTruth != null && simHit != null) {
+ double s_truthSimHit = HelixUtils.PathToXPlane(htfTruth, simHit.getPositionVec().z(), 0, 0).get(0);
+ Hep3Vector trkposTruthSimHit = HelixUtils.PointOnHelix(htfTruth, s_truthSimHit);
+ Hep3Vector resTruthSimHit = VecOp.sub(CoordinateTransformations.transformVectorToTracking(simHit.getPositionVec()), trkposTruthSimHit);
+ System.out.printf("TruthSimHit residual %s for layer %d\n", resTruthSimHit.toString(), strip.layer());
+ }
+ }
+ }
+
//path length to intercept
- double s = HelixUtils.PathToXPlane(htf,trkpos.x(),0,0).get(0);
+ double s = HelixUtils.PathToXPlane(htf, trkpos.x(), 0, 0).get(0);
double s3D = s / Math.cos(Math.atan(htf.slope()));
- if(textFile != null) {
- textFile.printStripPathLen(s);
- textFile.printStripPathLen3D(s3D);
- }
-
+ if (textFile != null) {
+ textFile.printStripPathLen(s);
+ textFile.printStripPathLen3D(s3D);
+ }
+
//GBLDATA
stripData.setPath(s);
stripData.setPath3D(s3D);
-
-
-
+
//print stereo angle in YZ plane
- if(textFile != null) {
- textFile.printMeasDir(strip.u());
- textFile.printNonMeasDir(strip.v());
- textFile.printNormalDir(strip.w());
- }
-
+ if (textFile != null) {
+ textFile.printMeasDir(strip.u());
+ textFile.printNonMeasDir(strip.v());
+ textFile.printNormalDir(strip.w());
+ }
+
//GBLDATA
stripData.setU(strip.u());
stripData.setV(strip.v());
stripData.setW(strip.w());
-
-
+
//Print track direction at intercept
Hep3Vector tDir = HelixUtils.Direction(htf, s);
- double phi = htf.phi0() - s/htf.R();
+ double phi = htf.phi0() - s / htf.R();
double lambda = Math.atan(htf.slope());
- if(textFile != null) {
- textFile.printStripTrackDir(Math.sin(phi),Math.sin(lambda));
- textFile.printStripTrackDirFull(tDir);
- }
-
+ if (textFile != null) {
+ textFile.printStripTrackDir(Math.sin(phi), Math.sin(lambda));
+ textFile.printStripTrackDirFull(tDir);
+ }
+
//GBLDATA
stripData.setTrackDir(tDir);
stripData.setTrackPhi(phi);
stripData.setTrackLambda(lambda);
-
-
+
// calculate isolation to other strip clusters
double stripIsoMin = 9999.9;
for (SiTrackerHitStrip1D stripHit : stripHits) {
- if(stripHit.getRawHits().get(0).getDetectorElement().getName().equals(de.getName())) {
+ if (stripHit.getRawHits().get(0).getDetectorElement().getName().equals(de.getName())) {
SiTrackerHitStrip1D local = stripHit.getTransformedHit(TrackerHitType.CoordinateSystem.SENSOR);
double d = Math.abs(strip.umeas() - local.getPosition()[0]);
- if (d<stripIsoMin && d>0) {
+ if (d < stripIsoMin && d > 0) {
stripIsoMin = d;
}
}
}
-
- if(_debug>0) System.out.printf("%s: stripIsoMin = %f \n", this.getClass().getSimpleName(), stripIsoMin);
-
+
+ if (_debug > 0) {
+ System.out.printf("%s: stripIsoMin = %f \n", this.getClass().getSimpleName(), stripIsoMin);
+ }
+
// Add isolation to text file output
- if(textFile != null) {
+ if (textFile != null) {
textFile.printStripIso(stripIsoMin);
}
-
-
+
//Print residual in measurement system
-
// start by find the distance vector between the center and the track position
Hep3Vector vdiffTrk = VecOp.sub(trkpos, origin);
- Hep3Vector vdiffTrkTruth = htfTruth!=null ? VecOp.sub(trkposTruth, origin): null;
-
+ Hep3Vector vdiffTrkTruth = htfTruth != null ? VecOp.sub(trkposTruth, origin) : null;
+
// then find the rotation from tracking to measurement frame
Hep3Matrix trkToStripRot = _trackerHitUtils.getTrackToStripRotation(strip.getStrip());
-
+
// then rotate that vector into the measurement frame to get the predicted measurement position
Hep3Vector trkpos_meas = VecOp.mult(trkToStripRot, vdiffTrk);
- Hep3Vector trkposTruth_meas = vdiffTrkTruth!=null ? VecOp.mult(trkToStripRot, vdiffTrkTruth) : null;
-
-
+ Hep3Vector trkposTruth_meas = vdiffTrkTruth != null ? VecOp.mult(trkToStripRot, vdiffTrkTruth) : null;
+
// hit measurement and uncertainty in measurement frame
- Hep3Vector m_meas = new BasicHep3Vector(strip.umeas(),0.,0.);
- Hep3Vector res_err_meas = new BasicHep3Vector(strip.du(),(strip.vmax() - strip.vmin()) / Math.sqrt(12),10.0/Math.sqrt(12));
-
- if(textFile != null) {
- textFile.printStripMeas(m_meas.x());
+ Hep3Vector m_meas = new BasicHep3Vector(strip.umeas(), 0., 0.);
+ Hep3Vector res_err_meas = new BasicHep3Vector(strip.du(), (strip.vmax() - strip.vmin()) / Math.sqrt(12), 10.0 / Math.sqrt(12));
+
+ if (textFile != null) {
+ textFile.printStripMeas(m_meas.x());
}
//if(textFile != null) {
// textFile.printStripTrackPosMeasFrame(trkpos_meas);
//}
-
-
//GBLDATA
stripData.setMeas(strip.umeas());
stripData.setTrackPos(trkpos_meas);
-
- if(_debug>1) {
- System.out.printf("%s: rotation matrix to meas frame\n%s\n", getClass().getSimpleName(), VecOp.toString(trkToStripRot));
- System.out.printf("%s: tPosGlobal %s origin %s\n", getClass().getSimpleName(), trkpos.toString(), origin.toString());
- System.out.printf("%s: tDiff %s\n", getClass().getSimpleName(), vdiffTrk.toString());
- System.out.printf("%s: tPosMeas %s\n", getClass().getSimpleName(), trkpos_meas.toString());
- }
-
-
-
+
+ if (_debug > 1) {
+ System.out.printf("%s: rotation matrix to meas frame\n%s\n", getClass().getSimpleName(), VecOp.toString(trkToStripRot));
+ System.out.printf("%s: tPosGlobal %s origin %s\n", getClass().getSimpleName(), trkpos.toString(), origin.toString());
+ System.out.printf("%s: tDiff %s\n", getClass().getSimpleName(), vdiffTrk.toString());
+ System.out.printf("%s: tPosMeas %s\n", getClass().getSimpleName(), trkpos_meas.toString());
+ }
+
// residual in measurement frame
Hep3Vector res_meas = VecOp.sub(m_meas, trkpos_meas);
Hep3Vector resTruth_meas = trkposTruth_meas != null ? VecOp.sub(m_meas, trkposTruth_meas) : null;
- if(textFile != null) {
- textFile.printStripMeasRes(res_meas.x(),res_err_meas.x());
- textFile.printStripMeasResTruth(resTruth_meas!=null ? resTruth_meas.x() : -9999999.9,res_err_meas.x());
- }
-
+ if (textFile != null) {
+ textFile.printStripMeasRes(res_meas.x(), res_err_meas.x());
+ textFile.printStripMeasResTruth(resTruth_meas != null ? resTruth_meas.x() : -9999999.9, res_err_meas.x());
+ }
+
//GBLDATA
stripData.setMeasErr(res_err_meas.x());
-
-
-
- if(_debug>0) System.out.printf("layer %d millePedeId %d uRes %.10f\n",strip.layer(), millepedeId ,res_meas.x());
-
+
+ if (_debug > 0) {
+ System.out.printf("layer %d millePedeId %d uRes %.10f\n", strip.layer(), millepedeId, res_meas.x());
+ }
+
// sim hit residual
-
- if(simHit!=null) {
+ if (simHit != null) {
Hep3Vector simHitPos = CoordinateTransformations.transformVectorToTracking(simHit.getPositionVec());
- if(_debug>0) System.out.printf("simHitPos %s\n",simHitPos.toString());
+ if (_debug > 0) {
+ System.out.printf("simHitPos %s\n", simHitPos.toString());
+ }
Hep3Vector vdiffSimHit = VecOp.sub(simHitPos, trkpos);
Hep3Vector simHitPos_meas = VecOp.mult(trkToStripRot, vdiffSimHit);
- if(textFile != null) {
- textFile.printStripMeasResSimHit(simHitPos_meas.x(),res_err_meas.x());
+ if (textFile != null) {
+ textFile.printStripMeasResSimHit(simHitPos_meas.x(), res_err_meas.x());
}
} else {
- if(textFile != null) {
- textFile.printStripMeasResSimHit(-999999.9,-999999.9);
- }
- }
-
+ if (textFile != null) {
+ textFile.printStripMeasResSimHit(-999999.9, -999999.9);
+ }
+ }
+
// find scattering angle
- ScatterPoint scatter = scatters.getScatterPoint(((RawTrackerHit)strip.getStrip().rawhits().get(0)).getDetectorElement());
+ ScatterPoint scatter = scatters.getScatterPoint(((RawTrackerHit) strip.getStrip().rawhits().get(0)).getDetectorElement());
double scatAngle;
-
- if(scatter != null) {
+
+ if (scatter != null) {
scatAngle = scatter.getScatterAngle().Angle();
- }
- else {
+ } else {
if (_debug > 0) {
System.out.printf("%s: WARNING cannot find scatter for detector %s with strip cluster at %s\n", this.getClass(), ((RawTrackerHit) strip.getStrip().rawhits().get(0)).getDetectorElement().getName(), strip.origin().toString());
}
//can be edge case where helix is outside, but close to sensor, so make a new scatter point assuming the helix does pass through the sensor
DetectorPlane hitPlane = null;
- if(MaterialSupervisor.class.isInstance(_scattering.getMaterialManager())) {
- MaterialSupervisor matSup = (MaterialSupervisor)_scattering.getMaterialManager();
- IDetectorElement hitElement = ((RawTrackerHit)strip.getStrip().rawhits().get(0)).getDetectorElement();
- for(ScatteringDetectorVolume vol : matSup.getMaterialVolumes()) {
- if (vol.getDetectorElement()==hitElement) {
+ if (MaterialSupervisor.class.isInstance(_scattering.getMaterialManager())) {
+ MaterialSupervisor matSup = (MaterialSupervisor) _scattering.getMaterialManager();
+ IDetectorElement hitElement = ((RawTrackerHit) strip.getStrip().rawhits().get(0)).getDetectorElement();
+ for (ScatteringDetectorVolume vol : matSup.getMaterialVolumes()) {
+ if (vol.getDetectorElement() == hitElement) {
hitPlane = (DetectorPlane) vol;
break;
}
}
- if(hitPlane==null) {
+ if (hitPlane == null) {
throw new RuntimeException("cannot find plane for hit!");
} else {
// find scatterlength
- double s_closest = HelixUtils.PathToXPlane(htf,hitPlane.origin().x(), 0., 0).get(0);
+ double s_closest = HelixUtils.PathToXPlane(htf, hitPlane.origin().x(), 0., 0).get(0);
double X0 = hitPlane.getMaterialTraversedInRL(HelixUtils.Direction(htf, s_closest));
- ScatterAngle scatterAngle = new ScatterAngle(s_closest, _scattering.msangle(htf.p(this._B.magnitude()),X0));
+ ScatterAngle scatterAngle = new ScatterAngle(s_closest, _scattering.msangle(htf.p(this._B.magnitude()), X0));
scatAngle = scatterAngle.Angle();
}
- }
- else {
+ } else {
throw new UnsupportedOperationException("Should not happen. This problem is only solved with the MaterialSupervisor.");
}
- }
-
-
+ }
+
//print scatterer to file
- if(textFile != null) {
- textFile.printStripScat(scatAngle);
- }
-
+ if (textFile != null) {
+ textFile.printStripScat(scatAngle);
+ }
+
//GBLDATA
stripData.setScatterAngle(scatAngle);
-
+
++istrip;
-
-
-
- }
-
- }
-
-
-
- }
-
-
+ }
+ }
+ }
+
private void checkAprimeTruth(MCParticle mcp, List<MCParticle> mcParticles) {
- List<MCParticle> mcp_pair = getAprimeDecayProducts(mcParticles);
-
- if(_debug>0) {
- double invMassTruth = Math.sqrt( Math.pow(mcp_pair.get(0).getEnergy()+mcp_pair.get(1).getEnergy(),2) - VecOp.add(mcp_pair.get(0).getMomentum(), mcp_pair.get(1).getMomentum()).magnitudeSquared() );
- double invMassTruthTrks = getInvMassTracks(TrackUtils.getHTF(mcp_pair.get(0),-1.0*this._B.z()),TrackUtils.getHTF(mcp_pair.get(1),-1.0*this._B.z()));
- System.out.printf("%s: invM = %f\n",this.getClass().getSimpleName(),invMassTruth);
- System.out.printf("%s: invMTracks = %f\n",this.getClass().getSimpleName(),invMassTruthTrks);
- }
-
- // cross-check
- if(!mcp_pair.contains(mcp)) {
- boolean hasBeamElectronParent = false;
- for(MCParticle parent : mcp.getParents()) {
- if(parent.getGeneratorStatus()!=MCParticle.FINAL_STATE && parent.getPDGID()==11 && parent.getMomentum().y()==0.0 && Math.abs(parent.getMomentum().magnitude() - _beamEnergy)<0.01) {
- hasBeamElectronParent = true;
- }
- }
- if(!hasBeamElectronParent) {
- System.out.printf("%s: the matched MC particle is not an A' daughter and not a the recoil electrons!?\n",this.getClass().getSimpleName());
- System.out.printf("%s: %s %d p %s org %s\n",this.getClass().getSimpleName(),mcp.getGeneratorStatus()==MCParticle.FINAL_STATE?"F":"I",mcp.getPDGID(),mcp.getMomentum().toString(),mcp.getOrigin().toString());
- printMCParticles(mcParticles);
- System.exit(1);
- } else {
- if(_debug>0) System.out.printf("%s: the matched MC particle is the recoil electron\n",this.getClass().getSimpleName());
- }
- }
-
- }
-
+ List<MCParticle> mcp_pair = getAprimeDecayProducts(mcParticles);
+
+ if (_debug > 0) {
+ double invMassTruth = Math.sqrt(Math.pow(mcp_pair.get(0).getEnergy() + mcp_pair.get(1).getEnergy(), 2) - VecOp.add(mcp_pair.get(0).getMomentum(), mcp_pair.get(1).getMomentum()).magnitudeSquared());
+ double invMassTruthTrks = getInvMassTracks(TrackUtils.getHTF(mcp_pair.get(0), -1.0 * this._B.z()), TrackUtils.getHTF(mcp_pair.get(1), -1.0 * this._B.z()));
+ System.out.printf("%s: invM = %f\n", this.getClass().getSimpleName(), invMassTruth);
+ System.out.printf("%s: invMTracks = %f\n", this.getClass().getSimpleName(), invMassTruthTrks);
+ }
+
+ // cross-check
+ if (!mcp_pair.contains(mcp)) {
+ boolean hasBeamElectronParent = false;
+ for (MCParticle parent : mcp.getParents()) {
+ if (parent.getGeneratorStatus() != MCParticle.FINAL_STATE && parent.getPDGID() == 11 && parent.getMomentum().y() == 0.0 && Math.abs(parent.getMomentum().magnitude() - _beamEnergy) < 0.01) {
+ hasBeamElectronParent = true;
+ }
+ }
+ if (!hasBeamElectronParent) {
+ System.out.printf("%s: the matched MC particle is not an A' daughter and not a the recoil electrons!?\n", this.getClass().getSimpleName());
+ System.out.printf("%s: %s %d p %s org %s\n", this.getClass().getSimpleName(), mcp.getGeneratorStatus() == MCParticle.FINAL_STATE ? "F" : "I", mcp.getPDGID(), mcp.getMomentum().toString(), mcp.getOrigin().toString());
+ printMCParticles(mcParticles);
+ System.exit(1);
+ } else {
+ if (_debug > 0) {
+ System.out.printf("%s: the matched MC particle is the recoil electron\n", this.getClass().getSimpleName());
+ }
+ }
+ }
+ }
MCParticle getMatchedTruthParticle(Track track) {
boolean debug = false;
-
- Map<MCParticle,Integer> particlesOnTrack = new HashMap<MCParticle,Integer>();
-
- if(debug) System.out.printf("getmatched mc particle from %d tracker hits on the track \n",track.getTrackerHits().size());
-
-
- for(TrackerHit hit : track.getTrackerHits()) {
- List<MCParticle> mcps = ((HelicalTrackHit)hit).getMCParticles();
- if(mcps==null) {
- System.out.printf("%s: warning, this hit (layer %d pos=%s) has no mc particles.\n",this.getClass().getSimpleName(),((HelicalTrackHit)hit).Layer(),((HelicalTrackHit)hit).getCorrectedPosition().toString());
- }
- else {
- if( debug ) System.out.printf("%s: this hit (layer %d pos=%s) has %d mc particles.\n",this.getClass().getSimpleName(),((HelicalTrackHit)hit).Layer(),((HelicalTrackHit)hit).getCorrectedPosition().toString(),mcps.size());
- for(MCParticle mcp : mcps) {
- if( !particlesOnTrack.containsKey(mcp) ) {
+
+ Map<MCParticle, Integer> particlesOnTrack = new HashMap<MCParticle, Integer>();
+
+ if (debug) {
+ System.out.printf("getmatched mc particle from %d tracker hits on the track \n", track.getTrackerHits().size());
+ }
+
+ for (TrackerHit hit : track.getTrackerHits()) {
+ List<MCParticle> mcps = ((HelicalTrackHit) hit).getMCParticles();
+ if (mcps == null) {
+ System.out.printf("%s: warning, this hit (layer %d pos=%s) has no mc particles.\n", this.getClass().getSimpleName(), ((HelicalTrackHit) hit).Layer(), ((HelicalTrackHit) hit).getCorrectedPosition().toString());
+ } else {
+ if (debug) {
+ System.out.printf("%s: this hit (layer %d pos=%s) has %d mc particles.\n", this.getClass().getSimpleName(), ((HelicalTrackHit) hit).Layer(), ((HelicalTrackHit) hit).getCorrectedPosition().toString(), mcps.size());
+ }
+ for (MCParticle mcp : mcps) {
+ if (!particlesOnTrack.containsKey(mcp)) {
particlesOnTrack.put(mcp, 0);
}
int c = particlesOnTrack.get(mcp);
- particlesOnTrack.put(mcp, c+1);
- }
- }
- }
- if(debug) {
- System.out.printf("Track p=[ %f, %f, %f] \n",track.getTrackStates().get(0).getMomentum()[0],track.getTrackStates().get(0).getMomentum()[1],track.getTrackStates().get(0).getMomentum()[1]);
- System.out.printf("FOund %d particles\n",particlesOnTrack.size());
- for(Map.Entry<MCParticle, Integer> entry : particlesOnTrack.entrySet()) {
- System.out.printf("%d hits assigned to %d p=%s \n",entry.getValue(),entry.getKey().getPDGID(),entry.getKey().getMomentum().toString());
- }
- }
- Map.Entry<MCParticle,Integer> maxEntry = null;
- for(Map.Entry<MCParticle,Integer> entry : particlesOnTrack.entrySet()) {
- if ( maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0 ) maxEntry = entry;
+ particlesOnTrack.put(mcp, c + 1);
+ }
+ }
+ }
+ if (debug) {
+ System.out.printf("Track p=[ %f, %f, %f] \n", track.getTrackStates().get(0).getMomentum()[0], track.getTrackStates().get(0).getMomentum()[1], track.getTrackStates().get(0).getMomentum()[1]);
+ System.out.printf("FOund %d particles\n", particlesOnTrack.size());
+ for (Map.Entry<MCParticle, Integer> entry : particlesOnTrack.entrySet()) {
+ System.out.printf("%d hits assigned to %d p=%s \n", entry.getValue(), entry.getKey().getPDGID(), entry.getKey().getMomentum().toString());
+ }
+ }
+ Map.Entry<MCParticle, Integer> maxEntry = null;
+ for (Map.Entry<MCParticle, Integer> entry : particlesOnTrack.entrySet()) {
+ if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0) {
+ maxEntry = entry;
+ }
//if ( maxEntry != null ) {
// if(entry.getValue().compareTo(maxEntry.getValue()) < 0) continue;
//}
//maxEntry = entry;
}
- if(debug) {
- if (maxEntry != null ) {
- System.out.printf("Matched particle with pdgId=%d and mom %s to track with charge %d and momentum [%f %f %f]\n",
- maxEntry.getKey().getPDGID(),maxEntry.getKey().getMomentum().toString(),
- track.getCharge(),track.getTrackStates().get(0).getMomentum()[0],track.getTrackStates().get(0).getMomentum()[1],track.getTrackStates().get(0).getMomentum()[2]);
- } else {
- System.out.printf("No truth particle found on this track\n");
- }
+ if (debug) {
+ if (maxEntry != null) {
+ System.out.printf("Matched particle with pdgId=%d and mom %s to track with charge %d and momentum [%f %f %f]\n",
+ maxEntry.getKey().getPDGID(), maxEntry.getKey().getMomentum().toString(),
+ track.getCharge(), track.getTrackStates().get(0).getMomentum()[0], track.getTrackStates().get(0).getMomentum()[1], track.getTrackStates().get(0).getMomentum()[2]);
+ } else {
+ System.out.printf("No truth particle found on this track\n");
+ }
}
return maxEntry == null ? null : maxEntry.getKey();
}
-
-
- private BasicMatrix getPerParVector(HelicalTrackFit htf) {
- BasicMatrix perPar = new BasicMatrix(1,5);
- if( htf != null) {
- double kappa = -1.0*Math.signum(htf.R())*Constants.fieldConversion*this._B.z()/htf.pT(Math.abs(_B.z()));
- double theta = Math.PI/2.0 - Math.atan(htf.slope());
- perPar.setElement(0,0,kappa);
- perPar.setElement(0,1,theta);
- perPar.setElement(0,2,htf.phi0());
- perPar.setElement(0,3,htf.dca());
- perPar.setElement(0,4,htf.z0());
- }
- return perPar;
-
- }
-
-
-
-
- private BasicMatrix getJacPerToCl(HelicalTrackFit htf) {
- System.out.printf("%s: getJacPerToCl\n",this.getClass().getSimpleName());
- //use propoerly normalized B-field
- Hep3Vector Bnorm = VecOp.mult(Constants.fieldConversion, _B);
- //init jacobian to zero
- BasicMatrix j = new BasicMatrix(5,5);
- initZero(j);
- double lambda = Math.atan(htf.slope());
- double q = Math.signum(htf.R());
- double theta = Math.PI/2.0 - lambda;
- Hep3Vector T = HelixUtils.Direction(htf, 0.);
- Hep3Vector p = VecOp.mult(htf.p(Math.abs(_B.z())), T);
- double pT = htf.pT(Math.abs(_B.z()));
- Hep3Vector H = VecOp.mult(1./(Bnorm.magnitude()), Bnorm);
- Hep3Vector Z = new BasicHep3Vector(0,0,1);
- Hep3Vector J = VecOp.mult(1./VecOp.cross(T,Z).magnitude(), VecOp.cross(T, Z));
- Hep3Vector U = VecOp.mult(-1, J);
- Hep3Vector V = VecOp.cross(T, U);
- double alpha = VecOp.cross(H,T).magnitude();
- Hep3Vector N = VecOp.mult(1./alpha,VecOp.cross(H, T));
- Hep3Vector K = Z;
- double Q = -Bnorm.magnitude()*q/p.magnitude();
- double kappa = -1.0*q*Bnorm.z()/pT;
-
- if (this._debug!=0) {
- System.out.printf("%s: Bnorm=%s mag(Bnorm)=%f\n",this.getClass().getSimpleName(),Bnorm.toString(),Bnorm.magnitude());
- System.out.printf("%s: p=%s |p|=%f pT=%f\n",this.getClass().getSimpleName(),p.toString(),p.magnitude(),pT);
- System.out.printf("%s: q=%f\n",this.getClass().getSimpleName(),q);
- System.out.printf("%s: q/p=%f\n",this.getClass().getSimpleName(),q/p.magnitude());
- System.out.printf("%s: T=%s\n",this.getClass().getSimpleName(),T.toString());
- System.out.printf("%s: H=%s\n",this.getClass().getSimpleName(),H.toString());
- System.out.printf("%s: kappa=%f\n",this.getClass().getSimpleName(),kappa);
- System.out.printf("%s: alpha=%f Q=%f \n",this.getClass().getSimpleName(),alpha,Q);
- System.out.printf("%s: J=%s \n",this.getClass().getSimpleName(),J.toString());
- System.out.printf("%s: V=%s \n",this.getClass().getSimpleName(),V.toString());
- System.out.printf("%s: N=%s \n",this.getClass().getSimpleName(),N.toString());
- System.out.printf("%s: TdotJ=%f \n",this.getClass().getSimpleName(),VecOp.dot(T, J));
- System.out.printf("%s: VdotN=%f \n",this.getClass().getSimpleName(),VecOp.dot(V, N));
- System.out.printf("%s: TdotK=%f \n",this.getClass().getSimpleName(),VecOp.dot(T, K));
- System.out.printf("%s: UdotN=%f \n",this.getClass().getSimpleName(),VecOp.dot(U, N));
- }
-
-
-
-
-
- j.setElement(0,0,-1.0*Math.sin(theta)/Bnorm.z());
-
- j.setElement(0,1,q/(p.magnitude()*Math.tan(theta)));
-
- j.setElement(1,1,-1);
-
- j.setElement(1,3,-alpha*Q*VecOp.dot(T, J)*VecOp.dot(V, N));
-
- j.setElement(1,4,-alpha*Q*VecOp.dot(T, K)*VecOp.dot(V, N));
-
- j.setElement(2,2,1);
-
- j.setElement(2,3,-alpha*Q*VecOp.dot(T,J)*VecOp.dot(U, N)/Math.cos(lambda));
-
- j.setElement(2,4,-alpha*Q*VecOp.dot(T,K)*VecOp.dot(U, N)/Math.cos(lambda));
-
- j.setElement(3,3,-1);
-
- j.setElement(4,4,VecOp.dot(V, K));
-
-
- if(_debug>0) {
- System.out.printf("%s: lambda= J(1,1)=%f * theta + J(1,3)=%f * eps + J(1,4)=%f * z0 \n",
- this.getClass().getSimpleName(),
- j.e(1, 1),j.e(1,3),j.e(1,4));
-
- }
-
-
- return j;
-
- }
-
-
-
-
-
-
+
+// private BasicMatrix getJacPerToCl(HelicalTrackFit htf) {
+// System.out.printf("%s: getJacPerToCl\n", this.getClass().getSimpleName());
+// //use propoerly normalized B-field
+// Hep3Vector Bnorm = VecOp.mult(Constants.fieldConversion, _B);
+// //init jacobian to zero
+// BasicMatrix j = new BasicMatrix(5, 5);
+// initZero(j);
+// double lambda = Math.atan(htf.slope());
+// double q = Math.signum(htf.R());
+// double theta = Math.PI / 2.0 - lambda;
+// Hep3Vector T = HelixUtils.Direction(htf, 0.);
+// Hep3Vector p = VecOp.mult(htf.p(Math.abs(_B.z())), T);
+// double pT = htf.pT(Math.abs(_B.z()));
+// Hep3Vector H = VecOp.mult(1. / (Bnorm.magnitude()), Bnorm);
+// Hep3Vector Z = new BasicHep3Vector(0, 0, 1);
+// Hep3Vector J = VecOp.mult(1. / VecOp.cross(T, Z).magnitude(), VecOp.cross(T, Z));
+// Hep3Vector U = VecOp.mult(-1, J);
+// Hep3Vector V = VecOp.cross(T, U);
+// double alpha = VecOp.cross(H, T).magnitude();
+// Hep3Vector N = VecOp.mult(1. / alpha, VecOp.cross(H, T));
+// Hep3Vector K = Z;
+// double Q = -Bnorm.magnitude() * q / p.magnitude();
+// double kappa = -1.0 * q * Bnorm.z() / pT;
+//
+// if (this._debug != 0) {
+// System.out.printf("%s: Bnorm=%s mag(Bnorm)=%f\n", this.getClass().getSimpleName(), Bnorm.toString(), Bnorm.magnitude());
+// System.out.printf("%s: p=%s |p|=%f pT=%f\n", this.getClass().getSimpleName(), p.toString(), p.magnitude(), pT);
+// System.out.printf("%s: q=%f\n", this.getClass().getSimpleName(), q);
+// System.out.printf("%s: q/p=%f\n", this.getClass().getSimpleName(), q / p.magnitude());
+// System.out.printf("%s: T=%s\n", this.getClass().getSimpleName(), T.toString());
+// System.out.printf("%s: H=%s\n", this.getClass().getSimpleName(), H.toString());
+// System.out.printf("%s: kappa=%f\n", this.getClass().getSimpleName(), kappa);
+// System.out.printf("%s: alpha=%f Q=%f \n", this.getClass().getSimpleName(), alpha, Q);
+// System.out.printf("%s: J=%s \n", this.getClass().getSimpleName(), J.toString());
+// System.out.printf("%s: V=%s \n", this.getClass().getSimpleName(), V.toString());
+// System.out.printf("%s: N=%s \n", this.getClass().getSimpleName(), N.toString());
+// System.out.printf("%s: TdotJ=%f \n", this.getClass().getSimpleName(), VecOp.dot(T, J));
+// System.out.printf("%s: VdotN=%f \n", this.getClass().getSimpleName(), VecOp.dot(V, N));
+// System.out.printf("%s: TdotK=%f \n", this.getClass().getSimpleName(), VecOp.dot(T, K));
+// System.out.printf("%s: UdotN=%f \n", this.getClass().getSimpleName(), VecOp.dot(U, N));
+// }
+//
+// j.setElement(0, 0, -1.0 * Math.sin(theta) / Bnorm.z());
+//
+// j.setElement(0, 1, q / (p.magnitude() * Math.tan(theta)));
+//
+// j.setElement(1, 1, -1);
+//
+// j.setElement(1, 3, -alpha * Q * VecOp.dot(T, J) * VecOp.dot(V, N));
+//
+// j.setElement(1, 4, -alpha * Q * VecOp.dot(T, K) * VecOp.dot(V, N));
+//
+// j.setElement(2, 2, 1);
+//
+// j.setElement(2, 3, -alpha * Q * VecOp.dot(T, J) * VecOp.dot(U, N) / Math.cos(lambda));
+//
+// j.setElement(2, 4, -alpha * Q * VecOp.dot(T, K) * VecOp.dot(U, N) / Math.cos(lambda));
+//
+// j.setElement(3, 3, -1);
+//
+// j.setElement(4, 4, VecOp.dot(V, K));
+//
+// if (_debug > 0) {
+// System.out.printf("%s: lambda= J(1,1)=%f * theta + J(1,3)=%f * eps + J(1,4)=%f * z0 \n",
+// this.getClass().getSimpleName(),
+// j.e(1, 1), j.e(1, 3), j.e(1, 4));
+//
+// }
+//
+// return j;
+//
+// }
private void initUnit(BasicMatrix mat) {
- for(int row=0;row!=mat.getNRows();row++) {
- for(int col=0;col!=mat.getNColumns();col++) {
- if(row!=col) mat.setElement(row, col, 0);
- else mat.setElement(row, col, 1);
+ for (int row = 0; row != mat.getNRows(); row++) {
+ for (int col = 0; col != mat.getNColumns(); col++) {
+ if (row != col) {
+ mat.setElement(row, col, 0);
+ } else {
+ mat.setElement(row, col, 1);
+ }
}
}
}
private void initZero(BasicMatrix mat) {
- for(int row=0;row!=mat.getNRows();row++) {
- for(int col=0;col!=mat.getNColumns();col++) {
+ for (int row = 0; row != mat.getNRows(); row++) {
+ for (int col = 0; col != mat.getNColumns(); col++) {
mat.setElement(row, col, 0);
}
}
}
-
-
/**
- * Transform MCParticle into a Helix object.
- * Note that it produces the helix parameters at nominal x=0 and assumes that there is no field at x<0
- *
+ * Transform MCParticle into a Helix object. Note that it produces the helix
+ * parameters at nominal x=0 and assumes that there is no field at x<0
+ *
* @param mcp MC particle to be transformed
* @return helix object based on the MC particle
*/
@@ -771,82 +733,87 @@
// HelicalTrackFit htf = new HelicalTrackFit(par, cov, new double[2], new int[2], null, null);
// return htf;
// }
-
private double truthTrackFitChi2(PerigeeParams perPar, PerigeeParams perParTruth, SymmetricMatrix covariance) {
//re-shuffle the param vector to match the covariance order of parameters
- BasicMatrix p = new BasicMatrix(1,5);
+ BasicMatrix p = new BasicMatrix(1, 5);
p.setElement(0, 0, perPar.getD0());
p.setElement(0, 1, perPar.getPhi());
p.setElement(0, 2, perPar.getKappa());
p.setElement(0, 0, perPar.getZ0());
- p.setElement(0, 4, Math.tan(Math.PI/2.0-perPar.getTheta()));
- BasicMatrix pt = new BasicMatrix(1,5);
+ p.setElement(0, 4, Math.tan(Math.PI / 2.0 - perPar.getTheta()));
+ BasicMatrix pt = new BasicMatrix(1, 5);
pt.setElement(0, 0, perParTruth.getD0());
pt.setElement(0, 1, perParTruth.getPhi());
pt.setElement(0, 2, perParTruth.getKappa());
pt.setElement(0, 0, perParTruth.getZ0());
- pt.setElement(0, 4, Math.tan(Math.PI/2.0-perParTruth.getTheta()));
+ pt.setElement(0, 4, Math.tan(Math.PI / 2.0 - perParTruth.getTheta()));
Matrix error_matrix = MatrixOp.inverse(covariance);
BasicMatrix res = (BasicMatrix) MatrixOp.sub(p, pt);
- BasicMatrix chi2 = (BasicMatrix) MatrixOp.mult(res,MatrixOp.mult(error_matrix, MatrixOp.transposed(res)));
- if(chi2.getNColumns()!=1 ||chi2.getNRows()!=1) {
+ BasicMatrix chi2 = (BasicMatrix) MatrixOp.mult(res, MatrixOp.mult(error_matrix, MatrixOp.transposed(res)));
+ if (chi2.getNColumns() != 1 || chi2.getNRows() != 1) {
throw new RuntimeException("matrix dim is screwed up!");
}
return chi2.e(0, 0);
}
-
-
private List<MCParticle> getAprimeDecayProducts(List<MCParticle> mcParticles) {
List<MCParticle> pair = new ArrayList<MCParticle>();
- for(MCParticle mcp : mcParticles) {
- if(mcp.getGeneratorStatus()!=MCParticle.FINAL_STATE) continue;
+ for (MCParticle mcp : mcParticles) {
+ if (mcp.getGeneratorStatus() != MCParticle.FINAL_STATE) {
+ continue;
+ }
boolean hasAprimeParent = false;
- for(MCParticle parent : mcp.getParents()) {
- if(Math.abs(parent.getPDGID())==622) hasAprimeParent = true;
- }
- if(hasAprimeParent) pair.add(mcp);
- }
- if(pair.size()!=2) {
- System.out.printf("%s: ERROR this event has %d mcp with 622 as parent!!?? \n",this.getClass().getSimpleName(),pair.size());
+ for (MCParticle parent : mcp.getParents()) {
+ if (Math.abs(parent.getPDGID()) == 622) {
+ hasAprimeParent = true;
+ }
+ }
+ if (hasAprimeParent) {
+ pair.add(mcp);
+ }
+ }
+ if (pair.size() != 2) {
+ System.out.printf("%s: ERROR this event has %d mcp with 622 as parent!!?? \n", this.getClass().getSimpleName(), pair.size());
this.printMCParticles(mcParticles);
System.exit(1);
}
- if( Math.abs(pair.get(0).getPDGID()) != 11 || Math.abs(pair.get(1).getPDGID()) != 11 ) {
- System.out.printf("%s: ERROR decay products are not e+e-? \n",this.getClass().getSimpleName());
+ if (Math.abs(pair.get(0).getPDGID()) != 11 || Math.abs(pair.get(1).getPDGID()) != 11) {
+ System.out.printf("%s: ERROR decay products are not e+e-? \n", this.getClass().getSimpleName());
this.printMCParticles(mcParticles);
System.exit(1);
}
- if(pair.get(0).getPDGID()*pair.get(1).getPDGID() > 0) {
- System.out.printf("%s: ERROR decay products have the same sign? \n",this.getClass().getSimpleName());
+ if (pair.get(0).getPDGID() * pair.get(1).getPDGID() > 0) {
+ System.out.printf("%s: ERROR decay products have the same sign? \n", this.getClass().getSimpleName());
this.printMCParticles(mcParticles);
System.exit(1);
}
return pair;
-
- }
-
- private void printMCParticles(List<MCParticle> mcParticles) {
- System.out.printf("%s: printMCParticles \n",this.getClass().getSimpleName());
- System.out.printf("%s: %d mc particles \n",this.getClass().getSimpleName(),mcParticles.size());
- for(MCParticle mcp : mcParticles) {
- if(mcp.getGeneratorStatus()!=MCParticle.FINAL_STATE) continue;
- System.out.printf("\n%s: (%s) %d p %s org %s %s \n",this.getClass().getSimpleName(),
- mcp.getGeneratorStatus()==MCParticle.FINAL_STATE?"F":"I",mcp.getPDGID(),mcp.getMomentum().toString(),mcp.getOrigin().toString(),
- mcp.getParents().size()>0?"parents:":"");
- for(MCParticle parent : mcp.getParents()) {
- System.out.printf("%s: (%s) %d p %s org %s %s \n",this.getClass().getSimpleName(),
- parent.getGeneratorStatus()==MCParticle.FINAL_STATE?"F":"I",parent.getPDGID(),parent.getMomentum().toString(),parent.getOrigin().toString(),
- parent.getParents().size()>0?"parents:":"");
- for(MCParticle grparent : parent.getParents()) {
- System.out.printf("%s: (%s) %d p %s org %s %s \n",this.getClass().getSimpleName(),
- grparent.getGeneratorStatus()==MCParticle.FINAL_STATE?"F":"I",grparent.getPDGID(),grparent.getMomentum().toString(),grparent.getOrigin().toString(),
- grparent.getParents().size()>0?"parents:":"");
- }
-
- }
- }
- }
+
+ }
+
+ private void printMCParticles(List<MCParticle> mcParticles) {
+ System.out.printf("%s: printMCParticles \n", this.getClass().getSimpleName());
+ System.out.printf("%s: %d mc particles \n", this.getClass().getSimpleName(), mcParticles.size());
+ for (MCParticle mcp : mcParticles) {
+ if (mcp.getGeneratorStatus() != MCParticle.FINAL_STATE) {
+ continue;
+ }
+ System.out.printf("\n%s: (%s) %d p %s org %s %s \n", this.getClass().getSimpleName(),
+ mcp.getGeneratorStatus() == MCParticle.FINAL_STATE ? "F" : "I", mcp.getPDGID(), mcp.getMomentum().toString(), mcp.getOrigin().toString(),
+ mcp.getParents().size() > 0 ? "parents:" : "");
+ for (MCParticle parent : mcp.getParents()) {
+ System.out.printf("%s: (%s) %d p %s org %s %s \n", this.getClass().getSimpleName(),
+ parent.getGeneratorStatus() == MCParticle.FINAL_STATE ? "F" : "I", parent.getPDGID(), parent.getMomentum().toString(), parent.getOrigin().toString(),
+ parent.getParents().size() > 0 ? "parents:" : "");
+ for (MCParticle grparent : parent.getParents()) {
+ System.out.printf("%s: (%s) %d p %s org %s %s \n", this.getClass().getSimpleName(),
+ grparent.getGeneratorStatus() == MCParticle.FINAL_STATE ? "F" : "I", grparent.getPDGID(), grparent.getMomentum().toString(), grparent.getOrigin().toString(),
+ grparent.getParents().size() > 0 ? "parents:" : "");
+ }
+
+ }
+ }
+ }
private double getInvMassTracks(HelicalTrackFit htf1, HelicalTrackFit htf2) {
double p1 = htf1.p(this._B.magnitude());
@@ -854,55 +821,77 @@
Hep3Vector p1vec = VecOp.mult(p1, HelixUtils.Direction(htf1, 0));
Hep3Vector p2vec = VecOp.mult(p2, HelixUtils.Direction(htf2, 0));
double me = 0.000510998910;
- double E1 = Math.sqrt(p1*p1 + me*me);
- double E2 = Math.sqrt(p2*p2 + me*me);
+ double E1 = Math.sqrt(p1 * p1 + me * me);
+ double E2 = Math.sqrt(p2 * p2 + me * me);
//System.out.printf("p1 %f %s E1 %f\n",p1,p1vec.toString(),E1);
//System.out.printf("p2 %f %s E2 %f\n",p2,p2vec.toString(),E2);
- return Math.sqrt( Math.pow(E1+E2,2) - VecOp.add(p1vec, p2vec).magnitudeSquared() );
- }
-
-
+ return Math.sqrt(Math.pow(E1 + E2, 2) - VecOp.add(p1vec, p2vec).magnitudeSquared());
+ }
+
+ private BasicMatrix getPerParVector(HelicalTrackFit htf) {
+ BasicMatrix perPar = new BasicMatrix(1, 5);
+ if (htf != null) {
+ double kappa = -1.0 * Math.signum(htf.R()) * Constants.fieldConversion * this._B.z() / htf.pT(Math.abs(_B.z()));
+ double theta = Math.PI / 2.0 - Math.atan(htf.slope());
+ perPar.setElement(0, 0, kappa);
+ perPar.setElement(0, 1, theta);
+ perPar.setElement(0, 2, htf.phi0());
+ perPar.setElement(0, 3, htf.dca());
+ perPar.setElement(0, 4, htf.z0());
+ }
+ return perPar;
+
+ }
+
public class PerigeeParams {
+
private final BasicMatrix _params;
private PerigeeParams(HelicalTrackFit htf) {
_params = GBLOutput.this.getPerParVector(htf);
}
+
public BasicMatrix getParams() {
return _params;
}
+
public double getKappa() {
return _params.e(0, 0);
}
+
public double getTheta() {
return _params.e(0, 1);
}
+
public double getPhi() {
return _params.e(0, 2);
}
+
public double getD0() {
return _params.e(0, 3);
}
+
public double getZ0() {
return _params.e(0, 4);
}
}
/**
- * Computes the projection matrix from the perigee XY plane variables
- * dca and z0 into the curvilinear xT,yT,zT frame (U,V,T)
+ * Computes the projection matrix from the perigee XY plane variables dca
+ * and z0 into the curvilinear xT,yT,zT frame (U,V,T)
+ *
* @param htf input helix to find the track direction
* @return 3x3 projection matrix
*/
Hep3Matrix getPerToClPrj(HelicalTrackFit htf) {
- Hep3Vector Z = new BasicHep3Vector(0,0,1);
+ Hep3Vector Z = new BasicHep3Vector(0, 0, 1);
Hep3Vector T = HelixUtils.Direction(htf, 0.);
- Hep3Vector J = VecOp.mult(1./VecOp.cross(T,Z).magnitude(), VecOp.cross(T, Z));
+ Hep3Vector J = VecOp.mult(1. / VecOp.cross(T, Z).magnitude(), VecOp.cross(T, Z));
Hep3Vector K = Z;
Hep3Vector U = VecOp.mult(-1, J);
Hep3Vector V = VecOp.cross(T, U);
Hep3Vector I = VecOp.cross(J, K);
-
+
BasicHep3Matrix trans = new BasicHep3Matrix();
trans.setElement(0, 0, VecOp.dot(I, U));
trans.setElement(0, 1, VecOp.dot(J, U));
@@ -914,67 +903,71 @@
trans.setElement(2, 1, VecOp.dot(J, T));
trans.setElement(2, 2, VecOp.dot(K, T));
return trans;
-
- }
-
-
-
-
- public class ClParams {
- private BasicMatrix _params = new BasicMatrix(1,5);
+
+ }
+
+ public class ClParams {
+
+ private BasicMatrix _params = new BasicMatrix(1, 5);
+
private ClParams(HelicalTrackFit htf) {
-
- if (htf == null) return;
+
+ if (htf == null) {
+ return;
+ }
Hep3Matrix perToClPrj = GBLOutput.this.getPerToClPrj(htf);
-
+
double d0 = -1 * htf.dca(); //sign convention for curvilinear frame
double z0 = htf.z0();
- Hep3Vector vecPer = new BasicHep3Vector(0.,d0,z0);
+ Hep3Vector vecPer = new BasicHep3Vector(0., d0, z0);
//System.out.printf("%s: vecPer=%s\n",this.getClass().getSimpleName(),vecPer.toString());
-
+
Hep3Vector vecCl = VecOp.mult(perToClPrj, vecPer);
//System.out.printf("%s: vecCl=%s\n",this.getClass().getSimpleName(),vecCl.toString());
double xT = vecCl.x();
double yT = vecCl.y();
//double zT = vecCl.z();
-
+
Hep3Vector T = HelixUtils.Direction(htf, 0.);
Hep3Vector p = VecOp.mult(htf.p(Math.abs(_B.z())), T);
double lambda = Math.atan(htf.slope());
double q = Math.signum(htf.R());
- double qOverP = q/p.magnitude();
+ double qOverP = q / p.magnitude();
double phi = htf.phi0();
-
+
_params.setElement(0, 0, qOverP);
_params.setElement(0, 1, lambda);
_params.setElement(0, 2, phi);
_params.setElement(0, 3, xT);
_params.setElement(0, 4, yT);
-
+
}
public BasicMatrix getParams() {
return _params;
}
-
+
double getLambda() {
- return _params.e(0,1);
- }
+ return _params.e(0, 1);
+ }
+
double getQoverP() {
- return _params.e(0,0);
- }
+ return _params.e(0, 0);
+ }
+
double getPhi() {
- return _params.e(0,2);
- }
+ return _params.e(0, 2);
+ }
+
double getXt() {
- return _params.e(0,3);
- }
+ return _params.e(0, 3);
+ }
+
double getYt() {
- return _params.e(0,4);
- }
-
- }
-
+ return _params.e(0, 4);
+ }
+
+ }
}
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 Fri Aug 28 16:36:48 2015
@@ -25,25 +25,24 @@
import org.lcsim.recon.tracking.seedtracker.SeedTrack;
import org.lcsim.util.log.LogUtil;
-
/**
- * A class that creates track objects from fitted GBL trajectories and adds them into the event.
- *
+ * A class that creates track objects from fitted GBL trajectories and adds them
+ * into the event.
+ *
* @author Per Hansson Adrian <[log in to unmask]>
*
*/
public class MakeGblTracks {
-
private String _TrkCollectionName = "GblTracks";
private static Logger logger = LogUtil.create(MakeGblTracks.class, new BasicLogFormatter());
-
+
/**
* Creates a new instance of MakeTracks.
*/
public MakeGblTracks() {
//logger = Logger.getLogger(getClass().getName());
- //logger.setUseParentHandlers(false);
+ //logger.setUseParentHandlers(false);
//Handler handler = new StreamHandler(System.out, new SimpleFormatter());
//logger.addHandler(handler);
logger.setLevel(Level.INFO);
@@ -54,25 +53,25 @@
// }
}
-
+
/**
* Process a Gbl track and store it into the event
+ *
* @param event event header
* @param track Gbl trajectory
* @param seed SeedTrack
* @param bfield magnetic field (used to turn curvature into momentum)
*/
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) {
-
-
+
+ for (FittedGblTrajectory fittedTraj : gblTrajectories) {
+
// Initialize the reference point to the origin
- double[] ref = new double[] {0., 0., 0.};
+ double[] ref = new double[]{0., 0., 0.};
SeedTrack seedTrack = (SeedTrack) fittedTraj.get_seed();
SeedCandidate trackseed = seedTrack.getSeedCandidate();
@@ -86,12 +85,12 @@
// Retrieve the helix and save the relevant bits of helix info
HelicalTrackFit helix = trackseed.getHelix();
- double gblParameters[] = getGblCorrectedHelixParameters(helix,fittedTraj, bfield);
+ double gblParameters[] = getGblCorrectedHelixParameters(helix, fittedTraj, bfield);
trk.setTrackParameters(gblParameters, bfield); // Sets first TrackState.
//TODO Use GBL covariance matrix
//SymmetricMatrix gblCovariance = getGblCorrectedHelixCovariance(helix, fittedTraj, bfield);
trk.setCovarianceMatrix(helix.covariance()); // Modifies first TrackState.
- trk.setChisq( fittedTraj.get_chi2());
+ trk.setChisq(fittedTraj.get_chi2());
trk.setNDF(fittedTraj.get_ndf());
// Flag that the fit was successful and set the reference point
@@ -107,22 +106,21 @@
// Check the track - hook for plugging in external constraint
//if ((_trackCheck != null) && (! _trackCheck.checkTrack(trk))) continue;
-
// Add the track to the list of tracks
tracks.add((Track) trk);
- 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(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: %.10f -> %.10f 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;
+ int flag = 1 << LCIOConstants.TRBIT_HITS;
event.put(_TrkCollectionName, tracks, Track.class, flag);
return;
@@ -130,6 +128,7 @@
/**
* Compute the track fit covariance matrix
+ *
* @param helix - original seed track
* @param traj - fitted GBL trajectory
* @return covariance matrix.
@@ -142,21 +141,22 @@
/**
* Compute the updated helix parameters.
+ *
* @param helix - original seed track
* @param traj - fitted GBL trajectory
* @return corrected parameters.
*/
private double[] getGblCorrectedHelixParameters(HelicalTrackFit helix, FittedGblTrajectory traj, double bfield) {
-
+
// get seed helix parameters
double d0 = helix.dca();
double z0 = helix.z0();
double phi0 = helix.phi0();
- double slope = helix.slope();
+ double lambda = Math.atan(helix.slope());
double p = helix.p(bfield);
double q = traj.get_seed().getCharge();
- double qOverP = q/p;
-
+ double qOverP = q / p;
+
// get corrections from GBL fit
Vector locPar = new Vector(5);
SymMatrix locCov = new SymMatrix(5);
@@ -166,53 +166,49 @@
double yTCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.YT.getValue());
double xTPrimeCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.XTPRIME.getValue());
double yTPrimeCorr = locPar.get(FittedGblTrajectory.GBLPARIDX.YTPRIME.getValue());
-
- logger.info((slope>0?"top: ":"bot ") + "qOverPCorr " + qOverPCorr + " xTCorr " + xTCorr + " yTCorr " + yTCorr + " xtPrimeCorr " + xTPrimeCorr + " yTPrimeCorr " + yTPrimeCorr);
-
+
+ logger.info((helix.slope() > 0 ? "top: " : "bot ") + "qOverPCorr " + qOverPCorr + " xTCorr " + xTCorr + " yTCorr " + yTCorr + " xtPrimeCorr " + xTPrimeCorr + " yTPrimeCorr " + yTPrimeCorr);
+
// calculate new d0 and z0
Hep3Matrix perToClPrj = traj.get_track_data().getPrjPerToCl();
Hep3Matrix clToPerPrj = VecOp.inverse(perToClPrj);
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_corr = -1.0 * corrPer.y(); // correct for different sign convention of d0 in curvilinear frame
double d0_gbl = d0 + d0_corr;
-
+
//z0
double z0_corr = corrPer.z();
double z0_gbl = z0 + z0_corr;
-
+
//calculate new phi0
double phi0_gbl = phi0 + xTPrimeCorr;
-
+
//calculate new slope
- double lambda_gbl = Math.atan(slope) + yTPrimeCorr;
- double slope_gbl = Math.tan( lambda_gbl );
+ double lambda_gbl = lambda + yTPrimeCorr;
+ double slope_gbl = Math.tan(lambda_gbl);
// calculate new curvature
-
double qOverP_gbl = qOverP + qOverPCorr;
- double pt_gbl = Math.abs(1.0/qOverP_gbl) * Math.sin((Math.PI/2.0-lambda_gbl));
+ double pt_gbl = Math.abs(1.0 / qOverP_gbl) * Math.sin((Math.PI / 2.0 - lambda_gbl));
double C_gbl = Constants.fieldConversion * bfield / pt_gbl;
//make sure sign is not changed
- C_gbl = Math.signum(helix.curvature())*Math.abs(C_gbl);
-
- logger.info("qOverP="+qOverP+" qOverPCorr="+qOverPCorr+" qOverP_gbl="+qOverP_gbl+" ==> pGbl="+1.0/qOverP_gbl);
-
-
+ C_gbl = Math.signum(helix.curvature()) * Math.abs(C_gbl);
+
+ logger.info("qOverP=" + qOverP + " qOverPCorr=" + qOverPCorr + " qOverP_gbl=" + qOverP_gbl + " ==> pGbl=" + 1.0 / qOverP_gbl);
+
double parameters_gbl[] = new double[5];
parameters_gbl[HelicalTrackFit.dcaIndex] = d0_gbl;
- parameters_gbl[HelicalTrackFit.z0Index] = z0_gbl;
+ parameters_gbl[HelicalTrackFit.z0Index] = z0_gbl;
parameters_gbl[HelicalTrackFit.curvatureIndex] = C_gbl;
parameters_gbl[HelicalTrackFit.slopeIndex] = slope_gbl;
parameters_gbl[HelicalTrackFit.phi0Index] = phi0_gbl;
return parameters_gbl;
}
-
+
public void setTrkCollectionName(String name) {
_TrkCollectionName = name;
}
-
-
}
|