Untitled
unknown
java
2 years ago
7.7 kB
14
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[iEditor is loading...
Leave a Comment