本文整理汇总了C++中Flavour::DeltaM方法的典型用法代码示例。如果您正苦于以下问题:C++ Flavour::DeltaM方法的具体用法?C++ Flavour::DeltaM怎么用?C++ Flavour::DeltaM使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Flavour
的用法示例。
在下文中一共展示了Flavour::DeltaM方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Select
Hadron_Decay_Channel* Mixing_Handler::Select(Particle* decayer,
const Hadron_Decay_Table& ot) const
{
Flavour flav = decayer->Flav();
string tag = flav.IsAnti() ? flav.Bar().IDName() : flav.IDName();
if(m_model("Interference_"+tag,0.0)!=0.0) {
double lifetime = DetermineMixingTime(decayer,false);
bool anti_at_t0 = decayer->Flav().IsAnti();
if(decayer->ProductionBlob()->Type()==btp::Hadron_Mixing) anti_at_t0 = !anti_at_t0;
if(lifetime!=0.0) {
Hadron_Decay_Table table(ot);
double cos_term = cos(flav.DeltaM()/rpa->hBar()*lifetime);
double sin_term = sin(flav.DeltaM()/rpa->hBar()*lifetime);
double GX, GR, asymmetry, a;
for(size_t i=0; i<table.size(); i++) {
Hadron_Decay_Channel* hdc = table.at(i);
if(hdc->CPAsymmetryS()==0.0 && hdc->CPAsymmetryC()==0.0) continue;
if(flav.DeltaGamma()==0.0) {
asymmetry = hdc->CPAsymmetryS()*sin_term - hdc->CPAsymmetryC()*cos_term;
}
else {
Complex lambda = hdc->CPAsymmetryLambda();
double l2 = sqr(abs(lambda));
double dG = flav.DeltaGamma()/rpa->hBar();
asymmetry = (2.0*lambda.imag()/(1.0+l2)*sin_term - (1.0-l2)/(1.0+l2)*cos_term)/
(cosh(dG*lifetime/2.0) - 2.0*lambda.real()/(1.0+l2)*sinh(dG*lifetime/2.0));
}
GX = hdc->Width(); // partial width of this DC
GR = table.TotalWidth()-GX; // partial width of other DCs
if(asymmetry>0.0)
a = -1.0*GR/2.0/GX/asymmetry+sqrt(sqr(GR)/4.0/sqr(GX)/sqr(asymmetry)+(GR+GX)/GX);
else if(asymmetry<0.0)
a = -1.0*GR/2.0/GX/asymmetry-sqrt(sqr(GR)/4.0/sqr(GX)/sqr(asymmetry)+(GR+GX)/GX);
else
a = 0.0;
if(anti_at_t0) table.UpdateWidth(hdc, (1.0+a)*GX);
else table.UpdateWidth(hdc, (1.0-a)*GX);
}
return table.Select();
}
}
return ot.Select();
}