Print

Print


Author: [log in to unmask]
Date: Mon Jun 20 23:49:34 2016
New Revision: 4408

Log:
Updated Hit Efficiency 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	Mon Jun 20 23:49:34 2016
@@ -38,6 +38,7 @@
 import org.lcsim.event.ReconstructedParticle;
 import org.lcsim.event.Track;
 import org.lcsim.event.TrackerHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackCross;
 import org.lcsim.fit.helicaltrack.HelicalTrackFit;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
@@ -79,6 +80,33 @@
     IHistogram1D HitEfficiency_Momentum_bot;
     IHistogram1D HitEfficiencyError_Momentum_top;
     IHistogram1D HitEfficiencyError_Momentum_bot;
+    
+    IHistogram1D HitEfficiencyElec_top;
+    IHistogram1D HitEfficiencyPosi_top;
+    IHistogram1D HitEfficiencyElec_bot;
+    IHistogram1D HitEfficiencyPosi_bot;
+    IHistogram1D HitEfficiencyErrorElec_top;
+    IHistogram1D HitEfficiencyErrorPosi_top;
+    IHistogram1D HitEfficiencyErrorElec_bot;
+    IHistogram1D HitEfficiencyErrorPosi_bot;
+    
+    IHistogram1D HitEfficiencyElecStereo_top;
+    IHistogram1D HitEfficiencyElecAxial_top;
+    IHistogram1D HitEfficiencyPosiStereo_top;
+    IHistogram1D HitEfficiencyPosiAxial_top;
+    IHistogram1D HitEfficiencyElecStereo_bot;
+    IHistogram1D HitEfficiencyElecAxial_bot;
+    IHistogram1D HitEfficiencyPosiStereo_bot;
+    IHistogram1D HitEfficiencyPosiAxial_bot;
+    IHistogram1D HitEfficiencyErrorElecStereo_top;
+    IHistogram1D HitEfficiencyErrorElecAxial_top;
+    IHistogram1D HitEfficiencyErrorPosiStereo_top;
+    IHistogram1D HitEfficiencyErrorPosiAxial_top;
+    IHistogram1D HitEfficiencyErrorElecStereo_bot;
+    IHistogram1D HitEfficiencyErrorElecAxial_bot;
+    IHistogram1D HitEfficiencyErrorPosiStereo_bot;
+    IHistogram1D HitEfficiencyErrorPosiAxial_bot;
+	
     IHistogram1D TrackXTop;
     IHistogram1D TrackYTop;
     IHistogram1D TrackXBot;
@@ -102,6 +130,10 @@
     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, 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>();
     
     int num_lay = 6;
     
@@ -186,6 +218,16 @@
     double botYResidualCut6 = 3;
     
     int nSigCut = 1;
+    
+    double[] gapXtop = new double[num_lay];
+    double[] gapXbot = new double[num_lay];
+    double gapXtop4 = 15;
+    double gapXtop5 = 21;
+    double gapXtop6 = 27;
+    double gapXbot4 = 15;
+    double gapXbot5 = 21;
+    double gapXbot6 = 27;
+    
 
     TrackerHitUtils trackerHitUtils = new TrackerHitUtils();
     
@@ -207,9 +249,9 @@
     double[] bottomTracksPerMissingLayer = new double[5];
     double[] bottomTracksWithHitOnMissingLayer = new double[5];
 
-    int nBinx = 110;
-    int nBiny = 120;
-    int nP = 20;
+    int nBinx = 500;
+    int nBiny = 700;
+    int nP = 50;
     int[] numberOfTopTracks = new int[num_lay];
     int[] numberOfBotTracks = new int[num_lay];
     int[] numberOfTopTracksWithHitOnMissingLayer = new int[num_lay];
@@ -218,6 +260,57 @@
     double[] hitEfficiencyBot = new double[num_lay];
     double[] errorTop = new double[num_lay];
     double[] errorBot = new double[num_lay];
