siddharthparashri5/Advanced_ROOT_Plotting
GitHub: siddharthparashri5/Advanced_ROOT_Plotting
基于CERN ROOT框架的高能物理数据分析图形界面工具,支持链式事件筛选、脚本执行和论文级图表制作。
Stars: 0 | Forks: 1
# 高级 ROOT 绘图 GUI
一个现代化、用户友好的图形界面,用于使用 ROOT 创建出版质量的图表,支持 CSV 数据文件、具有拖放功能的 ROOT 文件、带有链式过滤的高级 TTree 条目选择以及集成脚本执行。



## 功能特性
### 数据输入
- **CSV/文本文件导入**:带有可自定义设置的交互式预览对话框
- 多种分隔符选项(逗号、分号、制表符、空格、自定义)
- 表头行检测和配置
- 跳过元数据行
- 带格式化表格视图的实时预览
- **ROOT 文件支持**:原生 ROOT 对象处理
- 加载直方图 (TH1, TH2, TH3)
- 加载图表 (TGraph, TGraphErrors, TGraphAsymmErrors)
- 加载 TTree 对象
- 支持从 TBrowser 拖放
- 带有对象预览的交互式 ROOT 文件浏览器
### 新功能:基于 GUI 的 ROOT 分析和过滤
- **条目范围选择**:从 TTree 中选择特定事件范围
- 选择开始和结束条目号
- 应用于任何 TTree 分支
- 直方图的 Bin 范围选择
- **切割公式**:使用 ROOT 的 TCut 语法应用物理切割
- 复杂的布尔表达式:`Energy > 100 && Pt > 30`
- 支持数学函数
- 用于基于条目切割的 Entry$ 变量
- **带切割的选择链**:构建累积过滤器管道
- 多个切割的顺序应用
- 每一步都建立在前一步的选择之上
- GUI 中的可视化链表示
- 实时条目计数反馈
- **保存/加载链**:持久化选择工作流
- 将链保存为 `.selchain` 文件(纯文本,易于版本控制)
- 加载和重用选择链
- 与合作者分享分析工作流
- **绘图选项**:
- 仅绘制当前选择(单步)
- 使用整个链绘制(累积切割)
- 从过滤后的 TTree 数据自动创建直方图
- 完全控制绘制选项
### 绘图能力
- **多种图表类型**:
- 带误差棒的散点图
- 折线图
- 直方图 (1D, 2D, 3D)
- 误差棒图
- 色彩图和曲面图
- 带切割的基于 TTree 的直方图
- **自定义选项**:
- 坐标轴标签和标题
- 自定义配色方案
- 标记样式和大小
- 线条样式和宽度
- 图例定位
- 网格选项
### 高级功能
- **多画布支持**:创建和管理多个绘图画布
- **列选择器**:用于选择数据列的交互式对话框
- **实时预览**:实时查看更改
- **导出选项**:以多种格式保存图表 (PDF, PNG, EPS, SVG)
- **拖放**:直接将 ROOT 对象拖放到 GUI 上
- **集成脚本引擎**:执行 ROOT/C++ 和 Python 脚本
- 带语法高亮的多行脚本编辑器
- 用于单行命令的命令行界面
- 加载/保存外部脚本文件
- 从脚本访问已加载的 ROOT 文件
- **高级拟合**:多种拟合函数,支持 RooFit
- 高斯、多项式、指数拟合
- 正弦、阻尼正弦(用于周期性数据)
- 自定义函数支持
- 显示带不确定度的拟合参数
## 系统要求
### 系统需求
- **操作系统**:Linux (推荐 Ubuntu 20.04+)
- **ROOT**:版本 6.26 或更高(推荐 6.28+ 以使用所有功能)
- **C++ 编译器**:GCC 9.0+,支持 C++17
- **CMake**:版本 3.12 或更高
- **Python**(可选):用于 Python 脚本执行
### ROOT 安装
```
# 从官方仓库安装 ROOT 或从源代码构建
# 检查或从 https://root.cern/install/ 下载
```
## 安装说明
### 1. 克隆或下载项目
```
git clone https://github.com/siddharthparashri5/Advanced_ROOT_Plotting.git
cd Advanced_ROOT_Plotting
mkdir build
cd build
cmake ..
make -j
```
### 2. 项目结构
```
Advance_ROOT_Plotting_dev/
├── src/
│ ├── AdvancedPlotGUI.cpp # Main GUI implementation
│ ├── CSVPreviewDialog.cpp # CSV preview and import
│ ├── ColumnSelectorDialog.cpp # Column selection dialog
│ ├── ColumnSelectorDict.cpp # ROOT dictionary
│ ├── RootEntrySelector.cpp # Entry selector GUI
│ ├── PlotManager.cpp # Plot creation and management
│ ├── FileHandler.cpp # File loading and processing
│ ├── PlotTypes.cpp # Plot type implementations
│ ├── ProjectDict.cpp # ROOT dictionary
│ ├── RootDataInspector.cpp # ROOT data inspection
│ ├── ROOTFileBrowser.cpp # ROOT file browser dialog
│ ├── ScriptEngine.cpp # Script execution engine
│
├── include/
│ ├── AdvancedPlotGUI.h # Main GUI header
│ ├── CSVPreviewDialog.h # CSV preview dialog
│ ├── ColumnSelectorDialog.h # Column selector
│ ├── ColumnSelectorLinkDef.h # ROOT linkdef
│ ├── RootEntrySelector.h # Entry selector GUI
│ ├── PlotManager.h # Plot management
│ ├── DataReader.h # Data reading utilities
│ ├── FileHandler.h # File handling
│ ├── PlotTypes.h # Plot type definitions
│ ├── ErrorHandling.h # Error utilities
│ ├── FitUtils.h # Fitting utilities
│ ├── RootDataInspector.h # Data inspection
│ ├── ROOTFileBrowser.h # File browser
│ ├── ScriptEngine.h # Script engine
│
├── main.cpp # Application entry point
├── CMakeLists.txt # Build configuration
└── sample_data.csv # Example data file
```
### 3. 构建应用程序
```
mkdir build
cd build
cmake ..
make -j$(nproc)
```
这将创建可执行文件:`AdvancedPlotGUIApp`
### 4. 构建问题排查
**ROOT 缺失**:如果 CMake 找不到 ROOT,请 source ROOT 环境:
```
source /path/to/root/bin/thisroot.sh
```
**编译器错误**:确保您具有 C++17 支持:
```
g++ --version # Should be 9.0 or higher
```
## 使用说明
### 启动应用程序
```
# From the build directory:
./AdvancedPlotGUIApp
# 或者使用 ROOT:
root -l
.x ../main.cpp
```
### 加载 CSV 文件
1. **点击 "Browse"** 按钮
2. **选择您的数据文件** 在文件浏览器中
3. **配置导入设置** 在预览对话框中:
- 选择分隔符(逗号、分号、制表符等)
- 设置第一行是否包含表头
- 如有需要,跳过元数据行
- 预览显示格式化的表格
4. **点击 "Load"** 导入数据
5. **成功对话框** 确认数据已加载
### 加载 ROOT 文件
1. **点击 "Browse"** 按钮
2. **选择您的 .root 文件** 在文件浏览器中
3. **ROOT 文件浏览器对话框** 显示:
- 所有直方图 (TH1*, TH2*, TH3*)
- 所有图表 (TGraph*)
- 所有 TTree 及分支信息
4. **选择对象** 加载
5. **选择**:在单个画布、叠加或分割画布中绘制对象,或仅打开 TBrowser
6. **选择**:加载对象或仅打开 TBrowser
### 使用 ROOT 分析(新功能)
ROOT 分析提供带有链式过滤的高级 TTree 事件选择。
#### 打开 ROOT 分析
#### 基本工作流程
1. **加载 ROOT 文件**:文件在启动时自动打开
2. **选择对象**:从下拉菜单中选择 TTree 或直方图
3. **选择分支**(用于 TTree):选择要绘制的分支
4. **设置条目范围**:
- 开始条目:要包含的第一个事件(默认:0)
- 结束条目:要包含的最后一个事件(默认:全部)
5. **添加切割公式**(可选):
Energy > 100
Energy > 50 && Pt > 30
abs(Eta) < 2.5
6. **添加到链**:点击保存此选择步骤
7. **重复**:添加更多步骤以构建链
8. **绘图**:
- "Plot Current Only":仅当前设置
- "Plot with Chain Cuts":累积应用所有切割
#### 选择链示例
```
Step 1: Events:Energy | Cut: Energy > 70 → ~7000 events
Step 2: Events:Pt | Cut: Pt > 30 → ~3500 events
Step 3: Events:Eta | Cut: abs(Eta) < 2.0 → ~2800 events
Final plot shows Energy distribution with ALL cuts applied!
```
#### 保存和加载链
- **保存链**:点击 "Save Chain" → 选择文件名 → 创建 `.selchain` 文件
- **加载链**:点击 "Load Chain" → 选择 `.selchain` 文件 → 恢复所有步骤
- 链文件是纯文本的,易于版本控制
#### 重要说明
- **直方图**:仅条目/Bin 范围有效,切割被忽略(直方图是预先分 bin 的)
- **TTree**:条目范围和切割均有效
- **Entry$ 变量**:用于切割中条目号的特殊 ROOT 变量
Entry$ < 1000 # 前 1000 个事件
Entry$ >= 5000 && Entry$ < 10000 # 事件 5000-10000
### 创建图表
#### 从 CSV 数据:
1. 加载 CSV 文件(见上文)
2. 点击 **"Add Plot"** 按钮
3. **列选择对话框** 打开:
- 选择图表类型 (TGraph, TGraphErrors, TH1, TH2, TH3)
- 选择 X 轴列
- 选择 Y 轴列(用于散点图/2D 图)
- 选择 Z 轴列(用于 3D 图)
- 可选择误差列(X 误差,Y 误差)
4. 点击 **"OK"** 添加到绘图列表
5. 配置画布选项:
- 同一画布(叠加)或单独画布
- 带行/列的分割画布
6. 点击 **"Create Plots"**
#### 从 ROOT 文件:
1. 加载 ROOT 文件(见上文)
2. **选项 A**:在浏览器中选择对象 → 点击 "Load Selected"
3. **选项 B**:打开 TBrowser 并将对象拖到 GUI 窗口
4. **选项 C**:使用条目选择器进行高级 TTree 过滤
5. 图表在画布中自动创建
### 使用拖放
GUI 支持从 ROOT 的 TBrowser 拖放:
1. **打开 TBrowser**:在 ROOT 终端输入 `TBrowser b;` 或在文件浏览器中点击 "TBrowser Only"
2. **导航** 到您的 ROOT 文件
3. **拖动直方图或图表** 从 TBrowser
4. **放置到 GUI 主窗口**
5. **自动创建图表**:
- TH1/TH2/TH3 → 直方图
- TGraph → 带标记的图表
- TTree → 显示信息(使用条目选择器进行绘图)
### 使用脚本引擎(新功能)
集成脚本引擎支持 ROOT/C++ 和 Python。
#### 命令框(单行执行)
在底部输入框中输入命令并按 **Enter**:
```
// ROOT/C++ commands:
cout << "Hello ROOT" << endl
TH1F *h = new TH1F("h","Test",100,-5,5)
h->FillRandom("gaus",10000)
h->Draw()
gDirectory->ls()
```
#### 脚本编辑器(多行脚本)
在编辑器中编写多行脚本并点击 **"Run Script"**:
```
void myAnalysis() {
TCanvas *c = new TCanvas("c","Analysis",1200,800);
c->Divide(2,2);
// Plot 1: Gaussian
c->cd(1);
TH1F *h1 = new TH1F("h1","Gaussian",100,-5,5);
h1->FillRandom("gaus",10000);
h1->Draw();
// Plot 2: Exponential
c->cd(2);
TH1F *h2 = new TH1F("h2","Exponential",100,0,10);
h2->FillRandom("expo",10000);
h2->Draw();
// Plot 3: Scatter
c->cd(3);
TGraph *g = new TGraph(50);
for(int i=0; i<50; i++) {
g->SetPoint(i, i, sin(i*0.2)*exp(-i/20.0));
}
g->Draw("APL");
// Plot 4: 2D histogram
c->cd(4);
TH2F *h3 = new TH2F("h3","2D Dist",50,-3,3,50,-3,3);
h3->FillRandom("gaus",50000);
h3->Draw("COLZ");
c->Update();
}
```
然后在命令框中:`myAnalysis()`
#### Python 脚本
从语言下拉菜单中选择 "Python":
```
import ROOT
# Create canvas
c = ROOT.TCanvas("c", "Python Plot", 800, 600)
# Create and fill histogram
h = ROOT.TH1F("h", "Energy Distribution;Energy [GeV];Events", 100, 0, 200)
for i in range(10000):
h.Fill(ROOT.gRandom.Gaus(100, 15))
h.SetLineColor(ROOT.kBlue)
h.SetFillColor(ROOT.kCyan)
h.Draw()
c.Update()
```
#### 加载外部脚本
- 点击 **"Load..."** 加载 `.C`、`.cpp` 或 `.py` 文件
- 点击 **"Save..."** 保存当前脚本
- 脚本在会话之间持久保存
#### 重要脚本说明
- **多行 C++**:必须包装在函数中(见上文示例)
- **单行 C++**:可直接执行
- **Python**:无需包装
- **访问已加载的文件**:在脚本中使用 `gDirectory->GetFile()`
### 高级拟合(新功能)
GUI 包含全面的拟合功能:
#### 可用拟合函数
- **高斯**:标准正态分布
- **多项式**:Pol0(常数)、Pol1(线性)、Pol2-Pol4(高阶)
- **指数**:衰减函数
- **正弦函数**:正弦、正弦+偏移、阻尼正弦(用于振荡数据)
- **自定义**:输入任何 ROOT 公式
#### 使用拟合
1. 从下拉菜单中选择拟合函数
2. 对于自定义拟合,输入公式:`[0]*x^2 + [1]*x + [2]`
3. 正常创建图表
4. 自动应用拟合
5. 显示带不确定度的拟合参数
#### RooFit 集成
对于直方图上的高斯拟合,自动使用 RooFit:
- 更稳健的参数估计
- 正确的误差传播
- 显示 Chi-square 和 NDF
### 自定义图表
**坐标轴标签:**
- 自动使用 CSV 中的列表头
- 或使用 ROOT 对象标题
- 可在 ROOT 画布中自定义
**图表样式:**
- 右键点击画布获取 ROOT 上下文菜单
- 访问 SetLogy()、SetLogx()、SetLogz()
- 更改标记样式、颜色
- 修改直方图填充颜色
**导出:**
- 右键点击画布 → "Save As"
- 支持格式:PDF, PNG, EPS, SVG, ROOT
## 示例工作流程
### 示例 1:简单 CSV 散点图
```
# sample_data.csv
x,y,xerr,yerr,z
1.0,2.5,0.1,0.2,5.0
2.0,3.8,0.1,0.3,7.5
3.0,5.2,0.15,0.25,9.0
4.0,7.1,0.2,0.4,11.5
```
1. 点击 "Browse" → 加载 `sample_data.csv`
2. 点击 "Add Plot"
3. 选择:TGraphErrors, X=x, Y=y, X-Error=xerr, Y-Error=yerr
4. 点击 "OK"
5. 点击 "Create Plots"
6. 结果:带误差棒的散点图
### 示例 2:高级 TTree 事件选择(新功能)
创建测试数据:
```
cd RootEntrySelector
./test_entry_selector # Creates test_data.root with physics events
```
分析工作流程:
```
1. Open Entry Selector with test_data.root
2. Select "Events" tree
3. Add selection chain:
Step 1:
- Branch: Energy
- Cut: Energy > 70
- Click "Add to Chain"
Step 2:
- Branch: Pt
- Cut: Pt > 30
- Click "Add to Chain"
Step 3:
- Branch: Eta
- Cut: abs(Eta) < 2.0
- Click "Add to Chain"
4. Click "Plot with Chain Cuts"
5. Result: Histogram showing Energy distribution for events passing ALL cuts
6. Save chain: Click "Save Chain" → "physics_cuts.selchain"
7. Later: Click "Load Chain" → Select "physics_cuts.selchain" → All steps restored!
```
### 示例 3:基于脚本的分析(新功能)
```
// Load in script editor:
void quickAnalysis() {
// Get the loaded ROOT file
TFile *f = (TFile*)gDirectory->GetFile();
if (!f) {
cout << "No file loaded!" << endl;
return;
}
// Get tree
TTree *tree = (TTree*)f->Get("Events");
if (!tree) {
cout << "Tree not found!" << endl;
return;
}
// Apply cuts and plot
TCanvas *c = new TCanvas("c", "Analysis", 1200, 400);
c->Divide(3,1);
c->cd(1);
tree->Draw("Energy", "Energy > 50");
c->cd(2);
tree->Draw("Pt", "Pt > 20 && Energy > 50");
c->cd(3);
tree->Draw("Eta:Phi", "Energy > 100", "COLZ");
c->Update();
cout << "Total events: " << tree->GetEntries() << endl;
cout << "Passed Energy>50: " << tree->GetEntries("Energy > 50") << endl;
}
```
执行:在命令框中输入 `quickAnalysis()` 并按 Enter
### 示例 4:拟合分析(新功能)
```
1. Load ROOT file with histogram or create from CSV
2. Select fit function: "Gaussian"
3. Add plot, create plots
4. Fit automatically applied
5. Fit parameters shown on plot:
- Mean ± error
- Sigma ± error
- Chi²/NDF
6. Right-click → Save As → Export with fit
```
## 功能详情
### CSV 预览对话框
- **实时预览**:以表格形式查看前 100 行
- **分隔符自动检测**:智能检测常见分隔符
- **自定义分隔符**:支持任何单字符分隔符
- **表头检测**:自动识别表头行
- **跳过行**:跳文件开头的元数据或注释
- **编码支持**:UTF-8, ASCII, ISO-8859-1
- **大文件处理**:高效加载 10万+ 行的文件
### 列选择对话框
- **图表类型选择**:TGraph, TGraphErrors, TH1, TH2, TH3
- **可视化列选择**:通过下拉菜单轻松选择
- **数据类型检测**:自动数字/字符串检测
- **误差列支持**:可选 X/Y 误差棒
- **3D 图表支持**:可选 Z 列用于 3D 图
- **智能默认值**:自动选择合适的列
### ROOT 文件浏览器(新功能)
- **对象树视图**:分层显示文件内容
- **类型过滤**:直方图、图表、树分别分类
- **多选**:一次加载多个对象
- **TTree 详情**:显示条目数和分支信息
- **TBrowser 集成**:可选择打开传统 TBrowser
- **双击绘图**:双击对象即可立即绘图
### ROOT 分析(新功能)
- **条目范围选择**:选择特定事件范围
- **切割公式**:使用 ROOT 语法应用物理切割
- **选择链**:构建多步过滤器管道
- **链持久化**:保存/加载选择工作流
- **实时反馈**:查看过滤后的条目计数
- **分支选择**:选择要绘制的 TTree 分支
- **直方图支持**:直方图的 Bin 范围选择
- **文档**:全面的用户指南和示例
### 脚本引擎(新功能)
- **双重界面**:命令框用于单行,编辑器用于脚本
- **多语言**:支持 ROOT/C++ 和 Python
- **文件 I/O**:加载/保存脚本文件
- **输出捕获**:脚本输出显示在专用面板中
- **自动补全**:ROOT 命令可用(如已启用)
- **历史记录**:使用方向键浏览命令历史
### 高级拟合(新功能)
- **多种函数**:高斯、多项式、指数、正弦
- **自定义函数**:支持任何 ROOT 公式
- **RooFit 集成**:直方图上的高斯拟合自动使用
- **参数显示**:显示带不确定度的拟合结果
- **Chi-square**:显示质量指标
- **可视化叠加**:拟合曲线绘制在图表上
## 键盘快捷键
| 按键 | 操作 |
|-----|--------|
| `Ctrl+O` | 打开文件浏览器 |
| `Ctrl+S` | 保存当前画布 |
| `Ctrl+Q` | 退出应用程序 |
| `Ctrl+N` | 新建画布 |
| `Ctrl+W` | 关闭当前画布 |
| `Enter` | 执行命令(在命令框中)|
| `Ctrl+Enter` | 运行脚本(在脚本编辑器中)|
## 配置文件
### CMakeLists.txt
配置构建选项:
```
# Enable/disable features
option(BUILD_TESTING "Build tests" OFF)
option(ENABLE_WARNINGS "Enable compiler warnings" ON)
# Set ROOT components
find_package(ROOT REQUIRED COMPONENTS
Core Hist Graf Gpad Tree RIO
RooFit RooFitCore # For advanced fitting
Gui Rint # For GUI
ROOTTPython # For Python support
)
```
### ROOT 分析集成
要将条目选择器集成到主 GUI 中:
1. 参见 `RootEntrySelector/docs/INTEGRATION_GUIDE.md`
2. 添加头文件并创建 RootEntrySelector 实例
3. 添加菜单项或按钮以启动
4. 提供完整的集成示例
## 已知问题与限制
### 当前限制
- CSV 文件必须格式正确(无锯齿状行)
- 推荐的最大文件大小:1000 万行
- 拖放仅适用于 ROOT 6.26+
- 某些 ROOT 对象类型尚不支持 (THStack, TMultiGraph)
- 脚本编辑器没有语法高亮
- 条目选择器为独立工具(提供集成指南)
### 已知问题
1. **大型 TTree 文件**:加载非常大的 TTree(>1GB)可能会很慢
2. **X11 渲染**:Wayland 会话上存在一些显示问题(请使用 X11)
3. **内存**:大型数据集可能需要大量 RAM
4. **脚本错误**:多行 C++ 脚本必须包装在函数中
### 解决方法
- 对于大文件:仅加载特定分支或使用条目选择器
- 对于 Wayland:设置 `GDK_BACKEND=x11` 环境变量
- 对于内存问题:分块处理数据
- 对于脚本:参见脚本故障排除指南
## 故障排除
### "无法打开 libAdvancedPlotGUI.so"
```
# Add build directory to library path
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)
```
### "字典生成失败"
```
# Clean and rebuild
rm -rf build/
mkdir build && cd build
cmake .. && make clean && make
```
### "条目选择器出现段错误崩溃"
这通常是由于 `Form()` 函数问题。最新版本已修复此问题:
```
cd RootEntrySelector
make clean
make
# Ensure you're using the fixed versions from outputs folder
```
### "条目选择器中的分支选择无法工作"
使用 `AddSelectionStep_PROPER_FIX.cpp` 中修复的 `AddSelectionStep()`,它:
- 正确捕获从组合框中选择的分支
- 验证分支在树中是否存在
- 如果未选择分支,则回退到第一个分支并发出警告
### "使用链切割绘图返回 -1 个条目"
确保分支名称包含在链步骤中:
- 链应存储 "TreeName:BranchName" 格式
- 使用修复的 `PlotWithChain()`,如果缺失则自动选择第一个分支
- 检查控制台输出以获取详细的错误消息
### "脚本无法执行"
常见问题:
- **多行脚本**:必须包装在函数中 (void myFunc() { ... })
- **单行命令**:可直接执行
- **语法错误**:检查 ROOT 语法
- **缺少分号**:C++ 需要它们
- 有关完整指南,请参见 `SCRIPT_TROUBLESHOOTING_GUIDE.txt`
### "CSV 预览对话框不显示"
- 检查文件权限:`ls -l your_file.csv`
- 验证文件是有效的 CSV/文本格式
- 尝试使用提供的 sample_data.csv
- 检查非 ASCII 字符
### "拖放不工作"
- 确保您使用的是 ROOT 6.26 或更高版本:`root --version`
- 检查 X11 是否正在运行:`echo $DISPLAY`
- 重启应用程序和 TBrowser
- 确保您是从 TBrowser 拖动,而不是文件管理器
### "加载 CSV 后按钮仍处于禁用状态"
- 检查控制台是否有错误消息
- 验证 CSV 包含数字数据
- 尝试使用不同的分隔符设置
- 确保至少有 2 列数字
## 开发
### 使用调试符号构建
```
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j$(nproc)
gdb ./AdvancedPlotGUIApp
```
### 添加自定义功能
**新图表类型:**
1. 在 `PlotTypes.h` 中添加图表类型枚举
2. 在 `PlotTypes.cpp` 中实现创建器
3. 在 `ColumnSelectorDialog` 中添加 UI 控件
4. 更新 `PlotManager` 以处理新类型
**新文件格式:**
1. 在 `FileHandler.cpp` 中添加加载器
2. 创建预览对话框(遵循 `CSVPreviewDialog` 模式)
3. 更新 UI 以包含新文件类型
4. 添加到文件类型过滤器
### 代码风格
- 遵循 ROOT 编码约定
- 对 ROOT 类使用 `ClassDef`/`ClassImp` 宏
- 使用 Doxygen 注释记录公共方法
- 尽可能保持函数在 50 行以内
- 使用 `snprintf()` 而不是 `Form()` 进行字符串构造
### 测试
**基本功能:**
```
./AdvancedPlotGUIApp
# Test CSV loading with sample_data.csv
# Test ROOT file loading
# Test drag & drop from TBrowser
# Test script execution
```
**脚本引擎:**
```
# Test single commands
# Test multi-line scripts
# Test Python execution
# Test load/save scripts
```
## 贡献
欢迎贡献!请:
1. Fork 仓库
2. 创建功能分支
3. 进行更改并使用清晰的提交消息
4. 使用示例数据进行彻底测试
5. 在 README 中记录新功能
6. 提交 Pull Request
### 优先领域
- ROOT 分析 GUI 集成到主应用程序
- 脚本编辑器语法高亮
- 额外的拟合函数
- THStack 和 TMultiGraph 支持
- 改进的错误处理
- 单元测试
## 引用
如果您在研究中使用本软件,可以按以下方式引用:
```
@software{advanced_root_plotting_gui,
author = {Siddharth Parashari},
title = {Advanced ROOT Plotting GUI},
version = {2.3},
year = {2024},
url = {https://github.com/yourusername/Advance_ROOT_Plotting_dev}
}
```
## 联系与支持
- **问题**:在 GitHub 上开启 issue
- **Email**:siddharthparashri5@gmail.com
- **ROOT 论坛**:https://root-forum.cern.ch/
## 致谢
- 使用 [ROOT Data Analysis Framework](https://root.cern/) 构建
- 灵感来源于 ROOT 的 TBrowser 和 TCanvas
- 感谢 ROOT 开发团队
- 用于高级拟合的 RooFit 集成
## 版本历史
### v2.3 (当前版本 - 2026年2月)
- **新功能**:带有链式过滤的高级 ROOT 分析
- TTree 和直方图的条目选择
- 使用 ROOT 语法的复杂切割公式
- 顺序过滤器链
- 保存/加载选择工作流
- 带集成指南的独立工具
- **新功能**:集成脚本引擎
- ROOT/C++ 和 Python 脚本执行
- 多行脚本编辑器
- 命令行界面
- 加载/保存外部脚本
- 输出捕获面板
- **新功能**:高级拟合功能
- 多种预定义拟合函数
- 自定义函数支持
- 用于高斯拟合的 RooFit 集成
- 显示带不确定度的拟合参数
- **新功能**:ROOT 文件浏览器对话框
- 交互式对象树视图
- 多选支持
- TTree 分支信息
- 双击绘图
- **改进**:全面的错误处理
- **改进**:用于故障排除的调试输出
- **修复**:将 Form() 用法替换为 snprintf() 以提高稳定性
- **修复**:TTree 绘图中的分支选择
- **修复**:内存泄漏和段错误
- **文档**:添加了全面的文档
### v2.2
- 带实时格式化的 CSV 预览对话框
- 列选择器改进
- 从 TBrowser 拖放
- 多画布管理
- 多种格式导出
### v2.1
- ROOT 文件支持
- TTree 基本处理
- 直方图和图表加载
- 初始 GUI 框架
### v2.0
- 使用现代 C++17 完全重写
- ROOT 6.26+ 支持
- 提高稳定性
### v1.0 (初始版本)
- 基本 CSV 文件支持
- 简单的绘图功能
- 列选择
- 画布管理
### 计划功能 (v2.4)
- 将 ROOT 分析完全集成到主 GUI 中
- 脚本编辑器语法高亮
- ROOT 命令自动补全
- 图表模板和样式管理器
- 批处理模式
- 额外的文件格式支持 (HDF5, Parquet)
- 单元测试框架
- 性能分析工具
**最后更新**:2026年2月18日
**版本**:2.3
**维护者**:Siddharth Parashari
## 快速入门指南
**用于 CSV 分析:**
1. 启动:`./AdvancedPlotGUIApp`
2. 点击 "Browse" → 选择 CSV
3. 配置分隔符 → 点击 "Load"
4. 点击 "Add Plot" → 选择列 → OK
5. 点击 "Create Plots"
**用于 ROOT 文件分析:**
1. 启动:`./AdvancedPlotGUIApp`
2. 点击 "Browse" → 选择 .root 文件
3. 在浏览器中选择对象 → "Load Selected"
4. 自动创建图表
**用于高级 TTree 过滤:**
1. 启动条目选择器:使用 `Use ROOT Analysis` 按钮加载 ROOT 文件
2. 选择树 → 选择分支
3. 输入切割公式 → "Add to Chain"
4. 为多个切割重复此操作
5. "Plot with Chain Cuts" → 查看结果
6. "Save Chain" 以保留工作流
**用于基于脚本的分析:**
1. 启动主 GUI
2. 选择 "ROOT/C++" 或 "Python" 语言
3. 在命令框(底部)中输入命令 + Enter
4. 或在编辑器中编写多行脚本 + "Run Script"
5. 使用 `gDirectory->GetFile()` 访问已加载的文件
**需要帮助?**
- 参见 `RootEntrySelector/docs/` 获取详细教程
- 检查控制台输出是否有错误消息
- 有关脚本问题,请查阅 `SCRIPT_TROUBLESHOOTING_GUIDE.txt`
- 在 GitHub 上开启 issue,包含:
- 您正在尝试做什么
- 您看到的错误
- 控制台输出
- ROOT 版本:`root --version`
标签:Bash脚本, C++, CSV导入, GUI, HEP软件, ROOT, TCut语法, TTree筛选, 出版级图表, 图形用户界面, 拖拽功能, 数据分析工具, 数据擦除, 文件浏览器, 直方图, 科学绘图, 脚本执行, 跨平台桌面应用, 过滤器链, 逆向工具, 高能物理