Author: [log in to unmask] Date: Sat Sep 26 15:22:04 2015 New Revision: 3719 Log: Updated plot formatting module to allow for exporting AIDA plots to text format. Also changed the scaling on some MTE analysis plots. Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotFormatModule.java Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java (original) +++ java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java Sat Sep 26 15:22:04 2015 @@ -27,7 +27,6 @@ // Define track LCIO information. private String bankCollectionName = "TriggerBank"; private String particleCollectionName = "FinalStateParticles"; - private boolean useGoodSVT = true; private static final AIDA aida = AIDA.defaultInstance(); private IHistogram1D[] chargedTracksPlot = { aida.histogram1D("MTE Analysis/Møller Event Tracks", 10, -0.5, 9.5), @@ -64,14 +63,14 @@ private IHistogram1D trTimeCoincidenceFiducial = aida.histogram1D("Trident/Time Coincidence (Fiducial Region)", 150, 0.0, 15.0); private IHistogram1D trEnergySumAll = aida.histogram1D("Trident/Energy Sum", 220, 0.0, 1.1); private IHistogram1D trEnergySumFiducial = aida.histogram1D("Trident/Energy Sum (Fiducial Region)", 220, 0.0, 1.1); - private IHistogram2D trEnergySum2DAll = aida.histogram2D("Trident/Top Cluster Energy vs. Bottom Cluster Energy", 220, 0, 1.1, 220, 0, 1.1); - private IHistogram2D trEnergySum2DFiducial = aida.histogram2D("Trident/Top Cluster Energy vs. Bottom Cluster Energy (Fiducial Region)", 220, 0, 1.1, 220, 0, 1.1); - private IHistogram2D trSumCoplanarityAll = aida.histogram2D("Trident/Hardware Coplanarity vs. Energy Sum", 220, 0, 1.1, 115, 0, 230); - private IHistogram2D trSumCoplanarityFiducial = aida.histogram2D("Trident/Hardware Coplanarity vs. Energy Sum (Fiducial Region)", 220, 0, 1.1, 115, 0, 230); - private IHistogram2D trSumCoplanarityCalcAll = aida.histogram2D("Trident/Calculated Coplanarity vs. Energy Sum", 220, 0, 1.1, 115, 0, 230); - private IHistogram2D trSumCoplanarityCalcFiducial = aida.histogram2D("Trident/Calculated Coplanarity vs. Energy Sum (Fiducial Region)", 220, 0, 1.1, 115, 0, 230); - private IHistogram2D trTimeEnergyAll = aida.histogram2D("Trident/Cluster Time vs. Cluster Energy", 220, 0, 1.1, 100, 0, 100); - private IHistogram2D trTimeEnergyFiducial = aida.histogram2D("Trident/Cluster Time vs. Cluster Energy (Fiducial Region)", 220, 0, 1.1, 100, 0, 100); + private IHistogram2D trEnergySum2DAll = aida.histogram2D("Trident/Top Cluster Energy vs. Bottom Cluster Energy", 220, 0, 1.1, 220, 0, 1.1); + private IHistogram2D trEnergySum2DFiducial = aida.histogram2D("Trident/Top Cluster Energy vs. Bottom Cluster Energy (Fiducial Region)", 220, 0, 1.1, 220, 0, 1.1); + private IHistogram2D trSumCoplanarityAll = aida.histogram2D("Trident/Hardware Coplanarity vs. Energy Sum", 220, 0, 1.1, 115, 0, 180); + private IHistogram2D trSumCoplanarityFiducial = aida.histogram2D("Trident/Hardware Coplanarity vs. Energy Sum (Fiducial Region)", 220, 0, 1.1, 115, 0, 180); + private IHistogram2D trSumCoplanarityCalcAll = aida.histogram2D("Trident/Calculated Coplanarity vs. Energy Sum", 220, 0, 1.1, 115, 130, 230); + private IHistogram2D trSumCoplanarityCalcFiducial = aida.histogram2D("Trident/Calculated Coplanarity vs. Energy Sum (Fiducial Region)", 220, 0, 1.1, 115, 130, 230); + private IHistogram2D trTimeEnergyAll = aida.histogram2D("Trident/Cluster Time vs. Cluster Energy", 220, 0, 1.1, 100, 0, 100); + private IHistogram2D trTimeEnergyFiducial = aida.histogram2D("Trident/Cluster Time vs. Cluster Energy (Fiducial Region)", 220, 0, 1.1, 100, 0, 100); private TriggerPlotsModule allPlots = new TriggerPlotsModule("All"); private TriggerPlotsModule møllerPlots = new TriggerPlotsModule("Møller"); @@ -158,19 +157,6 @@ @Override public void process(EventHeader event) { - // Check whether the SVT was active in this event. - final String[] flagNames = { "svt_bias_good", "svt_burstmode_noise_good", "svt_position_good" }; - boolean svtGood = true; - for(int i = 0; i < flagNames.length; i++) { - int[] flag = event.getIntegerParameters().get(flagNames[i]); - if(flag == null || flag[0] == 0) { - svtGood = false; - } - } - - // If the SVT is not properly running, skip the event. - if(!svtGood && useGoodSVT) { return; } - if(event.hasCollection(ReconstructedParticle.class, particleCollectionName)) { // Get the list of tracks. List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, particleCollectionName); @@ -194,7 +180,7 @@ // Populate the all cluster plots. List<Cluster> topClusters = new ArrayList<Cluster>(); List<Cluster> botClusters = new ArrayList<Cluster>(); - List<Cluster> clusters = event.get(Cluster.class, "EcalClustersCorr"); + List<Cluster> clusters = event.get(Cluster.class, "EcalClusters"); for(Cluster cluster : clusters) { allPlots.addCluster(cluster); if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) { topClusters.add(cluster); } @@ -523,10 +509,6 @@ excludeNoTrackEvents = state; } - public void setUseGoodSVT(boolean state) { - useGoodSVT = state; - } - private static final boolean inFiducialRegion(Cluster cluster) { // Get the x and y indices for the cluster. int ix = TriggerModule.getClusterXIndex(cluster); Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotFormatModule.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotFormatModule.java (original) +++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotFormatModule.java Sat Sep 26 15:22:04 2015 @@ -9,7 +9,9 @@ import org.hps.users.kmccarty.plots.PlotsFormatter.ColorStyle; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -73,42 +75,6 @@ // Format the fonts and general plot presentation. PlotsFormatter.setDefault1DStyle(region, new ColorStyle[] { formattedPlot.getColorStyle() }); - - // Set the plotter dimensions. - plotter.setParameter("plotterWidth", width); - plotter.setParameter("plotterHeight", height); - - // If the file path is null, display the plots. Otherwise, - // save them to the destination folder. - if(filePath == null) { plotter.show(); } - else { plotter.writeToFile(filePath + formattedPlot.getPlotName() + ".png"); } - } - - // Format and display the 2D plots. - for(FormattedPlot2D formattedPlot : formattedPlots2D) { - // Get the plot. - IHistogram2D plot = formattedPlot.getPlot(); - - // Create a plotter and plotting region for the plot. - IPlotter plotter = plotterFactory.create(formattedPlot.getPlotName()); - plotter.createRegions(1); - plotter.region(0).plot(plot); - - // Set the axis range. - PlotterRegion region = (PlotterRegion) plotter.region(0); - if(formattedPlot.definesXAxisRange()) { - region.getPlot().getXAxis().setMax(formattedPlot.getXAxisRange()); - } if(formattedPlot.definesYAxisRange()) { - region.getPlot().getYAxis().setMax(formattedPlot.getYAxisRange()); - } - - // Format the axis labels. - region.getPlot().setTitle(formattedPlot.getPlotName()); - region.getPlot().getXAxis().setLabel(formattedPlot.getXAxisName()); - region.getPlot().getYAxis().setLabel(formattedPlot.getYAxisName()); - - // Format the fonts and general plot presentation. - PlotsFormatter.setDefault2DStyle(region, formattedPlot.isLogarithmic()); // Set the plotter dimensions. plotter.setParameter("plotterWidth", width); @@ -121,7 +87,119 @@ File plotFile = new File(filePath + formattedPlot.getPlotName() + ".png"); if(plotFile.exists()) { plotFile.delete(); } plotter.writeToFile(filePath + formattedPlot.getPlotName() + ".png"); - } - } + System.out.printf("Saved plot \"%s\" to path: %s%n", formattedPlot.getPlotName(), filePath + formattedPlot.getPlotName() + ".png"); + } + } + + // Format and display the 2D plots. + for(FormattedPlot2D formattedPlot : formattedPlots2D) { + // Get the plot. + IHistogram2D plot = formattedPlot.getPlot(); + + // Create a plotter and plotting region for the plot. + IPlotter plotter = plotterFactory.create(formattedPlot.getPlotName()); + plotter.createRegions(1); + plotter.region(0).plot(plot); + + // Set the axis range. + PlotterRegion region = (PlotterRegion) plotter.region(0); + if(formattedPlot.definesXAxisRange()) { + region.getPlot().getXAxis().setMax(formattedPlot.getXAxisRange()); + } if(formattedPlot.definesYAxisRange()) { + region.getPlot().getYAxis().setMax(formattedPlot.getYAxisRange()); + } + + // Format the axis labels. + region.getPlot().setTitle(formattedPlot.getPlotName()); + region.getPlot().getXAxis().setLabel(formattedPlot.getXAxisName()); + region.getPlot().getYAxis().setLabel(formattedPlot.getYAxisName()); + + // Format the fonts and general plot presentation. + PlotsFormatter.setDefault2DStyle(region, formattedPlot.isLogarithmic()); + + // Set the plotter dimensions. + plotter.setParameter("plotterWidth", width); + plotter.setParameter("plotterHeight", height); + + // If the file path is null, display the plots. Otherwise, + // save them to the destination folder. + if(filePath == null) { plotter.show(); } + else { + File plotFile = new File(filePath + formattedPlot.getPlotName() + ".png"); + if(plotFile.exists()) { plotFile.delete(); } + plotter.writeToFile(filePath + formattedPlot.getPlotName() + ".png"); + System.out.printf("Saved plot \"%s\" to path: %s%n", formattedPlot.getPlotName(), filePath + formattedPlot.getPlotName() + ".png"); + } + } + } + + public void exportPlots(String filePath) throws IOException { + // Export the 1D plots in a text format. + for(FormattedPlot1D plot : formattedPlots1D) { + exportPlot(filePath, plot); + } + + // Export the 2D plots in a text format. + for(FormattedPlot2D plot : formattedPlots2D) { + exportPlot(filePath, plot); + } + } + + private static final void exportPlot(String filePath, FormattedPlot plot) throws IOException { + // Check if this is a one or two dimensional plot. + boolean is1D = plot instanceof FormattedPlot1D; + + // Create a file object for the plot. + String plotPath = filePath + plot.getPlotName() + (is1D ? ".aida1D" : ".aida2D"); + File datFile = new File(plotPath); + + // If the plot file already exists, delete it. + if(datFile.exists()) { datFile.delete(); } + + // Create a new file for the plot to occupy. + datFile.createNewFile(); + + // Get the textual form of the plot. + String plotText = null; + if(is1D) { plotText = toTextFormat(((FormattedPlot1D) plot).getPlot()); } + else { plotText = toTextFormat(((FormattedPlot2D) plot).getPlot()); } + + // Write the plot text to the file. + BufferedWriter writer = new BufferedWriter(new FileWriter(datFile)); + writer.write(plotText); + writer.close(); + + // Note that the file was written. + System.out.printf("Plot \"%s\" was exported to path: %s%n", plot.getPlotName(), plotPath); + } + + private static final String toTextFormat(IHistogram1D plot) { + // Create a buffer to hold the converted plot. + StringBuffer buffer = new StringBuffer(); + + // Iterate over the bins and output the plot in the format of + // "[BIN_MEAN] [BIN_VALUE]" with a tab delimiter. + for(int bin = 0; bin < plot.axis().bins(); bin++) { + buffer.append(String.format("%f\t%f%n", plot.binMean(bin), plot.binHeight(bin))); + } + + // Return the converted file. + return buffer.toString(); + } + + private static final String toTextFormat(IHistogram2D plot) { + // Create a buffer to hold the converted plot. + StringBuffer buffer = new StringBuffer(); + + // Iterate over the bins and output the plot in the format of + // "[X_BIN_MEAN] [Y_BIN_MEAN] [BIN_VALUE]" with a tab delimiter. + for(int xBin = 0; xBin < plot.xAxis().bins(); xBin++) { + for(int yBin = 0; yBin < plot.yAxis().bins(); yBin++) { + buffer.append(String.format("%f\t%f\t%f%n", plot.binMeanX(xBin, yBin), plot.binMeanY(xBin, yBin), plot.binHeight(xBin, yBin))); + } + } + + // Return the converted file. + return buffer.toString(); } }