+    
+    int[] numberOfTopTracksElec = new int[num_lay];
+    int[] numberOfTopTracksPosi = new int[num_lay];
+    int[] numberOfBotTracksElec = new int[num_lay];
+    int[] numberOfBotTracksPosi = new int[num_lay];
+    int[] numberOfTopTracksWithHitOnMissingLayerElec = new int[num_lay];
+    int[] numberOfTopTracksWithHitOnMissingLayerPosi = new int[num_lay];
+    int[] numberOfBotTracksWithHitOnMissingLayerElec = new int[num_lay];
+    int[] numberOfBotTracksWithHitOnMissingLayerPosi = new int[num_lay];
+    double[] hitEfficiencyTopElec = new double[num_lay];
+    double[] hitEfficiencyTopPosi = new double[num_lay];
+    double[] hitEfficiencyBotElec = new double[num_lay];
+    double[] hitEfficiencyBotPosi = new double[num_lay];
+    double[] errorTopElec = new double[num_lay];
+    double[] errorTopPosi = new double[num_lay];
+    double[] errorBotElec = new double[num_lay];
+    double[] errorBotPosi = new double[num_lay];
+    
+    int[] numberOfTopTracksElecStereo = new int[num_lay];
+    int[] numberOfTopTracksElecAxial = new int[num_lay];
+    int[] numberOfTopTracksPosiStereo = new int[num_lay];
+    int[] numberOfTopTracksPosiAxial = new int[num_lay];
+    int[] numberOfBotTracksElecStereo = new int[num_lay];
+    int[] numberOfBotTracksElecAxial = new int[num_lay];
+    int[] numberOfBotTracksPosiStereo = new int[num_lay];
+    int[] numberOfBotTracksPosiAxial = new int[num_lay];
+    int[] numberOfTopTracksWithHitOnMissingLayerElecStereo = new int[num_lay];
+    int[] numberOfTopTracksWithHitOnMissingLayerElecAxial = new int[num_lay];
+    int[] numberOfTopTracksWithHitOnMissingLayerPosiStereo = new int[num_lay];
+    int[] numberOfTopTracksWithHitOnMissingLayerPosiAxial = new int[num_lay];
+    int[] numberOfBotTracksWithHitOnMissingLayerElecStereo = new int[num_lay];
+    int[] numberOfBotTracksWithHitOnMissingLayerElecAxial = new int[num_lay];
+    int[] numberOfBotTracksWithHitOnMissingLayerPosiStereo = new int[num_lay];
+    int[] numberOfBotTracksWithHitOnMissingLayerPosiAxial = new int[num_lay];
+    double[] hitEfficiencyTopElecStereo = new double[num_lay];
+    double[] hitEfficiencyTopElecAxial = new double[num_lay];
+    double[] hitEfficiencyTopPosiStereo = new double[num_lay];
+    double[] hitEfficiencyTopPosiAxial = new double[num_lay];
+    double[] hitEfficiencyBotElecStereo = new double[num_lay];
+    double[] hitEfficiencyBotElecAxial = new double[num_lay];
+    double[] hitEfficiencyBotPosiStereo = new double[num_lay];
+    double[] hitEfficiencyBotPosiAxial = new double[num_lay];
+    double[] errorTopElecStereo = new double[num_lay];
+    double[] errorTopElecAxial = new double[num_lay];
+    double[] errorTopPosiStereo = new double[num_lay];
+    double[] errorTopPosiAxial = new double[num_lay];
+    double[] errorBotElecStereo = new double[num_lay];
+    double[] errorBotElecAxial = new double[num_lay];
+    double[] errorBotPosiStereo = new double[num_lay];
+    double[] errorBotPosiAxial = new double[num_lay];
+    
     int[][][] numberOfTopTracksPos = new int[num_lay][nBinx][nBiny];
     int[][][] numberOfBotTracksPos = new int[num_lay][nBinx][nBiny];
     int[][][] numberOfTopTracksWithHitOnMissingLayerPos = new int[num_lay][nBinx][nBiny];
@@ -233,36 +326,46 @@
     double[] hitEfficiencyMomentumTop = new double[nP];
     double[] hitEfficiencyMomentumBot = new double[nP];
     double[] hitEfficiencyErrorMomentumTop = new double[nP];
-    double[] hitEfficiencyErrorMomentumBot = new double[nP];
+    double[] hitEfficiencyErrorMomentumBot = new double[nP];  
+    Map<Integer, int[]> numberOfTopTracksMomentumLay = new HashMap<Integer,int[]>();
+    Map<Integer, int[]> numberOfBotTracksMomentumLay = new HashMap<Integer,int[]>();
+    Map<Integer, int[]> numberOfTopTracksWithHitOnMissingLayerMomentumLay = new HashMap<Integer,int[]>();
+    Map<Integer, int[]> numberOfBotTracksWithHitOnMissingLayerMomentumLay = new HashMap<Integer,int[]>();
+    Map<Integer, double[]> hitEfficiencyMomentumLayTop = new HashMap<Integer,double[]>();
+    Map<Integer, double[]> hitEfficiencyMomentumLayBot = new HashMap<Integer,double[]>();
+    Map<Integer, double[]> hitEfficiencyErrorMomentumLayTop = new HashMap<Integer,double[]>();
+    Map<Integer, double[]> hitEfficiencyErrorMomentumLayBot = new HashMap<Integer,double[]>();
     
     double lowerLimX = -100;
-    double upperLimX = 120;
-    double lowerLimY = -50;
+    double upperLimX = 130;
+    double lowerLimY = -70;
     double upperLimY = 70;
     double lowerLimP;
     double upperLimP;
    
-    double angle = -0.035;
+    double angle = 0.0305;
     double xComp = Math.sin(angle);
     double yComp = Math.cos(angle);
     double zComp = 0.0;
     Hep3Vector unitNormal = new BasicHep3Vector(xComp,yComp,zComp);
     
-    Hep3Vector zPointonPlaneLay1Top = new BasicHep3Vector(0,92.09,0);
-    Hep3Vector zPointonPlaneLay2Top = new BasicHep3Vector(0,192.1,0);
-    Hep3Vector zPointonPlaneLay3Top = new BasicHep3Vector(0,292.2,0);
-    Hep3Vector zPointonPlaneLay4Top = new BasicHep3Vector(0,492.4,0);
-    Hep3Vector zPointonPlaneLay5Top = new BasicHep3Vector(0,692.7,0);
-    Hep3Vector zPointonPlaneLay6Top = new BasicHep3Vector(0,893.2,0);
+    Hep3Vector zPointonPlaneLay1Top = new BasicHep3Vector(0,0,92.09);
+    Hep3Vector zPointonPlaneLay2Top = new BasicHep3Vector(0,0,192.1);
+    Hep3Vector zPointonPlaneLay3Top = new BasicHep3Vector(0,0,292.2);
+    Hep3Vector zPointonPlaneLay4Top = new BasicHep3Vector(0,0,492.4);
+    Hep3Vector zPointonPlaneLay5Top = new BasicHep3Vector(0,0,692.7);
+    Hep3Vector zPointonPlaneLay6Top = new BasicHep3Vector(0,0,893.2);
     Hep3Vector[] zPointonPlaneTop = new Hep3Vector[num_lay];
