Author: [log in to unmask] Date: Sun Feb 7 20:22:03 2016 New Revision: 4188 Log: made some changes and added new classes Added: java/trunk/users/src/main/java/org/hps/users/spaul/moller/ java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitAllProfiles.java java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitMollerPyPzGraphs.java java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltAnalysis.java java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltFitter.java java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerStdhepTest.java Modified: java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ExtractFormFactors.java java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FEESpectrumGenerator.java java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MakeHistograms.java java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinningXY.java Modified: java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java (original) +++ java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java Sun Feb 7 20:22:03 2016 @@ -1,9 +1,16 @@ package org.hps.users.spaul; +import java.awt.Component; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.File; import java.util.Arrays; import java.util.Random; +import javax.imageio.ImageIO; + import hep.aida.*; +import hep.aida.ref.plotter.PlotterUtilities; public class StyleUtil { @@ -27,14 +34,16 @@ r.style().yAxisStyle().labelStyle().setFontSize(16); r.style().yAxisStyle().tickLabelStyle().setFontSize(14); // r.style().statisticsBoxStyle().set; - //System.out.println(Arrays.toString()); + //debugPrint()); r.style().legendBoxStyle().textStyle().setFontSize(16); + r.style().statisticsBoxStyle().textStyle().setFontSize(16); //r.style().dataStyle().showInLegendBox(false); + r.style().legendBoxStyle().boxStyle().foregroundStyle().setOpacity(1.0); r.style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow"); r.style().dataStyle().fillStyle().setParameter("showZeroHeightBins", "false"); - System.out.println(Arrays.toString(r.style().statisticsBoxStyle().boxStyle().backgroundStyle().availableParameters())); + //debugPrint(r.style().dataStyle().availableParameters())); //r.style().dataStyle().setParameter("showDataInStatisticsBox", "false"); r.style().setParameter("hist2DStyle", "colorMap"); //r.style().dataBoxStyle() @@ -62,15 +71,38 @@ region.style().dataStyle().lineStyle().setParameter("colorRotateMethod", "regionOverlayIndex"); region.style().dataStyle().lineStyle().setParameter("colorRotate", "black, red, green, blue"); region.style().dataStyle().lineStyle().setParameter("thickness", "3"); + region.style().dataStyle().outlineStyle().setParameter("colorRotateMethod", "regionOverlayIndex"); + //debug = true; + debugPrint(region.style().dataStyle().outlineStyle().availableParameters()); + region.style().dataStyle().outlineStyle().setParameter("colorRotate", "black, red, green, blue"); + region.style().dataStyle().outlineStyle().setParameter("thickness", "3"); region.style().dataStyle().errorBarStyle().setVisible(false); - System.out.println(Arrays.toString(region.style().dataStyle().lineStyle().availableParameterOptions("colorRotateMethod"))); + debugPrint(region.style().dataStyle().lineStyle().availableParameterOptions("colorRotateMethod")); + } + public static void setSize(IPlotter p, int width, int height){ + p.setParameter("plotterWidth", width +""); + p.setParameter("plotterHeight", height +""); } + public static void setLog(IPlotterRegion r){ + + r.style().yAxisStyle().setParameter("scale", "log"); + r.style().gridStyle().setUnits(100); + debugPrint(r.style().gridStyle().availableParameters()); + + } + static boolean debug = false; + static void debugPrint(String[] stuff){ + if(debug){ + System.out.println(Arrays.toString(stuff)); + } + } public static void main(String arg[]){ IAnalysisFactory af = IAnalysisFactory.create(); IHistogramFactory hf = af.createHistogramFactory(af.createTreeFactory().create()); IPlotter p = af.createPlotterFactory().create(); + debugPrint(p.availableParameters()); p.createRegions(1, 2); IHistogram1D h1 = hf.createHistogram1D("blah", 100, -5, 5); IHistogram1D h2 = hf.createHistogram1D("bleh", 100, -5, 5); @@ -99,9 +131,65 @@ p.show(); + p = af.createPlotterFactory().create(); + debugPrint(p.availableParameters()); + p.createRegions(1, 2); + + p.region(0).plot(h1); + setLog(p.region(0)); + + + + p.show(); } public static void hideLegendAndStats(IPlotterRegion r){ r.style().statisticsBoxStyle().setVisible(false); r.style().legendBoxStyle().setVisible(false); } + public static IPlotterStyle smoothCurveStyle(IPlotterFactory pf) { + IPlotterStyle style = pf.createPlotterStyle(); + debugPrint(style.dataStyle().availableParameters()); + + style.dataStyle().markerStyle().setVisible(false); + + return style; + } + public static void writeToFile(IPlotter plotter, String filename, String filetype){ + //JFrame frame = new JFrame() + //if(plotter.) + //plotter.hide(); + //plotter.show(); + //PlotterUtilities.writeToFile(plotter, filename, filetype, null); + try { + + + //PlotterUtilities.writeToFile(plotter, filename, filetype, null); + Thread.sleep(1000); + Component c = PlotterUtilities.componentForPlotter(plotter); + int width = Integer.parseInt(plotter.parameterValue("plotterWidth")); + int height = Integer.parseInt(plotter.parameterValue("plotterHeight")); + if(width <= 0){ + width = 300; + plotter.setParameter("plotterWidth", Integer.toString(width)); + } + if(height <= 0){ + height = 300; + + plotter.setParameter("plotterHeight", Integer.toString(height)); + } + + c.setSize(width, height); + BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + Graphics2D graphics2D = image.createGraphics(); + c.paint(graphics2D); + ImageIO.write(image,filetype, new File(filename)); + Runtime.getRuntime().exec("open " + filename); + System.out.println("saved"); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } } Modified: java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java (original) +++ java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java Sun Feb 7 20:22:03 2016 @@ -74,6 +74,8 @@ run(new File(indir).listFiles(), out); } static void run(File[] files, String out) throws IllegalArgumentException, IOException{ + + long timeStart = System.currentTimeMillis(); IAnalysisFactory af = IAnalysisFactory.create(); ITreeFactory tf = af.createTreeFactory(); new File(out).delete(); @@ -120,9 +122,12 @@ System.err.println("couldn't find object called " + name + " in file " + s); throw e; } - if(o instanceof IHistogram1D) + if(o instanceof IHistogram1D){ + if(((IHistogram1D)o).allEntries() != 0) ((IHistogram1D)outtree.find(name)).add((IHistogram1D)o); + } if(o instanceof IHistogram2D) + if(((IHistogram2D)o).allEntries() != 0) ((IHistogram2D)outtree.find(name)).add((IHistogram2D)o); } //outtree.unmount("/tmp"); @@ -131,7 +136,7 @@ tree.close(); j++; - System.out.println(j + " files have been read"); + System.out.println(j + " files have been read (" +(System.currentTimeMillis()-timeStart)/j + " ms per event"); } catch(IllegalArgumentException e){ //print the filename @@ -141,6 +146,7 @@ } outtree.commit(); + System.out.println("summed file " + out +" commited. Total time = " + (System.currentTimeMillis()-timeStart)/1000 + " seconds"); } } Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ExtractFormFactors.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ExtractFormFactors.java (original) +++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ExtractFormFactors.java Sun Feb 7 20:22:03 2016 @@ -36,7 +36,8 @@ IDataPointSetFactory dpsf = af.createDataPointSetFactory(treeNew); - IPlotter p = af.createPlotterFactory().create(outpaths[config]); + IPlotterFactory pf = af.createPlotterFactory(); + IPlotter p = pf.create(outpaths[config]); int Nsets = arg.length/10; @@ -152,7 +153,9 @@ //p.region(0).plot(dps_iso); } - p.region(0).plot(dpsTheory); + + IPlotterStyle style = StyleUtil.smoothCurveStyle(pf); + p.region(0).plot(dpsTheory, style); StyleUtil.stylize(p.region(0), "Form Factors", "Q^2 (GeV^2)", "|F(Q^2)|^2"); p.show(); } Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FEESpectrumGenerator.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FEESpectrumGenerator.java (original) +++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FEESpectrumGenerator.java Sun Feb 7 20:22:03 2016 @@ -145,7 +145,7 @@ thetaHist = hf.createHistogram1D("theta", "theta", thetaBins); - EHist = hf.createHistogram1D("energy", 50, 0, 1.3); + EHist = hf.createHistogram1D("energy", 200, 0, 1.3); IPlotter p = af.createPlotterFactory().create(); p.createRegions(2,1); p.region(0).plot(thetaHist); @@ -166,8 +166,9 @@ if(phep[3] > .5*E){ StdhepEvent event = new StdhepEvent(nevhep, nhep, isthep, idhep, jmohep, jdahep, phep, vhep); + double smear = .02; if(display) - EHist.fill(phep[3]*(1+random.nextGaussian()*.045)); + EHist.fill(phep[3]*(1+random.nextGaussian()*smear)); writer.writeRecord(event); } else{ // if the event has enough energy loss, Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MakeHistograms.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MakeHistograms.java (original) +++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MakeHistograms.java Sun Feb 7 20:22:03 2016 @@ -59,7 +59,7 @@ String input = arg[0]; String output = arg[1]; cb = new CustomBinning(new File(arg[2])); - if(arg.length == 5) + if(arg[arg.length -1].equals("display")) display = true; IAnalysisFactory af = IAnalysisFactory.create(); ITree tree = af.createTreeFactory().create(output,"xml",false,true); @@ -73,7 +73,10 @@ hack.setDetectorName("HPS-EngRun2015-Nominal-v3"); hack.setFreeze(true); hack.setRunNumber(Integer.parseInt(arg[3])); + hack.initialize(); + beamTiltY = Double.parseDouble(arg[4]); + beamTiltX = Double.parseDouble(arg[5]); LCIOReader reader = new LCIOReader(new File(input)); //reader.open(input); //reader. @@ -98,13 +101,14 @@ static IHistogram2D h1, h2, h2a, h2b, h2c; static IHistogram2D h4,h4a; - static IHistogram1D h3, h3a, h3_t, h3_b; + static IHistogram1D h3, /*h3a,*/ h3_t, h3_b; static IHistogram1D h5, h5a; - static IHistogram2D h6, h6a; + //static IHistogram2D h6, h6a; static IHistogram1D h7, h7a; static IHistogram1D h8; static IHistogram1D h9_t, h9_b; static IHistogram1D h10_t, h10_b; + private static IHistogram1D h4y; private static void extractHistograms(ITree tree0) { h1 = (IHistogram2D) tree0.find("theta vs energy"); @@ -115,7 +119,7 @@ h2c = (IHistogram2D) tree0.find("theta vs phi alt"); h3 = (IHistogram1D) tree0.find("theta"); - h3a = (IHistogram1D) tree0.find("theta isolated "); + //h3a = (IHistogram1D) tree0.find("theta isolated "); h3_t = (IHistogram1D) tree0.find("theta top"); h3_b = (IHistogram1D) tree0.find("theta bottom"); @@ -125,8 +129,8 @@ h5 = (IHistogram1D) tree0.find("energy top"); h5 = (IHistogram1D) tree0.find("energy bottom"); - h6 = (IHistogram2D) tree0.find("cluster"); - h6a = (IHistogram2D) tree0.find("cluster matched"); +// h6 = (IHistogram2D) tree0.find("cluster"); +// h6a = (IHistogram2D) tree0.find("cluster matched"); h7 = (IHistogram1D) tree0.find("y top"); h7a = (IHistogram1D) tree0.find("y bottom"); h8 = (IHistogram1D) tree0.find("seed energy"); @@ -176,7 +180,7 @@ h2c = hf.createHistogram2D("theta vs phi alt", "theta vs phi alt", thetaBins, phiBins); h3 = hf.createHistogram1D("theta", "theta", thetaBins); - h3a = hf.createHistogram1D("theta isolated ", "theta isolated", thetaBins); +// h3a = hf.createHistogram1D("theta isolated ", "theta isolated", thetaBins); h3_t = hf.createHistogram1D("theta top", "theta top", thetaBins); h3_b = hf.createHistogram1D("theta bottom", "theta bottom", thetaBins); @@ -184,7 +188,8 @@ h4 = hf.createHistogram2D("px\\/pz vs py\\/pz", 300, -.16, .24, 300, -.2, .2); h4a = hf.createHistogram2D("px\\/pz vs py\\/pz cut", 300, -.16, .24, 300, -.2, .2); - + h4y = hf.createHistogram1D("py\\pz", 1200, -.06, .06); + h5 = hf.createHistogram1D("energy top", 75, 0, 1.5); h5a = hf.createHistogram1D("energy bottom", 75, 0, 1.5); @@ -192,8 +197,8 @@ h9_t = hf.createHistogram1D("pz top", 75, 0, 1.5); h9_b = hf.createHistogram1D("pz bottom", 75, 0, 1.5); - h6 = hf.createHistogram2D("cluster", 47, -23.5, 23.5, 11, -5.5, 5.5); - h6a = hf.createHistogram2D("cluster matched", 47, -23.5, 23.5, 11, -5.5, 5.5); +// h6 = hf.createHistogram2D("cluster", 47, -23.5, 23.5, 11, -5.5, 5.5); +// h6a = hf.createHistogram2D("cluster matched", 47, -23.5, 23.5, 11, -5.5, 5.5); h7 = hf.createHistogram1D("y top", 500, 0, 100); @@ -210,12 +215,15 @@ p.createRegions(2,2); p.region(0).plot(h2); StyleUtil.stylize(p.region(0), "theta", "phi"); - p.region(1).plot(h3a); +// p.region(1).plot(h3a); StyleUtil.stylize(p.region(1), "theta", "# of particles"); - p.region(2).plot(h3); - StyleUtil.stylize(p.region(2), "theta", "# of particles"); + p.region(2).plot(h9_t); + p.region(2).plot(h9_b); + StyleUtil.noFillHistogramBars(p.region(2)); + StyleUtil.stylize(p.region(2), "pztilt" ,"pztilt", "# of particles"); p.region(3).plot(h5); p.region(3).plot(h5a); + StyleUtil.noFillHistogramBars(p.region(3)); StyleUtil.stylize(p.region(3), "energy", "# of particles"); p.show(); @@ -252,9 +260,9 @@ IPlotter p6 = pf.create("efficiency"); p6.createRegions(1,2); - p6.region(0).plot(h6); +// p6.region(0).plot(h6); StyleUtil.stylize(p6.region(0), "ix", "iy"); - p6.region(1).plot(h6a); +// p6.region(1).plot(h6a); StyleUtil.stylize(p6.region(1), "ix", "iy"); p6.show(); @@ -279,15 +287,22 @@ p9.region(0).plot(h3_b); StyleUtil.stylize(p9.region(0), "theta", "theta", "# of particles"); StyleUtil.noFillHistogramBars(p9.region(0)); - StyleUtil.stylize(p6.region(1), "ix", "iy"); + //StyleUtil.stylize(p6.region(1), "ix", "iy"); p9.show(); IPlotter p10 = pf.create("seed energy"); //p6.createRegions(1,2); + p10.createRegions(2,1); p10.region(0).plot(h8); StyleUtil.stylize(p10.region(0), "seed energy", "seed energy (GeV)", "# of particles"); + + p10.region(1).plot(h10_t); + p10.region(1).plot(h10_b); + StyleUtil.noFillHistogramBars(p10.region(1)); + StyleUtil.stylize(p10.region(1), "clust size", "n ecal hits", "# of particles"); + //StyleUtil.noFillHistogramBars(p10.region(0)); - StyleUtil.stylize(p6.region(1), "ix", "iy"); + //StyleUtil.stylize(p6.region(1), "ix", "iy"); p10.show(); } @@ -307,80 +322,37 @@ List<ReconstructedParticle> particles = event.get(ReconstructedParticle.class, "FinalStateParticles"); particles = RemoveDuplicateParticles.removeDuplicateParticles(particles); outer : for(ReconstructedParticle p : particles){ - //check if this is a duplicate particle (ie, different track same cluster) - /*for(ParticleInfo cand : candidates){ - if(p.getEnergy() == cand.E && cand.isGood == true) - continue outer; - }*/ + boolean isGood = addParticle(p); - if(!isGood){ - if(p.getClusters().size()!= 0) - candidates.add(new ParticleInfo(0, p.getEnergy(), p.getClusters().get(0).getCalorimeterHits().get(0).getTime(), false)); - - } - - } - for(ParticleInfo c : candidates){ - if(c.isGood){ - boolean isIsolated = true; - for(ParticleInfo c2 :candidates){ - //try to remove events that have possible mollers in them. - //correct for this later. - if(Math.abs(c2.t - c.t) < 2.5 && c2.E < .3 && c2 != c){ - isIsolated = false; - break; - } - } - if(isIsolated){ - h3a.fill(c.theta); - } - } - } - candidates.clear(); - processEventEfficiency(particles); - } - - private static void processEventEfficiency(List<ReconstructedParticle> parts) { - for(ReconstructedParticle p : parts){ - if(p.getClusters().size() == 0) - continue; - if(!(p.getEnergy() > eMin && p.getEnergy() < eMax)) - continue; - Cluster c = p.getClusters().get(0); - if(!EcalUtil.fid_ECal(c) || c.getCalorimeterHits().size() < 3) - continue; - //good cluster? now continue - int ixiy[] = EcalUtil.getCrystalIndex(c); - - h6.fill(ixiy[0], ixiy[1]); - if(p.getTracks().size() == 0) - continue; - Track t = p.getTracks().get(0); - if(t.getChi2()> maxChi2) - continue; - h6a.fill(ixiy[0], ixiy[1]); - - } - } + + + } + + } + + static double eMin = .8; static double eMax = 1.2; static double beamEnergy = 1.057; - static double beamTilt = .03057; + static double beamTiltX = .03057; + static double beamTiltY; static double maxChi2 = 50; //maximum difference between the reconstructed energy and momentum - static double maxdE = .3; + static double maxdE = .5; static double seedEnergyCut = .4; - static ArrayList<ParticleInfo> candidates = new ArrayList(); static boolean addParticle(ReconstructedParticle part){ - - - + if(part.getTracks().size() != 0){ + if(part.getMomentum().magnitudeSquared() > .8 + && part.getTracks().get(0).getChi2() > maxChi2){ + h4y.fill(part.getMomentum().y()/part.getMomentum().z()); + } + } if(part.getCharge() != -1) return false; if(part.getClusters().size() == 0) @@ -422,6 +394,12 @@ if(EcalUtil.fid_ECal(c)){ + if(c.getPosition()[1] > 0){ + h5.fill(c.getEnergy()); + } + else{ + h5a.fill(c.getEnergy()); + } if(part.getTracks().size() == 0) return false; Track t = part.getTracks().get(0); @@ -430,12 +408,7 @@ } if(!TrackType.isGBL(t.getType())) return false; - if(c.getPosition()[1] > 0){ - h5.fill(c.getEnergy()); - } - else{ - h5a.fill(c.getEnergy()); - } + Hep3Vector p = part.getMomentum(); @@ -443,9 +416,12 @@ double px = p.x(), pz = p.z(); - double pxtilt = px*Math.cos(beamTilt)-pz*Math.sin(beamTilt); + double pxtilt = px*Math.cos(beamTiltX)-pz*Math.sin(beamTiltX); double py = p.y(); - double pztilt = pz*Math.cos(beamTilt)+px*Math.sin(beamTilt); + double pztilt = pz*Math.cos(beamTiltX)+px*Math.sin(beamTiltX); + + double pytilt = py*Math.cos(beamTiltY)-pztilt*Math.sin(beamTiltY); + pztilt = pz*Math.cos(beamTiltY) + pytilt*Math.sin(beamTiltY); if(Math.abs(pztilt - c.getEnergy()) > maxdE) return false; @@ -454,8 +430,8 @@ else h9_b.fill(pztilt); - double theta = Math.atan(Math.hypot(pxtilt, py)/pztilt); - double phi =Math.atan2(py, pxtilt); + double theta = Math.atan(Math.hypot(pxtilt, pytilt)/pztilt); + double phi =Math.atan2(pytilt, pxtilt); boolean inRange = cb.inRange(theta, phi); if(inRange) h1.fill(theta, c.getEnergy()); @@ -470,6 +446,7 @@ h2c.fill(theta, phi); h4.fill(px/pz, py/pz); + //h4y.fill(py/pz); if(inRange){ @@ -492,7 +469,6 @@ h4a.fill(px/pz, py/pz); - candidates.add(new ParticleInfo(theta, c.getEnergy(), c.getCalorimeterHits().get(0).getTime(), true)); } @@ -502,16 +478,5 @@ } return false; } - static class ParticleInfo{ - double theta; - double E; - double t; - boolean isGood; - ParticleInfo(double theta, double E, double t, boolean isGood){ - this.theta = theta; - this.E = E; - this.t = t; - this.isGood = isGood; - } - } + } Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java (original) +++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java Sun Feb 7 20:22:03 2016 @@ -56,7 +56,7 @@ return false; if(p.getTracks().size() == 1 && p.getTracks().size() == 0) return true; - if(TrackType.isGBL(p.getTracks().get(0).getType()) && !TrackType.isGBL(p.getTracks().get(0).getType())) + if(TrackType.isGBL(p.getTracks().get(0).getType()) && !TrackType.isGBL(p2.getTracks().get(0).getType())) return true; if(p.getTracks().get(0).getChi2() < p2.getTracks().get(0).getChi2()){ Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinningXY.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinningXY.java (original) +++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinningXY.java Sun Feb 7 20:22:03 2016 @@ -24,28 +24,29 @@ double nK = 10; for(int sign = -1; sign <=1; sign +=2){ - for(int k = 0; k< nK; k++){ - drawLineFromPolar(theta1, sign*(phi1+(phi2-phi1)*k/nK), theta1, sign*(phi1+(phi2-phi1)*(k+1)/nK),g); - } - for(int k = 0; k< nK; k++){ - drawLineFromPolar(theta1 + (theta2-theta1)*k/nK, sign*phi2, theta1 + (theta2-theta1)*(k+1)/nK, sign*phi2,g); - } - for(int k = 0; k< nK; k++){ - drawLineFromPolar(theta2, sign*(phi2+(phi1-phi2)*k/nK), theta2, sign*(phi2+(phi1-phi2)*(k+1)/nK),g); - } - for(int k = 0; k< nK; k++){ - drawLineFromPolar(theta2 + (theta1-theta2)*k/nK, sign*phi1, theta2 + (theta1-theta2)*(k+1)/nK, sign*phi1,g); + + Polygon p = new Polygon(); + for(int k = 0; k< nK; k++){ + drawLineFromPolar(theta1, sign*(phi1+(phi2-phi1)*k/nK), theta1, sign*(phi1+(phi2-phi1)*(k+1)/nK),g,p); + } + for(int k = 0; k< nK; k++){ + drawLineFromPolar(theta1 + (theta2-theta1)*k/nK, sign*phi2, theta1 + (theta2-theta1)*(k+1)/nK, sign*phi2,g,p); + } + for(int k = 0; k< nK; k++){ + drawLineFromPolar(theta2, sign*(phi2+(phi1-phi2)*k/nK), theta2, sign*(phi2+(phi1-phi2)*(k+1)/nK),g, p); + } + for(int k = 0; k< nK; k++){ + drawLineFromPolar(theta2 + (theta1-theta2)*k/nK, sign*phi1, theta2 + (theta1-theta2)*(k+1)/nK, sign*phi1,g, p); } - closePolarFigure(g, i%2 == 0 ? altBin1 : altBin2, i%2 == 0 ? fillBin1 : fillBin2); + closePolarFigure(g, i%2 == 0 ? altBin1 : altBin2, i%2 == 0 ? fillBin1 : fillBin2, p); } } } } - Polygon p = null; private void drawLineFromPolar(double theta1, double phi1, double theta2, - double phi2, Graphics g) { + double phi2, Graphics g, Polygon p) { double[] xy1 = toXY(theta1, phi1); double[] xy2 = toXY(theta2, phi2); @@ -57,19 +58,24 @@ getY(xy2[1]));*/ p.addPoint(getX(xy2[0]), getY(xy2[1])); } - private void closePolarFigure(Graphics g, Color outlineColor, Color fillColor){ + private void closePolarFigure(Graphics g, Color outlineColor, Color fillColor, Polygon p){ g.setColor(fillColor); g.fillPolygon(p); g.setColor(outlineColor); g.drawPolygon(p); - p = null; - - } - double tilt = .03057; + + } + double xtilt = .0294; + double ytilt = -.00082; double[] toXY(double theta, double phi){ - double ux = Math.cos(phi)*Math.sin(theta)*Math.cos(tilt)+Math.cos(theta)*Math.sin(tilt); + double ux = Math.cos(phi)*Math.sin(theta)*Math.cos(xtilt)+Math.cos(theta)*Math.sin(xtilt); double uy = Math.sin(phi)*Math.sin(theta); - double uz = Math.cos(theta)*Math.cos(tilt)-Math.cos(phi)*Math.sin(theta)*Math.sin(tilt); + double uz = Math.cos(theta)*Math.cos(xtilt)-Math.cos(phi)*Math.sin(theta)*Math.sin(xtilt); + + double temp = Math.cos(ytilt)*uy+Math.sin(ytilt)*uz; + uz = Math.cos(ytilt)*uz-Math.sin(ytilt)*uy; + uy = temp; + double pxpz = ux/uz; double pypz = uy/uz; return new double[]{pxpz, pypz}; @@ -224,4 +230,19 @@ g.drawLine(getX(0), getY(i/100.), getX(0) + 5, getY(i/100.)); } } + public void paint(Graphics g){ + super.paint(g); + drawBeamspot(g); + } + + void drawBeamspot(Graphics g){ + g.setColor(Color.red); + int x = getX(xtilt), y = getY(ytilt); + g.drawLine(x+10, y, x-10, y); + g.drawLine(x+10, y+1, x-10, y+1); + g.drawLine(x+10, y-1, x-10, y-1); + g.drawLine(x, y-10, x, y+10); + g.drawLine(x+1, y-10, x+1, y+10); + g.drawLine(x-1, y-10, x-1, y+10); + } } Added: java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitAllProfiles.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitAllProfiles.java (added) +++ java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitAllProfiles.java Sun Feb 7 20:22:03 2016 @@ -0,0 +1,56 @@ +package org.hps.users.spaul.moller; + +import hep.aida.IAnalysisFactory; +import hep.aida.IFitFactory; +import hep.aida.IFitResult; +import hep.aida.IFunction; +import hep.aida.IHistogram1D; +import hep.aida.IPlotter; +import hep.aida.IProfile1D; +import hep.aida.ITree; + +import java.io.IOException; + +public class FitAllProfiles { + static IAnalysisFactory af = IAnalysisFactory.create(); + static IFitFactory ff = af.createFitFactory(); + + public static void main(String arg[]) throws IllegalArgumentException, IOException{ + + ITree tree = af.createTreeFactory().create(arg[0]); + IPlotter p = af.createPlotterFactory().create(); + p.createRegions(3,2); + plotAndFit(p, 0, (IHistogram1D)tree.find("pypz")); + plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz")); + plotAndFit(p, 2, (IProfile1D)tree.find("pypz vs diff")); + plotAndFit(p, 3, (IProfile1D)tree.find("pxpz vs diff")); + + p.show(); + } + public static void plotAndFit(IPlotter p, int r, IHistogram1D h){ + p.region(r).plot(h); + IFitResult fit = ff.createFitter().fit(h, "g"); + IFunction func = fit.fittedFunction(); + System.out.println("\n" + h.title()); + String names[] = func.parameterNames(); + double params[] = func.parameters(); + for(int i = 0; i< names.length; i++){ + System.out.printf("%s: %f\n", names[i], params[i]); + } + p.region(r).plot(func); + + } + public static void plotAndFit(IPlotter p, int r, IProfile1D h){ + p.region(r).plot(h); + IFitResult fit = ff.createFitter().fit(h, "p4"); + IFunction func = fit.fittedFunction(); + System.out.println("\n" + h.title()); + String names[] = func.parameterNames(); + double params[] = func.parameters(); + for(int i = 0; i< names.length; i++){ + System.out.printf("%s: %f\t", names[i], params[i]); + } + p.region(r).plot(func); + + } +} Added: java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitMollerPyPzGraphs.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitMollerPyPzGraphs.java (added) +++ java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitMollerPyPzGraphs.java Sun Feb 7 20:22:03 2016 @@ -0,0 +1,74 @@ +package org.hps.users.spaul.moller; + +import java.io.IOException; +import java.util.Arrays; + +import org.hps.users.spaul.StyleUtil; + +import hep.aida.*; + +public class FitMollerPyPzGraphs { + static IAnalysisFactory af = IAnalysisFactory.create(); + static IFitFactory ff = af.createFitFactory(); + + public static void main(String arg[]) throws IllegalArgumentException, IOException{ + + ITree tree = af.createTreeFactory().create(arg[0]); + /*IPlotter p = af.createPlotterFactory().create(); + p.createRegions(4,2); + plotAndFit(p, 0, (IHistogram1D)tree.find("pypz"), "uy all", "uy"); + plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz"), "ux all", "ux"); + plotAndFit(p, 2, (IHistogram1D)tree.find("pypz bot"), "uy (bot)", "uy"); + plotAndFit(p, 3, (IHistogram1D)tree.find("pxpz bot"), "ux (bot)", "ux"); + plotAndFit(p, 4, (IHistogram1D)tree.find("pypz mid"), "uy (mid)", "uy"); + plotAndFit(p, 5, (IHistogram1D)tree.find("pxpz mid"), "ux (mid)", "ux"); + plotAndFit(p, 6, (IHistogram1D)tree.find("pypz top"), "uy (top)", "uy"); + plotAndFit(p, 7, (IHistogram1D)tree.find("pxpz top"), "ux (top)", "ux"); + + StyleUtil.setSize(p, 1000, 500); + p.show();*/ + + + IPlotter p; + p = af.createPlotterFactory().create(); + p.region(0).plot((IHistogram1D) tree.find("diff")); + StyleUtil.stylize(p.region(0), "pz top - pz bottom (GeV)", "#"); + p.show(); + + p = af.createPlotterFactory().create(); + p.createRegions(2, 1); + plotAndFit(p, 0, (IHistogram1D)tree.find("pypz bot"), "bot", "uy"); + plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz bot"), "bot", "ux"); + plotAndFit(p, 0, (IHistogram1D)tree.find("pypz mid"), "mid", "uy"); + plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz mid"), "mid", "ux"); + plotAndFit(p, 0, (IHistogram1D)tree.find("pypz top"), "top", "uy"); + plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz top"), "top", "ux"); + StyleUtil.setSize(p, 1000, 500); + p.show(); + + } + public static void plotAndFit(IPlotter p, int r, IHistogram1D h, String title, String xAxis){ + p.region(r).plot(h); + h.setTitle(title); + StyleUtil.noFillHistogramBars(p.region(r)); + IFitResult fit = ff.createFitter().fit(h, "g"); + StyleUtil.stylize(p.region(r), title, xAxis, "#"); + IFunction func = fit.fittedFunction(); + System.out.println("\n" + h.title()); + String names[] = func.parameterNames(); + double params[] = func.parameters(); + for(int i = 0; i< names.length; i++){ + System.out.printf("%s: %f\t", names[i], params[i]); + } + //System.out.println(Arrays.toString(fit.); + + p.region(r).plot(func); + StyleUtil.stylize(p.region(r), title, xAxis, "#"); + p.region(r).style().statisticsBoxStyle().setVisible(true); + p.region(r).style().legendBoxStyle().setVisible(false); + //System.out.println(Arrays.toString(p.region(r).style().statisticsBoxStyle().availableParameters())); + //p.show(); + } + + +} Added: java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltAnalysis.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltAnalysis.java (added) +++ java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltAnalysis.java Sun Feb 7 20:22:03 2016 @@ -0,0 +1,314 @@ +package org.hps.users.spaul.moller; + +import java.util.List; + +import hep.aida.IHistogram1D; +import hep.aida.IHistogram2D; +import hep.aida.IPlotter; +import hep.aida.IProfile1D; + +import org.hps.recon.tracking.TrackType; +import org.hps.users.spaul.StyleUtil; +import org.lcsim.event.EventHeader; +import org.lcsim.event.ReconstructedParticle; +import org.lcsim.event.Vertex; +import org.lcsim.util.Driver; +import org.lcsim.util.aida.AIDA; + +public class MollerBeamtiltAnalysis extends Driver{ + @Override + public void process(EventHeader event){ + List<Vertex> mollers = event.get(Vertex.class, "TargetConstrainedMollerVertices"); + for(Vertex v : mollers){ + if(!passesCuts(v)) + continue; + ReconstructedParticle m = v.getAssociatedParticle(); + ReconstructedParticle top; + ReconstructedParticle bottom; + if(m.getParticles().get(0).getMomentum().y()>0){ + top = m.getParticles().get(0); + bottom = m.getParticles().get(1); + }else{ + top = m.getParticles().get(1); + bottom = m.getParticles().get(0); + } + + double pypz = m.getMomentum().y()/m.getMomentum().z(); + double pxpz = m.getMomentum().x()/m.getMomentum().z(); + //double pypz = (top.getMomentum().y()+bottom.getMomentum().y())/(top.getMomentum().z()+bottom.getMomentum().z()); + //double pxpz = (top.getMomentum().x()+bottom.getMomentum().x())/(top.getMomentum().z()+bottom.getMomentum().z()); + + hpypz.fill(pypz); + hpxpz.fill(pxpz); + + + double diff = top.getMomentum().z()-bottom.getMomentum().z(); + double sum = m.getMomentum().z();//top.getMomentum().z()+bottom.getMomentum().z(); + double mass = m.getMass(); + + if(diff > -.05 && diff < .05){ + hpypz_mid.fill(pypz); + hpxpz_mid.fill(pxpz); + } + + if(diff > .2 && diff < .3){ + hpypz_topHighE.fill(pypz); + hpxpz_topHighE.fill(pxpz); + } + + if(diff > -.3 && diff < -.2){ + hpypz_botHighE.fill(pypz); + hpxpz_botHighE.fill(pxpz); + } + + + this.diff.fill(diff); + this.sum.fill(sum); + this.mass.fill(mass); + pypz_vs_diff.fill(diff,pypz ); + pxpz_vs_diff.fill(diff, pxpz ); + + + + pxpz_vs_sum.fill(sum, pxpz ); + pypz_vs_sum.fill(sum, pypz ); + + pxpz_vs_mass.fill(mass, pxpz ); + pypz_vs_mass.fill(mass, pypz ); + timediff.fill(top.getClusters().get(0).getCalorimeterHits().get(0).getTime() + -bottom.getClusters().get(0).getCalorimeterHits().get(0).getTime()); + /*if(moreEnergetic.getMomentum().y() > 0) + { + pypz_tophighE.fill(pypz); + pxpz_tophighE.fill(pxpz); + } + if(moreEnergetic.getMomentum().y() < 0) + { + pypz_bottomhighE.fill(pypz); + pxpz_bottomhighE.fill(pxpz); + }*/ + } + } + + double _maxVtxChi2 = 15; + double _maxTrkChi2 = 30; + double _maxMass = .037; + double _minMass = .030; + double _minPz = 1.0; + double _maxPz = 1.1; + boolean passesCuts(Vertex vertex){ + ReconstructedParticle m = vertex.getAssociatedParticle(); + if(!TrackType.isGBL(m.getType())) + return false; + if(m.getMomentum().z() > _maxPz || m.getMomentum().z() < _minPz) + return false; + if(m.getMass() > _maxMass || m.getMass() < _minMass) + return false; + + if(m.getParticles().get(0).getCharge() != -1 + || m.getParticles().get(1).getCharge() != -1 ) + return false; + + if(vertex.getChi2() > _maxVtxChi2) + return false; + + + if(m.getParticles().get(0).getClusters().size() == 0) + return false; + if(m.getParticles().get(1).getClusters().size() == 0) + return false; + + if(m.getParticles().get(0).getTracks().get(0).getChi2() > _maxTrkChi2) + return false; + if(m.getParticles().get(1).getTracks().get(0).getChi2() > _maxTrkChi2) + return false; + return true; + } + + IHistogram1D hpypz, hpxpz, diff, sum, mass, + hpypz_topHighE, hpxpz_topHighE, + hpypz_botHighE, hpxpz_botHighE, + hpypz_mid, hpxpz_mid; + + boolean display = false; + + + + + public double getMaxVtxChi2() { + return _maxVtxChi2; + } + + + public void setMaxVtxChi2(double _maxVtxChi2) { + this._maxVtxChi2 = _maxVtxChi2; + } + + + public double getMaxTrkChi2() { + return _maxTrkChi2; + } + + + public void setMaxTrkChi2(double _maxTrkChi2) { + this._maxTrkChi2 = _maxTrkChi2; + } + + + public double getMaxMass() { + return _maxMass; + } + + + public void setMaxMass(double _maxMass) { + this._maxMass = _maxMass; + } + + + public double getMinMass() { + return _minMass; + } + + + public void setMinMass(double _minMass) { + this._minMass = _minMass; + } + + + public double getMinPz() { + return _minPz; + } + + + public void setMinPz(double _minPz) { + this._minPz = _minPz; + } + + + public double getMaxPz() { + return _maxPz; + } + + + public void setMaxPz(double _maxPz) { + this._maxPz = _maxPz; + } + + + public boolean getDisplay() { + return display; + } + + + public void setDisplay(boolean display) { + this.display = display; + } + + IHistogram1D vtx_x, vtx_y, timediff; + + IProfile1D pxpz_vs_diff, pypz_vs_diff, pxpz_vs_sum, pypz_vs_sum, + pxpz_vs_mass, pypz_vs_mass; + + + //IHistogram1D pypz_tophighE, pxpz_tophighE; + //IHistogram1D pypz_bottomhighE, pxpz_bottomhighE; + @Override + public void startOfData(){ + AIDA aida = AIDA.defaultInstance(); + hpypz = aida.histogram1D("pypz", 60, -.005,.005); + hpxpz = aida.histogram1D("pxpz", 60, .025,.035); + + + hpypz_mid = aida.histogram1D("pypz mid", 60, -.005,.005); + hpxpz_mid = aida.histogram1D("pxpz mid", 60, .025,.035); + + hpypz_topHighE = aida.histogram1D("pypz top", 30, -.005,.005); + hpxpz_topHighE = aida.histogram1D("pxpz top", 30, .025,.035); + + hpypz_botHighE = aida.histogram1D("pypz bot", 30, -.005,.005); + hpxpz_botHighE = aida.histogram1D("pxpz bot", 30, .025,.035); + + + pxpz_vs_diff = aida.profile1D("pxpz vs diff", 25, -.60, .60); + pypz_vs_diff = aida.profile1D("pypz vs diff", 25, -.60, .60); + + diff = aida.histogram1D("diff", 50, -.60, .60); + + sum = aida.histogram1D("sum", 50, 1.0, 1.1); + + pxpz_vs_sum = aida.profile1D("pxpz vs sum", 25, 1.0, 1.1); + pypz_vs_sum = aida.profile1D("pypz vs sum", 25, 1.0, 1.1); + + pxpz_vs_mass = aida.profile1D("pxpz vs mass", 25, .03, .037); + pypz_vs_mass = aida.profile1D("pypz vs mass", 25, .03, .037); + + //vtx_x = aida.histogram1D("vtx x", 60, -1, 1); + //vtx_y = aida.histogram1D("vtx y", 60, -1, 1); + mass = aida.histogram1D("mass", 60, .030, .037); + timediff = aida.histogram1D("time diff", 60, -6, 6); + + + /*pypz_tophighE = aida.histogram1D("topHighE pypz", 60, -.005,.005); + pxpz_tophighE = aida.histogram1D("topHighE pxpz", 60, .025,.035); + pypz_bottomhighE = aida.histogram1D("bottomHighE pypz", 60, -.005,.005); + pxpz_bottomhighE = aida.histogram1D("bottomHighE pxpz", 60, .025,.035);*/ + if(display){ + IPlotter p = aida.analysisFactory().createPlotterFactory().create(); + StyleUtil.setSize(p, 1300, 900); + //p.createRegions(3, 2); + p.createRegions(4, 3); + + p.region(0).plot(hpypz); + p.region(1).plot(hpxpz); + p.region(2).plot(timediff); + p.region(3).plot(pypz_vs_diff); + p.region(4).plot(pxpz_vs_diff); + p.region(5).plot(diff); + p.region(6).plot(pypz_vs_sum); + p.region(7).plot(pxpz_vs_sum); + p.region(8).plot(sum); + + p.region(9).plot(pypz_vs_mass); + p.region(10).plot(pxpz_vs_mass); + p.region(11).plot(mass); + /*p.region(2).plot(pypz_tophighE); + p.region(3).plot(pxpz_tophighE); + p.region(4).plot(pypz_bottomhighE); + p.region(5).plot(pxpz_bottomhighE);*/ + StyleUtil.stylize(p.region(0),"py/pz", "py/pz", "#"); + StyleUtil.stylize(p.region(1),"px/pz", "px/pz", "#"); + StyleUtil.stylize(p.region(2),"time diff (t-b)", "diff (ns)", "#"); + StyleUtil.stylize(p.region(3),"py/pz vs diff", "diff (GeV)", "py/pz"); + StyleUtil.stylize(p.region(4),"px/pz vs diff", "diff (GeV)", "px/pz"); + StyleUtil.stylize(p.region(5),"diff", "diff (GeV)", "#"); + + StyleUtil.stylize(p.region(6),"py/pz vs sum", "sum (GeV)", "py/pz"); + StyleUtil.stylize(p.region(7),"px/pz vs sum", "sum (GeV)", "px/pz"); + StyleUtil.stylize(p.region(8),"sum", "sum (GeV)", "#"); + + StyleUtil.stylize(p.region(9),"py/pz vs mass", "mass (GeV)", "py/pz"); + StyleUtil.stylize(p.region(10),"px/pz vs mass", "mass (GeV)", "px/pz"); + StyleUtil.stylize(p.region(11),"mass", "mass (GeV)", "#"); + + p.show(); + + IPlotter p2 = aida.analysisFactory().createPlotterFactory().create(); + + p2.createRegions(2, 1); + + + p2.region(0).plot(hpypz_botHighE); + p2.region(1).plot(hpxpz_botHighE); + p2.region(0).plot(hpypz_mid); + p2.region(1).plot(hpxpz_mid); + p2.region(0).plot(hpypz_topHighE); + p2.region(1).plot(hpxpz_topHighE); + + StyleUtil.stylize(p2.region(0),"py/pz", "py/pz", "#"); + StyleUtil.stylize(p2.region(1),"px/pz", "py/pz", "#"); + StyleUtil.noFillHistogramBars(p2.region(0)); + StyleUtil.noFillHistogramBars(p2.region(1)); + p2.show(); + } + } +} Added: java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltFitter.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltFitter.java (added) +++ java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltFitter.java Sun Feb 7 20:22:03 2016 @@ -0,0 +1,65 @@ +package org.hps.users.spaul.moller; + +import hep.aida.IAnalysisFactory; +import hep.aida.IFitFactory; +import hep.aida.IFitResult; +import hep.aida.IFunction; +import hep.aida.IHistogram1D; +import hep.aida.IPlotter; +import hep.aida.IPlotterFactory; +import hep.aida.IPlotterStyle; +import hep.aida.ITree; + +import java.io.IOException; + +import org.hps.users.spaul.StyleUtil; + +public class MollerBeamtiltFitter { + static IAnalysisFactory af = IAnalysisFactory.create(); + static IFitFactory ff = af.createFitFactory(); + static IPlotterFactory pf = af.createPlotterFactory(); + + public static void main(String arg[]) throws IllegalArgumentException, IOException{ + + ITree tree = af.createTreeFactory().create(arg[0]); + + + IPlotter p; + + p = pf.create(); + p.createRegions(2, 1); + + plotAndFit(p, 0, (IHistogram1D)tree.find("pxpz"), "ux", "ux"); + plotAndFit(p, 1, (IHistogram1D)tree.find("pypz"), "uy", "uy"); + StyleUtil.setSize(p, 1000, 500); + p.show(); + + } + public static void plotAndFit(IPlotter p, int r, IHistogram1D h, String title, String xAxis){ + p.region(r).plot(h); + h.setTitle(title); + + double xmin = h.mean()-2*h.rms(); + double xmax = h.mean()+2*h.rms(); + String range = String.format("range=\"(%f,%f)\"", xmin, xmax); + //range = ""; + IFitResult fit = ff.createFitter().fit(h, "g", range); + IFunction func = fit.fittedFunction(); + System.out.println("\n" + h.title()); + String names[] = func.parameterNames(); + double params[] = func.parameters(); + for(int i = 0; i< names.length; i++){ + System.out.printf("%s: %f\t", names[i], params[i]); + } + //System.out.println(Arrays.toString(fit.); + IPlotterStyle style = p.region(r).style(); + style.dataStyle().outlineStyle().setColor("blue"); + p.region(r).plot(func, style); + StyleUtil.noFillHistogramBars(p.region(r)); + StyleUtil.stylize(p.region(r), title, xAxis, "#"); + p.region(r).style().statisticsBoxStyle().setVisible(true); + p.region(r).style().legendBoxStyle().setVisible(false); + //System.out.println(Arrays.toString(p.region(r).style().statisticsBoxStyle().availableParameters())); + //p.show(); + } +} Added: java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerStdhepTest.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerStdhepTest.java (added) +++ java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerStdhepTest.java Sun Feb 7 20:22:03 2016 @@ -0,0 +1,15 @@ +package org.hps.users.spaul.moller; + +import java.io.IOException; + +import hep.io.mcfio.MCFIOEvent; +import hep.io.stdhep.StdhepReader; +import hep.io.stdhep.StdhepRecord; + +public class MollerStdhepTest +{ + public static void main(String arg[]) throws IOException + { + + } +}