SANS试点
用于SANS(小角度中子散射)数据分析的MCP服务器,由 SANS装配工.
工具
| 工具 | 说明 |
|---|---|
describe-possibilities | 描述服务器功能 |
list-sans-models | 列出可用于拟合的sasmodels(例如圆柱体、球体、椭球体) |
get-model-parameters | 获取模型的参数规格(值、最小值、最大值、变化、描述) |
list-structure-factors | 列出粒子间相互作用的可用结构因子 |
get-structure-factor-parameters | 获取a的参数form_factor@structure_factor产品型号 |
get-polydisperse-parameters | 获取支持模型多分散性的参数 |
get-polydispersity-options | 获取可用的PD分布类型(高斯、对数正态等)和默认值 |
list-uploaded-files | 列出上传的数据文件(可选:按扩展名过滤,限制) |
list-analyses | 列出带参数的可用分析类型 |
run-analysis | 运行分析,返回拟合结果并绘制 |
典型工作流程
- 发现模型:呼叫
list-sans-models查看可用的sasmodels - 获取参数:呼叫
get-model-parameters使用模型名称查看默认参数 - 查找数据:呼叫
list-uploaded-files查找CSV数据文件 - 跑步合身:呼叫
run-analysis具有分析名称、输入文件、模型和参数覆盖
示例:装配气缸模型
{
"name": "fitting-with-custom-model",
"parameters": {
"input_csv": "simulated_sans_data.csv",
"model": "cylinder",
"engine": "bumps",
"method": "amoeba",
"param_overrides": {
"radius": { "value": 20, "min": 1, "max": 200, "vary": true },
"length": { "value": 400, "min": 10, "max": 4000, "vary": true },
"scale": { "value": 1.0, "min": 0.0, "max": 10, "vary": true },
"background": { "value": 0.001, "min": 0, "max": 1, "vary": true }
}
}
}示例:多分散性拟合
使用 get-polydisperse-parameters 要查看哪些参数支持大小分布,请添加 polydispersity 配置:
{
"name": "fitting-with-custom-model",
"parameters": {
"input_csv": "simulated_sans_data.csv",
"model": "cylinder",
"engine": "bumps",
"method": "amoeba",
"param_overrides": {
"radius": { "value": 20, "min": 1, "max": 200, "vary": true },
"length": { "value": 400, "min": 10, "max": 4000, "vary": true },
"scale": { "value": 1.0, "vary": true },
"background": { "value": 0.001, "vary": true }
},
"polydispersity": {
"radius": {
"pd_width": 0.1,
"pd_type": "gaussian",
"pd_n": 10,
"vary": false
}
}
}
}多分散性选项:
pd_width:相对宽度(0.1=10%多分散性)pd_type:分布形状(gaussian,lognormal,schulz,rectangle,boltzmann)pd_n:正交点的数量(越高=越准确,越慢)pd_nsigma:要包括的标准偏差数量vary:优化过程中是否适合pd_width
示例:与结构因素相匹配
结构因子模拟了集中系统中粒子间的相互作用。使用 list-structure-factors 查看可用选项:
hardsphere-硬球(Percus-Yevick闭合)hayter_msa-Hayter Penfold MSA用于带电球体squarewell-方形井潜力stickyhardsphere-粘性硬球(巴克斯特模型)
{
"name": "fitting-with-custom-model",
"parameters": {
"input_csv": "simulated_sans_data.csv",
"model": "sphere",
"engine": "bumps",
"method": "amoeba",
"param_overrides": {
"radius": { "value": 50, "min": 10, "max": 100, "vary": true },
"scale": { "value": 0.01, "vary": true },
"background": { "value": 0.001, "vary": true }
},
"structure_factor": "hardsphere",
"structure_factor_params": {
"volfraction": { "value": 0.2, "min": 0.0, "max": 0.6, "vary": true },
"radius_effective": { "value": 50, "min": 10, "max": 100, "vary": true }
}
}
}结构因子选项:
structure_factor:结构因子的名称structure_factor_params:参数覆盖(体积分数、半径有效、hayter_msa收费)radius_effective_mode:"unconstrained"(默认)或"link_radius"约束半径有效等于形状因子半径
认证
集 API_TOKEN 启用承载令牌身份验证的环境变量:
API_TOKEN="your-secret-token" sans-pilot客户必须包括 Authorization: Bearer 头球如果 API_TOKEN 未设置,身份验证已禁用。
分析
分析是自动发现的 src/sans_pilot/analyses/每个分析模块导出:
ANALYSIS_DESCRIPTION--显示为list-analysesrun(**parameters)--被召唤run-analysis
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
UPLOAD_DIR | /uploads | 上传数据文件目录 |
SANS_PILOT_RUNS_DIR | /tmp/sans-pilot-runs | 分析运行的输出目录 |
API_TOKEN | (none) | API身份验证的承载令牌 |
在本地运行
cd sans-pilot
python -m venv .venv
source .venv/bin/activate
pip install -e .
sans-pilot码头工人
docker build -f Dockerfile.dev -t sans-pilot .
docker run -p 8001:8001 -e API_TOKEN="your-token" sans-pilot测试
将本地数据文件装载到 /uploads:
docker run -p 8001:8001 \
-v /path/to/simulated_sans_data.csv:/uploads/simulated_sans_data.csv \
sans-pilot运行测试脚本以验证所有MCP端点:
cd test
./test_endpoints.sh该脚本在运行中的服务器上测试所有工具 http://localhost:8001。如果需要,请传递其他URL作为参数:
./test_endpoints.sh http://localhost:9000备注
未来改进计划:
- 为了安全和隔离,在单独的容器中运行脚本
- 为所有工具添加输入参数验证
