用于汇总事件数据的python库
alphatwirl的Python项目详细描述
用于将事件数据汇总为多变量分类数据的python库
说明
alphatwirl是一个python库,它将事件数据作为数据帧汇总到多变量分类数据中。输入到alphatwirl的事件数据是一个事件具有一个条目(或行)的数据:例如,根目录中的数据//home.cern/topics/大型强子对撞机" rel="nofollow">大型强子对撞机在欧洲核子研究中心进行实验。事件数据通常太大,无法加载到内存中,因为它们的条目与事件一样多。多元分类数据是alphatwirl的输出,每一个分类有一行。它们通常小到可以加载到内存中,因为它们只有与类别一样多的行。例如,用户可以将它们作为数据帧导入r和pandas,后者通常将所有数据加载到内存中,并且可以使用一组丰富的数据操作av在R和熊猫中可用。
快速启动
- Jupyter笔记本:alphatwirl快速入门
CHEP 2018年
- Tai Sakuma,"AlphaTwirl:一个用于将事件数据汇总到 多维分类数据",CHEP 2018,2018年7月9-13日 保加利亚索非亚,(indico)
功能
输入格式
- 事件数据:AlphaTwirl的输入数据一般是事件数据
- 事件数据是一个事件有一个条目(行)的任何数据。
- 根树中的数据通常是事件数据
- 例如,一个质子-质子碰撞事件的一个条目
- 事件数据通常很大,因为它们具有与
事件
- 例如,它们通常存储在服务器的许多文件中 机器或专用存储系统
- 根目录树:AlphaTwirl的主要输入格式
- 扁平树:只有基元的根树 类型,如int和float以及这些类型的数组。
- 使用额外的代码访问每个类,还可以读取 具有持久对象的树
- 用户可以编写模块以支持其他格式
输出格式
- 多元分类数据:AlphaTwirl的输出数据
是多元分类数据
- 它们通常很小,因为它们只有和类别一样多的条目。
- 通常小到可以作为文本文件存储在笔记本电脑中。
- 固定宽度格式:具有固定宽度格式的文本文件
主要用作输出格式
process htbin njetbin minChi n
QCD 400 2 0 8.15e+05
QCD 400 2 0.05 3.49e+05
QCD 400 2 0.1 1.18e+05
QCD 400 2 0.15 3.78e+04
⋮
TTJets 1200 6 1.45 0.00
TTJets 1200 6 1.5 0.00
- 有计划支持羽毛
- 用户可以编写模块以支持其他格式
分离应用联合收割机策略
- AlphaTwirl的基本思想是使用拆分应用联合收割机
关于事件数据的策略。
- 按类别将事件数据分组,应用
对每组数据进行函数运算,并将结果合并为
多元分类数据表。
- 在此策略中可以创建直方图将数据拆分为
Bins,计算每个Bin中的条目数,并将
结果作为表格。
- 用alphatwirl总结事件是创建
直方图。
键和值
- 键:按键定义类别
- 值:值在定义的每个组中汇总
类别
- 键和值是事件对象的属性,它们是
- 存储在输入文件中
- 或由scribllers创建
TaBLE配置
- 表可以由python字典列表配置。
- 下面的示例代码配置了五个表
htbin=Binning(boundaries=(0,200,400,800))njetbin=Binning(boundaries=(1,2,3,4,5))tblcfg=[dict(keyAttrNames=('mht40',),binnings=(Round(10,0),),keyOutColumnNames=('mht',)),dict(keyAttrNames=('ht40',‘mht40'),binnings=(htbin,Round(10,0)),keyOutColumnNames=('ht','mht')),dict(keyAttrNames=('ht40','nJet40',‘mht40'),binnings=(htbin,njetbin,Round(10,0)),keyOutColumnNames=('ht','njet','mht')),dict(keyAttrNames=('ht40',‘jet_pt'),binnings=(htbin,RoundLog(0.1,100)),keyIndices=(None,0),keyOutColumnNames=('ht','jet_pt')),dict(keyAttrNames=('ht40',‘jet_pt'),binnings=(htbin,RoundLog(0.1,100)),keyIndices=(None,‘*'),keyOutColumnNames=('ht','jet_pt')),]
- 更复杂的例子
dict(keyAttrNames=('ieta','iphi','depth','QIE10_index'),keyIndices=('(*)','\\1','\\1','\\1'),binnings=(echo,echo,echo,echo),valAttrNames=('QIE10_energy',),valIndices=('\\1',),keyOutColumnNames=('ieta','iphi','depth','idxQIE10'),valOutColumnNames=('energy',),summaryClass=alphatwirl.Summary.Sum)
指数
- 变量是标量或数组。索引指定数组的元素
- 索引可以灵活配置
- 一个简单的例子:
dict(keyattrnames=('ht40','jet_pt'),keyindexs=(none,0),)
ht40
是标量;索引是none
。jet_pt
是一个数组;0
指定jet_pt的第一个元素
- 包括:
dict(keyattrnames=("ht40","jet_pt"),keyindexs=(none,"*"),")
'*'
表示所有元素。所有对的ht40
和
jet_pt
- 所有组合:
dict(keyattrnames=('jet_pt','muon_pt'),keyindexs=('*''*),)
jet_pt
和muon_pt
的所有组合
- 背面参考:
dict(keyattrnames=('jet_pt','jet_eta'),keyindexs=('(*)','\\1'),)
具有相同索引的成对jet_pt
和jet_eta
。
'(*)'
中的括号表示要记住索引。
'\\1'
引用第一个括号中的索引。 - 一个更复杂的例子:
dict(keyattrnames=('jet_pt','jet_eta','muon_pt','muon_eta'),keyindexs=('(*)','\\1','(*)','\\2'),)
宾宁斯
- 实现了四个binnigs类
- 装箱:装箱边界由用户手动指定
binning(边界=(0,200,400,800))
- 圆形:相等的箱子宽度
圆形(10,0)
10
是箱子宽度,0
是一个边界。A的下边缘
包括垃圾箱。上边缘属于下一个箱子。 - 圆木:在对数中等于箱子宽度
圆木(0.1100)
- 回声:值本身
回声(0.1100)
- 用户可以编写自己的自定义binning类
涂鸦者
- 如果表配置或事件选择所需的变量不在
在输入文件中,用户可以编写scribblers来动态创建它们。
- 存储在输入文件中的变量和
scribblers可以用作键和值,方法与
表配置和事件选择
事件选择
- 事件选择的条件可以由嵌套元组和字典指定。
dict(All=('ev : ev.ht[0] >= 400','ev : ev.mht[0] >= 200',dict(Any=('ev : ev.nJet[0] == 1',dict(All=('ev : ev.nJet[0] >= 2','ev : ev.minChi[0] >= 0.7’))))))
- all和any的嵌套组合
- 全部:需要满足所有条件
- 任何:至少需要满足其中一个条件
- 用户可以编写自己的all和any实现来添加
功能,例如,计算满足
每个条件
依赖注入
- alphatwirl中的类通常在抽象类上操作(在
python,抽象类实际上不需要存在。鸭子打字
改为)。
- 大多数操作的特定实现在运行时确定
时间:输入格式、输出格式、并发方法、事件
选择,对象选择,分类,事件摘要
方法,摘要收集方法,交付方法,甚至
进度条。
- 此外,每个特定的实现通常不会
也取决于框架。事实上,同样的事件
选择代码可用于Heppy。
- 具体实现由配置指定。
按地址快速分支访问
多处理
- 多处理
可用于同时处理事件
- 进度条在终端屏幕上平行增长,指示每个进程的进度。
25.10% :::::::::: | 753 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
30.47% :::::::::::: | 914 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
29.30% ::::::::::: | 879 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
85.40% :::::::::::::::::::::::::::::::::: | 854 / 1000 |: WJetsToLNu_HT1200to2500_madgraph
27.57% ::::::::::: | 827 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
25.47% :::::::::: | 764 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
79.60% ::::::::::::::::::::::::::::::: | 796 / 1000 |: WJetsToLNu_HT2500toInf_madgraphM
25.50% :::::::::: | 765 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
批处理系统
- 也可以使用批处理系统而不是多处理系统
- 目前,接口
实现了htcondor。
- 用户可以编写模块以使用其他批处理系统。
- 当作业在批处理系统中运行时,主进程是
在前台运行,监视作业的进度,以及
在作业完成时收集结果。
- 失败的作业将自动重新提交。
- 作业可以按输入文件和事件的数量进行拆分。
- 一个输入文件可以分成多个作业
- 一个作业可以包含多个输入文件
- 它们通常很小,因为它们只有和类别一样多的条目。
- 通常小到可以作为文本文件存储在笔记本电脑中。
process htbin njetbin minChi n
QCD 400 2 0 8.15e+05
QCD 400 2 0.05 3.49e+05
QCD 400 2 0.1 1.18e+05
QCD 400 2 0.15 3.78e+04
⋮
TTJets 1200 6 1.45 0.00
TTJets 1200 6 1.5 0.00
- AlphaTwirl的基本思想是使用拆分应用联合收割机
关于事件数据的策略。
- 按类别将事件数据分组,应用 对每组数据进行函数运算,并将结果合并为 多元分类数据表。
- 在此策略中可以创建直方图将数据拆分为 Bins,计算每个Bin中的条目数,并将 结果作为表格。
- 用alphatwirl总结事件是创建 直方图。
键和值
- 键:按键定义类别
- 值:值在定义的每个组中汇总
类别
- 键和值是事件对象的属性,它们是
- 存储在输入文件中
- 或由scribllers创建
TaBLE配置
- 表可以由python字典列表配置。
- 下面的示例代码配置了五个表
htbin=Binning(boundaries=(0,200,400,800))njetbin=Binning(boundaries=(1,2,3,4,5))tblcfg=[dict(keyAttrNames=('mht40',),binnings=(Round(10,0),),keyOutColumnNames=('mht',)),dict(keyAttrNames=('ht40',‘mht40'),binnings=(htbin,Round(10,0)),keyOutColumnNames=('ht','mht')),dict(keyAttrNames=('ht40','nJet40',‘mht40'),binnings=(htbin,njetbin,Round(10,0)),keyOutColumnNames=('ht','njet','mht')),dict(keyAttrNames=('ht40',‘jet_pt'),binnings=(htbin,RoundLog(0.1,100)),keyIndices=(None,0),keyOutColumnNames=('ht','jet_pt')),dict(keyAttrNames=('ht40',‘jet_pt'),binnings=(htbin,RoundLog(0.1,100)),keyIndices=(None,‘*'),keyOutColumnNames=('ht','jet_pt')),]
- 更复杂的例子
dict(keyAttrNames=('ieta','iphi','depth','QIE10_index'),keyIndices=('(*)','\\1','\\1','\\1'),binnings=(echo,echo,echo,echo),valAttrNames=('QIE10_energy',),valIndices=('\\1',),keyOutColumnNames=('ieta','iphi','depth','idxQIE10'),valOutColumnNames=('energy',),summaryClass=alphatwirl.Summary.Sum)
指数
- 变量是标量或数组。索引指定数组的元素
- 索引可以灵活配置
- 一个简单的例子:
dict(keyattrnames=('ht40','jet_pt'),keyindexs=(none,0),)
ht40
是标量;索引是none
。jet_pt
是一个数组;0
指定jet_pt的第一个元素
- 包括:
dict(keyattrnames=("ht40","jet_pt"),keyindexs=(none,"*"),")
'*'
表示所有元素。所有对的ht40
和
jet_pt
- 所有组合:
dict(keyattrnames=('jet_pt','muon_pt'),keyindexs=('*''*),)
jet_pt
和muon_pt
的所有组合
- 背面参考:
dict(keyattrnames=('jet_pt','jet_eta'),keyindexs=('(*)','\\1'),)
具有相同索引的成对jet_pt
和jet_eta
。
'(*)'
中的括号表示要记住索引。
'\\1'
引用第一个括号中的索引。 - 一个更复杂的例子:
dict(keyattrnames=('jet_pt','jet_eta','muon_pt','muon_eta'),keyindexs=('(*)','\\1','(*)','\\2'),)
宾宁斯
- 实现了四个binnigs类
- 装箱:装箱边界由用户手动指定
binning(边界=(0,200,400,800))
- 圆形:相等的箱子宽度
圆形(10,0)
10
是箱子宽度,0
是一个边界。A的下边缘
包括垃圾箱。上边缘属于下一个箱子。 - 圆木:在对数中等于箱子宽度
圆木(0.1100)
- 回声:值本身
回声(0.1100)
- 用户可以编写自己的自定义binning类
涂鸦者
- 如果表配置或事件选择所需的变量不在
在输入文件中,用户可以编写scribblers来动态创建它们。
- 存储在输入文件中的变量和
scribblers可以用作键和值,方法与
表配置和事件选择
事件选择
- 事件选择的条件可以由嵌套元组和字典指定。
dict(All=('ev : ev.ht[0] >= 400','ev : ev.mht[0] >= 200',dict(Any=('ev : ev.nJet[0] == 1',dict(All=('ev : ev.nJet[0] >= 2','ev : ev.minChi[0] >= 0.7’))))))
- all和any的嵌套组合
- 全部:需要满足所有条件
- 任何:至少需要满足其中一个条件
- 用户可以编写自己的all和any实现来添加
功能,例如,计算满足
每个条件
依赖注入
- alphatwirl中的类通常在抽象类上操作(在
python,抽象类实际上不需要存在。鸭子打字
改为)。
- 大多数操作的特定实现在运行时确定
时间:输入格式、输出格式、并发方法、事件
选择,对象选择,分类,事件摘要
方法,摘要收集方法,交付方法,甚至
进度条。
- 此外,每个特定的实现通常不会
也取决于框架。事实上,同样的事件
选择代码可用于Heppy。
- 具体实现由配置指定。
按地址快速分支访问
多处理
- 多处理
可用于同时处理事件
- 进度条在终端屏幕上平行增长,指示每个进程的进度。
25.10% :::::::::: | 753 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
30.47% :::::::::::: | 914 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
29.30% ::::::::::: | 879 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
85.40% :::::::::::::::::::::::::::::::::: | 854 / 1000 |: WJetsToLNu_HT1200to2500_madgraph
27.57% ::::::::::: | 827 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
25.47% :::::::::: | 764 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
79.60% ::::::::::::::::::::::::::::::: | 796 / 1000 |: WJetsToLNu_HT2500toInf_madgraphM
25.50% :::::::::: | 765 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
批处理系统
- 也可以使用批处理系统而不是多处理系统
- 目前,接口
实现了htcondor。
- 用户可以编写模块以使用其他批处理系统。
- 当作业在批处理系统中运行时,主进程是
在前台运行,监视作业的进度,以及
在作业完成时收集结果。
- 失败的作业将自动重新提交。
- 作业可以按输入文件和事件的数量进行拆分。
- 一个输入文件可以分成多个作业
- 一个作业可以包含多个输入文件
- 存储在输入文件中
- 或由scribllers创建
- 下面的示例代码配置了五个表
- 一个简单的例子:
dict(keyattrnames=('ht40','jet_pt'),keyindexs=(none,0),)
ht40
是标量;索引是none
。jet_pt
是一个数组;0
指定jet_pt的第一个元素
- 包括:
dict(keyattrnames=("ht40","jet_pt"),keyindexs=(none,"*"),")
'*'
表示所有元素。所有对的ht40
和jet_pt
- 所有组合:
dict(keyattrnames=('jet_pt','muon_pt'),keyindexs=('*''*),)
jet_pt
和muon_pt
的所有组合
- 背面参考:
dict(keyattrnames=('jet_pt','jet_eta'),keyindexs=('(*)','\\1'),)
具有相同索引的成对jet_pt
和jet_eta
。'(*)'
中的括号表示要记住索引。'\\1'
引用第一个括号中的索引。 - 一个更复杂的例子:
dict(keyattrnames=('jet_pt','jet_eta','muon_pt','muon_eta'),keyindexs=('(*)','\\1','(*)','\\2'),)
- 装箱:装箱边界由用户手动指定
binning(边界=(0,200,400,800))
- 圆形:相等的箱子宽度
圆形(10,0)
10
是箱子宽度,0
是一个边界。A的下边缘 包括垃圾箱。上边缘属于下一个箱子。 - 圆木:在对数中等于箱子宽度
圆木(0.1100) - 回声:值本身
回声(0.1100)
- 如果表配置或事件选择所需的变量不在 在输入文件中,用户可以编写scribblers来动态创建它们。
- 存储在输入文件中的变量和 scribblers可以用作键和值,方法与 表配置和事件选择
事件选择
- 事件选择的条件可以由嵌套元组和字典指定。
dict(All=('ev : ev.ht[0] >= 400','ev : ev.mht[0] >= 200',dict(Any=('ev : ev.nJet[0] == 1',dict(All=('ev : ev.nJet[0] >= 2','ev : ev.minChi[0] >= 0.7’))))))
- all和any的嵌套组合
- 全部:需要满足所有条件
- 任何:至少需要满足其中一个条件
- 用户可以编写自己的all和any实现来添加
功能,例如,计算满足
每个条件
依赖注入
- alphatwirl中的类通常在抽象类上操作(在
python,抽象类实际上不需要存在。鸭子打字
改为)。
- 大多数操作的特定实现在运行时确定
时间:输入格式、输出格式、并发方法、事件
选择,对象选择,分类,事件摘要
方法,摘要收集方法,交付方法,甚至
进度条。
- 此外,每个特定的实现通常不会
也取决于框架。事实上,同样的事件
选择代码可用于Heppy。
- 具体实现由配置指定。
按地址快速分支访问
多处理
- 多处理
可用于同时处理事件
- 进度条在终端屏幕上平行增长,指示每个进程的进度。
25.10% :::::::::: | 753 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
30.47% :::::::::::: | 914 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
29.30% ::::::::::: | 879 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
85.40% :::::::::::::::::::::::::::::::::: | 854 / 1000 |: WJetsToLNu_HT1200to2500_madgraph
27.57% ::::::::::: | 827 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
25.47% :::::::::: | 764 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
79.60% ::::::::::::::::::::::::::::::: | 796 / 1000 |: WJetsToLNu_HT2500toInf_madgraphM
25.50% :::::::::: | 765 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
批处理系统
- 也可以使用批处理系统而不是多处理系统
- 目前,接口
实现了htcondor。
- 用户可以编写模块以使用其他批处理系统。
- 当作业在批处理系统中运行时,主进程是
在前台运行,监视作业的进度,以及
在作业完成时收集结果。
- 失败的作业将自动重新提交。
- 作业可以按输入文件和事件的数量进行拆分。
- 一个输入文件可以分成多个作业
- 一个作业可以包含多个输入文件
- 全部:需要满足所有条件
- 任何:至少需要满足其中一个条件
- 此外,每个特定的实现通常不会 也取决于框架。事实上,同样的事件 选择代码可用于Heppy。
- 多处理 可用于同时处理事件
- 进度条在终端屏幕上平行增长,指示每个进程的进度。
25.10% :::::::::: | 753 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
30.47% :::::::::::: | 914 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
29.30% ::::::::::: | 879 / 3000 |: WJetsToLNu_HT1200to2500_madgraph
85.40% :::::::::::::::::::::::::::::::::: | 854 / 1000 |: WJetsToLNu_HT1200to2500_madgraph
27.57% ::::::::::: | 827 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
25.47% :::::::::: | 764 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
79.60% ::::::::::::::::::::::::::::::: | 796 / 1000 |: WJetsToLNu_HT2500toInf_madgraphM
25.50% :::::::::: | 765 / 3000 |: WJetsToLNu_HT2500toInf_madgraphM
批处理系统
- 也可以使用批处理系统而不是多处理系统
- 目前,接口
实现了htcondor。
- 用户可以编写模块以使用其他批处理系统。
- 当作业在批处理系统中运行时,主进程是
在前台运行,监视作业的进度,以及
在作业完成时收集结果。
- 失败的作业将自动重新提交。
- 作业可以按输入文件和事件的数量进行拆分。
- 一个输入文件可以分成多个作业
- 一个作业可以包含多个输入文件
- 一个输入文件可以分成多个作业
- 一个作业可以包含多个输入文件