hps-java/src/main/java/org/lcsim/hps/users/phansson
diff -u -r1.5 -r1.6
--- TwoTrackAnlysis.java 16 Jan 2013 22:24:40 -0000 1.5
+++ TwoTrackAnlysis.java 19 Jan 2013 00:55:04 -0000 1.6
@@ -63,6 +63,8 @@
private IPlotter _plotterParticleVertex;
private IPlotter _plotterTrackVertex;
private IPlotter _plotterNhits;
+ private IPlotter _plotterRes;
+ private IPlotter _plotterResAll;
private IHistogram2D _vtxpos_xy;
private IHistogram1D _vtxpos_x;
private IHistogram1D _vtxpos_y;
@@ -77,6 +79,23 @@
private IHistogram1D _layershit;
private IHistogram1D _layershit_vtxpospos;
private IHistogram1D _layershit_vtxposneg;
+ private IHistogram1D _trk1_res1_z;
+ private IHistogram1D _trk2_res1_z;
+ private IHistogram1D _trk1_res1_y;
+ private IHistogram1D _trk2_res1_y;
+ private IHistogram1D _trk1_res2_z;
+ private IHistogram1D _trk2_res2_z;
+ private IHistogram1D _trk1_res2_y;
+ private IHistogram1D _trk2_res2_y;
+ private IHistogram1D _trk1_res1_z_all;
+ private IHistogram1D _trk2_res1_z_all;
+ private IHistogram1D _trk1_res1_y_all;
+ private IHistogram1D _trk2_res1_y_all;
+ private IHistogram1D _trk1_res2_z_all;
+ private IHistogram1D _trk2_res2_z_all;
+ private IHistogram1D _trk1_res2_y_all;
+ private IHistogram1D _trk2_res2_y_all;
+
@@ -145,6 +164,29 @@
}
+
+ //DEBUG
+ {
+ for(Track trk : tracklist) {
+ SeedTrack st1 = (SeedTrack) trk;
+ HelicalTrackFit helix = st1.getSeedCandidate().getHelix();
+ for(TrackerHit hit: trk.getTrackerHits()) {
+ HelicalTrackHit hth = (HelicalTrackHit) hit;
+ Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hth, helix, true);
+ //DEBUG histos
+ if(hth.Layer()==1) {
+ _trk1_res1_z_all.fill(res.get("resz"));
+ _trk1_res1_y_all.fill(res.get("resy"));
+ }
+ if(hth.Layer()==3) {
+ _trk1_res2_z_all.fill(res.get("resz"));
+ _trk1_res2_y_all.fill(res.get("resy"));
+ }
+ }
+ }
+ }
+
+
if(tracklist.size()!=2) {
return;
}
@@ -294,12 +336,24 @@
br_line+="e_px/F:e_py/F:e_pz/F:p_px/F:p_py/F:p_pz/F:";
br_line+="trk1_q/I:trk1_chi2/F:trk1_px/F:trk1_py/F:trk1_pz/F:trk1_nhits/I:";
for(int iLayer=1;iLayer<=5;++iLayer) br_line+="trk1_hit"+iLayer+"_x/F:"+"trk1_hit"+iLayer+"_y/F:"+"trk1_hit"+iLayer+"_z/F:";
- for(int iLayer=1;iLayer<=5;++iLayer) br_line+="trk1_res"+iLayer+"_x/F:"+"trk1_res"+iLayer+"_y/F:"+"trk1_res"+iLayer+"_z/F:";
+ for(int iLayer=1;iLayer<=5;++iLayer) {
+ br_line+="trk1_res"+iLayer+"_x/F:"+"trk1_res"+iLayer+"_y/F:"+"trk1_res"+iLayer+"_z/F:";
+ br_line+="trk1_eres"+iLayer+"_x/F:"+"trk1_eres"+iLayer+"_y/F:"+"trk1_eres"+iLayer+"_z/F:";
+ br_line+="trk1_drdphi"+iLayer+"/F:"+"trk1_msdrphi"+iLayer+"/F:";
+ br_line+="trk1_dr"+iLayer+"/F:"+"trk1_slope"+iLayer+"/F:";
+
+ }
for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk1_strip"+iLayer+"_u/F:";
for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk1_strip"+iLayer+"_n/F:";
br_line+="trk2_q/I:trk2_chi2/F:trk2_px/F:trk2_py/F:trk2_pz/F:trk2_nhits/I:";
for(int iLayer=1;iLayer<=5;++iLayer) br_line+="trk2_hit"+iLayer+"_x/F:"+"trk2_hit"+iLayer+"_y/F:"+"trk2_hit"+iLayer+"_z/F:";
- for(int iLayer=1;iLayer<=5;++iLayer) br_line+="trk2_res"+iLayer+"_x/F:"+"trk2_res"+iLayer+"_y/F:"+"trk2_res"+iLayer+"_z/F:";
+ for(int iLayer=1;iLayer<=5;++iLayer) {
+ br_line+="trk2_res"+iLayer+"_x/F:"+"trk2_res"+iLayer+"_y/F:"+"trk2_res"+iLayer+"_z/F:";
+ br_line+="trk2_eres"+iLayer+"_x/F:"+"trk2_eres"+iLayer+"_y/F:"+"trk2_eres"+iLayer+"_z/F:";
+ br_line+="trk2_drdphi"+iLayer+"/F:"+"trk2_msdrphi"+iLayer+"/F:";
+ br_line+="trk2_dr"+iLayer+"/F:"+"trk2_slope"+iLayer+"/F:";
+
+ }
for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk2_strip"+iLayer+"_u/F:";
for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk2_strip"+iLayer+"_n/F:";
br_line+="vtx_truth_x/F:vtx_truth_y/F:vtx_truth_z/F:";
@@ -343,8 +397,26 @@
if (hitOnLayer != null) {
Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hitOnLayer, helix1, true);
printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("resy"),res.get("resz"));
+ printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("erry"),res.get("errz"));
+ printWriter.format("%5.5f %5.5f ", res.get("drphi"),res.get("msdrphi"));
+ printWriter.format("%5.5f %5.5f ", res.get("dr"),res.get("slope"));
+
+ //DEBUG histos
+ if(iLayer==0) {
+ _trk1_res1_z.fill(res.get("resz"));
+ _trk1_res1_y.fill(res.get("resy"));
+ }
+ if(iLayer==1) {
+ _trk1_res2_z.fill(res.get("resz"));
+ _trk1_res2_y.fill(res.get("resy"));
+ }
+ }
+ else {
+ printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9, -9999999.9, -9999999.9);
+ printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9, -9999999.9, -9999999.9);
+ printWriter.format("%5.5f %5.5f ", -9999999.9, -9999999.9);
+ printWriter.format("%5.5f %5.5f ", -9999999.9, -9999999.9);
}
- else printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9, -9999999.9, -9999999.9);
}
List<HelicalTrackHit> stereoHits = new ArrayList<HelicalTrackHit>();
if(event.hasCollection(HelicalTrackHit.class, stereoHitCollectionName)) {
@@ -380,8 +452,27 @@
if (hitOnLayer != null) {
Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hitOnLayer, helix2, true);
printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("resy"),res.get("resz"));
+ printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("erry"),res.get("errz"));
+ printWriter.format("%5.5f %5.5f ", res.get("drphi"),res.get("msdrphi"));
+ printWriter.format("%5.5f %5.5f ", res.get("dr"),res.get("slope"));
+
+ //DEBUG histos
+ if(iLayer==0) {
+ _trk1_res1_z.fill(res.get("resz"));
+ _trk1_res1_y.fill(res.get("resy"));
+ }
+ if(iLayer==1) {
+ _trk1_res2_z.fill(res.get("resz"));
+ _trk1_res2_y.fill(res.get("resy"));
+ }
+
+ }
+ else {
+ printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9, -9999999.9, -9999999.9);
+ printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9, -9999999.9, -9999999.9);
+ printWriter.format("%5.5f %5.5f ", -9999999.9, -9999999.9);
+ printWriter.format("%5.5f %5.5f ", -9999999.9, -9999999.9);
}
- else printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9, -9999999.9, -9999999.9);
}
for(int iLayer=1;iLayer<=10;++iLayer) {
HelicalTrackStrip strip=null;
@@ -528,7 +619,23 @@
_layershit = aida.histogram1D("Layers hit", 5, 1, 6);
_layershit_vtxpospos = aida.histogram1D("Layers hit pos vtx", 5, 1, 6);
_layershit_vtxposneg = aida.histogram1D("Layers hit neg vtx", 5, 1, 6);
-
+ _trk1_res1_z = aida.histogram1D("Track1 layer1 residual z", 50,-20,20);
+ _trk2_res1_z = aida.histogram1D("Track2 layer1 residual z", 50,-20,20);
+ _trk1_res1_y = aida.histogram1D("Track1 layer1 residual y", 50,-20,20);
+ _trk2_res1_y = aida.histogram1D("Track2 layer1 residual y", 50,-20,20);
+ _trk1_res2_z = aida.histogram1D("Track1 layer2 residual z", 50,-20,20);
+ _trk2_res2_z = aida.histogram1D("Track2 layer2 residual z", 50,-20,20);
+ _trk1_res2_y = aida.histogram1D("Track1 layer2 residual y", 50,-20,20);
+ _trk2_res2_y = aida.histogram1D("Track2 layer2 residual y", 50,-20,20);
+
+ _trk1_res1_z_all = aida.histogram1D("Track1 layer1 residual z all", 50,-20,20);
+ _trk2_res1_z_all = aida.histogram1D("Track2 layer1 residual z all", 50,-20,20);
+ _trk1_res1_y_all = aida.histogram1D("Track1 layer1 residual y all", 50,-20,20);
+ _trk2_res1_y_all = aida.histogram1D("Track2 layer1 residual y all", 50,-20,20);
+ _trk1_res2_z_all = aida.histogram1D("Track1 layer2 residual z all", 50,-20,20);
+ _trk2_res2_z_all = aida.histogram1D("Track2 layer2 residual z all", 50,-20,20);
+ _trk1_res2_y_all = aida.histogram1D("Track1 layer2 residual y all", 50,-20,20);
+ _trk2_res2_y_all = aida.histogram1D("Track2 layer2 residual y all", 50,-20,20);
_plotterTrackVertex = aida.analysisFactory().createPlotterFactory().create();
_plotterTrackVertex.createRegions(2,2);
@@ -556,26 +663,74 @@
_plotterNhits.region(1).plot(this._layershit_vtxposneg,"mode=overlay");
_plotterNhits.region(1).plot(this._layershit_vtxpospos,"mode=overlay");
_plotterNhits.region(1).style().dataStyle().fillStyle().setVisible(false);
+ _plotterRes = aida.analysisFactory().createPlotterFactory().create();
+ _plotterRes.createRegions(2,2);
+ _plotterRes.region(0).plot(this._trk1_res1_z);
+ _plotterRes.region(0).plot(this._trk2_res1_z,"mode=overlay");
+ _plotterRes.region(1).plot(this._trk1_res2_z);
+ _plotterRes.region(1).plot(this._trk2_res2_z,"mode=overlay");
+ _plotterRes.region(2).plot(this._trk1_res1_y);
+ _plotterRes.region(2).plot(this._trk2_res1_y,"mode=overlay");
+ _plotterRes.region(3).plot(this._trk1_res2_y);
+ _plotterRes.region(3).plot(this._trk2_res2_y,"mode=overlay");
+ _plotterResAll = aida.analysisFactory().createPlotterFactory().create();
+ _plotterResAll.createRegions(2,2);
+ _plotterResAll.region(0).plot(this._trk1_res1_z_all);
+ _plotterResAll.region(0).plot(this._trk2_res1_z_all,"mode=overlay");
+ _plotterResAll.region(1).plot(this._trk1_res2_z_all);
+ _plotterResAll.region(1).plot(this._trk2_res2_z_all,"mode=overlay");
+ _plotterResAll.region(2).plot(this._trk1_res1_y_all);
+ _plotterResAll.region(2).plot(this._trk2_res1_y_all,"mode=overlay");
+ _plotterResAll.region(3).plot(this._trk1_res2_y_all);
+ _plotterResAll.region(3).plot(this._trk2_res2_y_all,"mode=overlay");
_plotterParticleVertex.setTitle("MC particle Vertex");
_plotterTrackVertex.setTitle("Two Track Vertex");
_plotterNhits.setTitle("Hits on track");
+ _plotterRes.setTitle("Track Residuals");
+ _plotterRes.setTitle("Track Residuals All");
- for(int i=0;i<3;++i) {
+ for(int i=0;i<4;++i) {
((PlotterRegion) _plotterParticleVertex.region(i)).getPlot().setAllowUserInteraction(true);
((PlotterRegion) _plotterParticleVertex.region(i)).getPlot().setAllowPopupMenus(true);
((PlotterRegion) _plotterTrackVertex.region(i)).getPlot().setAllowUserInteraction(true);
((PlotterRegion) _plotterTrackVertex.region(i)).getPlot().setAllowPopupMenus(true);
-
+ ((PlotterRegion) _plotterRes.region(i)).getPlot().setAllowUserInteraction(true);
+ ((PlotterRegion) _plotterRes.region(i)).getPlot().setAllowPopupMenus(true);
+ ((PlotterRegion) _plotterResAll.region(i)).getPlot().setAllowUserInteraction(true);
+ ((PlotterRegion) _plotterResAll.region(i)).getPlot().setAllowPopupMenus(true);
}
if(!this.hideFrame) {
this._plotterParticleVertex.show();
this._plotterTrackVertex.show();
this._plotterNhits.show();
+ this._plotterRes.show();
+ this._plotterResAll.show();
}
}
+
+
+
+ void fillResidualPlots(Track track) {
+ SeedTrack st2 = (SeedTrack) track;
+ HelicalTrackFit helix2 = st2.getSeedCandidate().getHelix();
+ for(TrackerHit hit: track.getTrackerHits()) {
+ HelicalTrackHit hth = (HelicalTrackHit) hit;
+ Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hth, helix2, true);
+ //DEBUG histos
+ if(hth.Layer()==1) {
+ _trk1_res1_z.fill(res.get("resz"));
+ _trk1_res1_y.fill(res.get("resy"));
+ }
+ if(hth.Layer()==3) {
+ _trk1_res2_z.fill(res.get("resz"));
+ _trk1_res2_y.fill(res.get("resy"));
+ }
+ }
+ }
+
}