-    
-    Hep3Vector zPointonPlaneLay1Bot = new BasicHep3Vector(0,107.7,0);
-    Hep3Vector zPointonPlaneLay2Bot = new BasicHep3Vector(0,207.9,0);
-    Hep3Vector zPointonPlaneLay3Bot = new BasicHep3Vector(0,308.8,0);
-    Hep3Vector zPointonPlaneLay4Bot = new BasicHep3Vector(0,508.4,0);
-    Hep3Vector zPointonPlaneLay5Bot = new BasicHep3Vector(0,708.7,0);
-    Hep3Vector zPointonPlaneLay6Bot = new BasicHep3Vector(0,909.0,0);
+    double[] zTop = new double[num_lay];
+    
+    Hep3Vector zPointonPlaneLay1Bot = new BasicHep3Vector(0,0,107.7);
+    Hep3Vector zPointonPlaneLay2Bot = new BasicHep3Vector(0,0,207.9);
+    Hep3Vector zPointonPlaneLay3Bot = new BasicHep3Vector(0,0,308.8);
+    Hep3Vector zPointonPlaneLay4Bot = new BasicHep3Vector(0,0,508.4);
+    Hep3Vector zPointonPlaneLay5Bot = new BasicHep3Vector(0,0,708.7);
+    Hep3Vector zPointonPlaneLay6Bot = new BasicHep3Vector(0,0,909.0);
     Hep3Vector[] zPointonPlaneBot = new Hep3Vector[num_lay];
+    double[] zBot = new double[num_lay];
     
     Hep3Vector trackPos = null;
     Hep3Vector frontTrackPos = null;
@@ -327,8 +430,22 @@
         BeamEnergyCollection beamEnergyCollection = 
                 this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();        
         ebeam = beamEnergyCollection.get(0).getBeamEnergy();
-        lowerLimP = 0.2 * ebeam;
+        lowerLimP = 0.0 * ebeam;
         upperLimP = 1.3 * ebeam;
+        
+        zTop[0] = zPointonPlaneLay1Top.z();
+        zTop[1] = zPointonPlaneLay2Top.z();
+        zTop[2] = zPointonPlaneLay3Top.z();
+        zTop[3] = zPointonPlaneLay4Top.z();
+        zTop[4] = zPointonPlaneLay5Top.z();
+        zTop[5] = zPointonPlaneLay6Top.z();
+        
+        zBot[0] = zPointonPlaneLay1Bot.z();
+        zBot[1] = zPointonPlaneLay2Bot.z();
+        zBot[2] = zPointonPlaneLay3Bot.z();
+        zBot[3] = zPointonPlaneLay4Bot.z();
+        zBot[4] = zPointonPlaneLay5Bot.z();
+        zBot[5] = zPointonPlaneLay6Bot.z();
         
         zPointonPlaneTop[0] = zPointonPlaneLay1Top;
         zPointonPlaneTop[1] = zPointonPlaneLay2Top;
@@ -403,6 +520,20 @@
         topYResidualCut[5] = topYResidualCut6;
         botXResidualCut[5] = botXResidualCut6;
         botYResidualCut[5] = botYResidualCut6;
+        
+        gapXtop[0] = 0;
+        gapXtop[1] = 0;
+        gapXtop[2] = 0;
+        gapXtop[3] = gapXtop4;
+        gapXtop[4] = gapXtop5;
+        gapXtop[5] = gapXtop6;
+        
+        gapXbot[0] = 0;
+        gapXbot[1] = 0;
+        gapXbot[2] = 0;
+        gapXbot[3] = gapXbot4;
+        gapXbot[4] = gapXbot5;
+        gapXbot[5] = gapXbot6;
         
         
         // Get the HpsSiSensor objects from the tracker detector element
@@ -478,10 +609,37 @@
         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);
