Author: [log in to unmask] Date: Fri May 1 17:15:34 2015 New Revision: 2878 Log: new plots Modified: java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java Modified: java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java (original) +++ java/trunk/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java Fri May 1 17:15:34 2015 @@ -8,14 +8,20 @@ import hep.aida.IProfile; import hep.physics.matrix.SymmetricMatrix; import hep.physics.vec.Hep3Vector; + import java.io.IOException; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; + +import org.apache.commons.lang3.tuple.Pair; +import org.hps.readout.ecal.FADCEcalReadoutDriver.PulseShape; import org.hps.recon.tracking.BeamlineConstants; import org.hps.recon.tracking.DumbShaperFit; +import org.hps.recon.tracking.FittedRawTrackerHit; import org.hps.recon.tracking.HelixConverter; -import org.hps.recon.tracking.PulseShape; import org.hps.recon.tracking.ShapeFitParameters; import org.hps.recon.tracking.ShaperFitAlgorithm; import org.hps.recon.tracking.StraightLineTrack; @@ -25,6 +31,7 @@ import org.lcsim.event.Cluster; import org.lcsim.event.EventHeader; import org.lcsim.event.LCIOParameters.ParameterName; +import org.lcsim.event.LCRelation; import org.lcsim.event.RawTrackerHit; import org.lcsim.event.Track; import org.lcsim.event.TrackerHit; @@ -44,13 +51,10 @@ /** * - * @author mgraham + * @author phansson */ public class TrackingReconstructionPlots extends Driver { - //private AIDAFrame plotterFrame; - //private AIDAFrame topFrame; - //private AIDAFrame bottomFrame; private AIDA aida = AIDA.defaultInstance(); private String rawTrackerHitCollectionName = "SVTRawTrackerHits"; private String fittedTrackerHitCollectionName = "SVTFittedRawTrackerHits"; @@ -62,15 +66,16 @@ private String trackerName = "Tracker"; String ecalSubdetectorName = "Ecal"; String ecalCollectionName = "EcalClusters"; - private Detector detector = null; IDDecoder dec; - private int eventCount; - private List<SiSensor> sensors; private String outputPlots = null; IPlotter plotter; IPlotter plotter2; IPlotter plotter22; + IPlotter plotter2221; + IPlotter plotter2222; IPlotter plotter222; + IPlotter plotter2224; + IPlotter plotter2223; IPlotter plotter3; IPlotter plotter3_1; IPlotter plotter3_2; @@ -79,34 +84,27 @@ IPlotter plotter5_1; IPlotter plotter55; IPlotter plotter6; + IPlotter plotter66; IPlotter plotter7; IPlotter top1; IPlotter top2; IPlotter top3; IPlotter top4; + IPlotter top44; IPlotter bot1; IPlotter bot2; IPlotter bot3; IPlotter bot4; - double zEcal = 1500; - double zAtDownStrPairSpec = 914.0; //mm double zAtColl = -1500; IHistogram1D trkPx; IHistogram1D nTracks; ShaperFitAlgorithm _shaper = new DumbShaperFit(); + private boolean showPlots = true; @Override protected void detectorChanged(Detector detector) { - this.detector = detector; aida.tree().cd("/"); - //plotterFrame = new AIDAFrame(); - //plotterFrame.setTitle("HPS Tracking Plots"); - - //topFrame = new AIDAFrame(); - //topFrame.setTitle("Top Tracking Plots"); - //bottomFrame = new AIDAFrame(); - //bottomFrame.setTitle("Bottom Tracking Plots"); - sensors = detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class); + //sensors = detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class); IAnalysisFactory fac = aida.analysisFactory(); plotter = fac.createPlotterFactory().create("HPS Tracking Plots"); @@ -119,7 +117,7 @@ trkPx = aida.histogram1D("Track Momentum (Px)", 25, -0.25, 0.25); IHistogram1D trkPy = aida.histogram1D("Track Momentum (Py)", 25, -0.5, 0.5); - IHistogram1D trkPz = aida.histogram1D("Track Momentum (Pz)", 25, 0, 3.5); + IHistogram1D trkPz = aida.histogram1D("Track Momentum (Pz)", 25, 0, 1.5); IHistogram1D trkChi2 = aida.histogram1D("Track Chi2", 25, 0, 25.0); plotter.region(0).plot(trkPx); @@ -127,7 +125,7 @@ plotter.region(2).plot(trkPz); plotter.region(3).plot(trkChi2); - plotter.show(); + if(showPlots) plotter.show(); // ****************************************************************** top1 = fac.createPlotterFactory().create("Top Tracking Plots"); @@ -140,7 +138,7 @@ IHistogram1D toptrkPx = aida.histogram1D("Top Track Momentum (Px)", 25, -0.25, 0.25); IHistogram1D toptrkPy = aida.histogram1D("Top Track Momentum (Py)", 25, -0.5, 0.5); - IHistogram1D toptrkPz = aida.histogram1D("Top Track Momentum (Pz)", 25, 0, 3.5); + IHistogram1D toptrkPz = aida.histogram1D("Top Track Momentum (Pz)", 25, 0, 1.5); IHistogram1D toptrkChi2 = aida.histogram1D("Top Track Chi2", 25, 0, 25.0); top1.region(0).plot(toptrkPx); @@ -148,7 +146,7 @@ top1.region(2).plot(toptrkPz); top1.region(3).plot(toptrkChi2); - top1.show(); + if(showPlots) top1.show(); bot1 = fac.createPlotterFactory().create("Bottom Tracking Plots"); bot1.setTitle("Bottom Momentum"); @@ -160,7 +158,7 @@ IHistogram1D bottrkPx = aida.histogram1D("Bottom Track Momentum (Px)", 25, -0.25, 0.25); IHistogram1D bottrkPy = aida.histogram1D("Bottom Track Momentum (Py)", 25, -0.5, 0.5); - IHistogram1D bottrkPz = aida.histogram1D("Bottom Track Momentum (Pz)", 25, 0, 3.5); + IHistogram1D bottrkPz = aida.histogram1D("Bottom Track Momentum (Pz)", 25, 0, 1.5); IHistogram1D bottrkChi2 = aida.histogram1D("Bottom Track Chi2", 25, 0, 25.0); bot1.region(0).plot(bottrkPx); @@ -168,14 +166,14 @@ bot1.region(2).plot(bottrkPz); bot1.region(3).plot(bottrkChi2); - bot1.show(); + if(showPlots) bot1.show(); // ****************************************************************** - IHistogram1D trkd0 = aida.histogram1D("d0 ", 25, -100.0, 100.0); + IHistogram1D trkd0 = aida.histogram1D("d0 ", 25, -10.0, 10.0); IHistogram1D trkphi = aida.histogram1D("sinphi ", 25, -0.2, 0.2); IHistogram1D trkomega = aida.histogram1D("omega ", 25, -0.0025, 0.0025); IHistogram1D trklam = aida.histogram1D("tan(lambda) ", 25, -0.1, 0.1); - IHistogram1D trkz0 = aida.histogram1D("z0 ", 25, -100.0, 100.0); + IHistogram1D trkz0 = aida.histogram1D("z0 ", 25, -6.0, 6.0); plotter22 = fac.createPlotterFactory().create("HPS Track Params"); plotter22.setTitle("Track parameters"); @@ -189,7 +187,63 @@ plotter22.region(2).plot(trkomega); plotter22.region(3).plot(trklam); plotter22.region(4).plot(trkz0); - + + if(showPlots) plotter22.show(); + + // ****************************************************************** + + + trkd0 = aida.histogram1D("d0 Top", 25, -10.0, 10.0); + trkphi = aida.histogram1D("sinphi Top", 25, -0.2, 0.2); + trkomega = aida.histogram1D("omega Top", 25, -0.0025, 0.0025); + trklam = aida.histogram1D("tan(lambda) Top", 25, -0.1, 0.1); + trkz0 = aida.histogram1D("z0 Top", 25, -6.0, 6.0); + + plotter2221 = fac.createPlotterFactory().create("HPS Track Params"); + plotter2221.setTitle("Track parameters"); + //plotterFrame.addPlotter(plotter22); + IPlotterStyle style2221 = plotter2221.style(); + style2221.dataStyle().fillStyle().setColor("yellow"); + style2221.dataStyle().errorBarStyle().setVisible(false); + plotter2221.createRegions(2, 3); + plotter2221.region(0).plot(trkd0); + plotter2221.region(1).plot(trkphi); + plotter2221.region(2).plot(trkomega); + plotter2221.region(3).plot(trklam); + plotter2221.region(4).plot(trkz0); + + if(showPlots) plotter2221.show(); + + + // ****************************************************************** + + + trkd0 = aida.histogram1D("d0 Bottom", 25, -10.0, 10.0); + trkphi = aida.histogram1D("sinphi Bottom", 25, -0.2, 0.2); + trkomega = aida.histogram1D("omega Bottom", 25, -0.0025, 0.0025); + trklam = aida.histogram1D("tan(lambda) Bottom", 25, -0.1, 0.1); + trkz0 = aida.histogram1D("z0 Bottom", 25, -6.0, 6.0); + + plotter2222 = fac.createPlotterFactory().create("HPS Track Params"); + plotter2222.setTitle("Track parameters"); + //plotterFrame.addPlotter(plotter22); + IPlotterStyle style2222 = plotter2222.style(); + style2222.dataStyle().fillStyle().setColor("yellow"); + style2222.dataStyle().errorBarStyle().setVisible(false); + plotter2222.createRegions(2, 3); + plotter2222.region(0).plot(trkd0); + plotter2222.region(1).plot(trkphi); + plotter2222.region(2).plot(trkomega); + plotter2222.region(3).plot(trklam); + plotter2222.region(4).plot(trkz0); + + if(showPlots) plotter2222.show(); + + + + // ****************************************************************** + + plotter2 = fac.createPlotterFactory().create("HPS Tracking Plots"); plotter2.setTitle("Track extrapolation"); //plotterFrame.addPlotter(plotter2); @@ -214,29 +268,81 @@ plotter2.region(6).plot(yAtEcal); plotter2.region(3).plot(xAtEcal2); plotter2.region(7).plot(yAtEcal2); - + + if(showPlots) plotter2.show(); + + // ****************************************************************** + plotter222 = fac.createPlotterFactory().create("HPS Tracking Plots"); plotter222.setTitle("Other"); //plotterFrame.addPlotter(plotter222); IPlotterStyle style222 = plotter222.style(); style222.dataStyle().fillStyle().setColor("yellow"); style222.dataStyle().errorBarStyle().setVisible(false); - plotter222.createRegions(2, 3); - - IHistogram1D nHits = aida.histogram1D("Hits per Track", 2, 4, 6); + plotter222.createRegions(2, 2); + + IHistogram1D nHits = aida.histogram1D("Hits per Track", 4, 3, 7); + nTracks = aida.histogram1D("Tracks per Event", 3, 0, 3); + IHistogram1D nHitsCluster = aida.histogram1D("Hits in Cluster (HitOnTrack)", 4, 0, 4); + + + plotter222.region(0).plot(nHits); + plotter222.region(1).plot(nTracks); + plotter222.region(1).plot(nHitsCluster); + + if(showPlots) plotter222.show(); + + // ****************************************************************** + + + plotter2223 = fac.createPlotterFactory().create("Cluster Amp Plots"); + plotter2223.setTitle("Other"); + //plotterFrame.addPlotter(plotter222); + IPlotterStyle style2223 = plotter2223.style(); + style2223.dataStyle().fillStyle().setColor("yellow"); + style2223.dataStyle().errorBarStyle().setVisible(false); + plotter2223.createRegions(2, 2); + + + IHistogram1D amp = aida.histogram1D("Amp (HitOnTrack)", 50, 0, 5000); - IHistogram1D ampcl = aida.histogram1D("Amp (CluOnTrack)", 50, 0, 5000); - IHistogram1D amp2 = aida.histogram1D("Amp Pz>1000 (HitOnTrack)", 50, 0, 5000); - IHistogram1D ampcl2 = aida.histogram1D("Amp Pz>1000 (CluOnTrack)", 50, 0, 5000); - nTracks = aida.histogram1D("Tracks per Event", 3, 0, 3); - - plotter222.region(0).plot(nHits); - plotter222.region(3).plot(nTracks); - plotter222.region(1).plot(amp); - plotter222.region(4).plot(amp2); - plotter222.region(2).plot(ampcl); - plotter222.region(5).plot(ampcl2); - + IHistogram1D ampcl = aida.histogram1D("Cluster Amp (HitOnTrack)", 50, 0, 5000); + IHistogram1D amp2 = aida.histogram1D("Amp Pz>0.8 (HitOnTrack)", 50, 0, 5000); + IHistogram1D ampcl2 = aida.histogram1D("Cluster Amp Pz>0.8 (HitOnTrack)", 50, 0, 5000); + + + plotter2223.region(0).plot(amp); + plotter2223.region(1).plot(amp2); + plotter2223.region(2).plot(ampcl); + plotter2223.region(3).plot(ampcl2); + + if(showPlots) plotter2223.show(); + +// ****************************************************************** + + + plotter2224 = fac.createPlotterFactory().create("t0 Plots"); + plotter2224.setTitle("Other"); + IPlotterStyle style2224 = plotter2224.style(); + style2224.dataStyle().fillStyle().setColor("yellow"); + style2224.dataStyle().errorBarStyle().setVisible(false); + plotter2224.createRegions(2, 2); + + IHistogram1D t0 = aida.histogram1D("t0 (HitOnTrack)", 50, -100, 100); + IHistogram1D t0cl = aida.histogram1D("Cluster t0 (HitOnTrack)", 50, -100, 100); + IHistogram1D t02 = aida.histogram1D("t0 Pz>0.8 (HitOnTrack)", 50, -100, 100); + IHistogram1D t0cl2 = aida.histogram1D("Cluster t0 Pz>0.8 (HitOnTrack)", 50, -100, 100); + + plotter2224.region(0).plot(t0); + plotter2224.region(1).plot(t0cl); + plotter2224.region(2).plot(t02); + plotter2224.region(3).plot(t0cl2); + + if(showPlots) plotter2224.show(); + + + // ****************************************************************** + plotter3 = fac.createPlotterFactory().create("HPS Residual Plots"); plotter3.setTitle("Residuals"); //plotterFrame.addPlotter(plotter3); @@ -266,6 +372,9 @@ IHistogram1D mod5ResX = aida.histogram1D("Module 5 Residual X(mm)", 25, minResidX, maxResidX); IHistogram1D mod5ResY = aida.histogram1D("Module 5 Residual Y(mm)", 25, minResidY, maxResidY); + IHistogram1D mod6ResX = aida.histogram1D("Module 6 Residual X(mm)", 25, minResidX, maxResidX); + IHistogram1D mod6ResY = aida.histogram1D("Module 6 Residual Y(mm)", 25, minResidY, maxResidY); + plotter3.region(0).plot(mod1ResX); plotter3.region(2).plot(mod2ResX); plotter3.region(4).plot(mod3ResX); @@ -277,6 +386,8 @@ plotter3.region(5).plot(mod3ResY); plotter3.region(7).plot(mod4ResY); plotter3.region(9).plot(mod5ResY); + + if(showPlots) plotter3.show(); plotter3_1 = fac.createPlotterFactory().create("HPS Residual Plots (Single hit per layer)"); plotter3_1.setTitle("Residuals (Top)"); @@ -284,7 +395,7 @@ IPlotterStyle style3_1 = plotter3_1.style(); style3_1.dataStyle().fillStyle().setColor("yellow"); style3_1.dataStyle().errorBarStyle().setVisible(false); - plotter3_1.createRegions(5, 2); + plotter3_1.createRegions(6, 2); IHistogram1D mod1ResX_Top = aida.histogram1D("Module 1 Residual X(mm) Top", 25, minResidX, maxResidX); IHistogram1D mod1ResY_Top = aida.histogram1D("Module 1 Residual Y(mm) Top", 25, minResidY, maxResidY); @@ -300,26 +411,33 @@ IHistogram1D mod5ResX_Top = aida.histogram1D("Module 5 Residual X(mm) Top", 25, minResidX, maxResidX); IHistogram1D mod5ResY_Top = aida.histogram1D("Module 5 Residual Y(mm) Top", 25, minResidY, maxResidY); + + IHistogram1D mod6ResX_Top = aida.histogram1D("Module 6 Residual X(mm) Top", 25, minResidX, maxResidX); + IHistogram1D mod6ResY_Top = aida.histogram1D("Module 6 Residual Y(mm) Top", 25, minResidY, maxResidY); plotter3_1.region(0).plot(mod1ResX_Top); plotter3_1.region(2).plot(mod2ResX_Top); plotter3_1.region(4).plot(mod3ResX_Top); plotter3_1.region(6).plot(mod4ResX_Top); plotter3_1.region(8).plot(mod5ResX_Top); + plotter3_1.region(10).plot(mod6ResX_Top); plotter3_1.region(1).plot(mod1ResY_Top); plotter3_1.region(3).plot(mod2ResY_Top); plotter3_1.region(5).plot(mod3ResY_Top); plotter3_1.region(7).plot(mod4ResY_Top); plotter3_1.region(9).plot(mod5ResY_Top); - + plotter3_1.region(11).plot(mod6ResY_Top); + + if(showPlots) plotter3_1.show(); + plotter3_2 = fac.createPlotterFactory().create("HPS Residual Plots (Single strip cluster per layer)"); plotter3_2.setTitle("Residuals (Bottom)"); //plotterFrame.addPlotter(plotter3_2); IPlotterStyle style3_2 = plotter3_2.style(); style3_2.dataStyle().fillStyle().setColor("yellow"); style3_2.dataStyle().errorBarStyle().setVisible(false); - plotter3_2.createRegions(5, 2); + plotter3_2.createRegions(6, 2); IHistogram1D mod1ResX_Bottom = aida.histogram1D("Module 1 Residual X(mm) Bottom", 25, minResidX, maxResidX); IHistogram1D mod1ResY_Bottom = aida.histogram1D("Module 1 Residual Y(mm) Bottom", 25, minResidY, maxResidY); @@ -335,18 +453,25 @@ IHistogram1D mod5ResX_Bottom = aida.histogram1D("Module 5 Residual X(mm) Bottom", 25, minResidX, maxResidX); IHistogram1D mod5ResY_Bottom = aida.histogram1D("Module 5 Residual Y(mm) Bottom", 25, minResidY, maxResidY); + + IHistogram1D mod6ResX_Bottom = aida.histogram1D("Module 6 Residual X(mm) Bottom", 25, minResidX, maxResidX); + IHistogram1D mod6ResY_Bottom = aida.histogram1D("Module 6 Residual Y(mm) Bottom", 25, minResidY, maxResidY); plotter3_2.region(0).plot(mod1ResX_Bottom); plotter3_2.region(2).plot(mod2ResX_Bottom); plotter3_2.region(4).plot(mod3ResX_Bottom); plotter3_2.region(6).plot(mod4ResX_Bottom); plotter3_2.region(8).plot(mod5ResX_Bottom); + plotter3_2.region(10).plot(mod6ResX_Bottom); plotter3_2.region(1).plot(mod1ResY_Bottom); plotter3_2.region(3).plot(mod2ResY_Bottom); plotter3_2.region(5).plot(mod3ResY_Bottom); plotter3_2.region(7).plot(mod4ResY_Bottom); plotter3_2.region(9).plot(mod5ResY_Bottom); + plotter3_2.region(11).plot(mod6ResY_Bottom); + + if(showPlots) plotter3_2.show(); plotter4 = fac.createPlotterFactory().create("HPS Track and ECal Plots"); plotter4.setTitle("Track and ECal Correlations"); @@ -358,14 +483,12 @@ style4.dataStyle().errorBarStyle().setVisible(false); plotter4.createRegions(2, 3); - IHistogram2D eVsP = aida.histogram2D("Energy Vs Momentum", 50, 0, 500, 50, 0, 3000); + IHistogram2D eVsP = aida.histogram2D("Energy Vs Momentum", 50, 0, 0.50, 50, 0, 1.5); IHistogram1D eOverP = aida.histogram1D("Energy Over Momentum", 50, 0, 2); - IHistogram1D distX = aida.histogram1D("deltaX", 50, -400, 400); + IHistogram1D distX = aida.histogram1D("deltaX", 50, -100, 100); IHistogram1D distY = aida.histogram1D("deltaY", 50, -40, 40); -// IHistogram1D distX2 = aida.histogram1D("deltaX (Pz>1)", 50, -400, 400); -// IHistogram1D distY2 = aida.histogram1D("deltaY (Pz>1)", 50, -40, 40); IHistogram2D xEcalVsTrk = aida.histogram2D("X ECal Vs Track", 100, -400, 400, 100, -400, 400); IHistogram2D yEcalVsTrk = aida.histogram2D("Y ECal Vs Track", 100, -100, 100, 100, -100, 100); @@ -375,6 +498,8 @@ plotter4.region(4).plot(distY); plotter4.region(2).plot(xEcalVsTrk); plotter4.region(5).plot(yEcalVsTrk); + + if(showPlots) plotter4.show(); // ****************************************************************** top2 = fac.createPlotterFactory().create("Top ECal Plots"); @@ -387,13 +512,13 @@ top2.createRegions(2, 3); //topFrame.addPlotter(top2); - IHistogram2D topeVsP = aida.histogram2D("Top Energy Vs Momentum", 50, 0, 500, 50, 0, 3000); + IHistogram2D topeVsP = aida.histogram2D("Top Energy Vs Momentum", 50, 0, 0.500, 50, 0, 1.5); IHistogram1D topeOverP = aida.histogram1D("Top Energy Over Momentum", 50, 0, 2); - IHistogram1D topdistX = aida.histogram1D("Top deltaX", 50, -400, 400); + IHistogram1D topdistX = aida.histogram1D("Top deltaX", 50, -100, 100); IHistogram1D topdistY = aida.histogram1D("Top deltaY", 50, -40, 40); - IHistogram2D topxEcalVsTrk = aida.histogram2D("Top X ECal Vs Track", 100, -400, 400, 100, -400, 400); + IHistogram2D topxEcalVsTrk = aida.histogram2D("Top X ECal Vs Track", 100, -400, 400, 100, -100, 100); IHistogram2D topyEcalVsTrk = aida.histogram2D("Top Y ECal Vs Track", 100, 0, 100, 100, 0, 100); top2.region(0).plot(topeVsP); @@ -403,6 +528,8 @@ top2.region(2).plot(topxEcalVsTrk); top2.region(5).plot(topyEcalVsTrk); + if(showPlots) top2.show(); + bot2 = fac.createPlotterFactory().create("Bottom ECal Plots"); bot2.setTitle("Bottom ECal Correlations"); IPlotterStyle sbot2 = bot2.style(); @@ -413,10 +540,10 @@ bot2.createRegions(2, 3); //bottomFrame.addPlotter(bot2); - IHistogram2D BottomeVsP = aida.histogram2D("Bottom Energy Vs Momentum", 50, 0, 500, 50, 0, 3000); + IHistogram2D BottomeVsP = aida.histogram2D("Bottom Energy Vs Momentum", 50, 0, 0.500, 50, 0, 1.5); IHistogram1D BottomeOverP = aida.histogram1D("Bottom Energy Over Momentum", 50, 0, 2); - IHistogram1D BottomdistX = aida.histogram1D("Bottom deltaX", 50, -400, 400); + IHistogram1D BottomdistX = aida.histogram1D("Bottom deltaX", 50, -100, 100); IHistogram1D BottomdistY = aida.histogram1D("Bottom deltaY", 50, -40, 40); IHistogram2D BottomxEcalVsTrk = aida.histogram2D("Bottom X ECal Vs Track", 100, -400, 400, 100, -400, 400); @@ -429,7 +556,10 @@ bot2.region(2).plot(BottomxEcalVsTrk); bot2.region(5).plot(BottomyEcalVsTrk); -// ****************************************************************** + if(showPlots) bot2.show(); + + + // ****************************************************************** top3 = fac.createPlotterFactory().create("Top ECal Plots"); top3.setTitle("Top ECal More Correlations"); IPlotterStyle stop3 = top3.style(); @@ -440,12 +570,14 @@ top3.createRegions(1, 2); //topFrame.addPlotter(top3); - IHistogram2D topdistXvsX = aida.histogram2D("Top deltaX vs X", 51, -400, 400, 25, -400, 400); + IHistogram2D topdistXvsX = aida.histogram2D("Top deltaX vs X", 51, -400, 400, 25, -100, 100); IHistogram2D topdistYvsY = aida.histogram2D("Top deltaY vs Y", 51, 0, 100, 25, -40, 40); top3.region(0).plot(topdistXvsX); top3.region(1).plot(topdistYvsY); + if(showPlots) top3.show(); + bot3 = fac.createPlotterFactory().create("Bottom ECal Plots"); bot3.setTitle("Bottom ECal More Correlations"); IPlotterStyle sbot3 = bot3.style(); @@ -456,12 +588,72 @@ bot3.createRegions(1, 2); //bottomFrame.addPlotter(bot3); - IHistogram2D botdistXvsX = aida.histogram2D("Bottom deltaX vs X", 51, -400, 400, 25, -400, 400); + IHistogram2D botdistXvsX = aida.histogram2D("Bottom deltaX vs X", 51, -400, 400, 25, -100, 100); IHistogram2D botdistYvsY = aida.histogram2D("Bottom deltaY vs Y", 51, -100, 0, 25, -40, 40); bot3.region(0).plot(botdistXvsX); bot3.region(1).plot(botdistYvsY); + if(showPlots) bot3.show(); + + // ****************************************************************** + top4 = fac.createPlotterFactory().create("Track Matching Plots"); + top4.setTitle("Track Matching Plots"); + IPlotterStyle stop4 = top4.style(); + stop4.dataStyle().fillStyle().setColor("green"); + stop4.dataStyle().errorBarStyle().setVisible(false); + stop4.setParameter("hist2DStyle", "colorMap"); + stop4.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow"); + top4.createRegions(2, 3); + //topFrame.addPlotter(top4); + + IHistogram1D trackmatchN = aida.histogram1D("Tracks matched", 3, 0, 3); + IHistogram1D toptrackmatchN = aida.histogram1D("Tracks matched Top", 3, 0, 3); + IHistogram1D bottrackmatchN = aida.histogram1D("Tracks matched Bottom", 3, 0, 3); + IHistogram1D trackmatchN2 = aida.histogram1D("Tracks matched (Pz>0.8)", 3, 0, 3); + IHistogram1D toptrackmatchN2 = aida.histogram1D("Tracks matched Top (Pz>0.8)", 3, 0, 3); + IHistogram1D bottrackmatchN2 = aida.histogram1D("Tracks matched Bottom (Pz>0.8)", 3, 0, 3); + + top4.region(0).plot(trackmatchN); + top4.region(1).plot(toptrackmatchN); + top4.region(2).plot(bottrackmatchN); + top4.region(3).plot(trackmatchN2); + top4.region(4).plot(toptrackmatchN2); + top4.region(5).plot(bottrackmatchN2); + + if(showPlots) top4.show(); + + // ****************************************************************** + top44 = fac.createPlotterFactory().create("e+e- Plots"); + top44.setTitle("e+e- Plots"); + IPlotterStyle stop44 = top44.style(); + stop44.dataStyle().fillStyle().setColor("green"); + stop44.dataStyle().errorBarStyle().setVisible(false); + stop44.setParameter("hist2DStyle", "colorMap"); + stop44.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow"); + top44.createRegions(2,4); + //topFrame.addPlotter(top44); + + IHistogram2D trackPCorr = aida.histogram2D("p(e-) vs p(e+) max", 25, 0, 1.2, 25, 0, 1.2); + IHistogram1D ne = aida.histogram1D("n(e-)", 3, 0, 3); + IHistogram1D np = aida.histogram1D("n(e+)", 3, 0, 3); + IHistogram1D pem = aida.histogram1D("p(e-) max", 25, 0, 1.5); + IHistogram1D pe = aida.histogram1D("p(e-)", 25, 0, 1.5); + IHistogram1D ppm = aida.histogram1D("p(e+) max", 25, 0, 1.5); + IHistogram1D pp = aida.histogram1D("p(e+)", 25, 0, 1.5); + + top44.region(0).plot(trackPCorr); + top44.region(1).plot(ne); + top44.region(2).plot(np); + top44.region(3).plot(pe); + top44.region(4).plot(pp); + top44.region(5).plot(pem); + top44.region(6).plot(ppm); + + if(showPlots) top44.show(); + + + // ****************************************************************** plotter5 = fac.createPlotterFactory().create("HPS Hit Positions"); plotter5.setTitle("Hit Positions: Top"); @@ -480,7 +672,9 @@ plotter5.region(0).plot(l1Pos); plotter5.region(1).plot(l7Pos); - + + if(showPlots) plotter5.show(); + plotter5_1 = fac.createPlotterFactory().create("HPS Hit Positions"); plotter5_1.setTitle("Hit Positions: Bottom"); //plotterFrame.addPlotter(plotter5_1); @@ -491,10 +685,13 @@ style5_1.dataStyle().errorBarStyle().setVisible(false); plotter5_1.createRegions(1, 2); + IHistogram2D l1PosBot = aida.histogram2D("Layer 1 HTH Position: Bottom", 50, -55, 55, 55, -25, 25); IHistogram2D l7PosBot = aida.histogram2D("Layer 7 HTH Position: Bottom", 50, -55, 55, 55, -25, 25); plotter5_1.region(0).plot(l1PosBot); plotter5_1.region(1).plot(l7PosBot); + + if(showPlots) plotter5_1.show(); plotter55 = fac.createPlotterFactory().create("HPS Hit Positions"); plotter55.setTitle("Helical Track Hits"); @@ -510,6 +707,8 @@ plotter55.region(0).plot(avgLayersTopPlot); plotter55.region(1).plot(avgLayersBottomPlot); + + if(showPlots) plotter55.show(); plotter6 = fac.createPlotterFactory().create("HPS ECAL Hit Positions"); plotter6.setTitle("ECAL Positions"); @@ -525,10 +724,10 @@ IHistogram2D botECal = aida.histogram2D("Bottom ECal Cluster Position", 50, -400, 400, 10, -100, 0); IHistogram2D topECal1 = aida.histogram2D("Top ECal Cluster Position (>0 tracks)", 50, -400, 400, 10, 0, 100); IHistogram2D botECal1 = aida.histogram2D("Bottom ECal Cluster Position (>0 tracks)", 50, -400, 400, 10, -100, 0); - IHistogram2D topECal2 = aida.histogram2D("Top ECal Cluster Position (E>100,>0 tracks)", 50, -400, 400, 10, 0, 100); - IHistogram2D botECal2 = aida.histogram2D("Bottom ECal Cluster Position (E>100,>0 tracks)", 50, -400, 400, 10, -100, 0); - IHistogram2D topECal3 = aida.histogram2D("Top ECal Cluster Position w_E (E>100,>0 tracks)", 50, -400, 400, 10, 0, 100); - IHistogram2D botECal3 = aida.histogram2D("Bottom ECal Cluster Position w_E (E>100,>0 tracks)", 50, -400, 400, 10, -100, 0); + IHistogram2D topECal2 = aida.histogram2D("Top ECal Cluster Position (E>0.1,>0 tracks)", 50, -400, 400, 10, 0, 100); + IHistogram2D botECal2 = aida.histogram2D("Bottom ECal Cluster Position (E>0.1,>0 tracks)", 50, -400, 400, 10, -100, 0); + IHistogram2D topECal3 = aida.histogram2D("Top ECal Cluster Position w_E (E>0.1,>0 tracks)", 50, -400, 400, 10, 0, 100); + IHistogram2D botECal3 = aida.histogram2D("Bottom ECal Cluster Position w_E (E>0.1,>0 tracks)", 50, -400, 400, 10, -100, 0); plotter6.region(0).plot(topECal); plotter6.region(1).plot(botECal); @@ -538,13 +737,31 @@ plotter6.region(5).plot(botECal2); plotter6.region(6).plot(topECal3); plotter6.region(7).plot(botECal3); - - //plotterFrame.pack(); - //plotterFrame.setVisible(true); - //topFrame.pack(); - //topFrame.setVisible(true); - //bottomFrame.pack(); - //bottomFrame.setVisible(true); + + if(showPlots) plotter6.show(); + + + plotter66 = fac.createPlotterFactory().create("HPS ECAL Basic Plots"); + plotter66.setTitle("ECAL Basic Plots"); + //plotterFrame.addPlotter(plotter6); + IPlotterStyle style66 = plotter66.style(); + style66.dataStyle().fillStyle().setColor("yellow"); + style66.dataStyle().errorBarStyle().setVisible(false); + plotter66.createRegions(2, 2); + + IHistogram1D topECalE = aida.histogram1D("Top ECal Cluster Energy", 50, 0, 2); + IHistogram1D botECalE = aida.histogram1D("Bottom ECal Cluster Energy", 50, 0, 2); + IHistogram1D topECalN = aida.histogram1D("Number of Clusters Top", 6, 0, 6); + IHistogram1D botECalN = aida.histogram1D("Number of Clusters Bot", 6, 0, 6); + + plotter66.region(0).plot(topECalE); + plotter66.region(1).plot(botECalE); + plotter66.region(2).plot(botECalN); + plotter66.region(3).plot(topECalN); + + if(showPlots) plotter66.show(); + + plotter7 = fac.createPlotterFactory().create("HPS ECAL Hit Positions"); plotter7.setTitle("Basic Misc Stuff"); //plotterFrame.addPlotter(plotter7); @@ -557,6 +774,9 @@ IHistogram2D quadrants = aida.histogram2D("Charge vs Slope", 2, -1, 1, 2, -1, 1); plotter7.region(0).plot(quadrants); + + if(showPlots) plotter7.show(); + } @@ -566,7 +786,13 @@ public void setOutputPlots(String output) { this.outputPlots = output; } - + + public void setShowPlots(boolean show) { + this.showPlots = show; + } + + + public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) { this.rawTrackerHitCollectionName = rawTrackerHitCollectionName; } @@ -602,8 +828,8 @@ // System.out.println("TrackingReconstructionPlots::corrected helical track position = "+htc.getCorrectedPosition().toString()); } List<HelicalTrackHit> hthList = event.get(HelicalTrackHit.class, helicalTrackHitCollectionName); - int[] layersTop = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - int[] layersBot = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + int[] layersTop = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + int[] layersBot = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; for (HelicalTrackHit hth : hthList) { HelicalTrackCross htc = (HelicalTrackCross) hth; // System.out.println("TrackingReconstructionPlots::original helical track position = "+hth.getPosition()[0]+","+hth.getPosition()[1]+","+hth.getPosition()[2]); @@ -635,7 +861,7 @@ // aida.histogram2D("Layer 7 HTH Position: Bottom").fill(x - sensorPos.x(), y - sensorPos.y()); } } - for (int i = 0; i < 10; i++) { + for (int i = 0; i < 12; i++) { aida.profile1D("Number of Stereo Hits per layer in Top Half").fill(i + 1, layersTop[i]); aida.profile1D("Number of Stereo Hits per layer in Bottom Half").fill(i + 1, layersBot[i]); } @@ -647,15 +873,26 @@ List<Track> tracks = event.get(Track.class, trackCollectionName); nTracks.fill(tracks.size()); + int nBotClusters = 0; + int nTopClusters = 0; if (event.hasCollection(Cluster.class, ecalCollectionName)) { List<Cluster> clusters = event.get(Cluster.class, ecalCollectionName); for (Cluster cluster : clusters) { + // Get the ix and iy indices for the seed. + final int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"); + final int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"); + //System.out.println("cluser position = ("+cluster.getPosition()[0]+","+cluster.getPosition()[1]+") with energy = "+cluster.getEnergy()); if (cluster.getPosition()[1] > 0) { + nTopClusters++; + //System.out.println("cl " + cluster.getPosition()[0] + " " + cluster.getPosition()[1] + " ix " + ix + " iy " + iy); aida.histogram2D("Top ECal Cluster Position").fill(cluster.getPosition()[0], cluster.getPosition()[1]); + aida.histogram1D("Top ECal Cluster Energy").fill(cluster.getEnergy()); } if (cluster.getPosition()[1] < 0) { + nBotClusters++; aida.histogram2D("Bottom ECal Cluster Position").fill(cluster.getPosition()[0], cluster.getPosition()[1]); + aida.histogram1D("Bottom ECal Cluster Energy").fill(cluster.getEnergy()); } if (tracks.size() > 0) { @@ -666,30 +903,40 @@ aida.histogram2D("Bottom ECal Cluster Position (>0 tracks)").fill(cluster.getPosition()[0], cluster.getPosition()[1]); } - if (cluster.getEnergy() > 100) { + if (cluster.getEnergy() > 0.1) { if (cluster.getPosition()[1] > 0) { - aida.histogram2D("Top ECal Cluster Position (E>100,>0 tracks)").fill(cluster.getPosition()[0], cluster.getPosition()[1]); - aida.histogram2D("Top ECal Cluster Position w_E (E>100,>0 tracks)").fill(cluster.getPosition()[0], cluster.getPosition()[1], cluster.getEnergy()); + aida.histogram2D("Top ECal Cluster Position (E>0.1,>0 tracks)").fill(cluster.getPosition()[0], cluster.getPosition()[1]); + aida.histogram2D("Top ECal Cluster Position w_E (E>0.1,>0 tracks)").fill(cluster.getPosition()[0], cluster.getPosition()[1], cluster.getEnergy()); } if (cluster.getPosition()[1] < 0) { - aida.histogram2D("Bottom ECal Cluster Position (E>100,>0 tracks)").fill(cluster.getPosition()[0], cluster.getPosition()[1]); - aida.histogram2D("Bottom ECal Cluster Position w_E (E>100,>0 tracks)").fill(cluster.getPosition()[0], cluster.getPosition()[1], cluster.getEnergy()); + aida.histogram2D("Bottom ECal Cluster Position (E>0.1,>0 tracks)").fill(cluster.getPosition()[0], cluster.getPosition()[1]); + aida.histogram2D("Bottom ECal Cluster Position w_E (E>0.1,>0 tracks)").fill(cluster.getPosition()[0], cluster.getPosition()[1], cluster.getEnergy()); } } } } } - - List<SiTrackerHitStrip1D> stripHits = event.get(SiTrackerHitStrip1D.class, "StripClusterer_SiTrackerHitStrip1D"); - int stripClustersPerLayerTop[] = getStripClustersPerLayer(stripHits, "up"); + + aida.histogram1D("Number of Clusters Top").fill(nTopClusters); + aida.histogram1D("Number of Clusters Bot").fill(nBotClusters); + + + + + + //List<SiTrackerHitStrip1D> stripHits = event.get(SiTrackerHitStrip1D.class, "StripClusterer_SiTrackerHitStrip1D"); + //int stripClustersPerLayerTop[] = getStripClustersPerLayer(stripHits, "up"); //int stripClustersPerLayerBottom[] = getStripClustersPerLayer(stripHits,"down"); - boolean hasSingleStripClusterPerLayer = singleStripClusterPerLayer(stripClustersPerLayerTop); - + //boolean hasSingleStripClusterPerLayer = singleStripClusterPerLayer(stripClustersPerLayerTop); + + Map<Track, Cluster> eCanditates = new HashMap<Track, Cluster>(); + Map<Track, Cluster> pCanditates = new HashMap<Track, Cluster>(); + for (Track trk : tracks) { - boolean isSingleHitPerLayerTrack = singleTrackHitPerLayer(trk); + //boolean isSingleHitPerLayerTrack = singleTrackHitPerLayer(trk); aida.histogram1D("Track Momentum (Px)").fill(trk.getTrackStates().get(0).getMomentum()[1]); aida.histogram1D("Track Momentum (Py)").fill(trk.getTrackStates().get(0).getMomentum()[2]); @@ -704,18 +951,12 @@ StraightLineTrack slt = converter.Convert(ht); Hep3Vector posAtEcal = TrackUtils.getTrackPositionAtEcal(trk); - + aida.histogram1D("X (mm) @ Z=-60cm").fill(slt.getYZAtX(BeamlineConstants.HARP_POSITION_TESTRUN)[0]); //this is y in the tracker frame aida.histogram1D("Y (mm) @ Z=-60cm").fill(slt.getYZAtX(BeamlineConstants.HARP_POSITION_TESTRUN)[1]); //this is z in the tracker frame - //double sECAL = HelixUtils.PathToXPlane(ht, zEcal, 3000, 1).get(0); aida.histogram1D("X (mm) @ Z=-150cm").fill(slt.getYZAtX(zAtColl)[0]); aida.histogram1D("Y (mm) @ Z=-150cm").fill(slt.getYZAtX(zAtColl)[1]); - //Straight line after field-region??? - //HelixConverter converterEcal = new HelixConverter(zAtDownStrPairSpec); - //StraightLineTrack sltEcal = converterEcal.Convert(ht); -// double sECAL = HelixUtils.PathToXPlane(ht, zEcal, 3000, 1).get(0); -// Hep3Vector posonhelix = HelixUtils.PointOnHelix(ht, sECAL);//position in tracker coordinates! aida.histogram1D("X (mm) @ ECAL").fill(posAtEcal.x()); aida.histogram1D("Y (mm) @ ECAL").fill(posAtEcal.y()); if (trk.getTrackStates().get(0).getMomentum()[0] > 1.0) { @@ -742,11 +983,25 @@ aida.histogram1D("Top Track Momentum (Py)").fill(trk.getTrackStates().get(0).getMomentum()[2]); aida.histogram1D("Top Track Momentum (Pz)").fill(trk.getTrackStates().get(0).getMomentum()[0]); aida.histogram1D("Top Track Chi2").fill(trk.getChi2()); + + aida.histogram1D("d0 Top").fill(trk.getTrackStates().get(0).getParameter(ParameterName.d0.ordinal())); + aida.histogram1D("sinphi Top").fill(Math.sin(trk.getTrackStates().get(0).getParameter(ParameterName.phi0.ordinal()))); + aida.histogram1D("omega Top").fill(trk.getTrackStates().get(0).getParameter(ParameterName.omega.ordinal())); + aida.histogram1D("tan(lambda) Top").fill(trk.getTrackStates().get(0).getParameter(ParameterName.tanLambda.ordinal())); + aida.histogram1D("z0 Top").fill(trk.getTrackStates().get(0).getParameter(ParameterName.z0.ordinal())); + } else { aida.histogram1D("Bottom Track Momentum (Px)").fill(trk.getTrackStates().get(0).getMomentum()[1]); aida.histogram1D("Bottom Track Momentum (Py)").fill(trk.getTrackStates().get(0).getMomentum()[2]); aida.histogram1D("Bottom Track Momentum (Pz)").fill(trk.getTrackStates().get(0).getMomentum()[0]); aida.histogram1D("Bottom Track Chi2").fill(trk.getChi2()); + + aida.histogram1D("d0 Bottom").fill(trk.getTrackStates().get(0).getParameter(ParameterName.d0.ordinal())); + aida.histogram1D("sinphi Bottom").fill(Math.sin(trk.getTrackStates().get(0).getParameter(ParameterName.phi0.ordinal()))); + aida.histogram1D("omega Bottom").fill(trk.getTrackStates().get(0).getParameter(ParameterName.omega.ordinal())); + aida.histogram1D("tan(lambda) Bottom").fill(trk.getTrackStates().get(0).getParameter(ParameterName.tanLambda.ordinal())); + aida.histogram1D("z0 Bottom").fill(trk.getTrackStates().get(0).getParameter(ParameterName.z0.ordinal())); + } List<TrackerHit> hitsOnTrack = trk.getTrackerHits(); for (TrackerHit hit : hitsOnTrack) { @@ -773,6 +1028,9 @@ } if (layer == 9) { modNum = "Module 5 "; + } + if (layer == 11) { + modNum = "Module 6 "; } SymmetricMatrix cov = htc.getCorrectedCovMatrix(); @@ -814,87 +1072,206 @@ aida.histogram2D("Layer 7 HTH Position: Bottom").fill(x - sensorPos.x(), y - sensorPos.y()); } } - /* - List<RawTrackerHit> rawHits = hit.getRawHits(); - for (RawTrackerHit rawHit : rawHits) { - ChannelConstants constants = HPSSVTCalibrationConstants.getChannelConstants((SiSensor) rawHit.getDetectorElement(), rawHit.getIdentifierFieldValue("strip")); - HPSShapeFitParameters fit = _shaper.fitShape(rawHit, constants); - double amp = fit.getAmp(); - - aida.histogram1D("Amp (HitOnTrack)").fill(amp); - if (trk.getTrackStates().get(0).getMomentum()[0] > 1) - aida.histogram1D("Amp Pz>1000 (HitOnTrack)").fill(amp); - } - */ - boolean doAmplitudePlots = false; + + boolean doAmplitudePlots = true; if(doAmplitudePlots) { for (HelicalTrackStrip hts : htcross.getStrips()) { double clusterSum = 0; + double clusterT0 = 0; + int nHitsCluster = 0; + for (RawTrackerHit rawHit : (List<RawTrackerHit>) hts.rawhits()) { - for (ShapeFitParameters fit : _shaper.fitShape(rawHit,new PulseShape.CRRC())) { - double amp = fit.getAmp(); - clusterSum += amp; - aida.histogram1D("Amp (HitOnTrack)").fill(amp); - if (trk.getTrackStates().get(0).getMomentum()[0] > 1) { - aida.histogram1D("Amp Pz>1000 (HitOnTrack)").fill(amp); + if(event.hasCollection(LCRelation.class, "SVTFittedRawTrackerHits")) { + List<LCRelation> fittedHits = event.get(LCRelation.class, "SVTFittedRawTrackerHits"); + for(LCRelation fittedHit : fittedHits) { + if(rawHit.equals((RawTrackerHit)fittedHit.getFrom())) { + double amp = FittedRawTrackerHit.getAmp(fittedHit); + double t0 = FittedRawTrackerHit.getT0(fittedHit); + //System.out.println("to="+t0 + " amp=" + amp); + aida.histogram1D("Amp (HitOnTrack)").fill(amp); + if (trk.getTrackStates().get(0).getMomentum()[0] > 0.8) { + aida.histogram1D("Amp Pz>0.8 (HitOnTrack)").fill(amp); + } + aida.histogram1D("t0 (HitOnTrack)").fill(t0); + if (trk.getTrackStates().get(0).getMomentum()[0] > 0.8) { + aida.histogram1D("t0 Pz>0.8 (HitOnTrack)").fill(t0); + } + clusterSum += amp; + clusterT0 += t0; + nHitsCluster++; + } + } } + } + + aida.histogram1D("Hits in Cluster (HitOnTrack)").fill(nHitsCluster); + aida.histogram1D("Cluster Amp (HitOnTrack)").fill(clusterSum); + if (trk.getTrackStates().get(0).getMomentum()[0] > 0.8) { + aida.histogram1D("Cluster Amp Pz>0.8 (HitOnTrack)").fill(clusterSum); + } + if(nHitsCluster>0) { + aida.histogram1D("Cluster t0 (HitOnTrack)").fill(clusterT0/nHitsCluster); + if (trk.getTrackStates().get(0).getMomentum()[0] > 0.8) { + aida.histogram1D("Cluster t0 Pz>0.8 (HitOnTrack)").fill(clusterT0/nHitsCluster); } } - aida.histogram1D("Amp (CluOnTrack)").fill(clusterSum); - if (trk.getTrackStates().get(0).getMomentum()[0] > 1) { - aida.histogram1D("Amp Pz>1000 (CluOnTrack)").fill(clusterSum); - } - } - } - } + + } + } + } + Cluster clust = null; if(event.hasCollection(Cluster.class,ecalCollectionName)) { List<Cluster> clusters = event.get(Cluster.class, ecalCollectionName); - Cluster clust = findClosestCluster(posAtEcal, clusters); - - // if (clust != null) { - if (clust != null) { - - posAtEcal = TrackUtils.extrapolateTrack(trk, clust.getPosition()[2]);//.positionAtEcal(); - - aida.histogram2D("Energy Vs Momentum").fill(clust.getEnergy(), trk.getTrackStates().get(0).getMomentum()[0] * 1000.0); - aida.histogram1D("Energy Over Momentum").fill(clust.getEnergy() / (trk.getTrackStates().get(0).getMomentum()[0] * 1000.0)); - aida.histogram1D("deltaX").fill(clust.getPosition()[0] - posAtEcal.x()); - aida.histogram1D("deltaY").fill(clust.getPosition()[1] - posAtEcal.y()); - // if (trk.getTrackStates().get(0).getMomentum()[0] > 1.0) { - // aida.histogram1D("deltaX (Pz>1)").fill(clust.getPosition()[0] - posAtEcal.y()); - // aida.histogram1D("deltaY (Pz>1)").fill(clust.getPosition()[1] - posAtEcal.z()); - // } - aida.histogram2D("X ECal Vs Track").fill(clust.getPosition()[0], posAtEcal.x()); - aida.histogram2D("Y ECal Vs Track").fill(clust.getPosition()[1], posAtEcal.y()); - if (isTop == 0) { - aida.histogram2D("Top Energy Vs Momentum").fill(clust.getEnergy(), trk.getTrackStates().get(0).getMomentum()[0] * 1000.0); - // aida.histogram2D("Top Energy Vs Momentum").fill(posAtEcal.y(), trk.getTrackStates().get(0).getMomentum()[0] * 1000.0); - aida.histogram1D("Top Energy Over Momentum").fill(clust.getEnergy() / (trk.getTrackStates().get(0).getMomentum()[0] * 1000.0)); - aida.histogram1D("Top deltaX").fill(clust.getPosition()[0] - posAtEcal.x()); - aida.histogram1D("Top deltaY").fill(clust.getPosition()[1] - posAtEcal.y()); - aida.histogram2D("Top deltaX vs X").fill(clust.getPosition()[0], clust.getPosition()[0] - posAtEcal.x()); - aida.histogram2D("Top deltaY vs Y").fill(clust.getPosition()[1], clust.getPosition()[1] - posAtEcal.y()); - aida.histogram2D("Top X ECal Vs Track").fill(clust.getPosition()[0], posAtEcal.x()); - aida.histogram2D("Top Y ECal Vs Track").fill(clust.getPosition()[1], posAtEcal.y()); - } else { - aida.histogram2D("Bottom Energy Vs Momentum").fill(clust.getEnergy(), trk.getTrackStates().get(0).getMomentum()[0] * 1000.0); - aida.histogram1D("Bottom Energy Over Momentum").fill(clust.getEnergy() / (trk.getTrackStates().get(0).getMomentum()[0] * 1000.0)); - aida.histogram1D("Bottom deltaX").fill(clust.getPosition()[0] - posAtEcal.x()); - aida.histogram1D("Bottom deltaY").fill(clust.getPosition()[1] - posAtEcal.y()); - aida.histogram2D("Bottom deltaX vs X").fill(clust.getPosition()[0], clust.getPosition()[0] - posAtEcal.x()); - aida.histogram2D("Bottom deltaY vs Y").fill(clust.getPosition()[1], clust.getPosition()[1] - posAtEcal.y()); - aida.histogram2D("Bottom X ECal Vs Track").fill(clust.getPosition()[0], posAtEcal.x()); - aida.histogram2D("Bottom Y ECal Vs Track").fill(clust.getPosition()[1], posAtEcal.y()); - } - - } - } - } + Cluster cand_clust = findClosestCluster(posAtEcal, clusters); + + if (cand_clust != null) { + + // track matching requirement + if(Math.abs( posAtEcal.x() - cand_clust.getPosition()[0])<30.0 && + Math.abs( posAtEcal.y() - cand_clust.getPosition()[1])<30.0) + { + clust = cand_clust; + if(trk.getCharge()<0) pCanditates.put(trk, clust); + else eCanditates.put(trk, clust); + + posAtEcal = TrackUtils.extrapolateTrack(trk, clust.getPosition()[2]);//.positionAtEcal(); + + aida.histogram2D("Energy Vs Momentum").fill(clust.getEnergy(), trk.getTrackStates().get(0).getMomentum()[0]); + aida.histogram1D("Energy Over Momentum").fill(clust.getEnergy() / (trk.getTrackStates().get(0).getMomentum()[0] )); + aida.histogram1D("deltaX").fill(clust.getPosition()[0] - posAtEcal.x()); + aida.histogram1D("deltaY").fill(clust.getPosition()[1] - posAtEcal.y()); + aida.histogram2D("X ECal Vs Track").fill(clust.getPosition()[0], posAtEcal.x()); + aida.histogram2D("Y ECal Vs Track").fill(clust.getPosition()[1], posAtEcal.y()); + + if (isTop == 0) { + aida.histogram1D("Tracks matched Top").fill(1); + if(trk.getTrackStates().get(0).getMomentum()[0] > 0.8){ + aida.histogram1D("Tracks matched Top (Pz>0.8)").fill(1); + } + + aida.histogram2D("Top Energy Vs Momentum").fill(clust.getEnergy(), trk.getTrackStates().get(0).getMomentum()[0] ); + // aida.histogram2D("Top Energy Vs Momentum").fill(posAtEcal.y(), trk.getTrackStates().get(0).getMomentum()[0]); + aida.histogram1D("Top Energy Over Momentum").fill(clust.getEnergy() / (trk.getTrackStates().get(0).getMomentum()[0])); + aida.histogram1D("Top deltaX").fill(clust.getPosition()[0] - posAtEcal.x()); + aida.histogram1D("Top deltaY").fill(clust.getPosition()[1] - posAtEcal.y()); + aida.histogram2D("Top deltaX vs X").fill(clust.getPosition()[0], clust.getPosition()[0] - posAtEcal.x()); + aida.histogram2D("Top deltaY vs Y").fill(clust.getPosition()[1], clust.getPosition()[1] - posAtEcal.y()); + aida.histogram2D("Top X ECal Vs Track").fill(clust.getPosition()[0], posAtEcal.x()); + aida.histogram2D("Top Y ECal Vs Track").fill(clust.getPosition()[1], posAtEcal.y()); + } else { + aida.histogram1D("Tracks matched Bottom").fill(1); + if(trk.getTrackStates().get(0).getMomentum()[0] > 0.8){ + aida.histogram1D("Tracks matched Bottom (Pz>0.8)").fill(1); + } + aida.histogram2D("Bottom Energy Vs Momentum").fill(clust.getEnergy(), trk.getTrackStates().get(0).getMomentum()[0] ); + aida.histogram1D("Bottom Energy Over Momentum").fill(clust.getEnergy() / (trk.getTrackStates().get(0).getMomentum()[0])); + aida.histogram1D("Bottom deltaX").fill(clust.getPosition()[0] - posAtEcal.x()); + aida.histogram1D("Bottom deltaY").fill(clust.getPosition()[1] - posAtEcal.y()); + aida.histogram2D("Bottom deltaX vs X").fill(clust.getPosition()[0], clust.getPosition()[0] - posAtEcal.x()); + aida.histogram2D("Bottom deltaY vs Y").fill(clust.getPosition()[1], clust.getPosition()[1] - posAtEcal.y()); + aida.histogram2D("Bottom X ECal Vs Track").fill(clust.getPosition()[0], posAtEcal.x()); + aida.histogram2D("Bottom Y ECal Vs Track").fill(clust.getPosition()[1], posAtEcal.y()); + } + } + } + } + + if (clust != null) { + aida.histogram1D("Tracks matched").fill(0); + if(trk.getTrackStates().get(0).getMomentum()[0] > 0.8){ + aida.histogram1D("Tracks matched (Pz>0.8)").fill(0); + } + if(isTop == 0) { + aida.histogram1D("Tracks matched Top").fill(0); + if(trk.getTrackStates().get(0).getMomentum()[0] > 0.8){ + aida.histogram1D("Tracks matched Top (Pz>0.8)").fill(0); + } + } else { + aida.histogram1D("Tracks matched Bottom").fill(0); + if(trk.getTrackStates().get(0).getMomentum()[0] > 0.8){ + aida.histogram1D("Tracks matched Bottom (Pz>0.8)").fill(0); + } + } + } else { + aida.histogram1D("Tracks matched").fill(1); + if(trk.getTrackStates().get(0).getMomentum()[0] > 0.8){ + aida.histogram1D("Tracks matched (Pz>0.8)").fill(1); + } + + if (isTop == 0) { + aida.histogram1D("Tracks matched Top").fill(1); + if(trk.getTrackStates().get(0).getMomentum()[0] > 0.8){ + aida.histogram1D("Tracks matched Top (Pz>0.8)").fill(1); + } + } else { + aida.histogram1D("Tracks matched Bottom").fill(1); + if(trk.getTrackStates().get(0).getMomentum()[0] > 0.8){ + aida.histogram1D("Tracks matched Bottom (Pz>0.8)").fill(1); + } + } + + } + + } + + // e+/e- + Map.Entry<Track, Cluster> ecand_highestP = null; + double e_pmax = -1; + Map.Entry<Track, Cluster> pcand_highestP = null; + double p_pmax = -1; + for(Map.Entry<Track, Cluster> ecand : eCanditates.entrySet()) { + double p = getMomentum(ecand.getKey()); + aida.histogram1D("p(e-)").fill(p); + if(ecand_highestP == null ) { + ecand_highestP = ecand; + e_pmax = getMomentum(ecand_highestP.getKey()); + } else { + if(p > e_pmax) { + ecand_highestP = ecand; + e_pmax = getMomentum(ecand_highestP.getKey()); + } + } + } + + for(Map.Entry<Track, Cluster> pcand : pCanditates.entrySet()) { + double p = getMomentum(pcand.getKey()); + aida.histogram1D("p(e+)").fill(p); + if(pcand_highestP == null ) { + pcand_highestP = pcand; + p_pmax = getMomentum(pcand_highestP.getKey()); + } else { + if(p > p_pmax) { + pcand_highestP = pcand; + p_pmax = getMomentum(pcand_highestP.getKey()); + } + } + } + + aida.histogram1D("n(e-)").fill(eCanditates.size()); + aida.histogram1D("n(e+)").fill(pCanditates.size()); + if(ecand_highestP!=null) { + aida.histogram1D("p(e-) max").fill(e_pmax); + } + if(pcand_highestP!=null) { + aida.histogram1D("p(e+) max").fill(p_pmax); + } + if(ecand_highestP!=null && pcand_highestP!=null) { + aida.histogram2D("p(e-) vs p(e+) max").fill(e_pmax, p_pmax); + } + + + } + + private double getMomentum(Track trk) { + double p = Math.sqrt(trk.getTrackStates().get(0).getMomentum()[0]*trk.getTrackStates().get(0).getMomentum()[0] + + trk.getTrackStates().get(0).getMomentum()[1]*trk.getTrackStates().get(0).getMomentum()[1] + + trk.getTrackStates().get(0).getMomentum()[2]*trk.getTrackStates().get(0).getMomentum()[2]); + return p; } public int[] getTrackHitsPerLayer(Track trk) { - int n[] = {0, 0, 0, 0, 0}; + int n[] = {0, 0, 0, 0, 0, 0}; List<TrackerHit> hitsOnTrack = trk.getTrackerHits(); int layer; for (TrackerHit hit : hitsOnTrack) { @@ -935,8 +1312,8 @@ String name; int l; int i; - int n[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - boolean ddd = true; + int n[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + boolean ddd = false; if (ddd) { System.out.println("Get # hits per layer on side \"" + side + "\""); @@ -1001,7 +1378,7 @@ System.out.println("sensor name " + name + " --> layer " + l); } - if (l < 1 || l > 10) { + if (l < 1 || l > 12) { System.out.println("This layer doesn't exist?"); throw new RuntimeException("SiSensor name " + name + " is invalid?"); } @@ -1027,6 +1404,8 @@ //bottomFrame.dispose(); } + + private Cluster findClosestCluster(Hep3Vector posonhelix, List<Cluster> clusters) { Cluster closest = null; double minDist = 9999; @@ -1034,16 +1413,13 @@ double[] clPos = cluster.getPosition(); double clEne = cluster.getEnergy(); double dist = Math.sqrt(Math.pow(clPos[0] - posonhelix.x(), 2) + Math.pow(clPos[1] - posonhelix.y(), 2)); //coordinates!!! -// double dist = Math.sqrt(Math.pow(clPos[1] - posonhelix.z(), 2)); //coordinates!!! - if (dist < minDist && clEne > 50) { + double distX = Math.abs(clPos[0] - posonhelix.x()); + double distY = Math.abs(clPos[1] - posonhelix.y()); + if (dist < minDist && clEne > 0.4) { closest = cluster; minDist = dist; } -// if(cluster.getEnergy()/10>500) - } -// System.out.println("Found a cluster..." + minDist); - + } return closest; - } }