Page MenuHomeHEPForge

No OneTemporary

diff --git a/src/MatrixElement.cc b/src/MatrixElement.cc
index 478ae85..1cb9f03 100644
--- a/src/MatrixElement.cc
+++ b/src/MatrixElement.cc
@@ -1,1512 +1,1523 @@
/**
* \authors The HEJ collaboration (see AUTHORS for details)
* \date 2019
* \copyright GPLv2 or later
*/
#include "HEJ/MatrixElement.hh"
#include <algorithm>
#include <assert.h>
#include <limits>
#include <math.h>
#include <stddef.h>
#include <unordered_map>
#include <utility>
#include "CLHEP/Vector/LorentzVector.h"
#include "HEJ/Constants.hh"
#include "HEJ/Wjets.hh"
#include "HEJ/Hjets.hh"
#include "HEJ/jets.hh"
#include "HEJ/PDG_codes.hh"
#include "HEJ/event_types.hh"
#include "HEJ/Event.hh"
#include "HEJ/exceptions.hh"
#include "HEJ/Particle.hh"
#include "HEJ/utility.hh"
namespace HEJ{
double MatrixElement::omega0(
double alpha_s, double mur,
fastjet::PseudoJet const & q_j
) const {
const double lambda = param_.regulator_lambda;
const double result = - alpha_s*N_C/M_PI*log(q_j.perp2()/(lambda*lambda));
if(! param_.log_correction) return result;
// use alpha_s(sqrt(q_j*lambda)), evolved to mur
return (
1. + alpha_s/(4.*M_PI)*beta0*log(mur*mur/(q_j.perp()*lambda))
)*result;
}
Weights MatrixElement::operator()(Event const & event) const {
return tree(event)*virtual_corrections(event);
}
Weights MatrixElement::tree(Event const & event) const {
return tree_param(event)*tree_kin(event);
}
Weights MatrixElement::tree_param(Event const & event) const {
if(! is_resummable(event.type())) {
return Weights{0., std::vector<double>(event.variations().size(), 0.)};
}
Weights result;
// only compute once for each renormalisation scale
std::unordered_map<double, double> known;
result.central = tree_param(event, event.central().mur);
known.emplace(event.central().mur, result.central);
for(auto const & var: event.variations()) {
const auto ME_it = known.find(var.mur);
if(ME_it == end(known)) {
const double wt = tree_param(event, var.mur);
result.variations.emplace_back(wt);
known.emplace(var.mur, wt);
}
else {
result.variations.emplace_back(ME_it->second);
}
}
return result;
}
Weights MatrixElement::virtual_corrections(Event const & event) const {
if(! is_resummable(event.type())) {
return Weights{0., std::vector<double>(event.variations().size(), 0.)};
}
Weights result;
// only compute once for each renormalisation scale
std::unordered_map<double, double> known;
result.central = virtual_corrections(event, event.central().mur);
known.emplace(event.central().mur, result.central);
for(auto const & var: event.variations()) {
const auto ME_it = known.find(var.mur);
if(ME_it == end(known)) {
const double wt = virtual_corrections(event, var.mur);
result.variations.emplace_back(wt);
known.emplace(var.mur, wt);
}
else {
result.variations.emplace_back(ME_it->second);
}
}
return result;
}
double MatrixElement::virtual_corrections_W(
Event const & event,
double mur,
Particle const & WBoson
) const{
auto const & in = event.incoming();
const auto partons = filter_partons(event.outgoing());
fastjet::PseudoJet const & pa = in.front().p;
#ifndef NDEBUG
fastjet::PseudoJet const & pb = in.back().p;
double const norm = (in.front().p + in.back().p).E();
#endif
assert(std::is_sorted(partons.begin(), partons.end(), rapidity_less{}));
assert(partons.size() >= 2);
assert(pa.pz() < pb.pz());
fastjet::PseudoJet q = pa - partons[0].p;
size_t first_idx = 0;
size_t last_idx = partons.size() - 1;
+#ifndef NDEBUG
bool wc = true;
+#endif
bool wqq = false;
// With extremal qqx or unordered gluon outside the extremal
// partons then it is not part of the FKL ladder and does not
// contribute to the virtual corrections. W emitted from the
// most backward leg must be taken into account in t-channel
- if (event.type() == event_type::FKL) {
- if (in[0].type != partons[0].type ){
- q -= WBoson.p;
- wc = false;
- }
- }
- else if (event.type() == event_type::unob) {
+ if (event.type() == event_type::unob) {
q -= partons[1].p;
++first_idx;
if (in[0].type != partons[1].type ){
q -= WBoson.p;
- wc = false;
+#ifndef NDEBUG
+ wc=false;
+#endif
}
}
else if (event.type() == event_type::qqxexb) {
q -= partons[1].p;
++first_idx;
if (abs(partons[0].type) != abs(partons[1].type)){
q -= WBoson.p;
- wc = false;
+#ifndef NDEBUG
+ wc=false;
+#endif
}
}
-
- else if(event.type() == event_type::unof
- || event.type() == event_type::qqxexf){
- --last_idx;
+ else {
+ if(event.type() == event_type::unof
+ || event.type() == event_type::qqxexf){
+ --last_idx;
+ }
+ if (in[0].type != partons[0].type ){
+ q -= WBoson.p;
+#ifndef NDEBUG
+ wc=false;
+#endif
+ }
}
+
size_t first_idx_qqx = last_idx;
size_t last_idx_qqx = last_idx;
//if qqxMid event, virtual correction do not occur between
//qqx pair.
if(event.type() == event_type::qqxmid){
const auto backquark = std::find_if(
begin(partons) + 1, end(partons) - 1 ,
[](Particle const & s){ return (s.type != pid::gluon); }
);
if(backquark == end(partons) || (backquark+1)->type==pid::gluon) return 0;
if(abs(backquark->type) != abs((backquark+1)->type)) {
wqq=true;
+#ifndef NDEBUG
wc=false;
+#endif
}
last_idx = std::distance(begin(partons), backquark);
first_idx_qqx = last_idx+1;
}
double exponent = 0;
const double alpha_s = alpha_s_(mur);
for(size_t j = first_idx; j < last_idx; ++j){
exponent += omega0(alpha_s, mur, q)*(
partons[j+1].rapidity() - partons[j].rapidity()
);
q -=partons[j+1].p;
} // End Loop one
if (last_idx != first_idx_qqx) q -= partons[last_idx+1].p;
if (wqq) q -= WBoson.p;
for(size_t j = first_idx_qqx; j < last_idx_qqx; ++j){
exponent += omega0(alpha_s, mur, q)*(
partons[j+1].rapidity() - partons[j].rapidity()
);
q -= partons[j+1].p;
}
+#ifndef NDEBUG
if (wc) q -= WBoson.p;
-
assert(
nearby(q, -1*pb, norm)
|| is_AWZH_boson(partons.back().type)
|| event.type() == event_type::unof
|| event.type() == event_type::qqxexf
);
+#endif
return exp(exponent);
}
double MatrixElement::virtual_corrections(
Event const & event,
double mur
) const{
auto const & in = event.incoming();
auto const & out = event.outgoing();
fastjet::PseudoJet const & pa = in.front().p;
#ifndef NDEBUG
fastjet::PseudoJet const & pb = in.back().p;
double const norm = (in.front().p + in.back().p).E();
#endif
const auto AWZH_boson = std::find_if(
begin(out), end(out),
[](Particle const & p){ return is_AWZH_boson(p); }
);
if(AWZH_boson != end(out) && abs(AWZH_boson->type) == pid::Wp){
return virtual_corrections_W(event, mur, *AWZH_boson);
}
assert(std::is_sorted(out.begin(), out.end(), rapidity_less{}));
assert(out.size() >= 2);
assert(pa.pz() < pb.pz());
fastjet::PseudoJet q = pa - out[0].p;
size_t first_idx = 0;
size_t last_idx = out.size() - 1;
// if there is a Higgs boson, extremal qqx or unordered gluon
// outside the extremal partons then it is not part of the FKL
// ladder and does not contribute to the virtual corrections
if((out.front().type == pid::Higgs)
|| event.type() == event_type::unob
|| event.type() == event_type::qqxexb){
q -= out[1].p;
++first_idx;
}
if((out.back().type == pid::Higgs)
|| event.type() == event_type::unof
|| event.type() == event_type::qqxexf){
--last_idx;
}
size_t first_idx_qqx = last_idx;
size_t last_idx_qqx = last_idx;
//if qqxMid event, virtual correction do not occur between
//qqx pair.
if(event.type() == event_type::qqxmid){
const auto backquark = std::find_if(
begin(out) + 1, end(out) - 1 ,
[](Particle const & s){ return (s.type != pid::gluon && is_parton(s.type)); }
);
if(backquark == end(out) || (backquark+1)->type==pid::gluon) return 0;
last_idx = std::distance(begin(out), backquark);
first_idx_qqx = last_idx+1;
}
double exponent = 0;
const double alpha_s = alpha_s_(mur);
for(size_t j = first_idx; j < last_idx; ++j){
exponent += omega0(alpha_s, mur, q)*(
out[j+1].rapidity() - out[j].rapidity()
);
q -= out[j+1].p;
}
if (last_idx != first_idx_qqx) q -= out[last_idx+1].p;
for(size_t j = first_idx_qqx; j < last_idx_qqx; ++j){
exponent += omega0(alpha_s, mur, q)*(
out[j+1].rapidity() - out[j].rapidity()
);
q -= out[j+1].p;
}
assert(
nearby(q, -1*pb, norm)
|| out.back().type == pid::Higgs
|| event.type() == event_type::unof
|| event.type() == event_type::qqxexf
);
return exp(exponent);
}
namespace {
//! Lipatov vertex for partons emitted into extremal jets
double C2Lipatov(
CLHEP::HepLorentzVector const & qav,
CLHEP::HepLorentzVector const & qbv,
CLHEP::HepLorentzVector const & p1,
CLHEP::HepLorentzVector const & p2
){
CLHEP::HepLorentzVector temptrans=-(qav+qbv);
CLHEP::HepLorentzVector p5=qav-qbv;
CLHEP::HepLorentzVector CL=temptrans
+ p1*(qav.m2()/p5.dot(p1) + 2.*p5.dot(p2)/p1.dot(p2))
- p2*(qbv.m2()/p5.dot(p2) + 2.*p5.dot(p1)/p1.dot(p2));
return -CL.dot(CL);
}
//! Lipatov vertex with soft subtraction for partons emitted into extremal jets
double C2Lipatovots(
CLHEP::HepLorentzVector const & qav,
CLHEP::HepLorentzVector const & qbv,
CLHEP::HepLorentzVector const & p1,
CLHEP::HepLorentzVector const & p2,
double lambda
) {
double kperp=(qav-qbv).perp();
if (kperp>lambda)
return C2Lipatov(qav, qbv, p1, p2)/(qav.m2()*qbv.m2());
double Cls=(C2Lipatov(qav, qbv, p1, p2)/(qav.m2()*qbv.m2()));
return Cls-4./(kperp*kperp);
}
//! Lipatov vertex
double C2Lipatov( // B
CLHEP::HepLorentzVector const & qav,
CLHEP::HepLorentzVector const & qbv,
CLHEP::HepLorentzVector const & pim,
CLHEP::HepLorentzVector const & pip,
CLHEP::HepLorentzVector const & pom,
CLHEP::HepLorentzVector const & pop
){
CLHEP::HepLorentzVector temptrans=-(qav+qbv);
CLHEP::HepLorentzVector p5=qav-qbv;
CLHEP::HepLorentzVector CL=temptrans
+ qav.m2()*(1./p5.dot(pip)*pip + 1./p5.dot(pop)*pop)/2.
- qbv.m2()*(1./p5.dot(pim)*pim + 1./p5.dot(pom)*pom)/2.
+ ( pip*(p5.dot(pim)/pip.dot(pim) + p5.dot(pom)/pip.dot(pom))
+ pop*(p5.dot(pim)/pop.dot(pim) + p5.dot(pom)/pop.dot(pom))
- pim*(p5.dot(pip)/pip.dot(pim) + p5.dot(pop)/pop.dot(pim))
- pom*(p5.dot(pip)/pip.dot(pom) + p5.dot(pop)/pop.dot(pom)) )/2.;
return -CL.dot(CL);
}
//! Lipatov vertex with soft subtraction
double C2Lipatovots(
CLHEP::HepLorentzVector const & qav,
CLHEP::HepLorentzVector const & qbv,
CLHEP::HepLorentzVector const & pa,
CLHEP::HepLorentzVector const & pb,
CLHEP::HepLorentzVector const & p1,
CLHEP::HepLorentzVector const & p2,
double lambda
) {
double kperp=(qav-qbv).perp();
if (kperp>lambda)
return C2Lipatov(qav, qbv, pa, pb, p1, p2)/(qav.m2()*qbv.m2());
double Cls=(C2Lipatov(qav, qbv, pa, pb, p1, p2)/(qav.m2()*qbv.m2()));
double temp=Cls-4./(kperp*kperp);
return temp;
}
/** Matrix element squared for tree-level current-current scattering
* @param aptype Particle a PDG ID
* @param bptype Particle b PDG ID
* @param pg Unordered gluon momentum
* @param pn Particle n Momentum
* @param pb Particle b Momentum
* @param p1 Particle 1 Momentum
* @param pa Particle a Momentum
* @returns ME Squared for Tree-Level Current-Current Scattering
*
* @note The unof contribution can be calculated by reversing the argument ordering.
*/
double ME_uno_current(
int aptype, int bptype,
CLHEP::HepLorentzVector const & pg,
CLHEP::HepLorentzVector const & pn,
CLHEP::HepLorentzVector const & pb,
CLHEP::HepLorentzVector const & p1,
CLHEP::HepLorentzVector const & pa
){
assert(aptype!=21); // aptype cannot be gluon
if (bptype==21) {
if (aptype > 0)
return ME_unob_qg(pg,p1,pa,pn,pb);
else
return ME_unob_qbarg(pg,p1,pa,pn,pb);
}
else if (bptype<0) { // ----- || -----
if (aptype > 0)
return ME_unob_qQbar(pg,p1,pa,pn,pb);
else
return ME_unob_qbarQbar(pg,p1,pa,pn,pb);
}
else { //bptype == quark
if (aptype > 0)
return ME_unob_qQ(pg,p1,pa,pn,pb);
else
return ME_unob_qbarQ(pg,p1,pa,pn,pb);
}
}
/** Matrix element squared for tree-level current-current scattering
* @param aptype Particle a PDG ID
* @param bptype Particle b PDG ID
* @param pn Particle n Momentum
* @param pb Particle b Momentum
* @param p1 Particle 1 Momentum
* @param pa Particle a Momentum
* @returns ME Squared for Tree-Level Current-Current Scattering
*/
double ME_current(
int aptype, int bptype,
CLHEP::HepLorentzVector const & pn,
CLHEP::HepLorentzVector const & pb,
CLHEP::HepLorentzVector const & p1,
CLHEP::HepLorentzVector const & pa
){
if (aptype==21&&bptype==21) {
return ME_gg(pn,pb,p1,pa);
} else if (aptype==21&&bptype!=21) {
if (bptype > 0)
return ME_qg(pn,pb,p1,pa);
else
return ME_qbarg(pn,pb,p1,pa);
}
else if (bptype==21&&aptype!=21) { // ----- || -----
if (aptype > 0)
return ME_qg(p1,pa,pn,pb);
else
return ME_qbarg(p1,pa,pn,pb);
}
else { // they are both quark
if (bptype>0) {
if (aptype>0)
return ME_qQ(pn,pb,p1,pa);
else
return ME_qQbar(pn,pb,p1,pa);
}
else {
if (aptype>0)
return ME_qQbar(p1,pa,pn,pb);
else
return ME_qbarQbar(pn,pb,p1,pa);
}
}
throw std::logic_error("unknown particle types");
}
/** Matrix element squared for tree-level current-current scattering With W+Jets
* @param aptype Particle a PDG ID
* @param bptype Particle b PDG ID
* @param pn Particle n Momentum
* @param pb Particle b Momentum
* @param p1 Particle 1 Momentum
* @param pa Particle a Momentum
* @param wc Boolean. True->W Emitted from b. Else; emitted from leg a
* @returns ME Squared for Tree-Level Current-Current Scattering
*/
double ME_W_current(
int aptype, int bptype,
CLHEP::HepLorentzVector const & pn,
CLHEP::HepLorentzVector const & pb,
CLHEP::HepLorentzVector const & p1,
CLHEP::HepLorentzVector const & pa,
CLHEP::HepLorentzVector const & plbar,
CLHEP::HepLorentzVector const & pl,
bool const wc, ParticleProperties const & Wprop
){
// We know it cannot be gg incoming.
assert(!(aptype==21 && bptype==21));
if (aptype==21&&bptype!=21) {
if (bptype > 0)
return ME_W_qg(pn,plbar,pl,pb,p1,pa,Wprop);
else
return ME_W_qbarg(pn,plbar,pl,pb,p1,pa,Wprop);
}
else if (bptype==21&&aptype!=21) { // ----- || -----
if (aptype > 0)
return ME_W_qg(p1,plbar,pl,pa,pn,pb,Wprop);
else
return ME_W_qbarg(p1,plbar,pl,pa,pn,pb,Wprop);
}
else { // they are both quark
if (wc==true){ // emission off b, (first argument pbout)
if (bptype>0) {
if (aptype>0)
return ME_W_qQ(pn,plbar,pl,pb,p1,pa,Wprop);
else
return ME_W_qQbar(pn,plbar,pl,pb,p1,pa,Wprop);
}
else {
if (aptype>0)
return ME_W_qbarQ(pn,plbar,pl,pb,p1,pa,Wprop);
else
return ME_W_qbarQbar(pn,plbar,pl,pb,p1,pa,Wprop);
}
}
else{ // emission off a, (first argument paout)
if (aptype > 0) {
if (bptype > 0)
return ME_W_qQ(p1,plbar,pl,pa,pn,pb,Wprop);
else
return ME_W_qQbar(p1,plbar,pl,pa,pn,pb,Wprop);
}
else { // a is anti-quark
if (bptype > 0)
return ME_W_qbarQ(p1,plbar,pl,pa,pn,pb,Wprop);
else
return ME_W_qbarQbar(p1,plbar,pl,pa,pn,pb,Wprop);
}
}
}
throw std::logic_error("unknown particle types");
}
/** Matrix element squared for backwards uno tree-level current-current
* scattering With W+Jets
*
* @param aptype Particle a PDG ID
* @param bptype Particle b PDG ID
* @param pn Particle n Momentum
* @param pb Particle b Momentum
* @param p1 Particle 1 Momentum
* @param pa Particle a Momentum
* @param pg Unordered gluon momentum
* @param wc Boolean. True->W Emitted from b. Else; emitted from leg a
* @returns ME Squared for unob Tree-Level Current-Current Scattering
*
* @note The unof contribution can be calculated by reversing the argument ordering.
*/
double ME_W_uno_current(
int aptype, int bptype,
CLHEP::HepLorentzVector const & pn,
CLHEP::HepLorentzVector const & pb,
CLHEP::HepLorentzVector const & p1,
CLHEP::HepLorentzVector const & pa,
CLHEP::HepLorentzVector const & pg,
CLHEP::HepLorentzVector const & plbar,
CLHEP::HepLorentzVector const & pl,
bool const wc, ParticleProperties const & Wprop
){
// we know they are not both gluons
if (bptype == 21 && aptype != 21) { // b gluon => W emission off a
if (aptype > 0)
return ME_Wuno_qg(p1,pa,pn,pb,pg,plbar,pl,Wprop);
else
return ME_Wuno_qbarg(p1,pa,pn,pb,pg,plbar,pl,Wprop);
}
else { // they are both quark
if (wc) {// emission off b, i.e. b is first current
if (bptype>0){
if (aptype>0)
return ME_W_unob_qQ(p1,pa,pn,pb,pg,plbar,pl,Wprop);
else
return ME_W_unob_qQbar(p1,pa,pn,pb,pg,plbar,pl,Wprop);
}
else{
if (aptype>0)
return ME_W_unob_qbarQ(p1,pa,pn,pb,pg,plbar,pl,Wprop);
else
return ME_W_unob_qbarQbar(p1,pa,pn,pb,pg,plbar,pl,Wprop);
}
}
else {// wc == false, emission off a, i.e. a is first current
if (aptype > 0) {
if (bptype > 0) //qq
return ME_Wuno_qQ(p1,pa,pn,pb,pg,plbar,pl,Wprop);
else //qqbar
return ME_Wuno_qQbar(p1,pa,pn,pb,pg,plbar,pl,Wprop);
}
else { // a is anti-quark
if (bptype > 0) //qbarq
return ME_Wuno_qbarQ(p1,pa,pn,pb,pg,plbar,pl,Wprop);
else //qbarqbar
return ME_Wuno_qbarQbar(p1,pa,pn,pb,pg,plbar,pl,Wprop);
}
}
}
throw std::logic_error("unknown particle types");
}
/** \brief Matrix element squared for backward qqx tree-level current-current
* scattering With W+Jets
*
* @param aptype Particle a PDG ID
* @param bptype Particle b PDG ID
* @param pa Initial state a Momentum
* @param pb Initial state b Momentum
* @param pq Final state q Momentum
* @param pqbar Final state qbar Momentum
* @param pn Final state n Momentum
* @param plbar Final state anti-lepton momentum
* @param pl Final state lepton momentum
* @param wc Boolean. True->W Emitted from b. Else; emitted from leg a
* @returns ME Squared for qqxb Tree-Level Current-Current Scattering
*
* @note calculate forwards qqx contribution by reversing argument ordering.
*/
double ME_W_qqx_current(
int aptype, int bptype,
CLHEP::HepLorentzVector const & pa,
CLHEP::HepLorentzVector const & pb,
CLHEP::HepLorentzVector const & pq,
CLHEP::HepLorentzVector const & pqbar,
CLHEP::HepLorentzVector const & pn,
CLHEP::HepLorentzVector const & plbar,
CLHEP::HepLorentzVector const & pl,
bool const swap_q_qx, bool const wc,
ParticleProperties const & Wprop
){
// CAM factors for the qqx amps, and qqbar ordering (default, qbar extremal)
// const bool swap_q_qx= pqbar.rapidity() > pq.rapidity();
const double CFbackward = K_g( (swap_q_qx)?pq:pqbar ,pa)/HEJ::C_F;
// With qqbar we could have 2 incoming gluons and W Emission
if (aptype==21&&bptype==21) {//a gluon, b gluon gg->qqbarWg
// This will be a wqqx emission as there is no other possible W Emission Site.
if (swap_q_qx)
return ME_WExqqx_qqbarg(pa, pqbar, plbar, pl, pq, pn, pb, Wprop)*CFbackward;
else
return ME_WExqqx_qbarqg(pa, pq, plbar, pl, pqbar, pn, pb, Wprop)*CFbackward;
}
else if (aptype==21&&bptype!=21 ) {//a gluon => W emission off b leg or qqx
if (!wc){ // W Emitted from backwards qqx
if (swap_q_qx)
return ME_WExqqx_qqbarQ(pa, pqbar, plbar, pl, pq, pn, pb, Wprop)*CFbackward;
else
return ME_WExqqx_qbarqQ(pa, pq, plbar, pl, pqbar, pn, pb, Wprop)*CFbackward;
}
else { // W Must be emitted from forwards leg.
if (swap_q_qx)
return ME_W_Exqqx_QQq(pb, pa, pn, pqbar, pq, plbar, pl, bptype<0, Wprop)*CFbackward;
else
return ME_W_Exqqx_QQq(pb, pa, pn, pq, pqbar, plbar, pl, bptype<0, Wprop)*CFbackward;
}
}
throw std::logic_error("Incompatible incoming particle types with qqxb");
}
/* \brief Matrix element squared for central qqx tree-level current-current
* scattering With W+Jets
*
* @param aptype Particle a PDG ID
* @param bptype Particle b PDG ID
* @param nabove Number of gluons emitted before central qqxpair
* @param nbelow Number of gluons emitted after central qqxpair
* @param pa Initial state a Momentum
* @param pb Initial state b Momentum\
* @param pq Final state qbar Momentum
* @param pqbar Final state q Momentum
* @param partons Vector of all outgoing partons
* @param plbar Final state anti-lepton momentum
* @param pl Final state lepton momentum
* @param wqq Boolean. True siginfies W boson is emitted from Central qqx
* @param wc Boolean. wc=true signifies w boson emitted from leg b; if wqq=false.
* @returns ME Squared for qqxmid Tree-Level Current-Current Scattering
*/
double ME_W_qqxmid_current(
int aptype, int bptype,
int nabove, int nbelow,
CLHEP::HepLorentzVector const & pa,
CLHEP::HepLorentzVector const & pb,
CLHEP::HepLorentzVector const & pq,
CLHEP::HepLorentzVector const & pqbar,
std::vector<HLV> const & partons,
CLHEP::HepLorentzVector const & plbar,
CLHEP::HepLorentzVector const & pl,
bool const wqq, bool const wc,
ParticleProperties const & Wprop
){
// CAM factors for the qqx amps, and qqbar ordering (default, pq backwards)
const bool swap_q_qx=pqbar.rapidity() < pq.rapidity();
double wt=1.;
if (aptype==21) wt*=K_g(partons.front(),pa)/HEJ::C_F;
if (bptype==21) wt*=K_g(partons.back(),pb)/HEJ::C_F;
if(wqq)
return wt*ME_WCenqqx_qq(pa, pb, pl, plbar, partons,(bptype<0),(aptype<0),
swap_q_qx, nabove, Wprop);
return wt*ME_W_Cenqqx_qq(pa, pb, pl, plbar, partons, (bptype<0), (aptype<0),
swap_q_qx, nabove, nbelow, wc, Wprop);
}
/** \brief Matrix element squared for tree-level current-current scattering with Higgs
* @param aptype Particle a PDG ID
* @param bptype Particle b PDG ID
* @param pn Particle n Momentum
* @param pb Particle b Momentum
* @param p1 Particle 1 Momentum
* @param pa Particle a Momentum
* @param qH t-channel momentum before Higgs
* @param qHp1 t-channel momentum after Higgs
* @returns ME Squared for Tree-Level Current-Current Scattering with Higgs
*/
double ME_Higgs_current(
int aptype, int bptype,
CLHEP::HepLorentzVector const & pn,
CLHEP::HepLorentzVector const & pb,
CLHEP::HepLorentzVector const & p1,
CLHEP::HepLorentzVector const & pa,
CLHEP::HepLorentzVector const & qH, // t-channel momentum before Higgs
CLHEP::HepLorentzVector const & qHp1, // t-channel momentum after Higgs
double mt, bool include_bottom, double mb, double vev
){
if (aptype==21&&bptype==21) // gg initial state
return ME_H_gg(pn,pb,p1,pa,-qHp1,-qH,mt,include_bottom,mb,vev);
else if (aptype==21&&bptype!=21) {
if (bptype > 0)
return ME_H_qg(pn,pb,p1,pa,-qHp1,-qH,mt,include_bottom,mb,vev)*4./9.;
else
return ME_H_qbarg(pn,pb,p1,pa,-qHp1,-qH,mt,include_bottom,mb,vev)*4./9.;
}
else if (bptype==21&&aptype!=21) {
if (aptype > 0)
return ME_H_qg(p1,pa,pn,pb,-qH,-qHp1,mt,include_bottom,mb,vev)*4./9.;
else
return ME_H_qbarg(p1,pa,pn,pb,-qH,-qHp1,mt,include_bottom,mb,vev)*4./9.;
}
else { // they are both quark
if (bptype>0) {
if (aptype>0)
return ME_H_qQ(pn,pb,p1,pa,-qHp1,-qH,mt,include_bottom,mb,vev)*4.*4./(9.*9.);
else
return ME_H_qQbar(pn,pb,p1,pa,-qHp1,-qH,mt,include_bottom,mb,vev)*4.*4./(9.*9.);
}
else {
if (aptype>0)
return ME_H_qQbar(p1,pa,pn,pb,-qH,-qHp1,mt,include_bottom,mb,vev)*4.*4./(9.*9.);
else
return ME_H_qbarQbar(pn,pb,p1,pa,-qHp1,-qH,mt,include_bottom,mb,vev)*4.*4./(9.*9.);
}
}
throw std::logic_error("unknown particle types");
}
/** \brief Current matrix element squared with Higgs and unordered backward emission
* @param aptype Particle A PDG ID
* @param bptype Particle B PDG ID
* @param pn Particle n Momentum
* @param pb Particle b Momentum
* @param pg Unordered back Particle Momentum
* @param p1 Particle 1 Momentum
* @param pa Particle a Momentum
* @param qH t-channel momentum before Higgs
* @param qHp1 t-channel momentum after Higgs
* @returns ME Squared with Higgs and unordered backward emission
*
* @note This function assumes unordered gluon backwards from pa-p1 current.
* For unof, reverse call order
*/
double ME_Higgs_current_uno(
int aptype, int bptype,
CLHEP::HepLorentzVector const & pg,
CLHEP::HepLorentzVector const & pn,
CLHEP::HepLorentzVector const & pb,
CLHEP::HepLorentzVector const & p1,
CLHEP::HepLorentzVector const & pa,
CLHEP::HepLorentzVector const & qH, // t-channel momentum before Higgs
CLHEP::HepLorentzVector const & qHp1, // t-channel momentum after Higgs
double mt, bool include_bottom, double mb, double vev
){
if (bptype==21&&aptype!=21) {
if (aptype > 0)
return ME_H_unob_gQ(pg,p1,pa,pn,pb,-qH,-qHp1,mt,include_bottom,mb,vev);
else
return ME_H_unob_gQbar(pg,p1,pa,pn,pb,-qH,-qHp1,mt,include_bottom,mb,vev);
}
else { // they are both quark
if (aptype>0) {
if (bptype>0)
return ME_H_unob_qQ(pg,p1,pa,pn,pb,-qH,-qHp1,mt,include_bottom,mb,vev);
else
return ME_H_unob_qbarQ(pg,p1,pa,pn,pb,-qH,-qHp1,mt,include_bottom,mb,vev);
}
else {
if (bptype>0)
return ME_H_unob_qQbar(pg,p1,pa,pn,pb,-qH,-qHp1,mt,include_bottom,mb,vev);
else
return ME_H_unob_qbarQbar(pg,p1,pa,pn,pb,-qH,-qHp1,mt,include_bottom,mb,vev);
}
}
throw std::logic_error("unknown particle types");
}
CLHEP::HepLorentzVector to_HepLorentzVector(HEJ::Particle const & particle){
return {particle.p.px(), particle.p.py(), particle.p.pz(), particle.p.E()};
}
void validate(HEJ::MatrixElementConfig const & config) {
#ifndef HEJ_BUILD_WITH_QCDLOOP
if(!config.Higgs_coupling.use_impact_factors) {
throw std::invalid_argument{
"Invalid Higgs coupling settings.\n"
"HEJ without QCDloop support can only use impact factors.\n"
"Set use_impact_factors to true or recompile HEJ.\n"
};
}
#endif
if(config.Higgs_coupling.use_impact_factors
&& config.Higgs_coupling.mt != std::numeric_limits<double>::infinity()) {
throw std::invalid_argument{
"Conflicting settings: "
"impact factors may only be used in the infinite top mass limit"
};
}
}
} // namespace anonymous
MatrixElement::MatrixElement(
std::function<double (double)> alpha_s,
MatrixElementConfig conf
):
alpha_s_{std::move(alpha_s)},
param_{std::move(conf)}
{
validate(param_);
}
double MatrixElement::tree_kin(
Event const & ev
) const {
if(! is_resummable(ev.type())) return 0.;
auto AWZH_boson = std::find_if(
begin(ev.outgoing()), end(ev.outgoing()),
[](Particle const & p){return is_AWZH_boson(p);}
);
if(AWZH_boson == end(ev.outgoing()))
return tree_kin_jets(ev);
switch(AWZH_boson->type){
case pid::Higgs:
return tree_kin_Higgs(ev);
case pid::Wp:
case pid::Wm:
return tree_kin_W(ev);
// TODO
case pid::photon:
case pid::Z:
default:
throw not_implemented("Emission of boson of unsupported type");
}
}
namespace{
constexpr int extremal_jet_idx = 1;
constexpr int no_extremal_jet_idx = 0;
bool treat_as_extremal(Particle const & parton){
return parton.p.user_index() == extremal_jet_idx;
}
template<class InputIterator>
double FKL_ladder_weight(
InputIterator begin_gluon, InputIterator end_gluon,
CLHEP::HepLorentzVector const & q0,
CLHEP::HepLorentzVector const & pa, CLHEP::HepLorentzVector const & pb,
CLHEP::HepLorentzVector const & p1, CLHEP::HepLorentzVector const & pn,
double lambda
){
double wt = 1;
auto qi = q0;
for(auto gluon_it = begin_gluon; gluon_it != end_gluon; ++gluon_it){
assert(gluon_it->type == pid::gluon);
const auto g = to_HepLorentzVector(*gluon_it);
const auto qip1 = qi - g;
if(treat_as_extremal(*gluon_it)){
wt *= C2Lipatovots(qip1, qi, pa, pb, lambda)*C_A;
} else{
wt *= C2Lipatovots(qip1, qi, pa, pb, p1, pn, lambda)*C_A;
}
qi = qip1;
}
return wt;
}
} // namespace anonymous
std::vector<Particle> MatrixElement::tag_extremal_jet_partons(
Event const & ev
) const{
auto out_partons = filter_partons(ev.outgoing());
if(out_partons.size() == ev.jets().size()){
// no additional emissions in extremal jets, don't need to tag anything
for(auto & parton: out_partons){
parton.p.set_user_index(no_extremal_jet_idx);
}
return out_partons;
}
const auto & jets = ev.jets();
assert(jets.size() >= 2);
auto most_backward = begin(jets);
auto most_forward = end(jets) - 1;
// skip jets caused by unordered emission or qqx
if(ev.type() == event_type::unob || ev.type() == event_type::qqxexb){
assert(jets.size() >= 3);
++most_backward;
}
else if(ev.type() == event_type::unof || ev.type() == event_type::qqxexf){
assert(jets.size() >= 3);
--most_forward;
}
const auto extremal_jet_indices = ev.particle_jet_indices(
{*most_backward, *most_forward}
);
assert(extremal_jet_indices.size() == out_partons.size());
for(size_t i = 0; i < out_partons.size(); ++i){
assert(HEJ::is_parton(out_partons[i]));
const int idx = (extremal_jet_indices[i]>=0)?
extremal_jet_idx:
no_extremal_jet_idx;
out_partons[i].p.set_user_index(idx);
}
return out_partons;
}
namespace {
template<class InIter, class partIter>
double tree_kin_jets_uno(InIter BeginIn, InIter EndIn, partIter BeginPart,
partIter EndPart, double lambda){
const auto pa = to_HepLorentzVector(*BeginIn);
const auto pb = to_HepLorentzVector(*(EndIn-1));
const auto pg = to_HepLorentzVector(*BeginPart);
const auto p1 = to_HepLorentzVector(*(BeginPart+1));
const auto pn = to_HepLorentzVector(*(EndPart-1));
const double current_factor = ME_uno_current(
(BeginIn)->type, (EndIn-1)->type, pg, pn, pb, p1, pa
)/(4.*(N_C*N_C - 1.));
const double ladder_factor = FKL_ladder_weight(
(BeginPart+2), (EndPart-1),
pa-p1-pg, pa, pb, p1, pn, lambda
);
return current_factor*ladder_factor;
}
}
double MatrixElement::tree_kin_jets(Event const & ev) const {
auto const & incoming = ev.incoming();
const auto partons = tag_extremal_jet_partons(ev);
if (ev.type()==HEJ::event_type::FKL){
const auto pa = to_HepLorentzVector(incoming[0]);
const auto pb = to_HepLorentzVector(incoming[1]);
const auto p1 = to_HepLorentzVector(partons.front());
const auto pn = to_HepLorentzVector(partons.back());
return ME_current(
incoming[0].type, incoming[1].type,
pn, pb, p1, pa
)/(4.*(N_C*N_C - 1.))*FKL_ladder_weight(
begin(partons) + 1, end(partons) - 1,
pa - p1, pa, pb, p1, pn,
param_.regulator_lambda
);
}
else if (ev.type()==HEJ::event_type::unordered_backward){
return tree_kin_jets_uno(incoming.begin(), incoming.end(),
partons.begin(), partons.end(),
param_.regulator_lambda);
}
else if (ev.type()==HEJ::event_type::unordered_forward){
return tree_kin_jets_uno(incoming.rbegin(), incoming.rend(),
partons.rbegin(), partons.rend(),
param_.regulator_lambda);
}
else {
throw std::logic_error("Can only reweight FKL or uno processes in Pure Jets");
}
}
namespace{
double tree_kin_W_FKL(
int aptype, int bptype, HLV pa, HLV pb,
std::vector<Particle> const & partons,
HLV plbar, HLV pl,
double lambda, ParticleProperties const & Wprop
){
auto p1 = to_HepLorentzVector(partons[0]);
auto pn = to_HepLorentzVector(partons[partons.size() - 1]);
const auto begin_ladder = cbegin(partons) + 1;
const auto end_ladder = cend(partons) - 1;
bool wc = aptype==partons[0].type; //leg b emits w
auto q0 = pa - p1;
if(!wc)
q0 -= pl + plbar;
const double current_factor = ME_W_current(
aptype, bptype, pn, pb,
p1, pa, plbar, pl, wc, Wprop
);
const double ladder_factor = FKL_ladder_weight(
begin_ladder, end_ladder,
q0, pa, pb, p1, pn,
lambda
);
return current_factor*ladder_factor;
}
template<class InIter, class partIter>
double tree_kin_W_uno(InIter BeginIn, partIter BeginPart,
partIter EndPart, const HLV & plbar, const HLV & pl,
double lambda, ParticleProperties const & Wprop){
const auto pa = to_HepLorentzVector(*BeginIn);
const auto pb = to_HepLorentzVector(*(BeginIn+1));
const auto pg = to_HepLorentzVector(*BeginPart);
const auto p1 = to_HepLorentzVector(*(BeginPart+1));
const auto pn = to_HepLorentzVector(*(EndPart-1));
bool wc = (BeginIn)->type==(BeginPart+1)->type; //leg b emits w
auto q0 = pa - p1 - pg;
if(!wc)
q0 -= pl + plbar;
const double current_factor = ME_W_uno_current(
(BeginIn)->type, (BeginIn+1)->type, pn, pb,
p1, pa, pg, plbar, pl, wc, Wprop
);
const double ladder_factor = FKL_ladder_weight(
BeginPart+2, EndPart-1,
q0, pa, pb, p1, pn,
lambda
);
return current_factor*C_A*C_A/(N_C*N_C-1.)*ladder_factor;
}
template<class InIter, class partIter>
double tree_kin_W_qqx(InIter BeginIn, partIter BeginPart,
partIter EndPart, const HLV & plbar, const HLV & pl,
double lambda, ParticleProperties const & Wprop){
const bool swap_q_qx=is_quark(*BeginPart);
const auto pa = to_HepLorentzVector(*BeginIn);
const auto pb = to_HepLorentzVector(*(BeginIn+1));
const auto pq = to_HepLorentzVector(*(BeginPart+(swap_q_qx?0:1)));
const auto pqbar = to_HepLorentzVector(*(BeginPart+(swap_q_qx?1:0)));
const auto p1 = to_HepLorentzVector(*(BeginPart));
const auto pn = to_HepLorentzVector(*(EndPart-1));
const bool wc = (BeginIn+1)->type!=(EndPart-1)->type; //leg b emits w
auto q0 = pa - pq - pqbar;
if(!wc)
q0 -= pl + plbar;
const double current_factor = ME_W_qqx_current(
(BeginIn)->type, (BeginIn+1)->type, pa, pb,
pq, pqbar, pn, plbar, pl, swap_q_qx, wc, Wprop
);
const double ladder_factor = FKL_ladder_weight(
BeginPart+2, EndPart-1,
q0, pa, pb, p1, pn,
lambda
);
return current_factor*C_A*C_A/(N_C*N_C-1.)*ladder_factor;
}
double tree_kin_W_qqxmid(
int aptype, int bptype, HLV pa, HLV pb,
std::vector<Particle> const & partons,
HLV plbar, HLV pl,
double lambda, ParticleProperties const & Wprop
){
HLV pq,pqbar;
const auto backmidquark = std::find_if(
begin(partons)+1, end(partons)-1,
[](Particle const & s){ return s.type != pid::gluon; }
);
assert(backmidquark!=end(partons)-1);
if (is_quark(backmidquark->type)){
pq = to_HepLorentzVector(*backmidquark);
pqbar = to_HepLorentzVector(*(backmidquark+1));
}
else {
pqbar = to_HepLorentzVector(*backmidquark);
pq = to_HepLorentzVector(*(backmidquark+1));
}
auto p1 = to_HepLorentzVector(partons[0]);
auto pn = to_HepLorentzVector(partons[partons.size() - 1]);
auto q0 = pa - p1;
// t-channel momentum after qqx
auto qqxt = q0;
bool wc, wqq;
if (backmidquark->type == -(backmidquark+1)->type){ // Central qqx does not emit
wqq=false;
if (aptype==partons[0].type) {
wc = true;
}
else{
wc = false;
q0-=pl+plbar;
}
}
else{
wqq = true;
wc = false;
qqxt-=pl+plbar;
}
const auto begin_ladder = cbegin(partons) + 1;
const auto end_ladder_1 = (backmidquark);
const auto begin_ladder_2 = (backmidquark+2);
const auto end_ladder = cend(partons) - 1;
for(auto parton_it = begin_ladder; parton_it < begin_ladder_2; ++parton_it){
qqxt -= to_HepLorentzVector(*parton_it);
}
int nabove = std::distance(begin_ladder, backmidquark);
int nbelow = std::distance(begin_ladder_2, end_ladder);
std::vector<HLV> partonsHLV;
partonsHLV.reserve(partons.size());
for (size_t i = 0; i != partons.size(); ++i) {
partonsHLV.push_back(to_HepLorentzVector(partons[i]));
}
const double current_factor = ME_W_qqxmid_current(
aptype, bptype, nabove, nbelow, pa, pb,
pq, pqbar, partonsHLV, plbar, pl, wqq, wc, Wprop
);
const double ladder_factor = FKL_ladder_weight(
begin_ladder, end_ladder_1,
q0, pa, pb, p1, pn,
lambda
)*FKL_ladder_weight(
begin_ladder_2, end_ladder,
qqxt, pa, pb, p1, pn,
lambda
);
return current_factor*C_A*C_A/(N_C*N_C-1.)*ladder_factor;
}
} // namespace anonymous
double MatrixElement::tree_kin_W(Event const & ev) const {
using namespace event_type;
auto const & incoming(ev.incoming());
auto const & decays(ev.decays());
HLV plbar, pl;
for (auto& x: decays) {
if (x.second.at(0).type < 0){
plbar = to_HepLorentzVector(x.second.at(0));
pl = to_HepLorentzVector(x.second.at(1));
}
else{
pl = to_HepLorentzVector(x.second.at(0));
plbar = to_HepLorentzVector(x.second.at(1));
}
}
const auto pa = to_HepLorentzVector(incoming[0]);
const auto pb = to_HepLorentzVector(incoming[1]);
const auto partons = tag_extremal_jet_partons(ev);
if(ev.type() == FKL){
return tree_kin_W_FKL(incoming[0].type, incoming[1].type,
pa, pb, partons, plbar, pl,
param_.regulator_lambda,
param_.ew_parameters.Wprop());
}
if(ev.type() == unordered_backward){
return tree_kin_W_uno(cbegin(incoming), cbegin(partons),
cend(partons), plbar, pl,
param_.regulator_lambda,
param_.ew_parameters.Wprop());
}
if(ev.type() == unordered_forward){
return tree_kin_W_uno(crbegin(incoming), crbegin(partons),
crend(partons), plbar, pl,
param_.regulator_lambda,
param_.ew_parameters.Wprop());
}
if(ev.type() == extremal_qqxb){
return tree_kin_W_qqx(cbegin(incoming), cbegin(partons),
cend(partons), plbar, pl,
param_.regulator_lambda,
param_.ew_parameters.Wprop());
}
if(ev.type() == extremal_qqxf){
return tree_kin_W_qqx(crbegin(incoming), crbegin(partons),
crend(partons), plbar, pl,
param_.regulator_lambda,
param_.ew_parameters.Wprop());
}
assert(ev.type() == central_qqx);
return tree_kin_W_qqxmid(incoming[0].type, incoming[1].type,
pa, pb, partons, plbar, pl,
param_.regulator_lambda,
param_.ew_parameters.Wprop());
}
double MatrixElement::tree_kin_Higgs(Event const & ev) const {
if(is_uno(ev.type())){
return tree_kin_Higgs_between(ev);
}
if(ev.outgoing().front().type == pid::Higgs){
return tree_kin_Higgs_first(ev);
}
if(ev.outgoing().back().type == pid::Higgs){
return tree_kin_Higgs_last(ev);
}
return tree_kin_Higgs_between(ev);
}
namespace {
// Colour acceleration multipliers, for gluons see eq. (7) in arXiv:0910.5113
#ifdef HEJ_BUILD_WITH_QCDLOOP
// TODO: code duplication with jets.cc
double K_g(double p1minus, double paminus) {
return 1./2.*(p1minus/paminus + paminus/p1minus)*(C_A - 1./C_A) + 1./C_A;
}
double K_g(
CLHEP::HepLorentzVector const & pout,
CLHEP::HepLorentzVector const & pin
) {
if(pin.z() > 0) return K_g(pout.plus(), pin.plus());
return K_g(pout.minus(), pin.minus());
}
double K(
ParticleID type,
CLHEP::HepLorentzVector const & pout,
CLHEP::HepLorentzVector const & pin
) {
if(type == ParticleID::gluon) return K_g(pout, pin);
return C_F;
}
#endif
// Colour factor in strict MRK limit
double K_MRK(ParticleID type) {
return (type == ParticleID::gluon)?C_A:C_F;
}
}
double MatrixElement::MH2_forwardH(
CLHEP::HepLorentzVector const & p1out,
CLHEP::HepLorentzVector const & p1in,
ParticleID type2,
CLHEP::HepLorentzVector const & p2out,
CLHEP::HepLorentzVector const & p2in,
CLHEP::HepLorentzVector const & pH,
double t1, double t2
) const{
ignore(p2out, p2in);
const double shat = p1in.invariantMass2(p2in);
const double vev = param_.ew_parameters.vev();
// gluon case
#ifdef HEJ_BUILD_WITH_QCDLOOP
if(!param_.Higgs_coupling.use_impact_factors){
return K(type2, p2out, p2in)*C_A*1./(16*M_PI*M_PI)*t1/t2*ME_Houtside_gq(
p1out, p1in, p2out, p2in, pH,
param_.Higgs_coupling.mt, param_.Higgs_coupling.include_bottom,
param_.Higgs_coupling.mb, vev
)/(4*(N_C*N_C - 1));
}
#endif
return K_MRK(type2)/C_A*9./2.*shat*shat*(
C2gHgp(p1in,p1out,pH,vev) + C2gHgm(p1in,p1out,pH,vev)
)/(t1*t2);
}
double MatrixElement::tree_kin_Higgs_first(Event const & ev) const {
auto const & incoming = ev.incoming();
auto const & outgoing = ev.outgoing();
assert(outgoing.front().type == pid::Higgs);
if(outgoing[1].type != pid::gluon) {
assert(incoming.front().type == outgoing[1].type);
return tree_kin_Higgs_between(ev);
}
const auto pH = to_HepLorentzVector(outgoing.front());
const auto partons = tag_extremal_jet_partons(
ev
);
const auto pa = to_HepLorentzVector(incoming[0]);
const auto pb = to_HepLorentzVector(incoming[1]);
const auto p1 = to_HepLorentzVector(partons.front());
const auto pn = to_HepLorentzVector(partons.back());
const auto q0 = pa - p1 - pH;
const double t1 = q0.m2();
const double t2 = (pn - pb).m2();
return MH2_forwardH(
p1, pa, incoming[1].type, pn, pb, pH,
t1, t2
)*FKL_ladder_weight(
begin(partons) + 1, end(partons) - 1,
q0, pa, pb, p1, pn,
param_.regulator_lambda
);
}
double MatrixElement::tree_kin_Higgs_last(Event const & ev) const {
auto const & incoming = ev.incoming();
auto const & outgoing = ev.outgoing();
assert(outgoing.back().type == pid::Higgs);
if(outgoing[outgoing.size()-2].type != pid::gluon) {
assert(incoming.back().type == outgoing[outgoing.size()-2].type);
return tree_kin_Higgs_between(ev);
}
const auto pH = to_HepLorentzVector(outgoing.back());
const auto partons = tag_extremal_jet_partons(
ev
);
const auto pa = to_HepLorentzVector(incoming[0]);
const auto pb = to_HepLorentzVector(incoming[1]);
auto p1 = to_HepLorentzVector(partons.front());
const auto pn = to_HepLorentzVector(partons.back());
auto q0 = pa - p1;
const double t1 = q0.m2();
const double t2 = (pn + pH - pb).m2();
return MH2_forwardH(
pn, pb, incoming[0].type, p1, pa, pH,
t2, t1
)*FKL_ladder_weight(
begin(partons) + 1, end(partons) - 1,
q0, pa, pb, p1, pn,
param_.regulator_lambda
);
}
namespace {
template<class InIter, class partIter>
double tree_kin_Higgs_uno(InIter BeginIn, InIter EndIn, partIter BeginPart,
partIter EndPart, const HLV & qH, const HLV & qHp1,
double mt, bool inc_bot, double mb, double vev){
const auto pa = to_HepLorentzVector(*BeginIn);
const auto pb = to_HepLorentzVector(*(EndIn-1));
const auto pg = to_HepLorentzVector(*BeginPart);
const auto p1 = to_HepLorentzVector(*(BeginPart+1));
const auto pn = to_HepLorentzVector(*(EndPart-1));
return ME_Higgs_current_uno(
(BeginIn)->type, (EndIn-1)->type, pg, pn, pb, p1, pa,
qH, qHp1, mt, inc_bot, mb, vev
);
}
}
double MatrixElement::tree_kin_Higgs_between(Event const & ev) const {
using namespace event_type;
auto const & incoming = ev.incoming();
auto const & outgoing = ev.outgoing();
const auto the_Higgs = std::find_if(
begin(outgoing), end(outgoing),
[](Particle const & s){ return s.type == pid::Higgs; }
);
assert(the_Higgs != end(outgoing));
const auto pH = to_HepLorentzVector(*the_Higgs);
const auto partons = tag_extremal_jet_partons(ev);
const auto pa = to_HepLorentzVector(incoming[0]);
const auto pb = to_HepLorentzVector(incoming[1]);
auto p1 = to_HepLorentzVector(
partons[(ev.type() == unob)?1:0]
);
auto pn = to_HepLorentzVector(
partons[partons.size() - ((ev.type() == unof)?2:1)]
);
auto first_after_Higgs = begin(partons) + (the_Higgs-begin(outgoing));
assert(
(first_after_Higgs == end(partons) && (
(ev.type() == unob)
|| partons.back().type != pid::gluon
))
|| first_after_Higgs->rapidity() >= the_Higgs->rapidity()
);
assert(
(first_after_Higgs == begin(partons) && (
(ev.type() == unof)
|| partons.front().type != pid::gluon
))
|| (first_after_Higgs-1)->rapidity() <= the_Higgs->rapidity()
);
// always treat the Higgs as if it were in between the extremal FKL partons
if(first_after_Higgs == begin(partons)) ++first_after_Higgs;
else if(first_after_Higgs == end(partons)) --first_after_Higgs;
// t-channel momentum before Higgs
auto qH = pa;
for(auto parton_it = begin(partons); parton_it != first_after_Higgs; ++parton_it){
qH -= to_HepLorentzVector(*parton_it);
}
auto q0 = pa - p1;
auto begin_ladder = begin(partons) + 1;
auto end_ladder = end(partons) - 1;
double current_factor;
if(ev.type() == FKL){
current_factor = ME_Higgs_current(
incoming[0].type, incoming[1].type,
pn, pb, p1, pa, qH, qH - pH,
param_.Higgs_coupling.mt,
param_.Higgs_coupling.include_bottom, param_.Higgs_coupling.mb,
param_.ew_parameters.vev()
);
}
else if(ev.type() == unob){
current_factor = HEJ::C_A*HEJ::C_A/2*tree_kin_Higgs_uno(
begin(incoming), end(incoming), begin(partons),
end(partons), qH, qH-pH, param_.Higgs_coupling.mt,
param_.Higgs_coupling.include_bottom, param_.Higgs_coupling.mb,
param_.ew_parameters.vev()
);
const auto p_unob = to_HepLorentzVector(partons.front());
q0 -= p_unob;
p1 += p_unob;
++begin_ladder;
}
else if(ev.type() == unof){
current_factor = HEJ::C_A*HEJ::C_A/2*tree_kin_Higgs_uno(
rbegin(incoming), rend(incoming), rbegin(partons),
rend(partons), qH-pH, qH, param_.Higgs_coupling.mt,
param_.Higgs_coupling.include_bottom, param_.Higgs_coupling.mb,
param_.ew_parameters.vev()
);
pn += to_HepLorentzVector(partons.back());
--end_ladder;
}
else{
throw std::logic_error("Can only reweight FKL or uno processes in H+Jets");
}
const double ladder_factor = FKL_ladder_weight(
begin_ladder, first_after_Higgs,
q0, pa, pb, p1, pn,
param_.regulator_lambda
)*FKL_ladder_weight(
first_after_Higgs, end_ladder,
qH - pH, pa, pb, p1, pn,
param_.regulator_lambda
);
return current_factor*C_A*C_A/(N_C*N_C-1.)*ladder_factor;
}
namespace {
double get_AWZH_coupling(Event const & ev, double alpha_s, double alpha_w) {
const auto AWZH_boson = std::find_if(
begin(ev.outgoing()), end(ev.outgoing()),
[](auto const & p){return is_AWZH_boson(p);}
);
if(AWZH_boson == end(ev.outgoing())) return 1.;
switch(AWZH_boson->type){
case pid::Higgs:
return alpha_s*alpha_s;
case pid::Wp:
case pid::Wm:
return alpha_w*alpha_w;
// TODO
case pid::photon:
case pid::Z:
default:
throw not_implemented("Emission of boson of unsupported type");
}
}
}
double MatrixElement::tree_param(Event const & ev, double mur) const {
assert(is_resummable(ev.type()));
const auto begin_partons = ev.begin_partons();
const auto end_partons = ev.end_partons();
const auto num_partons = std::distance(begin_partons, end_partons);
const double alpha_s = alpha_s_(mur);
const double gs2 = 4.*M_PI*alpha_s;
double res = std::pow(gs2, num_partons);
if(param_.log_correction){
// use alpha_s(q_perp), evolved to mur
assert(num_partons >= 2);
const auto first_emission = std::next(begin_partons);
const auto last_emission = std::prev(end_partons);
for(auto parton = first_emission; parton != last_emission; ++parton){
res *= 1. + alpha_s/(2.*M_PI)*beta0*log(mur/parton->perp());
}
}
return get_AWZH_coupling(ev, alpha_s, param_.ew_parameters.alpha_w())*res;
}
} // namespace HEJ
diff --git a/t/CMakeLists.txt b/t/CMakeLists.txt
index c56d0fb..df4ce46 100644
--- a/t/CMakeLists.txt
+++ b/t/CMakeLists.txt
@@ -1,261 +1,277 @@
set(tst_dir "${CMAKE_CURRENT_SOURCE_DIR}")
set(tst_ME_data_dir "${tst_dir}/ME_data")
# test event classification
add_executable(test_classify ${tst_dir}/test_classify.cc)
target_link_libraries(test_classify HEJ)
add_test(
NAME t_classify
COMMAND test_classify
)
add_executable(test_classify_ref ${tst_dir}/test_classify_ref.cc)
target_link_libraries(test_classify_ref HEJ)
add_test(
NAME t_classify_ref
COMMAND test_classify_ref ${tst_dir}/classify_ref ${tst_dir}/classify.lhe.gz
)
add_test(
NAME t_classify_ref_4j
COMMAND test_classify_ref ${tst_dir}/classify_ref_4j ${tst_dir}/4j.lhe.gz
)
# test phase space point
add_executable(test_psp ${tst_dir}/test_psp.cc)
target_link_libraries(test_psp HEJ)
add_test(
NAME t_psp
COMMAND test_psp ${tst_dir}/psp_gen.lhe.gz
)
# test importing scales
add_library(scales SHARED ${tst_dir}/scales.cc)
target_link_libraries(scales HEJ)
add_executable(test_scale_import ${tst_dir}/test_scale_import)
target_link_libraries(test_scale_import HEJ)
add_test(
NAME t_scale_import
COMMAND test_scale_import ${tst_dir}/jet_config_with_import.yml
)
# test scale arithmetic (e.g. 2*H_T/4)
add_executable(test_scale_arithmetics ${tst_dir}/test_scale_arithmetics)
target_link_libraries(test_scale_arithmetics HEJ)
add_test(
NAME t_scale_arithmetics
COMMAND test_scale_arithmetics ${tst_dir}/jet_config.yml ${tst_dir}/2j.lhe.gz
)
# test "ParameterDescription"
add_executable(test_descriptions ${tst_dir}/test_descriptions)
target_link_libraries(test_descriptions HEJ)
add_test(
NAME t_descriptions
COMMAND test_descriptions
)
# test "EventParameters*Weight"
add_executable(test_parameters ${tst_dir}/test_parameters)
target_link_libraries(test_parameters HEJ)
add_test(
NAME test_parameters
COMMAND test_parameters
)
# test unweighting
add_executable(test_unweighter ${tst_dir}/test_unweighter)
target_link_libraries(test_unweighter HEJ)
add_test(
NAME test_unweighter
COMMAND test_unweighter ${tst_dir}/4j.lhe.gz
)
# test colour generation
add_executable(test_colours ${tst_dir}/test_colours)
target_link_libraries(test_colours HEJ)
add_test(
NAME t_colour_flow
COMMAND test_colours
)
# test matrix elements
add_executable(test_ME_generic ${tst_dir}/test_ME_generic.cc)
target_link_libraries(test_ME_generic HEJ)
add_test(
NAME t_ME_j
COMMAND test_ME_generic ${tst_ME_data_dir}/config_mtinf.yml ${tst_ME_data_dir}/ME_jets_tree.dat ${tst_ME_data_dir}/PSP_jets.lhe.gz
)
add_test(
+ NAME t_ME_j_virt
+ COMMAND test_ME_generic ${tst_ME_data_dir}/config_mtinf.yml ${tst_ME_data_dir}/ME_jets_tree_virt.dat ${tst_ME_data_dir}/PSP_jets.lhe.gz
+ )
+add_test(
NAME t_ME_h
COMMAND test_ME_generic ${tst_ME_data_dir}/config_mtinf.yml ${tst_ME_data_dir}/ME_h_mtinf_tree.dat ${tst_ME_data_dir}/PSP_h.lhe.gz
)
+add_test(
+ NAME t_ME_h_virt
+ COMMAND test_ME_generic ${tst_ME_data_dir}/config_mtinf.yml ${tst_ME_data_dir}/ME_h_mtinf_virt.dat ${tst_ME_data_dir}/PSP_h.lhe.gz
+ )
if(${QCDloop_FOUND})
add_test(
NAME t_ME_h_mt
COMMAND test_ME_generic ${tst_ME_data_dir}/config_mt.yml ${tst_ME_data_dir}/ME_h_mt_tree.dat ${tst_ME_data_dir}/PSP_h.lhe.gz
)
add_test(
NAME t_ME_h_mtmb
COMMAND test_ME_generic ${tst_ME_data_dir}/config_mtmb.yml ${tst_ME_data_dir}/ME_h_mtmb_tree.dat ${tst_ME_data_dir}/PSP_h.lhe.gz
)
endif()
add_test(
NAME t_ME_w_FKL
COMMAND test_ME_generic ${tst_ME_data_dir}/config_w_ME.yml ${tst_ME_data_dir}/ME_w_FKL_tree.dat ${tst_ME_data_dir}/PSP_w_FKL.lhe.gz
)
add_test(
NAME t_ME_w_FKL_virt
COMMAND test_ME_generic ${tst_ME_data_dir}/config_w_ME.yml ${tst_ME_data_dir}/ME_w_FKL_virt.dat ${tst_ME_data_dir}/PSP_w_FKL.lhe.gz
)
add_test(
NAME t_ME_Wp
COMMAND test_ME_generic ${tst_ME_data_dir}/config_w_ME.yml ${tst_ME_data_dir}/ME_Wp.dat ${tst_ME_data_dir}/PSP_Wp.lhe.gz
)
add_test(
+ NAME t_ME_Wp_virt
+ COMMAND test_ME_generic ${tst_ME_data_dir}/config_w_ME.yml ${tst_ME_data_dir}/ME_Wp_virt.dat ${tst_ME_data_dir}/PSP_Wp.lhe.gz
+ )
+add_test(
NAME t_ME_Wm
COMMAND test_ME_generic ${tst_ME_data_dir}/config_w_ME.yml ${tst_ME_data_dir}/ME_Wm.dat ${tst_ME_data_dir}/PSP_Wm.lhe.gz
)
+add_test(
+ NAME t_ME_Wm_virt
+ COMMAND test_ME_generic ${tst_ME_data_dir}/config_w_ME.yml ${tst_ME_data_dir}/ME_Wm_virt.dat ${tst_ME_data_dir}/PSP_Wm.lhe.gz
+ )
# test main executable
file(COPY "${tst_dir}/jet_config.yml" DESTINATION "${CMAKE_BINARY_DIR}")
set(test_config "${CMAKE_BINARY_DIR}/jet_config.yml")
if(${HepMC3_FOUND})
file(READ ${test_config} config)
file(WRITE ${test_config} "${config} - tst.hepmc\n")
endif()
if(${HepMC_FOUND})
file(READ ${test_config} config)
file(WRITE ${test_config} "${config} - tst.hepmc2\n")
if(${rivet_FOUND})
file(READ ${test_config} config)
file(WRITE ${test_config} "${config}\nanalysis:\n rivet: MC_XS\n output: tst\n")
endif()
endif()
set(test_cmd_main "$<TARGET_FILE:HEJ_main>\\\;${test_config}\\\;${tst_dir}/2j.lhe.gz")
# check that HepMC3 output is correct
if(${HepMC3_FOUND})
add_executable(check_hepmc ${tst_dir}/check_hepmc.cc)
target_link_libraries(check_hepmc HEJ ${HEPMC3_LIBRARIES})
target_include_directories(check_hepmc PRIVATE ${HEPMC3_INCLUDE_DIR})
set(test_cmd_hepmc "$<TARGET_FILE:check_hepmc>\\\;tst.hepmc")
else()
set(test_cmd_hepmc "")
endif()
# check that LHEF output is correct
add_executable(check_lhe ${tst_dir}/check_lhe.cc)
target_link_libraries(check_lhe HEJ)
set(test_cmd_lhe "$<TARGET_FILE:check_lhe>\\\;tst.lhe")
# Run dependent tests in one command to ensure correct execution order
# Note: The commands are concatenated with "\;" to escape CMake lists.
# Thus arguments have to be escaped twice "\\\;".
# e.g. "cmd1\;cmd2\\\;arg1\\\;arg2" is executed like "cmd1 && cmd2 arg1 arg2"
add_test(
NAME t_main
COMMAND ${CMAKE_COMMAND}
-DCMDS=${test_cmd_main}\;${test_cmd_hepmc}\;${test_cmd_lhe}
-P ${PROJECT_SOURCE_DIR}/cmake/run_multiple_tests.cmake
)
# check HDF5 reader
if(${HighFive_FOUND})
add_executable(test_hdf5 ${tst_dir}/test_hdf5.cc)
target_link_libraries(test_hdf5 HEJ)
add_test(
NAME t_hdf5
COMMAND test_hdf5 ${tst_dir}/Wm9-g4-repack.hdf5
)
endif()
# check rivet interface
if(${RIVET_FOUND})
add_executable(check_rivet ${tst_dir}/check_rivet.cc)
target_link_libraries(check_rivet HEJ rivet::rivet HepMC::HepMC)
add_test(
NAME t_rivet
COMMAND check_rivet
)
endif()
# test boson reconstruction
add_executable(cmp_events ${tst_dir}/cmp_events.cc)
target_link_libraries(cmp_events HEJ)
add_test(
NAME t_epnu_2j_noW
COMMAND cmp_events ${tst_dir}/epnu2jLOFKL_unweight.lhe.tar.gz ${tst_dir}/epnu2jLOFKL_unweight_noW.lhe.gz
)
# test resummed result
add_executable(check_res ${tst_dir}/check_res.cc)
target_link_libraries(check_res HEJ)
if(${TEST_ALL}) # deactivate long tests by default
add_test(
NAME t_2j
COMMAND check_res ${tst_dir}/2j.lhe.gz 3.49391e+07 419684
)
add_test(
NAME t_3j
COMMAND check_res ${tst_dir}/3j.lhe.gz 2.37902e+06 25746.6
)
add_test(
NAME t_3j_unof
COMMAND check_res ${tst_dir}/3j.lhe.gz 133399 4688.83 unof
)
add_test(
NAME t_3j_unob
COMMAND check_res ${tst_dir}/3j.lhe.gz 105247 3449.45 unob
)
add_test(
NAME t_4j
COMMAND check_res ${tst_dir}/4j.lhe.gz 603713 72822.6
)
add_test(
NAME t_h_3j
COMMAND check_res ${tst_dir}/h_3j.lhe.gz 0.821622 0.0220334
)
add_test(
NAME t_h_3j_unof
COMMAND check_res ${tst_dir}/h_3j_uno.lhe.gz 0.0127362 0.000271555 unof
)
add_test(
NAME t_h_3j_unob
COMMAND check_res ${tst_dir}/h_3j_uno.lhe.gz 0.0130615 0.000224793 unob
)
add_test(
NAME t_epnu_2j
COMMAND check_res ${tst_dir}/epnu2jLOFKL_unweight.lhe.tar.gz 262.7 3
)
add_test(
NAME t_MGepnu_3j
COMMAND check_res ${tst_dir}/MGepnu3j_unweighted.lhe.gz 38.9512 1
)
add_test(
NAME t_MGemnubar_3j
COMMAND check_res ${tst_dir}/MGemnubar3j_unweighted.lhe.gz 24.1575 1
)
add_test(
NAME t_MGepnu_3j_unof
COMMAND check_res ${tst_dir}/MGepnu3j_unweighted.lhe.gz 9.63702 0.128355 unof
)
add_test(
NAME t_MGepnu_3j_unob
COMMAND check_res ${tst_dir}/MGepnu3j_unweighted.lhe.gz 9.70119 0.108436 unob
)
add_test(
NAME t_MGepnu_3j_splitf
COMMAND check_res ${tst_dir}/MGepnu3j_unweighted.lhe.gz 2.91995 0.0463182 splitf
)
add_test(
NAME t_MGepnu_3j_splitb
COMMAND check_res ${tst_dir}/MGepnu3j_unweighted.lhe.gz 3.40708 0.0550975 splitb
)
add_test(
NAME t_MGepnu_4j
COMMAND check_res ${tst_dir}/MGepnu4j_unweighted.lhe.gz 10.2542 0.135106
)
add_test(
NAME t_MGemnubar_4j
COMMAND check_res ${tst_dir}/MGemnubar4j_unweighted.lhe.gz 5.57909 0.0300496
)
add_test(
NAME t_MGepnu_4j_qqxmid
COMMAND check_res ${tst_dir}/MGepnu4j_unweighted.lhe.gz 0.732084 0.005 qqxmid
)
endif()
diff --git a/t/ME_data/ME_Wm_virt.dat b/t/ME_data/ME_Wm_virt.dat
new file mode 100644
index 0000000..345ee8e
--- /dev/null
+++ b/t/ME_data/ME_Wm_virt.dat
@@ -0,0 +1,1308 @@
+0.01683912057
+0.006315490024
+0.1879739475
+0.00118166225
+0.04908522866
+0.02944309287
+0.3618976047
+0.02936461884
+0.005186666224
+0.07698338072
+0.00229605523
+0.01342548827
+0.00183755584
+0.1767691771
+0.05344203068
+0.314358338
+0.004103205868
+0.001298293611
+0.01559307646
+0.2019975894
+0.004053422815
+0.008265986597
+0.018760765
+0.006481793979
+0.5521498915
+0.004419337599
+0.0105487255
+0.1078550543
+0.03163176098
+0.00878132809
+0.1022395659
+0.02001144533
+0.3034745605
+0.02637283516
+0.7898171846
+0.00367113051
+0.09470373429
+0.120642613
+0.07360931172
+0.01824548244
+0.1099634902
+0.05340680243
+0.1064152285
+0.2396056136
+0.2378579919
+0.0331986409
+0.06505296518
+0.002593380026
+0.00874467959
+0.1058698724
+0.001725173205
+0.0773776635
+0.4986869644
+0.003799430105
+0.04363364894
+0.01415817674
+0.063767484
+0.0298417444
+0.02063798366
+0.1060807282
+0.01769204966
+0.01692062105
+0.05817968257
+0.0006791971602
+0.0054958648
+0.05955753488
+0.005276849721
+0.1825531911
+0.08113267409
+0.0006772397084
+0.1784777945
+0.1481062735
+0.05604916923
+0.03687134683
+0.004241259617
+0.0718155356
+0.02506770009
+0.004186043196
+0.06261000249
+0.006686516551
+0.1161760623
+0.1705613721
+0.001625984559
+0.1112950578
+0.03376299477
+0.03551856614
+0.00458387231
+0.7142999326
+0.1162016152
+0.004883110782
+0.06088600884
+0.003274212801
+0.01619866689
+0.02697010824
+0.05528881163
+0.001252826254
+0.0005913357956
+0.04960470477
+0.7146066887
+0.7787638658
+0.008373498752
+0.942332993
+0.2813536455
+0.2643084756
+0.04595156353
+0.1448320931
+0.08712883108
+0.4106240119
+0.1308447661
+0.002564880914
+0.6491310673
+0.006692712441
+0.001420292185
+0.004021262045
+0.003389223101
+0.9074888048
+0.1100588192
+0.005528869361
+0.1029229675
+0.03235281219
+0.1388517476
+0.05611758016
+0.0443946354
+0.3142089614
+0.003020622119
+0.003898970214
+0.1660706963
+0.562095875
+0.01549750819
+0.7069342761
+0.08507120856
+0.4396157068
+0.04112733701
+0.03074816603
+0.01801601064
+0.2084959255
+0.03927566381
+0.01090277295
+0.02427795555
+0.1906752781
+0.2648679753
+0.001484846278
+0.0843993978
+0.2519995045
+0.02375717911
+0.004211906797
+0.09205397934
+0.0008801919694
+0.01905894948
+0.01119399279
+0.002160371593
+0.0001364227014
+0.1188366225
+0.2672907991
+0.03023631487
+0.01182887741
+0.03604877441
+0.1999935687
+0.3163240518
+0.002029891422
+0.004367283873
+0.05139199524
+0.1582933798
+0.6573036843
+0.2855256458
+0.02061140688
+0.002917363548
+0.753884286
+0.004445917099
+0.0004480726972
+0.221331876
+0.03505443884
+0.02552549981
+0.04612114815
+0.0002215843823
+0.05015004337
+0.1385742792
+0.5784759974
+0.474181064
+0.6224604252
+0.01435433063
+0.008266877704
+0.001564553737
+0.02016347996
+0.002721669645
+0.5728714945
+0.04989743908
+0.5259281039
+0.4127335211
+0.1790525668
+0.04559867807
+0.9280530374
+0.04476598093
+0.04389441558
+0.02179436769
+0.006123351666
+0.1223530374
+0.3097685627
+0.0328379244
+0.1518340665
+0.1381045417
+0.1979310999
+0.01602472616
+0.3563244034
+0.02507737065
+0.001041003307
+0.006590153138
+0.1485264221
+0.009874516262
+0.003507256897
+0.02148205098
+0.5616894653
+0.001574095082
+0.03522301512
+0.06407759414
+0.05656627297
+0.04523887293
+0.3386246063
+0.3338068133
+0.00739759675
+0.2268799661
+0.002277451262
+0.03551831431
+0.06130483255
+0.01919521571
+0.06374268043
+0.002215832379
+0.0112125418
+0.02016918027
+0.05719222908
+0.09002389599
+0.03981747887
+0.07148175259
+0.004740691502
+0.1248549233
+0.3746119965
+0.004431741957
+0.01621041432
+0.003190981257
+0.2235436672
+0.04823679447
+0.02850429161
+0.02235340697
+0.01358312969
+0.321786096
+0.09225984969
+0.0557865481
+0.9565089691
+0.01129614218
+0.2002171015
+0.1098296043
+0.1155967261
+0.008563014337
+0.006507726912
+0.1095362633
+0.03691734868
+0.1508580509
+0.01568122576
+0.00399380285
+0.002020085014
+0.211909408
+0.005998862553
+0.2428320085
+0.1876158996
+0.08302219712
+0.0243183049
+0.0245126998
+0.02231336874
+0.2964637535
+0.2484145346
+0.1962281273
+0.4687396845
+0.007510860452
+0.02734155079
+0.03191690116
+0.01970772397
+0.01355897494
+0.1309169532
+0.01576523731
+0.4371790813
+0.07074827005
+0.5089762441
+0.02910069659
+0.4398411283
+0.07916725832
+0.3207337796
+0.0173077317
+0.0004086809708
+0.1174914962
+0.006835285978
+0.05998755875
+0.01442173755
+0.01993844862
+0.918210305
+0.06368267623
+0.07091479288
+0.09196316036
+0.3857781983
+0.04847593991
+0.1110592391
+0.04120754474
+0.000826699776
+0.01788533204
+0.00376561513
+0.03552701394
+0.02997860335
+0.0004680945603
+0.009938551888
+0.001474877809
+0.01689388106
+0.07673140539
+0.0008117712764
+0.0001067013048
+0.003922394923
+0.001626390495
+0.05289194291
+0.08370395494
+0.006875205415
+0.05703434265
+0.08803458621
+0.03367779586
+0.1440070855
+0.1820869106
+0.1741430142
+0.02980245466
+0.07209331358
+0.03571552688
+0.02022761253
+0.000203701588
+0.2287599384
+0.02114670078
+0.01433428517
+0.008049573502
+0.539033926
+0.06150847771
+0.01225420271
+0.1382572135
+0.1052054653
+0.01717576074
+0.1142731887
+0.008058302563
+0.005711860966
+0.07667485537
+0.01151964024
+0.1499667573
+0.02837111443
+0.0005512236156
+0.02155070597
+0.06050179694
+0.5323472183
+0.1060369372
+0.002486663692
+0.01600570607
+0.02335153939
+0.1697769626
+0.02015165932
+0.3897747856
+0.03004844335
+0.1864634242
+0.03216699042
+0.009631998973
+0.01049494338
+0.2021203538
+0.002581033908
+0.04010287102
+0.08456674135
+0.167987119
+0.06466631282
+0.002251776707
+0.01795788599
+0.007328304009
+0.05781602467
+0.005795469169
+0.02895186272
+0.05812642537
+0.03279241109
+0.002064549
+0.1853304009
+0.007920811909
+0.002539061581
+0.06456489348
+0.006561193614
+0.05195541349
+0.02557782819
+0.0448385804
+0.003119033063
+0.0008347514509
+0.3141899663
+0.05357053665
+0.05644413404
+0.004784496202
+0.4196698055
+0.05718875141
+0.006530652498
+0.008747294341
+0.01620923573
+0.1894163296
+0.01204066255
+0.05455764164
+0.1634065222
+0.01232822328
+0.4727375735
+0.008828886726
+0.3943142718
+0.1813247468
+0.162548496
+0.5778812348
+0.0001690093016
+0.1495839309
+0.1129175478
+0.5174653768
+0.1482556201
+0.01069713243
+0.04917209182
+0.0424996266
+0.784932962
+0.1193538854
+0.8710246528
+0.01641012197
+0.009439061668
+0.005392883043
+0.06371109553
+0.0006864723366
+0.6022042512
+0.04554768091
+0.3404755373
+0.09725979028
+0.0337442648
+0.000509392816
+0.161286636
+0.0998915448
+0.1163787545
+0.03074363469
+0.136951166
+0.003038797181
+0.0373884415
+0.3200285044
+0.04560301477
+0.7556921001
+0.04123275603
+0.1679007887
+0.007344798449
+0.03138861674
+0.1568709067
+0.2095455608
+0.1203845917
+0.02948422094
+0.04674863904
+0.03789548947
+0.0004018159849
+0.009791449371
+0.02733658128
+0.0481724811
+0.002315871342
+0.1743190216
+0.01665127739
+0.4065649279
+0.01393670376
+0.1546601977
+0.4191893601
+0.008758185606
+0.001049408677
+0.1008694118
+0.5194755447
+0.5883806949
+0.006013344874
+0.01875910813
+0.02358346956
+0.1247418421
+0.005385991584
+0.004275780565
+0.1390483753
+0.009586613985
+0.0005333122289
+0.1052513783
+0.04466737559
+0.3733403637
+0.000520555302
+0.00840426491
+0.15234505
+0.01755463656
+0.01353812066
+0.07055438001
+0.04561497373
+0.007880015539
+0.003991940957
+0.003478119119
+0.329174012
+0.6176195929
+0.01983817134
+0.07020198374
+0.004144385683
+0.0005862727242
+0.3135935623
+0.0003701057758
+0.08519714138
+0.1087041726
+0.07966901727
+0.2585268388
+0.1257306586
+0.1672000049
+0.04318304793
+0.241877383
+0.05547878135
+9.86548506e-05
+0.004861042767
+0.01234960994
+0.4837917995
+0.06567645925
+0.03332268734
+0.01879042824
+0.03998588831
+0.02999835011
+0.001881237045
+0.172356941
+0.01143068122
+0.09033857544
+0.03407353124
+0.04889015665
+0.0006173352616
+0.1064485724
+0.0682327051
+0.06763234176
+0.2899268502
+0.002516925899
+0.007746729572
+0.002694516832
+0.02768500663
+0.0007880414542
+0.2708120335
+0.2661709128
+0.06764750162
+0.005705765898
+0.003227404032
+0.03208802484
+0.01483817929
+0.7837339741
+0.595061823
+0.4395747008
+0.02337819559
+0.1603230914
+0.006124358787
+0.04923512252
+0.03205041069
+0.02740308441
+0.008005449521
+0.002744043401
+0.002738490976
+0.009147246305
+0.1922483309
+0.09235575674
+0.001653266701
+0.02286277636
+0.07143169361
+0.1021757945
+0.001011177339
+0.02731394866
+0.1627476634
+0.6736309628
+0.02941991907
+0.08234142558
+0.03009954578
+0.5461436065
+0.07091519562
+0.02511589157
+0.005801895904
+0.004099838259
+0.03087063629
+0.0003789677158
+0.02119633847
+0.007818672857
+0.03938725235
+0.1324381873
+0.09245774664
+0.009940518531
+0.009190447859
+0.002488150786
+0.005965572154
+0.0008241658627
+0.1974756448
+0.04551079127
+0.02270004534
+0.0617764969
+0.1015343742
+0.01348491332
+0.4013119056
+0.05273582509
+0.0980434973
+0.07035581081
+0.08219161169
+0.01112495941
+0.5975242315
+0.01446739573
+0.1032423801
+0.5491775881
+0.1096551301
+0.004027974709
+0.003412221062
+0.1216639301
+0.3623200729
+0.0001309877923
+0.03592113235
+0.01561327329
+0.001503739657
+0.4216122876
+0.09635872358
+0.01450449603
+0.03171149638
+0.03076606542
+0.2211954193
+0.5020643844
+0.6303241811
+0.00909603767
+0.02118599651
+0.003301989911
+0.3309585672
+0.00947501795
+0.05046893828
+0.07733168582
+0.1024110952
+0.02909064243
+0.07552114526
+0.2865124998
+0.0133400448
+0.001690204768
+0.02095582222
+0.02638848523
+0.1181508242
+0.009910638931
+0.02088039451
+0.01451604934
+0.01366367472
+0.09363889207
+0.03815642524
+0.05455415523
+0.03049026311
+0.007494799396
+0.3226798623
+0.008606269124
+0.2981802699
+0.05233929444
+0.4902686969
+0.06131405697
+0.1928888321
+0.01405957995
+0.1183092971
+0.5529714932
+0.2542815498
+0.1902151714
+0.001979933208
+0.006723535266
+0.01107658453
+0.06383939846
+0.3286147722
+0.005894184298
+0.05483994298
+0.2384758587
+0.5998124999
+0.006999189644
+0.4323005348
+0.01415583481
+0.0006160130875
+0.7179257323
+0.000969276989
+0.02307601495
+0.004838695733
+0.01129327277
+0.03008521717
+0.004324092167
+0.0004683964067
+0.003172833016
+0.01306062127
+0.009994906539
+0.01845784819
+0.03182753602
+0.3530731903
+0.3964181419
+0.002408911117
+0.015706207
+0.05559979666
+0.0125396882
+0.01029057917
+0.03044581788
+0.03602586354
+0.02032195594
+0.1944275582
+0.08070198259
+0.153817633
+0.004461587128
+0.01808682458
+0.0514355392
+0.07890079287
+0.1099501114
+0.01156012712
+0.04588787319
+0.002654355123
+0.007043048989
+0.1582170618
+0.0004820815722
+0.2200162448
+0.0170676291
+0.1005063146
+0.03705195877
+0.003874940957
+0.2881924336
+0.005018252403
+0.260123739
+0.0175121664
+0.5978354645
+0.004025083949
+0.01529332472
+0.01215406769
+0.006674770177
+0.01153643127
+0.005988793126
+0.01018099588
+0.02243046232
+0.008540705409
+0.1338754979
+0.001540611861
+0.214520715
+0.04832114131
+0.004132064992
+0.02472620842
+0.01653707302
+0.08661697187
+0.001604335982
+0.1537812168
+0.2303661265
+0.1787539893
+0.1263983156
+0.01973405303
+4.895679133e-05
+0.002048740883
+0.0007272228954
+0.01668123017
+0.04607116056
+0.006931140128
+0.2057457469
+0.01570025711
+0.03052421526
+0.003029748143
+0.2177590748
+0.123627622
+0.00151135486
+0.01637705959
+0.001106774063
+0.0003149916937
+0.1418096884
+0.03507966408
+0.01417754103
+0.495681153
+0.1814924612
+0.002384728559
+0.009625012222
+0.0926987369
+0.002047565606
+0.002004658757
+0.002157606671
+0.06220078922
+0.001130625746
+0.02849901735
+0.007144091688
+0.07056484738
+0.002465461586
+0.006046128507
+0.02080248674
+0.0005912738335
+0.3276262488
+0.01583919441
+0.007832143794
+0.8466850887
+0.01349336534
+0.02183142551
+0.1024088632
+0.0009016722558
+0.001096764152
+0.005296648806
+0.01095461012
+0.0001332231557
+0.002470281734
+0.006183589311
+0.1049752712
+0.005904438907
+0.04337526979
+0.008374340749
+0.0009266397625
+0.00899117539
+0.1215774573
+0.02194788861
+0.1246134019
+0.00427330506
+0.003358595485
+0.001882001464
+0.0007824694481
+0.03097257654
+0.02748929265
+0.05761955127
+0.0004792992546
+0.003377754841
+0.1005317651
+0.04424027385
+0.004551067111
+0.003127628697
+0.0001714390485
+0.004668140235
+0.001797478538
+0.03712308849
+0.1323092243
+0.1761452687
+0.002317834859
+0.005764697832
+0.01346901848
+0.003345905915
+0.001499644075
+0.2184921515
+0.00241956408
+0.01358777782
+0.001846250731
+0.2477529974
+0.002119901991
+0.00506225731
+0.03211373091
+0.0001410731504
+0.04143965989
+0.08417687886
+0.05405742566
+0.1624481315
+0.002345588704
+0.1217886351
+0.08032742876
+0.002422945325
+0.0006452907846
+0.01591581154
+0.02919481345
+0.01625213138
+0.002336102258
+0.00590456491
+0.02188431307
+0.01037243444
+0.002581083424
+0.07226047097
+0.005295517096
+0.01065586899
+0.001473988574
+0.003408318001
+0.01497939632
+0.005592347027
+0.02842297814
+0.07267630043
+0.008965237856
+0.003372013025
+0.02899254701
+0.1100703807
+0.01945184961
+0.0004328204102
+0.04784569445
+0.007533106447
+0.08256425158
+0.08579093571
+4.658007794e-05
+0.003460808052
+0.0002399723566
+0.07301421619
+0.01140401704
+0.1486323662
+0.04388790621
+0.0684011798
+0.06560652665
+0.0373267137
+0.04733614526
+0.1106628785
+0.06772915971
+0.1258783907
+0.001910120036
+0.03920263315
+0.002089702761
+0.04153237697
+0.000776142461
+0.009504463813
+0.0003827440016
+0.0586323889
+0.009157363711
+0.00162065743
+0.06298940777
+0.0008074361163
+0.01382789188
+0.00607622627
+0.0379462562
+0.001265350001
+0.0192903207
+0.007442938339
+0.1588463163
+0.007257808975
+0.00845172528
+0.008664252754
+0.0005993785778
+0.001422666958
+0.1321821365
+0.04708830468
+0.07569191564
+0.0002841367164
+0.02381166823
+0.007028608586
+0.008208136559
+0.0001560456746
+0.00043509108
+0.0006911432628
+0.1398613061
+0.00127112238
+0.1108035004
+0.3731392563
+0.004241782757
+0.03291774902
+0.05771610588
+0.00569525263
+0.01418558248
+0.5496211944
+0.07699536148
+0.005110404436
+0.01144863356
+0.01335699231
+0.008524880766
+0.003234528408
+0.002425630686
+0.004122667633
+0.008640478296
+0.0385721
+0.000456002288
+0.2536129322
+0.2665540265
+0.09740918827
+0.0009345016602
+0.08337148764
+0.0001262676058
+0.00548598007
+0.05231537415
+0.00686578848
+0.0006974522249
+0.0001354307344
+0.007060433792
+0.001756568324
+0.004684320169
+0.001448132912
+0.007824762993
+0.001866996378
+0.000994287701
+0.02111245457
+0.05648639865
+0.005329822732
+0.001674496271
+0.2618448087
+0.007006943344
+0.3301809411
+0.02970506627
+0.004060053112
+0.004746857153
+0.2011316673
+0.002873609436
+0.00715418326
+0.02640452207
+0.0001334709326
+0.02450444252
+0.01232267395
+0.008037866967
+0.1774432528
+0.02165336294
+0.0002803963192
+0.03337634266
+0.003372660343
+0.003457286099
+0.1908575968
+0.002771834549
+0.0181741213
+0.0007320340025
+0.002699753458
+0.1615984676
+0.03872548076
+0.0004157991795
+0.0361609981
+0.1898823837
+0.05685258039
+0.0230752233
+0.0006219313946
+0.0006197847956
+0.004224678704
+0.00841687534
+0.0715284052
+0.182841963
+0.003693972346
+0.01588715642
+0.002136325668
+0.677584552
+0.01096198616
+0.01881521954
+0.007802777891
+0.005652421446
+0.0207126495
+0.002055959398
+0.003537393011
+0.14211883
+0.08738624496
+0.002292725418
+0.09620714473
+0.0003672240055
+0.004751588124
+0.003617518643
+0.3702773315
+0.0004031604396
+0.004197403122
+0.02568344042
+0.004415002239
+0.09744836875
+0.06150864841
+0.002111831058
+0.0003455363639
+0.0001547143335
+0.00266104106
+0.0003592136461
+0.002037210798
+0.008271738994
+0.003990810048
+0.08959369049
+0.000981859553
+0.004506406972
+0.007492668007
+0.04592332946
+0.00430412108
+0.02978077928
+0.02898202451
+0.02931206162
+0.2122352866
+0.0032104534
+0.003151724683
+0.0630606102
+0.003804565378
+0.0006128306306
+0.02066993808
+0.04313719185
+0.1979417603
+0.08612615012
+0.04803798699
+0.009820743952
+0.026130676
+0.04275380594
+0.01182046683
+0.009758782241
+0.1183706243
+0.001177356706
+0.007659369646
+0.003390997015
+0.01217220116
+0.01065448785
+0.002641234174
+0.06999882392
+0.003494320211
+0.2162780526
+0.000964159964
+0.001912495444
+0.04508153013
+0.02038194896
+0.003291435681
+0.02862450222
+0.0726875079
+0.002641060665
+0.005876024595
+0.0004123115917
+0.0008131104677
+0.07902911471
+0.02207807833
+0.00611900485
+0.003352102125
+0.0008253105865
+0.1201425996
+0.0828917643
+0.02707830029
+0.05315603506
+0.0507064907
+0.02629793778
+0.02791266435
+0.001275179933
+0.0161616233
+0.002235195429
+0.000883803872
+0.1541754597
+0.04985732957
+0.01828223994
+0.001940972421
+0.005295761902
+0.09933641985
+0.005393585647
+0.02435342441
+0.0006181193183
+1.843559115e-05
+0.005203752417
+0.00704951074
+0.00480337598
+0.002181845046
+0.06690542128
+0.02452848585
+0.003864828336
+0.001869946345
+0.3751444659
+0.4071147551
+0.01546282162
+0.08319220117
+0.003389238948
+0.05998529169
+0.01179704247
+0.000560758559
+0.04735416608
+0.009981427311
+0.04568096648
+0.01757946191
+0.100543834
+0.004891903896
+0.06317579647
+0.4161062152
+0.03002457329
+0.0006099915002
+0.0002805834305
+0.2427167271
+0.003999715036
+0.24612795
+0.1882460376
+0.00136987004
+0.03631902414
+5.396514248e-05
+0.003811088779
+0.01293490384
+0.2446901172
+0.01099075371
+0.01173455826
+0.200527379
+0.09247196437
+0.001449003117
+0.0002744463186
+0.1553710328
+0.05850172322
+0.01538369434
+0.000445699708
+0.5128001063
+0.001490203507
+0.01965667404
+0.004257378977
+0.01748792681
+0.08956201562
+0.6169701155
+0.02652613476
+0.01913854515
+0.1586463725
+0.003527098229
+0.07612626349
+0.07088774377
+0.330819201
+0.004418085175
+0.150415659
+0.02436981563
+0.007181197135
+0.03946173092
+0.3424170933
+0.0004087693636
+0.003267761713
+0.009539270413
+0.01974620081
+0.02937512169
+0.01960775086
+0.0009392262536
+0.00126180813
+0.005615412789
+0.1162094067
+0.01086964687
+0.1477398879
+0.2865011171
+0.07302363864
+0.0001302803788
+0.001510052056
+0.003930751612
+0.252439199
+0.1241535271
+0.4273747976
+0.01764770569
+0.1109060879
+0.07364911205
+0.001771204248
+0.02790726331
+0.02302940667
+0.04756468945
+0.006307636166
+0.03758901356
+0.01740659975
+0.009091326853
+0.02604288992
+2.123532773e-05
+0.02245165698
+0.01789004958
+0.02740411161
+0.0006699221317
+0.05192404838
+0.01881439481
+0.02525696603
+0.03101593319
+0.002041711317
+0.004550319566
+0.0004966142638
+0.460967624
+0.002153740035
+0.0177596458
+0.1217531086
+0.00289831013
+0.05055906705
+0.01296587116
+0.1485848803
+0.2452042421
+0.1066585351
+0.0302304498
+0.0556088262
+0.5444404682
+0.01879246502
+0.0008026672491
+0.00322483235
+0.0877340067
+0.01062183801
+0.001366961688
+0.007798506575
+0.02516984898
+0.238666145
+0.006250415303
+0.01581726597
+0.1756138029
+0.0647242422
+0.6982537664
+0.01245621955
+0.0574559801
+0.0001741943808
+0.02181845361
+0.02912664276
+0.8271617863
+0.06176021296
+0.01637984417
+0.02504462414
+0.003097657358
+0.0236421829
+0.01008834063
+0.03550815143
+0.0001644551736
+0.002865288847
+0.0643478537
+0.02357361875
+0.01318196074
+0.06932650254
+0.01296217626
+0.01511410749
+0.001354544977
+0.152743933
+0.01525134409
+0.006140409786
+0.02054249452
+0.1545885753
+0.01290363538
+0.01055924699
+0.07103056067
+0.01286924462
+0.1122407442
+0.0616262185
+0.07902653454
+0.01211692264
+0.01931826846
+0.003965712992
+0.004172916415
+0.008328158517
+0.6667038276
+0.04642213514
+0.004767663167
+0.01427584801
+0.003173996806
+0.1088298651
+0.008635880489
+0.0005066822185
+0.3689114182
+0.005874824117
+0.005681963269
+0.2068353353
+0.05860694212
+0.4280623318
+0.0046417093
+0.1009134867
+0.005375178928
+0.002370665743
+0.04851483339
+0.02219447049
+0.01712019476
+0.01480567286
+0.03137744128
+0.03780749231
+0.1929664843
+0.01307637585
+0.1199631138
+0.006198033463
+0.003536166144
+0.02670750895
+0.02742185292
+0.004232145585
+0.007358265677
+0.01767826917
+0.00757923873
+0.1012868938
+0.1906809291
diff --git a/t/ME_data/ME_Wp_virt.dat b/t/ME_data/ME_Wp_virt.dat
new file mode 100644
index 0000000..60d8720
--- /dev/null
+++ b/t/ME_data/ME_Wp_virt.dat
@@ -0,0 +1,1289 @@
+0.0007131813132
+0.03464812395
+0.5762913273
+0.1648889657
+0.3867098883
+0.07214642948
+0.02510163794
+0.005001600171
+0.06179436687
+0.05414664374
+0.1171146158
+0.04062105794
+0.0807502394
+0.118957952
+0.08092267248
+0.03316711843
+0.00644070458
+0.0009017647914
+0.01346754609
+0.2354310041
+0.1439701028
+0.007388442418
+0.004668022661
+0.01778464336
+0.02786096488
+0.2227584666
+0.002280708285
+0.03170974095
+0.01788260839
+0.01312607285
+0.07761127662
+0.1509906657
+0.001895360088
+0.04942571182
+0.5243628293
+0.06922238165
+0.0006515985636
+0.3674504474
+0.4011571938
+0.0507066186
+0.004997448911
+0.1528845336
+0.2850999374
+0.005820022871
+0.1080417609
+0.007347030545
+0.003550626297
+0.2668637307
+0.006604956706
+0.01574446566
+0.251711791
+0.05394446839
+0.00504528271
+0.0008605782786
+0.003981062866
+0.002431184338
+0.02073588655
+0.005708198054
+0.02429487592
+0.01656046481
+0.05490921519
+0.003742132553
+0.1398445435
+0.02124407836
+0.006672952015
+0.02660312469
+0.06899228377
+0.003346850891
+0.004084831723
+0.349121933
+0.4142530006
+0.4513895189
+0.02277022067
+0.0659367449
+0.2006934634
+0.9683273226
+0.3819801331
+0.02869661779
+0.05431904635
+0.05246972526
+0.4740620338
+0.04056636208
+0.01880867731
+0.4323791975
+0.007900908921
+0.05055126265
+0.008380052343
+0.08005540893
+0.2369024716
+0.3721198274
+0.4932586161
+0.04300145033
+0.03136472631
+0.02404869157
+0.0842241824
+0.003850891516
+0.009466920606
+0.0001575181548
+0.01027734051
+0.05819198708
+0.1241228185
+0.002774468109
+0.3372077383
+0.04593187526
+0.06240708079
+0.009575935457
+0.004664034699
+0.01079549009
+0.005247064898
+0.2081027838
+0.1257339264
+0.03576613943
+0.008813629118
+0.3595486912
+0.08926585597
+0.5309410322
+0.4577329957
+0.001263929961
+0.03668442441
+0.001069246176
+0.0006900085368
+0.004803451455
+0.02820410743
+0.05469088226
+0.003446400934
+0.0006962135405
+0.05619875463
+0.00752119908
+0.001359796538
+0.04707874641
+0.0009948485746
+0.2517767702
+0.06114789455
+0.0007035335152
+0.121796523
+0.1585058187
+0.01522522481
+0.0002443214829
+0.04058843701
+0.4042069949
+0.02100059735
+0.01627969591
+0.03643221833
+0.0005938573837
+0.2160398397
+0.02350587086
+0.004971605702
+0.0150856099
+0.297494045
+0.2172514804
+0.002243672794
+0.07552761503
+0.5445802771
+0.02293464192
+0.01436325435
+0.00361771932
+0.05593044877
+0.1682446441
+0.02157476184
+0.003325786457
+0.002350164564
+0.003984399686
+0.1284578151
+0.2010976205
+0.0006556316179
+0.004618146086
+0.2302538186
+0.01031813264
+0.2234835773
+0.05397076964
+0.006103879352
+0.01717089843
+0.0003409500987
+0.06869762634
+0.001555188787
+0.04206017237
+0.8007793795
+0.1319224948
+0.265518449
+0.01430441763
+0.008004469955
+0.3047482992
+0.03708856552
+0.005430445828
+0.04161801961
+0.2125045215
+0.1062109553
+0.06885488192
+0.01118391772
+0.003610495631
+0.01129961999
+0.1673114528
+0.2700366523
+0.0353792368
+0.03892257651
+0.03187723031
+0.1410586486
+0.001756617261
+0.007244726618
+0.1012320466
+0.04027596011
+0.01939254284
+0.01915820245
+0.03242587112
+0.1858178336
+0.1721292039
+0.01196307336
+0.1929707418
+0.02237116341
+0.1072640406
+0.001528073409
+0.02377526135
+0.02573272563
+0.2126509411
+0.02716776857
+0.0009460591972
+0.07301766497
+0.003447285768
+0.007005038577
+0.002103253993
+0.02911617547
+0.009919580838
+0.009623954665
+0.320849284
+0.9664201324
+0.02333960542
+0.07539815576
+0.3390416818
+0.008869601203
+0.0157086534
+0.005075531907
+0.009303180852
+0.02148528195
+0.003667390682
+0.01482210807
+0.04366201578
+0.2188853607
+0.9258224115
+0.1044402533
+0.04355430285
+0.4457236606
+0.0432173883
+0.7728109923
+0.005832887993
+0.06164701594
+0.1072121552
+0.003771759745
+0.001284903694
+0.002493166896
+0.03618041477
+0.7089670682
+0.00966014665
+0.1365854978
+0.004027598989
+0.09257452709
+0.0202119323
+0.006372476714
+0.0008207196405
+0.2073251775
+0.007622329324
+0.01453788687
+0.0004557086042
+0.2498656165
+0.04671385495
+5.352699085e-05
+0.3053474582
+0.1476879129
+0.001732625384
+0.08433611845
+0.0419562933
+0.003251788265
+0.003094836824
+0.005036007146
+0.06135993564
+0.0005970637448
+0.04118587806
+0.05339517373
+0.1172841157
+0.1246483553
+0.05229631511
+0.03956119545
+0.01735441654
+0.005497567654
+0.09817618467
+0.137135296
+0.1308482692
+0.06795596689
+0.09749807848
+0.05828392631
+0.001113514976
+0.000325198587
+0.08830289301
+0.5519088257
+0.1273111301
+0.2535308848
+0.0009756098488
+0.08432074406
+0.2549574288
+0.006235536507
+0.09787296296
+0.005412711109
+0.03232579727
+0.04309783002
+0.01867657716
+0.1437786713
+0.002550503921
+0.03849843084
+0.3048304048
+0.01057621594
+0.008623398241
+0.1865851723
+0.01443452254
+0.005426720957
+0.2568435713
+0.04737759806
+0.0004396814945
+0.2321795736
+0.02178890002
+0.06674462504
+0.1620793351
+0.02910073452
+0.3465413548
+0.002578252978
+0.40316664
+0.116576012
+0.0530692537
+0.03041975911
+0.1998690409
+0.5542315819
+0.01218222616
+0.02000092035
+0.1836668299
+0.01945895759
+0.036684291
+0.005460658197
+0.09671467791
+0.1583939738
+0.5024488111
+0.02004498654
+0.004439137951
+0.000138753853
+0.1613428604
+0.001022056109
+0.9008943122
+0.0272320859
+0.06254034606
+0.1447102589
+0.004628274727
+0.1961686086
+0.004243862173
+0.02081055782
+0.01516511057
+0.003358546078
+0.0106000375
+0.2129450847
+0.03318966109
+0.1938620744
+0.1673172293
+0.6789593275
+0.08430802531
+0.01023806206
+0.1288005596
+0.01180792297
+0.152205769
+0.1064692317
+0.03189624795
+0.006711438191
+0.06433786709
+0.6265631979
+0.009532764386
+0.001511590447
+0.004841532685
+0.8518456181
+0.1366517135
+0.03483586341
+0.0006808081769
+0.005911888591
+0.01054560029
+0.3763431335
+0.05927084614
+0.1554806703
+0.1279153772
+0.004341804883
+0.002909277852
+0.02274461622
+0.003080648815
+0.07910527423
+0.1879484004
+0.1151707549
+0.06066600361
+0.02070570863
+0.2223983719
+0.003345902395
+0.01055804604
+0.1015332179
+0.01938583158
+0.4751046173
+0.03405994735
+0.0342511021
+0.0001777113903
+0.05504311025
+0.001314019762
+0.03046049324
+0.01184813247
+0.003127170749
+0.07916490321
+0.2986808301
+0.005458674185
+0.01435108691
+0.01524558259
+0.004122968354
+0.00709198127
+0.039229486
+0.01767785505
+0.02608767192
+0.5182172715
+0.004260839545
+0.2858192786
+0.8738602435
+0.07751938603
+0.002412030599
+0.1798063876
+0.008361157693
+0.02585702817
+0.003910447531
+0.1628857145
+0.1634066781
+0.1059566605
+0.02573809984
+0.02611235559
+0.01046314595
+0.01127081009
+0.005929005823
+0.197187513
+0.005062840063
+0.05163368206
+0.02176036055
+0.1172074229
+0.01256236397
+0.01358912168
+0.008106143692
+0.1425753715
+0.03596690231
+0.07017846616
+0.008918075339
+0.06307547372
+0.04347112487
+0.001710514088
+0.1306186404
+0.2023938137
+0.001987689255
+0.006039922671
+0.01917477414
+0.03620153643
+0.8436618654
+0.1057196749
+0.4001393382
+0.06665848377
+0.01713459345
+0.04089388529
+0.09321163667
+0.01487843976
+0.03706675049
+0.008286106582
+0.007853070959
+0.1166940537
+0.2922973333
+0.003377979675
+0.3912833264
+0.001999661423
+0.001638482271
+0.06069016618
+0.00672188115
+0.003085051702
+0.4895487922
+0.006081179554
+0.03915696906
+0.08698349274
+0.2009592085
+0.1672214914
+0.0345336785
+0.1335053832
+0.3778252715
+0.154430686
+0.1443716555
+0.07054634463
+0.01949926124
+0.08519667332
+0.02139650988
+0.3119507957
+0.009735169892
+0.05220977296
+0.2477187411
+0.003637141769
+0.004659826006
+0.01270924715
+0.4383870119
+0.1107577139
+0.06805273691
+0.04934275109
+0.02394273633
+0.02478532022
+0.02274980913
+0.003609136041
+0.002984883219
+0.01751402274
+0.001095198944
+0.02720827904
+0.00343217768
+0.214115065
+0.002525059784
+0.004109274329
+0.02433369274
+0.300438508
+0.1440243689
+0.07775513618
+0.05701621594
+0.6070052595
+0.1850279912
+0.001321453103
+0.6196846485
+0.3113557116
+0.09889129708
+0.1653665098
+0.03512524208
+0.6018373888
+0.1262652275
+0.5801230391
+0.1195320071
+0.005611704135
+0.01940904335
+0.07821921333
+0.009879152224
+0.03425249234
+0.001767662073
+0.006242431825
+0.0428964215
+0.1665595595
+0.5774415774
+0.05961148055
+0.08187921672
+0.05659682871
+0.003023150903
+0.2070336472
+0.001343941024
+0.03325137209
+0.01957242718
+0.03577917845
+0.010169671
+0.02774483104
+0.001630821358
+0.108287031
+0.609658251
+0.3791868908
+0.0007018641833
+0.003221698891
+0.06620591567
+0.1278260358
+0.009594583332
+0.02515033579
+0.006495216883
+0.005570395408
+0.004661183182
+0.04285401345
+0.4502423438
+0.004838001463
+0.04793284278
+0.002083126431
+0.006736066056
+0.463487226
+0.0004367571146
+0.1280059447
+0.0006422187866
+0.05537269202
+0.007309718633
+0.001959640091
+0.07242215555
+0.01327958989
+0.08669178233
+0.008780799886
+0.05485125235
+0.002636683097
+0.009106752968
+0.0422685331
+0.004295254252
+0.4396991916
+0.0004833248908
+0.02351143925
+0.001001620219
+0.1333002068
+0.003712239439
+0.001975859902
+0.01284392099
+0.1447108217
+0.108791166
+0.07564986876
+0.003806595933
+0.004221505106
+0.1279808352
+0.3259221808
+0.07783409895
+0.01888345404
+0.01202911486
+0.05398993477
+0.1135032429
+0.005659503568
+0.001344119461
+8.30409581e-05
+0.2191086821
+0.01835430695
+0.002045183969
+0.2226144207
+0.0004118373536
+0.1236610017
+0.02327573957
+0.01223980797
+0.1026598895
+0.02124086531
+0.001569784302
+0.002620261432
+0.1975121917
+0.06198573954
+0.2433893047
+0.2102793261
+0.003836468098
+0.05137461119
+0.441639393
+0.03316002521
+0.01709009336
+0.01505758766
+0.01187473924
+0.004637262677
+0.5666467733
+0.2950707033
+0.1017025038
+0.1766421108
+0.01740231913
+0.004794227552
+0.2492287407
+0.000704157624
+0.193173529
+0.0006942494207
+0.005860105411
+0.005443175356
+0.0009329587221
+0.2386676764
+0.002552597988
+0.02607920269
+0.1727256246
+0.0273561282
+0.03514041742
+0.02698689171
+0.02976383558
+0.2380586589
+0.01404635978
+0.02332119278
+0.003185628168
+0.01542176469
+0.0812595991
+0.5394257085
+0.277462345
+0.06342706653
+0.03930040095
+0.0296599785
+0.06032443559
+0.02889016594
+0.1016741115
+0.175624855
+0.01102198842
+0.03374870699
+0.3864352504
+0.1570383555
+0.2313377866
+0.0007688022725
+0.0181816662
+0.02004602705
+0.0533321009
+0.0249519593
+0.006082828794
+0.008047271128
+0.03287773709
+0.130332936
+0.00322237073
+0.0001092623224
+0.110752622
+0.1884033291
+0.02490483907
+0.002971154423
+0.01025704273
+0.0830185572
+0.3007118563
+0.1870523928
+0.009120682867
+0.003077020544
+0.02751287189
+0.400616504
+0.003480823627
+0.01356210991
+0.00393458836
+0.001993747284
+0.007743596
+0.02686037684
+0.02749259822
+0.02840918639
+0.01916341897
+0.3596915684
+0.01039463691
+0.7458136055
+0.003629865708
+0.005005587897
+0.4992911568
+0.008445223378
+0.05366391662
+0.004384512012
+0.9963663107
+0.005161097878
+0.0006805797866
+0.1002492114
+0.07058799755
+0.005635940217
+0.01932453701
+0.01128745443
+0.5177219469
+0.05496106393
+0.06849892488
+0.5795140177
+9.394638705e-05
+0.0003345661735
+0.001797053061
+0.448350784
+0.001864579768
+0.3757453601
+0.004306830413
+0.0198428989
+0.02158166764
+0.1138529998
+0.3873475628
+0.007049619707
+0.08675207713
+0.002767882982
+0.04011063554
+0.1509317909
+0.0006990058815
+0.05045478843
+0.1034532461
+0.0242430639
+0.04245131918
+0.02064313369
+0.04493056841
+0.04965685278
+0.001935572294
+0.04793381728
+0.19817416
+0.01790891557
+0.07501390822
+0.009421804878
+0.2213245641
+0.03140164392
+0.126798225
+0.0535222846
+0.2524209814
+0.1904250455
+0.0387278687
+0.006677117492
+0.002924805785
+0.05581569655
+0.03289967184
+0.0101571206
+0.0113589938
+0.1003798099
+0.06576690344
+0.03276665827
+0.02031614415
+0.1487523574
+0.02796934177
+0.009245147548
+0.006856674256
+0.003526818737
+0.1489139016
+0.1462500338
+0.1218316633
+0.2506591817
+0.2689022397
+0.64050617
+0.04841921888
+0.0004157156439
+0.02943223455
+0.02524952423
+0.2363104148
+0.04590084683
+0.00311347648
+0.0001581945432
+0.004213060766
+0.56663924
+0.01056809983
+0.3939400856
+0.6982564526
+0.003097173155
+0.0537257112
+0.2599608181
+0.1503026744
+0.1121090081
+0.05732632943
+0.1870584167
+2.012046945e-05
+0.01248152261
+0.007312759788
+0.2223563006
+0.2855185778
+0.006648974223
+0.2716585041
+0.004010449124
+0.02131231336
+0.167774021
+0.08747026046
+0.009812498599
+0.02676289878
+0.003313270404
+0.3195135032
+0.002140283898
+0.0003067122218
+0.4051536991
+0.05739347976
+0.002089035658
+0.1209219608
+0.0292267727
+0.003719508715
+0.02703718214
+0.09438741077
+0.006341374238
+0.01366234259
+0.02205083481
+0.178987926
+0.216959401
+0.003531417374
+0.04089641223
+0.01956655884
+0.02222175987
+0.05463562273
+0.03435727295
+0.3921089477
+0.01999729899
+0.1420184458
+0.007315868986
+0.9103112176
+0.002750548989
+0.02476012929
+0.008735227148
+0.02086086147
+0.01127440765
+0.945756834
+0.0438419857
+0.1254926589
+0.09961778641
+0.08991181521
+0.0005551467047
+0.0125584353
+0.02660790305
+0.02184614055
+0.0002453480842
+0.00493079822
+0.3332687351
+0.2811694565
+0.0057784541
+0.2742534416
+0.5274841492
+0.1547940167
+0.06142596852
+0.05648700955
+0.0007671881236
+0.003571570831
+0.03607217091
+0.0167541817
+0.005032568017
+0.04174536117
+0.001946742797
+0.004602326437
+0.07192792858
+0.01070165194
+0.01177653447
+0.2021139636
+0.02561246009
+0.06806857425
+0.002233879608
+0.001874502037
+0.1246251857
+0.002167004311
+0.002230814398
+0.0003298427983
+0.01048111152
+0.01194467358
+0.03503641524
+0.008235205298
+0.06444832468
+0.001330749184
+0.002057968039
+0.002571863385
+0.02235969321
+0.02759728657
+0.007952400098
+0.05612376772
+0.03062533811
+0.004406071696
+0.005303237309
+0.02661261962
+0.008464443045
+0.1080086581
+0.01635902764
+0.0003768866882
+0.002316770644
+0.001027086882
+0.01484239498
+0.0496646523
+0.06173702718
+0.00374753775
+0.05780755447
+0.005960249821
+0.124414966
+0.08980581412
+6.934517155e-05
+0.004155603478
+0.007020877246
+0.0006146828211
+0.004395939226
+0.00932126954
+0.01827293021
+0.06483606307
+0.001183165289
+0.02690317103
+0.172411608
+0.09121007365
+0.002808424434
+0.0008116021429
+0.2877754006
+0.1191605306
+0.002792393449
+0.1449205273
+0.002787667958
+0.009762917434
+0.005270884225
+0.003720576242
+0.06481276649
+0.2217527575
+0.006807605447
+0.001331118391
+0.000574788423
+0.1237058325
+0.0001415136295
+0.006672630028
+0.03340909774
+0.02777101925
+0.005126767413
+0.003361768227
+0.01587319235
+0.01077871503
+7.818022003e-05
+0.002459493702
+0.006912212509
+0.3049355818
+0.001101895983
+0.01413879849
+0.001928243003
+0.00257284109
+0.0006065591892
+0.001173792285
+0.01084624819
+0.001615364685
+0.05052199305
+0.0001159415752
+0.04313722925
+0.1511714998
+0.0008297046561
+0.01369808434
+0.004004036628
+0.01218096805
+0.0009332958303
+0.05764862088
+0.003062194893
+0.03242143042
+0.01011803936
+0.001460850268
+0.05603917889
+0.04364793571
+0.009458979512
+0.001374426737
+0.0005523361757
+0.03546430759
+0.008460270439
+0.01402411591
+0.006789288914
+0.01321549249
+0.07989015908
+0.1715586432
+0.6776023209
+0.01009789709
+0.0006008529067
+0.01035782714
+0.08971726264
+0.07213687294
+0.0007715191966
+0.00222469604
+0.02399936062
+0.009578914053
+0.006282091644
+0.0215649524
+0.009519733319
+0.00244718961
+0.05370998992
+0.02693639164
+0.0003775919905
+0.0006374896922
+0.01161233704
+0.2240104001
+0.002029020687
+0.07115674556
+0.01556732327
+7.137055705e-05
+0.237849934
+0.01923762276
+0.05226016897
+0.0002618111329
+0.02867070752
+0.6610569739
+0.02020333808
+0.2363879769
+0.0001324968783
+0.05677688668
+0.004474397307
+0.0004546318197
+0.08696992729
+0.0002855141781
+0.008843802083
+0.0163578444
+0.2174149861
+0.003271979423
+0.001785868569
+0.02551307619
+0.001102548199
+0.0005790737605
+0.003599275216
+0.04426388975
+0.0008358588548
+0.02792257637
+0.02448033186
+0.0008711141376
+0.002987130744
+0.07275259968
+0.0166142121
+0.070334319
+0.1211648852
+0.01891685712
+0.1306820084
+0.009333021571
+0.02946098344
+0.01589736364
+0.05135472101
+0.0145280144
+0.0006419796186
+0.002334630175
+0.0007872686349
+0.006724727797
+0.003473286695
+0.1132264698
+0.01987116779
+0.0352610166
+0.001779117009
+0.002665663656
+0.005405127546
+0.0001559539725
+0.002158194556
+0.01146694504
+0.02826658255
+0.08006748441
+0.0002548016888
+0.0003122934243
+0.009570445324
+0.0004942723543
+0.06648523765
+0.001628216616
+0.119849136
+0.001060070103
+0.01963703495
+0.07056286528
+0.0005368186333
+0.00225750227
+0.00397837717
+0.0002422543956
+0.1334906412
+0.0003135317158
+0.001777230542
+0.004076795458
+0.01794745653
+0.1260188737
+0.005457832419
+0.1148627318
+0.01230784678
+0.04513758371
+0.0005451408022
+0.003801849545
+0.846810777
+0.006873137616
+0.004620769223
+0.0005557104296
+0.0001708459886
+0.02812706051
+0.001872458375
+0.0001576275708
+0.1260430066
+0.009912473225
+0.1988980099
+0.02242592585
+0.0007051038562
+0.003771544839
+0.009449143973
+0.006345049759
+0.007407698057
+0.01592705654
+7.474435727e-05
+0.2070839906
+0.1467972308
+0.002328069131
+0.1395240437
+0.006796657695
+0.393431369
+0.03116711417
+8.710727976e-05
+0.06180354375
+0.05781087016
+0.006238205705
+0.0237768586
+0.001231429297
+0.001560875389
+0.001588974583
+0.0453913843
+0.009780724853
+0.09601927637
+0.007137797962
+0.01188230511
+0.01648005029
+0.02161695513
+0.0001573526064
+0.0027682012
+0.00874754338
+0.3651646169
+0.1002228553
+0.0002591734262
+0.001065789102
+0.03832521806
+0.014314159
+0.004449558655
+0.1000251525
+0.003283528687
+0.1952467349
+0.03049709229
+0.01223176357
+0.00109995838
+0.003119551174
+0.000479078786
+0.008352942382
+0.003576383941
+3.32618531e-05
+0.01171386777
+0.002751109712
+0.02266028885
+0.004068349071
+0.5235259997
+0.00602198886
+0.006052655184
+0.00649004787
+0.001036909925
+0.234716406
+0.6334801869
+0.04783285304
+0.001362211096
+0.3818304541
+0.001368131973
+0.02688138979
+0.002984736531
+0.04464473052
+0.02025547801
+0.004794633992
+0.04715839218
+0.002488011171
+0.02002089996
+0.06044926698
+0.4044373758
+0.04435286382
+0.07659571814
+0.01435904419
+0.08614763688
+0.001941462016
+0.2704947355
+0.00533087839
+0.0034809809
+0.09353018229
+0.08284654473
+0.03731098966
+0.002125721984
+0.1075153051
+0.03281230562
+0.0007205679212
+0.01385806679
+0.02448592918
+0.126017693
+0.1270088238
+0.08274687924
+0.004113485208
+0.002665260666
+0.003243672995
+0.00720176049
+0.01468175668
+0.05670614547
+0.05819356507
+0.05221509553
+0.001984760429
+0.001712319877
+0.01165795842
+0.002217518174
+0.06206427082
+0.003451581415
+0.1686180759
+0.1410606645
+0.05965489409
+0.003162566647
+0.02735433694
+0.01980034142
+0.04106595124
+0.0009536722187
+0.03186535814
+0.0002092045381
+0.0209480289
+0.0004154131238
+0.05287674715
+0.01721346491
+0.04831368379
+0.005928089112
+0.0009921839984
+0.00104855931
+0.003308044574
+0.01887132961
+0.002732780172
+0.02206839785
+0.09105154756
+0.0002304498237
+0.0837819281
+0.0003428965929
+0.005843786163
+0.001307027566
+0.02347488932
+0.004109840131
+0.1850494717
+0.00355462023
+0.03398503258
+0.00385533173
+0.006707922816
+0.01515474848
+0.002871878238
+0.01718785563
+0.02112344269
+0.07094659116
+0.04033506653
+0.01011538465
+0.0001245337623
+0.01450046569
+0.001135893088
+0.2099198325
+0.0007075079492
+0.003888050637
+0.03421178219
+0.05746908251
+0.04992864794
+0.0420129817
+0.004126931766
+0.1607763097
+0.005803439191
+0.0212826664
+0.05342293025
+0.5007213099
+0.03853644065
+0.008485781791
+0.110333769
+0.01663034468
+0.004415194607
+0.01370800147
+0.002109021098
+0.00185265137
+0.0008731875064
+0.03121386458
+0.01865899661
diff --git a/t/ME_data/ME_h_mtinf_virt.dat b/t/ME_data/ME_h_mtinf_virt.dat
new file mode 100644
index 0000000..0356a8d
--- /dev/null
+++ b/t/ME_data/ME_h_mtinf_virt.dat
@@ -0,0 +1,807 @@
+0.01662434134
+0.7179001689
+0.04047656957
+0.0004258285649
+0.005425059975
+0.213143163
+0.01935053583
+0.6205040683
+0.100073504
+0.3419058888
+0.0006317599788
+0.1075071246
+0.03104929693
+0.0005546156527
+0.04290558797
+0.006743811354
+0.08867310363
+0.0001009432049
+0.1774946232
+0.0288873198
+0.001579852552
+0.01108657204
+0.09101156921
+0.4445385064
+0.3502383374
+0.244266185
+0.0002987071936
+0.6309631317
+0.0002339375507
+0.1046709758
+0.000236662158
+0.02175004336
+0.5267296331
+0.5935927351
+0.000820969112
+0.08421862974
+0.03046140179
+0.2249239021
+0.1611542204
+0.06185086449
+0.01623488231
+0.02472192563
+0.4131822125
+0.4818948365
+0.02838080364
+0.0001725504184
+0.006406424077
+0.3486267176
+0.00579279871
+0.002955242958
+0.06504845272
+0.1449764
+0.09498299
+0.1574758418
+0.4272544994
+0.004274650836
+0.0002911726242
+0.1606533434
+0.0140888918
+0.001428671716
+0.3758874066
+0.2412059029
+0.0002209780599
+0.2052478202
+0.1546352079
+0.1669080655
+0.3039886236
+0.09541365334
+0.1478568963
+0.001397725796
+0.01072960511
+0.002472713471
+0.001595930736
+0.0016082906
+5.912331181e-05
+0.3467767171
+0.0137615296
+0.6029696792
+0.004869540421
+0.3559515345
+0.03429371904
+0.007916499288
+4.034951072e-05
+0.1389880183
+0.01851541133
+0.09685971789
+0.04138558845
+0.02112585732
+0.6079785877
+0.06691592442
+0.1242388922
+0.01017697497
+0.1150165441
+0.4757460371
+0.001898779876
+0.001673489565
+0.004725329175
+0.066322844
+0.4387965748
+0.0371710706
+0.001529220023
+0.02929795689
+0.5561341
+0.02550681536
+0.001516893606
+0.003616785056
+0.9637438736
+0.470574209
+0.05818800779
+0.1980490615
+0.05257075136
+2.849260669e-05
+0.002013523423
+0.02793346797
+0.012864784
+0.09224129796
+0.1655755265
+0.002133089414
+0.04307483761
+0.03904253638
+0.1383494338
+0.08503009334
+0.0001923850231
+0.001922184204
+0.2752991666
+0.2820333776
+0.0002977758805
+0.003178480355
+0.3593690812
+0.1023852419
+0.386851422
+0.1375480981
+0.008196974805
+0.1699166028
+0.01141797028
+0.05355620996
+0.007469041444
+3.482547619e-05
+0.01922575361
+0.0003997662889
+0.002430022988
+0.08388910742
+0.001542591393
+0.006466218835
+0.04360360577
+0.2639980287
+0.6976705056
+0.0002445817664
+0.4985256463
+0.6123171489
+0.0005214181065
+0.1797783192
+0.00476323279
+0.1254447362
+0.03406351353
+0.01545232336
+0.0717026209
+0.01478486185
+0.000216647488
+0.8057168178
+0.2021759239
+0.001217796493
+0.0005522586186
+0.1168431672
+0.01769803536
+0.08715824941
+0.000906500616
+0.07777267158
+0.004362541932
+0.03193981557
+0.00798542822
+0.2673105795
+3.081776622e-05
+0.7124810363
+0.02276144578
+0.01453381751
+0.5462736385
+0.3137173986
+0.02403359478
+0.9432341629
+0.1164091088
+0.6377777246
+0.007432896682
+0.0006406616198
+0.00222826229
+0.06914282213
+0.06563846996
+0.1457776778
+0.006710999568
+0.0004747693247
+0.07454026318
+0.04040004254
+0.5353037028
+0.001489246287
+0.004812923223
+0.6616056685
+0.002000243406
+0.02168409472
+0.7190623906
+0.02041516624
+0.0576490182
+0.9582378175
+0.08574017198
+0.1475952836
+0.02706760046
+0.3948608926
+0.06184248381
+0.01198790379
+0.02927898557
+0.6302401225
+0.02990972263
+0.3153495592
+0.3790112331
+0.4833412149
+0.9792567062
+0.01380454768
+0.004950955418
+0.2415531168
+7.405146937e-05
+0.007297029393
+0.1180961543
+0.0004594530257
+0.8456272826
+0.05519880329
+0.03346307876
+0.1696729309
+0.0003626388978
+0.004279781398
+0.7725437944
+0.6344602462
+0.01744206506
+0.1995964494
+0.1904959469
+9.978631993e-05
+0.8064741515
+0.004686487455
+0.007780870502
+0.01697444115
+0.0008903400434
+0.01016659849
+0.00534557777
+0.0932396926
+0.06854107785
+0.1238468734
+0.002733561451
+0.004776707616
+0.03424964841
+0.01847470254
+0.374671649
+0.004232343574
+0.01948348938
+0.1883200179
+0.3510525172
+0.2978681231
+0.008860377516
+0.0009794958374
+0.004579022969
+0.07907947246
+0.0001732720476
+0.00166257151
+0.06397885031
+0.0004139767188
+0.001569915946
+0.001262721752
+4.715127079e-05
+7.300127451e-05
+0.3750162158
+0.1609615894
+0.09388845166
+0.08496015731
+0.02440082263
+0.003865766974
+0.004588895181
+0.008922905707
+0.1435473885
+0.0003129173765
+0.1031668826
+0.00354618094
+0.0282414908
+0.002734099419
+0.02401911574
+0.004070680353
+0.1978157319
+0.003675801759
+0.0009828397496
+0.002082536237
+0.0001297062007
+7.604274803e-05
+0.01254935753
+0.07493431516
+0.2785103593
+0.004724543628
+0.0002868421366
+0.002130119508
+0.0266643553
+0.000120254412
+0.0003755804814
+0.01612228807
+0.02249928765
+0.02857726966
+0.02712333552
+0.0095300289
+0.0007159465984
+0.0002315950653
+0.06843092104
+0.0001605973149
+0.0003810087733
+0.06942607321
+0.07022608395
+0.00589755829
+0.0004348479355
+0.1055977044
+0.003182152803
+0.0005043804569
+0.001151170603
+3.623570705e-05
+0.0001531825217
+0.02221916741
+0.6318564649
+0.737530928
+0.01858449733
+0.01011822529
+0.0008282015437
+0.0184924939
+0.004099815695
+0.001657148851
+0.002055013352
+0.3345175543
+0.005038823484
+0.3305900619
+0.2618444599
+0.03235484984
+0.0057504485
+0.01207241511
+0.01944498271
+0.001128432458
+0.0114580353
+0.003221366185
+0.0370025889
+0.9862719127
+0.01297665139
+0.06972757114
+0.001105185658
+2.404730886e-05
+1.127528807e-05
+0.0001053432798
+0.01021238928
+0.001040564122
+0.001157619411
+0.4619523167
+0.00537302234
+0.2255674674
+0.0003913467938
+0.01498837318
+0.2841407679
+0.001628480065
+0.2637858282
+0.0001581537808
+0.0005316496151
+0.02827646304
+0.07840835924
+0.03802476842
+0.001169523762
+0.001472988643
+0.001567068288
+0.7788469446
+0.0005293213363
+0.3617100391
+0.02497724876
+0.00449833716
+0.0252371028
+0.0219080124
+0.150902159
+0.01827836358
+0.09839386242
+0.0002790677338
+0.0004535503747
+0.01795417855
+0.009891511483
+0.2025449002
+0.001650548963
+0.0006466716979
+0.007798591624
+0.1399544318
+4.358483901e-05
+0.03518734048
+0.099259559
+0.004196046439
+0.000574064215
+0.1385585035
+0.9726045511
+0.0004711886641
+0.02120674696
+0.0002744896126
+0.02733755078
+0.0008886521659
+0.02573475004
+0.00517720064
+0.001325380956
+0.2224279
+2.541221083e-05
+0.0002234868643
+0.002980094645
+0.0001085417483
+0.0250742197
+0.005557187841
+0.0001337517782
+0.604845727
+0.001628400435
+0.001960703811
+0.08853583057
+0.2400504214
+0.003893588292
+0.001067030752
+0.2587486305
+0.1021079152
+0.0001568823857
+0.0001232537413
+0.3344933587
+0.06391243589
+0.05493786631
+0.0007668901925
+0.1831019857
+0.3264190974
+0.01821006486
+0.009862857859
+0.009247421843
+0.00400128441
+0.1282729585
+0.0255979217
+0.001377360771
+0.02021404313
+0.0004915884552
+0.006280309444
+0.03739034133
+0.002336495032
+0.09862448357
+0.0004374356376
+0.001522931694
+0.0009926315542
+0.05912839518
+0.03328358881
+0.0005314503463
+0.006066121274
+0.0004885794392
+0.01778552165
+0.004411282075
+0.0988205768
+0.009729080864
+0.0822487813
+0.0006529525098
+0.001000583457
+0.001255082254
+0.001565280913
+0.0004412219315
+0.01868727611
+0.002355505526
+0.000458596405
+0.002807981351
+0.1379690186
+0.7548897273
+0.002172144174
+0.04146132284
+0.0002416044385
+5.492820394e-05
+0.7254353535
+0.007227046121
+0.0001212496579
+0.4932499798
+0.4072325551
+0.006070046021
+0.007603198964
+0.01023817101
+0.004684971694
+0.00960303679
+0.0007897219074
+0.0008646854292
+0.01303911975
+0.01173291393
+0.0009463395508
+0.006406806121
+0.01045590023
+0.001477670437
+0.0004659680958
+0.2284200248
+0.01627265716
+0.002358607556
+0.01041835449
+0.007605665203
+0.008295297276
+0.09011152387
+0.0001579648534
+0.03452192249
+0.002258745587
+0.001339614977
+0.06268145402
+0.0002287427586
+0.0006670205183
+0.0006295945427
+0.001047076716
+0.007862129702
+0.001627037464
+0.001085642139
+0.0002450576186
+0.004325909623
+0.0009887935475
+0.001120014728
+0.2299102575
+0.0779805692
+0.0009313587733
+0.01607891099
+0.0001461741141
+0.003285469885
+0.0001923714268
+0.0007825726617
+0.0784405658
+0.1063621464
+0.001835956497
+0.007012371335
+0.07733193546
+0.000475147389
+0.001445122469
+0.1790609649
+0.110432285
+0.6971452481
+0.2283139583
+0.004105267608
+0.02030571555
+0.08379750836
+0.0006662905023
+0.009339295832
+0.005982429994
+0.01566551104
+0.006001459464
+0.002544421692
+0.1599062038
+0.009149373265
+0.0004314134536
+0.05541644114
+0.03367313015
+0.03709605034
+0.0001282720396
+0.00569603398
+0.0001137165113
+0.0002823374393
+0.01019789435
+0.2347228181
+9.696148743e-05
+0.0002771961442
+0.01552084835
+0.001503179616
+0.002432302343
+2.982754839e-05
+0.001151577771
+0.0001254294922
+0.0007836601643
+0.0003348416742
+2.464638218e-05
+0.03197152304
+0.01074535067
+7.736052385e-05
+0.01592110793
+0.0005490777825
+0.006703585044
+0.0001727924499
+0.0001741575849
+0.05452982555
+0.0005831692799
+1.229952442e-05
+0.003539469847
+0.0002607273237
+0.115506485
+0.005560200161
+0.007868848508
+0.02839605674
+0.000928627749
+0.0006722928183
+0.00747994137
+0.0462449202
+0.001763557921
+0.003859415223
+0.005376937753
+0.07573258544
+0.0009966446732
+0.02074748973
+0.02470811114
+0.0004816987613
+0.006172620056
+0.000514599941
+0.009955639047
+0.001870918895
+0.005094807535
+0.001522245621
+0.03905821945
+0.002291404811
+0.01997836326
+0.0001040190519
+7.933156157e-05
+0.0002861476976
+3.092530664e-05
+0.0001009959121
+4.798974528e-05
+0.0001520447973
+0.0004293922371
+0.0149581376
+0.02067872354
+0.0008001478215
+0.05922758669
+0.007003930234
+0.0009811017307
+0.000871428689
+0.000703094692
+0.002783539812
+0.0003356779523
+0.001872068978
+0.001791636322
+0.0009610612235
+0.002720559686
+0.01381430586
+0.001987094067
+0.001535495013
+6.225685945e-05
+0.04433970578
+0.0006204235315
+0.000252331857
+0.00026930813
+0.01152759369
+0.000111544673
+0.001913927645
+0.003812673725
+0.0007992870192
+0.0004819914195
+0.01326334606
+0.009150214882
+0.001034923254
+0.02347420876
+0.0001434995974
+0.161855191
+0.0113809689
+0.004841132315
+0.006356781164
+0.0004181369809
+0.001055011334
+0.04345832279
+0.009427869339
+0.0008692281125
+0.006404647105
+0.001440468332
+0.0006533070573
+0.003067013257
+6.119505082e-05
+0.004871597119
+0.01167597899
+0.005286978607
+0.001168304721
+0.003195194363
+0.004692840229
+0.03244356462
+0.0001771613526
+0.02417265143
+0.004526476236
+0.036096631
+0.003201253089
+0.0001422131247
+0.0004107992628
+0.0003640091047
+0.04052632976
+0.001727094259
+0.002931243298
+0.009528080981
+8.693893929e-05
+0.01052636987
+8.635645831e-06
+0.0001028852028
+0.02752513702
+0.1926992609
+0.005295740367
+9.496124624e-05
+0.0002658753395
+4.600035093e-05
+0.1451066601
+0.0012877382
+0.000131605255
+0.002314882542
+0.003039318518
+1.612809171e-05
+0.002475950491
+5.011890845e-05
+0.002103581465
+0.2631043318
+0.0005905271134
+0.00119044489
+0.003450493161
+0.001735567184
+0.08522507949
+0.06485287653
+0.006009262732
+0.0001073098231
+0.01233283828
+0.0006967474866
+0.0001337538219
+9.46055412e-05
+0.06966340638
+0.0005414308727
+0.0008353409363
+7.030802856e-05
+0.004649538434
+0.002481942715
+0.0005198360343
+3.813525743e-05
+0.0005541009041
+0.001164648
+0.002108421633
+0.003072143688
+0.004096663968
+0.0002142925594
+0.0008282696553
+0.214159596
+0.0001257814795
+0.0002479992306
+6.61227613e-05
+0.103009921
+0.0008378285098
+0.0001717800833
+0.0001121693081
+0.7059167817
+3.183689592e-05
+0.01136012383
+0.0001389159215
+0.001213668521
+0.01951618357
+0.0007273993708
+0.0008289325503
+5.201497164e-05
+0.006417142536
+0.0005989693465
+0.003521172593
+0.0001543364684
+0.003027365071
+0.00363357141
+0.02694407012
+0.001596312599
+0.00738852532
+0.007270074311
+0.0011536742
+0.0008050028829
+6.310288562e-05
+0.0001820969893
+0.0178887604
+0.02815731475
+0.006876553655
+0.001769950662
+0.0004868440995
+0.0002029503564
+0.0002348604422
+0.0176873206
+4.002865616e-05
+9.006700615e-05
+0.0001874263398
+0.1151513191
+0.0008768519164
+0.01969842086
+0.000904912211
+0.00317133937
+0.01571292573
+2.434681979e-05
+0.000207351683
+0.0926043554
+0.001430061521
+0.0008010243139
+0.05001021857
+0.00482087589
+0.0008675277648
+1.168299161e-05
+0.0003996242653
+0.0003247712141
+0.001248197243
+0.001402060723
+0.008461155321
+0.00552528692
+0.0002916254992
+0.0009455326671
+0.002424023635
+0.02268929854
+0.02603439368
+0.0007525254743
+0.0001091868444
+0.01225143925
+0.005940794641
+0.02381508909
+0.000162901157
+0.001976777177
+0.001078398636
+0.001742649129
+0.003639814812
+0.2077161633
+7.741577089e-05
+0.001740198496
+0.004600610458
+0.0001285713314
+8.803561357e-05
+0.0351265114
+0.0002464097081
+0.01504942292
+0.04573814804
+0.0008764887373
+0.02763484081
diff --git a/t/ME_data/ME_jets_tree_virt.dat b/t/ME_data/ME_jets_tree_virt.dat
new file mode 100644
index 0000000..272f50c
--- /dev/null
+++ b/t/ME_data/ME_jets_tree_virt.dat
@@ -0,0 +1,742 @@
+0.0002153216478
+0.3300401577
+0.006798497441
+1.531782167e-05
+0.06887545422
+0.005272990683
+0.06448625064
+0.9366670986
+0.9172155467
+0.01293672789
+0.002779048234
+0.5831671559
+0.4224494823
+0.0001913451647
+0.001860241206
+0.6192212588
+0.09188261839
+0.1960638524
+0.03319778192
+0.00642763873
+0.06454872396
+0.007339042623
+0.04058840528
+0.01272498464
+0.1215284605
+0.01809739327
+0.006419089249
+0.8581062654
+8.527492205e-05
+0.02519179743
+0.245919353
+0.4537129303
+0.002217742366
+0.08896818712
+0.3940538854
+0.1042046541
+0.00677528344
+0.9001673094
+0.0193895242
+0.04015283838
+0.564685379
+0.05972807587
+0.01453480776
+0.001861070415
+0.002740358668
+0.0176152976
+0.003080469229
+0.0001833746131
+0.04746949786
+0.1509673423
+0.1407252514
+2.360426905e-05
+0.337099246
+0.3490031379
+0.01130071624
+0.1548728939
+0.02199028932
+0.2005016129
+0.1872305446
+0.02597385455
+0.04160619678
+0.03801670247
+0.0391597775
+0.0002994210502
+0.002315575554
+0.01270449907
+0.005170605124
+0.3889002869
+0.1791840381
+0.001255572981
+0.2637430497
+0.5128063455
+0.5875864465
+0.003294415292
+0.04828402658
+0.07215924518
+0.4409878597
+0.2497239045
+0.0001572577249
+0.4783632422
+0.03738487439
+0.655789647
+0.0007367625974
+0.01664964076
+0.0506270948
+0.9445178848
+0.5530333855
+0.5478039174
+0.08565372571
+0.4692807452
+0.0215744994
+0.06142010966
+0.3532997588
+0.01319540629
+0.01959701139
+0.03593438278
+0.2306678364
+0.0541102346
+0.01398094579
+0.002593692905
+0.05725941723
+0.2246487828
+0.7009005298
+0.04845701267
+0.6136201983
+0.1449763895
+0.04575102716
+0.7518872048
+0.05576500271
+0.433201951
+0.4113640437
+0.07874205039
+0.7215334555
+5.241680924e-05
+0.09659768351
+0.8683150417
+2.203953355e-05
+0.001417104321
+0.004631011482
+0.1559572832
+0.008153804863
+0.01816508287
+0.6132755689
+0.1098456401
+0.3446038076
+0.202826359
+0.01754308742
+0.1148693588
+7.491633937e-05
+0.2856325079
+0.05783065121
+0.03328823136
+0.2379487544
+0.23731351
+0.1994013538
+0.006405149296
+0.1011573884
+0.00047787116
+0.02718733298
+0.220732024
+0.0002524293703
+0.03579264016
+0.08858576171
+0.00334293769
+0.3309116088
+8.922913302e-05
+0.008502655341
+0.3414642892
+0.3630443101
+0.2559462421
+0.5210189384
+0.3014166342
+0.1969416681
+0.2636659977
+0.001617568038
+0.0008598147528
+0.31900747
+0.02978528332
+0.6361933668
+0.03324716339
+0.0002414576444
+0.32339713
+0.005616768484
+0.01094843461
+0.0001427421985
+0.00968918027
+0.3861291821
+0.3360637492
+0.0004634596472
+0.03716373936
+0.2609283978
+0.0003976423675
+0.08989623653
+0.5254944935
+0.03757517835
+0.003831631456
+0.007353988407
+0.002544796303
+0.08834591397
+0.009533700095
+6.356264727e-05
+0.1219975311
+0.4036908792
+0.002974625854
+0.0006116559554
+0.1403319155
+0.3520576816
+0.007784284414
+0.001636740886
+0.02046741669
+0.02545555479
+0.07589612786
+0.9711453135
+0.6602922273
+0.02690408107
+0.02739700678
+0.07349550299
+0.003746055146
+0.9587937702
+0.001968055813
+0.07734383537
+0.07342865576
+0.001603480866
+0.2319736749
+0.04361926615
+0.6462084097
+0.2456479615
+0.0009360773879
+0.003470160729
+0.2122192433
+0.642067156
+0.2043559306
+0.5789111613
+0.495870955
+0.4659456726
+0.03746540998
+0.6500614289
+0.1215648161
+0.0001011437121
+0.008834435568
+0.1129357437
+0.1007861025
+0.1387510968
+0.8419305275
+0.9560433055
+0.003211672506
+0.02866127946
+0.193085203
+0.1152287721
+0.5423108874
+0.001898738816
+0.05857418706
+0.0008536615112
+0.6827424029
+0.0005667461702
+0.006673677392
+0.2905918301
+0.01869385475
+0.001964995967
+0.001614053412
+0.8578577853
+0.03026357191
+0.0007471519671
+0.006518885317
+0.0007129290352
+0.007906013982
+0.0002023526764
+0.06602619847
+6.362469378e-05
+1.174883987e-05
+0.0006943559465
+0.01324977973
+1.49292266e-05
+5.20955119e-05
+0.0053511378
+0.00016422039
+0.003661688604
+0.0002670565146
+0.001726092912
+2.306538463e-05
+0.0001020935274
+0.001737889787
+0.08887917504
+0.106031677
+0.1523357208
+0.001111898245
+0.003337087766
+0.0006366001533
+2.757219415e-05
+0.08246960187
+0.0001644010322
+6.655040867e-05
+0.3159445549
+0.03221023466
+0.0002281931992
+0.001973698712
+0.0001356786259
+0.003557468547
+0.0002776585366
+0.09003756126
+0.0004319677165
+0.04380713462
+0.02518757424
+0.0001566161372
+3.349860713e-05
+0.01206404834
+0.0008138435632
+0.004742387274
+0.006340972247
+0.002283565084
+0.01674640632
+0.000494501946
+8.750043884e-05
+0.002329121139
+0.01182858192
+2.530791726e-05
+0.0008417538986
+0.0004143232728
+5.298600708e-05
+0.001131531252
+0.007317097489
+0.008694069135
+3.113761826e-05
+0.001338673975
+0.0007600955284
+0.0007972154702
+0.03613369497
+0.1656523655
+2.945638099e-05
+0.009258602594
+0.00187207304
+0.0004755032885
+0.01951639947
+9.215262969e-05
+0.01335558868
+0.0004033257479
+0.0003208816561
+0.0003125971902
+0.008208886056
+0.003952824168
+0.001528234436
+0.002237546856
+0.003721718122
+0.002684346926
+0.007250930971
+8.666989643e-05
+5.359497313e-05
+0.00242068795
+0.005949180111
+0.06652343321
+6.591677858e-06
+0.02787987577
+0.2199829374
+0.006666209128
+0.0002686800331
+0.3096898543
+0.003385402799
+0.009012577723
+0.000997424284
+0.01586356237
+0.005958670927
+0.009034593067
+0.009034593067
+0.009034593067
+0.009034593067
+0.009034593067
+0.009034593067
+4.985755915e-05
+0.004597536706
+0.008509349686
+0.009282963292
+0.009282963292
+0.009282963292
+0.009282963292
+0.009282963292
+0.009282963292
+0.04837334211
+0.0003700938868
+0.02173110756
+0.002548251912
+0.001526089341
+0.03650028779
+0.06417306965
+0.06417306965
+0.06417306965
+0.06417306965
+0.06417306965
+0.002796843325
+0.05046874026
+0.1304002953
+0.1304002953
+0.1304002953
+0.1304002953
+0.1304002953
+0.1304002953
+1.508668291e-05
+1.808742752e-05
+0.0007098741328
+0.08677641521
+0.08677641521
+0.08677641521
+0.08677641521
+0.08677641521
+0.002133086801
+0.005461368811
+0.002238542855
+0.1063856684
+0.02035873835
+6.741993294e-05
+0.08655726747
+0.0175388196
+0.0007881283065
+0.02232739447
+0.09531599868
+0.0003403477595
+0.003274172879
+0.4173844313
+0.03712979535
+0.006626386155
+0.00807346099
+0.00807346099
+0.00807346099
+0.00807346099
+0.00807346099
+0.0001266919041
+8.292127254e-05
+0.000683167877
+0.001833543124
+0.001082021974
+0.006359203241
+0.01419590594
+0.000271176986
+0.07144368551
+0.1331952432
+0.1331952432
+0.1331952432
+0.1331952432
+0.1331952432
+0.06650425649
+0.07543701424
+0.07543701424
+0.07543701424
+0.07543701424
+0.07543701424
+5.888806387e-06
+0.3093189701
+0.04953826695
+0.293756359
+0.0001960673094
+0.02671379506
+0.05507876864
+0.001549667073
+0.03825034401
+0.0007239241094
+0.0003601888597
+0.0747567715
+0.02254870569
+0.0007835607802
+0.0002269854713
+0.0533116194
+0.1003974027
+6.964896212e-05
+0.2266324087
+0.116170803
+0.07596159409
+6.365630613e-05
+0.004654165576
+0.07040026682
+0.1284471581
+0.0003579759858
+0.001067824795
+0.00956282702
+0.05548766754
+0.1122692972
+0.06560438171
+1.635727247e-05
+0.0001051378647
+0.004176616755
+0.001509291836
+0.0002350585354
+0.0005436584898
+0.0006996860562
+0.0006364624577
+0.003372988047
+0.02457702389
+0.06117564323
+0.000207317767
+0.009454588985
+0.0008741441529
+0.0002669907265
+0.1737883465
+0.01328400128
+0.2846455699
+0.1075161843
+0.1166926052
+0.01221530018
+0.04712521428
+0.0004119862922
+0.0001261585394
+0.2527259665
+0.000970803983
+0.0004702186129
+0.0001361062892
+0.0003281065416
+0.005468612628
+0.004621189381
+0.01828926878
+0.202328081
+0.0001473664515
+0.008025972152
+0.003807214367
+0.02418824503
+0.1714509902
+0.001200970593
+0.01626506123
+0.001630875493
+0.001304379277
+0.04391471055
+0.1860646537
+8.693899288e-05
+0.0002791272327
+0.3330721924
+0.01631138918
+0.03473921195
+4.702803028e-05
+0.008892921999
+0.007168727704
+0.01324033157
+0.02572884367
+0.003998231318
+0.002581906892
+0.0005413901157
+0.0207720768
+9.930035488e-05
+0.003607863241
+0.0004990751531
+1.930408957e-05
+0.002198409619
+0.0001590747903
+0.002615047406
+0.001528782386
+0.0009307935499
+0.0001050985695
+2.622144256e-05
+5.287851833e-05
+0.06713418402
+0.001882901217
+0.00107445267
+5.42405702e-05
+0.0007892189113
+0.000347380468
+0.001050464688
+0.0001099056263
+0.004935809679
+0.01077044731
+0.003781983878
+0.0005454851237
+0.04156059643
+0.0002019690106
+0.0001889240934
+0.007424754257
+1.762350993e-05
+0.0005052256959
+0.0001903167542
+4.12286657e-05
+0.0001760263612
+0.0007158337818
+0.000168937997
+0.0001663111813
+0.007338406995
+0.007409105374
+2.527202258e-05
+7.07392061e-05
+0.0001987372283
+0.0002032604745
+5.148376726e-05
+0.0003651292287
+0.004474531903
+0.002821776796
+0.0009222822631
+0.004440834672
+5.427811403e-05
+4.013502337e-05
+0.009678853639
+0.000797754776
+0.0006882399067
+7.302418374e-05
+7.838283928e-05
+7.628260709e-05
+0.004661881543
+0.00924566307
+0.0001882471694
+7.122615937e-05
+0.0001314294604
+0.0002819191724
+0.001944221914
+0.0001149769893
+0.004186581726
+0.001006436765
+1.326289708e-05
+0.002760857394
+0.0002721397139
+0.002115236276
+0.0004529352488
+1.015833517e-05
+0.0008434604603
+0.001798901742
+1.339841789e-05
+0.0004836643907
+0.0111286699
+0.001773641322
+0.03243671516
+0.00145989194
+0.001366325039
+0.009297981971
+0.001359080092
+0.0003288230907
+0.0007026915529
+0.0001174594035
+0.02363124055
+5.020130626e-05
+9.014637939e-06
+0.0004167854275
+0.0001528110268
+3.439459324e-05
+0.0001258172963
+0.0008618647139
+0.01196817525
+0.0003022315921
+0.0009482756117
+5.361244262e-05
+0.0002580137397
+0.002002325523
+8.760368605e-05
+0.006789308293
+0.0001723407248
+0.001360395044
+0.007122552909
+0.0004271045772
+0.004799975177
+0.001123352682
+0.002611430068
+0.0001533467983
+1.462743371e-05
+0.0009675999525
+0.0006110024693
+0.0001196655564
+0.0003976285074
+0.01158416454
+3.841588664e-05
+0.0002362050244
+0.001022939702
+0.0003382829156
+0.000336999653
+0.001913543004
+0.004669357191
+0.00695766092
+0.000642953913
+0.06449413968
+0.0002782200464
+0.1493711794
+0.0009877681456
+0.0003246663737
+0.0004375408972
+8.933996218e-05
+0.0001441739091
+0.003128945657
+9.389594106e-05
+0.00495007968
+0.0004998870934
+0.001564387903
+0.08181738788
+6.538062707e-05
+0.0001533546192
+9.57161446e-05
+0.0003127369743
+0.005391324756
+3.636394328e-05
+0.003734357313
+0.006916883702
+0.000164965544
+6.817659683e-05
+0.001258290425
+0.004986871586
+0.008046923645
+0.0001220622317
+0.00305106006
+0.0001023713034
+7.965890145e-05
+0.0008618952404
+0.0215477224
+9.381787376e-05
+0.0003298131621
+0.001895394907
+0.01000633994
+0.000571154321
+0.007393596459
+0.0001522594453
+0.002138598731
+0.0005221566576
+8.327964543e-05
+0.0002957209268
+7.531197279e-05
+0.0005370387738
+0.005710668783
+0.0009243056629
+0.000557519798
+0.006230307605
+0.003085590481
+0.0004056357113
+0.0001694977055
+0.000328793704
+8.106279318e-06
+8.638867112e-05
+0.004413188068
+0.0005265138118
+0.004685203051
+0.0165763405
+0.009232014488
+0.004245266203
+3.988345829e-05
+0.000533785769
+0.0005991731426
+0.01562812305
+8.170579608e-05
+4.907693823e-05
+0.001044393666
+0.0193241317
+0.0003478772548
+0.005108688148
+0.06429618767
+0.1926992524
+0.2795690604
+0.2795690604
+0.2795690604
+0.2795690604
+0.2795690604
+0.2795690604
+0.4296857119
+0.4296857119
+0.4296857119
+0.4296857119
+0.4296857119
+0.4296857119
+8.295204025e-05
+0.001112311161
+0.01086795401
+0.1258224136
+0.1258224136
+0.1258224136
+0.1258224136
+0.1258224136
+0.05030414172
+0.05030414172
+0.05030414172
+0.05030414172
+0.05030414172
+0.001971014148
+0.001971014148
+0.001971014148
+0.001971014148
+0.001971014148

File Metadata

Mime Type
text/x-diff
Expires
Sat, Dec 21, 2:23 PM (12 h, 9 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4016249
Default Alt Text
(124 KB)

Event Timeline