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 ==========================%");