+        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);
+        HitEfficiencyPosi_bot = aida.histogram1D("Hit Efficiency Bot Positron Side", num_lay, 0, num_lay);
+        HitEfficiencyErrorElec_top = aida.histogram1D("Hit Efficiency Error Top Electron Side", num_lay, 0, num_lay);
+        HitEfficiencyErrorPosi_top = aida.histogram1D("Hit Efficiency Error Top Positron Side", num_lay, 0, num_lay);
+        HitEfficiencyErrorElec_bot = aida.histogram1D("Hit Efficiency Error Bot Electron", num_lay, 0, num_lay);
+        HitEfficiencyErrorPosi_bot = aida.histogram1D("Hit Efficiency Error Bot Positron", num_lay, 0, num_lay);
+        
+        HitEfficiencyElecStereo_top = aida.histogram1D("Hit Efficiency Top Stereo Electron Side", num_lay, 0, num_lay);
+        HitEfficiencyElecAxial_top = aida.histogram1D("Hit Efficiency Top Axial Electron Side", num_lay, 0, num_lay);
+        HitEfficiencyPosiStereo_top = aida.histogram1D("Hit Efficiency Top Stereo Positron Side", num_lay, 0, num_lay);
+        HitEfficiencyPosiAxial_top = aida.histogram1D("Hit Efficiency Top Axial Positron Side", num_lay, 0, num_lay);
+        HitEfficiencyElecStereo_bot = aida.histogram1D("Hit Efficiency Bot Stereo Electron Side", num_lay, 0, num_lay);
+        HitEfficiencyElecAxial_bot = aida.histogram1D("Hit Efficiency Bot Axial Electron Side", num_lay, 0, num_lay);
+        HitEfficiencyPosiStereo_bot = aida.histogram1D("Hit Efficiency Bot Stereo Positron Side", num_lay, 0, num_lay);
+        HitEfficiencyPosiAxial_bot = aida.histogram1D("Hit Efficiency Bot Axial Positron Side", num_lay, 0, num_lay);
+        HitEfficiencyErrorElecStereo_top = aida.histogram1D("Hit Efficiency Error Top Stereo Electron Side", num_lay, 0, num_lay);
+        HitEfficiencyErrorElecAxial_top = aida.histogram1D("Hit Efficiency Error Top Axial Electron Side", num_lay, 0, num_lay);
+        HitEfficiencyErrorPosiStereo_top = aida.histogram1D("Hit Efficiency Error Top Stereo Positron Side", num_lay, 0, num_lay);
+        HitEfficiencyErrorPosiAxial_top = aida.histogram1D("Hit Efficiency Error Top Axial Positron Side", num_lay, 0, num_lay);
+        HitEfficiencyErrorElecStereo_bot = aida.histogram1D("Hit Efficiency Error Bot Stereo Electron", num_lay, 0, num_lay);
+        HitEfficiencyErrorElecAxial_bot = aida.histogram1D("Hit Efficiency Error Bot Axial Electron", num_lay, 0, num_lay);
+        HitEfficiencyErrorPosiStereo_bot = aida.histogram1D("Hit Efficiency Error Bot Stereo Positron", num_lay, 0, num_lay);
+        HitEfficiencyErrorPosiAxial_bot = aida.histogram1D("Hit Efficiency Error Bot Axial Positron", num_lay, 0, num_lay);
+        
         HitEfficiency_Momentum_top = aida.histogram1D("Hit Efficiency Momentum Top", nP, lowerLimP, upperLimP);
         HitEfficiency_Momentum_bot = aida.histogram1D("Hit Efficiency Momentum Bot", nP, lowerLimP, upperLimP);
         HitEfficiencyError_Momentum_top = aida.histogram1D("Hit Efficiency Error Momentum Top", nP, lowerLimP, upperLimP);
         HitEfficiencyError_Momentum_bot = aida.histogram1D("Hit Efficiency Error Momentum Bot", nP, lowerLimP, upperLimP);
+        
         TrackXTop = aida.histogram1D("Extrapolated Track X Top", 50, lowerLimX, upperLimX);
         TrackYTop = aida.histogram1D("Extrapolated Track Y Top", 50, lowerLimY, upperLimY);
         TrackXBot = aida.histogram1D("Extrapolated Track X Bot", 50, lowerLimX, upperLimX);
@@ -507,26 +665,33 @@
         	UnbiasedResidualX_bot.put((i+1),histogramFactory.createHistogram1D("Unbiased Residual X Bot Layer #" + (i+1),100,-10,10));
         	UnbiasedResidualY_top.put((i+1),histogramFactory.createHistogram1D("Unbiased Residual Y Top Layer #" + (i+1),100,-10,10));
         	UnbiasedResidualY_bot.put((i+1),histogramFactory.createHistogram1D("Unbiased Residual Y Bot Layer #" + (i+1),100,-10,10));
