Author: [log in to unmask]
Date: Wed Nov 9 11:46:36 2016
New Revision: 4566
Log:
Made changes to svt hit efiiciency driver.
Modified:
java/trunk/users/src/main/java/org/hps/users/mrsolt/TrackHitEfficiency.java
Modified: java/trunk/users/src/main/java/org/hps/users/mrsolt/TrackHitEfficiency.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/mrsolt/TrackHitEfficiency.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/mrsolt/TrackHitEfficiency.java Wed Nov 9 11:46:36 2016
@@ -74,6 +74,14 @@
IHistogram1D trackMomentumPlots_bot;
IHistogram1D HitEfficiency_top;
IHistogram1D HitEfficiency_bot;
+ IHistogram1D HitEfficiency_topElec;
+ IHistogram1D HitEfficiency_botElec;
+ IHistogram1D HitEfficiency_topPosi;
+ IHistogram1D HitEfficiency_botPosi;
+ IHistogram1D HitEfficiencyError_topElec;
+ IHistogram1D HitEfficiencyError_botElec;
+ IHistogram1D HitEfficiencyError_topPosi;
+ IHistogram1D HitEfficiencyError_botPosi;
IHistogram1D HitEfficiencyError_top;
IHistogram1D HitEfficiencyError_bot;
IHistogram1D HitEfficiency_Momentum_top;
@@ -111,6 +119,15 @@
IHistogram1D TrackYTop;
IHistogram1D TrackXBot;
IHistogram1D TrackYBot;
+
+ IHistogram2D TrackResidualXvsMomentumTop;
+ IHistogram2D TrackResidualYvsMomentumTop;
+ IHistogram2D TrackResidualXvsMomentumBot;
+ IHistogram2D TrackResidualYvsMomentumBot;
+
+ IHistogram2D TrackResidualXvsTrackResdidualYTop;
+ IHistogram2D TrackResidualXvsTrackResdidualYBot;
+
Map<Integer, IHistogram1D> trackMomentum = new HashMap<Integer,IHistogram1D>();
Map<Integer, IHistogram1D> trackMomentum_top = new HashMap<Integer,IHistogram1D>();
Map<Integer, IHistogram1D> trackMomentum_bot = new HashMap<Integer,IHistogram1D>();
@@ -130,10 +147,22 @@
Map<Integer, IHistogram1D> UnbiasedResidualX_bot = new HashMap<Integer,IHistogram1D>();
Map<Integer, IHistogram1D> UnbiasedResidualY_top = new HashMap<Integer,IHistogram1D>();
Map<Integer, IHistogram1D> UnbiasedResidualY_bot = new HashMap<Integer,IHistogram1D>();
+ Map<Integer, IHistogram2D> Momentum_UnbiasedResidualX_top = new HashMap<Integer,IHistogram2D>();
+ Map<Integer, IHistogram2D> Momentum_UnbiasedResidualX_bot = new HashMap<Integer,IHistogram2D>();
+ Map<Integer, IHistogram2D> Momentum_UnbiasedResidualY_top = new HashMap<Integer,IHistogram2D>();
+ Map<Integer, IHistogram2D> Momentum_UnbiasedResidualY_bot = new HashMap<Integer,IHistogram2D>();
Map<Integer, IHistogram1D> HitEfficiency_MomentumLay_top = new HashMap<Integer,IHistogram1D>();
Map<Integer, IHistogram1D> HitEfficiency_MomentumLay_bot = new HashMap<Integer,IHistogram1D>();
Map<Integer, IHistogram1D> HitEfficiency_MomentumLayError_top = new HashMap<Integer,IHistogram1D>();
Map<Integer, IHistogram1D> HitEfficiency_MomentumLayError_bot = new HashMap<Integer,IHistogram1D>();
+ Map<Integer, IHistogram1D> HitEfficiency_MomentumLay_topElec = new HashMap<Integer,IHistogram1D>();
+ Map<Integer, IHistogram1D> HitEfficiency_MomentumLay_botElec = new HashMap<Integer,IHistogram1D>();
+ Map<Integer, IHistogram1D> HitEfficiency_MomentumLayError_topElec = new HashMap<Integer,IHistogram1D>();
+ Map<Integer, IHistogram1D> HitEfficiency_MomentumLayError_botElec = new HashMap<Integer,IHistogram1D>();
+ Map<Integer, IHistogram1D> HitEfficiency_MomentumLay_topPosi = new HashMap<Integer,IHistogram1D>();
+ Map<Integer, IHistogram1D> HitEfficiency_MomentumLay_botPosi = new HashMap<Integer,IHistogram1D>();
+ Map<Integer, IHistogram1D> HitEfficiency_MomentumLayError_topPosi = new HashMap<Integer,IHistogram1D>();
+ Map<Integer, IHistogram1D> HitEfficiency_MomentumLayError_botPosi = new HashMap<Integer,IHistogram1D>();
int num_lay = 6;
@@ -157,15 +186,77 @@
double[] botXResidualCut = new double[num_lay];
double[] botYResidualCut = new double[num_lay];
- double topXResidualOffset1 = 0;
+ double topXResidualOffset1;
+ double topYResidualOffset1;
+ double botXResidualOffset1;
+ double botYResidualOffset1;
+
+ double topXResidualCut1;
+ double topYResidualCut1;
+ double botXResidualCut1;
+ double botYResidualCut1;
+
+ double topXResidualOffset2;
+ double topYResidualOffset2;
+ double botXResidualOffset2;
+ double botYResidualOffset2;
+
+ double topXResidualCut2;
+ double topYResidualCut2;
+ double botXResidualCut2;
+ double botYResidualCut2;
+
+ double topXResidualOffset3;
+ double topYResidualOffset3;
+ double botXResidualOffset3;
+ double botYResidualOffset3;
+
+ double topXResidualCut3;
+ double topYResidualCut3;
+ double botXResidualCut3;
+ double botYResidualCut3;
+
+ double topXResidualOffset4;
+ double topYResidualOffset4;
+ double botXResidualOffset4;
+ double botYResidualOffset4;
+
+ double topXResidualCut4;
+ double topYResidualCut4;
+ double botXResidualCut4;
+ double botYResidualCut4;
+
+ double topXResidualOffset5;
+ double topYResidualOffset5;
+ double botXResidualOffset5;
+ double botYResidualOffset5;
+
+ double topXResidualCut5;
+ double topYResidualCut5;
+ double botXResidualCut5;
+ double botYResidualCut5;
+
+ double topXResidualOffset6;
+ double topYResidualOffset6;
+ double botXResidualOffset6;
+ double botYResidualOffset6;
+
+ double topXResidualCut6;
+ double topYResidualCut6;
+ double botXResidualCut6;
+ double botYResidualCut6;
+
+
+
+ /*double topXResidualOffset1 = 0;
double topYResidualOffset1 = 0;
double botXResidualOffset1 = 0;
double botYResidualOffset1 = 0;
- double topXResidualCut1 = 3;
- double topYResidualCut1 = 2;
- double botXResidualCut1 = 3;
- double botYResidualCut1 = 2;
+ double topXResidualCut1 = 4;
+ double topYResidualCut1 = 3;
+ double botXResidualCut1 = 4;
+ double botYResidualCut1 = 3;
double topXResidualOffset2 = 0;
double topYResidualOffset2 = 0;
@@ -173,9 +264,9 @@
double botYResidualOffset2 = 0;
double topXResidualCut2 = 2;
- double topYResidualCut2 = 1;
+ double topYResidualCut2 = 2;
double botXResidualCut2 = 2;
- double botYResidualCut2 = 1;
+ double botYResidualCut2 = 2;
double topXResidualOffset3 = 0;
double topYResidualOffset3 = 0;
@@ -183,29 +274,29 @@
double botYResidualOffset3 = 0;
double topXResidualCut3 = 2;
- double topYResidualCut3 = 1;
+ double topYResidualCut3 = 2;
double botXResidualCut3 = 2;
- double botYResidualCut3 = 1;
+ double botYResidualCut3 = 2;
double topXResidualOffset4 = 0;
double topYResidualOffset4 = 0;
double botXResidualOffset4 = 0;
double botYResidualOffset4 = 0;
- double topXResidualCut4 = 2;
- double topYResidualCut4 = 1;
- double botXResidualCut4 = 2;
- double botYResidualCut4 = 1;
+ double topXResidualCut4 = 3;
+ double topYResidualCut4 = 2;
+ double botXResidualCut4 = 3;
+ double botYResidualCut4 = 2;
double topXResidualOffset5 = 0;
double topYResidualOffset5 = 0;
double botXResidualOffset5 = 0;
double botYResidualOffset5 = 0;
- double topXResidualCut5 = 2;
- double topYResidualCut5 = 2;
- double botXResidualCut5 = 2;
- double botYResidualCut5 = 2;
+ double topXResidualCut5 = 3;
+ double topYResidualCut5 = 4;
+ double botXResidualCut5 = 3;
+ double botYResidualCut5 = 4;
double topXResidualOffset6 = 0;
double topYResidualOffset6 = 0;
@@ -213,11 +304,11 @@
double botYResidualOffset6 = 0;
double topXResidualCut6 = 6;
- double topYResidualCut6 = 3;
+ double topYResidualCut6 = 6;
double botXResidualCut6 = 6;
- double botYResidualCut6 = 3;
-
- int nSigCut = 1;
+ double botYResidualCut6 = 6;*/
+
+ int nSigCut;
double[] gapXtop = new double[num_lay];
double[] gapXbot = new double[num_lay];
@@ -233,6 +324,7 @@
boolean debug = false;
boolean ecalClusterTrackMatch = false;
+ boolean cleanTridents = false;
// Plot flags
boolean enableMomentumPlots = true;
@@ -251,7 +343,7 @@
int nBinx = 500;
int nBiny = 700;
- int nP = 50;
+ int nP = 20;
int[] numberOfTopTracks = new int[num_lay];
int[] numberOfBotTracks = new int[num_lay];
int[] numberOfTopTracksWithHitOnMissingLayer = new int[num_lay];
@@ -260,6 +352,24 @@
double[] hitEfficiencyBot = new double[num_lay];
double[] errorTop = new double[num_lay];
double[] errorBot = new double[num_lay];
+
+ int[] numberOfTopTracksElectron = new int[num_lay];
+ int[] numberOfBotTracksElectron = new int[num_lay];
+ int[] numberOfTopTracksWithHitOnMissingLayerElectron = new int[num_lay];
+ int[] numberOfBotTracksWithHitOnMissingLayerElectron = new int[num_lay];
+ double[] hitEfficiencyTopElectron = new double[num_lay];
+ double[] hitEfficiencyBotElectron = new double[num_lay];
+ double[] errorTopElectron = new double[num_lay];
+ double[] errorBotElectron = new double[num_lay];
+
+ int[] numberOfTopTracksPositron = new int[num_lay];
+ int[] numberOfBotTracksPositron = new int[num_lay];
+ int[] numberOfTopTracksWithHitOnMissingLayerPositron = new int[num_lay];
+ int[] numberOfBotTracksWithHitOnMissingLayerPositron = new int[num_lay];
+ double[] hitEfficiencyTopPositron = new double[num_lay];
+ double[] hitEfficiencyBotPositron = new double[num_lay];
+ double[] errorTopPositron = new double[num_lay];
+ double[] errorBotPositron = new double[num_lay];
int[] numberOfTopTracksElec = new int[num_lay];
int[] numberOfTopTracksPosi = new int[num_lay];
@@ -335,11 +445,31 @@
Map<Integer, double[]> hitEfficiencyMomentumLayBot = new HashMap<Integer,double[]>();
Map<Integer, double[]> hitEfficiencyErrorMomentumLayTop = new HashMap<Integer,double[]>();
Map<Integer, double[]> hitEfficiencyErrorMomentumLayBot = new HashMap<Integer,double[]>();
+ Map<Integer, int[]> numberOfTopTracksWithHitOnMissingLayerMomentumLayElec = new HashMap<Integer,int[]>();
+ Map<Integer, int[]> numberOfBotTracksWithHitOnMissingLayerMomentumLayElec = new HashMap<Integer,int[]>();
+ Map<Integer, int[]> numberOfTopTracksMomentumLayElec = new HashMap<Integer,int[]>();
+ Map<Integer, int[]> numberOfBotTracksMomentumLayElec = new HashMap<Integer,int[]>();
+ Map<Integer, int[]> numberOfTopTracksWithHitOnMissingLayerMomentumLayPosi = new HashMap<Integer,int[]>();
+ Map<Integer, int[]> numberOfBotTracksWithHitOnMissingLayerMomentumLayPosi = new HashMap<Integer,int[]>();
+ Map<Integer, int[]> numberOfTopTracksMomentumLayPosi = new HashMap<Integer,int[]>();
+ Map<Integer, int[]> numberOfBotTracksMomentumLayPosi = new HashMap<Integer,int[]>();
+ Map<Integer, double[]> hitEfficiencyMomentumLayTopElec = new HashMap<Integer,double[]>();
+ Map<Integer, double[]> hitEfficiencyMomentumLayBotElec = new HashMap<Integer,double[]>();
+ Map<Integer, double[]> hitEfficiencyErrorMomentumLayTopElec = new HashMap<Integer,double[]>();
+ Map<Integer, double[]> hitEfficiencyErrorMomentumLayBotElec = new HashMap<Integer,double[]>();
+ Map<Integer, double[]> hitEfficiencyMomentumLayTopPosi = new HashMap<Integer,double[]>();
+ Map<Integer, double[]> hitEfficiencyMomentumLayBotPosi = new HashMap<Integer,double[]>();
+ Map<Integer, double[]> hitEfficiencyErrorMomentumLayTopPosi = new HashMap<Integer,double[]>();
+ Map<Integer, double[]> hitEfficiencyErrorMomentumLayBotPosi = new HashMap<Integer,double[]>();
double lowerLimX = -100;
double upperLimX = 130;
double lowerLimY = -70;
double upperLimY = 70;
+ /*double lowerLimX = -10;
+ double upperLimX = 20;
+ double lowerLimY = -10;
+ double upperLimY = 10;*/
double lowerLimP;
double upperLimP;
@@ -367,6 +497,11 @@
Hep3Vector[] zPointonPlaneBot = new Hep3Vector[num_lay];
double[] zBot = new double[num_lay];
+ double BadRegionXLow = 0;
+ double BadRegionYLow = 0;
+ double BadRegionXHigh = 0;
+ double BadRegionYHigh = 0;
+
Hep3Vector trackPos = null;
Hep3Vector frontTrackPos = null;
Hep3Vector rearTrackPos = null;
@@ -375,6 +510,7 @@
private String fsParticlesCollectionName = "FinalStateParticles";
private String stereoHitCollectionName = "HelicalTrackHits";
private String trackCollectionName = "MatchedTracks";
+ private String clusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
// Constants
public static final double SENSOR_LENGTH = 98.33; // mm
@@ -399,6 +535,205 @@
this.hitsOnTrack = hitsOnTrack;
}
+ public void setTridentsOnly(boolean cleanTridents) {
+ this.cleanTridents = cleanTridents;
+ }
+
+ public void setTopXResidualOffset1(double topXResidualOffset1) {
+ this.topXResidualOffset1 = topXResidualOffset1;
+ }
+
+ public void setTopXResidualOffset2(double topXResidualOffset2) {
+ this.topXResidualOffset2 = topXResidualOffset2;
+ }
+
+ public void setTopXResidualOffset3(double topXResidualOffset3) {
+ this.topXResidualOffset3 = topXResidualOffset3;
+ }
+
+ public void setTopXResidualOffset4(double topXResidualOffset4) {
+ this.topXResidualOffset4 = topXResidualOffset4;
+ }
+
+ public void setTopXResidualOffset5(double topXResidualOffset5) {
+ this.topXResidualOffset5 = topXResidualOffset5;
+ }
+
+ public void setTopXResidualOffset6(double topXResidualOffset6) {
+ this.topXResidualOffset6 = topXResidualOffset6;
+ }
+
+ public void setBotXResidualOffset1(double botXResidualOffset1) {
+ this.botXResidualOffset1 = botXResidualOffset1;
+ }
+
+ public void setBotXResidualOffset2(double botXResidualOffset2) {
+ this.botXResidualOffset2 = botXResidualOffset2;
+ }
+
+ public void setBotXResidualOffset3(double botXResidualOffset3) {
+ this.botXResidualOffset3 = botXResidualOffset3;
+ }
+
+ public void setBotXResidualOffset4(double botXResidualOffset4) {
+ this.botXResidualOffset4 = botXResidualOffset4;
+ }
+
+ public void setBotXResidualOffset5(double botXResidualOffset5) {
+ this.botXResidualOffset5 = botXResidualOffset5;
+ }
+
+ public void setBotXResidualOffset6(double botXResidualOffset6) {
+ this.botXResidualOffset6 = botXResidualOffset6;
+ }
+
+ public void setTopYResidualOffset1(double topYResidualOffset1) {
+ this.topYResidualOffset1 = topYResidualOffset1;
+ }
+
+ public void setTopYResidualOffset2(double topYResidualOffset2) {
+ this.topYResidualOffset2 = topYResidualOffset2;
+ }
+
+ public void setTopYResidualOffset3(double topYResidualOffset3) {
+ this.topYResidualOffset3 = topYResidualOffset3;
+ }
+
+ public void setTopYResidualOffset4(double topYResidualOffset4) {
+ this.topYResidualOffset4 = topYResidualOffset4;
+ }
+
+ public void setTopYResidualOffset5(double topYResidualOffset5) {
+ this.topYResidualOffset5 = topYResidualOffset5;
+ }
+
+ public void setTopYResidualOffset6(double topYResidualOffset6) {
+ this.topYResidualOffset6 = topYResidualOffset6;
+ }
+
+ public void setBotYResidualOffset1(double botYResidualOffset1) {
+ this.botYResidualOffset1 = botYResidualOffset1;
+ }
+
+ public void setBotYResidualOffset2(double botYResidualOffset2) {
+ this.botYResidualOffset2 = botYResidualOffset2;
+ }
+
+ public void setBotYResidualOffset3(double botYResidualOffset3) {
+ this.botYResidualOffset3 = botYResidualOffset3;
+ }
+
+ public void setBotYResidualOffset4(double botYResidualOffset4) {
+ this.botYResidualOffset4 = botYResidualOffset4;
+ }
+
+ public void setBotYResidualOffset5(double botYResidualOffset5) {
+ this.botYResidualOffset5 = botYResidualOffset5;
+ }
+
+ public void setBotYResidualOffset6(double botYResidualOffset6) {
+ this.botYResidualOffset6 = botYResidualOffset6;
+ }
+
+ public void setTopXResidualCut1(double topXResidualCut1) {
+ this.topXResidualCut1 = topXResidualCut1;
+ }
+
+ public void setTopXResidualCut2(double topXResidualCut2) {
+ this.topXResidualCut2 = topXResidualCut2;
+ }
+
+ public void setTopXResidualCut3(double topXResidualCut3) {
+ this.topXResidualCut3 = topXResidualCut3;
+ }
+
+ public void setTopXResidualCut4(double topXResidualCut4) {
+ this.topXResidualCut4 = topXResidualCut4;
+ }
+
+ public void setTopXResidualCut5(double topXResidualCut5) {
+ this.topXResidualCut5 = topXResidualCut5;
+ }
+
+ public void setTopXResidualCut6(double topXResidualCut6) {
+ this.topXResidualCut6 = topXResidualCut6;
+ }
+
+ public void setBotXResidualCut1(double botXResidualCut1) {
+ this.botXResidualCut1 = botXResidualCut1;
+ }
+
+ public void setBotXResidualCut2(double botXResidualCut2) {
+ this.botXResidualCut2 = botXResidualCut2;
+ }
+
+ public void setBotXResidualCut3(double botXResidualCut3) {
+ this.botXResidualCut3 = botXResidualCut3;
+ }
+
+ public void setBotXResidualCut4(double botXResidualCut4) {
+ this.botXResidualCut4 = botXResidualCut4;
+ }
+
+ public void setBotXResidualCut5(double botXResidualCut5) {
+ this.botXResidualCut5 = botXResidualCut5;
+ }
+
+ public void setBotXResidualCut6(double botXResidualCut6) {
+ this.botXResidualCut6 = botXResidualCut6;
+ }
+
+ public void setTopYResidualCut1(double topYResidualCut1) {
+ this.topYResidualCut1 = topYResidualCut1;
+ }
+
+ public void setTopYResidualCut2(double topYResidualCut2) {
+ this.topYResidualCut2 = topYResidualCut2;
+ }
+
+ public void setTopYResidualCut3(double topYResidualCut3) {
+ this.topYResidualCut3 = topYResidualCut3;
+ }
+
+ public void setTopYResidualCut4(double topYResidualCut4) {
+ this.topYResidualCut4 = topYResidualCut4;
+ }
+
+ public void setTopYResidualCut5(double topYResidualCut5) {
+ this.topYResidualCut5 = topYResidualCut5;
+ }
+
+ public void setTopYResidualCut6(double topYResidualCut6) {
+ this.topYResidualCut6 = topYResidualCut6;
+ }
+
+ public void setBotYResidualCut1(double botYResidualCut1) {
+ this.botYResidualCut1 = botYResidualCut1;
+ }
+
+ public void setBotYResidualCut2(double botYResidualCut2) {
+ this.botYResidualCut2 = botYResidualCut2;
+ }
+
+ public void setBotYResidualCut3(double botYResidualCut3) {
+ this.botYResidualCut3 = botYResidualCut3;
+ }
+
+ public void setBotYResidualCut4(double botYResidualCut4) {
+ this.botYResidualCut4 = botYResidualCut4;
+ }
+
+ public void setBotYResidualCut5(double botYResidualCut5) {
+ this.botYResidualCut5 = botYResidualCut5;
+ }
+
+ public void setBotYResidualCut6(double botYResidualCut6) {
+ this.botYResidualCut6 = botYResidualCut6;
+ }
+
+ public void setNSigCut(int nSigCut) {
+ this.nSigCut = nSigCut;
+ }
/**
* Enable/Disable debug
*/
@@ -461,65 +796,65 @@
zPointonPlaneBot[4] = zPointonPlaneLay5Top;
zPointonPlaneBot[5] = zPointonPlaneLay6Top;
- topXResidualOffset[0] = topXResidualOffset1;
- topYResidualOffset[0] = topYResidualOffset1;
- botXResidualOffset[0] = botXResidualOffset1;
- botYResidualOffset[0] = botYResidualOffset1;
-
- topXResidualCut[0] = topXResidualCut1;
- topYResidualCut[0] = topYResidualCut1;
- botXResidualCut[0] = botXResidualCut1;
- botYResidualCut[0] = botYResidualCut1;
-
- topXResidualOffset[1] = topXResidualOffset2;
- topYResidualOffset[1] = topYResidualOffset2;
- botXResidualOffset[1] = botXResidualOffset2;
- botYResidualOffset[1] = botYResidualOffset2;
-
- topXResidualCut[1] = topXResidualCut2;
- topYResidualCut[1] = topYResidualCut2;
- botXResidualCut[1] = botXResidualCut2;
- botYResidualCut[1] = botYResidualCut2;
-
- topXResidualOffset[2] = topXResidualOffset3;
- topYResidualOffset[2] = topYResidualOffset3;
- botXResidualOffset[2] = botXResidualOffset3;
- botYResidualOffset[2] = botYResidualOffset3;
-
- topXResidualCut[2] = topXResidualCut3;
- topYResidualCut[2] = topYResidualCut3;
- botXResidualCut[2] = botXResidualCut3;
- botYResidualCut[2] = botYResidualCut3;
-
- topXResidualOffset[3] = topXResidualOffset4;
- topYResidualOffset[3] = topYResidualOffset4;
- botXResidualOffset[3] = botXResidualOffset4;
- botYResidualOffset[3] = botYResidualOffset4;
-
- topXResidualCut[3] = topXResidualCut4;
- topYResidualCut[3] = topYResidualCut4;
- botXResidualCut[3] = botXResidualCut4;
- botYResidualCut[3] = botYResidualCut4;
-
- topXResidualOffset[4] = topXResidualOffset5;
- topYResidualOffset[4] = topYResidualOffset5;
- botXResidualOffset[4] = botXResidualOffset5;
- botYResidualOffset[4] = botYResidualOffset5;
-
- topXResidualCut[4] = topXResidualCut5;
- topYResidualCut[4] = topYResidualCut5;
- botXResidualCut[4] = botXResidualCut5;
- botYResidualCut[4] = botYResidualCut5;
-
- topXResidualOffset[5] = topXResidualOffset6;
- topYResidualOffset[5] = topYResidualOffset6;
- botXResidualOffset[5] = botXResidualOffset6;
- botYResidualOffset[5] = botYResidualOffset6;
-
- topXResidualCut[5] = topXResidualCut6;
- topYResidualCut[5] = topYResidualCut6;
- botXResidualCut[5] = botXResidualCut6;
- botYResidualCut[5] = botYResidualCut6;
+ topXResidualOffset[0] = this.topXResidualOffset1;
+ topYResidualOffset[0] = this.topYResidualOffset1;
+ botXResidualOffset[0] = this.botXResidualOffset1;
+ botYResidualOffset[0] = this.botYResidualOffset1;
+
+ topXResidualCut[0] = this.topXResidualCut1;
+ topYResidualCut[0] = this.topYResidualCut1;
+ botXResidualCut[0] = this.botXResidualCut1;
+ botYResidualCut[0] = this.botYResidualCut1;
+
+ topXResidualOffset[1] = this.topXResidualOffset2;
+ topYResidualOffset[1] = this.topYResidualOffset2;
+ botXResidualOffset[1] = this.botXResidualOffset2;
+ botYResidualOffset[1] = this.botYResidualOffset2;
+
+ topXResidualCut[1] = this.topXResidualCut2;
+ topYResidualCut[1] = this.topYResidualCut2;
+ botXResidualCut[1] = this.botXResidualCut2;
+ botYResidualCut[1] = this.botYResidualCut2;
+
+ topXResidualOffset[2] = this.topXResidualOffset3;
+ topYResidualOffset[2] = this.topYResidualOffset3;
+ botXResidualOffset[2] = this.botXResidualOffset3;
+ botYResidualOffset[2] = this.botYResidualOffset3;
+
+ topXResidualCut[2] = this.topXResidualCut3;
+ topYResidualCut[2] = this.topYResidualCut3;
+ botXResidualCut[2] = this.botXResidualCut3;
+ botYResidualCut[2] = this.botYResidualCut3;
+
+ topXResidualOffset[3] = this.topXResidualOffset4;
+ topYResidualOffset[3] = this.topYResidualOffset4;
+ botXResidualOffset[3] = this.botXResidualOffset4;
+ botYResidualOffset[3] = this.botYResidualOffset4;
+
+ topXResidualCut[3] = this.topXResidualCut4;
+ topYResidualCut[3] = this.topYResidualCut4;
+ botXResidualCut[3] = this.botXResidualCut4;
+ botYResidualCut[3] = this.botYResidualCut4;
+
+ topXResidualOffset[4] = this.topXResidualOffset5;
+ topYResidualOffset[4] = this.topYResidualOffset5;
+ botXResidualOffset[4] = this.botXResidualOffset5;
+ botYResidualOffset[4] = this.botYResidualOffset5;
+
+ topXResidualCut[4] = this.topXResidualCut5;
+ topYResidualCut[4] = this.topYResidualCut5;
+ botXResidualCut[4] = this.botXResidualCut5;
+ botYResidualCut[4] = this.botYResidualCut5;
+
+ topXResidualOffset[5] = this.topXResidualOffset6;
+ topYResidualOffset[5] = this.topYResidualOffset6;
+ botXResidualOffset[5] = this.botXResidualOffset6;
+ botYResidualOffset[5] = this.botYResidualOffset6;
+
+ topXResidualCut[5] = this.topXResidualCut6;
+ topYResidualCut[5] = this.topYResidualCut6;
+ botXResidualCut[5] = this.botXResidualCut6;
+ botYResidualCut[5] = this.botYResidualCut6;
gapXtop[0] = 0;
gapXtop[1] = 0;
@@ -609,6 +944,14 @@
HitEfficiency_bot = aida.histogram1D("Hit Efficiency Bot", num_lay, 0, num_lay);
HitEfficiencyError_top = aida.histogram1D("Hit Efficiency Error Top", num_lay, 0, num_lay);
HitEfficiencyError_bot = aida.histogram1D("Hit Efficiency Error Bot", num_lay, 0, num_lay);
+ HitEfficiency_topElec = aida.histogram1D("Hit Efficiency Top Electrons", num_lay, 0, num_lay);
+ HitEfficiency_botElec = aida.histogram1D("Hit Efficiency Bot Electrons", num_lay, 0, num_lay);
+ HitEfficiencyError_topElec = aida.histogram1D("Hit Efficiency Error Top Electrons", num_lay, 0, num_lay);
+ HitEfficiencyError_botElec = aida.histogram1D("Hit Efficiency Error Bot Electrons", num_lay, 0, num_lay);
+ HitEfficiency_topPosi = aida.histogram1D("Hit Efficiency Top Positrons", num_lay, 0, num_lay);
+ HitEfficiency_botPosi = aida.histogram1D("Hit Efficiency Bot Positrons", num_lay, 0, num_lay);
+ HitEfficiencyError_topPosi = aida.histogram1D("Hit Efficiency Error Top Positrons", num_lay, 0, num_lay);
+ HitEfficiencyError_botPosi = aida.histogram1D("Hit Efficiency Error Bot Positrons", num_lay, 0, num_lay);
HitEfficiencyElec_top = aida.histogram1D("Hit Efficiency Top Electron Side", num_lay, 0, num_lay);
HitEfficiencyPosi_top = aida.histogram1D("Hit Efficiency Top Positron Side", num_lay, 0, num_lay);
HitEfficiencyElec_bot = aida.histogram1D("Hit Efficiency Bot Electron Side", num_lay, 0, num_lay);
@@ -644,6 +987,14 @@
TrackYTop = aida.histogram1D("Extrapolated Track Y Top", 50, lowerLimY, upperLimY);
TrackXBot = aida.histogram1D("Extrapolated Track X Bot", 50, lowerLimX, upperLimX);
TrackYBot = aida.histogram1D("Extrapolated Track Y Bot", 50, lowerLimY, upperLimY);
+
+ TrackResidualXvsMomentumTop = aida.histogram2D("Track Residual X vs Momentum Top", nP, lowerLimP, upperLimP, 50, -10, 10);
+ TrackResidualYvsMomentumTop = aida.histogram2D("Track Residual Y vs Momentum Top", nP, lowerLimP, upperLimP, 50, -10, 10);
+ TrackResidualXvsMomentumBot = aida.histogram2D("Track Residual X vs Momentum Top", nP, lowerLimP, upperLimP, 50, -10, 10);
+ TrackResidualYvsMomentumBot = aida.histogram2D("Track Residual Y vs Momentum Bot", nP, lowerLimP, upperLimP, 50, -10, 10);
+
+ TrackResidualXvsTrackResdidualYTop = aida.histogram2D("Track Residuals X vs Y Top",50,-10, 10, 50, -10, 10);
+ TrackResidualXvsTrackResdidualYBot = aida.histogram2D("Track Residuals X vs Y Bot",50,-10, 10, 50, -10, 10);
for(int i = 0; i < num_lay; i++){
trackMomentum.put((i+1),histogramFactory.createHistogram1D("Track Momentum Layer #" + (i+1), 50, 0, ebeam*1.3));
@@ -669,14 +1020,42 @@
HitEfficiency_MomentumLay_bot.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Momentum Bot Layer #"+ (i+1),nP, lowerLimP, upperLimP));
HitEfficiency_MomentumLayError_top.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Error Momentum Top Layer #"+ (i+1),nP, lowerLimP, upperLimP));
HitEfficiency_MomentumLayError_bot.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Error Momentum Bot Layer #"+ (i+1),nP, lowerLimP, upperLimP));
+ HitEfficiency_MomentumLay_topElec.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Momentum Top Electrons Layer #"+ (i+1),nP, lowerLimP, upperLimP));
+ HitEfficiency_MomentumLay_botElec.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Momentum Bot Electrons Layer #"+ (i+1),nP, lowerLimP, upperLimP));
+ HitEfficiency_MomentumLayError_topElec.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Error Momentum Top Electrons Layer #"+ (i+1),nP, lowerLimP, upperLimP));
+ HitEfficiency_MomentumLayError_botElec.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Error Momentum Bot Electrons Layer #"+ (i+1),nP, lowerLimP, upperLimP));
+ HitEfficiency_MomentumLay_topPosi.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Momentum Top Positrons Layer #"+ (i+1),nP, lowerLimP, upperLimP));
+ HitEfficiency_MomentumLay_botPosi.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Momentum Bot Positrons Layer #"+ (i+1),nP, lowerLimP, upperLimP));
+ HitEfficiency_MomentumLayError_topPosi.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Error Momentum Top Positrons Layer #"+ (i+1),nP, lowerLimP, upperLimP));
+ HitEfficiency_MomentumLayError_botPosi.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Error Momentum Bot Positrons Layer #"+ (i+1),nP, lowerLimP, upperLimP));
numberOfTopTracksMomentumLay.put((i+1),new int[nP]);
numberOfBotTracksMomentumLay.put((i+1),new int[nP]);
numberOfTopTracksWithHitOnMissingLayerMomentumLay.put((i+1),new int[nP]);
numberOfBotTracksWithHitOnMissingLayerMomentumLay.put((i+1),new int[nP]);
+ numberOfTopTracksMomentumLayElec.put((i+1),new int[nP]);
+ numberOfBotTracksMomentumLayElec.put((i+1),new int[nP]);
+ numberOfTopTracksWithHitOnMissingLayerMomentumLayElec.put((i+1),new int[nP]);
+ numberOfBotTracksWithHitOnMissingLayerMomentumLayElec.put((i+1),new int[nP]);
+ numberOfTopTracksMomentumLayPosi.put((i+1),new int[nP]);
+ numberOfBotTracksMomentumLayPosi.put((i+1),new int[nP]);
+ numberOfTopTracksWithHitOnMissingLayerMomentumLayPosi.put((i+1),new int[nP]);
+ numberOfBotTracksWithHitOnMissingLayerMomentumLayPosi.put((i+1),new int[nP]);
hitEfficiencyMomentumLayTop.put((i+1),new double[nP]);
hitEfficiencyMomentumLayBot.put((i+1),new double[nP]);
hitEfficiencyErrorMomentumLayTop.put((i+1),new double[nP]);
hitEfficiencyErrorMomentumLayBot.put((i+1),new double[nP]);
+ hitEfficiencyMomentumLayTopElec.put((i+1),new double[nP]);
+ hitEfficiencyMomentumLayBotElec.put((i+1),new double[nP]);
+ hitEfficiencyErrorMomentumLayTopElec.put((i+1),new double[nP]);
+ hitEfficiencyErrorMomentumLayBotElec.put((i+1),new double[nP]);
+ hitEfficiencyMomentumLayTopPosi.put((i+1),new double[nP]);
+ hitEfficiencyMomentumLayBotPosi.put((i+1),new double[nP]);
+ hitEfficiencyErrorMomentumLayTopPosi.put((i+1),new double[nP]);
+ hitEfficiencyErrorMomentumLayBotPosi.put((i+1),new double[nP]);
+ Momentum_UnbiasedResidualX_top.put((i+1), histogramFactory.createHistogram2D("Track Residuals X vs Momentum Top Layer #" + (i+1), nP, lowerLimP, upperLimP, 50, -10, 10));
+ Momentum_UnbiasedResidualX_bot.put((i+1), histogramFactory.createHistogram2D("Track Residuals X vs Momentum Bot Layer #" + (i+1), nP, lowerLimP, upperLimP, 50, -10, 10));
+ Momentum_UnbiasedResidualY_top.put((i+1), histogramFactory.createHistogram2D("Track Residuals Y vs Momentum Top Layer #" + (i+1), nP, lowerLimP, upperLimP, 50, -10, 10));
+ Momentum_UnbiasedResidualY_bot.put((i+1), histogramFactory.createHistogram2D("Track Residuals Y vs Momentum Bot Layer #" + (i+1), nP, lowerLimP, upperLimP, 50, -10, 10));
}
for (IPlotter plotter : plotters.values()) {
@@ -695,7 +1074,7 @@
// Get the list of final state particles from the event. These will
// be used to obtain the track momentum.
- List<ReconstructedParticle> fsParticles = event.get(ReconstructedParticle.class, fsParticlesCollectionName);
+ //List<ReconstructedParticle> fsParticles = event.get(ReconstructedParticle.class, fsParticlesCollectionName);
//this.mapReconstructedParticlesToTracks(tracks, fsParticles);
@@ -705,6 +1084,18 @@
List<TrackerHit> stereoHits = event.get(TrackerHit.class, stereoHitCollectionName);
for (List<Track> tracks : trackCollections) {
+
+ if(cleanTridents){
+ // Require an event to have exactly two tracks
+ if (tracks.size() != 2) continue;
+
+ // Require the two tracks to be in opposite volumes
+ if (tracks.get(0).getTrackStates().get(0).getTanLambda()*tracks.get(1).getTrackStates().get(0).getTanLambda() >= 0) continue;
+
+ // Require the two tracks to be oppositely charged
+ if (tracks.get(0).getTrackStates().get(0).getOmega()*tracks.get(1).getTrackStates().get(0).getOmega() >= 0) continue;
+ }
+
for(Track track : tracks){
// Check that the track has the required number of hits. The number of hits
// required to make a track is set in the tracking strategy.
@@ -713,8 +1104,7 @@
continue;
}
//HpsSiSensor trackSensor = (HpsSiSensor) ((RawTrackerHit)((HelicalTrackCross) track.getTrackerHits().get(0)).getStrips().get(0).rawhits().get(0)).getDetectorElement();
-
-
+
HpsSiSensor trackSensor = (HpsSiSensor) ((RawTrackerHit)track.getTrackerHits().get(0).getRawHits().get(0)).getDetectorElement();
//HpsSiSensor hitSensor = (HpsSiSensor) ((RawTrackerHit) stereoHit.getRawHits().get(0)).getDetectorElement();
@@ -741,11 +1131,105 @@
} else{
trackMomentum_bot.get(unusedLayer).fill(p);
}
+
+ if (trackSensor.isTopLayer()) {
+ Hep3Vector extrapTrackPos = TrackUtils.extrapolateTrack(track, zTop[unusedLayer-1]);
+ double extrapTrackX = extrapTrackPos.x();
+ if(extrapTrackX < gapXtop[unusedLayer-1]){
+ if(trackSensor.isAxial()){
+ if(isWithinSensorAcceptance(track,unusedLayer,true)){
+ numberOfTopTracksElecAxial[unusedLayer-1]++;
+ }
+ }
+ else{
+ if(isWithinSensorAcceptance(track,unusedLayer,false)){
+ numberOfTopTracksElecStereo[unusedLayer-1]++;
+ }
+ }
+ }
+ else{
+ if(trackSensor.isAxial()){
+ if(isWithinSensorAcceptance(track,unusedLayer,true)){
+ numberOfTopTracksPosiAxial[unusedLayer-1]++;
+ }
+ }
+ else{
+ if(isWithinSensorAcceptance(track,unusedLayer,false)){
+ numberOfTopTracksPosiStereo[unusedLayer-1]++;
+ }
+ }
+ }
+ }
+
+ if (trackSensor.isBottomLayer()) {
+ Hep3Vector extrapTrackPos = TrackUtils.extrapolateTrack(track, zBot[unusedLayer-1]);
+ double extrapTrackX = extrapTrackPos.x();
+ if(extrapTrackX < gapXbot[unusedLayer-1]){
+ if(trackSensor.isAxial()){
+ if(isWithinSensorAcceptance(track,unusedLayer,true)){
+ numberOfBotTracksElecAxial[unusedLayer-1]++;
+ }
+ }
+ else{
+ if(isWithinSensorAcceptance(track,unusedLayer,false)){
+ numberOfBotTracksElecStereo[unusedLayer-1]++;
+ }
+ }
+ }
+ else{
+ if(trackSensor.isAxial()){
+ if(isWithinSensorAcceptance(track,unusedLayer,true)){
+ numberOfBotTracksPosiAxial[unusedLayer-1]++;
+ }
+ }
+ else{
+ if(isWithinSensorAcceptance(track,unusedLayer,false)){
+ numberOfBotTracksPosiStereo[unusedLayer-1]++;
+ }
+ }
+ }
+ }
+
+ /*for (TrackerHit stereoHit : stereoHits) {
+ HpsSiSensor hitSensor = (HpsSiSensor) ((RawTrackerHit) stereoHit.getRawHits().get(0)).getDetectorElement();
+
+ if ((trackSensor.isTopLayer() && hitSensor.isBottomLayer())
+ || (trackSensor.isBottomLayer() && hitSensor.isTopLayer())) continue;
+
+ // Retrieve the layer number by using the sensor
+ int layer = (hitSensor.getLayerNumber() + 1)/2;
+
+ if (unusedLayer != layer) continue;
+ Hep3Vector stereoHitPosition = new BasicHep3Vector(stereoHit.getPosition());
+ Hep3Vector trackPosition = TrackUtils.extrapolateTrack(track, stereoHitPosition.z());
+ double xResidual = trackPosition.x() - stereoHitPosition.x();
+ double yResidual = trackPosition.y() - stereoHitPosition.y();
+ if (hitSensor.isTopLayer()) {
+ if (Math.abs(xResidual+topXResidualOffset[unusedLayer-1]) > this.nSigCut*topXResidualCut[unusedLayer-1]
+ || Math.abs(yResidual + topYResidualOffset[unusedLayer-1]) > this.nSigCut*topYResidualCut[unusedLayer-1]) continue;
+ //if (countTop > 0){
+ //continue;
+ //}
+ if(trackPosition.x() < gapXtop[unusedLayer-1]){
+ if(trackSensor.isAxial()){
+ if(isWithinSensorAcceptance(track,unusedLayer,true)){
+ List<TrackerHit> clusters = event.get(TrackerHit.class, clusterCollectionName);
+ for (TrackerHit cluster : clusters) {
+ for (Object rawHitObject : cluster.getRawHits()) {
+ numberOfTopTracksWithHitOnMissingLayerPosiStereo[unusedLayer-1]++;
+ }
+ }
+ }
+ }
+ }
+ }
+ //countTop++;
+ } */
+
if(!isWithinAcceptance(track, unusedLayer)) continue;
trackMomentum_accepted.get(unusedLayer).fill(p);
- if (trackSensor.isTopLayer()) {
-
+ if (trackSensor.isTopLayer()) {
Hep3Vector extrapTrackPos = TrackUtils.extrapolateTrack(track, zTop[unusedLayer-1]);
double extrapTrackX = extrapTrackPos.x();
double extrapTrackY = extrapTrackPos.y();
@@ -753,6 +1237,12 @@
TrackYTop.fill(extrapTrackY);
trackMomentum_accepted_top.get(unusedLayer).fill(p);
numberOfTopTracks[unusedLayer-1]++;
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ numberOfTopTracksElectron[unusedLayer-1]++;
+ }
+ else{
+ numberOfTopTracksPositron[unusedLayer-1]++;
+ }
for(int i = 0; i<nP;i++){
double mP = (upperLimP - lowerLimP)/((double) nP);
double lowerP = mP * i + lowerLimP;
@@ -762,6 +1252,12 @@
for(int j = 0; j<num_lay;j++){
if(unusedLayer == j + 1){
numberOfTopTracksMomentumLay.get(j+1)[i]++;
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ numberOfTopTracksMomentumLayElec.get(j+1)[i]++;
+ }
+ else{
+ numberOfTopTracksMomentumLayPosi.get(j+1)[i]++;
+ }
}
}
}
@@ -800,13 +1296,19 @@
}
}
} else{
- Hep3Vector extrapTrackPos = TrackUtils.extrapolateTrack(track, zTop[unusedLayer-1]);
+ Hep3Vector extrapTrackPos = TrackUtils.extrapolateTrack(track, zBot[unusedLayer-1]);
double extrapTrackX = extrapTrackPos.x();
double extrapTrackY = extrapTrackPos.y();
TrackXBot.fill(extrapTrackX);
TrackYBot.fill(extrapTrackY);
trackMomentum_accepted_bot.get(unusedLayer).fill(p);
numberOfBotTracks[unusedLayer-1]++;
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ numberOfBotTracksElectron[unusedLayer-1]++;
+ }
+ else{
+ numberOfBotTracksPositron[unusedLayer-1]++;
+ }
for(int i = 0; i<nP;i++){
double mP = (upperLimP - lowerLimP)/((double) nP);
double lowerP = mP * i + lowerLimP;
@@ -816,6 +1318,12 @@
for(int j = 0; j<num_lay;j++){
if(unusedLayer == j + 1){
numberOfBotTracksMomentumLay.get(j+1)[i]++;
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ numberOfBotTracksMomentumLayElec.get(j+1)[i]++;
+ }
+ else{
+ numberOfBotTracksMomentumLayPosi.get(j+1)[i]++;
+ }
}
}
}
@@ -874,20 +1382,36 @@
trackMomentum_final.get(unusedLayer).fill(p);
if (hitSensor.isTopLayer()) {
+ if (countTop > 0){
+ //System.out.println("Top " + unusedLayer);
+ continue;
+ }
UnbiasedResidualX_top.get(unusedLayer).fill(xResidual);
UnbiasedResidualY_top.get(unusedLayer).fill(yResidual);
HitPosition_top.get(unusedLayer).fill(stereoHitPosition.z());
trackPlots.get("Unbiased Residual x - Top").fill(xResidual);
trackPlots.get("Unbiased Residual y - Top").fill(yResidual);
- if (Math.abs(xResidual+topXResidualOffset[unusedLayer-1]) > nSigCut*topXResidualCut[unusedLayer-1]
- || Math.abs(yResidual + topYResidualOffset[unusedLayer-1]) > nSigCut*topYResidualCut[unusedLayer-1]) continue;
- if (countTop > 0){
- //System.out.println("Top " + unusedLayer);
- continue;
- }
+ TrackResidualXvsMomentumTop.fill(p,xResidual);
+ TrackResidualYvsMomentumTop.fill(p,yResidual);
+ TrackResidualXvsTrackResdidualYTop.fill(xResidual,yResidual);
+ Momentum_UnbiasedResidualX_top.get(unusedLayer).fill(p,xResidual);
+ Momentum_UnbiasedResidualY_top.get(unusedLayer).fill(p,yResidual);
+ if (Math.abs(xResidual+topXResidualOffset[unusedLayer-1]) > this.nSigCut*topXResidualCut[unusedLayer-1]
+ || Math.abs(yResidual + topYResidualOffset[unusedLayer-1]) > this.nSigCut*topYResidualCut[unusedLayer-1]) continue;
+ //trackPlots.get("Unbiased Residual x - Top").fill(xResidual);
+ //trackPlots.get("Unbiased Residual y - Top").fill(yResidual);
+ //TrackResidualXvsMomentumTop.fill(p,xResidual);
+ //TrackResidualYvsMomentumTop.fill(p,yResidual);
+ //TrackResidualXvsTrackResdidualYTop.fill(xResidual,yResidual);
trackMomentumPlots.get("Track Momentum - All Layers Hit").fill(p);
trackMomentum_final_top.get(unusedLayer).fill(p);
numberOfTopTracksWithHitOnMissingLayer[unusedLayer-1]++;
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ numberOfTopTracksWithHitOnMissingLayerElectron[unusedLayer-1]++;
+ }
+ else{
+ numberOfTopTracksWithHitOnMissingLayerPositron[unusedLayer-1]++;
+ }
for(int i = 0; i<nP;i++){
double mP = (upperLimP - lowerLimP)/((double) nP);
double lowerP = mP * i + lowerLimP;
@@ -897,6 +1421,12 @@
for(int j = 0; j<num_lay;j++){
if(unusedLayer == j + 1){
numberOfTopTracksWithHitOnMissingLayerMomentumLay.get(j+1)[i]++;
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ numberOfTopTracksWithHitOnMissingLayerMomentumLayElec.get(j+1)[i]++;
+ }
+ else{
+ numberOfTopTracksWithHitOnMissingLayerMomentumLayPosi.get(j+1)[i]++;
+ }
}
}
}
@@ -924,20 +1454,35 @@
}
countTop++;
} else {
+ if (countBot > 0){
+ continue;
+ }
UnbiasedResidualX_bot.get(unusedLayer).fill(xResidual);
UnbiasedResidualY_bot.get(unusedLayer).fill(yResidual);
HitPosition_bot.get(unusedLayer).fill(stereoHitPosition.z());
trackPlots.get("Unbiased Residual x - Bottom").fill(xResidual);
trackPlots.get("Unbiased Residual y - Bottom").fill(yResidual);
- if (Math.abs(xResidual+botXResidualOffset[unusedLayer-1]) > nSigCut*botXResidualCut[unusedLayer-1]
- || Math.abs(yResidual + botYResidualOffset[unusedLayer-1]) > nSigCut*botYResidualCut[unusedLayer-1]) continue;
- if (countBot > 0){
- //System.out.println("Bot " + unusedLayer);
- continue;
- }
+ TrackResidualXvsMomentumBot.fill(p,xResidual);
+ TrackResidualYvsMomentumBot.fill(p,yResidual);
+ TrackResidualXvsTrackResdidualYBot.fill(xResidual,yResidual);
+ Momentum_UnbiasedResidualX_bot.get(unusedLayer).fill(p,xResidual);
+ Momentum_UnbiasedResidualY_bot.get(unusedLayer).fill(p,yResidual);
+ if (Math.abs(xResidual+botXResidualOffset[unusedLayer-1]) > this.nSigCut*botXResidualCut[unusedLayer-1]
+ || Math.abs(yResidual + botYResidualOffset[unusedLayer-1]) > this.nSigCut*botYResidualCut[unusedLayer-1]) continue;
+ //trackPlots.get("Unbiased Residual x - Bottom").fill(xResidual);
+ //trackPlots.get("Unbiased Residual y - Bottom").fill(yResidual);
+ //TrackResidualXvsMomentumBot.fill(p,xResidual);
+ //TrackResidualYvsMomentumBot.fill(p,yResidual);
+ //TrackResidualXvsTrackResdidualYBot.fill(xResidual,yResidual);
trackMomentumPlots.get("Track Momentum - All Layers Hit").fill(p);
trackMomentum_final_bot.get(unusedLayer).fill(p);
numberOfBotTracksWithHitOnMissingLayer[unusedLayer-1]++;
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ numberOfBotTracksWithHitOnMissingLayerElectron[unusedLayer-1]++;
+ }
+ else{
+ numberOfBotTracksWithHitOnMissingLayerPositron[unusedLayer-1]++;
+ }
for(int i = 0; i<nP;i++){
double mP = (upperLimP - lowerLimP)/((double) nP);
double lowerP = mP * i + lowerLimP;
@@ -947,6 +1492,12 @@
for(int j = 0; j<num_lay;j++){
if(unusedLayer == j + 1){
numberOfBotTracksWithHitOnMissingLayerMomentumLay.get(j+1)[i]++;
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ numberOfBotTracksWithHitOnMissingLayerMomentumLayElec.get(j+1)[i]++;
+ }
+ else{
+ numberOfBotTracksWithHitOnMissingLayerMomentumLayPosi.get(j+1)[i]++;
+ }
}
}
}
@@ -1022,6 +1573,46 @@
return -1;
}
+private boolean isWithinSensorAcceptance(Track track, int layer,boolean axial) {
+
+ //Axial is true if the sensor is axial
+ HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit)track.getTrackerHits().get(0).getRawHits().get(0)).getDetectorElement();
+
+ // Get the sensors associated with the layer that the track
+ // will be extrapolated to
+ List<SvtStereoLayer> stereoLayers = null;
+
+ if (sensor.isTopLayer()) {
+ stereoLayers = this.topStereoLayers.get(layer);
+ } else {
+ stereoLayers = this.bottomStereoLayers.get(layer);
+ }
+
+ for (SvtStereoLayer stereoLayer : stereoLayers) {
+ Hep3Vector axialSensorPosition = stereoLayer.getAxialSensor().getGeometry().getPosition();
+ Hep3Vector stereoSensorPosition = stereoLayer.getStereoSensor().getGeometry().getPosition();
+
+ Hep3Vector axialTrackPos = TrackUtils.extrapolateTrack(track, axialSensorPosition.z());
+ Hep3Vector stereoTrackPos = TrackUtils.extrapolateTrack(track, stereoSensorPosition.z());
+
+ if(this.sensorContainsTrack(axialTrackPos, stereoLayer.getAxialSensor()) && axial){
+ return true;
+ }
+
+ if(this.sensorContainsTrack(stereoTrackPos, stereoLayer.getStereoSensor()) && !axial){
+ return true;
+ }
+ }
+
+ return false;
+
+ /*int layerNumber = (layer - 1)/2 + 1;
+ String title = "Track Position - Layer " + layerNumber + " - Tracks Within Acceptance";
+ //aida.histogram2D(title).fill(trackPos.y(), trackPos.z());
+ //aida.cloud2D(title).fill(frontTrackPos.y(), frontTrackPos.z()); */
+
+}
+
/**
* Extrapolate a track to a layer and check that it lies within its
* acceptance.
@@ -1208,16 +1799,32 @@
for(int i = 0; i<num_lay; i++){
hitEfficiencyTop[i] = numberOfTopTracksWithHitOnMissingLayer[i]/(double) numberOfTopTracks[i];
hitEfficiencyBot[i] = numberOfBotTracksWithHitOnMissingLayer[i]/(double) numberOfBotTracks[i];
+ hitEfficiencyTopElectron[i] = numberOfTopTracksWithHitOnMissingLayerElectron[i]/(double) numberOfTopTracksElectron[i];
+ hitEfficiencyBotElectron[i] = numberOfBotTracksWithHitOnMissingLayerElectron[i]/(double) numberOfBotTracksElectron[i];
+ hitEfficiencyTopPositron[i] = numberOfTopTracksWithHitOnMissingLayerPositron[i]/(double) numberOfTopTracksPositron[i];
+ hitEfficiencyBotPositron[i] = numberOfBotTracksWithHitOnMissingLayerPositron[i]/(double) numberOfBotTracksPositron[i];
numberOfTopTracksTot = numberOfTopTracksTot + numberOfTopTracks[i];
numberOfBotTracksTot = numberOfBotTracksTot + numberOfBotTracks[i];
numberOfTopTracksWithHitOnMissingLayerTot = numberOfTopTracksWithHitOnMissingLayerTot + numberOfTopTracksWithHitOnMissingLayer[i];
numberOfBotTracksWithHitOnMissingLayerTot = numberOfBotTracksWithHitOnMissingLayerTot + numberOfBotTracksWithHitOnMissingLayer[i];
errorTop[i] = Math.sqrt(1/(double) numberOfTopTracks[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayer[i]);
errorBot[i] = Math.sqrt(1/(double) numberOfBotTracks[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayer[i]);
+ errorTopElectron[i] = Math.sqrt(1/(double) numberOfTopTracksElectron[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayerElectron[i]);
+ errorBotElectron[i] = Math.sqrt(1/(double) numberOfBotTracksElectron[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayerElectron[i]);
+ errorTopPositron[i] = Math.sqrt(1/(double) numberOfTopTracksPositron[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayerPositron[i]);
+ errorBotPositron[i] = Math.sqrt(1/(double) numberOfBotTracksPositron[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayerPositron[i]);
HitEfficiency_top.fill(i,hitEfficiencyTop[i]);
HitEfficiency_bot.fill(i,hitEfficiencyBot[i]);
HitEfficiencyError_top.fill(i,errorTop[i]);
HitEfficiencyError_bot.fill(i,errorBot[i]);
+ HitEfficiency_topElec.fill(i,hitEfficiencyTopElectron[i]);
+ HitEfficiency_botElec.fill(i,hitEfficiencyBotElectron[i]);
+ HitEfficiencyError_topElec.fill(i,errorTopElectron[i]);
+ HitEfficiencyError_botElec.fill(i,errorBotElectron[i]);
+ HitEfficiency_topPosi.fill(i,hitEfficiencyTopPositron[i]);
+ HitEfficiency_botPosi.fill(i,hitEfficiencyBotPositron[i]);
+ HitEfficiencyError_topPosi.fill(i,errorTopPositron[i]);
+ HitEfficiencyError_botPosi.fill(i,errorBotPositron[i]);
hitEfficiencyTopElecStereo[i] = numberOfTopTracksWithHitOnMissingLayerElecStereo[i]/(double) numberOfTopTracksElecStereo[i];
hitEfficiencyTopElecAxial[i] = numberOfTopTracksWithHitOnMissingLayerElecAxial[i]/(double) numberOfTopTracksElecAxial[i];
hitEfficiencyTopPosiStereo[i] = numberOfTopTracksWithHitOnMissingLayerPosiStereo[i]/(double) numberOfTopTracksPosiStereo[i];
@@ -1312,6 +1919,10 @@
for(int j = 0; j<num_lay; j++){
hitEfficiencyMomentumLayTop.get(j+1)[i] = numberOfTopTracksWithHitOnMissingLayerMomentumLay.get(j+1)[i]/(double) numberOfTopTracksMomentumLay.get(j+1)[i];
hitEfficiencyMomentumLayBot.get(j+1)[i] = numberOfBotTracksWithHitOnMissingLayerMomentumLay.get(j+1)[i]/(double) numberOfBotTracksMomentumLay.get(j+1)[i];
+ hitEfficiencyMomentumLayTopElec.get(j+1)[i] = numberOfTopTracksWithHitOnMissingLayerMomentumLayElec.get(j+1)[i]/(double) numberOfTopTracksMomentumLayElec.get(j+1)[i];
+ hitEfficiencyMomentumLayTopPosi.get(j+1)[i] = numberOfTopTracksWithHitOnMissingLayerMomentumLayPosi.get(j+1)[i]/(double) numberOfTopTracksMomentumLayPosi.get(j+1)[i];
+ hitEfficiencyMomentumLayBotElec.get(j+1)[i] = numberOfBotTracksWithHitOnMissingLayerMomentumLayElec.get(j+1)[i]/(double) numberOfBotTracksMomentumLayElec.get(j+1)[i];
+ hitEfficiencyMomentumLayBotPosi.get(j+1)[i] = numberOfBotTracksWithHitOnMissingLayerMomentumLayPosi.get(j+1)[i]/(double) numberOfBotTracksMomentumLayPosi.get(j+1)[i];
if(numberOfTopTracksWithHitOnMissingLayerMomentumLay.get(j+1)[i] != 0 && numberOfTopTracksMomentumLay.get(j+1)[i] != 0){
hitEfficiencyErrorMomentumLayTop.get(j+1)[i] = Math.sqrt(1/(double) numberOfTopTracksWithHitOnMissingLayerMomentumLay.get(j+1)[i] + 1/(double) numberOfTopTracksMomentumLay.get(j+1)[i]);
}
@@ -1324,10 +1935,42 @@
else{
hitEfficiencyErrorMomentumLayBot.get(j+1)[i] = 0;
}
+ if(numberOfTopTracksWithHitOnMissingLayerMomentumLayElec.get(j+1)[i] != 0 && numberOfTopTracksMomentumLayElec.get(j+1)[i] != 0){
+ hitEfficiencyErrorMomentumLayTopElec.get(j+1)[i] = Math.sqrt(1/(double) numberOfTopTracksWithHitOnMissingLayerMomentumLayElec.get(j+1)[i] + 1/(double) numberOfTopTracksMomentumLayElec.get(j+1)[i]);
+ }
+ else{
+ hitEfficiencyErrorMomentumLayTopElec.get(j+1)[i] = 0;
+ }
+ if(numberOfTopTracksWithHitOnMissingLayerMomentumLayPosi.get(j+1)[i] != 0 && numberOfTopTracksMomentumLayPosi.get(j+1)[i] != 0){
+ hitEfficiencyErrorMomentumLayTopPosi.get(j+1)[i] = Math.sqrt(1/(double) numberOfTopTracksWithHitOnMissingLayerMomentumLayPosi.get(j+1)[i] + 1/(double) numberOfTopTracksMomentumLayPosi.get(j+1)[i]);
+ }
+ else{
+ hitEfficiencyErrorMomentumLayTopPosi.get(j+1)[i] = 0;
+ }
+ if(numberOfBotTracksWithHitOnMissingLayerMomentumLayElec.get(j+1)[i] != 0 && numberOfBotTracksMomentumLayElec.get(j+1)[i] != 0){
+ hitEfficiencyErrorMomentumLayBotElec.get(j+1)[i] = Math.sqrt(1/(double) numberOfBotTracksWithHitOnMissingLayerMomentumLayElec.get(j+1)[i] + 1/(double) numberOfBotTracksMomentumLayElec.get(j+1)[i]);
+ }
+ else{
+ hitEfficiencyErrorMomentumLayBotElec.get(j+1)[i] = 0;
+ }
+ if(numberOfBotTracksWithHitOnMissingLayerMomentumLayPosi.get(j+1)[i] != 0 && numberOfBotTracksMomentumLayPosi.get(j+1)[i] != 0){
+ hitEfficiencyErrorMomentumLayBotPosi.get(j+1)[i] = Math.sqrt(1/(double) numberOfBotTracksWithHitOnMissingLayerMomentumLayPosi.get(j+1)[i] + 1/(double) numberOfBotTracksMomentumLayPosi.get(j+1)[i]);
+ }
+ else{
+ hitEfficiencyErrorMomentumLayBotPosi.get(j+1)[i] = 0;
+ }
HitEfficiency_MomentumLay_top.get(j+1).fill(p,hitEfficiencyMomentumLayTop.get(j+1)[i]);
HitEfficiency_MomentumLay_bot.get(j+1).fill(p,hitEfficiencyMomentumLayBot.get(j+1)[i]);
HitEfficiency_MomentumLayError_top.get(j+1).fill(p,hitEfficiencyErrorMomentumLayTop.get(j+1)[i]);
HitEfficiency_MomentumLayError_bot.get(j+1).fill(p,hitEfficiencyErrorMomentumLayBot.get(j+1)[i]);
+ HitEfficiency_MomentumLay_topElec.get(j+1).fill(p,hitEfficiencyMomentumLayTopElec.get(j+1)[i]);
+ HitEfficiency_MomentumLay_botElec.get(j+1).fill(p,hitEfficiencyMomentumLayBotElec.get(j+1)[i]);
+ HitEfficiency_MomentumLayError_topElec.get(j+1).fill(p,hitEfficiencyErrorMomentumLayTopElec.get(j+1)[i]);
+ HitEfficiency_MomentumLayError_botElec.get(j+1).fill(p,hitEfficiencyErrorMomentumLayBotElec.get(j+1)[i]);
+ HitEfficiency_MomentumLay_topPosi.get(j+1).fill(p,hitEfficiencyMomentumLayTopPosi.get(j+1)[i]);
+ HitEfficiency_MomentumLay_botPosi.get(j+1).fill(p,hitEfficiencyMomentumLayBotPosi.get(j+1)[i]);
+ HitEfficiency_MomentumLayError_topPosi.get(j+1).fill(p,hitEfficiencyErrorMomentumLayTopPosi.get(j+1)[i]);
+ HitEfficiency_MomentumLayError_botPosi.get(j+1).fill(p,hitEfficiencyErrorMomentumLayBotPosi.get(j+1)[i]);
}
}
System.out.println("%===================================================================%");
|