Untitled
unknown
java
a year ago
7.7 kB
2
Indexable
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.PDPageTree; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy; import org.apache.pdfbox.text.PDFTextStripper; import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; import javax.imageio.ImageIO; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class PDFHandlerApp { private static final double DISPERSION_CONSTANT = 4.148808e3; private static double dm = 350; // Default DM value private static double clipTo = 1.5; // Default clip value private static boolean useSimulator = false; // Use simulator flag private static Color lineColor = Color.BLACK; // Default line color public static void main(String[] args) { if (args.length > 0) { handleCommandLineArgs(args); } else { SwingUtilities.invokeLater(PDFHandlerApp::createAndShowGUI); } } private static void handleCommandLineArgs(String[] args) { // Command-line implementation here } private static void createAndShowGUI() { JFrame frame = new JFrame("Advanced PDF Data Analyzer"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); // Control Panel JPanel controlPanel = new JPanel(); controlPanel.setLayout(new GridLayout(5, 2)); // Observation ID JLabel obsIdLabel = new JLabel("Observation ID:"); JTextField obsIdField = new JTextField("obs1"); controlPanel.add(obsIdLabel); controlPanel.add(obsIdField); // DM Value JLabel dmLabel = new JLabel("DM Value:"); JTextField dmField = new JTextField(Double.toString(dm)); controlPanel.add(dmLabel); controlPanel.add(dmField); // Clip Value JLabel clipLabel = new JLabel("Clip Value:"); JTextField clipField = new JTextField(Double.toString(clipTo)); controlPanel.add(clipLabel); controlPanel.add(clipField); // Line Color Picker JLabel colorLabel = new JLabel("Line Color:"); JButton colorButton = new JButton("Choose Color"); controlPanel.add(colorLabel); controlPanel.add(colorButton); // Simulator Checkbox JCheckBox simulatorCheckBox = new JCheckBox("Use Simulator"); controlPanel.add(simulatorCheckBox); // File Chooser Button JButton fileChooserButton = new JButton("Choose HDF5 File"); controlPanel.add(fileChooserButton); // Plot Button JButton plotButton = new JButton("Generate Plots"); controlPanel.add(plotButton); frame.add(controlPanel, BorderLayout.NORTH); // Chart Panels JPanel chartPanel = new JPanel(); chartPanel.setLayout(new GridLayout(2, 1)); frame.add(chartPanel, BorderLayout.CENTER); // File Chooser JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileFilter(new FileNameExtensionFilter("HDF5 Files", "hdf5")); fileChooserButton.addActionListener(e -> { int returnValue = fileChooser.showOpenDialog(frame); if (returnValue == JFileChooser.APPROVE_OPTION) { String filename = fileChooser.getSelectedFile().getPath(); obsIdField.setText(filename); } }); colorButton.addActionListener(e -> { Color chosenColor = JColorChooser.showDialog(frame, "Choose Line Color", lineColor); if (chosenColor != null) { lineColor = chosenColor; } }); plotButton.addActionListener(e -> { String observationId = obsIdField.getText(); String filename = fileChooser.getSelectedFile().getPath(); dm = Double.parseDouble(dmField.getText()); clipTo = Double.parseDouble(clipField.getText()); useSimulator = simulatorCheckBox.isSelected(); generateAndDisplayPlots(observationId, filename, chartPanel); }); frame.pack(); frame.setVisible(true); } private static void generateAndDisplayPlots(String observationId, String filename, JPanel chartPanel) { try { double[] freq; double[] time; double[][] wf; if (useSimulator) { // Simulate data freq = simulateFrequencies(100); time = simulateTime(1000); wf = new double[time.length][freq.length]; simulateWaterfallData(wf, time, freq); } else { // Load data from HDF5 file H5File file = new H5File(filename, FileFormat.READ); file.open(); Group observation = (Group) file.get("Observation1"); displayHDF5Structure(observation, ""); freq = (double[]) ((Dataset) observation.getMember("Tuning1/freq")).getData(); time = (double[]) ((Dataset) observation.getMember("time")).getData(); wf = new double[time.length][freq.length]; simulateWaterfallData(wf, time, freq); file.close(); } double[] delay = calculateDispersionDelay(freq, dm); double[][] dedispersedWf = applyIncoherentDedispersion(wf, freq, time, delay); SwingUtilities.invokeLater(() -> { chartPanel.removeAll(); chartPanel.add(new ChartPanel(createFreqSpectChart(observationId, freq, time, dedispersedWf))); chartPanel.add(new ChartPanel(createDMSpectChart(observationId, freq, time, dedispersedWf))); chartPanel.revalidate(); chartPanel.repaint(); }); } catch (Exception e) { e.printStackTrace(); } } private static void displayHDF5Structure(Group group, String indent) { try { for (Object memberObj : group.getMemberList()) { if (memberObj instanceof Dataset) { Dataset dataset = (Dataset) memberObj; System.out.println(indent + dataset.getFullName() + ": " + Arrays.toString(dataset.getDims()) + " " + dataset.getDatatype().getDescription()); } else if (memberObj instanceof Group) { Group subgroup = (Group) memberObj; System.out.println(indent + subgroup.getFullName() + ": Group"); displayHDF5Structure(subgroup, indent + " "); } } } catch (Exception e) { e.printStackTrace(); } } private static double[] simulateFrequencies(int size) { double[] freq = new double[size]; for (int i = 0; i < size; i++) { freq[i] = 1000 + i * 10; // Simulated frequencies from 1000 to 2000 Hz } return freq; } private static double[] simulateTime(int size) { double[] time = new double[size]; for (int i = 0; i < size; i++) { time[i
Editor is loading...
Leave a Comment