+        	HitEfficiency_MomentumLay_top.put((i+1), histogramFactory.createHistogram1D("Hit Efficiency Momentum Top Layer #"+ (i+1),nP, lowerLimP, upperLimP));
+        	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));
+        	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]);
+        	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]);
         }
         
         for (IPlotter plotter : plotters.values()) { 
-            plotter.show();
+            //plotter.show();
         }
     }
     @Override
 public void process(EventHeader event){
 		aida.tree().cd("/");
-        
-		System.out.println("Hello");
 		
         // If the event does not have tracks, skip it
         //if(!event.hasCollection(Track.class, trackCollectionName)) return;
 
         // Get the list of tracks from the event
         List<List<Track>> trackCollections = event.get(Track.class);
-        
-        // For now, only look at events with a single track
-        //if(tracks.size() != 1 ) return;
        
         // Get the list of final state particles from the event.  These will
         // be used to obtain the track momentum.
@@ -538,23 +703,24 @@
         
         //  Get all of the stereo hits in the event
         List<TrackerHit> stereoHits = event.get(TrackerHit.class, stereoHitCollectionName);
-        
-        // Get the list of Ecal clusters from the event
-        //List<Cluster> ecalClusters = event.get(Cluster.class, ecalClustersCollectionName);
 
         for (List<Track> tracks : trackCollections) {
         	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.
         		if(track.getTrackerHits().size() != this.hitsOnTrack){
-        			System.out.println("This track doesn't have the required number of hits.");
+        			//System.out.println("This track doesn't have the required number of hits.");
         			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();
+        		
         		// Calculate the momentum of the track
         		HelicalTrackFit hlc_trk_fit = TrackUtils.getHTF(track.getTrackStates().get(0));
         		
-        		//double p = this.getReconstructedParticle(track).getMomentum().magnitude();
         		double B_field = Math.abs(TrackUtils.getBField(event.getDetector()).y());
 
                 double p = hlc_trk_fit.p(B_field);
@@ -577,31 +743,14 @@
         		}
         		if(!isWithinAcceptance(track, unusedLayer)) continue;
         		
-        		//int nTop = 0;
-        		//int nBot = 0;
-        		//for (TrackerHit stereoHit : stereoHits) {
-        			//HpsSiSensor hitSensor = (HpsSiSensor) ((RawTrackerHit) stereoHit.getRawHits().get(0)).getDetectorElement();
-      	          
-        			//if ((trackSensor.isTopLayer() && hitSensor.isBottomLayer()) 
-        					//|| (trackSensor.isBottomLayer() && hitSensor.isTopLayer())) continue;
-        			
-        			//int layer = (hitSensor.getLayerNumber() + 1)/2;
-               	 	
-               	 	//if (unusedLayer != layer) continue; 
-        			
-        			//Hep3Vector stereoHitPosition = new BasicHep3Vector(stereoHit.getPosition());
-           	 		//Hep3Vector trackPosition = TrackUtils.extrapolateTrack(track, stereoHitPosition.z());
-           	 	//Hep3Vector trackPositionExtrap = TrackUtils.getHelixPlaneIntercept(hlc_trk_fit,unitNormal,zPointonPlane[unusedLayer-1],B_field);
-           	 	//TrackX.fill(trackPositionExtrap.x());
-           	 	//TrackY.fill(trackPositionExtrap.y());
            	 	trackMomentum_accepted.get(unusedLayer).fill(p);
            	 	if (trackSensor.isTopLayer()) {
-           	 			//if (nTop > 0){;
-           	 				//continue;
-           	 			//}
-           	 		//Hep3Vector trackPositionExtrap = TrackUtils.getHelixPlaneIntercept(hlc_trk_fit,unitNormal,zPointonPlaneTop[unusedLayer-1],B_field);
-           	 		//TrackXTop.fill(trackPositionExtrap.x());
-           	 		//TrackYTop.fill(trackPositionExtrap.y());
+           	 		
+           	 		Hep3Vector extrapTrackPos = TrackUtils.extrapolateTrack(track,  zTop[unusedLayer-1]);                
+           	 		double extrapTrackX = extrapTrackPos.x();
+           	 		double extrapTrackY = extrapTrackPos.y();
+           	 		TrackXTop.fill(extrapTrackX);
+           	 		TrackYTop.fill(extrapTrackY);
            	 		trackMomentum_accepted_top.get(unusedLayer).fill(p);
            	 		numberOfTopTracks[unusedLayer-1]++;
            	 		for(int i = 0; i<nP;i++){
@@ -610,31 +759,52 @@
            	 			double upperP = lowerP + mP;
            	 			if(lowerP < p && p < upperP){
            	 				numberOfTopTracksMomentum[i]++;
+           	 				for(int j = 0; j<num_lay;j++){
+           	 					if(unusedLayer == j + 1){
+           	 						numberOfTopTracksMomentumLay.get(j+1)[i]++;
+           	 					}
+           	 				}
            	 			}
            	 		}
            	 		for(int i = 0; i<nBinx; i++){
            	 			double mX = (upperLimX - lowerLimX)/((double) nBinx);
            	 			double lowerX = mX * i + lowerLimX;
            	 			double upperX = lowerX + mX;
-           	 			/*if(lowerX < trackPositionExtrap.x() && trackPositionExtrap.x() < upperX){
+           	 			if(lowerX < extrapTrackX && extrapTrackX < upperX){
            	 				for(int j = 0; j<nBiny; j++){
            	 					double mY = (upperLimY - lowerLimY)/((double) nBiny);
            	 					double lowerY = mY * j + lowerLimY;
            	 					double upperY = lowerY + mY;
-           	 					if(lowerY < trackPositionExtrap.y() && trackPositionExtrap.y() < upperY){
+           	 					if(lowerY < extrapTrackY && extrapTrackY < upperY){
            	 						numberOfTopTracksPos[unusedLayer-1][i][j]++;
            	 					}     
            	 				}
-           	 			}*/          	 			
+           	 			}          	 			
            	 		}
-           	 		//nTop++;
+           	 		if(extrapTrackX < gapXtop[unusedLayer-1]){
+           	 			numberOfTopTracksElec[unusedLayer-1]++;
+           	 			if(trackSensor.isAxial()){
+           	 				numberOfTopTracksElecAxial[unusedLayer-1]++;
+           	 			}
+           	 			else{
+           	 				numberOfTopTracksElecStereo[unusedLayer-1]++;
+           	 			}
+           	 		}
+           	 		else{
+           	 			numberOfTopTracksPosi[unusedLayer-1]++;
+           	 			if(trackSensor.isAxial()){
+           	 				numberOfTopTracksPosiAxial[unusedLayer-1]++;
+           	 			}
+           	 			else{
+           	 				numberOfTopTracksPosiStereo[unusedLayer-1]++;
+           	 			}
+           	 		}
            	 	} else{
-           	 			//if (nBot > 0){;
-           	 			//continue;
-           	 			//}
-           	 		//Hep3Vector trackPositionExtrap = TrackUtils.getHelixPlaneIntercept(hlc_trk_fit,unitNormal,zPointonPlaneBot[unusedLayer-1],B_field);
-           	 		//TrackXBot.fill(trackPositionExtrap.x());
-           	 		//TrackYBot.fill(trackPositionExtrap.y());
+           	 		Hep3Vector extrapTrackPos = TrackUtils.extrapolateTrack(track,  zTop[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]++;
            	 		for(int i = 0; i<nP;i++){
@@ -643,26 +813,47 @@
            	 			double upperP = lowerP + mP;
            	 			if(lowerP < p && p < upperP){
            	 				numberOfBotTracksMomentum[i]++;
+           	 				for(int j = 0; j<num_lay;j++){
+           	 					if(unusedLayer == j + 1){
+           	 						numberOfBotTracksMomentumLay.get(j+1)[i]++;
+           	 					}
+           	 				}
            	 			}
            	 		}
            	 		for(int i = 0; i<nBinx; i++){
            	 			double mX = (upperLimX - lowerLimX)/((double) nBinx);
            	 			double lowerX = mX * i + lowerLimX;
            	 			double upperX = lowerX + mX;
-           	 			/*if(lowerX < trackPositionExtrap.x() && trackPositionExtrap.x() < upperX){
+           	 			if(lowerX < extrapTrackX && extrapTrackX < upperX){
            	 				for(int j = 0; j<nBiny; j++){
            	 					double mY = (upperLimY - lowerLimY)/((double) nBiny);
            	 					double lowerY = mY * j + lowerLimY;
            	 					double upperY = lowerY + mY;
-           	 					if(lowerY < trackPositionExtrap.y() && trackPositionExtrap.y() < upperY){
+           	 					if(lowerY < extrapTrackY && extrapTrackY < upperY){
            	 						numberOfBotTracksPos[unusedLayer-1][i][j]++;
-           	 						//}     
-           	 				}          	 			
+           	 					}          	 			
+           	 				}
            	 			}
-           	 		}*/
-           	 			//nBot++;
+           	 		}
+           	 		if(extrapTrackX < gapXtop[unusedLayer-1]){
+           	 			numberOfBotTracksElec[unusedLayer-1]++;
+           	 			if(trackSensor.isAxial()){
+           	 				numberOfBotTracksElecAxial[unusedLayer-1]++;
+           	 			}
+           	 			else{
+           	 				numberOfBotTracksElecStereo[unusedLayer-1]++;
+           	 			}
+           	 		}
+           	 		else{
+           	 			numberOfBotTracksPosi[unusedLayer-1]++;
+           	 			if(trackSensor.isAxial()){
+           	 				numberOfBotTracksPosiAxial[unusedLayer-1]++;
+           	 			}
+           	 			else{
+       	 					numberOfBotTracksPosiStereo[unusedLayer-1]++;
+           	 			}
+           	 		}
            	 	}
-        	}
         		int countTop = 0;
         		int countBot = 0;
         		for (TrackerHit stereoHit : stereoHits) {
@@ -675,10 +866,6 @@
                	 	int layer = (hitSensor.getLayerNumber() + 1)/2;
                	 	
                	 	if (unusedLayer != layer) continue;              	 	
-               	 	
-               	 	//System.out.println(count);
-               	 	
-               	 	//System.out.println("Track " + track + "   Collection " + trackCollections);
                         
                	 	Hep3Vector stereoHitPosition = new BasicHep3Vector(stereoHit.getPosition());
                	 	Hep3Vector trackPosition = TrackUtils.extrapolateTrack(track, stereoHitPosition.z());
@@ -692,12 +879,10 @@
                	 		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+this.topXResidualOffset) > nSigCut*this.topXResidualCut 
-               	 				//&& Math.abs(yResidual + this.topYResidualOffset) > nSigCut*this.topYResidualCut) continue;
                	 		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);
