package jhplot.io;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
import jhplot.*;
import jhplot.gui.GHFrame;
import hep.aida.*;
import hep.aida.ref.histogram.*;
import hep.io.root.RootClass;
import hep.io.root.RootClassNotFound;
import hep.io.root.RootFileReader;
import hep.io.root.interfaces.TH1;
import hep.io.root.interfaces.TH2;
import hep.io.root.interfaces.TKey;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.awt.event.*;
/**
*
* A GUI to browser AIDA data stored in .aida or .xml files.
*
* @author S.Chekanov
*
*/
public class BrowserAida extends BrowserDataGeneric {
static Random random = new Random();
private static final long serialVersionUID = 1L;
boolean take = true;
private Map map;
protected JTree m_tree;
protected JScrollPane scroll;
public JButton closeButton;
private JButton runButton;
private JDialog jdialog;
private GHFrame gframe;
private JCheckBox cb; // A checkbox.
private IAnalysisFactory af;
private ITree itree;
private TreeModel model;
private final static TreeModel emptyTree = null;
public BrowserAida() {
super();
}
/**
* Show the BrowserAida.
*
* @param h
* Frame.
* @param hfile
* file
* @param ishow
* true if shown
*/
public BrowserAida(final GHFrame h, String hfile, boolean ishow) {
super();
// System.out.println("Start Aida browser");
setFile(h, hfile, ishow);
}
/**
* Read data from AIDA file.
*
* @param frame
* @param filepath
* @param ishow
*/
public void setFile(GHFrame frame, String hb, boolean ishow) {
map = new TreeMap();
gframe = frame;
File file = null;
m_tree = new JTree(emptyTree);
m_tree.setRootVisible(false);
m_tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
m_tree.setShowsRootHandles(false);
m_tree.setEditable(false);
try {
file = new File(hb);
IAnalysisFactory af = IAnalysisFactory.create();
itree = af.createTreeFactory().create(file.getAbsolutePath(),"xml");
//if (hb.endsWith(".xml"))
// itree = af.createTreeFactory().create(file.getAbsolutePath(),"xml");
//if (hb.endsWith(".aida"))
// itree = af.createTreeFactory().create(file.getAbsolutePath(),"aida");
model = new DefaultTreeModel(getModel(itree));
m_tree.setModel(model);
m_tree.setCellRenderer(new AidaDirectoryTreeCellRenderer());
m_tree.setRowHeight(20);
m_tree.setLargeModel(true);
} catch (IOException x) {
jhplot.utils.Util.ErrorMessage("Error when opening the file:" + hb);
}
/*
// Set the component to show the popup menu
m_tree.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// if (evt.isPopupTrigger()) {
if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) {
// m_popup.show(e.getComponent(), e.getX(), e.getY());
}
}
});
*/
makeDialog();
}
/**
* Make a dialog
*
*/
public void makeDialog() {
JFrame frame = gframe.getFrame();
jdialog = new JDialog();
cb = new JCheckBox("Overlay");
jdialog.setTitle("Objects");
jdialog.setResizable(true);
// LocationSize(parent);
jdialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
JPanel lowerPanel = new JPanel();
JPanel mainPanel = new JPanel(new BorderLayout());
cb = new JCheckBox("Overlay");
scroll = new JScrollPane();
scroll.getViewport().add(m_tree);
mainPanel.add(scroll, BorderLayout.CENTER);
closeButton = new JButton();
closeButton.setText("Exit");
runButton = new JButton();
runButton.setText("Plot");
// actions
closeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jdialog.setVisible(false);
jdialog.dispose();
// frame = null;
// showIt(false);
}
});
runButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
plotObject();
}
});
lowerPanel.add(runButton, null);
lowerPanel.add(cb, null);
lowerPanel.add(closeButton, null);
jdialog.getContentPane().add(lowerPanel, java.awt.BorderLayout.SOUTH);
jdialog.getContentPane().add(mainPanel, java.awt.BorderLayout.NORTH);
// store mainframe dimensions
Dimension dim = frame.getSize();
int w = dim.width;
int h = dim.height;
// Get the system resolution
Dimension res = Toolkit.getDefaultToolkit().getScreenSize();
// make sure the dialog is not too big
Dimension size = new Dimension(Math.min((int) (0.5 * w), res.width),
Math.min((int) (1.0 * h), res.height));
jdialog.setSize(size);
// pack();
jhplot.utils.Util.rightWithin(frame,jdialog);
jdialog.setVisible(true);
}
/**
* Plot the object
*/
public void plotObject() {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_tree
.getLastSelectedPathComponent();
if (node == null)
return;
Object nodeInfo = node.getUserObject();
OidNode iod = (OidNode) nodeInfo;
Color randomColor = Color.getHSBColor(random.nextFloat(), 1.0F, 1.0F);
HPlot frame = (HPlot) gframe;
if (cb.isSelected() == false)
frame.clearAll();
frame.setAutoRange();
if (iod.getType().equals("IDataPointSet")) {
IDataPointSet p1d = (IDataPointSet) itree.find(iod.getName());
// System.out.println(p1d.dimension());
P1D p1 = new P1D(p1d);
p1.setErrAll(true);
int symbol = (int) (5 * random.nextFloat());
if (symbol <= 0)
symbol = 1;
p1.setSymbol(symbol);
p1.setSymbolSize(4);
p1.setStyle("p");
p1.setPenWidth(3);
p1.setColor(randomColor);
frame.draw(p1);
}
if (iod.getType().equals("IHistogram1D")) {
// System.out.println("Found TH1="+((TH1)node).getTitle());
Histogram1D hh = (Histogram1D) itree.find(iod.getName());
H1D h1 = new H1D(hh);
h1.setFill(true);
h1.setStyle("h");
h1.setPenWidthErr(1);
h1.setPenWidth(1);
h1.setFillColorTransparency(0.6);
h1.setFillColor(randomColor);
h1.setColor(Color.black);
frame.draw(h1);
} else if (iod.getType().equals("IHistogram2D")) {
Histogram2D hh = (Histogram2D) itree.find(iod.getName());
H2D h2s = new H2D(hh);
// frame.setContour(true);
// frame.setContourLevels(15);
} else if (iod.getType().equals("ICloud1D")) {
// System.out.println("Reading Cloud1D");
Cloud1D hh = (Cloud1D) itree.find(iod.getName());
H1D h1 = new H1D(hh, 100);
h1.setFill(true);
h1.setStyle("h");
h1.setPenWidthErr(1);
h1.setPenWidth(1);
h1.setFillColorTransparency(0.6);
h1.setFillColor(randomColor);
h1.setColor(Color.black);
frame.draw(h1);
} else if (iod.getType().equals("ICloud2D")) {
// System.out.println("Reading Cloud2D");
Cloud2D c2d = (Cloud2D) itree.find(iod.getName());
// System.out.println(p1d.dimension());
P1D p1 = new P1D(c2d);
p1.setErrAll(true);
int symbol = (int) (5 * random.nextFloat());
if (symbol <= 0)
symbol = 1;
p1.setSymbol(symbol);
p1.setSymbolSize(4);
p1.setStyle("p");
p1.setPenWidth(3);
p1.setColor(randomColor);
frame.draw(p1);
}
}
/**
* Return a map with all objects
*
* @return
*/
public Map getMap() {
return map;
}
/**
* Get model
* @param tree
* @return
*/
private DefaultMutableTreeNode getModel(ITree tree) {
String[] names = tree.listObjectNames(".", true);
String[] types = tree.listObjectTypes(".", true);
/*
* for (int i=0; i
Ads help maintain this website.