package hep.aida.ref;
import hep.aida.IHistogram1D;
import hep.aida.IHistogram2D;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
/**
* A very(!) basic test of the reference implementations of AIDA histograms.
*/
public class Test
{
public static void main(String[] argv)
{
Random r = new Random();
IHistogram1D h1 = new Histogram1D("AIDA 1D Histogram",40,-3,3);
for (int i=0; i<10000; i++) h1.fill(r.nextGaussian());
IHistogram2D h2 = new Histogram2D("AIDA 2D Histogram",40,-3,3,40,-3,3);
for (int i=0; i<10000; i++) h2.fill(r.nextGaussian(),r.nextGaussian());
// Write the results as a PlotML files!
writeAsXML(h1,"aida1.xml");
writeAsXML(h2,"aida2.xml");
// Try some projections
writeAsXML(h2.projectionX(),"projectionX.xml");
writeAsXML(h2.projectionY(),"projectionY.xml");
}
private static void writeAsXML(IHistogram1D h,String filename)
{
try
{
PrintWriter out = new PrintWriter(new FileWriter(filename));
out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>");
out.println("<!DOCTYPE plotML SYSTEM \"plotML.dtd\">");
out.println("<plotML>");
out.println("<plot>");
out.println("<dataArea>");
out.println("<data1d>");
out.println("<bins1d title=\""+h.title()+"\">");
for (int i=0; i<h.xAxis().bins(); i++)
{
out.println(h.binEntries(i)+","+h.binError(i));
}
out.println("</bins1d>");
out.print("<binnedDataAxisAttributes type=\"double\" axis=\"x0\"");
out.print(" min=\""+h.xAxis().lowerEdge()+"\"");
out.print(" max=\""+h.xAxis().upperEdge()+"\"");
out.print(" numberOfBins=\""+h.xAxis().bins()+"\"");
out.println("/>");
out.println("<statistics>");
out.println("<statistic name=\"Entries\" value=\""+h.entries()+"\"/>");
out.println("<statistic name=\"Underflow\" value=\""+h.binEntries(h.UNDERFLOW)+"\"/>");
out.println("<statistic name=\"Overflow\" value=\""+h.binEntries(h.OVERFLOW)+"\"/>");
if (!Double.isNaN(h.mean())) out.println("<statistic name=\"Mean\" value=\""+h.mean()+"\"/>");
if (!Double.isNaN(h.rms())) out.println("<statistic name=\"RMS\" value=\""+h.rms()+"\"/>");
out.println("</statistics>");
out.println("</data1d>");
out.println("</dataArea>");
out.println("</plot>");
out.println("</plotML>");
out.close();
}
catch (IOException x) { x.printStackTrace(); }
}
private static void writeAsXML(IHistogram2D h,String filename)
{
try
{
PrintWriter out = new PrintWriter(new FileWriter(filename));
out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>");
out.println("<!DOCTYPE plotML SYSTEM \"plotML.dtd\">");
out.println("<plotML>");
out.println("<plot>");
out.println("<dataArea>");
out.println("<data2d type=\"xxx\">");
out.println("<bins2d title=\""+h.title()+"\" xSize=\""+h.xAxis().bins()+"\" ySize=\""+h.yAxis().bins()+"\">");
for (int i=0; i<h.xAxis().bins(); i++)
for (int j=0; j<h.yAxis().bins(); j++)
{
out.println(h.binEntries(i,j)+","+h.binError(i,j));
}
out.println("</bins2d>");
out.print("<binnedDataAxisAttributes type=\"double\" axis=\"x0\"");
out.print(" min=\""+h.xAxis().lowerEdge()+"\"");
out.print(" max=\""+h.xAxis().upperEdge()+"\"");
out.print(" numberOfBins=\""+h.xAxis().bins()+"\"");
out.println("/>");
out.print("<binnedDataAxisAttributes type=\"double\" axis=\"y0\"");
out.print(" min=\""+h.yAxis().lowerEdge()+"\"");
out.print(" max=\""+h.yAxis().upperEdge()+"\"");
out.print(" numberOfBins=\""+h.yAxis().bins()+"\"");
out.println("/>");
//out.println("<statistics>");
//out.println("<statistic name=\"Entries\" value=\""+h.entries()+"\"/>");
//out.println("<statistic name=\"MeanX\" value=\""+h.meanX()+"\"/>");
//out.println("<statistic name=\"RmsX\" value=\""+h.rmsX()+"\"/>");
//out.println("<statistic name=\"MeanY\" value=\""+h.meanY()+"\"/>");
//out.println("<statistic name=\"RmsY\" value=\""+h.rmsY()+"\"/>");
//out.println("</statistics>");
out.println("</data2d>");
out.println("</dataArea>");
out.println("</plot>");
out.println("</plotML>");
out.close();
}
catch (IOException x) { x.printStackTrace(); }
}
}