+               	 			//System.out.println("Top " + unusedLayer);
                	 			continue;
                	 		}
                	 		trackMomentumPlots.get("Track Momentum - All Layers Hit").fill(p);
@@ -709,6 +894,11 @@
                	 			double upperP = lowerP + mP;
                	 			if(lowerP < p && p < upperP){
                	 				numberOfTopTracksWithHitOnMissingLayerMomentum[i]++;
+               	 				for(int j = 0; j<num_lay;j++){
+               	 					if(unusedLayer == j + 1){
+               	 						numberOfTopTracksWithHitOnMissingLayerMomentumLay.get(j+1)[i]++;
+               	 					}
+               	 				}
                	 			}
                	 		}
                	 		for(int i = 0; i<nBinx; i++){
@@ -726,6 +916,12 @@
                	 				}
                	 			}             	 			
                	 		}
+               	 		if(trackPosition.x() < gapXtop[unusedLayer-1]){
+               	 			numberOfTopTracksWithHitOnMissingLayerElec[unusedLayer-1]++;
+               	 		}
+               	 		else{
+               	 			numberOfTopTracksWithHitOnMissingLayerPosi[unusedLayer-1]++;	
+               	 		}
                	 		countTop++;               	                	 		
                	 	} else {
                	 		UnbiasedResidualX_bot.get(unusedLayer).fill(xResidual);
@@ -733,12 +929,10 @@
                	 		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+this.botXResidualOffset) > nSigCut*this.botXResidualCut 
-               	 				//&& Math.abs(yResidual + this.botYResidualOffset) > nSigCut*this.botYResidualCut) continue;
                	 		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);
+           	 				//System.out.println("Bot " + unusedLayer);
            	 				continue;
            	 			}
                	 		trackMomentumPlots.get("Track Momentum - All Layers Hit").fill(p);
