修改衰变
学习目标
- 学习如何自定义生成的衰变
- 学习如何修改使用的衰变道
- 学习如何修改/移除生成器级别的切割
添加衰变道
为了使我们的衰变模型更接近现实,我们可以加入已知的共振态。例如,除了完全依赖相空间,我们可以加入显著的$\( \phi\to K^{+}K^{-} \)共振态。在Dst_D0pi,KKmumu=DecProdCut.dec
衰变文件中,我们可以在\( D^0 \)的衰变道中添加另一行:
Decay MyD0
0.5 K+ K- mu+ mu- PHSP;
0.5 phi mu+ mu- PHSP;
Enddecay
CDecay MyantiD0
这会触发 EvtGen 在 50%的情况下产生\( \phi \)共振态,随后\( \phi \)会衰变。然而,我们没有告诉EvtGen\( \phi \)应该只衰变为\( K^+K^- \),因此它会从所有已知的衰变中随机选择。我们不修改通用的phi
,而是采用与\( D^0 \)衰变相同的技巧:
Alias MyPhi phi
ChargeConj MyPhi MyPhi
Decay MyD0
0.25 K+ K- mu+ mu- PHSP;
0.75 MyPhi mu+ mu- PHSP;
Enddecay
CDecay MyantiD0
Decay MyPhi
1.000 K+ K- VSS;
Enddecay
Gen/DecFiles
目录中重新运行make
。用 Gauss尝试修改后的衰变文件,你应该会在\( m(K^+K^-) \)不变质量分布中看到一个大的峰值。不要忘记在运行命令中更改$DECFILESROOT
,使其指向你当前的DecFile安装!此外,你可能需要更改27175000.py
中的ToolSvc().EvtGenDecay.UserDecayFile
行,使其指向你的DecFile 安装!
生成器级别的切割
探测器模拟计算成本高昂,而事件生成相对较快。在生成器级别进行切割可以节省大量的CPU和磁盘空间(这意味着你几乎可以免费获得更多真正有用的事件)。在生成器级别,你只能对分辨率前的量进行切割,所以通常你希望生成器切割对选定事件的效率是100%(在极小范围内)。默认示例是立即移除衰变产物远在 LHCb接受度之外的事件。
这在"DaugthersInLHCb"中实现,在昵称中也称为"DecProdCut"。这要求每个"稳定带电粒子"都在LHCb 接受度周围的一个宽松区域内(Theta在 10-400毫弧度)。
切割工具需要用 C++ 实现,并位于Gen/GenCuts
包中。
移除生成器切割
生成器切割的绝对效率可以从相应的网站或生成的GeneratorLog.xml
文件中获得,该文件包含:
<efficiency name = "generator level cut">
<after> 5 </after>
<before> 27 </before>
<value> 0.18519 </value>
<error> 0.074757 </error>
</efficiency>
- 修改 DecFile 并重新编译包
- 覆盖最初由
<event-type>.py
配置的 python 配置
第二种选择通常更容易,在目前使用的示例中只需要添加一行配置:
Generation().SignalPlain.CutTool = ""
27175000.py
被引入后包含(例如在Gauss-Job.py
中)。
你可以确信这会改变观察到的分布,并导致生成器级别切割效率达到100%。在 EOS上可以找到一个大样本:root://eosuser.cern.ch//eos/lhcb/wg/dpa/wp7/Run3SK/simulation/Gauss-27175000-50000ev-resonance.xgen
(包含上面添加的额外共振态)。
查看领头粒子的赝快度分布。这说明了
Gauss 中信号衰变生成的另一个默认行为:如果选定的信号粒子沿 z轴的动量为负,则生成事件的 z 轴会反转。
修改切割工具
如果你需要修改切割工具,通常可以在多个选项中选择,这些选项的复杂度和投入生产的时间逐渐增加:
- 如有可能,配置
Gen/GenCuts
中现有的切割工具。 - 在
LoKi::GenCutTool
中使用GenParticle
的LoKi
函数子(以G
开头)。 - 对于真正特殊的情况,最后的办法是:编写自己的
IGenCutTool
接口的C++ 实现。
LoKi::GenCutTool
风格的工具是一个很好的解决方案,当你需要施加超出DaughtersInLHCb
提供的要求时,例如\( D^0 \)的最小横动量。
Sim11中的LoKi
Loki 在 up to 并包括 Sim10 的 DecFiles 中工作得很好,但是在 Sim11 中Loki 将不再被支持!当 Sim11 发布时,请注意新的文档!
对于本地测试,可以通过覆盖27175000.py
设置的默认切割工具来轻松实现:
from Configurables import LoKi__GenCutTool
from Gauss.Configuration import *
Generation().SignalPlain.CutTool = "LoKi::GenCutTool/TightCut"
from Configurables import LoKi__GenCutTool
gen=Generation()
gen.SignalPlain.addTool ( LoKi__GenCutTool , 'TightCut' )
tightCut = Generation().SignalPlain.TightCut
tightCut.Decay = '^[D*(2010)+ ==> ^( D0 ==> ^K+ ^K- ^mu+ ^mu- ) pi+]CC'
tightCut.Preambulo += [
'from GaudiKernel.SystemOfUnits import GeV',
'inAcc = in_range ( 0.005 , GTHETA , 0.400 )',
'goodD0 = ( GPT > 2.0 * GeV )',
]
tightCut.Cuts = {
'[D0]cc': 'goodD0',
'[K+]cc': 'inAcc',
'[mu+]cc': 'inAcc'
}
root://eosuser.cern.ch//eos/lhcb/wg/dpa/wp7/Run3SK/simulation/Gauss-27175000-10000ev-gencuttools.xgen
找到。
提示
关于这种情况的具体示例,下面提供了 27175000.py
文件的 diff
对比结果。
@@ -15,7 +18,33 @@
from Configurables import EvtGenDecay
ToolSvc().addTool( EvtGenDecay )
ToolSvc().EvtGenDecay.UserDecayFile = "$DECFILESROOT/dkfiles/Dst_D0pi,KKmumu=DecProdCut.dec"
-Generation(genAlgName).SignalPlain.CutTool = "DaughtersInLHCb"
+# Generation(genAlgName).SignalPlain.CutTool = ""
+
+###
+
+from Configurables import LoKi__GenCutTool
+from Gauss.Configuration import *
+Generation(genAlgName).SignalPlain.CutTool = "LoKi::GenCutTool/TightCut"
+
+from Configurables import LoKi__GenCutTool
+gen=Generation(genAlgName)
+gen.SignalPlain.addTool ( LoKi__GenCutTool , 'TightCut' )
+
+tightCut = Generation(genAlgName).SignalPlain.TightCut
+tightCut.Decay = '^[D*(2010)+ ==> ^( D0 ==> ^K+ ^K- ^mu+ ^mu- ) pi+]CC'
+tightCut.Preambulo += [
+ 'from GaudiKernel.SystemOfUnits import GeV',
+ 'inAcc = in_range ( 0.005 , GTHETA , 0.400 )',
+ 'goodD0 = ( GPT > 2.0 * GeV )',
+]
+tightCut.Cuts = {
+ '[D0]cc': 'goodD0',
+ '[K+]cc': 'inAcc',
+ '[mu+]cc': 'inAcc'
+}
+
+###
+
Generation(genAlgName).SignalPlain.SignalPIDList = [ 413,-413 ]
# Ad-hoc particle gun code
你可能还会注意到事件产生的速度略有减慢:默认情况下,一个未能通过生成器切割的事件(在Pythia 和 EvtGen完成后应用)会触发模拟的整个生成阶段的重置。因此,非常严格的生成器级别切割,加上在最小偏置事件中很少出现的信号粒子,可能导致生成阶段比探测器响应的模拟花费更长的时间(你可能需要重新考虑你的事件生成策略)。关于可以应用哪种切割,你可以查看GeneratorLevelTightCuts定义。
修改和新版本
由于切割工具要在 DecFiles中配置,它们构成了事件类型本身的一个组成部分。 因此,任何改变所产生事件的修改通常需要发布一个新的DecFile,包括一个新的事件类型或一个新的模拟子版本,以便事件最终进入不同的记录位置。