@@ -750,6 +944,11 @@
                	 			double upperP = lowerP + mP;
                	 			if(lowerP < p && p < upperP){
                	 				numberOfBotTracksWithHitOnMissingLayerMomentum[i]++;
+               	 				for(int j = 0; j<num_lay;j++){
+               	 					if(unusedLayer == j + 1){
+               	 						numberOfBotTracksWithHitOnMissingLayerMomentumLay.get(j+1)[i]++;
+               	 					}
+               	 				}
                	 			}
                	 		}
                	 		for(int i = 0; i<nBinx; i++){
@@ -767,6 +966,12 @@
                	 				}
                	 			}             	 			
                	 		}
+               	 		if(trackPosition.x() < gapXtop[unusedLayer-1]){
+               	 			numberOfBotTracksWithHitOnMissingLayerElec[unusedLayer-1]++;
+               	 		}
+               	 		else{
+               	 			numberOfBotTracksWithHitOnMissingLayerPosi[unusedLayer-1]++;	
+               	 		}
                	 		countBot++;            	 	
         			}
         		}          
@@ -805,7 +1010,7 @@
     // incremented i.e. is unused by the track
     for(int layer = 0; layer < svtLayer.length; layer++){
         if(svtLayer[layer] == 0) { 
-            System.out.println("Layer number " + (layer+1) + " is not used");
+            //System.out.println("Layer number " + (layer+1) + " is not used");
             return (layer + 1);
         }
     }
@@ -1000,23 +1205,53 @@
 @Override
 public void endOfData(){
     
-    /*for(int i = 0; i<num_lay; i++){
-    	hitEfficiencyTop[i] = numberOfTopTracksWithHitOnMissingLayer[i]/ (double) numberOfTopTracks[i];
-    	System.out.println(hitEfficiencyTop[i]);
+    for(int i = 0; i<num_lay; i++){
+    	hitEfficiencyTop[i] = numberOfTopTracksWithHitOnMissingLayer[i]/(double) numberOfTopTracks[i];
     	hitEfficiencyBot[i] = numberOfBotTracksWithHitOnMissingLayer[i]/(double) numberOfBotTracks[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]);
-    	
-    	
-    	
+    	errorBot[i] = Math.sqrt(1/(double) numberOfBotTracks[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayer[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]);
+    	hitEfficiencyTopElecStereo[i] = numberOfTopTracksWithHitOnMissingLayerElecStereo[i]/(double) numberOfTopTracksElecStereo[i];
+    	hitEfficiencyTopElecAxial[i] = numberOfTopTracksWithHitOnMissingLayerElecAxial[i]/(double) numberOfTopTracksElecAxial[i];
+		hitEfficiencyTopPosiStereo[i] = numberOfTopTracksWithHitOnMissingLayerPosiStereo[i]/(double) numberOfTopTracksPosiStereo[i];
+		hitEfficiencyTopPosiAxial[i] = numberOfTopTracksWithHitOnMissingLayerPosiAxial[i]/(double) numberOfTopTracksPosiAxial[i];
+    	hitEfficiencyBotElecStereo[i] = numberOfBotTracksWithHitOnMissingLayerElecStereo[i]/(double) numberOfBotTracksElecStereo[i];
+    	hitEfficiencyBotElecAxial[i] = numberOfBotTracksWithHitOnMissingLayerElecAxial[i]/(double) numberOfBotTracksElecAxial[i];
+    	hitEfficiencyBotPosiStereo[i] = numberOfBotTracksWithHitOnMissingLayerPosiStereo[i]/(double) numberOfBotTracksPosiStereo[i];
+    	hitEfficiencyBotPosiAxial[i] = numberOfBotTracksWithHitOnMissingLayerPosiAxial[i]/(double) numberOfBotTracksPosiAxial[i];
+    	errorTopElecStereo[i] = Math.sqrt(1/(double) numberOfTopTracksElecStereo[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayerElecStereo[i]);
+    	errorTopElecAxial[i] = Math.sqrt(1/(double) numberOfTopTracksElecAxial[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayerElecAxial[i]);
+    	errorTopPosiStereo[i] = Math.sqrt(1/(double) numberOfTopTracksPosiStereo[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayerPosiStereo[i]);
+    	errorTopPosiAxial[i] = Math.sqrt(1/(double) numberOfTopTracksPosiAxial[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayerPosiAxial[i]);
+    	errorBotElecStereo[i] = Math.sqrt(1/(double) numberOfBotTracksElecStereo[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayerElecStereo[i]);
+    	errorBotElecAxial[i] = Math.sqrt(1/(double) numberOfBotTracksElecAxial[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayerElecAxial[i]);
+    	errorBotPosiStereo[i] = Math.sqrt(1/(double) numberOfBotTracksPosiStereo[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayerPosiStereo[i]);
+    	errorBotPosiAxial[i] = Math.sqrt(1/(double) numberOfBotTracksPosiAxial[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayerPosiAxial[i]);
+    	if(i+1>num_lay/2){
+    		hitEfficiencyTopElec[i] = numberOfTopTracksWithHitOnMissingLayerElec[i]/(double) numberOfTopTracksElec[i];
+    		hitEfficiencyTopPosi[i] = numberOfTopTracksWithHitOnMissingLayerPosi[i]/(double) numberOfTopTracksPosi[i];
+        	hitEfficiencyBotElec[i] = numberOfBotTracksWithHitOnMissingLayerElec[i]/(double) numberOfBotTracksElec[i];
+        	hitEfficiencyBotPosi[i] = numberOfBotTracksWithHitOnMissingLayerPosi[i]/(double) numberOfBotTracksPosi[i];
+        	errorTopElec[i] = Math.sqrt(1/(double) numberOfTopTracksElec[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayerElec[i]);
+        	errorTopPosi[i] = Math.sqrt(1/(double) numberOfTopTracksPosi[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayerPosi[i]);
+        	errorBotElec[i] = Math.sqrt(1/(double) numberOfBotTracksElec[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayerElec[i]);
+        	errorBotPosi[i] = Math.sqrt(1/(double) numberOfBotTracksPosi[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayerPosi[i]);
+        	HitEfficiencyElec_top.fill(i,hitEfficiencyTopElec[i]);
+        	HitEfficiencyPosi_top.fill(i,hitEfficiencyTopPosi[i]);
+        	HitEfficiencyElec_bot.fill(i,hitEfficiencyBotElec[i]);
+        	HitEfficiencyPosi_bot.fill(i,hitEfficiencyBotPosi[i]);
+        	HitEfficiencyErrorElec_top.fill(i,errorTopElec[i]);
+        	HitEfficiencyErrorPosi_top.fill(i,errorTopPosi[i]);
+        	HitEfficiencyErrorElec_bot.fill(i,errorBotElec[i]);
+        	HitEfficiencyErrorPosi_bot.fill(i,errorBotPosi[i]);
+    	}
     	double mX = (upperLimX - lowerLimX)/((double) nBinx);
     	double mY = (upperLimY - lowerLimY)/((double) nBiny);
     	for(int j = 0; j<nBinx; j++){
@@ -1045,7 +1280,6 @@
     			if(hitEfficiencyBotPos[i][j][k]>1){
     				hitEfficiencyBotPos[i][j][k] = 1.0;
     			}
-    			//System.out.println(i + "  " + x + "  " + y + "  " + numberOfTopTracksWithHitOnMissingLayerPos[i][j][k] + "  " + numberOfTopTracksPos[i][j][k] + "  " + hitEfficiencyTopPos[i][j][k]);
     			HitEfficiencyPos_top.get(i+1).fill(x,y,hitEfficiencyTopPos[i][j][k]);
     			HitEfficiencyPos_bot.get(i+1).fill(x,y,hitEfficiencyBotPos[i][j][k]);
     			HitEfficiencyErrorPos_top.get(i+1).fill(x,y,hitEfficiencyErrorTopPos[i][j][k]);
@@ -1054,16 +1288,47 @@
     	}
     }
     double mP = (upperLimP - lowerLimP)/((double) nP);
+    
     for(int i = 0; i<nP; i++){
     	hitEfficiencyMomentumTop[i] = numberOfTopTracksWithHitOnMissingLayerMomentum[i]/(double) numberOfTopTracksMomentum[i];
     	hitEfficiencyMomentumBot[i] = numberOfBotTracksWithHitOnMissingLayerMomentum[i]/(double) numberOfBotTracksMomentum[i];
-    	hitEfficiencyErrorMomentumTop[i] = Math.sqrt(1/(double) numberOfTopTracksMomentum[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayerMomentum[i]);
-    	hitEfficiencyErrorMomentumBot[i] = Math.sqrt(1/(double) numberOfBotTracksMomentum[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayerMomentum[i]);
-		double p = mP * (i+0.5) + lowerLimP;
+    	if(numberOfTopTracksWithHitOnMissingLayerMomentum[i] != 0 && numberOfTopTracksMomentum[i] != 0){
+    		hitEfficiencyErrorMomentumTop[i] = Math.sqrt(1/(double) numberOfTopTracksMomentum[i] + 1/(double) numberOfTopTracksWithHitOnMissingLayerMomentum[i]);
+    	}
+    	else{
+    		hitEfficiencyErrorMomentumTop[i] = 0;
+    	}
+    	if(numberOfBotTracksWithHitOnMissingLayerMomentum[i] != 0 && numberOfBotTracksMomentum[i] != 0){
+    		hitEfficiencyErrorMomentumBot[i] = Math.sqrt(1/(double) numberOfBotTracksMomentum[i] + 1/(double) numberOfBotTracksWithHitOnMissingLayerMomentum[i]);
+    	}
+    	else{
+    		hitEfficiencyErrorMomentumBot[i] = 0;
+    	}
+    	double p = mP * (i+0.5) + lowerLimP;
     	HitEfficiency_Momentum_top.fill(p,hitEfficiencyMomentumTop[i]);
     	HitEfficiency_Momentum_bot.fill(p,hitEfficiencyMomentumBot[i]);
     	HitEfficiencyError_Momentum_top.fill(p,hitEfficiencyErrorMomentumTop[i]);
     	HitEfficiencyError_Momentum_bot.fill(p,hitEfficiencyErrorMomentumBot[i]);
+    	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];
+    		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]);
+    		}
+    		else{
+    			hitEfficiencyErrorMomentumLayTop.get(j+1)[i] = 0;
+    		}
+    		if(numberOfBotTracksWithHitOnMissingLayerMomentumLay.get(j+1)[i] != 0 && numberOfBotTracksMomentumLay.get(j+1)[i] != 0){
+    			hitEfficiencyErrorMomentumLayBot.get(j+1)[i] = Math.sqrt(1/(double) numberOfBotTracksWithHitOnMissingLayerMomentumLay.get(j+1)[i] + 1/(double) numberOfBotTracksMomentumLay.get(j+1)[i]);
+    		}
+    		else{
+    			hitEfficiencyErrorMomentumLayBot.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]);
+    	}
     }
    System.out.println("%===================================================================%");
    System.out.println("%======================  Hit Efficiencies ==========================%");